From 595f24bd1bfe8719f875d750e8ac90e268af6b9a Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sat, 9 May 2015 15:57:06 -0700 Subject: [PATCH 1/2] Cleanup /defines/ folder. This commit removes code/defines/obj.dm and code/defines/obj/weapon.dm. These files were only kept for legacy compatibility and do not fit into the tree system at all. It doesn't even make sense since the base defines are all that were in these, the actual code for the items was in the right file. Any new ports that use this file on a different codebase should be sorted into the tree system anyways, new files if necessary. A giant defines file is just wasting space and searching effort. --- code/defines/obj/weapon.dm | 1035 ----------------- .../objects/effects/datacore-effect.dm} | 604 ++++------ code/game/objects/effects/misc.dm | 88 +- code/game/objects/items/misc.dm | 24 + code/game/objects/items/weapons/caution.dm | 66 ++ .../game/objects/items/weapons/clown_items.dm | 27 + code/game/objects/items/weapons/disks.dm | 15 + code/game/objects/items/weapons/holosign.dm | 48 + code/game/objects/items/weapons/legcuffs.dm | 210 ++++ code/game/objects/items/weapons/misc.dm | 136 +++ code/game/objects/items/weapons/module.dm | 32 + code/game/objects/items/weapons/soap.dm | 28 + code/game/objects/items/weapons/staff.dm | 31 + .../game/objects/items/weapons/stock_parts.dm | 238 ++++ .../objects/items/weapons/syndie_uplink.dm | 38 + .../objects/items/weapons/table_rack_parts.dm | 36 + code/game/objects/items/weapons/wires.dm | 16 + code/game/objects/structures/misc.dm | 59 + code/modules/hydroponics/hydro_tools.dm | 57 +- paradise.dme | 15 +- 20 files changed, 1359 insertions(+), 1444 deletions(-) delete mode 100644 code/defines/obj/weapon.dm rename code/{defines/obj.dm => game/objects/effects/datacore-effect.dm} (59%) create mode 100644 code/game/objects/items/misc.dm create mode 100644 code/game/objects/items/weapons/caution.dm create mode 100644 code/game/objects/items/weapons/disks.dm create mode 100644 code/game/objects/items/weapons/holosign.dm create mode 100644 code/game/objects/items/weapons/legcuffs.dm create mode 100644 code/game/objects/items/weapons/misc.dm create mode 100644 code/game/objects/items/weapons/module.dm create mode 100644 code/game/objects/items/weapons/soap.dm create mode 100644 code/game/objects/items/weapons/staff.dm create mode 100644 code/game/objects/items/weapons/stock_parts.dm create mode 100644 code/game/objects/items/weapons/syndie_uplink.dm create mode 100644 code/game/objects/structures/misc.dm diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm deleted file mode 100644 index b873e56fa3a..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/plantsegment)) - for(var/obj/effect/plantsegment/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/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 70cf1f9cf4b..1c553276c9b 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_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" @@ -346,21 +346,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." @@ -374,18 +370,55 @@ 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 if(istype(A, /obj/effect/plantsegment)) for(var/obj/effect/plantsegment/B in orange(A,1)) if(prob(80)) - del B - del A \ No newline at end of file + qdel(B) + 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 \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 26da97bd657..e31faf35fd6 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" @@ -540,6 +538,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" @@ -579,6 +578,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" @@ -647,6 +647,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" @@ -654,6 +655,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" @@ -663,9 +665,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" @@ -676,9 +682,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" @@ -750,6 +760,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" From e7ec8a7e2d775ea0203e35975e2108249b3f995c Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 10 May 2015 14:21:44 -0700 Subject: [PATCH 2/2] Compile-fix --- code/modules/hydroponics/trays/tray_tools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index afb32931c2e..d70035bdc84 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -313,7 +313,7 @@ for(var/obj/effect/plant/B in orange(A,1)) if(prob(80)) B.die_off(1) - qdel A + qdel(A) /obj/item/weapon/rsp name = "\improper Rapid-Seed-Producer (RSP)"