Merge remote-tracking branch 'upstream/master' into traymesons

Conflicts:
	code/modules/research/designs.dm
	icons/mob/eyes.dmi
	icons/obj/clothing/glasses.dmi
This commit is contained in:
xxalpha
2015-02-27 21:15:01 +00:00
582 changed files with 9057 additions and 5474 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
icon_state = "apc_frame"
flags = CONDUCT
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/wrench))
new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 )
+1 -1
View File
@@ -42,7 +42,7 @@
mob_storage_capacity = 2
/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user)
/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params)
if (istype(I, /obj/item/weapon/pen))
var/t = stripped_input(user, "What would you like the label to be?", name, null, 53)
if(user.get_active_hand() != I)
+2 -2
View File
@@ -23,7 +23,7 @@
icon_state = "candle[i][lit ? "_lit" : ""]"
/obj/item/candle/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/candle/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -54,7 +54,7 @@
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
SetLuminosity(CANDLE_LUMINOSITY)
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/candle/process()
+1 -1
View File
@@ -898,7 +898,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return
// access to status display signals
/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob)
/obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob, params)
..()
if(istype(C, /obj/item/weapon/cartridge) && !cartridge)
cartridge = C
@@ -308,7 +308,7 @@
break
src.updateSelfDialog()
/obj/item/device/camera_bug/attackby(var/obj/item/W as obj,var/mob/living/user as mob)
/obj/item/device/camera_bug/attackby(var/obj/item/W as obj,var/mob/living/user as mob, params)
if(istype(W,/obj/item/weapon/screwdriver) && expansion)
expansion.loc = get_turf(loc)
user << "You unscrew [expansion]."
@@ -125,7 +125,8 @@
master.disrupt()
/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction)
if(istype(loc, /turf/space)) return //No magical space movement!
if(istype(loc, /turf/space) || !direction)
return //No magical space movement!
if(can_move)
can_move = 0
@@ -259,6 +259,12 @@ obj/item/device/flashlight/lamp/bananalamp
item_state = "torch"
on_damage = 10
/obj/item/device/flashlight/lantern
name = "lantern"
icon_state = "lantern"
desc = "A mining lantern."
brightness_on = 6 // luminosity when on
/obj/item/device/flashlight/slime
gender = PLURAL
@@ -283,7 +289,7 @@ obj/item/device/flashlight/lamp/bananalamp
/obj/item/device/flashlight/emp/New()
..()
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/device/flashlight/emp/Destroy()
SSobj.processing.Remove(src)
@@ -44,7 +44,7 @@
/obj/item/device/laser_pointer/attack(mob/living/M, mob/user)
laser_act(M, user)
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user)
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/stock_parts/micro_laser))
if(!diode)
user.drop_item()
@@ -186,7 +186,7 @@
if(energy <= max_energy)
if(!recharging)
recharging = 1
SSobj.processing.Add(src)
SSobj.processing |= src
if(energy <= 0)
user << "<span class='warning'>You've overused the battery of [src], now it needs time to recharge!</span>"
recharge_locked = 1
@@ -70,7 +70,7 @@
..()
user << "It has [uses] light\s remaining."
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user)
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = W
@@ -0,0 +1,63 @@
/obj/item/device/megaphone
name = "megaphone"
desc = "A device used to project your voice. Loudly."
icon_state = "megaphone"
item_state = "radio"
w_class = 2
flags = FPRINT
siemens_coefficient = 1
var/spamcheck = 0
var/emagged = 0
var/insults = 0
var/list/insultmsg = list("FUCK EVERYONE!", "DEATH TO LIZARDS!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!", "VIVA!", "HONK!")
/obj/item/device/megaphone/attack_self(mob/living/carbon/human/user as mob)
if(user.client)
if(user.client.prefs.muted & MUTE_IC)
src << "<span class='warning'>You cannot speak in IC (muted).</span>"
return
if(!ishuman(user))
user << "<span class='warning'>You don't know how to use this!</span>"
return
if(user.can_speak())
user << "<span class='warning'>You find yourself unable to speak at all.</span>"
return
if(spamcheck > world.time)
user << "<span class='warning'>\The [src] needs to recharge!</span>"
return
var/message = copytext(sanitize(input(user, "Shout a message?", "Megaphone", null) as text),1,MAX_MESSAGE_LEN)
if(!message)
return
message = capitalize(message)
if ((src.loc == user && user.stat == 0))
if(emagged)
if(insults)
user.audible_message("<B>[user]</B> broadcasts, <FONT size=3>\"[pick(insultmsg)]\"</FONT>", null, 1) // 2 stands for hearable message
insults--
else
user << "<span class='warning'>*BZZZZzzzzzt*</span>"
else
user.audible_message("<B>[user]</B> broadcasts, <FONT size=3>\"[message]\"</FONT>", null, 1) // 2 stands for hearable message
playsound(loc, 'sound/items/megaphone.ogg', 100, 0, 1)
spamcheck = world.time + 50
return
/obj/item/device/megaphone/emag_act(mob/user)
user << "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>"
emagged = 1
insults = rand(1, 3) //to prevent dickflooding
/obj/item/device/megaphone/sec
name = "security megaphone"
icon_state = "megaphone-sec"
/obj/item/device/megaphone/command
name = "command megaphone"
icon_state = "megaphone-command"
/obj/item/device/megaphone/cargo
name = "supply megaphone"
icon_state = "megaphone-cargo"
+2 -2
View File
@@ -47,14 +47,14 @@
if(OPERATING)
if(!attached)
return
SSobj.processing.Add(src)
SSobj.processing |= src
anchored = 1
mode = value
update_icon()
SetLuminosity(0)
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
if(mode == DISCONNECTED)
var/turf/T = loc
@@ -31,7 +31,7 @@
return
..()
/obj/item/device/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/clothing/head/helmet))
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user )
@@ -13,7 +13,7 @@
/obj/item/device/encryptionkey/New()
/obj/item/device/encryptionkey/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/encryptionkey/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/item/device/encryptionkey/syndicate
icon_state = "cypherkey"
@@ -200,7 +200,7 @@
/obj/item/device/radio/headset/ai/receive_range(freq, level)
return ..(freq, level, 1)
/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
// ..()
user.set_machine(src)
if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ ))))
@@ -488,7 +488,7 @@
else
user << "<span class='notice'>[name] can not be modified or attached.</span>"
/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
user.set_machine(src)
if (!( istype(W, /obj/item/weapon/screwdriver) ))
@@ -536,7 +536,7 @@
..()
set_frequency(SYND_FREQ)
/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
// ..()
user.set_machine(src)
if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ ))))
+31 -3
View File
@@ -25,7 +25,7 @@ MASS SPECTROMETER
icon_state = copytext(icon_state, 1, length(icon_state))+"[on]"
if(on)
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/device/t_scanner/process()
@@ -75,8 +75,17 @@ MASS SPECTROMETER
throw_range = 7
m_amt = 200
origin_tech = "magnets=1;biotech=1"
var/mode = 1;
var/mode = 1
var/scanchems = 0
/obj/item/device/healthanalyzer/attack_self(mob/user)
if(!scanchems)
user << "<span class = 'notice'>You switch the health analyzer to scan chemical contents.</span>"
scanchems = 1
else
user << "<span class = 'notice'>You switch the health analyzer to check physical health.</span>"
scanchems = 0
return
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
// Clumsiness/brain damage check
@@ -92,7 +101,10 @@ MASS SPECTROMETER
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>")
healthscan(user, M, mode)
if(!scanchems)
healthscan(user, M, mode)
else
chemscan(user, M)
src.add_fingerprint(user)
return
@@ -177,6 +189,22 @@ MASS SPECTROMETER
else
user.show_message("<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span>")
/proc/chemscan(var/mob/living/user, var/mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.reagents)
if(H.reagents.reagent_list.len)
user.show_message("<span class='notice'>Subject contains the following reagents:</span>")
for(var/datum/reagent/R in H.reagents.reagent_list)
user.show_message("<span class='notice'>[R.volume]u of [R.name][R.overdosed == 1 ? "</span> - <span class = 'userdanger'>OVERDOSING</span>" : ".</span>"]")
else
user.show_message("<span class = 'notice'>Subject contains no reagents.</span>")
if(H.reagents.addiction_list.len)
user.show_message("<span class='userdanger'>Subject is addicted to the following reagents:</span>")
for(var/datum/reagent/R in H.reagents.addiction_list)
user.show_message("<span class='danger'>[R.name]</span>")
else
user.show_message("<span class='notice'>Subject is not addicted to any reagents.</span>")
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
@@ -31,7 +31,7 @@
user << "The wire panel is [open_panel ? "opened" : "closed"]."
/obj/item/device/taperecorder/attackby(obj/item/I, mob/user)
/obj/item/device/taperecorder/attackby(obj/item/I, mob/user, params)
if(!mytape && istype(I, /obj/item/device/tape))
user.drop_item()
I.loc = src
@@ -280,7 +280,7 @@
ruined = 0
/obj/item/device/tape/attackby(obj/item/I, mob/user)
/obj/item/device/tape/attackby(obj/item/I, mob/user, params)
if(ruined && istype(I, /obj/item/weapon/screwdriver))
user << "<span class='notice'>You start winding the tape back in.</span>"
if(do_after(user, 120))
@@ -13,7 +13,7 @@
/obj/item/device/transfer_valve/IsAssemblyHolder()
return 1
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user)
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/weapon/tank))
if(tank_one && tank_two)
user << "<span class='warning'>There are already two tanks attached, remove one first.</span>"
+1 -1
View File
@@ -172,7 +172,7 @@ var/list/world_uplinks = list()
return 1
return 0
//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it)
/obj/item/device/radio/uplink/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/radio/uplink/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/antag_spawner/borg_tele))
var/obj/item/weapon/antag_spawner/borg_tele/S = W
if(!S.used)
+253
View File
@@ -0,0 +1,253 @@
#define MAX_TAPE_RANGE 3
//The max length of a line of hazard tape by tile range
//Define all tape types in hazardtape.dm
/obj/item/tapeproj
icon = 'icons/obj/holotape.dmi'
icon_state = "rollstart"
w_class = 2.0
var/turf/start
var/turf/end
var/tape_type = /obj/item/holotape
var/icon_base
var/charging = 0
/obj/item/holotape
icon = 'icons/obj/holotape.dmi'
anchored = 1
density = 1
var/icon_base
var/health = 10
/obj/item/tapeproj/security
name = "security holotape projector"
desc = "A security hard-light holotape projector used to create holotape. It can be placed in segments along hallways or on airlocks to signify crime scenes."
icon_state = "security_start"
tape_type = /obj/item/holotape/security
icon_base = "security"
/obj/item/holotape/security
name = "security holotape"
desc = "A length of security hard-light holotape. It reads: SECURITY LINE | DO NOT CROSS."
icon_base = "security"
/obj/item/tapeproj/engineering
name = "engineering holotape projector"
desc = "An engineering hard-light holotape projector used to create holotape. It can be placed in segments along hallways or on airlocks to show hazardous areas."
icon_state = "engineering_start"
tape_type = /obj/item/holotape/engineering
icon_base = "engineering"
/obj/item/holotape/engineering
name = "engineering holotape"
desc = "A length of engineering hard-light holotape. It reads: HAZARD AHEAD // DO NOT CROSS."
icon_base = "engineering"
/obj/item/tapeproj/dropped()
reset()
/obj/item/tapeproj/equipped()
reset()
/obj/item/tapeproj/proc/reset()
if(icon_state == "[icon_base]_stop")
icon_state = "[icon_base]_start"
start = null
return
/obj/item/tapeproj/attack_self(var/mob/user)
if(charging)
usr << "<span class='warning'>[src] is recharging!</span>"
return
if(icon_state == "[icon_base]_start")
start = get_turf(src)
usr << "<span class='notice'>You project the start of the [icon_base] holotape.</span>"
icon_state = "[icon_base]_stop"
else
icon_state = "[icon_base]_start"
end = get_turf(src)
if(start.y != end.y && start.x != end.x || start.z != end.z)
usr << "<span class='warning'>[src] can only be projected horizontally or vertically.</span>"
return
if(get_dist(start,end) >= MAX_TAPE_RANGE)
usr << "<span class='warning'>Your holotape segment is too long! It must be [MAX_TAPE_RANGE] tiles long or shorter!</span>"
return
var/turf/cur = start
var/dir
if(start.x == end.x)
var/d = end.y-start.y
if(d) d = d/abs(d)
end = get_turf(locate(end.x,end.y+d,end.z))
dir = "v"
else
var/d = end.x-start.x
if(d) d = d/abs(d)
end = get_turf(locate(end.x+d,end.y,end.z))
dir = "h"
var/can_place = 1
while (cur!=end && can_place)
if(cur.density == 1)
can_place = 0
else if(istype(cur, /turf/space))
can_place = 0
else
for(var/obj/O in cur)
if(!istype(O, /obj/item/holotape) && O.density)
can_place = 0
break
cur = get_step_towards(cur,end)
if(!can_place)
usr << "<span class='warning'>You can't project the [icon_base] holotape through that!</span>"
return
cur = start
var/tapetest = 0
while (cur!=end)
for(var/obj/item/holotape/Ptest in cur)
if(Ptest.icon_state == "[Ptest.icon_base]_[dir]")
tapetest = 1
if(tapetest != 1)
var/obj/item/holotape/P = new tape_type(cur)
P.icon_state = "[P.icon_base]_[dir]"
cur = get_step_towards(cur,end)
usr << "<span class='notice'>You finish project the legnth of [icon_base] holotape.</span>"
user.visible_message("<span class='warning'>[user] finishes projecting the length of [icon_base] holotape.</span>")
charging = 1
spawn(40)
charging = 0
/obj/item/tapeproj/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
if(charging)
return
if(proximity_flag == 0) // not adjacent
return
if(istype(target, /obj/machinery/door/airlock) || istype(target, /obj/machinery/door/firedoor) || istype(target, /obj/structure/window))
var/turf = get_turf(target)
if(locate(tape_type) in turf) //Don't you dare stack tape
return
if(istype(target, /obj/structure/window))
var/obj/structure/window/W = target
if(!(W.dir == 5) || !(W.fulltile == 1))
return
user << "<span class='notice'>You start projecting the [icon_base] holotape onto [target].</span>"
if(!do_mob(user, target, 30))
return
var/atom/tape = new tape_type(turf)
tape.icon_state = "[icon_base]_door"
tape.layer = 3.2
user << "<span class='notice'>You project the [icon_base] holotape onto [target].</span>"
charging = 1
spawn(40)
charging = 0
/obj/item/holotape/Bumped(var/mob/M)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.m_intent == "walk")
var/turf/T = get_turf(src)
C.loc = T
if(M.has_unlimited_silicon_privilege)
var/turf/T = get_turf(src)
M.loc = T
/obj/item/holotape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!density) return 1
if(air_group || (height==0)) return 1
if((mover.flags & PASSGLASS || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
return 1
else
return 0
/obj/item/holotape/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
user.visible_message("<span class='warning'>[user] hits [src].</span>", \
"<span class='warning'>You hit [src].</span>" )
health -= rand(1,2)
healthcheck()
/obj/item/holotape/proc/healthcheck()
if(health <= 0)
breaktape()
/obj/item/holotape/ex_act(severity, target)
breaktape()
/obj/item/holotape/blob_act()
breaktape()
/obj/item/holotape/attack_paw(mob/living/user)
attack_hand(user)
/obj/item/holotape/bullet_act(var/obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
..()
if(health <= 0)
breaktape()
return
/obj/item/holotape/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
add_fingerprint(user)
health -= W.force * 0.3
healthcheck()
..()
return
/obj/item/holotape/hitby(AM as mob|obj)
..()
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
var/tforce = 0
if(ismob(AM))
tforce = 5
else if(isobj(AM))
var/obj/item/I = AM
tforce = max(0, I.throwforce * 0.5)
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
health = max(0, health - tforce)
healthcheck()
/obj/item/holotape/proc/breaktape()
var/dir[2]
var/icon_dir = src.icon_state
if(icon_dir == "[src.icon_base]_h")
dir[1] = EAST
dir[2] = WEST
if(icon_dir == "[src.icon_base]_v")
dir[1] = NORTH
dir[2] = SOUTH
for(var/i=1;i<3;i++)
var/N = 0
var/turf/cur = get_step(src,dir[i])
while(N != 1)
N = 1
for (var/obj/item/holotape/P in cur)
if(P.icon_state == icon_dir)
N = 0
del(P)
cur = get_step(cur,dir[i])
del(src)
return
#undef MAX_TAPE_RANGE
+1 -1
View File
@@ -50,7 +50,7 @@
burst()
return
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/tank))
var/obj/item/weapon/tank/T = W
blow(T, user)
+3 -3
View File
@@ -85,7 +85,7 @@
return 1
return 0
/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/stack/sheet/metal) && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
var/obj/item/stack/sheet/metal/M = W
@@ -290,7 +290,7 @@
Interact(usr)
return
/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(src.cell)
@@ -313,7 +313,7 @@
user << "<span class='warning'>You need one length of coil to wire it.</span>"
return
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/device/flash/handheld))
var/obj/item/device/flash/handheld/F = W
@@ -153,6 +153,27 @@
R.module.rebuild()
return 1
/obj/item/borg/upgrade/ddrill
name = "mining cyborg diamond drill"
desc = "A diamond drill replacement for the mining module's standard drill."
icon_state = "cyborg_upgrade3"
require_module = 1
/obj/item/borg/upgrade/ddrill/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!istype(R.module, /obj/item/weapon/robot_module/miner))
R << "Upgrade mounting error! No suitable hardpoint detected!"
usr << "There's no mounting point for the module!"
return 0
else
for(var/obj/item/weapon/pickaxe/drill/cyborg/D in R.module.modules)
qdel(D)
for(var/obj/item/weapon/shovel/S in R.module.modules)
qdel(S)
R.module.modules += new /obj/item/weapon/pickaxe/drill/diamonddrill(src)
R.module.rebuild()
return 1
/obj/item/borg/upgrade/syndicate/
name = "illegal equipment module"
+1 -1
View File
@@ -32,7 +32,7 @@
/obj/item/target/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/target/attackby(obj/item/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
+8 -1
View File
@@ -36,8 +36,10 @@
if(stop_bleeding)
if(H.bleedsuppress)
user << "[H]'s bleeding is already bandaged."
if(!H.blood_max)
return
else if(!H.blood_max)
user << "[H] isn't bleeding."
return
if(isliving(M))
if(!M.can_inject(user, 1))
@@ -101,6 +103,11 @@
desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
stop_bleeding = 900
/obj/item/stack/medical/gauze/cyborg/
m_amt = 0
is_cyborg = 1
cost = 250
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burn wounds."
+1 -1
View File
@@ -33,7 +33,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
else
icon_state = "rods"
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -24,7 +24,7 @@
/obj/item/stack/sheet/glass/attack_self(mob/user as mob)
construct_window(user)
/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user)
/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params)
..()
add_fingerprint(user)
if(istype(W, /obj/item/stack/cable_coil))
@@ -315,7 +315,7 @@
M.adjustBruteLoss(force / 2)
/obj/item/weapon/shard/attackby(obj/item/I, mob/user)
/obj/item/weapon/shard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
if(WT.remove_fuel(0, user))
@@ -108,7 +108,7 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \
//Step one - dehairing.
/obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if( istype(W, /obj/item/weapon/kitchenknife) || \
istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
istype(W, /obj/item/weapon/twohanded/fireaxe) || \
@@ -11,7 +11,7 @@
flags = CONDUCT
max_amount = 60
/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob)
/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
..()
if(istype(O,/obj/item/weapon/wirecutters))
var/obj/item/stack/cable_coil/CC = new (user.loc)
+1 -1
View File
@@ -217,7 +217,7 @@
..()
return
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob, params)
if (istype(W, src.type))
var/obj/item/stack/S = W
@@ -25,7 +25,7 @@
else
state = 0 //fine
/obj/item/stack/tile/light/attackby(var/obj/item/O as obj, var/mob/user as mob)
/obj/item/stack/tile/light/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
..()
if(istype(O,/obj/item/weapon/crowbar))
new/obj/item/stack/sheet/metal(user.loc)
@@ -16,7 +16,7 @@
var/turf_type = null
var/mineralType = null
/obj/item/stack/tile/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/stack/tile/attackby(obj/item/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
+18 -9
View File
@@ -50,7 +50,7 @@
src.update_icon()
return
/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob)
/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params)
if(istype(O, /obj/item/weapon/reagent_containers/glass))
if(O.reagents)
if(O.reagents.total_volume < 1)
@@ -131,7 +131,7 @@
..()
user << "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left."
/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A as obj, mob/user as mob)
/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A as obj, mob/user as mob, params)
if (istype(A, /obj/item/toy/ammo/gun))
if (src.bullets >= 7)
@@ -207,7 +207,7 @@
if (bullets)
user << "<span class='notice'>It is loaded with [bullets] foam dart\s.</span>"
/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob)
/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/toy/ammo/crossbow))
if(bullets <= 4)
user.drop_item()
@@ -337,7 +337,7 @@
return
// Copied from /obj/item/weapon/melee/energy/sword/attackby
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user)
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user, params)
..()
if(istype(W, /obj/item/toy/sword))
if(W == src)
@@ -434,7 +434,7 @@
attack_verb = list("attacked", "coloured")
var/colour = "#FF0000" //RGB
var/drawtype = "rune"
var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body")
var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka")
var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
var/uses = 30 //0 for unlimited uses
var/instant = 0
@@ -449,6 +449,15 @@
..()
name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]")
if(config)
if(config.mutant_races == 1)
graffiti |= "antilizard"
graffiti |= "prolizard"
/obj/item/toy/crayon/initialize()
if(config.mutant_races == 1)
graffiti |= "antilizard"
graffiti |= "prolizard"
/obj/item/toy/crayon/attack_self(mob/living/user as mob)
update_window(user)
@@ -769,7 +778,7 @@ obj/item/toy/cards/deck/attack_self(mob/user as mob)
user.visible_message("<span class='notice'>[user] shuffles the deck.</span>", "<span class='notice'>You shuffle the deck.</span>")
cooldown = world.time
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user)
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
..()
if(istype(C))
if(C.parentdeck == src)
@@ -789,7 +798,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/use
src.icon_state = "deck_[deckstyle]_low"
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user)
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params)
..()
if(istype(C))
if(C.parentdeck == src)
@@ -893,7 +902,7 @@ obj/item/toy/cards/cardhand/Topic(href, href_list)
qdel(src)
return
obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user)
obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
if(istype(C))
if(C.parentdeck == src.parentdeck)
src.currenthand += C.cardname
@@ -963,7 +972,7 @@ obj/item/toy/cards/singlecard/verb/Flip()
src.name = "card"
src.pixel_x = -5
obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user)
obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/toy/cards/singlecard/))
var/obj/item/toy/cards/singlecard/C = I
if(C.parentdeck == src.parentdeck)
+1 -1
View File
@@ -100,7 +100,7 @@ RCD
return
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user)
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
var/obj/item/weapon/rcd_ammo/R = W
+1 -1
View File
@@ -19,7 +19,7 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/rcd_ammo))
if ((matter + 10) > 30)
@@ -57,7 +57,7 @@
user << "<span class='notice'>Its ink levels look [ink_level].</span>"
/obj/item/weapon/airlock_painter/attackby(obj/item/weapon/W, mob/user)
/obj/item/weapon/airlock_painter/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/device/toner))
if(ink)
@@ -176,7 +176,7 @@
update_icon()
desc = initial(desc) + "<br><span class='info'>It appears to contain [target.name].</span>"
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/effect/chrono_field/Destroy()
if(gun && gun.field_check(src))
@@ -50,7 +50,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
name = "lit match"
desc = "A match. This one is lit."
attack_verb = list("burnt","singed")
SSobj.processing.Add(src)
SSobj.processing |= src
update_icon()
return
@@ -120,7 +120,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
create_reagents(chem_volume) // making the cigarette a chemical holder with a maximum volume of 15
reagents.add_reagent("nicotine", 15)
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
var/lighting_text = "<span class='notice'>[user] lights their [name] with [W].</span>"
if(istype(W, /obj/item/weapon/weldingtool))
@@ -185,7 +185,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(flavor_text)
var/turf/T = get_turf(src)
T.visible_message(flavor_text)
SSobj.processing.Add(src)
SSobj.processing |= src
//can't think of any other way to update the overlays :<
if(ismob(loc))
@@ -368,7 +368,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
/obj/item/clothing/mask/cigarette/pipe/attackby(var/obj/item/O, var/mob/user)
/obj/item/clothing/mask/cigarette/pipe/attackby(var/obj/item/O, var/mob/user, params)
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
if(!packeditem)
@@ -475,7 +475,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light [src], they however burn their finger in the process.</span>")
user.AddLuminosity(1)
SSobj.processing.Add(src)
SSobj.processing |= src
else
lit = 0
icon_state = icon_off
+15 -4
View File
@@ -2,6 +2,7 @@
* Contains:
* Soap
* Bike Horns
* Air Horns
*/
/*
@@ -82,16 +83,26 @@
throw_range = 7
attack_verb = list("HONKED")
var/spam_flag = 0
var/honksound = 'sound/items/bikehorn.ogg'
var/cooldowntime = 20
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) //plays instead of tap.ogg!
if(!spam_flag)
playsound(loc, honksound, 50, 1, -1) //plays instead of tap.ogg!
return ..()
/obj/item/weapon/bikehorn/attack_self(mob/user as mob)
if(spam_flag == 0)
if(!spam_flag)
spam_flag = 1
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
playsound(src.loc, honksound, 50, 1)
src.add_fingerprint(user)
spawn(20)
spawn(cooldowntime)
spam_flag = 0
return
/obj/item/weapon/bikehorn/airhorn
name = "air horn"
desc = "Damn son, where'd you find this?"
icon_state = "air_horn"
honksound = 'sound/items/AirHorn2.ogg'
cooldowntime = 50
+2 -2
View File
@@ -100,7 +100,7 @@
H.put_in_l_hand(src)
return
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user)
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
if(W == paddles)
paddles.unwield()
toggle_paddles()
@@ -257,7 +257,7 @@
update_icon()
return
/obj/item/weapon/defibrillator/compact/combat/attackby(obj/item/weapon/W, mob/user)
/obj/item/weapon/defibrillator/compact/combat/attackby(obj/item/weapon/W, mob/user, params)
if(W == paddles)
paddles.unwield()
toggle_paddles()
@@ -40,7 +40,7 @@
explode(get_turf(user))
return .
/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user)
/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
open_panel = !open_panel
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
@@ -67,7 +67,7 @@
var/turflist = getline(user, target_turf)
flame_turf(turflist)
/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob, params)
if(user.stat || user.restrained() || user.lying) return
if(istype(W, /obj/item/weapon/wrench) && !status)//Taking this apart
var/turf/T = get_turf(src)
@@ -140,7 +140,7 @@
if(!status) return
lit = !lit
if(lit)
SSobj.processing.Add(src)
SSobj.processing |= src
if(href_list["amount"])
throw_amount = throw_amount + text2num(href_list["amount"])
throw_amount = max(50, min(5000, throw_amount))
@@ -34,7 +34,7 @@
/obj/item/weapon/storage/backpack/holding,
/obj/item/weapon/storage/belt/champion,
/obj/item/weapon/soap/deluxe,
/obj/item/weapon/pickaxe/silver,
/obj/item/weapon/pickaxe/diamond,
/obj/item/weapon/pen/invisible,
/obj/item/weapon/lipstick/random,
/obj/item/weapon/grenade/smokebomb,
@@ -47,7 +47,7 @@
prime()
/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/I, mob/user)
/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
if(stage == WIRED)
if(beakers.len)
@@ -250,7 +250,7 @@
//I tried to just put it in the allowed_containers list but
//if you do that it must have reagents. If you're going to
//make a special case you might as well do it explicitly. -Sayu
/obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user)
/obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/slime_extract) && stage == WIRED)
user << "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>"
user.drop_item()
@@ -370,6 +370,24 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/colorful
name = "colorful grenade"
desc = "Used for wide scale painting projects."
stage = READY
/obj/item/weapon/grenade/chem_grenade/colorful/New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("colorful_reagent", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
beakers += B1
beakers += B2
#undef EMPTY
#undef WIRED
#undef READY
@@ -81,7 +81,7 @@
M.unEquip(src)
/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/screwdriver))
switch(det_time)
if ("1")
+2 -1
View File
@@ -22,6 +22,7 @@
if(user.disabilities & CLUMSY && prob(50))
user << "<span class='warning'>Uh... how do those things work?!</span>"
apply_cuffs(user,user)
return
if(!C.handcuffed)
C.visible_message("<span class='danger'>[user] is trying to put [src.name] on [C]!</span>", \
@@ -85,7 +86,7 @@
/obj/item/weapon/restraints/handcuffs/cable/white
icon_state = "cuff_white"
/obj/item/weapon/restraints/handcuffs/cable/attackby(var/obj/item/I, mob/user as mob)
/obj/item/weapon/restraints/handcuffs/cable/attackby(var/obj/item/I, mob/user as mob, params)
..()
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
@@ -69,7 +69,7 @@
desc = "Lets you shoot your guns"
icon_state = "auth"
/obj/item/weapon/implant/tracking/get_data()
/obj/item/weapon/implant/weapons_auth/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
@@ -16,7 +16,7 @@
icon_state = "implantcase-0"
/obj/item/weapon/implantcase/attackby(obj/item/weapon/W, mob/user)
/obj/item/weapon/implantcase/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/pen))
var/t = stripped_input(user, "What would you like the label to be?", name, null)
@@ -73,7 +73,7 @@
return
/obj/machinery/implantchair/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob)
/obj/machinery/implantchair/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob, params)
if(istype(G, /obj/item/weapon/grab))
if(!ismob(G:affecting))
return
@@ -32,7 +32,7 @@
return ..()
/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C, mob/user)
/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C, mob/user, params)
..()
if(istype(C, /obj/item/weapon/implantcase))
if(!case)
@@ -29,6 +29,7 @@
var/obj/effect/overlay/holograph/H = locate() in T
if(H)
user << "<span class='notice'>You use [src] to destroy [H].</span>"
signs.Remove(H)
qdel(H)
else
if(signs.len < max_signs)
+5 -5
View File
@@ -700,7 +700,7 @@
- metal rod (kebab)
<h2>Table Craft:</h2>
Put ingredients on table, then click and drag the table onto yourself to prepare recipes.
Put ingredients on table, then click and drag the table onto yourself to see what recipes you can prepare.
<h2>Microwave:</h2>
Use it to cook or boil food ingredients (meats, doughs, egg, spaghetti, donkpocket, etc...).
@@ -718,14 +718,14 @@
<h2>Example recipes:</h2>
<b>Vanilla Cake</b>: Microwave cake batter.<br>
<b>Burger:</b> 1 bun + 1 meat<br>
<b>Burger:</b> 1 bun + 1 meat steak<br>
<b>Bread:</b> Microwave dough.<br>
<b>Waffles:</b> 2 doughslices<br>
<b>Waffles:</b> 2 pastry base<br>
<b>Popcorn:</b> Microwave corn.<br>
<b>Meat Steak:</b> Microwave meat.<br>
<b>Meat Pie:</b> 1 plain pie + 1u black pepper + 1u salt + 1 meat<br>
<b>Meat Pie:</b> 1 plain pie + 1u black pepper + 1u salt + 2 meat cutlets<br>
<b>Boiled Spagetti:</b> Microwave spaghetti.<br>
<b>Donuts:</b> 1u sugar + 1 doughslice<br>
<b>Donuts:</b> 1u sugar + 1 pastry base<br>
<b>Fries:</b> Process potato.
</body>
@@ -117,7 +117,7 @@
/obj/item/weapon/melee/energy/sword/saber/red
item_color = "red"
/obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user)
/obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params)
..()
if(istype(W, /obj/item/weapon/melee/energy/sword/saber))
if(W == src)
+1 -1
View File
@@ -50,7 +50,7 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A)
user << "<span class='notice'>You have finished mopping!</span>"
/obj/effect/attackby(obj/item/I, mob/user)
/obj/effect/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
return
..()
+1 -1
View File
@@ -21,7 +21,7 @@
/obj/item/weapon/shield/riot/IsShield()
return 1
/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/melee/baton))
if(cooldown < world.time - 25)
user.visible_message("<span class='warning'>[user] bashes [src] with [W]!</span>")
@@ -17,7 +17,7 @@
/obj/item/weapon/twohanded/singularityhammer/New()
..()
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/weapon/twohanded/singularityhammer/Destroy()
@@ -19,7 +19,7 @@
max_w_class = 3
max_combined_w_class = 21
/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
playsound(src.loc, "rustle", 50, 1, -5)
..()
@@ -7,6 +7,12 @@
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
/obj/item/weapon/storage/belt/update_icon()
overlays.Cut()
for(var/obj/item/I in contents)
overlays += "[I.name]"
..()
/obj/item/weapon/storage/belt/utility
name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Holds tools."
@@ -132,6 +132,6 @@
A.reagents.del_reagent("unholywater")
A.reagents.add_reagent("holywater",unholy2clean)
/obj/item/weapon/storage/book/bible/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/storage/book/bible/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
playsound(src.loc, "rustle", 50, 1, -5)
..()
@@ -50,7 +50,7 @@
user.update_inv_r_hand()
qdel(src)
/obj/item/weapon/storage/box/attackby(obj/item/W, mob/user)
/obj/item/weapon/storage/box/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/packageWrap))
return 0
..()
@@ -138,17 +138,17 @@
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
/obj/item/weapon/storage/box/medipens/utility
name = "medipens kit"
desc = "A box with several utility medipens for the economical miner."
name = "stimpack value kit"
desc = "A box with several stimpack medipens for the economical miner."
icon_state = "syringe"
/obj/item/weapon/storage/box/medipens/utility/New()
..()
new /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine( src )
new /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine( src )
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack( src )
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack( src )
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack( src )
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
/obj/item/weapon/storage/box/beakers
name = "box of beakers"
@@ -546,7 +546,7 @@
for(var/i=1; i <= storage_slots; i++)
new /obj/item/weapon/match(src)
/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/match/W as obj, mob/user as mob)
/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/match/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/match))
W.matchignite()
return
@@ -124,7 +124,7 @@
for(var/obj/item/toy/crayon/crayon in contents)
overlays += image('icons/obj/crayons.dmi',crayon.colourName)
/obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/toy/crayon))
switch(W:colourName)
if("mime")
@@ -17,7 +17,7 @@
var/icon_broken = "lockbox+b"
/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (W.GetID())
if(src.broken)
user << "<span class='danger'>It appears to be broken.</span>"
@@ -31,7 +31,7 @@
..()
user << text("The service panel is [src.open ? "open" : "closed"].")
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(locked)
if (istype(W, /obj/item/weapon/melee/energy/blade) && !emagged)
emagged = 1
@@ -321,7 +321,7 @@
//This proc is called when you want to place an item into the storage item.
/obj/item/weapon/storage/attackby(obj/item/W, mob/user)
/obj/item/weapon/storage/attackby(obj/item/W, mob/user, params)
..()
if(isrobot(user))
+22 -1
View File
@@ -13,6 +13,7 @@
var/status = 0
var/obj/item/weapon/stock_parts/cell/high/bcell = null
var/hitcost = 1000
var/losspertick = 5
/obj/item/weapon/melee/baton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
@@ -44,6 +45,25 @@
else
return 0
/obj/item/weapon/melee/baton/proc/update_process()
if(status)
SSobj.processing |= src
else
SSobj.processing.Remove(src)
/obj/item/weapon/melee/baton/process()
if(bcell)
if(bcell.charge < hitcost)
status = 0
update_icon()
if(status)
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R && R.cell)
R.cell.use(losspertick)
else
bcell.use(losspertick)
/obj/item/weapon/melee/baton/update_icon()
if(status)
icon_state = "[initial(name)]_active"
@@ -51,6 +71,7 @@
icon_state = "[initial(name)]_nocell"
else
icon_state = "[initial(name)]"
update_process()
/obj/item/weapon/melee/baton/examine(mob/user)
..()
@@ -59,7 +80,7 @@
if(!bcell)
user <<"<span class='warning'>The baton does not have a power source installed.</span>"
/obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user)
/obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/stock_parts/cell))
var/obj/item/weapon/stock_parts/cell/C = W
if(bcell)
@@ -86,7 +86,7 @@
src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/flamethrower))
@@ -24,7 +24,7 @@
src.air_contents.volume = volume //liters
src.air_contents.temperature = T20C
SSobj.processing.Add(src)
SSobj.processing |= src
return
@@ -74,7 +74,7 @@
qdel(src)
/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
src.add_fingerprint(user)
@@ -93,7 +93,7 @@
H.put_in_l_hand(src)
return
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user)
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params)
if(W == noz)
remove_noz()
return
+3 -3
View File
@@ -186,7 +186,7 @@
user << "It contains [get_fuel()] unit\s of fuel out of [max_fuel]."
/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user)
/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
flamethrower_screwdriver(I, user)
if(istype(I, /obj/item/stack/rods))
@@ -311,13 +311,13 @@
return
welding = !welding
if(welding)
if(remove_fuel(1))
if(get_fuel() >= 1)
user << "<span class='notice'>You switch [src] on.</span>"
force = 15
damtype = "fire"
hitsound = 'sound/items/welder.ogg'
icon_state = "welder1"
SSobj.processing.Add(src)
SSobj.processing |= src
else
user << "<span class='notice'>You need more fuel.</span>"
welding = 0
+1 -1
View File
@@ -258,7 +258,7 @@ obj/item/weapon/twohanded/
New()
item_color = "red"
/obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/device/multitool))
if(hacked == 0)
+23 -2
View File
@@ -107,7 +107,7 @@ obj/item/weapon/wirerod
m_amt = 1875
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob, params)
..()
if(istype(I, /obj/item/weapon/shard))
var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear
@@ -129,4 +129,25 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
user.put_in_hands(P)
user << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
qdel(I)
qdel(src)
qdel(src)
/obj/item/weapon/throwing_star
name = "throwing star"
desc = "An ancient weapon still used to this day due to it's ease of lodging itself into victim's body parts"
icon_state = "throwingstar"
item_state = "eshield0"
force = 2
throwforce = 20
w_class = 2
embed_chance = 100
embedded_fall_chance = 0 //Hahaha!
/obj/item/weapon/storage/box/throwing_stars/New()
..()
contents = list()
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)