diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm deleted file mode 100644 index fc617dacdc9..00000000000 --- a/code/defines/obj/weapon.dm +++ /dev/null @@ -1,1035 +0,0 @@ -/obj/item/weapon/phone - name = "red phone" - desc = "Should anything ever go wrong..." - icon = 'icons/obj/items.dmi' - icon_state = "red_phone" - flags = CONDUCT - force = 3.0 - throwforce = 2.0 - throw_speed = 1 - throw_range = 4 - w_class = 2 - attack_verb = list("called", "rang") - hitsound = 'sound/weapons/ring.ogg' - -/obj/item/weapon/rsp - name = "\improper Rapid-Seed-Producer (RSP)" - desc = "A device used to rapidly deploy seeds." - icon = 'icons/obj/items.dmi' - icon_state = "rcd" - opacity = 0 - density = 0 - anchored = 0.0 - var/matter = 0 - var/mode = 1 - w_class = 3.0 - -/obj/item/weapon/bananapeel - name = "banana peel" - desc = "A peel from a banana." - icon = 'icons/obj/items.dmi' - icon_state = "banana_peel" - item_state = "banana_peel" - w_class = 1.0 - throwforce = 0 - throw_speed = 4 - throw_range = 20 - -/obj/item/weapon/corncob - name = "corn cob" - desc = "A reminder of meals gone by." - icon = 'icons/obj/harvest.dmi' - icon_state = "corncob" - item_state = "corncob" - w_class = 1.0 - throwforce = 0 - throw_speed = 4 - throw_range = 20 - -/obj/item/weapon/soap - name = "soap" - desc = "A cheap bar of soap. Doesn't smell." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "soap" - w_class = 1.0 - throwforce = 0 - throw_speed = 4 - throw_range = 20 - discrete = 1 - var/cleanspeed = 50 //slower than mop - -/obj/item/weapon/soap/nanotrasen - desc = "A Nanotrasen brand bar of soap. Smells of plasma." - icon_state = "soapnt" - -/obj/item/weapon/soap/deluxe - icon_state = "soapdeluxe" - -/obj/item/weapon/soap/deluxe/New() - desc = "A deluxe Waffle Co. brand bar of soap. Smells of comdoms." - cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these - -/obj/item/weapon/soap/syndie - desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster." - icon_state = "soapsyndie" - cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes - -/obj/item/weapon/bikehorn - name = "bike horn" - desc = "A horn off of a bicycle." - icon = 'icons/obj/items.dmi' - icon_state = "bike_horn" - item_state = "bike_horn" - hitsound = 'sound/items/bikehorn.ogg' - throwforce = 3 - w_class = 1.0 - throw_speed = 3 - throw_range = 15 - attack_verb = list("HONKED") - var/spam_flag = 0 - - -/obj/item/weapon/c_tube - name = "cardboard tube" - desc = "A tube... of cardboard." - icon = 'icons/obj/items.dmi' - icon_state = "c_tube" - throwforce = 1 - w_class = 1.0 - throw_speed = 4 - throw_range = 5 - - -/obj/item/weapon/cane - name = "cane" - desc = "A cane used by a true gentlemen. Or a clown." - icon = 'icons/obj/weapons.dmi' - icon_state = "cane" - item_state = "stick" - flags = CONDUCT - force = 5.0 - throwforce = 7.0 - w_class = 2.0 - m_amt = 50 - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - -/obj/item/weapon/disk - name = "disk" - icon = 'icons/obj/items.dmi' - -/obj/item/weapon/disk/nuclear - name = "nuclear authentication disk" - desc = "Better keep this safe." - icon_state = "nucleardisk" - item_state = "card-id" - w_class = 1.0 - -/* -/obj/item/weapon/disk/nuclear/pickup(mob/living/user as mob) - if(issyndicate(user)) - set_security_level(3)*/ //Nuke Ops rework makes stealth approach significantly harder; this makes it damn near impossible; besides, it's horrendously meta. - -/* -/obj/item/weapon/game_kit - name = "Gaming Kit" - icon = 'icons/obj/items.dmi' - icon_state = "game_kit" - var/selected = null - var/board_stat = null - var/data = "" - var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit" - item_state = "sheet-metal" - w_class = 5.0 -*/ - -/obj/item/weapon/gift - name = "gift" - desc = "A wrapped item." - icon = 'icons/obj/items.dmi' - icon_state = "gift3" - var/size = 3.0 - var/obj/item/gift = null - item_state = "gift" - w_class = 4.0 - -/obj/item/weapon/legcuffs - name = "legcuffs" - desc = "Use this to keep prisoners in line." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "handcuff" - flags = CONDUCT - throwforce = 0 - w_class = 3.0 - origin_tech = "materials=1" - var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute - -/obj/item/weapon/legcuffs/beartrap - name = "bear trap" - throw_speed = 1 - throw_range = 1 - icon_state = "beartrap0" - desc = "A trap used to catch bears and other legged creatures." - var/armed = 0 - var/obj/item/weapon/grenade/iedcasing/IED = null - - suicide_act(mob/user) - viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide." - return (BRUTELOSS) - -/obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob) - ..() - if(ishuman(user) && !user.stat && !user.restrained()) - armed = !armed - icon_state = "beartrap[armed]" - user << "[src] is now [armed ? "armed" : "disarmed"]" - -/obj/item/weapon/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive. - if(istype(I, /obj/item/weapon/grenade/iedcasing)) - if(IED) - user << "This beartrap already has an IED hooked up to it!" - return - IED = I - switch(IED.assembled) - if(0,1) //if it's not fueled/hooked up - user << "You haven't prepared this IED yet!" - IED = null - return - if(2,3) - user.drop_item(src) - I.loc = src - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - var/log_str = "[key_name(usr)]? has rigged a beartrap with an IED at [A.name] (JMP)." - message_admins(log_str) - log_game(log_str) - user << "You sneak the [IED] underneath the pressure plate and connect the trigger wire." - desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it." - else - user << "You shouldn't be reading this message! Contact a coder or someone, something broke!" - IED = null - return - if(istype(I, /obj/item/weapon/screwdriver)) - if(IED) - IED.loc = get_turf(src.loc) - IED = null - user << "You remove the IED from the [src]." - return - ..() - -/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj) - if(armed) - if(IED && isturf(src.loc)) - IED.active = 1 - IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") - IED.icon_state = initial(icon_state) + "_active" - IED.assembled = 3 - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - var/log_str = "[key_name(usr)]? has triggered an IED-rigged [name] at [A.name] (JMP)." - message_admins(log_str) - log_game(log_str) - spawn(IED.det_time) - IED.prime() - if(ishuman(AM)) - if(isturf(src.loc)) - var/mob/living/carbon/H = AM - if(H.m_intent == "run") - if(H.lying) - H.apply_damage(20,BRUTE,"chest") - else - H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg"))) - armed = 0 - icon_state = "beartrap0" - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) - H.visible_message("[H] triggers \the [src].", \ - "You trigger \the [src]!") - H.legcuffed = src - src.loc = H - H.update_inv_legcuffed() - H << "You step on \the [src]!" - if(IED && IED.active) - H << "The [src]'s IED has been activated!" - feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart. - for(var/mob/O in viewers(H, null)) - if(O == H) - continue - O.show_message("\red [H] steps on \the [src].", 1) - if(isanimal(AM) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator)) - armed = 0 - icon_state = "beartrap0" - var/mob/living/simple_animal/SA = AM - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) - SA.visible_message("[SA] triggers \the [src].", \ - "You trigger \the [src]!") - SA.health -= 20 - ..() - -/obj/item/weapon/legcuffs/bolas - name = "bolas" - desc = "An entangling bolas. Throw at your foes to trip them and prevent them from running." - gender = NEUTER - icon = 'icons/obj/weapons.dmi' - icon_override = 'icons/mob/in-hand/swords.dmi' - icon_state = "bolas" - siemens_coefficient = 1 - slot_flags = SLOT_BELT - throwforce = 2 - w_class = 2 - origin_tech = "materials=1" - attack_verb = list("lashed", "bludgeoned", "whipped") - force = 4 - breakouttime = 50 //10 seconds - throw_speed = 1 - throw_range = 10 - var/dispenser = 0 - var/throw_sound = 'sound/weapons/whip.ogg' - var/trip_prob = 60 - var/thrown_from - -/obj/item/weapon/legcuffs/bolas/suicide_act(mob/living/user) - viewers(user) << "[user] is wrapping the [src.name] around \his neck! It looks like \he's trying to commit suicide." - return(OXYLOSS) - -/obj/item/weapon/legcuffs/bolas/throw_at(var/atom/A, throw_range, throw_speed) - if(usr && !istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas)) //if there is a user, but not a mech - if(istype(usr, /mob/living/carbon/human)) //if the user is human - var/mob/living/carbon/human/H = usr - if((CLUMSY in H.mutations) && prob(50)) - H <<"You smack yourself in the face while swinging the [src]!" - H.Stun(2) - H.drop_item(src) - return - if (!thrown_from && usr) //if something hasn't set it already (like a mech does when it launches) - thrown_from = usr //then the user must have thrown it - if (!istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas)) - playsound(src, throw_sound, 20, 1) //because mechs play the sound anyways - var/turf/target = get_turf(A) - var/atom/movable/adjtarget = new /atom/movable - var/xadjust = 0 - var/yadjust = 0 - var/scaler = 0 //used to changed the normalised vector to the proper size - scaler = throw_range / max(abs(target.x - src.x), abs(target.y - src.y)) //whichever is larger magnitude is what we normalise to - if (target.x - src.x != 0) //just to avoid fucking with math for no reason - xadjust = round((target.x - src.x) * scaler) //normalised vector is now scaled up to throw_range - adjtarget.x = src.x + xadjust //the new target at max range - else - adjtarget.x = src.x - if (target.y - src.y != 0) - yadjust = round((target.y - src.y) * scaler) - adjtarget.y = src.y + yadjust - else - adjtarget.y = src.y - // log_admin("Adjusted target of [adjtarget.x] and [adjtarget.y], adjusted with [xadjust] and [yadjust] from [scaler]") - ..(get_turf(adjtarget), throw_range, throw_speed) - thrown_from = null - -/obj/item/weapon/legcuffs/bolas/throw_impact(atom/hit_atom) //Pomf was right, I was wrong - Comic - if(isliving(hit_atom) && hit_atom != usr) //if the target is a live creature other than the thrower - var/mob/living/M = hit_atom - if(ishuman(M)) //if they're a human species - var/mob/living/carbon/human/H = M - if(H.m_intent == "run") //if they're set to run (though not necessarily running at that moment) - if(prob(trip_prob)) //this probability is up for change and mostly a placeholder - Comic - step(H, H.dir) - H.visible_message("[H] was tripped by the bolas!","Your legs have been tangled!"); - H.Stun(2) //used instead of setting damage in vars to avoid non-human targets being affected - H.Weaken(4) - H.legcuffed = src //applies legcuff properties inherited through legcuffs - src.loc = H - H.update_inv_legcuffed() - if(!H.legcuffed) //in case it didn't happen, we need a safety net - throw_failed() - else if(H.legcuffed) //if the target is already legcuffed (has to be walking) - throw_failed() - return - else //walking, but uncuffed, or the running prob() failed - H << "You stumble over the thrown bolas" - step(H, H.dir) - H.Stun(1) - throw_failed() - return - else - M.Stun(2) //minor stun damage to anything not human - throw_failed() - return - -/obj/item/weapon/legcuffs/bolas/proc/throw_failed() //called when the throw doesn't entangle - //log_admin("Logged as [thrown_from]") - if(!thrown_from || !istype(thrown_from, /mob/living)) //in essence, if we don't know whether a person threw it - qdel(src) //destroy it, to stop infinite bolases - -/obj/item/weapon/legcuffs/bolas/Bump() - ..() - throw_failed() //allows a mech bolas to be destroyed - -/obj/item/weapon/holosign_creator - name = "holographic sign projector" - desc = "A handy-dandy hologaphic projector that displays a janitorial sign." - icon = 'icons/obj/janitor.dmi' - icon_state = "signmaker" - item_state = "electronic" - force = 5 - w_class = 2 - throwforce = 0 - throw_speed = 3 - throw_range = 7 - origin_tech = "programming=3" - var/list/signs = list() - var/max_signs = 10 - -/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag) - if(flag) - var/turf/T = get_turf(target) - var/obj/effect/overlay/holograph/H = locate() in T - if(H) - user << "You use [src] to destroy [H]." - signs -= H - qdel(H) - else - if(signs.len < max_signs) - H = new(get_turf(target)) - signs += H - user << "You create \a [H] with [src]." - else - user << "[src] is projecting at max capacity!" - -/obj/item/weapon/holosign_creator/attack(mob/living/carbon/human/M, mob/user) - return - -/obj/item/weapon/holosign_creator/attack_self(mob/user) - if(signs.len) - var/list/L = signs.Copy() - for(var/sign in L) - qdel(sign) - signs -= sign - user << "You clear all active holograms." - -/obj/effect/overlay/holograph - name = "wet floor sign" - desc = "The words flicker as if they mean nothing." - icon = 'icons/obj/janitor.dmi' - icon_state = "holosign" - anchored = 1 - -/obj/item/weapon/caution - desc = "Caution! Wet Floor!" - name = "wet floor sign" - icon = 'icons/obj/janitor.dmi' - icon_state = "caution" - force = 1.0 - throwforce = 3.0 - throw_speed = 1 - throw_range = 5 - w_class = 2.0 - attack_verb = list("warned", "cautioned", "smashed") - - proximity_sign - var/timing = 0 - var/armed = 0 - var/timepassed = 0 - - attack_self(mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.mind.assigned_role != "Janitor") - return - if(armed) - armed = 0 - user << "\blue You disarm \the [src]." - return - timing = !timing - if(timing) - processing_objects.Add(src) - else - armed = 0 - timepassed = 0 - H << "\blue You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]" - - process() - if(!timing) - processing_objects.Remove(src) - timepassed++ - if(timepassed >= 15 && !armed) - armed = 1 - timing = 0 - - HasProximity(atom/movable/AM as mob|obj) - if(armed) - if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain)) - var/mob/living/carbon/C = AM - if(C.m_intent != "walk") - src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"") - explosion(src.loc,-1,0,2) - if(ishuman(C)) - dead_legs(C) - if(src) - qdel(src) - - proc/dead_legs(mob/living/carbon/human/H as mob) - var/obj/item/organ/external/l = H.get_organ("l_leg") - var/obj/item/organ/external/r = H.get_organ("r_leg") - if(l && !(l.status & ORGAN_DESTROYED)) - l.status |= ORGAN_DESTROYED - if(r && !(r.status & ORGAN_DESTROYED)) - r.status |= ORGAN_DESTROYED - -/obj/item/weapon/caution/cone - desc = "This cone is trying to warn you of something!" - name = "warning cone" - icon_state = "cone" - -/obj/item/weapon/rack_parts - name = "rack parts" - desc = "Parts of a rack." - icon = 'icons/obj/items.dmi' - icon_state = "rack_parts" - flags = CONDUCT - m_amt = 3750 - -/*/obj/item/weapon/syndicate_uplink - name = "station bounced radio" - desc = "Remain silent about this..." - icon = 'icons/obj/radio.dmi' - icon_state = "radio" - var/temp = null - var/uses = 10.0 - var/selfdestruct = 0.0 - var/traitor_frequency = 0.0 - var/mob/currentUser = null - var/obj/item/device/radio/origradio = null - flags = CONDUCT | ONBELT - w_class = 2.0 - item_state = "radio" - throw_speed = 4 - throw_range = 20 - m_amt = 100 - origin_tech = "magnets=2;syndicate=3"*/ - -/obj/item/weapon/SWF_uplink - name = "station-bounced radio" - desc = "used to comunicate it appears." - icon = 'icons/obj/radio.dmi' - icon_state = "radio" - var/temp = null - var/uses = 4.0 - var/selfdestruct = 0.0 - var/traitor_frequency = 0.0 - var/obj/item/device/radio/origradio = null - flags = CONDUCT - slot_flags = SLOT_BELT - item_state = "radio" - throwforce = 5 - w_class = 2.0 - throw_speed = 4 - throw_range = 20 - m_amt = 100 - origin_tech = "magnets=1" - -/obj/item/weapon/staff - name = "wizards staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = 2.0 - flags = NOSHIELD - attack_verb = list("bludgeoned", "whacked", "disciplined") - -/obj/item/weapon/staff/broom - name = "broom" - desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' - icon_state = "broom" - -/obj/item/weapon/staff/stick - name = "stick" - desc = "A great tool to drag someone else's drinks across the bar." - icon = 'icons/obj/weapons.dmi' - icon_state = "stick" - item_state = "stick" - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = 2.0 - flags = NOSHIELD - -/obj/item/weapon/table_parts - name = "table parts" - desc = "Parts of a table. Poor table." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "table_parts" - m_amt = 3750 - flags = CONDUCT - attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") - -/obj/item/weapon/table_parts/reinforced - name = "reinforced table parts" - desc = "Hard table parts. Well...harder..." - icon = 'icons/obj/items.dmi' - icon_state = "reinf_tableparts" - m_amt = 7500 - flags = CONDUCT - -/obj/item/weapon/table_parts/wood - name = "wooden table parts" - desc = "Keep away from fire." - icon_state = "wood_tableparts" - flags = null - -/obj/item/weapon/table_parts/glass - name = "glass table parts" - desc = "fragile!" - icon_state = "glass_tableparts" - flags = null - -/obj/item/weapon/wire - desc = "This is just a simple piece of regular insulated wire." - name = "wire" - icon = 'icons/obj/power.dmi' - icon_state = "item_wire" - var/amount = 1.0 - var/laying = 0.0 - var/old_lay = null - m_amt = 40 - attack_verb = list("whipped", "lashed", "disciplined", "tickled") - - suicide_act(mob/user) - viewers(user) << "\red [user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." - return (OXYLOSS) - -/obj/item/weapon/module - icon = 'icons/obj/module.dmi' - icon_state = "std_module" - w_class = 2.0 - item_state = "electronic" - flags = CONDUCT - var/mtype = 1 // 1=electronic 2=hardware - -/obj/item/weapon/module/card_reader - name = "card reader module" - icon_state = "card_mod" - desc = "An electronic module for reading data and ID cards." - -/obj/item/weapon/module/power_control - name = "power control module" - icon_state = "power_mod" - desc = "Heavy-duty switching circuits for power control." - -/obj/item/weapon/module/id_auth - name = "\improper ID authentication module" - icon_state = "id_mod" - desc = "A module allowing secure authorization of ID cards." - -/obj/item/weapon/module/cell_power - name = "power cell regulator module" - icon_state = "power_mod" - desc = "A converter and regulator allowing the use of power cells." - -/obj/item/weapon/module/cell_power - name = "power cell charger module" - icon_state = "power_mod" - desc = "Charging circuits for power cells." - -/obj/item/weapon/hatchet - name = "hatchet" - desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." - icon = 'icons/obj/weapons.dmi' - icon_state = "hatchet" - flags = CONDUCT - force = 12.0 - sharp = 1 - edge = 1 - w_class = 2.0 - throwforce = 15.0 - throw_speed = 4 - throw_range = 4 - m_amt = 15000 - origin_tech = "materials=2;combat=1" - attack_verb = list("chopped", "torn", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/weapon/hatchet/unathiknife - name = "duelling knife" - desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." - icon = 'icons/obj/weapons.dmi' - icon_state = "unathiknife" - attack_verb = list("ripped", "torn", "cut") - -/obj/item/weapon/scythe - icon_state = "scythe0" - name = "scythe" - desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." - force = 13.0 - throwforce = 5.0 - sharp = 1 - edge = 1 - throw_speed = 2 - throw_range = 3 - w_class = 4.0 - flags = NOSHIELD - slot_flags = SLOT_BACK - origin_tech = "materials=2;combat=2" - attack_verb = list("chopped", "sliced", "cut", "reaped") - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/weapon/scythe/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) return - if(istype(A, /obj/effect/plant)) - for(var/obj/effect/plant/B in orange(A,1)) - if(prob(80)) - qdel(B) - qdel(A) - -/* -/obj/item/weapon/cigarpacket - name = "Pete's Cuban Cigars" - desc = "The most robust cigars on the planet." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cigarpacket" - item_state = "cigarpacket" - w_class = 1 - throwforce = 2 - var/cigarcount = 6 - flags = ONBELT */ - -/obj/item/weapon/pai_cable - desc = "A flexible coated cable with a universal jack on one end." - name = "data cable" - icon = 'icons/obj/power.dmi' - icon_state = "wire1" - - var/obj/machinery/machine - -///////////////////////////////////////Stock Parts ///////////////////////////////// - -/obj/item/weapon/storage/part_replacer - name = "Rapid Part Exchange Device" - desc = "Special mechanical module made to store, sort, and apply standard machine parts." - icon_state = "RPED" - item_state = "RPED" - icon_override = 'icons/mob/in-hand/tools.dmi' - w_class = 5 - can_hold = list("/obj/item/weapon/stock_parts") - storage_slots = 50 - use_to_pickup = 1 - allow_quick_gather = 1 - allow_quick_empty = 1 - collection_mode = 1 - display_contents_with_number = 1 - max_w_class = 3 - max_combined_w_class = 100 - -/obj/item/weapon/storage/part_replacer/proc/play_rped_sound() - //Plays the sound for RPED exchanging or installing parts. - playsound(src, 'sound/items/rped.ogg', 40, 1) - -//Sorts stock parts inside an RPED by their rating. -//Only use /obj/item/weapon/stock_parts/ with this sort proc! -/proc/cmp_rped_sort(var/obj/item/weapon/stock_parts/A, var/obj/item/weapon/stock_parts/B) - return B.rating - A.rating - -/obj/item/weapon/stock_parts - name = "stock part" - desc = "What?" - gender = PLURAL - icon = 'icons/obj/stock_parts.dmi' - w_class = 2.0 - var/rating = 1 - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) - -//Rank 1 - -/obj/item/weapon/stock_parts/console_screen - name = "console screen" - desc = "Used in the construction of computers and other devices with a interactive console." - icon_state = "screen" - origin_tech = "materials=1" - g_amt = 200 - -/obj/item/weapon/stock_parts/capacitor - name = "capacitor" - desc = "A basic capacitor used in the construction of a variety of devices." - icon_state = "capacitor" - origin_tech = "powerstorage=1" - m_amt = 50 - g_amt = 50 - -/obj/item/weapon/stock_parts/scanning_module - name = "scanning module" - desc = "A compact, high resolution scanning module used in the construction of certain devices." - icon_state = "scan_module" - origin_tech = "magnets=1" - m_amt = 50 - g_amt = 20 - -/obj/item/weapon/stock_parts/manipulator - name = "micro-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "micro_mani" - origin_tech = "materials=1;programming=1" - m_amt = 30 - -/obj/item/weapon/stock_parts/micro_laser - name = "micro-laser" - desc = "A tiny laser used in certain devices." - icon_state = "micro_laser" - origin_tech = "magnets=1" - m_amt = 10 - g_amt = 20 - -/obj/item/weapon/stock_parts/matter_bin - name = "matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "matter_bin" - origin_tech = "materials=1" - m_amt = 80 - -//Rank 2 - -/obj/item/weapon/stock_parts/capacitor/adv - name = "advanced capacitor" - desc = "An advanced capacitor used in the construction of a variety of devices." - icon_state = "adv_capacitor" - origin_tech = "powerstorage=3" - rating = 2 - m_amt = 50 - g_amt = 50 - -/obj/item/weapon/stock_parts/scanning_module/adv - name = "advanced scanning module" - desc = "A compact, high resolution scanning module used in the construction of certain devices." - icon_state = "adv_scan_module" - origin_tech = "magnets=3" - rating = 2 - m_amt = 50 - g_amt = 20 - -/obj/item/weapon/stock_parts/manipulator/nano - name = "nano-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "nano_mani" - origin_tech = "materials=3,programming=2" - rating = 2 - m_amt = 30 - -/obj/item/weapon/stock_parts/micro_laser/high - name = "high-power micro-laser" - desc = "A tiny laser used in certain devices." - icon_state = "high_micro_laser" - origin_tech = "magnets=3" - rating = 2 - m_amt = 10 - g_amt = 20 - -/obj/item/weapon/stock_parts/matter_bin/adv - name = "advanced matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "advanced_matter_bin" - origin_tech = "materials=3" - rating = 2 - m_amt = 80 - -//Rating 3 - -/obj/item/weapon/stock_parts/capacitor/super - name = "super capacitor" - desc = "A super-high capacity capacitor used in the construction of a variety of devices." - icon_state = "super_capacitor" - origin_tech = "powerstorage=5;materials=4" - rating = 3 - m_amt = 50 - g_amt = 50 - -/obj/item/weapon/stock_parts/scanning_module/phasic - name = "phasic scanning module" - desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." - icon_state = "super_scan_module" - origin_tech = "magnets=5" - rating = 3 - m_amt = 50 - g_amt = 20 - -/obj/item/weapon/stock_parts/manipulator/pico - name = "pico-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "pico_mani" - origin_tech = "materials=5,programming=2" - rating = 3 - m_amt = 30 - -/obj/item/weapon/stock_parts/micro_laser/ultra - name = "ultra-high-power micro-laser" - icon_state = "ultra_high_micro_laser" - desc = "A tiny laser used in certain devices." - origin_tech = "magnets=5" - rating = 3 - m_amt = 10 - g_amt = 20 - -/obj/item/weapon/stock_parts/matter_bin/super - name = "super matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "super_matter_bin" - origin_tech = "materials=5" - rating = 3 - m_amt = 80 - -// Subspace stock parts - -/obj/item/weapon/stock_parts/subspace/ansible - name = "subspace ansible" - icon_state = "subspace_ansible" - desc = "A compact module capable of sensing extradimensional activity." - origin_tech = "programming=2;magnets=3;materials=2;bluespace=1" - m_amt = 30 - g_amt = 10 - -/obj/item/weapon/stock_parts/subspace/filter - name = "hyperwave filter" - icon_state = "hyperwave_filter" - desc = "A tiny device capable of filtering and converting super-intense radiowaves." - origin_tech = "programming=2;magnets=1" - m_amt = 30 - g_amt = 10 - -/obj/item/weapon/stock_parts/subspace/amplifier - name = "subspace amplifier" - icon_state = "subspace_amplifier" - desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - origin_tech = "programming=2;magnets=2;materials=1;bluespace=1" - m_amt = 30 - g_amt = 10 - -/obj/item/weapon/stock_parts/subspace/treatment - name = "subspace treatment disk" - icon_state = "treatment_disk" - desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - origin_tech = "programming=2;magnets=1;materials=3;bluespace=1" - m_amt = 30 - g_amt = 10 - -/obj/item/weapon/stock_parts/subspace/analyzer - name = "subspace wavelength analyzer" - icon_state = "wavelength_analyzer" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - origin_tech = "programming=2;magnets=2;materials=2;bluespace=1" - m_amt = 30 - g_amt = 10 - -/obj/item/weapon/stock_parts/subspace/crystal - name = "ansible crystal" - icon_state = "ansible_crystal" - desc = "A crystal made from pure glass used to transmit laser databursts to subspace." - origin_tech = "magnets=2;materials=2;bluespace=1" - g_amt = 50 - -/obj/item/weapon/stock_parts/subspace/transmitter - name = "subspace transmitter" - icon_state = "subspace_transmitter" - desc = "A large piece of equipment used to open a window into the subspace dimension." - origin_tech = "magnets=3;materials=3;bluespace=2" - m_amt = 50 - -/obj/item/weapon/research//Makes testing much less of a pain -Sieve - name = "research" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "capacitor" - desc = "A debug item for research." - origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8" - - -/////////Random shit//////// - -/obj/item/weapon/lightning - name = "lightning" - icon = 'icons/obj/lightning.dmi' - icon_state = "lightning" - desc = "test lightning" - - New() - icon = midicon - icon_state = "1" - - afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) - var/angle = get_angle(A, user) - //world << angle - angle = round(angle) + 45 - if(angle > 180) - angle -= 180 - else - angle += 180 - - if(!angle) - angle = 1 - //world << "adjusted [angle]" - icon_state = "[angle]" - //world << "[angle] [(get_dist(user, A) - 1)]" - user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15) -/*Testing -proc/get_angle(atom/a, atom/b) - return atan2(b.y - a.y, b.x - a.x) -proc/atan2(x, y) - if(!x && !y) return 0 - return y >= 0 ? arccos(x / sqrt(x * x + y * y)) : -arccos(x / sqrt(x * x + y * y)) -proc - // creates an /icon object with 360 states of rotation - rotate_icon(file, state, step = 1, aa = FALSE) - var icon/base = icon(file, state) - - var w, h, w2, h2 - if(aa) - aa ++ - w = base.Width() - w2 = w * aa - h = base.Height() - h2 = h * aa - - var icon{result = icon(base); temp} - - for(var/angle in 0 to 360 step step) - if(angle == 0 ) continue - if(angle == 360) continue - - temp = icon(base) - - if(aa) temp.Scale(w2, h2) - temp.Turn(angle) - if(aa) temp.Scale(w, h) - - result.Insert(temp, "[angle]") - - return result*/ - - -/obj/item/weapon/fan - name = "desk fan" - icon = 'icons/obj/decorations.dmi' - icon_state = "fan" - desc = "A smal desktop fan. Button seems to be stuck in the 'on' position." - -/obj/item/weapon/newton - name = "newton cradle" - icon = 'icons/obj/decorations.dmi' - icon_state = "newton" - desc = "A device bored paper pushers use to remind themselves that the time did not stop yet. Contains gravity." - -/obj/item/weapon/balltoy - name = "ball toy" - icon = 'icons/obj/decorations.dmi' - icon_state = "rollball" - desc = "A device bored paper pushers use to remind themselves that the time did not stop yet." - -/obj/item/weapon/kidanglobe - name = "Kidan homeworld globe" - icon = 'icons/obj/decorations.dmi' - icon_state = "kidanglobe" - desc = "A globe of the Kidan homeworld." diff --git a/code/defines/obj.dm b/code/game/objects/effects/datacore-effect.dm similarity index 59% rename from code/defines/obj.dm rename to code/game/objects/effects/datacore-effect.dm index b0e8290ffee..ac2ec220987 100644 --- a/code/defines/obj.dm +++ b/code/game/objects/effects/datacore-effect.dm @@ -1,394 +1,210 @@ -/obj/structure/signpost - icon = 'icons/obj/stationobjs.dmi' - icon_state = "signpost" - anchored = 1 - density = 1 - - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - return attack_hand(user) - - attack_hand(mob/user as mob) - user << "Civilians: NT is recruiting! Please head SOUTH to the NT Recruitment office to join the station's crew!" - -/obj/structure/ninjatele - - name = "Long-Distance Teleportation Console" - desc = "A console used to send a Spider Clan operative long distances rapidly." - icon = 'icons/obj/ninjaobjects.dmi' - icon_state = "teleconsole" - anchored = 1 - density = 0 - - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - - return attack_hand(user) - - - attack_hand(mob/user as mob) - - - if (user.mind.special_role=="Ninja") - switch(alert("Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)",,"Yes","No")) - - if("Yes") - if(user.z != src.z) return - - user.loc.loc.Exited(user) - user.loc = pick(carplist) // In the future, possibly make specific NinjaTele landmarks, and give him an option to teleport to North/South/East/West of SS13 instead of just hijacking a carpspawn. - - - playsound(user.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(user.loc, 'sound/effects/sparks2.ogg', 50, 1) - anim(user.loc,user,'icons/mob/mob.dmi',,"phasein",,user.dir) - - user <<"\blue VOID-Shift translocation successful" - - if("No") - - user <<"\red Process aborted!" - - return - else - user<< "\red FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked." - -/obj/effect/mark - var/mark = "" - icon = 'icons/misc/mark.dmi' - icon_state = "blank" - anchored = 1 - layer = 99 - mouse_opacity = 0 - unacidable = 1//Just to be sure. - -/obj/effect/beam - name = "beam" - unacidable = 1//Just to be sure. - var/def_zone - pass_flags = PASSTABLE - - -/obj/effect/begin - name = "begin" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "begin" - anchored = 1.0 - unacidable = 1 - -/* - * This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile - */ - -/obj/effect/datacore - name = "datacore" - var/medical[] = list() - var/general[] = list() - var/security[] = list() - //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). - var/locked[] = list() - - -/obj/effect/datacore/proc/get_manifest(monochrome, OOC) - var/list/heads = new() - var/list/sec = new() - var/list/eng = new() - var/list/med = new() - var/list/sci = new() - var/list/supp = new() - var/list/bot = new() - var/list/misc = new() - var/list/isactive = new() - var/dat = {" - - - - "} - var/even = 0 - // sort mobs - for(var/datum/data/record/t in data_core.general) - var/name = t.fields["name"] - var/rank = t.fields["rank"] - var/real_rank = t.fields["real_rank"] - if(OOC) - var/active = 0 - for(var/mob/M in player_list) - if(M.real_name == name && M.client && M.client.inactivity <= 10 * 60 * 10) - active = 1 - break - isactive[name] = active ? "Active" : "Inactive" - else - isactive[name] = t.fields["p_stat"] - //world << "[name]: [rank]" - //cael - to prevent multiple appearances of a player/job combination, add a continue after each line - var/department = 0 - if(real_rank in command_positions) - heads[name] = rank - department = 1 - if(real_rank in security_positions) - sec[name] = rank - department = 1 - if(real_rank in engineering_positions) - eng[name] = rank - department = 1 - if(real_rank in medical_positions) - med[name] = rank - department = 1 - if(real_rank in science_positions) - sci[name] = rank - department = 1 - if(real_rank in support_positions) - supp[name] = rank - department = 1 - if(real_rank in nonhuman_positions) - bot[name] = rank - department = 1 - if(!department && !(name in heads)) - misc[name] = rank - if(heads.len > 0) - dat += "" - for(name in heads) - dat += "" - even = !even - if(sec.len > 0) - dat += "" - for(name in sec) - dat += "" - even = !even - if(eng.len > 0) - dat += "" - for(name in eng) - dat += "" - even = !even - if(med.len > 0) - dat += "" - for(name in med) - dat += "" - even = !even - if(sci.len > 0) - dat += "" - for(name in sci) - dat += "" - even = !even - if(supp.len > 0) - dat += "" - for(name in supp) - dat += "" - even = !even - // in case somebody is insane and added them to the manifest, why not - if(bot.len > 0) - dat += "" - for(name in bot) - dat += "" - even = !even - // misc guys - if(misc.len > 0) - dat += "" - for(name in misc) - dat += "" - even = !even - - dat += "
NameRankActivity
Heads
[name][heads[name]][isactive[name]]
Security
[name][sec[name]][isactive[name]]
Engineering
[name][eng[name]][isactive[name]]
Medical
[name][med[name]][isactive[name]]
Science
[name][sci[name]][isactive[name]]
Support
[name][supp[name]][isactive[name]]
Silicon
[name][bot[name]][isactive[name]]
Miscellaneous
[name][misc[name]][isactive[name]]
" - dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly - dat = replacetext(dat, "\t", "") - return dat - - -/* -We can't just insert in HTML into the nanoUI so we need the raw data to play with. -Instead of creating this list over and over when someone leaves their PDA open to the page -we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change -using /obj/effect/datacore/proc/manifest_inject( ), or manifest_insert( ) -*/ - -var/global/list/PDA_Manifest = list() - -/obj/effect/datacore/proc/get_manifest_json() - if(PDA_Manifest.len) - return PDA_Manifest - var/heads[0] - var/sec[0] - var/eng[0] - var/med[0] - var/sci[0] - var/supp[0] - var/bot[0] - var/misc[0] - for(var/datum/data/record/t in data_core.general) - var/name = sanitize(t.fields["name"]) - var/rank = sanitize(t.fields["rank"]) - var/real_rank = t.fields["real_rank"] - var/isactive = t.fields["p_stat"] - var/department = 0 - var/depthead = 0 // Department Heads will be placed at the top of their lists. - if(real_rank in command_positions) - heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - depthead = 1 - if(rank=="Captain" && heads.len != 1) - heads.Swap(1,heads.len) - - if(real_rank in security_positions) - sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && sec.len != 1) - sec.Swap(1,sec.len) - - if(real_rank in engineering_positions) - eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && eng.len != 1) - eng.Swap(1,eng.len) - - if(real_rank in medical_positions) - med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && med.len != 1) - med.Swap(1,med.len) - - if(real_rank in science_positions) - sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && sci.len != 1) - sci.Swap(1,sci.len) - - if(real_rank in support_positions) - supp[++supp.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - if(depthead && supp.len != 1) - supp.Swap(1,supp.len) - - if(real_rank in nonhuman_positions) - bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive) - department = 1 - - if(!department && !(name in heads)) - misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive) - - - PDA_Manifest = list(\ - "heads" = heads,\ - "sec" = sec,\ - "eng" = eng,\ - "med" = med,\ - "sci" = sci,\ - "supp" = supp,\ - "bot" = bot,\ - "misc" = misc\ - ) - return PDA_Manifest - - -/obj/effect/laser - name = "laser" - desc = "IT BURNS!!!" - icon = 'icons/obj/projectiles.dmi' - var/damage = 0.0 - var/range = 10.0 - - -/obj/effect/list_container - name = "list container" - -/obj/effect/list_container/mobl - name = "mobl" - var/master = null - - var/list/container = list( ) - -/* -/obj/structure/cable - level = 1 - anchored =1 - var/datum/powernet/powernet - name = "power cable" - desc = "A flexible superconducting cable for heavy-duty power transfer" - icon = 'icons/obj/power_cond_red.dmi' - icon_state = "0-1" - var/d1 = 0 - var/d2 = 1 - layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 - var/_color = "red" - var/obj/structure/powerswitch/power_switch - var/obj/item/device/powersink/attached // holding this here for qdel - -/obj/structure/cable/yellow - _color = "yellow" - icon = 'icons/obj/power_cond_yellow.dmi' - -/obj/structure/cable/green - _color = "green" - icon = 'icons/obj/power_cond_green.dmi' - -/obj/structure/cable/blue - _color = "blue" - icon = 'icons/obj/power_cond_blue.dmi' - -/obj/structure/cable/pink - _color = "pink" - icon = 'icons/obj/power_cond_pink.dmi' - -/obj/structure/cable/orange - _color = "orange" - icon = 'icons/obj/power_cond_orange.dmi' - -/obj/structure/cable/cyan - _color = "cyan" - icon = 'icons/obj/power_cond_cyan.dmi' - -/obj/structure/cable/white - _color = "white" - icon = 'icons/obj/power_cond_white.dmi' -*/ - -/obj/effect/projection - name = "Projection" - desc = "This looks like a projection of something." - anchored = 1.0 - - -/obj/effect/shut_controller - name = "shut controller" - var/moving = null - var/list/parts = list( ) - -/obj/structure/showcase - name = "Showcase" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "showcase_1" - desc = "A stand with the empty body of a cyborg bolted to it." - density = 1 - anchored = 1 - unacidable = 1//temporary until I decide whether the borg can be removed. -veyveyr - -/obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER - -/obj/item/weapon/beach_ball - icon = 'icons/misc/beach.dmi' - icon_state = "ball" - name = "beach ball" - item_state = "beachball" - density = 0 - anchored = 0 - w_class = 1.0 - force = 0.0 - throwforce = 0.0 - throw_speed = 1 - throw_range = 20 - flags = CONDUCT - - -/obj/effect/stop - var/victim = null - icon_state = "empty" - name = "Geas" - desc = "You can't resist." - // name = "" - -/obj/effect/spawner - name = "object spawner" +//This item is not completely unused- the central datacore datum uses it. +/* + * This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile + */ + +/obj/effect/datacore + name = "datacore" + var/medical[] = list() + var/general[] = list() + var/security[] = list() + //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). + var/locked[] = list() + + +/obj/effect/datacore/proc/get_manifest(monochrome, OOC) + var/list/heads = new() + var/list/sec = new() + var/list/eng = new() + var/list/med = new() + var/list/sci = new() + var/list/supp = new() + var/list/bot = new() + var/list/misc = new() + var/list/isactive = new() + var/dat = {" + + + + "} + var/even = 0 + // sort mobs + for(var/datum/data/record/t in data_core.general) + var/name = t.fields["name"] + var/rank = t.fields["rank"] + var/real_rank = t.fields["real_rank"] + if(OOC) + var/active = 0 + for(var/mob/M in player_list) + if(M.real_name == name && M.client && M.client.inactivity <= 10 * 60 * 10) + active = 1 + break + isactive[name] = active ? "Active" : "Inactive" + else + isactive[name] = t.fields["p_stat"] + //world << "[name]: [rank]" + //cael - to prevent multiple appearances of a player/job combination, add a continue after each line + var/department = 0 + if(real_rank in command_positions) + heads[name] = rank + department = 1 + if(real_rank in security_positions) + sec[name] = rank + department = 1 + if(real_rank in engineering_positions) + eng[name] = rank + department = 1 + if(real_rank in medical_positions) + med[name] = rank + department = 1 + if(real_rank in science_positions) + sci[name] = rank + department = 1 + if(real_rank in support_positions) + supp[name] = rank + department = 1 + if(real_rank in nonhuman_positions) + bot[name] = rank + department = 1 + if(!department && !(name in heads)) + misc[name] = rank + if(heads.len > 0) + dat += "" + for(name in heads) + dat += "" + even = !even + if(sec.len > 0) + dat += "" + for(name in sec) + dat += "" + even = !even + if(eng.len > 0) + dat += "" + for(name in eng) + dat += "" + even = !even + if(med.len > 0) + dat += "" + for(name in med) + dat += "" + even = !even + if(sci.len > 0) + dat += "" + for(name in sci) + dat += "" + even = !even + if(supp.len > 0) + dat += "" + for(name in supp) + dat += "" + even = !even + // in case somebody is insane and added them to the manifest, why not + if(bot.len > 0) + dat += "" + for(name in bot) + dat += "" + even = !even + // misc guys + if(misc.len > 0) + dat += "" + for(name in misc) + dat += "" + even = !even + + dat += "
NameRankActivity
Heads
[name][heads[name]][isactive[name]]
Security
[name][sec[name]][isactive[name]]
Engineering
[name][eng[name]][isactive[name]]
Medical
[name][med[name]][isactive[name]]
Science
[name][sci[name]][isactive[name]]
Support
[name][supp[name]][isactive[name]]
Silicon
[name][bot[name]][isactive[name]]
Miscellaneous
[name][misc[name]][isactive[name]]
" + dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly + dat = replacetext(dat, "\t", "") + return dat + + +/* +We can't just insert in HTML into the nanoUI so we need the raw data to play with. +Instead of creating this list over and over when someone leaves their PDA open to the page +we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change +using /obj/effect/datacore/proc/manifest_inject( ), or manifest_insert( ) +*/ + +var/global/list/PDA_Manifest = list() + +/obj/effect/datacore/proc/get_manifest_json() + if(PDA_Manifest.len) + return PDA_Manifest + var/heads[0] + var/sec[0] + var/eng[0] + var/med[0] + var/sci[0] + var/supp[0] + var/bot[0] + var/misc[0] + for(var/datum/data/record/t in data_core.general) + var/name = sanitize(t.fields["name"]) + var/rank = sanitize(t.fields["rank"]) + var/real_rank = t.fields["real_rank"] + var/isactive = t.fields["p_stat"] + var/department = 0 + var/depthead = 0 // Department Heads will be placed at the top of their lists. + if(real_rank in command_positions) + heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + depthead = 1 + if(rank=="Captain" && heads.len != 1) + heads.Swap(1,heads.len) + + if(real_rank in security_positions) + sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && sec.len != 1) + sec.Swap(1,sec.len) + + if(real_rank in engineering_positions) + eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && eng.len != 1) + eng.Swap(1,eng.len) + + if(real_rank in medical_positions) + med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && med.len != 1) + med.Swap(1,med.len) + + if(real_rank in science_positions) + sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && sci.len != 1) + sci.Swap(1,sci.len) + + if(real_rank in support_positions) + supp[++supp.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && supp.len != 1) + supp.Swap(1,supp.len) + + if(real_rank in nonhuman_positions) + bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + + if(!department && !(name in heads)) + misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive) + + + PDA_Manifest = list(\ + "heads" = heads,\ + "sec" = sec,\ + "eng" = eng,\ + "med" = med,\ + "sci" = sci,\ + "supp" = supp,\ + "bot" = bot,\ + "misc" = misc\ + ) + return PDA_Manifest + diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index c2f590c5613..bc697657b98 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -1,3 +1,21 @@ +//MISC EFFECTS + +//This file is for effects that are less than 20 lines and don't fit very well in any other category. + +/*CURRENT CONTENTS + Strange Present + Mark + Beam + Laser + Begin + Stop + Projection + Shut_controller + Showcase + Spawner + List_container +*/ + //The effect when you wrap a dead body in gift wrap /obj/effect/spresent name = "strange present" @@ -5,4 +23,72 @@ icon = 'icons/obj/items.dmi' icon_state = "strangepresent" density = 1 - anchored = 0 \ No newline at end of file + anchored = 0 + +/obj/effect/mark + var/mark = "" + icon = 'icons/misc/mark.dmi' + icon_state = "blank" + anchored = 1 + layer = 99 + mouse_opacity = 0 + unacidable = 1//Just to be sure. + +/obj/effect/beam + name = "beam" + unacidable = 1//Just to be sure. + var/def_zone + pass_flags = PASSTABLE + +/obj/effect/laser + name = "laser" + desc = "IT BURNS!!!" + icon = 'icons/obj/projectiles.dmi' + var/damage = 0.0 + var/range = 10.0 + +/obj/effect/begin + name = "begin" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "begin" + anchored = 1.0 + unacidable = 1 + +/obj/effect/stop + var/victim = null + icon_state = "empty" + name = "Geas" + desc = "You can't resist." + // name = "" + +/obj/effect/projection + name = "Projection" + desc = "This looks like a projection of something." + anchored = 1.0 + + +/obj/effect/shut_controller + name = "shut controller" + var/moving = null + var/list/parts = list( ) + +/obj/structure/showcase + name = "Showcase" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "showcase_1" + desc = "A stand with the empty body of a cyborg bolted to it." + density = 1 + anchored = 1 + unacidable = 1//temporary until I decide whether the borg can be removed. -veyveyr + +/obj/effect/spawner + name = "object spawner" + +/obj/effect/list_container + name = "list container" + +/obj/effect/list_container/mobl + name = "mobl" + var/master = null + + var/list/container = list( ) \ No newline at end of file diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm new file mode 100644 index 00000000000..cdce6774518 --- /dev/null +++ b/code/game/objects/items/misc.dm @@ -0,0 +1,24 @@ +//MISC items +//These items don't belong anywhere else, so they have this file. + +//Current contents: +/* + mouse_drag_pointer + Beach Ball +*/ + +/obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER + +/obj/item/weapon/beach_ball + icon = 'icons/misc/beach.dmi' + icon_state = "ball" + name = "beach ball" + item_state = "beachball" + density = 0 + anchored = 0 + w_class = 1.0 + force = 0.0 + throwforce = 0.0 + throw_speed = 1 + throw_range = 20 + flags = CONDUCT \ No newline at end of file diff --git a/code/game/objects/items/weapons/caution.dm b/code/game/objects/items/weapons/caution.dm new file mode 100644 index 00000000000..e3eaaf4751c --- /dev/null +++ b/code/game/objects/items/weapons/caution.dm @@ -0,0 +1,66 @@ +/obj/item/weapon/caution + desc = "Caution! Wet Floor!" + name = "wet floor sign" + icon = 'icons/obj/janitor.dmi' + icon_state = "caution" + force = 1.0 + throwforce = 3.0 + throw_speed = 1 + throw_range = 5 + w_class = 2.0 + attack_verb = list("warned", "cautioned", "smashed") + + proximity_sign + var/timing = 0 + var/armed = 0 + var/timepassed = 0 + + attack_self(mob/user as mob) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.mind.assigned_role != "Janitor") + return + if(armed) + armed = 0 + user << "\blue You disarm \the [src]." + return + timing = !timing + if(timing) + processing_objects.Add(src) + else + armed = 0 + timepassed = 0 + H << "\blue You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]" + + process() + if(!timing) + processing_objects.Remove(src) + timepassed++ + if(timepassed >= 15 && !armed) + armed = 1 + timing = 0 + + HasProximity(atom/movable/AM as mob|obj) + if(armed) + if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain)) + var/mob/living/carbon/C = AM + if(C.m_intent != "walk") + src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"") + explosion(src.loc,-1,0,2) + if(ishuman(C)) + dead_legs(C) + if(src) + qdel(src) + + proc/dead_legs(mob/living/carbon/human/H as mob) + var/obj/item/organ/external/l = H.get_organ("l_leg") + var/obj/item/organ/external/r = H.get_organ("r_leg") + if(l && !(l.status & ORGAN_DESTROYED)) + l.status |= ORGAN_DESTROYED + if(r && !(r.status & ORGAN_DESTROYED)) + r.status |= ORGAN_DESTROYED + +/obj/item/weapon/caution/cone + desc = "This cone is trying to warn you of something!" + name = "warning cone" + icon_state = "cone" \ No newline at end of file diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 637dc49437a..84dc2d0c8b7 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -8,6 +8,18 @@ /* * Banana Peals */ + +/obj/item/weapon/bananapeel + name = "banana peel" + desc = "A peel from a banana." + icon = 'icons/obj/items.dmi' + icon_state = "banana_peel" + item_state = "banana_peel" + w_class = 1.0 + throwforce = 0 + throw_speed = 4 + throw_range = 20 + /obj/item/weapon/bananapeel/Crossed(AM as mob|obj) if (istype(AM, /mob/living/carbon)) var/mob/M = AM @@ -66,6 +78,21 @@ /* * Bike Horns */ + +/obj/item/weapon/bikehorn + name = "bike horn" + desc = "A horn off of a bicycle." + icon = 'icons/obj/items.dmi' + icon_state = "bike_horn" + item_state = "bike_horn" + hitsound = 'sound/items/bikehorn.ogg' + throwforce = 3 + w_class = 1.0 + throw_speed = 3 + throw_range = 15 + attack_verb = list("HONKED") + var/spam_flag = 0 + /obj/item/weapon/bikehorn/attack_self(mob/user as mob) if (spam_flag == 0) spam_flag = 1 diff --git a/code/game/objects/items/weapons/disks.dm b/code/game/objects/items/weapons/disks.dm new file mode 100644 index 00000000000..af88cf0bb78 --- /dev/null +++ b/code/game/objects/items/weapons/disks.dm @@ -0,0 +1,15 @@ +/obj/item/weapon/disk + name = "disk" + icon = 'icons/obj/items.dmi' + +/obj/item/weapon/disk/nuclear + name = "nuclear authentication disk" + desc = "Better keep this safe." + icon_state = "nucleardisk" + item_state = "card-id" + w_class = 1.0 + +/* +/obj/item/weapon/disk/nuclear/pickup(mob/living/user as mob) + if(issyndicate(user)) + set_security_level(3)*/ //Nuke Ops rework makes stealth approach significantly harder; this makes it damn near impossible; besides, it's horrendously meta. \ No newline at end of file diff --git a/code/game/objects/items/weapons/holosign.dm b/code/game/objects/items/weapons/holosign.dm new file mode 100644 index 00000000000..49b6a7ad645 --- /dev/null +++ b/code/game/objects/items/weapons/holosign.dm @@ -0,0 +1,48 @@ +/obj/item/weapon/holosign_creator + name = "holographic sign projector" + desc = "A handy-dandy hologaphic projector that displays a janitorial sign." + icon = 'icons/obj/janitor.dmi' + icon_state = "signmaker" + item_state = "electronic" + force = 5 + w_class = 2 + throwforce = 0 + throw_speed = 3 + throw_range = 7 + origin_tech = "programming=3" + var/list/signs = list() + var/max_signs = 10 + +/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag) + if(flag) + var/turf/T = get_turf(target) + var/obj/effect/overlay/holograph/H = locate() in T + if(H) + user << "You use [src] to destroy [H]." + signs -= H + qdel(H) + else + if(signs.len < max_signs) + H = new(get_turf(target)) + signs += H + user << "You create \a [H] with [src]." + else + user << "[src] is projecting at max capacity!" + +/obj/item/weapon/holosign_creator/attack(mob/living/carbon/human/M, mob/user) + return + +/obj/item/weapon/holosign_creator/attack_self(mob/user) + if(signs.len) + var/list/L = signs.Copy() + for(var/sign in L) + qdel(sign) + signs -= sign + user << "You clear all active holograms." + +/obj/effect/overlay/holograph + name = "wet floor sign" + desc = "The words flicker as if they mean nothing." + icon = 'icons/obj/janitor.dmi' + icon_state = "holosign" + anchored = 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm new file mode 100644 index 00000000000..207deb0bfc7 --- /dev/null +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -0,0 +1,210 @@ +/obj/item/weapon/legcuffs + name = "legcuffs" + desc = "Use this to keep prisoners in line." + gender = PLURAL + icon = 'icons/obj/items.dmi' + icon_state = "handcuff" + flags = CONDUCT + throwforce = 0 + w_class = 3.0 + origin_tech = "materials=1" + var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute + +/obj/item/weapon/legcuffs/beartrap + name = "bear trap" + throw_speed = 1 + throw_range = 1 + icon_state = "beartrap0" + desc = "A trap used to catch bears and other legged creatures." + var/armed = 0 + var/obj/item/weapon/grenade/iedcasing/IED = null + + suicide_act(mob/user) + viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide." + return (BRUTELOSS) + +/obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob) + ..() + if(ishuman(user) && !user.stat && !user.restrained()) + armed = !armed + icon_state = "beartrap[armed]" + user << "[src] is now [armed ? "armed" : "disarmed"]" + +/obj/item/weapon/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive. + if(istype(I, /obj/item/weapon/grenade/iedcasing)) + if(IED) + user << "This beartrap already has an IED hooked up to it!" + return + IED = I + switch(IED.assembled) + if(0,1) //if it's not fueled/hooked up + user << "You haven't prepared this IED yet!" + IED = null + return + if(2,3) + user.drop_item(src) + I.loc = src + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + var/log_str = "[key_name(usr)]? has rigged a beartrap with an IED at [A.name] (JMP)." + message_admins(log_str) + log_game(log_str) + user << "You sneak the [IED] underneath the pressure plate and connect the trigger wire." + desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it." + else + user << "You shouldn't be reading this message! Contact a coder or someone, something broke!" + IED = null + return + if(istype(I, /obj/item/weapon/screwdriver)) + if(IED) + IED.loc = get_turf(src.loc) + IED = null + user << "You remove the IED from the [src]." + return + ..() + +/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj) + if(armed) + if(IED && isturf(src.loc)) + IED.active = 1 + IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled") + IED.icon_state = initial(icon_state) + "_active" + IED.assembled = 3 + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + var/log_str = "[key_name(usr)]? has triggered an IED-rigged [name] at [A.name] (JMP)." + message_admins(log_str) + log_game(log_str) + spawn(IED.det_time) + IED.prime() + if(ishuman(AM)) + if(isturf(src.loc)) + var/mob/living/carbon/H = AM + if(H.m_intent == "run") + if(H.lying) + H.apply_damage(20,BRUTE,"chest") + else + H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg"))) + armed = 0 + icon_state = "beartrap0" + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + H.visible_message("[H] triggers \the [src].", \ + "You trigger \the [src]!") + H.legcuffed = src + src.loc = H + H.update_inv_legcuffed() + H << "You step on \the [src]!" + if(IED && IED.active) + H << "The [src]'s IED has been activated!" + feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart. + for(var/mob/O in viewers(H, null)) + if(O == H) + continue + O.show_message("\red [H] steps on \the [src].", 1) + if(isanimal(AM) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator)) + armed = 0 + icon_state = "beartrap0" + var/mob/living/simple_animal/SA = AM + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + SA.visible_message("[SA] triggers \the [src].", \ + "You trigger \the [src]!") + SA.health -= 20 + ..() + +/obj/item/weapon/legcuffs/bolas + name = "bolas" + desc = "An entangling bolas. Throw at your foes to trip them and prevent them from running." + gender = NEUTER + icon = 'icons/obj/weapons.dmi' + icon_override = 'icons/mob/in-hand/swords.dmi' + icon_state = "bolas" + siemens_coefficient = 1 + slot_flags = SLOT_BELT + throwforce = 2 + w_class = 2 + origin_tech = "materials=1" + attack_verb = list("lashed", "bludgeoned", "whipped") + force = 4 + breakouttime = 50 //10 seconds + throw_speed = 1 + throw_range = 10 + var/dispenser = 0 + var/throw_sound = 'sound/weapons/whip.ogg' + var/trip_prob = 60 + var/thrown_from + +/obj/item/weapon/legcuffs/bolas/suicide_act(mob/living/user) + viewers(user) << "[user] is wrapping the [src.name] around \his neck! It looks like \he's trying to commit suicide." + return(OXYLOSS) + +/obj/item/weapon/legcuffs/bolas/throw_at(var/atom/A, throw_range, throw_speed) + if(usr && !istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas)) //if there is a user, but not a mech + if(istype(usr, /mob/living/carbon/human)) //if the user is human + var/mob/living/carbon/human/H = usr + if((CLUMSY in H.mutations) && prob(50)) + H <<"You smack yourself in the face while swinging the [src]!" + H.Stun(2) + H.drop_item(src) + return + if (!thrown_from && usr) //if something hasn't set it already (like a mech does when it launches) + thrown_from = usr //then the user must have thrown it + if (!istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas)) + playsound(src, throw_sound, 20, 1) //because mechs play the sound anyways + var/turf/target = get_turf(A) + var/atom/movable/adjtarget = new /atom/movable + var/xadjust = 0 + var/yadjust = 0 + var/scaler = 0 //used to changed the normalised vector to the proper size + scaler = throw_range / max(abs(target.x - src.x), abs(target.y - src.y)) //whichever is larger magnitude is what we normalise to + if (target.x - src.x != 0) //just to avoid fucking with math for no reason + xadjust = round((target.x - src.x) * scaler) //normalised vector is now scaled up to throw_range + adjtarget.x = src.x + xadjust //the new target at max range + else + adjtarget.x = src.x + if (target.y - src.y != 0) + yadjust = round((target.y - src.y) * scaler) + adjtarget.y = src.y + yadjust + else + adjtarget.y = src.y + // log_admin("Adjusted target of [adjtarget.x] and [adjtarget.y], adjusted with [xadjust] and [yadjust] from [scaler]") + ..(get_turf(adjtarget), throw_range, throw_speed) + thrown_from = null + +/obj/item/weapon/legcuffs/bolas/throw_impact(atom/hit_atom) //Pomf was right, I was wrong - Comic + if(isliving(hit_atom) && hit_atom != usr) //if the target is a live creature other than the thrower + var/mob/living/M = hit_atom + if(ishuman(M)) //if they're a human species + var/mob/living/carbon/human/H = M + if(H.m_intent == "run") //if they're set to run (though not necessarily running at that moment) + if(prob(trip_prob)) //this probability is up for change and mostly a placeholder - Comic + step(H, H.dir) + H.visible_message("[H] was tripped by the bolas!","Your legs have been tangled!"); + H.Stun(2) //used instead of setting damage in vars to avoid non-human targets being affected + H.Weaken(4) + H.legcuffed = src //applies legcuff properties inherited through legcuffs + src.loc = H + H.update_inv_legcuffed() + if(!H.legcuffed) //in case it didn't happen, we need a safety net + throw_failed() + else if(H.legcuffed) //if the target is already legcuffed (has to be walking) + throw_failed() + return + else //walking, but uncuffed, or the running prob() failed + H << "You stumble over the thrown bolas" + step(H, H.dir) + H.Stun(1) + throw_failed() + return + else + M.Stun(2) //minor stun damage to anything not human + throw_failed() + return + +/obj/item/weapon/legcuffs/bolas/proc/throw_failed() //called when the throw doesn't entangle + //log_admin("Logged as [thrown_from]") + if(!thrown_from || !istype(thrown_from, /mob/living)) //in essence, if we don't know whether a person threw it + qdel(src) //destroy it, to stop infinite bolases + +/obj/item/weapon/legcuffs/bolas/Bump() + ..() + throw_failed() //allows a mech bolas to be destroyed \ No newline at end of file diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm new file mode 100644 index 00000000000..01bac424342 --- /dev/null +++ b/code/game/objects/items/weapons/misc.dm @@ -0,0 +1,136 @@ +//MISC WEAPONS + +//This file contains /obj/item/weapon's that do not fit in any other category and are not big enough to warrant individual files. +/*CURRENT CONTENTS + Ball Toy + Cane + Cardboard Tube + Fan + Gaming Kit + Gift + Kidan Globe + Lightning + Newton Cradle + PAI cable + Red Phone +*/ + +/obj/item/weapon/balltoy + name = "ball toy" + icon = 'icons/obj/decorations.dmi' + icon_state = "rollball" + desc = "A device bored paper pushers use to remind themselves that the time did not stop yet." + +/obj/item/weapon/cane + name = "cane" + desc = "A cane used by a true gentlemen. Or a clown." + icon = 'icons/obj/weapons.dmi' + icon_state = "cane" + item_state = "stick" + flags = CONDUCT + force = 5.0 + throwforce = 7.0 + w_class = 2.0 + m_amt = 50 + attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") + +/obj/item/weapon/c_tube + name = "cardboard tube" + desc = "A tube... of cardboard." + icon = 'icons/obj/items.dmi' + icon_state = "c_tube" + throwforce = 1 + w_class = 1.0 + throw_speed = 4 + throw_range = 5 + + + +/obj/item/weapon/fan + name = "desk fan" + icon = 'icons/obj/decorations.dmi' + icon_state = "fan" + desc = "A smal desktop fan. Button seems to be stuck in the 'on' position." + +/* +/obj/item/weapon/game_kit + name = "Gaming Kit" + icon = 'icons/obj/items.dmi' + icon_state = "game_kit" + var/selected = null + var/board_stat = null + var/data = "" + var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit" + item_state = "sheet-metal" + w_class = 5.0 +*/ + +/obj/item/weapon/gift + name = "gift" + desc = "A wrapped item." + icon = 'icons/obj/items.dmi' + icon_state = "gift3" + var/size = 3.0 + var/obj/item/gift = null + item_state = "gift" + w_class = 4.0 + +/obj/item/weapon/kidanglobe + name = "Kidan homeworld globe" + icon = 'icons/obj/decorations.dmi' + icon_state = "kidanglobe" + desc = "A globe of the Kidan homeworld." + +/obj/item/weapon/lightning + name = "lightning" + icon = 'icons/obj/lightning.dmi' + icon_state = "lightning" + desc = "test lightning" + + New() + icon = midicon + icon_state = "1" + + afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) + var/angle = get_angle(A, user) + //world << angle + angle = round(angle) + 45 + if(angle > 180) + angle -= 180 + else + angle += 180 + + if(!angle) + angle = 1 + //world << "adjusted [angle]" + icon_state = "[angle]" + //world << "[angle] [(get_dist(user, A) - 1)]" + user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15) + +/obj/item/weapon/newton + name = "newton cradle" + icon = 'icons/obj/decorations.dmi' + icon_state = "newton" + desc = "A device bored paper pushers use to remind themselves that the time did not stop yet. Contains gravity." + +/obj/item/weapon/pai_cable + desc = "A flexible coated cable with a universal jack on one end." + name = "data cable" + icon = 'icons/obj/power.dmi' + icon_state = "wire1" + + var/obj/machinery/machine + +/obj/item/weapon/phone + name = "red phone" + desc = "Should anything ever go wrong..." + icon = 'icons/obj/items.dmi' + icon_state = "red_phone" + flags = CONDUCT + force = 3.0 + throwforce = 2.0 + throw_speed = 1 + throw_range = 4 + w_class = 2 + attack_verb = list("called", "rang") + hitsound = 'sound/weapons/ring.ogg' \ No newline at end of file diff --git a/code/game/objects/items/weapons/module.dm b/code/game/objects/items/weapons/module.dm new file mode 100644 index 00000000000..51a045cba13 --- /dev/null +++ b/code/game/objects/items/weapons/module.dm @@ -0,0 +1,32 @@ +/obj/item/weapon/module + icon = 'icons/obj/module.dmi' + icon_state = "std_module" + w_class = 2.0 + item_state = "electronic" + flags = CONDUCT + var/mtype = 1 // 1=electronic 2=hardware + +/obj/item/weapon/module/card_reader + name = "card reader module" + icon_state = "card_mod" + desc = "An electronic module for reading data and ID cards." + +/obj/item/weapon/module/power_control + name = "power control module" + icon_state = "power_mod" + desc = "Heavy-duty switching circuits for power control." + +/obj/item/weapon/module/id_auth + name = "\improper ID authentication module" + icon_state = "id_mod" + desc = "A module allowing secure authorization of ID cards." + +/obj/item/weapon/module/cell_power + name = "power cell regulator module" + icon_state = "power_mod" + desc = "A converter and regulator allowing the use of power cells." + +/obj/item/weapon/module/cell_power + name = "power cell charger module" + icon_state = "power_mod" + desc = "Charging circuits for power cells." \ No newline at end of file diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm new file mode 100644 index 00000000000..7f5f6b7861e --- /dev/null +++ b/code/game/objects/items/weapons/soap.dm @@ -0,0 +1,28 @@ +/obj/item/weapon/soap + name = "soap" + desc = "A cheap bar of soap. Doesn't smell." + gender = PLURAL + icon = 'icons/obj/items.dmi' + icon_state = "soap" + w_class = 1.0 + throwforce = 0 + throw_speed = 4 + throw_range = 20 + discrete = 1 + var/cleanspeed = 50 //slower than mop + +/obj/item/weapon/soap/nanotrasen + desc = "A Nanotrasen brand bar of soap. Smells of plasma." + icon_state = "soapnt" + +/obj/item/weapon/soap/deluxe + icon_state = "soapdeluxe" + +/obj/item/weapon/soap/deluxe/New() + desc = "A deluxe Waffle Co. brand bar of soap. Smells of comdoms." + cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these + +/obj/item/weapon/soap/syndie + desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster." + icon_state = "soapsyndie" + cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes \ No newline at end of file diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm new file mode 100644 index 00000000000..a97ae394244 --- /dev/null +++ b/code/game/objects/items/weapons/staff.dm @@ -0,0 +1,31 @@ +/obj/item/weapon/staff + name = "wizards staff" + desc = "Apparently a staff used by the wizard." + icon = 'icons/obj/wizard.dmi' + icon_state = "staff" + force = 3.0 + throwforce = 5.0 + throw_speed = 1 + throw_range = 5 + w_class = 2.0 + flags = NOSHIELD + attack_verb = list("bludgeoned", "whacked", "disciplined") + +/obj/item/weapon/staff/broom + name = "broom" + desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." + icon = 'icons/obj/wizard.dmi' + icon_state = "broom" + +/obj/item/weapon/staff/stick + name = "stick" + desc = "A great tool to drag someone else's drinks across the bar." + icon = 'icons/obj/weapons.dmi' + icon_state = "stick" + item_state = "stick" + force = 3.0 + throwforce = 5.0 + throw_speed = 1 + throw_range = 5 + w_class = 2.0 + flags = NOSHIELD \ No newline at end of file diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm new file mode 100644 index 00000000000..758486872a4 --- /dev/null +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -0,0 +1,238 @@ +///////////////////////////////////////Stock Parts ///////////////////////////////// + +/obj/item/weapon/storage/part_replacer + name = "Rapid Part Exchange Device" + desc = "Special mechanical module made to store, sort, and apply standard machine parts." + icon_state = "RPED" + item_state = "RPED" + icon_override = 'icons/mob/in-hand/tools.dmi' + w_class = 5 + can_hold = list("/obj/item/weapon/stock_parts") + storage_slots = 50 + use_to_pickup = 1 + allow_quick_gather = 1 + allow_quick_empty = 1 + collection_mode = 1 + display_contents_with_number = 1 + max_w_class = 3 + max_combined_w_class = 100 + +/obj/item/weapon/storage/part_replacer/proc/play_rped_sound() + //Plays the sound for RPED exchanging or installing parts. + playsound(src, 'sound/items/rped.ogg', 40, 1) + +//Sorts stock parts inside an RPED by their rating. +//Only use /obj/item/weapon/stock_parts/ with this sort proc! +/proc/cmp_rped_sort(var/obj/item/weapon/stock_parts/A, var/obj/item/weapon/stock_parts/B) + return B.rating - A.rating + +/obj/item/weapon/stock_parts + name = "stock part" + desc = "What?" + gender = PLURAL + icon = 'icons/obj/stock_parts.dmi' + w_class = 2.0 + var/rating = 1 + New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + +//Rank 1 + +/obj/item/weapon/stock_parts/console_screen + name = "console screen" + desc = "Used in the construction of computers and other devices with a interactive console." + icon_state = "screen" + origin_tech = "materials=1" + g_amt = 200 + +/obj/item/weapon/stock_parts/capacitor + name = "capacitor" + desc = "A basic capacitor used in the construction of a variety of devices." + icon_state = "capacitor" + origin_tech = "powerstorage=1" + m_amt = 50 + g_amt = 50 + +/obj/item/weapon/stock_parts/scanning_module + name = "scanning module" + desc = "A compact, high resolution scanning module used in the construction of certain devices." + icon_state = "scan_module" + origin_tech = "magnets=1" + m_amt = 50 + g_amt = 20 + +/obj/item/weapon/stock_parts/manipulator + name = "micro-manipulator" + desc = "A tiny little manipulator used in the construction of certain devices." + icon_state = "micro_mani" + origin_tech = "materials=1;programming=1" + m_amt = 30 + +/obj/item/weapon/stock_parts/micro_laser + name = "micro-laser" + desc = "A tiny laser used in certain devices." + icon_state = "micro_laser" + origin_tech = "magnets=1" + m_amt = 10 + g_amt = 20 + +/obj/item/weapon/stock_parts/matter_bin + name = "matter bin" + desc = "A container for hold compressed matter awaiting re-construction." + icon_state = "matter_bin" + origin_tech = "materials=1" + m_amt = 80 + +//Rank 2 + +/obj/item/weapon/stock_parts/capacitor/adv + name = "advanced capacitor" + desc = "An advanced capacitor used in the construction of a variety of devices." + icon_state = "adv_capacitor" + origin_tech = "powerstorage=3" + rating = 2 + m_amt = 50 + g_amt = 50 + +/obj/item/weapon/stock_parts/scanning_module/adv + name = "advanced scanning module" + desc = "A compact, high resolution scanning module used in the construction of certain devices." + icon_state = "adv_scan_module" + origin_tech = "magnets=3" + rating = 2 + m_amt = 50 + g_amt = 20 + +/obj/item/weapon/stock_parts/manipulator/nano + name = "nano-manipulator" + desc = "A tiny little manipulator used in the construction of certain devices." + icon_state = "nano_mani" + origin_tech = "materials=3,programming=2" + rating = 2 + m_amt = 30 + +/obj/item/weapon/stock_parts/micro_laser/high + name = "high-power micro-laser" + desc = "A tiny laser used in certain devices." + icon_state = "high_micro_laser" + origin_tech = "magnets=3" + rating = 2 + m_amt = 10 + g_amt = 20 + +/obj/item/weapon/stock_parts/matter_bin/adv + name = "advanced matter bin" + desc = "A container for hold compressed matter awaiting re-construction." + icon_state = "advanced_matter_bin" + origin_tech = "materials=3" + rating = 2 + m_amt = 80 + +//Rating 3 + +/obj/item/weapon/stock_parts/capacitor/super + name = "super capacitor" + desc = "A super-high capacity capacitor used in the construction of a variety of devices." + icon_state = "super_capacitor" + origin_tech = "powerstorage=5;materials=4" + rating = 3 + m_amt = 50 + g_amt = 50 + +/obj/item/weapon/stock_parts/scanning_module/phasic + name = "phasic scanning module" + desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." + icon_state = "super_scan_module" + origin_tech = "magnets=5" + rating = 3 + m_amt = 50 + g_amt = 20 + +/obj/item/weapon/stock_parts/manipulator/pico + name = "pico-manipulator" + desc = "A tiny little manipulator used in the construction of certain devices." + icon_state = "pico_mani" + origin_tech = "materials=5,programming=2" + rating = 3 + m_amt = 30 + +/obj/item/weapon/stock_parts/micro_laser/ultra + name = "ultra-high-power micro-laser" + icon_state = "ultra_high_micro_laser" + desc = "A tiny laser used in certain devices." + origin_tech = "magnets=5" + rating = 3 + m_amt = 10 + g_amt = 20 + +/obj/item/weapon/stock_parts/matter_bin/super + name = "super matter bin" + desc = "A container for hold compressed matter awaiting re-construction." + icon_state = "super_matter_bin" + origin_tech = "materials=5" + rating = 3 + m_amt = 80 + +// Subspace stock parts + +/obj/item/weapon/stock_parts/subspace/ansible + name = "subspace ansible" + icon_state = "subspace_ansible" + desc = "A compact module capable of sensing extradimensional activity." + origin_tech = "programming=2;magnets=3;materials=2;bluespace=1" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/filter + name = "hyperwave filter" + icon_state = "hyperwave_filter" + desc = "A tiny device capable of filtering and converting super-intense radiowaves." + origin_tech = "programming=2;magnets=1" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/amplifier + name = "subspace amplifier" + icon_state = "subspace_amplifier" + desc = "A compact micro-machine capable of amplifying weak subspace transmissions." + origin_tech = "programming=2;magnets=2;materials=1;bluespace=1" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/treatment + name = "subspace treatment disk" + icon_state = "treatment_disk" + desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." + origin_tech = "programming=2;magnets=1;materials=3;bluespace=1" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/analyzer + name = "subspace wavelength analyzer" + icon_state = "wavelength_analyzer" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + origin_tech = "programming=2;magnets=2;materials=2;bluespace=1" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/crystal + name = "ansible crystal" + icon_state = "ansible_crystal" + desc = "A crystal made from pure glass used to transmit laser databursts to subspace." + origin_tech = "magnets=2;materials=2;bluespace=1" + g_amt = 50 + +/obj/item/weapon/stock_parts/subspace/transmitter + name = "subspace transmitter" + icon_state = "subspace_transmitter" + desc = "A large piece of equipment used to open a window into the subspace dimension." + origin_tech = "magnets=3;materials=3;bluespace=2" + m_amt = 50 + +/obj/item/weapon/research//Makes testing much less of a pain -Sieve + name = "research" + icon = 'icons/obj/stock_parts.dmi' + icon_state = "capacitor" + desc = "A debug item for research." + origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8" diff --git a/code/game/objects/items/weapons/syndie_uplink.dm b/code/game/objects/items/weapons/syndie_uplink.dm new file mode 100644 index 00000000000..825a55865be --- /dev/null +++ b/code/game/objects/items/weapons/syndie_uplink.dm @@ -0,0 +1,38 @@ +/*/obj/item/weapon/syndicate_uplink + name = "station bounced radio" + desc = "Remain silent about this..." + icon = 'icons/obj/radio.dmi' + icon_state = "radio" + var/temp = null + var/uses = 10.0 + var/selfdestruct = 0.0 + var/traitor_frequency = 0.0 + var/mob/currentUser = null + var/obj/item/device/radio/origradio = null + flags = CONDUCT | ONBELT + w_class = 2.0 + item_state = "radio" + throw_speed = 4 + throw_range = 20 + m_amt = 100 + origin_tech = "magnets=2;syndicate=3"*/ + +/obj/item/weapon/SWF_uplink + name = "station-bounced radio" + desc = "used to comunicate it appears." + icon = 'icons/obj/radio.dmi' + icon_state = "radio" + var/temp = null + var/uses = 4.0 + var/selfdestruct = 0.0 + var/traitor_frequency = 0.0 + var/obj/item/device/radio/origradio = null + flags = CONDUCT + slot_flags = SLOT_BELT + item_state = "radio" + throwforce = 5 + w_class = 2.0 + throw_speed = 4 + throw_range = 20 + m_amt = 100 + origin_tech = "magnets=1" \ No newline at end of file diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 03a07d4a2d1..560d5c2e754 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -6,7 +6,43 @@ * Rack Parts */ +/obj/item/weapon/table_parts + name = "table parts" + desc = "Parts of a table. Poor table." + gender = PLURAL + icon = 'icons/obj/items.dmi' + icon_state = "table_parts" + m_amt = 3750 + flags = CONDUCT + attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") +/obj/item/weapon/table_parts/reinforced + name = "reinforced table parts" + desc = "Hard table parts. Well...harder..." + icon = 'icons/obj/items.dmi' + icon_state = "reinf_tableparts" + m_amt = 7500 + flags = CONDUCT + +/obj/item/weapon/table_parts/wood + name = "wooden table parts" + desc = "Keep away from fire." + icon_state = "wood_tableparts" + flags = null + +/obj/item/weapon/table_parts/glass + name = "glass table parts" + desc = "fragile!" + icon_state = "glass_tableparts" + flags = null + +/obj/item/weapon/rack_parts + name = "rack parts" + desc = "Parts of a rack." + icon = 'icons/obj/items.dmi' + icon_state = "rack_parts" + flags = CONDUCT + m_amt = 3750 /* * Table Parts diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm index 284be5284c3..6ab0138391e 100644 --- a/code/game/objects/items/weapons/wires.dm +++ b/code/game/objects/items/weapons/wires.dm @@ -1,5 +1,21 @@ // WIRES +/obj/item/weapon/wire + desc = "This is just a simple piece of regular insulated wire." + name = "wire" + icon = 'icons/obj/power.dmi' + icon_state = "item_wire" + var/amount = 1.0 + var/laying = 0.0 + var/old_lay = null + m_amt = 40 + attack_verb = list("whipped", "lashed", "disciplined", "tickled") + + suicide_act(mob/user) + viewers(user) << "\red [user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." + return (OXYLOSS) + + /obj/item/weapon/wire/proc/update() if (src.amount > 1) src.icon_state = "spool_wire" diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm new file mode 100644 index 00000000000..fc9a0d4584c --- /dev/null +++ b/code/game/objects/structures/misc.dm @@ -0,0 +1,59 @@ +//MISC structures- if it is less than 100 lines and doesn't fit in a category, toss it in here! + +/*CURRENT CONTENTS: + NT recruitment signpost + Ninja Teleportation Console +*/ + +/obj/structure/signpost + icon = 'icons/obj/stationobjs.dmi' + icon_state = "signpost" + anchored = 1 + density = 1 + + attackby(obj/item/weapon/W as obj, mob/user as mob, params) + return attack_hand(user) + + attack_hand(mob/user as mob) + user << "Civilians: NT is recruiting! Please head SOUTH to the NT Recruitment office to join the station's crew!" + +/obj/structure/ninjatele + + name = "Long-Distance Teleportation Console" + desc = "A console used to send a Spider Clan operative long distances rapidly." + icon = 'icons/obj/ninjaobjects.dmi' + icon_state = "teleconsole" + anchored = 1 + density = 0 + + attackby(obj/item/weapon/W as obj, mob/user as mob, params) + + return attack_hand(user) + + + attack_hand(mob/user as mob) + + + if (user.mind.special_role=="Ninja") + switch(alert("Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)",,"Yes","No")) + + if("Yes") + if(user.z != src.z) return + + user.loc.loc.Exited(user) + user.loc = pick(carplist) // In the future, possibly make specific NinjaTele landmarks, and give him an option to teleport to North/South/East/West of SS13 instead of just hijacking a carpspawn. + + + playsound(user.loc, 'sound/effects/phasein.ogg', 25, 1) + playsound(user.loc, 'sound/effects/sparks2.ogg', 50, 1) + anim(user.loc,user,'icons/mob/mob.dmi',,"phasein",,user.dir) + + user <<"\blue VOID-Shift translocation successful" + + if("No") + + user <<"\red Process aborted!" + + return + else + user<< "\red FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked." \ No newline at end of file diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index df21cfa90d6..d70035bdc84 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -1,4 +1,4 @@ -//Analyzer, pestkillers, weedkillers, nutrients, hatchets, cutters. +//Analyzer, pestkillers, weedkillers, nutrients, hatchets, cutters, Rapid-Seed-Producer (RSP), corn cob. /obj/item/weapon/wirecutters/clippers name = "plant clippers" @@ -263,21 +263,17 @@ icon_state = "hatchet" flags = CONDUCT force = 12.0 + sharp = 1 + edge = 1 w_class = 2.0 throwforce = 15.0 throw_speed = 4 throw_range = 4 - sharp = 1 - edge = 1 - m_amt = 10000 + m_amt = 15000 origin_tech = "materials=2;combat=1" attack_verb = list("chopped", "torn", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' -/obj/item/weapon/hatchet/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - -//If it's a hatchet it goes here. I guess /obj/item/weapon/hatchet/unathiknife name = "duelling knife" desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." @@ -300,13 +296,16 @@ desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." force = 13.0 throwforce = 5.0 - throw_speed = 1 + sharp = 1 + edge = 1 + throw_speed = 2 throw_range = 3 w_class = 4.0 flags = NOSHIELD slot_flags = SLOT_BACK origin_tech = "materials=2;combat=2" attack_verb = list("chopped", "sliced", "cut", "reaped") + hitsound = 'sound/weapons/bladeslice.ogg' /obj/item/weapon/scythe/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return @@ -314,4 +313,38 @@ for(var/obj/effect/plant/B in orange(A,1)) if(prob(80)) B.die_off(1) - del A \ No newline at end of file + qdel(A) + +/obj/item/weapon/rsp + name = "\improper Rapid-Seed-Producer (RSP)" + desc = "A device used to rapidly deploy seeds." + icon = 'icons/obj/items.dmi' + icon_state = "rcd" + opacity = 0 + density = 0 + anchored = 0.0 + var/matter = 0 + var/mode = 1 + w_class = 3.0 + +/obj/item/weapon/bananapeel + name = "banana peel" + desc = "A peel from a banana." + icon = 'icons/obj/items.dmi' + icon_state = "banana_peel" + item_state = "banana_peel" + w_class = 1.0 + throwforce = 0 + throw_speed = 4 + throw_range = 20 + +/obj/item/weapon/corncob + name = "corn cob" + desc = "A reminder of meals gone by." + icon = 'icons/obj/harvest.dmi' + icon_state = "corncob" + item_state = "corncob" + w_class = 1.0 + throwforce = 0 + throw_speed = 4 + throw_range = 20 diff --git a/paradise.dme b/paradise.dme index e98f8cf6e2f..1bf34f25e1d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -189,9 +189,7 @@ #include "code\datums\wires\taperecorder.dm" #include "code\datums\wires\vending.dm" #include "code\datums\wires\wires.dm" -#include "code\defines\obj.dm" #include "code\defines\vox_sounds.dm" -#include "code\defines\obj\weapon.dm" #include "code\defines\procs\admin.dm" #include "code\defines\procs\announce.dm" #include "code\defines\procs\AStar.dm" @@ -537,6 +535,7 @@ #include "code\game\objects\effects\aliens.dm" #include "code\game\objects\effects\anomalies.dm" #include "code\game\objects\effects\bump_teleporter.dm" +#include "code\game\objects\effects\datacore-effect.dm" #include "code\game\objects\effects\effect_system.dm" #include "code\game\objects\effects\explosion_particles.dm" #include "code\game\objects\effects\forcefields.dm" @@ -576,6 +575,7 @@ #include "code\game\objects\items\documents.dm" #include "code\game\objects\items\flag.dm" #include "code\game\objects\items\latexballoon.dm" +#include "code\game\objects\items\misc.dm" #include "code\game\objects\items\policetape.dm" #include "code\game\objects\items\random_items.dm" #include "code\game\objects\items\shooting_range.dm" @@ -644,6 +644,7 @@ #include "code\game\objects\items\weapons\alien_specific.dm" #include "code\game\objects\items\weapons\cards_ids.dm" #include "code\game\objects\items\weapons\cash.dm" +#include "code\game\objects\items\weapons\caution.dm" #include "code\game\objects\items\weapons\chrono_eraser.dm" #include "code\game\objects\items\weapons\cigs_lighters.dm" #include "code\game\objects\items\weapons\clown_items.dm" @@ -651,6 +652,7 @@ #include "code\game\objects\items\weapons\courtroom.dm" #include "code\game\objects\items\weapons\defib.dm" #include "code\game\objects\items\weapons\dice.dm" +#include "code\game\objects\items\weapons\disks.dm" #include "code\game\objects\items\weapons\dna_injector.dm" #include "code\game\objects\items\weapons\dnascrambler.dm" #include "code\game\objects\items\weapons\explosives.dm" @@ -660,9 +662,13 @@ #include "code\game\objects\items\weapons\gift_wrappaper.dm" #include "code\game\objects\items\weapons\grenades.dm" #include "code\game\objects\items\weapons\handcuffs.dm" +#include "code\game\objects\items\weapons\holosign.dm" #include "code\game\objects\items\weapons\hydroponics.dm" #include "code\game\objects\items\weapons\kitchen.dm" +#include "code\game\objects\items\weapons\legcuffs.dm" #include "code\game\objects\items\weapons\manuals.dm" +#include "code\game\objects\items\weapons\misc.dm" +#include "code\game\objects\items\weapons\module.dm" #include "code\game\objects\items\weapons\mop.dm" #include "code\game\objects\items\weapons\paint.dm" #include "code\game\objects\items\weapons\paiwire.dm" @@ -673,9 +679,13 @@ #include "code\game\objects\items\weapons\shards.dm" #include "code\game\objects\items\weapons\shields.dm" #include "code\game\objects\items\weapons\signs.dm" +#include "code\game\objects\items\weapons\soap.dm" +#include "code\game\objects\items\weapons\staff.dm" +#include "code\game\objects\items\weapons\stock_parts.dm" #include "code\game\objects\items\weapons\stunbaton.dm" #include "code\game\objects\items\weapons\surgery_tools.dm" #include "code\game\objects\items\weapons\swords_axes_etc.dm" +#include "code\game\objects\items\weapons\syndie_uplink.dm" #include "code\game\objects\items\weapons\table_rack_parts.dm" #include "code\game\objects\items\weapons\teleportation.dm" #include "code\game\objects\items\weapons\tools.dm" @@ -747,6 +757,7 @@ #include "code\game\objects\structures\lattice.dm" #include "code\game\objects\structures\mineral_doors.dm" #include "code\game\objects\structures\mirror.dm" +#include "code\game\objects\structures\misc.dm" #include "code\game\objects\structures\mop_bucket.dm" #include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\musician.dm"