mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Fixed issue 775.
Fixed issue 767. The fix for issue 767 was to standardise spray bottle code (to some extent). If any issues come up with spray bottles, pepper spray, or chem sprayers, report them to me. Cyborgs now recharge their pacid and lube, as the size of their bottles was quartered. Changed the flash item_state to "flashbang", as it looks exactly like a flash. There's some more grammar and text clean up too, mostly with crates and closets. Finally, fixed some pipes in virology, and changed the librarian's den so the bookcases are at the top. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4394 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -1899,21 +1899,6 @@
|
||||
// Hydroponics Tools
|
||||
// *************************************
|
||||
|
||||
/obj/item/weapon/plantbgone // -- Skie
|
||||
desc = "<I>Kill those pesky weeds!</I>"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
name = "bottle of Plant-B-Gone"
|
||||
icon_state = "plantbgone"
|
||||
item_state = "plantbgone"
|
||||
flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
var/empty = 0
|
||||
|
||||
|
||||
/obj/item/weapon/weedspray // -- Skie
|
||||
desc = "It's a toxic mixture, in spray form, to kill small weeds."
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
return
|
||||
|
||||
/atom/proc/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (!(istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) && !(istype(W, /obj/item/weapon/cleaner)) && !(istype(W, /obj/item/weapon/chemsprayer)) && !(istype(W, /obj/item/weapon/pepperspray)) && !(istype(W, /obj/item/weapon/plantbgone)) && !(istype(W, /obj/item/weapon/packageWrap)) && !istype(W, /obj/item/device/detective_scanner))
|
||||
if (!(istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) && !(istype(W, /obj/item/weapon/reagent_containers/spray)) && !(istype(W, /obj/item/weapon/packageWrap)) && !istype(W, /obj/item/device/detective_scanner))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "\red <B>[src] has been hit by [user] with [W]</B>"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/nuclearbomb
|
||||
name = "\improper Nuclear Fission Explosive"
|
||||
desc = "Uh oh. RUN!!!!"
|
||||
name = "Nuclear Fission Explosive"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "nuclearbomb0"
|
||||
density = 1
|
||||
|
||||
@@ -689,7 +689,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
user << "-Nutrition level: \blue [src.nutrilevel]/10"
|
||||
user << ""
|
||||
|
||||
else if (istype(O, /obj/item/weapon/plantbgone))
|
||||
else if (istype(O, /obj/item/weapon/reagent_containers/spray/plantbgone))
|
||||
if(src.planted && src.myseed)
|
||||
src.health -= rand(5,20)
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
user << "\red It's broken!"
|
||||
return 1
|
||||
else if(src.dirty==100) // The microwave is all dirty so can't be used!
|
||||
if(istype(O, /obj/item/weapon/cleaner)) // If they're trying to clean it then let them
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner)) // If they're trying to clean it then let them
|
||||
user.visible_message( \
|
||||
"\blue [user] starts to clean the microwave.", \
|
||||
"\blue You start to clean the microwave." \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/recharge_station
|
||||
name = "Cyborg Recharging Station"
|
||||
name = "cyborg recharging station"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "borgcharger0"
|
||||
density = 1
|
||||
@@ -55,7 +55,7 @@
|
||||
R.cell.charge = R.cell.maxcharge
|
||||
return
|
||||
else
|
||||
R.cell.charge += 200
|
||||
R.cell.charge = min(R.cell.charge + 200, R.cell.maxcharge)
|
||||
return
|
||||
|
||||
go_out()
|
||||
@@ -102,7 +102,7 @@
|
||||
//Service
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/condiment/enzyme))
|
||||
if(O.reagents.get_reagent_amount("enzyme") < 50)
|
||||
O.reagents.add_reagent("enzyme", 1)
|
||||
O.reagents.add_reagent("enzyme", 2)
|
||||
//Medical
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/glass/bottle/robot))
|
||||
var/obj/item/weapon/reagent_containers/glass/bottle/robot/B = O
|
||||
@@ -117,6 +117,15 @@
|
||||
if(R.module)
|
||||
R.module.respawn_consumable(R)
|
||||
|
||||
//Emagged items for janitor and medical borg
|
||||
if(R.module.emag)
|
||||
if(istype(R.module.emag, /obj/item/weapon/reagent_containers/spray))
|
||||
var/obj/item/weapon/reagent_containers/spray/S = R.module.emag
|
||||
if(S.name == "Polyacid spray")
|
||||
S.reagents.add_reagent("pacid", 2)
|
||||
else if(S.name == "Lube spray")
|
||||
S.reagents.add_reagent("lube", 2)
|
||||
|
||||
|
||||
verb
|
||||
move_eject()
|
||||
|
||||
@@ -152,11 +152,11 @@
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.remove_fuel(0,user))
|
||||
user << "\blue You need more welding fuel to complete this task."
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message("\red [src] has been cut apart by [user.name] with the weldingtool.", 3, "\red You hear welding.", 2)
|
||||
M.show_message("<span class='notice'>\The [src] has been cut apart by [user] with \the [WT].</span>", 3, "You hear welding.", 2)
|
||||
del(src)
|
||||
return
|
||||
|
||||
@@ -173,11 +173,11 @@
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.remove_fuel(0,user))
|
||||
user << "\blue You need more welding fuel to complete this task."
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
src.welded =! src.welded
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message("\red [src] has been [welded?"welded shut":"unwelded"] by [user.name].", 3, "\red You hear welding.", 2)
|
||||
M.show_message("<span class='warning'>[src] has been [welded?"welded shut":"unwelded"] by [user.name].</span>", 3, "You hear welding.", 2)
|
||||
else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
@@ -201,7 +201,7 @@
|
||||
return
|
||||
step_towards(O, src.loc)
|
||||
if(user != O)
|
||||
user.show_viewers("\red [user] stuffs [O] into [src]!")
|
||||
user.show_viewers("<span class='danger'>[user] stuffs [O] into [src]!</span>")
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
return
|
||||
|
||||
if(!src.open())
|
||||
user << "\blue It won't budge!"
|
||||
user << "<span class='notice'>It won't budge!</span>"
|
||||
if(!lastbang)
|
||||
lastbang = 1
|
||||
for (var/mob/M in hearers(src, null))
|
||||
@@ -226,7 +226,7 @@
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(!src.toggle())
|
||||
usr << "\blue It won't budge!"
|
||||
usr << "<span class='notice'>It won't budge!</span>"
|
||||
|
||||
/obj/structure/closet/verb/verb_toggleopen()
|
||||
set src in oview(1)
|
||||
@@ -239,4 +239,4 @@
|
||||
if(ishuman(usr))
|
||||
src.attack_hand(usr)
|
||||
else
|
||||
usr << "\red This mob type can't use this verb."
|
||||
usr << "<span class='warning'>This mob type can't use this verb.</span>"
|
||||
|
||||
@@ -29,13 +29,13 @@
|
||||
src.locked = !src.locked
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if((O.client && !( O.blinded )))
|
||||
O << "\blue The locker has been [src.locked ? null : "un"]locked by [user]."
|
||||
O << "<span class='notice'>The locker has been [locked ? null : "un"]locked by [user].</span>"
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
user << "<span class='notice'>Access Denied</span>"
|
||||
|
||||
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(src.opened)
|
||||
@@ -43,12 +43,12 @@
|
||||
if(src.large)
|
||||
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
|
||||
else
|
||||
user << "The locker is too small to stuff [W] into!"
|
||||
user << "<span class='notice'>The locker is too small to stuff [W] into!</span>"
|
||||
user.drop_item()
|
||||
if(W)
|
||||
W.loc = src.loc
|
||||
else if(src.broken)
|
||||
user << "\red It appears to be broken."
|
||||
user << "<span class='notice'>The locker appears to be broken.</span>"
|
||||
return
|
||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
broken = 1
|
||||
@@ -63,10 +63,10 @@
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message("\blue The locker has been sliced open by [user] with an energy blade!", 1, "\red You hear metal being sliced and sparks flying.", 2)
|
||||
O.show_message("<span class='warning'>The locker has been sliced open by [user] with an energy blade!</span>", 1, "You hear metal being sliced and sparks flying.", 2)
|
||||
else
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message("\blue The locker has been broken by [user] with an electromagnetic card!", 1, "You hear a faint electrical spark.", 2)
|
||||
O.show_message("<span class='warning'>The locker has been broken by [user] with an electromagnetic card!</span>", 1, "You hear a faint electrical spark.", 2)
|
||||
else
|
||||
togglelock(user)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
src.icon_state = src.icon_opened
|
||||
src.opened = 1
|
||||
else
|
||||
user << "\blue It's welded shut!"
|
||||
user << "<span class='notice'>The locker is welded shut!</span>"
|
||||
if(world.time > lastbang+5)
|
||||
lastbang = world.time
|
||||
for(var/mob/M in hearers(src, null))
|
||||
@@ -121,4 +121,4 @@
|
||||
if (!opened)
|
||||
togglelock(usr)
|
||||
else
|
||||
usr << "\red This mob type can't use this verb."
|
||||
usr << "<span class='warning'>This mob type can't use this verb.</span>"
|
||||
@@ -120,7 +120,7 @@
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
return
|
||||
@@ -150,7 +150,7 @@
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
|
||||
@@ -188,8 +188,8 @@
|
||||
density = 1*/
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/plantbgone(src)
|
||||
new /obj/item/weapon/plantbgone(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
|
||||
new /obj/item/weapon/minihoe(src)
|
||||
// new /obj/item/weapon/weedspray(src)
|
||||
// new /obj/item/weapon/weedspray(src)
|
||||
@@ -264,20 +264,20 @@
|
||||
/obj/structure/closet/crate/secure/attack_hand(mob/user as mob)
|
||||
if(locked && !broken)
|
||||
if (allowed(user))
|
||||
user << "\blue You unlock the [src]."
|
||||
user << "<span class='notice'>You unlock \the [src].</span>"
|
||||
src.locked = 0
|
||||
overlays = null
|
||||
overlays += greenlight
|
||||
return
|
||||
else
|
||||
user << "\red It's locked."
|
||||
user << "<span class='notice'>\The [src] is locked.</span>"
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/card) && src.allowed(user) && !locked && !opened && !broken)
|
||||
user << "\red You lock the [src]."
|
||||
user << "<span class='notice'>You lock \the [src].</span>"
|
||||
src.locked = 1
|
||||
overlays = null
|
||||
overlays += redlight
|
||||
@@ -290,7 +290,7 @@
|
||||
playsound(src.loc, "sparks", 60, 1)
|
||||
src.locked = 0
|
||||
src.broken = 1
|
||||
user << "\blue You unlock the [src]."
|
||||
user << "<span class='notice'>You unlock \the [src].</span>"
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -783,7 +783,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
P.overlays = null
|
||||
P.overlays += image('icons/obj/pda.dmi', "pda-r")
|
||||
else
|
||||
U << "ERROR: Server isn't responding."
|
||||
U << "<span class='notice'>ERROR: Server isn't responding.</span>"
|
||||
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_id()
|
||||
@@ -795,9 +795,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(id)
|
||||
remove_id()
|
||||
else
|
||||
usr << "\blue This PDA does not have an ID in it."
|
||||
usr << "<span class='notice'>This PDA does not have an ID in it.</span>"
|
||||
else
|
||||
usr << "\blue You cannot do this while restrained."
|
||||
usr << "<span class='notice'>You cannot do this while restrained.</span>"
|
||||
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_pen()
|
||||
@@ -812,13 +812,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/mob/M = loc
|
||||
if(M.get_active_hand() == null)
|
||||
M.put_in_hands(O)
|
||||
usr << "<span class='notify'>You remove \the [O] from \the [src].</span>"
|
||||
usr << "<span class='notice'>You remove \the [O] from \the [src].</span>"
|
||||
return
|
||||
O.loc = get_turf(src)
|
||||
else
|
||||
usr << "\blue This PDA does not have a pen in it."
|
||||
usr << "<span class='notice'>This PDA does not have a pen in it.</span>"
|
||||
else
|
||||
usr << "\blue You cannot do this while restrained."
|
||||
usr << "<span class='notice'>You cannot do this while restrained.</span>"
|
||||
|
||||
/obj/item/device/pda/proc/id_check(mob/user as mob, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use.
|
||||
if(choice == 1)
|
||||
@@ -843,43 +843,47 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
// access to status display signals
|
||||
/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(C, /obj/item/weapon/cartridge) && isnull(src.cartridge))
|
||||
if(istype(C, /obj/item/weapon/cartridge) && !cartridge)
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
user << "<span class='notify'>You insert [C] into [src].</span>"
|
||||
user << "<span class='notice'>You insert [C] into [src].</span>"
|
||||
cartridge = C
|
||||
if (C:radio)
|
||||
if(C:radio)
|
||||
C:radio.hostpda = src
|
||||
|
||||
else if (istype(C, /obj/item/weapon/card/id) && C:registered_name)
|
||||
else if(istype(C, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/idcard = C
|
||||
if(!idcard.registered_name)
|
||||
user << "<span class='notice'>\The [src] rejects the ID.</span>"
|
||||
return
|
||||
if(!owner)
|
||||
owner = C:registered_name
|
||||
ownjob = C:assignment
|
||||
owner = idcard.registered_name
|
||||
ownjob = idcard.assignment
|
||||
name = "PDA-[owner] ([ownjob])"
|
||||
user << "<span class='notify'>Card scanned.</span>"
|
||||
user << "<span class='notice'>Card scanned.</span>"
|
||||
else
|
||||
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
|
||||
if ( ( (src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
|
||||
if ( !(user.stat || user.restrained()) )//If they can still act.
|
||||
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
|
||||
if(!(user.stat || user.restrained()) )//If they can still act.
|
||||
id_check(user, 2)
|
||||
user << "<span class='notify'>You put the ID into the [src.name]'s slot.</span>"
|
||||
user << "<span class='notice'>You put the ID into \the [src]'s slot.</span>"
|
||||
updateSelfDialog()//Update self dialog on success.
|
||||
return//Return in case of failed check or when successful.
|
||||
return //Return in case of failed check or when successful.
|
||||
updateSelfDialog()//For the non-input related code.
|
||||
else if (istype(C, /obj/item/device/paicard) && !src.pai)
|
||||
else if(istype(C, /obj/item/device/paicard) && !src.pai)
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
pai = C
|
||||
user << "<span class='notify'>You slot \the [C] into [src].</span>"
|
||||
user << "<span class='notice'>You slot \the [C] into [src].</span>"
|
||||
updateUsrDialog()
|
||||
else if( istype(C, /obj/item/weapon/pen) )
|
||||
else if(istype(C, /obj/item/weapon/pen))
|
||||
var/obj/item/weapon/pen/O = locate() in src
|
||||
if(O)
|
||||
user << "<span class='notify'>There is already a pen in \the [src].</span>"
|
||||
user << "<span class='notice'>There is already a pen in \the [src].</span>"
|
||||
else
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
user << "<span class='notify'>You slide \the [C] into \the [src].</span>"
|
||||
user << "<span class='notice'>You slide \the [C] into \the [src].</span>"
|
||||
return
|
||||
|
||||
/obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob)
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
name = "flash"
|
||||
desc = "Used for blinding and being an asshole."
|
||||
icon_state = "flash"
|
||||
item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang)
|
||||
throwforce = 5
|
||||
w_class = 1.0
|
||||
throw_speed = 4
|
||||
throw_range = 10
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
origin_tech = "magnets=2;combat=1"
|
||||
|
||||
var/times_used = 0 //Number of times it's been used.
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/device/flash/proc/clown_check(var/mob/user)
|
||||
if(user && (CLUMSY in user.mutations) && prob(50))
|
||||
user << "\red The Flash slips out of your hand."
|
||||
user << "\red \The [src] slips out of your hand."
|
||||
user.drop_item()
|
||||
return 0
|
||||
return 1
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
if(!clown_check(user)) return
|
||||
if(broken)
|
||||
user.show_message("<span class='warning'>The [src.name] is broken.</span>", 2)
|
||||
user << "<span class='warning'>\The [src] is broken.</span>"
|
||||
return
|
||||
|
||||
flash_recharge()
|
||||
@@ -59,7 +59,7 @@
|
||||
return
|
||||
times_used++
|
||||
else //can only use it 5 times a minute
|
||||
user.show_message("<span class='warning'>*click* *click*</span>", 2)
|
||||
user << "<span class='warning'>*click* *click*</span>"
|
||||
return
|
||||
playsound(src.loc, 'flash.ogg', 100, 1)
|
||||
var/flashfail = 0
|
||||
@@ -111,16 +111,13 @@
|
||||
flick("flash2", src)
|
||||
if(!issilicon(M))
|
||||
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
else
|
||||
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("<span class='notice'>[user] overloads [M]'s sensors with the flash!</span>")
|
||||
user.visible_message("<span class='notice'>[user] overloads [M]'s sensors with the flash!</span>")
|
||||
else
|
||||
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("<span class='notice'>[user] fails to blind [M] with the flash!</span>")
|
||||
user.visible_message("<span class='notice'>[user] fails to blind [M] with the flash!</span>")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
w_class = 2.0
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "grenade"
|
||||
item_state = "grenade"
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
|
||||
@@ -10,82 +10,37 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
|
||||
|
||||
|
||||
// Plant-B-Gone
|
||||
/obj/item/weapon/plantbgone/New()
|
||||
var/datum/reagents/R = new/datum/reagents(100) // 100 units of solution
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("plantbgone", 100)
|
||||
|
||||
/obj/item/weapon/plantbgone/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
|
||||
if (istype(A, /obj/item/weapon/storage/backpack ))
|
||||
return
|
||||
|
||||
else if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
|
||||
else if (src.reagents.total_volume < 1)
|
||||
src.empty = 1
|
||||
user << "\blue Add more Plant-B-Gone mixture!"
|
||||
return
|
||||
|
||||
else
|
||||
src.empty = 0
|
||||
|
||||
if (istype(A, /obj/machinery/hydroponics)) // We are targeting hydrotray
|
||||
return
|
||||
|
||||
else if (istype(A, /obj/effect/blob)) // blob damage in blob code
|
||||
return
|
||||
|
||||
else
|
||||
var/obj/effect/decal/D = new/obj/effect/decal/(get_turf(src)) // Targeting elsewhere
|
||||
D.name = "chemicals"
|
||||
D.icon = 'icons/obj/chemical.dmi'
|
||||
D.icon_state = "weedpuff"
|
||||
D.create_reagents(5)
|
||||
src.reagents.trans_to(D, 5) // 5 units of solution used at a time => 20 uses
|
||||
playsound(src.loc, 'spray3.ogg', 50, 1, -6)
|
||||
|
||||
spawn(0)
|
||||
for(var/i=0, i<3, i++) // Max range = 3 tiles
|
||||
step_towards(D,A) // Moves towards target as normally (not thru walls)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
for(var/atom/T in get_turf(D))
|
||||
D.reagents.reaction(T)
|
||||
sleep(4)
|
||||
del(D)
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie
|
||||
name = "Plant-B-Gone"
|
||||
desc = "Kills those pesky weeds!"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon_state = "plantbgone"
|
||||
item_state = "plantbgone"
|
||||
volume = 100
|
||||
|
||||
|
||||
if((src.reagents.has_reagent("pacid")) || (src.reagents.has_reagent("lube"))) // Messages admins if someone sprays polyacid or space lube from a Plant-B-Gone bottle.
|
||||
message_admins("[key_name_admin(user)] fired Polyacid/Space lube from a PlantBGone bottle.") // Polymorph
|
||||
log_game("[key_name(user)] fired Polyacid/Space lube from a PlantBGone bottle.")
|
||||
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/plantbgone/examine()
|
||||
set src in usr
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone/New()
|
||||
..()
|
||||
if(!(usr in view(2)) && usr!=src.loc) return
|
||||
usr << "\blue The Plant-B-Gone bottle contains:"
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
usr << "\blue [R.volume] units of [R.name]"
|
||||
else
|
||||
usr << "\blue Nothing."
|
||||
return
|
||||
reagents.add_reagent("plantbgone", 100)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if (istype(A, /obj/machinery/hydroponics)) // We are targeting hydrotray
|
||||
return
|
||||
|
||||
if (istype(A, /obj/effect/blob)) // blob damage in blob code
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
|
||||
// Sunflower
|
||||
/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob)
|
||||
M << "<font color='green'><b> [user] smacks you with a sunflower!</font><font color='yellow'><b>FLOWER POWER<b></font>"
|
||||
user << "<font color='green'> Your sunflower's </font><font color='yellow'><b>FLOWER POWER</b></font><font color='green'> strikes [M]</font>"
|
||||
|
||||
// Nettle
|
||||
|
||||
// Nettle
|
||||
/obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob)
|
||||
if(!user.gloves)
|
||||
user << "\red The nettle burns your bare hand!"
|
||||
@@ -110,7 +65,6 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
|
||||
|
||||
|
||||
// Deathnettle
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob)
|
||||
if(!user.gloves)
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
@@ -151,8 +105,8 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
|
||||
potency = newValue
|
||||
force = round((5+potency/2.5), 1)
|
||||
|
||||
//Crafting
|
||||
|
||||
//Crafting
|
||||
/obj/item/weapon/corncob/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife))
|
||||
|
||||
90
code/game/objects/items/weapons/mop.dm
Normal file
90
code/game/objects/items/weapons/mop.dm
Normal file
@@ -0,0 +1,90 @@
|
||||
/obj/item/weapon/mop
|
||||
desc = "The world of janitalia wouldn't be complete without a mop."
|
||||
name = "mop"
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "mop"
|
||||
var/mopping = 0
|
||||
var/mopcount = 0
|
||||
force = 3.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
|
||||
|
||||
|
||||
/obj/item/weapon/mop/New()
|
||||
var/datum/reagents/R = new/datum/reagents(5)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
|
||||
obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
|
||||
src.reagents.reaction(A,1,10)
|
||||
A.clean_blood()
|
||||
for(var/obj/effect/O in A)
|
||||
if( istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) )
|
||||
del(O)
|
||||
|
||||
|
||||
/obj/effect/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/mop))
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/mop/afterattack(atom/A, mob/user as mob)
|
||||
if (src.reagents.total_volume < 1 || mopcount >= 5)
|
||||
user << "\blue Your mop is dry!"
|
||||
return
|
||||
|
||||
if (istype(A, /turf/simulated))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red <B>[user] begins to clean \the [A]</B>", 1)
|
||||
sleep(40)
|
||||
if(A)
|
||||
clean(A)
|
||||
user << "\blue You have finished mopping!"
|
||||
mopcount++
|
||||
else if (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red <B>[user] begins to clean \the [get_turf(A)]</B>", 1)
|
||||
sleep(40)
|
||||
if(A)
|
||||
clean(get_turf(A))
|
||||
user << "\blue You have finished mopping!"
|
||||
mopcount++
|
||||
|
||||
if(mopcount >= 5) //Okay this stuff is an ugly hack and i feel bad about it.
|
||||
spawn(5)
|
||||
src.reagents.clear_reagents()
|
||||
mopcount = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Hope it's okay to stick this shit here: it basically just turns a hexadecimal color into rgb
|
||||
*/
|
||||
|
||||
/proc/GetColors(hex)
|
||||
hex = uppertext(hex)
|
||||
var/hi1 = text2ascii(hex, 2)
|
||||
var/lo1 = text2ascii(hex, 3)
|
||||
var/hi2 = text2ascii(hex, 4)
|
||||
var/lo2 = text2ascii(hex, 5)
|
||||
var/hi3 = text2ascii(hex, 6)
|
||||
var/lo3 = text2ascii(hex, 7)
|
||||
return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48),
|
||||
((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48),
|
||||
((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,428 +0,0 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
/obj/item/weapon/cleaner
|
||||
desc = "Space Cleaner!"
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
name = "space cleaner"
|
||||
icon_state = "cleaner"
|
||||
item_state = "cleaner"
|
||||
flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
|
||||
/obj/item/weapon/cleaner/New()
|
||||
var/datum/reagents/R = new/datum/reagents(250)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("cleaner", 250)
|
||||
|
||||
/obj/item/weapon/cleaner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/cleaner/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if (istype(A, /obj/item/weapon/storage ))
|
||||
return
|
||||
if (istype(A, /obj/effect/proc_holder/spell ))
|
||||
return
|
||||
else if (src.reagents.total_volume < 1)
|
||||
user << "\blue [src] is empty!"
|
||||
return
|
||||
|
||||
var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
|
||||
D.create_reagents(5)
|
||||
src.reagents.trans_to(D, 5)
|
||||
|
||||
var/list/rgbcolor = list(0,0,0)
|
||||
var/finalcolor
|
||||
for(var/datum/reagent/re in D.reagents.reagent_list) // natural color mixing bullshit/algorithm
|
||||
if(!finalcolor)
|
||||
rgbcolor = GetColors(re.color)
|
||||
finalcolor = re.color
|
||||
else
|
||||
var/newcolor[3]
|
||||
var/prergbcolor[3]
|
||||
prergbcolor = rgbcolor
|
||||
newcolor = GetColors(re.color)
|
||||
|
||||
rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
|
||||
rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
|
||||
rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
|
||||
|
||||
finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
|
||||
// This isn't a perfect color mixing system, the more reagents that are inside,
|
||||
// the darker it gets until it becomes absolutely pitch black! I dunno, maybe
|
||||
// that's pretty realistic? I don't do a whole lot of color-mixing anyway.
|
||||
// If you add brighter colors to it it'll eventually get lighter, though.
|
||||
|
||||
D.name = "chemicals"
|
||||
D.icon = 'icons/obj/chempuff.dmi'
|
||||
|
||||
D.icon += finalcolor
|
||||
|
||||
playsound(src.loc, 'spray2.ogg', 50, 1, -6)
|
||||
|
||||
spawn(0)
|
||||
for(var/i=0, i<3, i++)
|
||||
step_towards(D,A)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
for(var/atom/T in get_turf(D))
|
||||
D.reagents.reaction(T)
|
||||
sleep(3)
|
||||
del(D)
|
||||
|
||||
if(isrobot(user)) //Cyborgs can clean forever if they keep charged
|
||||
var/mob/living/silicon/robot/janitor = user
|
||||
janitor.cell.charge -= 20
|
||||
var/refill = src.reagents.get_master_reagent_id()
|
||||
spawn(600)
|
||||
src.reagents.add_reagent(refill, 10)
|
||||
|
||||
if(src.reagents.has_reagent("pacid"))
|
||||
message_admins("[key_name_admin(user)] fired Polyacid from a Cleaner bottle.")
|
||||
log_game("[key_name(user)] fired Polyacid from a Cleaner bottle.")
|
||||
if(src.reagents.has_reagent("lube"))
|
||||
message_admins("[key_name_admin(user)] fired Space lube from a Cleaner bottle.")
|
||||
log_game("[key_name(user)] fired Space lube from a Cleaner bottle.")
|
||||
return
|
||||
|
||||
/obj/item/weapon/cleaner/examine()
|
||||
set src in usr
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
usr << text("\icon[] [] units of [] left!", src, round(R.volume), R.name)
|
||||
//usr << text("\icon[] [] units of cleaner left!", src, src.reagents.total_volume)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/chemsprayer//Another copy paste with a tiny change it seems
|
||||
desc = "A utility used to spray large amounts of reagent in a given area."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
name = "chem sprayer"
|
||||
icon_state = "chemsprayer"
|
||||
item_state = "chemsprayer"
|
||||
flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
origin_tech = "combat=3;materials=3;engineering=3"
|
||||
|
||||
/obj/item/weapon/chemsprayer/New()
|
||||
var/datum/reagents/R = new/datum/reagents(600)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
/obj/item/weapon/chemsprayer/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/chemsprayer/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if (istype(A, /obj/item/weapon/storage ))
|
||||
return
|
||||
if (istype(A, /obj/effect/proc_holder/spell ))
|
||||
return
|
||||
else if (src.reagents.total_volume < 1)
|
||||
user << "\blue [src] is empty!"
|
||||
return
|
||||
|
||||
playsound(src.loc, 'spray2.ogg', 50, 1, -6)
|
||||
|
||||
var/Sprays[3]
|
||||
for(var/i=1, i<=3, i++) // intialize sprays
|
||||
if(src.reagents.total_volume < 1) break
|
||||
var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
|
||||
D.name = "chemicals"
|
||||
D.icon = 'icons/obj/chempuff.dmi'
|
||||
D.create_reagents(5)
|
||||
src.reagents.trans_to(D, 5)
|
||||
|
||||
var/rgbcolor[3]
|
||||
var/finalcolor
|
||||
for(var/datum/reagent/re in D.reagents.reagent_list)
|
||||
if(!finalcolor)
|
||||
rgbcolor = GetColors(re.color)
|
||||
finalcolor = re.color
|
||||
else
|
||||
var/newcolor[3]
|
||||
var/prergbcolor[3]
|
||||
prergbcolor = rgbcolor
|
||||
newcolor = GetColors(re.color)
|
||||
|
||||
rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
|
||||
rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
|
||||
rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
|
||||
|
||||
finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
|
||||
|
||||
D.icon += finalcolor
|
||||
|
||||
Sprays[i] = D
|
||||
|
||||
var/direction = get_dir(src, A)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
var/list/the_targets = list(T,T1,T2)
|
||||
|
||||
for(var/i=1, i<=Sprays.len, i++)
|
||||
spawn()
|
||||
var/obj/effect/decal/D = Sprays[i]
|
||||
if(!D) continue
|
||||
|
||||
// Spreads the sprays a little bit
|
||||
var/turf/my_target = pick(the_targets)
|
||||
the_targets -= my_target
|
||||
|
||||
for(var/j=1, j<=rand(6,8), j++)
|
||||
step_towards(D, my_target)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
for(var/atom/t in get_turf(D))
|
||||
D.reagents.reaction(t)
|
||||
sleep(2)
|
||||
del(D)
|
||||
sleep(1)
|
||||
|
||||
if(isrobot(user)) //Cyborgs can clean forever if they keep charged
|
||||
var/mob/living/silicon/robot/janitor = user
|
||||
janitor.cell.charge -= 20
|
||||
var/refill = src.reagents.get_master_reagent_id()
|
||||
spawn(600)
|
||||
src.reagents.add_reagent(refill, 10)
|
||||
|
||||
if((src.reagents.has_reagent("pacid")) || (src.reagents.has_reagent("lube"))) // Messages admins if someone sprays polyacid or space lube from a Chem Sprayer.
|
||||
message_admins("[key_name_admin(user)] fired Polyacid/Space lube from a Chem Sprayer.") // Polymorph
|
||||
log_game("[key_name(user)] fired Polyacid/Space lube from a Chem Sprayer.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
//A direct copy paste of the cleaner, fantastic.
|
||||
/obj/item/weapon/pepperspray
|
||||
desc = "Manufactured by UhangInc., used to blind and down an opponent quickly. It has three spray settings, and is currently set to 'low'."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
name = "pepperspray"
|
||||
icon_state = "pepperspray"
|
||||
item_state = "pepperspray"
|
||||
flags = TABLEPASS|FPRINT|USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
var/setting = 1
|
||||
|
||||
|
||||
/obj/item/weapon/pepperspray/New()
|
||||
var/datum/reagents/R = new/datum/reagents(45)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("condensedcapsaicin", 45)
|
||||
|
||||
/obj/item/weapon/pepperspray/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/pepperspray/attack_self( mob/user as mob)
|
||||
src.setting += 1
|
||||
switch ( src.setting )
|
||||
if (2)
|
||||
user << "You change the spray to 'medium'."
|
||||
src.desc = "Manufactured by UhangInc., used to blind and down an opponent quickly. It has three spray settings, and is currently set to 'medium'."
|
||||
if (3)
|
||||
user << "You change the spray to 'high'."
|
||||
src.desc = "Manufactured by UhangInc., used to blind and down an opponent quickly. It has three spray settings, and is currently set to 'high'."
|
||||
if (4)
|
||||
src.setting = 1
|
||||
user << "You change the spray to 'low'."
|
||||
src.desc = "Manufactured by UhangInc., used to blind and down an opponent quickly. It has three spray settings, and is currently set to 'low'."
|
||||
return
|
||||
|
||||
/obj/item/weapon/pepperspray/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if ( A == src )
|
||||
return
|
||||
if ( src.setting < 1 || src.setting > 3 ) // Stop var editing from breaking some maths further down
|
||||
src.setting = 1
|
||||
if (istype(A, /obj/item/weapon/storage ))
|
||||
return
|
||||
if (istype(A, /obj/effect/proc_holder/spell ))
|
||||
return
|
||||
else if (istype(A, /obj/structure/reagent_dispensers/peppertank) && get_dist(src,A) <= 1)
|
||||
A.reagents.trans_to(src, 45)
|
||||
user << "\blue Pepper spray refilled"
|
||||
playsound(src.loc, 'refill.ogg', 50, 1, -6)
|
||||
return
|
||||
else if (src.reagents.total_volume < 1)
|
||||
user << "\blue [src] is empty!"
|
||||
return
|
||||
playsound(src.loc, 'spray2.ogg', 50, 1, -6)
|
||||
|
||||
var/Sprays[1] // BubbleWrap - single spray
|
||||
for(var/i=1, i<=1, i++) // intialize sprays
|
||||
if(src.reagents.total_volume < 1) break
|
||||
var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
|
||||
D.name = "chemicals"
|
||||
D.icon = 'icons/obj/chempuff.dmi'
|
||||
var/xfer_volume = round(45/(4-src.setting)) // Use more spray per spray on higher settings
|
||||
D.create_reagents(xfer_volume)
|
||||
src.reagents.trans_to(D, xfer_volume)
|
||||
|
||||
var/rgbcolor[3]
|
||||
var/finalcolor
|
||||
for(var/datum/reagent/re in D.reagents.reagent_list)
|
||||
if(!finalcolor)
|
||||
rgbcolor = GetColors(re.color)
|
||||
finalcolor = re.color
|
||||
else
|
||||
var/newcolor[3]
|
||||
var/prergbcolor[3]
|
||||
prergbcolor = rgbcolor
|
||||
newcolor = GetColors(re.color)
|
||||
|
||||
rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
|
||||
rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
|
||||
rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
|
||||
|
||||
finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
|
||||
|
||||
D.icon += finalcolor
|
||||
|
||||
Sprays[i] = D
|
||||
|
||||
//var/direction = get_dir(src, A)
|
||||
//var/turf/T = get_turf(A)
|
||||
//var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
//var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
//var/list/the_targets = list(T,T1,T2)
|
||||
|
||||
for(var/i=1, i<=Sprays.len, i++)
|
||||
spawn()
|
||||
var/obj/effect/decal/D = Sprays[i]
|
||||
if(!D) continue
|
||||
|
||||
// Spreads the sprays a little bit
|
||||
var/turf/my_target = get_turf(A) //pick(the_targets)
|
||||
//the_targets -= my_target
|
||||
|
||||
var/list/affected = new() // BubbleWrap
|
||||
for(var/j=1, j<=rand(6,8), j++)
|
||||
step_towards(D, my_target)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
for(var/atom/t in get_turf(D))
|
||||
if ( !(t in affected) ) // Only spray each person once, removes chat spam
|
||||
D.reagents.reaction(t)
|
||||
affected += t
|
||||
sleep(2)
|
||||
del(D)
|
||||
sleep(1)
|
||||
|
||||
if(isrobot(user)) //Cyborgs can clean forever if they keep charged
|
||||
var/mob/living/silicon/robot/janitor = user
|
||||
janitor.cell.charge -= 20
|
||||
var/refill = src.reagents.get_master_reagent_id()
|
||||
spawn(600)
|
||||
src.reagents.add_reagent(refill, 45)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/pepperspray/examine()
|
||||
set src in usr
|
||||
usr << "\icon[src] [src.reagents.total_volume] units of spray left!"
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
// MOP
|
||||
/obj/item/weapon/mop
|
||||
desc = "The world of janitalia wouldn't be complete without a mop."
|
||||
name = "mop"
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "mop"
|
||||
var/mopping = 0
|
||||
var/mopcount = 0
|
||||
force = 3.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
|
||||
|
||||
|
||||
/obj/item/weapon/mop/New()
|
||||
var/datum/reagents/R = new/datum/reagents(5)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
|
||||
obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
|
||||
src.reagents.reaction(A,1,10)
|
||||
A.clean_blood()
|
||||
for(var/obj/effect/O in A)
|
||||
if( istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) )
|
||||
del(O)
|
||||
|
||||
|
||||
/obj/effect/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/mop))
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/mop/afterattack(atom/A, mob/user as mob)
|
||||
if (src.reagents.total_volume < 1 || mopcount >= 5)
|
||||
user << "\blue Your mop is dry!"
|
||||
return
|
||||
|
||||
if (istype(A, /turf/simulated))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red <B>[user] begins to clean \the [A]</B>", 1)
|
||||
sleep(40)
|
||||
if(A)
|
||||
clean(A)
|
||||
user << "\blue You have finished mopping!"
|
||||
mopcount++
|
||||
else if (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red <B>[user] begins to clean \the [get_turf(A)]</B>", 1)
|
||||
sleep(40)
|
||||
if(A)
|
||||
clean(get_turf(A))
|
||||
user << "\blue You have finished mopping!"
|
||||
mopcount++
|
||||
|
||||
if(mopcount >= 5) //Okay this stuff is an ugly hack and i feel bad about it.
|
||||
spawn(5)
|
||||
src.reagents.clear_reagents()
|
||||
mopcount = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Hope it's okay to stick this shit here: it basically just turns a hexadecimal color into rgb
|
||||
*/
|
||||
|
||||
/proc/GetColors(hex)
|
||||
hex = uppertext(hex)
|
||||
var/hi1 = text2ascii(hex, 2)
|
||||
var/lo1 = text2ascii(hex, 3)
|
||||
var/hi2 = text2ascii(hex, 4)
|
||||
var/lo2 = text2ascii(hex, 5)
|
||||
var/hi3 = text2ascii(hex, 6)
|
||||
var/lo3 = text2ascii(hex, 7)
|
||||
return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48),
|
||||
((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48),
|
||||
((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
239
code/game/objects/items/weapons/spray.dm
Normal file
239
code/game/objects/items/weapons/spray.dm
Normal file
@@ -0,0 +1,239 @@
|
||||
/obj/item/weapon/reagent_containers/spray
|
||||
name = "spray bottle"
|
||||
desc = "A spray bottle, with an unscrewable top."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "cleaner"
|
||||
item_state = "cleaner"
|
||||
flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 250
|
||||
possible_transfer_amounts = null
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
|
||||
|| istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink))
|
||||
return
|
||||
|
||||
if(istype(A, /obj/effect/proc_holder/spell))
|
||||
return
|
||||
|
||||
if(istype(A, /obj/structure/reagent_dispensers)) //this block copypasted from reagent_containers/glass, for lack of a better solution
|
||||
if(!A.reagents.total_volume && A.reagents)
|
||||
user << "<span class='notice'>\The [A] is empty.</span>"
|
||||
return
|
||||
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
user << "<span class='notice'>\The [src] is full.</span>"
|
||||
return
|
||||
|
||||
var/trans = A.reagents.trans_to(src, A:amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [A].</span>"
|
||||
return
|
||||
|
||||
if(reagents.total_volume < amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>\The [src] is empty!</span>"
|
||||
return
|
||||
|
||||
var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
reagents.trans_to(D, amount_per_transfer_from_this)
|
||||
|
||||
var/list/rgbcolor = list(0,0,0)
|
||||
var/finalcolor
|
||||
for(var/datum/reagent/re in D.reagents.reagent_list) // natural color mixing bullshit/algorithm
|
||||
if(!finalcolor)
|
||||
rgbcolor = GetColors(re.color)
|
||||
finalcolor = re.color
|
||||
else
|
||||
var/newcolor[3]
|
||||
var/prergbcolor[3]
|
||||
prergbcolor = rgbcolor
|
||||
newcolor = GetColors(re.color)
|
||||
|
||||
rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
|
||||
rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
|
||||
rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
|
||||
|
||||
finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
|
||||
// This isn't a perfect color mixing system, the more reagents that are inside,
|
||||
// the darker it gets until it becomes absolutely pitch black! I dunno, maybe
|
||||
// that's pretty realistic? I don't do a whole lot of color-mixing anyway.
|
||||
// If you add brighter colors to it it'll eventually get lighter, though.
|
||||
|
||||
D.name = "chemicals"
|
||||
D.icon = 'icons/obj/chempuff.dmi'
|
||||
|
||||
D.icon += finalcolor
|
||||
|
||||
spawn(0)
|
||||
for(var/i=0, i<3, i++)
|
||||
step_towards(D,A)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
for(var/atom/T in get_turf(D))
|
||||
D.reagents.reaction(T)
|
||||
sleep(3)
|
||||
del(D)
|
||||
|
||||
playsound(src.loc, 'spray2.ogg', 50, 1, -6)
|
||||
|
||||
if(reagents.has_reagent("sacid"))
|
||||
message_admins("[key_name_admin(user)] fired sulphuric acid from a spray bottle.")
|
||||
log_game("[key_name(user)] fired sulphuric acid from a spray bottle.")
|
||||
if(reagents.has_reagent("pacid"))
|
||||
message_admins("[key_name_admin(user)] fired Polyacid from a spray bottle.")
|
||||
log_game("[key_name(user)] fired Polyacid from a spray bottle.")
|
||||
if(reagents.has_reagent("lube"))
|
||||
message_admins("[key_name_admin(user)] fired Space lube from a spray bottle.")
|
||||
log_game("[key_name(user)] fired Space lube from a spray bottle.")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/examine()
|
||||
set src in usr
|
||||
..()
|
||||
// usr << "\icon[src] This is \the [src]!"
|
||||
// usr << desc
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
usr << "[round(R.volume)] units of [R.name] left."
|
||||
return
|
||||
|
||||
|
||||
//space cleaner
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner
|
||||
name = "space cleaner"
|
||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner/New()
|
||||
..()
|
||||
reagents.add_reagent("cleaner", 250)
|
||||
|
||||
//pepperspray
|
||||
/obj/item/weapon/reagent_containers/spray/pepper
|
||||
name = "pepperspray"
|
||||
desc = "Manufactured by UhangInc, used to blind and down an opponent quickly."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "pepperspray"
|
||||
item_state = "pepperspray"
|
||||
volume = 40
|
||||
amount_per_transfer_from_this = 10
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/New()
|
||||
..()
|
||||
reagents.add_reagent("condensedcapsaicin", 40)
|
||||
|
||||
|
||||
//chemsprayer
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer
|
||||
name = "chem sprayer"
|
||||
desc = "A utility used to spray large amounts of reagent in a given area."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "chemsprayer"
|
||||
item_state = "chemsprayer"
|
||||
throwforce = 3
|
||||
w_class = 3.0
|
||||
volume = 600
|
||||
origin_tech = "combat=3;materials=3;engineering=3"
|
||||
|
||||
|
||||
//this is a big copypasta clusterfuck, but it's still better than it used to be!
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
|
||||
|| istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink))
|
||||
return
|
||||
|
||||
if(istype(A, /obj/effect/proc_holder/spell))
|
||||
return
|
||||
|
||||
if(istype(A, /obj/structure/reagent_dispensers)) //this block copypasted from reagent_containers/glass, for lack of a better solution
|
||||
if(!A.reagents.total_volume && A.reagents)
|
||||
user << "<span class='notice'>\The [A] is empty.</span>"
|
||||
return
|
||||
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
user << "<span class='notice'>\The [src] is full.</span>"
|
||||
return
|
||||
|
||||
var/trans = A.reagents.trans_to(src, A:amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [A].</span>"
|
||||
return
|
||||
|
||||
if(reagents.total_volume < amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>\The [src] is empty!</span>"
|
||||
return
|
||||
|
||||
var/Sprays[3]
|
||||
for(var/i=1, i<=3, i++) // intialize sprays
|
||||
if(src.reagents.total_volume < 1) break
|
||||
var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
|
||||
D.name = "chemicals"
|
||||
D.icon = 'icons/obj/chempuff.dmi'
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
src.reagents.trans_to(D, amount_per_transfer_from_this)
|
||||
|
||||
var/rgbcolor[3]
|
||||
var/finalcolor
|
||||
for(var/datum/reagent/re in D.reagents.reagent_list)
|
||||
if(!finalcolor)
|
||||
rgbcolor = GetColors(re.color)
|
||||
finalcolor = re.color
|
||||
else
|
||||
var/newcolor[3]
|
||||
var/prergbcolor[3]
|
||||
prergbcolor = rgbcolor
|
||||
newcolor = GetColors(re.color)
|
||||
|
||||
rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2
|
||||
rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2
|
||||
rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2
|
||||
|
||||
finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3])
|
||||
|
||||
D.icon += finalcolor
|
||||
|
||||
Sprays[i] = D
|
||||
|
||||
var/direction = get_dir(src, A)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
var/list/the_targets = list(T,T1,T2)
|
||||
|
||||
for(var/i=1, i<=Sprays.len, i++)
|
||||
spawn()
|
||||
var/obj/effect/decal/D = Sprays[i]
|
||||
if(!D) continue
|
||||
|
||||
// Spreads the sprays a little bit
|
||||
var/turf/my_target = pick(the_targets)
|
||||
the_targets -= my_target
|
||||
|
||||
for(var/j=1, j<=rand(6,8), j++)
|
||||
step_towards(D, my_target)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
for(var/atom/t in get_turf(D))
|
||||
D.reagents.reaction(t)
|
||||
sleep(2)
|
||||
del(D)
|
||||
|
||||
playsound(src.loc, 'spray2.ogg', 50, 1, -6)
|
||||
|
||||
if(reagents.has_reagent("sacid"))
|
||||
message_admins("[key_name_admin(user)] fired sulphuric acid from a chem sprayer.")
|
||||
log_game("[key_name(user)] fired sulphuric acid from a chem sprayer.")
|
||||
if(reagents.has_reagent("pacid"))
|
||||
message_admins("[key_name_admin(user)] fired Polyacid from a chem sprayer.")
|
||||
log_game("[key_name(user)] fired Polyacid from a chem sprayer.")
|
||||
if(reagents.has_reagent("lube"))
|
||||
message_admins("[key_name_admin(user)] fired Space lube from a chem sprayer.")
|
||||
log_game("[key_name(user)] fired Space lube from a chem sprayer.")
|
||||
return
|
||||
|
||||
//looking for plant-b-gone? it's in code/game/objects/items/weapons/hydroponics.dm
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon_state = "apron"
|
||||
item_state = "apron"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
allowed = list (/obj/item/weapon/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe)
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe)
|
||||
|
||||
//Captain
|
||||
/obj/item/clothing/suit/captunic
|
||||
|
||||
@@ -65,12 +65,9 @@
|
||||
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
src.modules += new /obj/item/weapon/extinguisher/mini(src)
|
||||
src.emag = new /obj/item/weapon/cleaner(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
src.emag.reagents = R
|
||||
R.my_atom = src.emag
|
||||
R.add_reagent("pacid", 1000)
|
||||
src.emag.reagents.add_reagent("pacid", 250)
|
||||
src.emag.name = "Polyacid spray"
|
||||
return
|
||||
|
||||
@@ -152,12 +149,9 @@
|
||||
src.modules += new /obj/item/weapon/trashbag(src)
|
||||
src.modules += new /obj/item/weapon/mop(src)
|
||||
src.modules += new /obj/item/device/lightreplacer(src)
|
||||
src.emag = new /obj/item/weapon/cleaner(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
src.emag.reagents = R
|
||||
R.my_atom = src.emag
|
||||
R.add_reagent("lube", 1000)
|
||||
src.emag.reagents.add_reagent("lube", 250)
|
||||
src.emag.name = "Lube spray"
|
||||
return
|
||||
|
||||
|
||||
13575
maps/tgstation.2.0.9.dmm
13575
maps/tgstation.2.0.9.dmm
File diff suppressed because it is too large
Load Diff
@@ -704,12 +704,13 @@
|
||||
#include "code\game\objects\items\weapons\kitchen.dm"
|
||||
#include "code\game\objects\items\weapons\manuals.dm"
|
||||
#include "code\game\objects\items\weapons\medical.dm"
|
||||
#include "code\game\objects\items\weapons\mops_cleaners.dm"
|
||||
#include "code\game\objects\items\weapons\mop.dm"
|
||||
#include "code\game\objects\items\weapons\paint.dm"
|
||||
#include "code\game\objects\items\weapons\paiwire.dm"
|
||||
#include "code\game\objects\items\weapons\plant_bag.dm"
|
||||
#include "code\game\objects\items\weapons\RCD.dm"
|
||||
#include "code\game\objects\items\weapons\RSF.dm"
|
||||
#include "code\game\objects\items\weapons\spray.dm"
|
||||
#include "code\game\objects\items\weapons\stunbaton.dm"
|
||||
#include "code\game\objects\items\weapons\stungloves.dm"
|
||||
#include "code\game\objects\items\weapons\surgery_tools.dm"
|
||||
|
||||
Reference in New Issue
Block a user