Merge branch 'master' of git://github.com/Abi79/tgstation13-git

Conflicts:
	baystation12.dme
	code/defines/mob/mob.dm
	code/defines/obj/vending.dm
	code/game/atom_procs.dm
	code/game/dna.dm
	code/game/machinery/computer/aifixer.dm
	code/game/vote.dm
	code/modules/chemical/Chemistry-Machinery.dm
	code/modules/chemical/Chemistry-Reagents.dm
	code/modules/mob/living/carbon/metroid/life.dm
	html/changelog.html
	icons/obj/stationobjs.dmi
	interface/skin.dmf
	maps/tgstation.2.0.8.dmm
This commit is contained in:
Miniature
2011-12-03 19:28:10 +10:30
179 changed files with 8711 additions and 8146 deletions
+42 -54
View File
@@ -6,7 +6,7 @@
return (!density)
/obj/structure/closet/proc/can_open()
if (src.welded)
if(src.welded)
return 0
return 1
@@ -14,28 +14,23 @@
for(var/obj/structure/closet/closet in get_turf(src))
if(closet != src)
return 0
for(var/obj/structure/secure_closet/closet in get_turf(src))
return 0
return 1
/obj/structure/closet/proc/dump_contents()
for (var/obj/item/I in src)
for(var/obj/item/I in src)
I.loc = src.loc
for (var/obj/effect/overlay/o in src) //REMOVE THIS
o.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
if(M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
/obj/structure/closet/proc/open()
if (src.opened)
if(src.opened)
return 0
if (!src.can_open())
if(!src.can_open())
return 0
src.dump_contents()
@@ -47,26 +42,22 @@
return 1
/obj/structure/closet/proc/close()
if (!src.opened)
if(!src.opened)
return 0
if (!src.can_close())
if(!src.can_close())
return 0
for (var/obj/item/I in src.loc)
if (!I.anchored)
for(var/obj/item/I in src.loc)
if(!I.anchored)
I.loc = src
for (var/obj/effect/overlay/o in src.loc) //REMOVE THIS
if (!o.anchored)
o.loc = src
for (var/mob/M in src.loc)
if (istype (M, /mob/dead/observer))
for(var/mob/M in src.loc)
if(istype (M, /mob/dead/observer))
continue
if (M.buckled)
if(M.buckled)
continue
if (M.client)
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
@@ -78,27 +69,27 @@
return 1
/obj/structure/closet/proc/toggle()
if (src.opened)
if(src.opened)
return src.close()
return src.open()
// this should probably use dump_contents()
/obj/structure/closet/ex_act(severity)
switch(severity)
if (1)
for (var/atom/movable/A as mob|obj in src)
if(1)
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (2)
if (prob(50))
if(2)
if(prob(50))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (3)
if (prob(5))
for (var/atom/movable/A as mob|obj in src)
if(3)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
@@ -107,7 +98,7 @@
health -= Proj.damage
..()
if(health <= 0)
for (var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
@@ -115,18 +106,18 @@
// this should probably use dump_contents()
/obj/structure/closet/blob_act()
if (prob(75))
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
/obj/structure/closet/meteorhit(obj/O as obj)
if (O.icon_state == "flaming")
if(O.icon_state == "flaming")
src.dump_contents()
del(src)
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/packageWrap))
if(istype(W, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/O = W
if (O.amount > 3)
var/obj/effect/bigDelivery/P = new /obj/effect/bigDelivery(get_turf(src.loc))
@@ -135,16 +126,16 @@
src.welded = 1
src.loc = P
O.amount -= 3
else if (src.opened)
if (istype(W, /obj/item/weapon/grab))
else if(src.opened)
if(istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
if (!W:remove_fuel(0,user))
if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(!W:remove_fuel(0,user))
user << "\blue You need more welding fuel to complete this task."
return
new /obj/item/stack/sheet/metal(src.loc)
for (var/mob/M in viewers(src))
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)
del(src)
return
@@ -154,11 +145,11 @@
usr.drop_item()
if (W)
if(W)
W.loc = src.loc
else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if (!W:remove_fuel(0,user))
if(!W:remove_fuel(0,user))
user << "\blue You need more welding fuel to complete this task."
return
src.welded =! src.welded
@@ -169,32 +160,29 @@
return
/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if (!user.can_use_hands())
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis)
return
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return
if (user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems
if(user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems
return
if (!istype(user.loc, /turf)) // are you in a container/closet/pod/etc?
if(!istype(user.loc, /turf)) // are you in a container/closet/pod/etc?
return
if(!src.opened)
return
if(istype(O, /obj/structure/secure_closet) || istype(O, /obj/structure/closet))
return
if(isrobot(user))
if(istype(O, /obj/structure/closet))
return
step_towards(O, src.loc)
user.show_viewers(text("\red [] stuffs [] into []!", user, O, src))
if(user != O)
user.show_viewers(text("\red [] stuffs [] into []!", user, O, src))
src.add_fingerprint(user)
return
/obj/structure/closet
var/lastbang = 0
/obj/structure/closet/relaymove(mob/user as mob)
if (user.stat)
if(user.stat)
return
if (!src.open())
if(!src.open())
user << "\blue It won't budge!"
if(!lastbang)
lastbang = 1
@@ -217,5 +205,5 @@
/obj/structure/closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if (!src.toggle())
if(!src.toggle())
usr << "\blue It won't budge!"
-3
View File
@@ -1,10 +1,7 @@
/obj/structure/closet/jcloset/New()
..()
sleep(2)
new /obj/item/clothing/suit/bio_suit/janitor(src)
new /obj/item/clothing/head/bio_hood/janitor(src)
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/device/flashlight(src)
new /obj/item/clothing/shoes/galoshes(src)
new /obj/item/weapon/caution(src)
+4 -4
View File
@@ -1,4 +1,4 @@
/obj/structure/secure_closet/kitchen/New()
/obj/structure/closet/secure_closet/kitchen/New()
..()
sleep(2)
/*new /obj/item/clothing/head/chefhat(src)
@@ -38,7 +38,7 @@
new /obj/item/weapon/kitchen/utensil/spoon(src)
new /obj/item/weapon/kitchen/rollingpin(src)*/
/obj/structure/secure_closet/meat/New()
/obj/structure/closet/secure_closet/meat/New()
..()
sleep(2)
new /obj/item/kitchen/egg_box(src)
@@ -48,7 +48,7 @@
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
/obj/structure/secure_closet/fridge/New()
/obj/structure/closet/secure_closet/fridge/New()
..()
sleep(2)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
@@ -62,7 +62,7 @@
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
/obj/structure/secure_closet/money_freezer/New()
/obj/structure/closet/secure_closet/money_freezer/New()
..()
sleep(2)
new /obj/item/weapon/spacecash/c1000(src)
+1 -1
View File
@@ -1,4 +1,4 @@
/obj/structure/secure_closet/bar
/obj/structure/closet/secure_closet/bar
name = "Booze"
req_access = list(access_bar)
@@ -1,4 +1,4 @@
/obj/structure/secure_closet/engineering_chief
/obj/structure/closet/secure_closet/engineering_chief
name = "Chief Engineer's Locker"
req_access = list(access_ce)
@@ -22,7 +22,7 @@
/obj/structure/secure_closet/engineering_electrical
/obj/structure/closet/secure_closet/engineering_electrical
name = "Electrical Supplies"
req_access = list(access_engine)
@@ -42,7 +42,7 @@
/obj/structure/secure_closet/engineering_welding
/obj/structure/closet/secure_closet/engineering_welding
name = "Welding Supplies"
req_access = list(access_engine)
@@ -60,7 +60,7 @@
/obj/structure/secure_closet/engineering_personal
/obj/structure/closet/secure_closet/engineering_personal
name = "Engineer's Locker"
req_access = list(access_engine)
+6 -6
View File
@@ -1,4 +1,4 @@
/obj/structure/secure_closet/medical1
/obj/structure/closet/secure_closet/medical1
name = "Medicine Closet"
desc = "Filled with medical junk."
icon_state = "medical1"
@@ -26,7 +26,7 @@
/obj/structure/secure_closet/medical2
/obj/structure/closet/secure_closet/medical2
name = "Anesthetic"
desc = "Used to knock people out."
icon_state = "medical1"
@@ -51,7 +51,7 @@
/obj/structure/secure_closet/medical3
/obj/structure/closet/secure_closet/medical3
name = "Medical Doctor's Locker"
req_access = list(access_medical)
@@ -71,7 +71,7 @@
/obj/structure/secure_closet/CMO
/obj/structure/closet/secure_closet/CMO
name = "Chief Medical Officer"
req_access = list(access_cmo)
@@ -90,7 +90,7 @@
/obj/structure/secure_closet/animal
/obj/structure/closet/secure_closet/animal
name = "Animal Control"
req_access = list(access_medical)
@@ -106,7 +106,7 @@
/obj/structure/secure_closet/chemical
/obj/structure/closet/secure_closet/chemical
name = "Chemical Closet"
desc = "Store dangerous chemicals in here."
icon_state = "medical1"
+5 -5
View File
@@ -1,14 +1,14 @@
/obj/structure/secure_closet/personal/var/registered = null
/obj/structure/secure_closet/personal/req_access = list(access_all_personal_lockers)
/obj/structure/closet/secure_closet/personal/var/registered = null
/obj/structure/closet/secure_closet/personal/req_access = list(access_all_personal_lockers)
/obj/structure/secure_closet/personal/New()
/obj/structure/closet/secure_closet/personal/New()
..()
spawn(2)
new /obj/item/weapon/storage/backpack( src )
new /obj/item/device/radio/headset( src )
return
/obj/structure/secure_closet/personal/patient/New()
/obj/structure/closet/secure_closet/personal/patient/New()
..()
contents = list()
spawn(4)
@@ -16,7 +16,7 @@
new /obj/item/clothing/shoes/white( src )
return
/obj/structure/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.opened)
if (istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
@@ -1,4 +1,4 @@
/obj/structure/secure_closet/scientist
/obj/structure/closet/secure_closet/scientist
name = "Scientist Locker"
req_access = list(access_tox_storage)
@@ -16,7 +16,7 @@
/obj/structure/secure_closet/RD
/obj/structure/closet/secure_closet/RD
name = "Research Director"
req_access = list(access_rd)
@@ -1,88 +1,10 @@
/obj/structure/secure_closet/alter_health()
return get_turf(src)
/obj/structure/secure_closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0) || wall_mounted) return 1
return src.opened
/obj/structure/secure_closet/proc/can_close()
for(var/obj/structure/closet/closet in get_turf(src))
return 0
for(var/obj/structure/secure_closet/closet in get_turf(src))
if(closet != src)
return 0
return 1
/obj/structure/secure_closet/proc/can_open()
if (src.locked)
/obj/structure/closet/secure_closet/can_open()
..()
if(src.locked)
return 0
return 1
/obj/structure/secure_closet/proc/dump_contents()
for (var/obj/item/I in src)
I.loc = src.loc
for (var/obj/effect/overlay/o in src) //REMOVE THIS
o.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
/obj/structure/secure_closet/proc/open()
if (src.opened)
return 0
if (!src.can_open())
return 0
src.dump_contents()
src.icon_state = src.icon_opened
src.opened = 1
playsound(src.loc, 'click.ogg', 15, 1, -3)
return 1
/obj/structure/secure_closet/proc/close()
if (!src.opened)
return 0
if (!src.can_close())
return 0
for (var/obj/item/I in src.loc)
if (!I.anchored)
I.loc = src
for (var/obj/effect/overlay/o in src.loc) //REMOVE THIS
if (!o.anchored)
o.loc = src
for (var/mob/M in src.loc)
if (M.buckled)
continue
if (M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
M.loc = src
if(broken)
src.icon_state = src.icon_off
else
src.icon_state = src.icon_closed
src.opened = 0
playsound(src.loc, 'click.ogg', 15, 1, -3)
return 1
/obj/structure/secure_closet/proc/toggle()
if (src.opened)
return src.close()
return src.open()
/obj/structure/secure_closet/emp_act(severity)
/obj/structure/closet/secure_closet/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(!broken)
@@ -96,69 +18,20 @@
src.req_access += pick(get_all_accesses())
..()
/obj/structure/secure_closet/ex_act(severity)
switch(severity)
if (1)
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (2)
if (prob(50))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
if (3)
if (prob(5))
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
del(src)
/obj/structure/secure_closet/blob_act()
if (prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
/obj/structure/secure_closet/meteorhit(obj/O as obj)
if (O.icon_state == "flaming")
for(var/obj/item/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
src.icon_state = src.icon_broken
del(src)
return
return
/obj/structure/secure_closet/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
if(health <= 0)
for (var/atom/movable/A as mob|obj in src)
A.loc = src.loc
del(src)
return
/obj/structure/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.opened)
if (istype(W, /obj/item/weapon/grab))
if (src.large)
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
if(istype(W, /obj/item/weapon/grab))
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.drop_item()
if (W)
if(W)
W.loc = src.loc
else if(src.broken)
user << "\red It appears to be broken."
return
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
broken = 1
locked = 0
desc = "It appears to be broken."
@@ -177,7 +50,7 @@
else if(src.allowed(user))
src.locked = !src.locked
for(var/mob/O in viewers(user, 3))
if ((O.client && !( O.blinded )))
if((O.client && !( O.blinded )))
O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user)
if(src.locked)
src.icon_state = src.icon_locked
@@ -188,88 +61,32 @@
user << "\red Access Denied"
return
/obj/structure/secure_closet
var/lastbang
/obj/structure/secure_closet/relaymove(mob/user as mob)
if (user.stat)
/obj/structure/closet/secure_closet/relaymove(mob/user as mob)
if(user.stat)
return
if (!( src.locked ))
if(!(src.locked))
for(var/obj/item/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
if(M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
src.icon_state = src.icon_opened
src.opened = 1
else
user << "\blue It's welded shut!"
if (world.time > lastbang+5)
if(world.time > lastbang+5)
lastbang = world.time
for(var/mob/M in hearers(src, null))
M << text("<FONT size=[]>BANG, bang!</FONT>", max(0, 5 - get_dist(src, M)))
return
/obj/structure/secure_closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if ((user.restrained() || user.stat))
return
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return
if(!src.opened)
return
if(istype(O, /obj/structure/secure_closet) || istype(O, /obj/structure/closet))
return
step_towards(O, src.loc)
if (user != O)
for(var/mob/B in viewers(user, 3))
if ((B.client && !( B.blinded )))
B << text("\red [] stuffs [] into []!", user, O, src)
src.add_fingerprint(user)
return
/*
/obj/structure/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if (!src.opened && !src.locked)
if(!src.can_open())
return
//open it
for(var/obj/item/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
src.icon_state = src.icon_opened
playsound(src.loc, 'click.ogg', 15, 1, -3)
src.opened = 1
else if(src.opened)
if(!src.can_close())
return
//close it
for(var/obj/item/I in src.loc)
if (!( I.anchored ))
I.loc = src
for(var/mob/M in src.loc)
if (M.buckled)
continue
if (M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
M.loc = src
src.icon_state = src.icon_closed
playsound(src.loc, 'click.ogg', 15, 1, -3)
src.opened = 0
else
return src.attackby(null, user)
return*/
/obj/structure/secure_closet/attack_hand(mob/user as mob)
/obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if (!src.toggle())
if(!src.toggle())
return src.attackby(null, user)
/obj/structure/secure_closet/attack_paw(mob/user as mob)
return src.attack_hand(user)
/obj/structure/closet/secure_closet/attack_paw(mob/user as mob)
return src.attack_hand(user)
+9 -9
View File
@@ -1,4 +1,4 @@
/obj/structure/secure_closet/captains
/obj/structure/closet/secure_closet/captains
name = "Captain's Closet"
req_access = list(access_captain)
@@ -20,7 +20,7 @@
/obj/structure/secure_closet/hop
/obj/structure/closet/secure_closet/hop
name = "Head of Personnel"
req_access = list(access_hop)
@@ -42,7 +42,7 @@
/obj/structure/secure_closet/hos
/obj/structure/closet/secure_closet/hos
name = "Head Of Security"
req_access = list(access_hos)
@@ -66,7 +66,7 @@
/obj/structure/secure_closet/warden
/obj/structure/closet/secure_closet/warden
name = "Warden's Locker"
req_access = list(access_armory)
@@ -87,7 +87,7 @@
/obj/structure/secure_closet/security
/obj/structure/closet/secure_closet/security
name = "Security Locker"
req_access = list(access_security)
@@ -108,7 +108,7 @@
/obj/structure/secure_closet/detective
/obj/structure/closet/secure_closet/detective
name = "Detective"
req_access = list(access_forensics_lockers)
icon_state = "cabinetdetective"
@@ -137,7 +137,7 @@
/obj/structure/secure_closet/injection
/obj/structure/closet/secure_closet/injection
name = "Lethal Injections"
req_access = list(access_hos)
@@ -151,7 +151,7 @@
/obj/structure/secure_closet/brig
/obj/structure/closet/secure_closet/brig
name = "Brig Locker"
req_access = list(access_brig)
anchored = 1
@@ -164,7 +164,7 @@
/obj/structure/secure_closet/courtroom
/obj/structure/closet/secure_closet/courtroom
name = "Courtroom Locker"
req_access = list(access_court)
+11 -10
View File
@@ -655,15 +655,16 @@
id = I
else
var/obj/item/weapon/card/I = user.equipped()
if(id)//Get id and replace it.
user.drop_item()
I.loc = src
user.put_in_hand(id)
id = I
else//Insert id.
user.drop_item()
I.loc = src
id = I
if (istype(I, /obj/item/weapon/card/id) && I:registered)
if(id)//Get id and replace it.
user.drop_item()
I.loc = src
user.put_in_hand(id)
id = I
else//Insert id.
user.drop_item()
I.loc = src
id = I
return
// access to status display signals
@@ -721,7 +722,7 @@
user.show_message("\blue Analyzing Results for [C]:")
user.show_message("\blue \t Overall Status: [C.stat > 1 ? "dead" : "[C.health]% healthy"]", 1)
user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.fireloss > 50 ? "\red" : "\blue"][C.fireloss]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1)
user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.getFireLoss() > 50 ? "\red" : "\blue"][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1)
user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]&deg;C ([C.bodytemperature*1.8-459.67]&deg;F)", 1)
for(var/datum/disease/D in C.viruses)
+1 -1
View File
@@ -506,7 +506,7 @@ Code:
menu += "Calculating navigation path"
if(7)
menu += "Unable to locate destination"
var/obj/structure/crate/C = QC.botstatus["load"]
var/obj/structure/closet/crate/C = QC.botstatus["load"]
menu += "<BR>Current Load: [ !C ? "<i>none</i>" : "[C.name] (<A href='byond://?src=\ref[QC];op=unload'><i>unload</i></A>)" ]<BR>"
menu += "Destination: [!QC.botstatus["dest"] ? "<i>none</i>" : QC.botstatus["dest"] ] (<A href='byond://?src=\ref[QC];op=setdest'><i>set</i></A>)<BR>"
menu += "Power: [QC.botstatus["powr"]]%<BR>"
+1 -1
View File
@@ -103,7 +103,7 @@
A.suiciding = 1
A << "Your core files are being wiped!"
while (A.stat != 2)
A.oxyloss += 2
A.adjustOxyLoss(2)
A.updatehealth()
sleep(10)
flush = 0
+1 -1
View File
@@ -31,7 +31,7 @@
/obj/item/device/flashlight/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
if(src.on && user.zone_sel.selecting == "eyes")
if ((user.mutations & CLUMSY || user.brainloss >= 60) && prob(50))//too dumb to use flashlight properly
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))//too dumb to use flashlight properly
return ..()//just hit them in the head
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")//don't have dexterity
+10 -10
View File
@@ -180,7 +180,7 @@ MASS SPECTROMETER
origin_tech = "magnets=1;biotech=1"
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
if ((user.mutations & CLUMSY || user.brainloss >= 60) && prob(50))
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
user << text("\red You try to analyze the floor's vitals!")
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1)
@@ -195,31 +195,31 @@ MASS SPECTROMETER
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1)
//Foreach goto(67)
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.fireloss + M.getBruteLoss())))
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.fireloss > 50 ? "\red[M.fireloss]" : M.fireloss, M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
else
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.fireloss > 50 ? "\red[M.fireloss]" : M.fireloss, M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)", 1)
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
else
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
if (M.cloneloss)
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
if (M.getCloneLoss())
user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
for(var/datum/disease/D in M.viruses)
if(!D.hidden[SCANNER])
user.show_message(text("\red <b>Warning: [D.form] Detected</b>\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
if (M.brainloss >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
user.show_message(text("\red Subject is brain dead."), 1)
else if (M.brainloss >= 60)
else if (M.getBrainLoss() >= 60)
user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
else if (M.brainloss >= 10)
else if (M.getBrainLoss() >= 10)
user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
src.add_fingerprint(user)
return
+1 -1
View File
@@ -22,7 +22,7 @@
if (M.stuttering)
src.storedinfo += "[M.name] stammers, \"[msg]\""
return
if (M.brainloss >= 60)
if (M.getBrainLoss() >= 60)
src.storedinfo += "[M.name] gibbers, \"[msg]\""
return
if (ending == "?")
+2 -2
View File
@@ -307,7 +307,7 @@ steam.start() -- spawns the effect
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & MASKINTERNALS))
else
M.drop_item()
M.oxyloss += 1
M.adjustOxyLoss(1)
if (M.coughedtime != 1)
M.coughedtime = 1
M.emote("cough")
@@ -331,7 +331,7 @@ steam.start() -- spawns the effect
return
else
M.drop_item()
M.oxyloss += 1
M.adjustOxyLoss(1)
if (M.coughedtime != 1)
M.coughedtime = 1
M.emote("cough")
+2 -2
View File
@@ -319,7 +319,7 @@ mob/proc/flash_weak_pain()
switch(src.damtype)
if("brute")
if(istype(src, /mob/living/carbon/metroid))
M.bruteloss += power
M.adjustBrainLoss(power)
else
@@ -376,7 +376,7 @@ mob/proc/flash_weak_pain()
M << "\red You stab yourself in the eye."
M.sdisabilities |= 1
M.weakened += 4
M.bruteloss += 10
M.adjustBruteLoss(10)
*/
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
+1 -1
View File
@@ -79,7 +79,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/robot
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15)
possible_transfer_amounts = list(5,10,15,25,30,50,100)
flags = FPRINT | TABLEPASS | OPENCONTAINER
volume = 60
var
+37 -29
View File
@@ -2,7 +2,7 @@
/obj/item/trash
icon = 'trash.dmi'
w_class = 1.0
desc = "It's \a trash"
desc = "This is rubbish."
raisins
name = "4no raisins"
icon_state= "4no_raisins"
@@ -50,35 +50,16 @@
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
return
/obj/item/trash/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/trash/O in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += O;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
/obj/item/weapon/trashbag
icon = 'trash.dmi'
icon_state = "trashbag0"
item_state = "trashbag"
name = "Trash bag"
desc = "A heavy-duty, no fun allowed trash bag."
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 25; //the number of trash it can carry.
flags = FPRINT | TABLEPASS | ONBELT
w_class = 1
w_class = 2.0
/obj/item/weapon/trashbag/update_icon()
if(contents.len == 0)
@@ -89,12 +70,39 @@
icon_state = "trashbag2"
else icon_state = "trashbag3"
/obj/item/weapon/trashbag/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/trashbag/attackby(obj/item/W as obj, mob/living/user as mob)
..()
if (istype(W, /obj/item/trash))
var/obj/item/trash/O = W
src.contents += O;
return
if (contents.len < capacity)
if (istype(W, /obj/item))
if (W.w_class <= 2)
var/obj/item/O = W
src.contents += O
else
user << "\blue The bag is full!"
/obj/item/weapon/trashbag/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
if(istype(target, /obj/item))
var/obj/item/W = target
if(W.w_class <= 2)
if(mode == 1)
if(contents.len < capacity) //slightly redundant, but it makes it prettier in the chatbox. -Pete
user << "\blue You pick up all the trash."
for(var/obj/item/O in get_turf(W))
if(contents.len < capacity)
if(O.w_class <= 2)
contents += O;
else
user << "\blue The bag is full!"
break
else
user << "\blue The bag is full!"
else
if(contents.len < capacity)
contents += W;
else
user << "\blue The bag is full!"
update_icon()
return
/obj/item/weapon/trashbag/verb/toggle_mode()
set name = "Switch Bag Method"
@@ -104,5 +112,5 @@
switch (mode)
if(1)
usr << "The bag now picks up all trash in a tile at once."
if(0)
usr << "The bag now picks up one trash at a time."
else
usr << "The bag now picks up one piece of trash at a time."
@@ -390,7 +390,7 @@ AI MODULES
/obj/item/weapon/aiModule/corp
name = "'Corporate' Core AI Module"
desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = null //Adminbus only for now, need to determine how the players take to this. --NEO
origin_tech = "programming=3;materials=4"
/obj/item/weapon/aiModule/corp/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
@@ -129,23 +129,6 @@ ZIPPO
else if(istype(W, /obj/item/weapon/match) && (W:lit > 0))
light("\red [user] lights their [name] with their [W]. How poor can you get?")
else if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/clothing/mask/cigarette/C in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += C;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
@@ -291,27 +274,6 @@ ZIPPO
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/trashbag))
var/obj/item/weapon/trashbag/S = W
if (S.mode == 1)
for (var/obj/item/weapon/cigpacket/CP in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += CP;
else
user << "\blue The bag is full."
break
user << "\blue You pick up all trash."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The bag is full."
S.update_icon()
return
/////////
//ZIPPO//
+25 -23
View File
@@ -22,31 +22,33 @@
/obj/item/weapon/dnainjector/proc/inject(mob/M as mob)
M.radiation += rand(20,50)
if (dnatype == "ui")
if (!block) //isolated block?
if (ue) //unique enzymes? yes
M.dna.uni_identity = dna
updateappearance(M, M.dna.uni_identity)
M.real_name = ue
M.name = ue
uses--
else //unique enzymes? no
M.dna.uni_identity = dna
if (!(M.mutations & HUSK)) // prevents husks from having their DNA changed
if (dnatype == "ui")
if (!block) //isolated block?
if (ue) //unique enzymes? yes
M.dna.uni_identity = dna
updateappearance(M, M.dna.uni_identity)
M.real_name = ue
M.name = ue
uses--
else //unique enzymes? no
M.dna.uni_identity = dna
updateappearance(M, M.dna.uni_identity)
uses--
else
M.dna.uni_identity = setblock(M.dna.uni_identity,block,dna,3)
updateappearance(M, M.dna.uni_identity)
uses--
else
M.dna.uni_identity = setblock(M.dna.uni_identity,block,dna,3)
updateappearance(M, M.dna.uni_identity)
uses--
if (dnatype == "se")
if (!block) //isolated block?
M.dna.struc_enzymes = dna
domutcheck(M, null)
uses--
else
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes,block,dna,3)
domutcheck(M, null,1)
uses--
if (dnatype == "se")
if (!block) //isolated block?
M.dna.struc_enzymes = dna
domutcheck(M, null)
uses--
else
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes,block,dna,3)
domutcheck(M, null,1)
uses--
spawn(0)//this prevents the collapse of space-time continuum
del(src)
@@ -178,6 +178,21 @@ MOP
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/rune/R in A)
del(R)
for(var/obj/effect/decal/cleanable/R in A)
del(R)
for(var/obj/effect/overlay/R in A)
del(R)
/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!"
@@ -185,25 +200,17 @@ MOP
if (istype(A, /turf/simulated))
for(var/mob/O in viewers(user, null))
O.show_message(text("\red <B>[] begins to clean []</B>", user, A), 1)
O.show_message("\red <B>[user] begins to clean \the [A]</B>", 1)
sleep(40)
clean(A)
user << "\blue You have finished mopping!"
src.reagents.reaction(A,1,10)
A.clean_blood()
for(var/obj/effect/rune/R in A)
del(R)
for(var/obj/effect/decal/cleanable/crayon/R in A)
del(R)
mopcount++
else if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/decal/cleanable/xenoblood) || istype(A, /obj/effect/rune) || istype(A,/obj/effect/decal/cleanable/crayon) || istype(A,/obj/effect/decal/cleanable/vomit) )
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(text("\red <B>[user] begins to clean [A]</B>"), 1)
sleep(20)
if(A)
user << "\blue You have finished mopping!"
var/turf/U = A.loc
src.reagents.reaction(U)
if(A) del(A)
O.show_message("\red <B>[user] begins to clean \the [get_turf(A)]</B>", 1)
sleep(40)
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.
@@ -253,7 +253,7 @@ CIRCULAR SAW
if(!istype(M))
return ..()
if(M.mutations & HUSK) return ..()
//if(M.mutations & HUSK) return ..()
if((user.mutations & CLUMSY) && prob(50))
M = user
+1 -1
View File
@@ -132,6 +132,6 @@
"/obj/item/weapon/wrapping_paper",
"/obj/item/weapon/wrapping_paper")
cost = 20
containertype = "/obj/structure/crate"
containertype = "/obj/structure/closet/crate"
containername = "New Year Celebration crate"
*/
+1
View File
@@ -3,6 +3,7 @@
desc = "Talk through this."
icon_state = "intercom"
anchored = 1
w_class = 4.0
var/number = 0
var/anyai = 1
var/mob/living/silicon/ai/ai = list()
-48
View File
@@ -1,48 +0,0 @@
/obj/item/device/Nradio
icon = 'radio.dmi'
name = "station bounced radio"
suffix = "\[3\]"
icon_state = "walkietalkie"
item_state = "walkietalkie"
flags = 450//FFFF what does this even mean likely conduct+onbelt+someothershit
throw_speed = 2
throw_range = 9
w_class = 2
g_amt = 25
m_amt = 75
var
//General things
frequency = 1459 //Default freq
broadcasting = 0 //Mike
listening = 1 //Speaker
secured = 0 //Can you see our wires
freerange = 0 // 0 - Sanitize frequencies, 1 - Full range
datum/radio_frequency/radio_connection = null
list/datum/radio_frequency/secure_radio_connections = new
//Internal things
obj/item/weapon/syndicate_uplink/uplink = null //If we have an uplink one of our freqs will activate it
wires = WIRE_RECEIVE | WIRE_TRANSMIT //Active wires
list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
last_transmission //What is this
obj/item/device/radio/patch_link = null //What is this
var/const
WIRE_TRANSMIT = 1 //sends a signal, like to set off a bomb or electrocute someone, or talk
WIRE_RECEIVE = 2 //we can hear things
TRANSMISSION_DELAY = 5 // only 2/second/radio antispam protection
FREQ_LISTENING = 1
proc
set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
+1 -1
View File
@@ -17,7 +17,7 @@
freerange = 0 // 0 - Sanitize frequencies, 1 - Full range
list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
flags = 450
flags = 450 // hello i'm a fucking idiot why is this 450?? CODE GODS PLEASE EXPLAIN~
throw_speed = 2
throw_range = 9
w_class = 2
-164
View File
@@ -1,164 +0,0 @@
/obj/item/device/radio/signaler
name = "Remote Signaling Device"
desc = "Used to remotely activate devices."
icon = 'new_assemblies.dmi'
icon_state = "signaller"
item_state = "signaler"
var/code = 30
w_class = 1
frequency = 1457
var/delay = 0
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isscrewdriver(W))
b_stat = !b_stat
if(b_stat)
user.show_message("\blue The [src.name] can now be attached!")
else
user.show_message("\blue The [src.name] is ready!")
return
else
..()
return
/obj/item/device/radio/signaler/attack_self(mob/user as mob, flag1)
user.machine = src
interact(user,flag1)
/obj/item/device/radio/signaler/interact(mob/user as mob, flag1)
var/t1
if ((src.b_stat && !( flag1 )))
t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
else
t1 = "-------"
var/dat = {"
<TT>
Speaker: [src.listening ? "<A href='byond://?src=\ref[src];listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];listen=1'>Disengaged</A>"]<BR>
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
<B>Frequency/Code</B> for signaler:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A>
[format_frequency(src.frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A>
[src.code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
[t1]
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return
/obj/item/device/radio/signaler/hear_talk()
return
/obj/item/device/radio/signaler/send_hear()
return
/obj/item/device/radio/signaler/receive_signal(datum/signal/signal)
if(!signal || (signal.encryption != code)) return 0
if (!( src.wires & 2 ))
return
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
/obj/item/device/radio/signaler/proc/send_signal(message="ACTIVATE")
if(last_transmission && world.time < (last_transmission + TRANSMISSION_DELAY))
return
last_transmission = world.time
if (!( src.wires & 4 ))
return
if((usr)&&(ismob(usr)))
var/time = time2text(world.realtime,"hh:mm:ss")
lastsignalers.Add("[time] <B>:</B> [usr.key] used [src] @ location ([src.loc.x],[src.loc.y],[src.loc.z]) <B>:</B> [format_frequency(frequency)]/[code]")
var/datum/signal/signal = new
signal.source = src
signal.encryption = code
signal.data["message"] = message
radio_connection.post_signal(src, signal)
return
/obj/item/device/radio/signaler/Topic(href, href_list)
//..()
if (usr.stat)
return
if (usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))
usr.machine = src
if (href_list["freq"])
..()
return
else
if (href_list["code"])
src.code += text2num(href_list["code"])
src.code = round(src.code)
src.code = min(100, src.code)
src.code = max(1, src.code)
else
if (href_list["send"])
spawn( 0 )
src.send_signal("ACTIVATE")
return
else
if (href_list["listen"])
src.listening = text2num(href_list["listen"])
else
if (href_list["wires"])
var/t1 = text2num(href_list["wires"])
if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
return
if ((!( src.b_stat ) && !( src.master )))
return
if (t1 & 1)
if (src.wires & 1)
src.wires &= 65534
else
src.wires |= 1
else
if (t1 & 2)
if (src.wires & 2)
src.wires &= 65533
else
src.wires |= 2
else
if (t1 & 4)
if (src.wires & 4)
src.wires &= 65531
else
src.wires |= 4
src.add_fingerprint(usr)
if (!src.master)
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client)
src.attack_self(M)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client)
src.attack_self(M)
else
usr << browse(null, "window=radio")
return
return
+2 -2
View File
@@ -4,7 +4,7 @@
var/obj/screen/close/closer = null
var/icon_locking = "secureb"
var/icon_sparking = "securespark"
var/icon_open = "secure0"
var/icon_opened = "secure0"
var/locked = 1
var/code = ""
var/l_code = null
@@ -216,7 +216,7 @@
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
src.locked = 0
src.overlays = null
overlays += image('storage.dmi', icon_open)
overlays += image('storage.dmi', icon_opened)
src.code = null
else
src.code = "ERROR"
+1 -1
View File
@@ -2,7 +2,7 @@
name = "secure safe"
icon = 'storage.dmi'
icon_state = "safe"
icon_open = "safe0"
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
flags = FPRINT | TABLEPASS
+251
View File
@@ -0,0 +1,251 @@
// TARGET STAKE
// TARGET
// Basically they are for the firing range
/obj/structure/target_stake
name = "target stake"
desc = "A thin platform with negatively-magnetized wheels."
icon = 'objects.dmi'
icon_state = "target_stake"
density = 1
flags = CONDUCT
var/obj/item/target/pinned_target // the current pinned target
Move()
..()
// Move the pinned target along with the stake
if(pinned_target in view(3, src))
pinned_target.loc = loc
else // Sanity check: if the pinned target can't be found in immediate view
pinned_target = null
density = 1
attackby(obj/item/W as obj, mob/user as mob)
// Putting objects on the stake. Most importantly, targets
if(pinned_target)
return // get rid of that pinned target first!
if(istype(W, /obj/item/target))
density = 0
W.density = 1
user.drop_item(src)
W.loc = loc
W.layer = 3.1
pinned_target = W
user << "You slide the target into the stake."
user.drop_item(src)
W.loc = loc
return
attack_hand(mob/user as mob)
// taking pinned targets off!
if(pinned_target)
density = 1
pinned_target.density = 0
pinned_target.layer = OBJ_LAYER
pinned_target.loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hand(pinned_target)
user << "You take the target out of the stake."
else
pinned_target.loc = get_turf_loc(user)
user << "You take the target out of the stake."
pinned_target = null
// Targets, the things that actually get shot!
/obj/item/target
name = "shooting target"
desc = "A shooting target."
icon = 'objects.dmi'
icon_state = "target_h"
density = 0
var/hp = 1800
var/icon/virtualIcon
var/list/bulletholes = list()
Del()
// if a target is deleted and associated with a stake, force stake to forget
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
T.pinned_target = null
T.density = 1
break
..() // delete target
Move()
..()
// After target moves, check for nearby stakes. If associated, move to target
for(var/obj/structure/target_stake/M in view(3,src))
if(M.density == 0 && M.pinned_target == src)
M.loc = loc
// This may seem a little counter-intuitive but I assure you that's for a purpose.
// Stakes are the ones that carry targets, yes, but in the stake code we set
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
// the stake now, we have to push the target.
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool))
if(W:welding == 1)
overlays = null
usr << "You slice off [src]'s uneven chunks of aluminum and scorch marks."
return
attack_hand(mob/user as mob)
// taking pinned targets off!
var/obj/structure/target_stake/stake
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
stake = T
break
if(stake)
if(stake.pinned_target)
stake.density = 1
density = 0
layer = OBJ_LAYER
loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hand(src)
user << "You take the target out of the stake."
else
src.loc = get_turf_loc(user)
user << "You take the target out of the stake."
stake.pinned_target = null
return
else
..()
syndicate
icon_state = "target_s"
desc = "A shooting target that looks like a syndicate scum."
hp = 2600 // i guess syndie targets are sturdier?
alien
icon_state = "target_q"
desc = "A shooting target that looks like a xenomorphic alien."
hp = 2350 // alium onest too kinda
/obj/item/target/bullet_act(var/obj/item/projectile/Proj)
var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!"
var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1)
var/decaltype = 1 // 1 - scorch, 2 - bullet
if(istype(/obj/item/projectile/bullet, Proj))
decaltype = 2
virtualIcon = new(icon, icon_state)
if( virtualIcon.GetPixel(p_x, p_y) ) // if the located pixel isn't blank (null)
hp -= Proj.damage
if(hp <= 0)
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << "\red [src] breaks into tiny pieces and collapses!"
del(src)
// Create a temporary object to represent the damage
var/obj/bmark = new
bmark.pixel_x = p_x
bmark.pixel_y = p_y
bmark.icon = 'effects.dmi'
bmark.layer = 3.5
bmark.icon_state = "scorch"
if(decaltype == 1)
// Energy weapons are hot. they scorch!
// offset correction
bmark.pixel_x--
bmark.pixel_y--
if(Proj.damage >= 20)
bmark.icon_state = "scorch"
bmark.dir = pick(NORTH,SOUTH,EAST,WEST) // random scorch design
else
bmark.icon_state = "light_scorch"
else
// Bullets are hard. They make dents!
bmark.icon_state = "dent"
if(Proj.damage >= 10 && bulletholes.len <= 35) // maximum of 35 bullet holes
if(decaltype == 2) // bullet
if(prob(Proj.damage+30)) // bullets make holes more commonly!
new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole
else // Lasers!
if(prob(Proj.damage-10)) // lasers make holes less commonly
new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole
// draw bullet holes
for(var/datum/bullethole/B in bulletholes)
virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right
virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom
overlays += bmark // add the decal
icon = virtualIcon // apply bulletholes over decals
return
return -1 // the bullet/projectile goes through the target! Ie, you missed
// Small memory holder entity for transparent bullet holes
/datum/bullethole
// First box
var/b1x1 = 0
var/b1x2 = 0
var/b1y = 0
// Second box
var/b2x = 0
var/b2y1 = 0
var/b2y2 = 0
New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0)
if(!Target) return
// Randomize the first box
b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
b1y = pixel_y
if(prob(35))
b1y += rand(-4,4)
// Randomize the second box
b2x = pixel_x
if(prob(35))
b2x += rand(-4,4)
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
Target.bulletholes.Add(src)
+5 -2
View File
@@ -3,7 +3,7 @@
// if (src.loc != usr)
// return
// if ((istype(usr, /mob/living/carbon/human) || (ticker && ticker.mode.name == "monkey")))
if (ishuman(usr) || ismonkey(usr)) //so monkies can take off their backpacks -- Urist
if (ishuman(usr) || ismonkey(usr)) //so monkeys can take off their backpacks -- Urist
var/mob/M = usr
if (!( istype(over_object, /obj/screen) ))
return ..()
@@ -38,6 +38,8 @@
desc = "A backpack that opens into a localized pocket of Blue Space."
origin_tech = "bluespace=4"
icon_state = "holdingpack"
max_w_class = 4
max_combined_w_class = 28
New()
..()
@@ -50,7 +52,8 @@
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
del(W)
new /obj/machinery/singularity (get_turf(src))
var/obj/machinery/singularity/singulo = new /obj/machinery/singularity (get_turf(src))
singulo.energy = 300 //should make it a bit bigger~
message_admins("[key_name_admin(user)] detonated a bag of holding")
log_game("[key_name(user)] detonated a bag of holding")
del(src)
+1 -1
View File
@@ -57,7 +57,7 @@
playsound(src.loc, "punch", 25, 1, -1)
else
if(ishuman(M) && !istype(M:head, /obj/item/clothing/head/helmet))
M.brainloss += 10
M.adjustBrainLoss(10)
M << "\red You feel dumber."
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] beats [] over the head with []!</B>", user, M, src), 1)
+80 -79
View File
@@ -1,150 +1,148 @@
/obj/structure/crate
/obj/structure/closet/crate
desc = "A crate."
name = "Crate"
icon = 'storage.dmi'
icon_state = "crate"
density = 1
var/openicon = "crateopen"
var/closedicon = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
req_access = null
var/opened = 0
var/locked = 0
opened = 0
flags = FPRINT
m_amt = 7500
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
/obj/structure/crate/internals
/obj/structure/closet/crate/internals
desc = "A internals crate."
name = "Internals crate"
icon = 'storage.dmi'
icon_state = "o2crate"
density = 1
openicon = "o2crateopen"
closedicon = "o2crate"
icon_opened = "o2crateopen"
icon_closed = "o2crate"
/obj/structure/crate/trashcart
/obj/structure/closet/crate/trashcart
desc = "A heavy, metal trashcart with wheels."
name = "Trash Cart"
icon = 'storage.dmi'
icon_state = "trashcart"
density = 1
openicon = "trashcartopen"
closedicon = "trashcart"
icon_opened = "trashcartopen"
icon_closed = "trashcart"
/obj/structure/crate/hat
/obj/structure/closet/crate/hat
desc = "A crate filled with Valuable Collector's Hats!."
name = "Hat Crate"
icon = 'storage.dmi'
icon_state = "crate"
density = 1
openicon = "crateopen"
closedicon = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
/obj/structure/crate/medical
/obj/structure/closet/crate/medical
desc = "A medical crate."
name = "Medical crate"
icon = 'storage.dmi'
icon_state = "medicalcrate"
density = 1
openicon = "medicalcrateopen"
closedicon = "medicalcrate"
icon_opened = "medicalcrateopen"
icon_closed = "medicalcrate"
/obj/structure/crate/rcd
/obj/structure/closet/crate/rcd
desc = "A crate for the storage of the RCD."
name = "RCD crate"
icon = 'storage.dmi'
icon_state = "crate"
density = 1
openicon = "crateopen"
closedicon = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
/obj/structure/crate/freezer
/obj/structure/closet/crate/freezer
desc = "A freezer."
name = "Freezer"
icon = 'storage.dmi'
icon_state = "freezer"
density = 1
openicon = "freezeropen"
closedicon = "freezer"
icon_opened = "freezeropen"
icon_closed = "freezer"
/obj/structure/crate/bin
/obj/structure/closet/crate/bin
desc = "A large bin."
name = "Large bin"
icon = 'storage.dmi'
icon_state = "largebin"
density = 1
openicon = "largebinopen"
closedicon = "largebin"
icon_opened = "largebinopen"
icon_closed = "largebin"
/obj/structure/crate/radiation
/obj/structure/closet/crate/radiation
desc = "A crate with a radiation sign on it."
name = "Radioactive gear crate"
icon = 'storage.dmi'
icon_state = "radiation"
density = 1
openicon = "radiationopen"
closedicon = "radiation"
icon_opened = "radiationopen"
icon_closed = "radiation"
/obj/item/clothing/suit/radiation
/obj/structure/crate/secure/weapon
/obj/structure/closet/crate/secure/weapon
desc = "A secure weapons crate."
name = "Weapons crate"
icon = 'storage.dmi'
icon_state = "weaponcrate"
density = 1
openicon = "weaponcrateopen"
closedicon = "weaponcrate"
icon_opened = "weaponcrateopen"
icon_closed = "weaponcrate"
/obj/structure/crate/secure/plasma
/obj/structure/closet/crate/secure/plasma
desc = "A secure plasma crate."
name = "Plasma crate"
icon = 'storage.dmi'
icon_state = "plasmacrate"
density = 1
openicon = "plasmacrateopen"
closedicon = "plasmacrate"
icon_opened = "plasmacrateopen"
icon_closed = "plasmacrate"
/obj/structure/crate/secure/gear
/obj/structure/closet/crate/secure/gear
desc = "A secure gear crate."
name = "Gear crate"
icon = 'storage.dmi'
icon_state = "secgearcrate"
density = 1
openicon = "secgearcrateopen"
closedicon = "secgearcrate"
icon_opened = "secgearcrateopen"
icon_closed = "secgearcrate"
/obj/structure/crate/secure/bin
/obj/structure/closet/crate/secure/bin
desc = "A secure bin."
name = "Secure bin"
icon_state = "largebins"
openicon = "largebinsopen"
closedicon = "largebins"
icon_opened = "largebinsopen"
icon_closed = "largebins"
redlight = "largebinr"
greenlight = "largebing"
sparks = "largebinsparks"
emag = "largebinemag"
/obj/structure/crate/secure
/obj/structure/closet/crate/secure
desc = "A secure crate."
name = "Secure crate"
icon_state = "securecrate"
openicon = "securecrateopen"
closedicon = "securecrate"
icon_opened = "securecrateopen"
icon_closed = "securecrate"
var/redlight = "securecrater"
var/greenlight = "securecrateg"
var/sparks = "securecratesparks"
var/emag = "securecrateemag"
var/broken = 0
locked = 1
var/locked = 1
/obj/structure/crate/hydroponics
/obj/structure/closet/crate/hydroponics
name = "Hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon = 'storage.dmi'
icon_state = "hydrocrate"
openicon = "hydrocrateopen"
closedicon = "hydrocrate"
icon_opened = "hydrocrateopen"
icon_closed = "hydrocrate"
density = 1
/* New() // This stuff shouldn't be here, it should be in /datum/supply_packs/hydroponics
..()
@@ -158,14 +156,14 @@
new /obj/item/weapon/pestspray(src)
new /obj/item/weapon/pestspray(src) */
/obj/structure/crate/hydroponics/prespawned
/obj/structure/closet/crate/hydroponics/prespawned
//This exists so the prespawned hydro crates spawn with their contents.
/* name = "Hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon = 'storage.dmi'
icon_state = "hydrocrate"
openicon = "hydrocrateopen"
closedicon = "hydrocrate"
icon_opened = "hydrocrateopen"
icon_closed = "hydrocrate"
density = 1*/
New()
..()
@@ -179,7 +177,7 @@
// new /obj/item/weapon/pestspray(src)
// new /obj/item/weapon/pestspray(src)
/obj/structure/crate/New()
/obj/structure/closet/crate/New()
..()
spawn(1)
if(!opened) // if closed, any item at the crate's loc is put in the contents
@@ -187,7 +185,7 @@
if(I.density || I.anchored || I == src) continue
I.loc = src
/obj/structure/crate/secure/New()
/obj/structure/closet/crate/secure/New()
..()
if(locked)
overlays = null
@@ -196,14 +194,14 @@
overlays = null
overlays += greenlight
/obj/structure/crate/rcd/New()
/obj/structure/closet/crate/rcd/New()
..()
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd(src)
/obj/structure/crate/radiation/New()
/obj/structure/closet/crate/radiation/New()
..()
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
@@ -214,7 +212,7 @@
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
/obj/structure/crate/proc/open()
/obj/structure/closet/crate/open()
playsound(src.loc, 'click.ogg', 15, 1, -3)
for(var/obj/O in src)
@@ -222,34 +220,37 @@
for(var/mob/M in src)
M.loc = get_turf(src)
icon_state = openicon
icon_state = icon_opened
src.opened = 1
/obj/structure/crate/proc/close()
/obj/structure/closet/crate/close()
playsound(src.loc, 'click.ogg', 15, 1, -3)
for(var/obj/O in get_turf(src))
if(O.density || O.anchored || O == src) continue
O.loc = src
icon_state = closedicon
icon_state = icon_closed
src.opened = 0
/obj/structure/crate/attack_hand(mob/user as mob)
if(!locked)
if(opened) close()
else open()
else
user << "\red It's locked."
/obj/structure/closet/crate/attack_hand(mob/user as mob)
if(opened) close()
else open()
return
/obj/structure/crate/secure/attack_hand(mob/user as mob)
if(locked && allowed(user) && !broken)
user << "\blue You unlock the [src]."
src.locked = 0
overlays = null
overlays += greenlight
return ..()
/obj/structure/closet/crate/secure/attack_hand(mob/user as mob)
if(locked && !broken)
if (allowed(user))
user << "\blue You unlock the [src]."
src.locked = 0
overlays = null
overlays += greenlight
return
else
user << "\red It's locked."
return
else
..()
/obj/structure/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
/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]."
src.locked = 1
@@ -269,10 +270,10 @@
return ..()
/obj/structure/crate/attack_paw(mob/user as mob)
/obj/structure/closet/crate/attack_paw(mob/user as mob)
return attack_hand(user)
/obj/structure/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/O = W
if (O.amount > 3)
@@ -288,7 +289,7 @@
W.loc = src.loc
else return attack_hand(user)
/obj/structure/crate/secure/emp_act(severity)
/obj/structure/closet/crate/secure/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(!broken && !opened && prob(50/severity))
@@ -312,7 +313,7 @@
..()
/obj/structure/crate/ex_act(severity)
/obj/structure/closet/crate/ex_act(severity)
switch(severity)
if(1.0)
for(var/obj/O in src.contents)
+4 -3
View File
@@ -150,9 +150,10 @@
user << "\red The [src] is full, make some space."
return
if ( W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
user << "\red The [src] cannot hold [W] as it's a storage item of the same size."
return //To prevent the stacking of the same sized items.
if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
if(!istype(src, /obj/item/weapon/storage/backpack/holding)) //bohs should be able to hold backpacks again. The override for putting a boh in a boh is in backpack.dm.
user << "\red The [src] cannot hold [W] as it's a storage item of the same size."
return //To prevent the stacking of the same sized items.
user.u_equip(W)
W.loc = src
+3 -3
View File
@@ -144,7 +144,7 @@
armed = 0
/*
else if (ismouse(target))
target.bruteloss = 100
target.adjustBruteLoss(100)
*/
/obj/item/weapon/mousetrap/attack_self(mob/user as mob)
@@ -153,7 +153,7 @@
user << "\blue You arm the mousetrap."
else
icon_state = "mousetrap"
if((user.brainloss >= 60 || user.mutations & CLUMSY) && prob(50))
if((user.getBrainLoss() >= 60 || user.mutations & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -170,7 +170,7 @@
/obj/item/weapon/mousetrap/attack_hand(mob/user as mob)
if(armed)
if((user.brainloss >= 60 || user.mutations & CLUMSY) && prob(50))
if((user.getBrainLoss() >= 60 || user.mutations & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"