Files
Stephen 036a29b765 all mbc code from jan 1st to 2/16/2020
includes a lot of small things + fixes.
big ones are Simple Lights, New Grab stuff, Disorient Eye/Ear protection armor values, access reprogrammer and deconstruction device

also added flabo to the list of contributors, we missed her on the first go!

check changelog for full list, i merged that too
2020-02-17 01:36:01 -05:00

425 lines
11 KiB
Plaintext

/* -------------------- Backpacks -------------------- */
/obj/item/storage/backpack
name = "backpack"
desc = "A thick, wearable container made of synthetic fibers, able to carry a number of objects comfortably on a crewmember's back."
icon_state = "backpack"
item_state = "backpack"
flags = ONBACK | FPRINT | TABLEPASS | NOSPLASH
w_class = 4.0
max_wclass = 3
wear_image_icon = 'icons/mob/back.dmi'
does_not_open_in_pocket = 0
spawn_contents = list(/obj/item/storage/box/starter)
/obj/item/storage/backpack/withO2
spawn_contents = list(/obj/item/storage/box/starter/withO2)
/obj/item/storage/backpack/NT
name = "\improper NT backpack"
icon_state = "NTbackpack"
spawn_contents = list(/obj/item/storage/box/starter/withO2)
/obj/item/storage/backpack/medic
name = "medic's backpack"
icon_state = "bp_medic"
spawn_contents = list(/obj/item/storage/box/starter/withO2)
/obj/item/storage/backpack/satchel
name = "satchel"
desc = "A thick, wearable container made of synthetic fibers, able to carry a number of objects comfortably on a crewmember's shoulder."
icon_state = "satchel"
/obj/item/storage/backpack/satchel/medic
name = "medic's satchel"
icon_state = "satchel_medic"
/obj/item/storage/backpack/satchel/randoseru
name = "randoseru"
icon_state = "bp_randoseru"
item_state = "bp_randoseru"
/obj/item/storage/backpack/satchel/fjallraven
name = "rucksack"
icon_state = "bp_fjallraven_red"
item_state = "bp_fjallraven_red"
New()
if (prob(50))
icon_state = "bp_fjallraven_yellow"
item_state = "bp_fjallraven_yellow"
/obj/item/storage/backpack/satchel/anello
name = "travel pack"
icon_state = "bp_anello"
item_state = "bp_anello"
/* -------------------- Fanny Packs -------------------- */
/obj/item/storage/fanny
name = "fanny pack"
desc = "No, 'fanny' as in 'butt.' Not the other thing."
icon = 'icons/obj/belts.dmi'
icon_state = "fanny"
item_state = "fanny"
flags = FPRINT | TABLEPASS | ONBELT | NOSPLASH
w_class = 4.0
max_wclass = 3
does_not_open_in_pocket = 0
stamina_damage = 5
stamina_cost = 5
stamina_crit_chance = 5
spawn_contents = list(/obj/item/storage/box/starter)
/obj/item/storage/fanny/funny
name = "funny pack"
desc = "Haha, get it? Get it? 'Funny'!"
icon_state = "funny"
item_state = "funny"
spawn_contents = list(/obj/item/storage/box/starter,\
/obj/item/storage/box/balloonbox)
/obj/item/storage/fanny/syndie
name = "syndicate tactical espionage belt pack"
desc = "It's different than a fanny pack. It's tactical and action-packed!"
icon_state = "syndie"
item_state = "syndie"
/* -------------------- Belts -------------------- */
/obj/item/storage/belt
name = "belt"
icon = 'icons/obj/belts.dmi'
icon_state = "belt"
item_state = "belt"
flags = FPRINT | TABLEPASS | ONBELT | NOSPLASH
max_wclass = 2
does_not_open_in_pocket = 0
stamina_damage = 5
stamina_cost = 5
stamina_crit_chance = 5
proc/can_use()
.= 1
if (!ismob(loc))
return 0
MouseDrop(obj/over_object as obj, src_location, over_location)
var/mob/M = usr
if (!istype(over_object, /obj/screen))
if(!can_use())
boutput(M, "<span style=\"color:red\">I need to wear [src] for that.</span>")
return
return ..()
attack_hand(mob/user as mob)
if (src.loc == user && !can_use())
boutput(user, "<span style=\"color:red\">I need to wear [src] for that.</span>")
return
return ..()
attackby(obj/item/W as obj, mob/user as mob)
if(!can_use())
boutput(user, "<span style=\"color:red\">I need to wear [src] for that.</span>")
return
if (istype(W, /obj/item/storage/toolbox) || istype(W, /obj/item/storage/box) || istype(W, /obj/item/storage/belt))
var/obj/item/storage/S = W
for (var/obj/item/I in S.get_contents())
if (..(I, user, null, S) == 0)
break
return
else
return ..()
/obj/item/storage/belt/utility
name = "utility belt"
desc = "Can hold various small objects."
icon_state = "utilitybelt"
item_state = "utility"
/obj/item/storage/belt/utility/ceshielded
name = "aurora MKII utility belt"
desc = "An utility belt for usage in high-risk salvage operations. Contains a personal shield generator. Can be activated to overcharge the shields temporarily."
icon_state = "cebelt"
item_state = "utility"
rarity = 4
abilities = list(/obj/ability_button/cebelt_toggle)
var/active = 0
var/charge = 8
var/maxCharge = 8
var/obj/decal/ceshield/overlay
var/lastTick = 0
var/chargeTime = 50 //world.time Ticks per charge increase. 50 works out to be roughly 45 seconds from 0 -> 10 under normal conditions.
New()
..()
processing_items.Add(src)
proc/toggle()
if(active)
deactivate()
else
activate()
return
proc/activate()
if (!(src in processing_items))
processing_items.Add(src)
if(charge > 0)
charge -= 1
active = 1
setProperty("block", 80)
setProperty("rangedprot", 1.5)
setProperty("coldprot", 100)
setProperty("heatprot", 100)
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
overlay = new(get_turf(src))
if(H.attached_objs == null)
H.attached_objs = list()
H.attached_objs.Add(overlay)
playsound(src.loc, "sound/machines/shieldup.ogg", 60, 1)
return
dropped(mob/user as mob)
if(active)
deactivate()
..()
proc/deactivate()
lastTick = (world.time + 20) //Tacking on a little delay before charging starts. Discourage toggling it too often.
active = 0
setProperty("block", 25)
delProperty("rangedprot")
delProperty("coldprot")
delProperty("heatprot")
if(overlay)
qdel(overlay)
overlay = null
playsound(src.loc, "sound/machines/shielddown.ogg", 60, 1)
return
process()
if(active)
if(--charge <= 0)
deactivate()
else
var/multiplier = 0
var/remainder = 0
if(world.time >= (lastTick + chargeTime))
var/diff = round(world.time - lastTick)
remainder = (diff % chargeTime)
multiplier = round((diff - remainder) / chargeTime) //Round shouldnt be needed but eh.
if(multiplier)
charge = min(charge+(1*multiplier), maxCharge)
lastTick = (world.time - remainder) //Plop in the remainder so we don't just swallow ticks.
return
setupProperties()
..()
setProperty("block", 25)
equipped(var/mob/user, var/slot)
return ..()
unequipped(var/mob/user)
if(active)
deactivate()
return ..()
examine()
..()
boutput(usr, "There are [src.charge]/[src.maxCharge] PU left.")
return
buildTooltipContent()
var/content = ..()
content += "<br>There are [src.charge]/[src.maxCharge] PU left."
return content
/obj/item/storage/belt/utility/prepared
spawn_contents = list(/obj/item/crowbar,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/screwdriver,
/obj/item/wrench,
/obj/item/device/multitool,
/obj/item/cable_coil)
/obj/item/storage/belt/medical
name = "medical belt"
icon_state = "injectorbelt"
item_state = "injector"
can_hold = list(
/obj/item/robodefibrillator
)
in_list_or_max = 1
/obj/item/storage/belt/mining
name = "miner's belt"
desc = "Can hold various mining tools."
icon_state = "minerbelt"
item_state = "utility"
can_hold = list(
/obj/item/mining_tool,
/obj/item/mining_tools
)
in_list_or_max = 1
/obj/item/storage/belt/hunter
name = "trophy belt"
desc = "Holds normal-sized items, such as skulls."
icon_state = "minerbelt"
item_state = "utility"
max_wclass = 3
/obj/item/storage/belt/security
name = "security toolbelt"
desc = "For the trend-setting officer on the go. Has a place on it to clip a baton and a holster for a small gun."
icon_state = "secbelt"
item_state = "secbelt"
can_hold = list(/obj/item/baton, // not included in this list are guns that are already small enough to fit (like the detective's gun)
/obj/item/gun/energy/taser_gun,
/obj/item/gun/energy/phaser_gun,
/obj/item/gun/energy/laser_gun,
/obj/item/gun/energy/egun,
/obj/item/gun/energy/lawgiver,
/obj/item/gun/energy/lawgiver/old,
/obj/item/gun/energy/wavegun,
/obj/item/gun/kinetic/revolver,
/obj/item/gun/kinetic/zipgun)
in_list_or_max = 1
// kiki's detective shoulder (holster)
// get it? like kiki's delivery service? ah, i'll show myself out.
shoulder_holster
name = "shoulder holster"
icon_state = "shoulder_holster"
item_state = "shoulder_holster"
inspector
icon_state = "inspector_holster"
item_state = "inspector_holster"
//////////////////////////////
// ~Nuke Ops Class Storage~ //
//////////////////////////////
// belt for storing clips + magazines only
/obj/item/storage/belt/ammo
name = "ammunition belt"
desc = "A rugged belt fitted with ammo pouches."
icon_state = "minerbelt"
item_state = "utility"
can_hold = list(/obj/item/ammo/bullets)
in_list_or_max = 0
// fancy shoulder sling for grenades
/obj/item/storage/backpack/grenade_bandolier
name = "grenade bandolier"
desc = "A sturdy shoulder-sling for storing various grenades."
icon_state = "grenade_bandolier"
item_state = "grenade_bandolier"
can_hold = list(/obj/item/old_grenade,
/obj/item/chem_grenade,
/obj/item/storage/grenade_pouch,
/obj/item/ammo/bullets/grenade_round)
in_list_or_max = 0
// combat medic storage 7 slot
/obj/item/storage/belt/syndicate_medic_belt
name = "medical lifesaver bag"
icon = 'icons/obj/belts.dmi'
desc = "A canvas duffel bag full of medicines."
icon_state = "medic_belt"
item_state = "medic_belt"
spawn_contents = list(/obj/item/reagent_containers/emergency_injector/high_capacity/epinephrine,
/obj/item/reagent_containers/emergency_injector/high_capacity/salbutamol,
/obj/item/reagent_containers/emergency_injector/high_capacity/salicylic_acid,
/obj/item/reagent_containers/emergency_injector/high_capacity/saline,
/obj/item/reagent_containers/emergency_injector/high_capacity/atropine,
/obj/item/reagent_containers/emergency_injector/high_capacity/pentetic,
/obj/item/reagent_containers/emergency_injector/high_capacity/mannitol)
/obj/item/storage/backpack/syndicate_medic_satchel
name = "medical shoulder pack"
desc = "A satchel containing larger medical supplies and instruments."
icon_state = "NTsatchel"
item_state = "backpack"
spawn_contents = list(/obj/item/robodefibrillator,
/obj/item/extinguisher,
/obj/item/reagent_containers/iv_drip/blood,
/obj/item/reagent_containers/mender/brute,
/obj/item/reagent_containers/mender/burn,
/obj/item/reagent_containers/hypospray)
/* -------------------- Wrestling Belt -------------------- */
/obj/item/storage/belt/wrestling
name = "championship wrestling belt"
desc = "A haunted antique wrestling belt, imbued with the spirits of wrestlers past."
icon_state = "machobelt"
item_state = "machobelt"
contraband = 8
is_syndicate = 1
mats = 18 //SPACE IS THE PLACE FOR WRESTLESTATION 13
equipped(var/mob/user)
user.make_wrestler(0, 1, 0)
unequipped(var/mob/user)
user.make_wrestler(0, 1, 1)
// I dunno where else to put these vOv
/obj/item/inner_tube
name = "inner tube"
desc = "An inflatable torus for your waist!"
icon = 'icons/obj/belts.dmi'
icon_state = "pool_ring"
item_state = "pool_ring"
flags = FPRINT | TABLEPASS | ONBELT
w_class = 3.0
mats = 5 // I dunno???
New()
..()
setProperty("negate_fluid_speed_penalty", 0.2)
/obj/item/inner_tube/duck
icon_state = "pool_ring-duck"
item_state = "pool_ring-duck"
/obj/item/inner_tube/giraffe
icon_state = "pool_ring-giraffe"
item_state = "pool_ring-giraffe"
/obj/item/inner_tube/flamingo
icon_state = "pool_ring-flamingo"
item_state = "pool_ring-flamingo"
/obj/item/inner_tube/random
New()
..()
if (prob(40))
src.icon_state = "pool_ring-[pick("duck","giraffe","flamingo")]"
src.item_state = src.icon_state