From 9ca449bf7a2253dd57f572384ebde47df0f3a01f Mon Sep 17 00:00:00 2001 From: "mport2004@gmail.com" Date: Thu, 27 Oct 2011 08:37:40 +0000 Subject: [PATCH] New WIP TK system added. To activate your TK click the throw button with an empty hand. This will bring up a tkgrab item. Click on a non-anchored (currently) non mob Object to select it as your "focus". Once a focus is selected so long as you are in range of the focus you can now click somewhere to throw the focus at the target. To quit using TK just drop the tkgrab item. The captains laser, aegun, and xbow recharge a bit slower now, they recharged so fast that you almost never had to stop shooting. Cleaned up the cyborg_modules file Medical and Security borgs have a hud item. Medical bots bottles hold 60 of their chemical (up from 30). Medical bots now have three syringes that are labeled "Syringe-(Inaprovaline)", "Syringe-(Anti-Toxin)", and "Syringe-(Mixed)". Medical bots now have two kelotane/dexalin pills (up from 1/ea). Engineering bots got a new RCD thats just like the old one but the code is cleaner and meant for borgs only. Husks brains can no longer be cut out. Healing hands code has been removed till whoever wants to finish it adds it to a place that is NOT the base click procs. Added veyveyr's nuke team weapon. Its more or less the Uzi with a new icon. Nuke teams also got a bit of extra ammo and a few more pinpointers/eguns in their locker. Glass doors will not set opacity to 1 after they close. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2431 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/door.dm | 2 +- code/defines/procs/gamehelpers.dm | 7 +- code/game/atom_procs.dm | 126 +++--- code/game/dna.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 5 +- code/game/machinery/doors/airlock.dm | 6 + code/game/machinery/doors/door.dm | 4 +- code/game/machinery/rechargestation.dm | 13 +- code/game/objects/closets/nuclear.dm | 32 +- code/game/objects/items/robot_items.dm | 294 ++++++++++++ code/game/objects/items/tk_grab.dm | 88 ++++ code/game/objects/items/weapons/RCD.dm | 130 ++---- .../objects/items/weapons/surgery_tools.dm | 2 + code/game/objects/storage/storage.dm | 8 +- code/game/throwing.dm | 10 + code/modules/chemical/Chemistry-Holder.dm | 5 +- code/modules/chemical/Chemistry-Tools.dm | 53 --- code/modules/mob/living/carbon/human/human.dm | 2 +- .../living/carbon/human/human_attackhand.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 2 +- code/modules/mob/living/silicon/robot/life.dm | 6 +- .../modules/mob/living/silicon/robot/robot.dm | 18 +- .../mob/living/silicon/robot/robot_modules.dm | 417 ++++++++---------- code/modules/projectiles/ammunition/boxes.dm | 22 +- .../modules/projectiles/ammunition/bullets.dm | 6 + code/modules/projectiles/guns/energy/laser.dm | 6 +- .../projectiles/guns/energy/nuclear.dm | 2 +- code/modules/projectiles/guns/energy/stun.dm | 2 +- code/modules/projectiles/guns/projectile.dm | 15 +- .../projectiles/guns/projectile/automatic.dm | 50 ++- .../modules/projectiles/projectile/bullets.dm | 1 - code/setup.dm | 27 +- html/changelog.html | 9 + icons/mob/items_lefthand.dmi | Bin 100778 -> 101330 bytes icons/mob/items_righthand.dmi | Bin 101986 -> 102581 bytes icons/obj/ammo.dmi | Bin 7633 -> 8106 bytes icons/obj/gun.dmi | Bin 35037 -> 35608 bytes sound/weapons/Gunshot_smg.ogg | Bin 0 -> 8789 bytes sound/weapons/smg_empty_alarm.ogg | Bin 0 -> 54294 bytes tgstation.dme | 2 + 40 files changed, 884 insertions(+), 492 deletions(-) create mode 100644 code/game/objects/items/robot_items.dm create mode 100644 code/game/objects/items/tk_grab.dm create mode 100644 sound/weapons/Gunshot_smg.ogg create mode 100644 sound/weapons/smg_empty_alarm.ogg diff --git a/code/defines/obj/door.dm b/code/defines/obj/door.dm index 6bd9856bb1..71d2ebd57b 100644 --- a/code/defines/obj/door.dm +++ b/code/defines/obj/door.dm @@ -12,7 +12,7 @@ var/operating = 0 anchored = 1 var/autoclose = 0 - + var/glass = 0 /obj/machinery/door/firedoor diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm index 6e16c91e4f..3ca6b5b89b 100644 --- a/code/defines/procs/gamehelpers.dm +++ b/code/defines/procs/gamehelpers.dm @@ -28,9 +28,10 @@ /proc/in_range(source, user) if(get_dist(source, user) <= 1) return 1 + /* else//TK TODO: remove this if(istype(user, /mob/living/carbon)) - if(user:mutations & PORTALS && get_dist(source, user) <= 7) + if(user:mutations & TK && get_dist(source, user) <= 7) if(user:equipped()) return 0 var/X = source:x var/Y = source:y @@ -48,9 +49,7 @@ flick("empdisable",O) spawn(5) del(O) - - - return 1 + return 1*/ return 0 //not in range and not telekinetic diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index ba5ab8d69f..c6e11693fd 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -579,7 +579,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl else return - // ------- 1 TILE AWAY OR TELEKINETIC ------- + // ------- 1 TILE AWAY ------- var/t5 = in_range(src, usr) || src.loc == usr // ------- AI CAN CLICK ANYTHING ------- @@ -729,64 +729,6 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl // ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND ------- if (istype(usr, /mob/living/carbon/human)) // ------- YOU ARE HUMAN ------- - if (usr:a_intent == "help") - // ------- YOU HAVE THE HELP INTENT SELECTED ------- - if(istype(src, /mob/living/carbon)) - // ------- YOUR TARGET IS LIVING CARBON CREATURE (NOT AI OR CYBORG OR SIMPLE ANIMAL) ------- - var/mob/living/carbon/C = src - if(usr:mutations & HEAL) - // ------- YOU ARE HUMAN, WITH THE HELP INTENT TARGETING A HUMAN AND HAVE THE 'HEAT' GENETIC MUTATION ------- - - if(C.stat != 2) - // ------- THE PERSON YOU'RE TOUCHING IS NOT DEAD ------- - - var/t_him = "it" - if (src.gender == MALE) - t_him = "his" - else if (src.gender == FEMALE) - t_him = "her" - var/u_him = "it" - if (usr.gender == MALE) - t_him = "him" - else if (usr.gender == FEMALE) - t_him = "her" - - if(src != usr) - usr.visible_message( \ - "\blue [usr] places [u_him] palms on [src], healing [t_him]!", \ - "\blue You place your palms on [src] and heal [t_him].", \ - ) - else - usr.visible_message( \ - "\blue [usr] places [u_him] palms on [u_him]self and heals.", \ - "\blue You place your palms on yourself and heal.", \ - ) - - C.oxyloss = max(0, C.oxyloss-25) - C.toxloss = max(0, C.toxloss-25) - - if(istype(C, /mob/living/carbon/human)) - // ------- YOUR TARGET IS HUMAN ------- - var/mob/living/carbon/human/H = C - var/datum/organ/external/affecting = H.get_organ(check_zone(usr:zone_sel:selecting)) - if(affecting && affecting.heal_damage(25, 25)) - H.UpdateDamageIcon() - else - C.heal_organ_damage(25, 25) - C.cloneloss = max(0, C.cloneloss-25) - C.stunned = max(0, C.stunned-5) - C.paralysis = max(0, C.paralysis-5) - C.stuttering = max(0, C.stuttering-5) - C.drowsyness = max(0, C.drowsyness-5) - C.weakened = max(0, C.weakened-5) - usr:nutrition -= rand(1,10) - usr.next_move = world.time + 6 - else - // ------- PERSON YOU'RE TOUCHING IS ALREADY DEAD ------- - usr << "\red [src] is dead and can't be healed." - return - - // ------- IF YOU DON'T HAVE THE SILLY ABILITY ABOVE OR FAIL ON ANY OTHER CHECK, THEN YOU'RE CLICKING ON SOMETHING WITH AN EMPTY HAND. ATTACK_HAND IT IS THEN ------- src.attack_hand(usr, usr.hand) else // ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED ------- @@ -906,3 +848,69 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl /obj/proc/process() processing_objects.Remove(src) return 0 + + +/*Really why was this in the click proc of all the places you could put it + if (usr:a_intent == "help") + // ------- YOU HAVE THE HELP INTENT SELECTED ------- + if(istype(src, /mob/living/carbon)) + // ------- YOUR TARGET IS LIVING CARBON CREATURE (NOT AI OR CYBORG OR SIMPLE ANIMAL) ------- + var/mob/living/carbon/C = src + if(usr:mutations & HEAL) + // ------- YOU ARE HUMAN, WITH THE HELP INTENT TARGETING A HUMAN AND HAVE THE 'HEAT' GENETIC MUTATION ------- + + if(C.stat != 2) + // ------- THE PERSON YOU'RE TOUCHING IS NOT DEAD ------- + + var/t_him = "it" + if (src.gender == MALE) + t_him = "his" + else if (src.gender == FEMALE) + t_him = "her" + var/u_him = "it" + if (usr.gender == MALE) + t_him = "him" + else if (usr.gender == FEMALE) + t_him = "her" + + if(src != usr) + usr.visible_message( \ + "\blue [usr] places [u_him] palms on [src], healing [t_him]!", \ + "\blue You place your palms on [src] and heal [t_him].", \ + ) + else + usr.visible_message( \ + "\blue [usr] places [u_him] palms on [u_him]self and heals.", \ + "\blue You place your palms on yourself and heal.", \ + ) + + C.oxyloss = max(0, C.oxyloss-25) + C.toxloss = max(0, C.toxloss-25) + + if(istype(C, /mob/living/carbon/human)) + // ------- YOUR TARGET IS HUMAN ------- + var/mob/living/carbon/human/H = C + var/datum/organ/external/affecting = H.get_organ(check_zone(usr:zone_sel:selecting)) + if(affecting && affecting.heal_damage(25, 25)) + H.UpdateDamageIcon() + else + C.heal_organ_damage(25, 25) + C.cloneloss = max(0, C.cloneloss-25) + C.stunned = max(0, C.stunned-5) + C.paralysis = max(0, C.paralysis-5) + C.stuttering = max(0, C.stuttering-5) + C.drowsyness = max(0, C.drowsyness-5) + C.weakened = max(0, C.weakened-5) + usr:nutrition -= rand(1,10) + usr.next_move = world.time + 6 + else + // ------- PERSON YOU'RE TOUCHING IS ALREADY DEAD ------- + usr << "\red [src] is dead and can't be healed." + return + + // ------- IF YOU DON'T HAVE THE SILLY ABILITY ABOVE OR FAIL ON ANY OTHER CHECK, THEN YOU'RE CLICKING ON SOMETHING WITH AN EMPTY HAND. ATTACK_HAND IT IS THEN ------- +*/ + + + + diff --git a/code/game/dna.dm b/code/game/dna.dm index 2aa3dd8c51..9966c04d56 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -357,7 +357,7 @@ if (isblockon(getblock(M.dna.struc_enzymes, TELEBLOCK,3),12)) if(inj || prob(15)) M << "\blue You feel smarter." - M.mutations |= PORTALS + M.mutations |= TK if (isblockon(getblock(M.dna.struc_enzymes, DEAFBLOCK,3),13)) M.sdisabilities |= 4 M.ear_deaf = 1 diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 0c9b6ce8d5..dc33f5237d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -221,9 +221,10 @@ synd_mob.equip_if_possible(new /obj/item/clothing/head/helmet/swat(synd_mob), synd_mob.slot_head) synd_mob.equip_if_possible(new /obj/item/weapon/card/id/syndicate(synd_mob), synd_mob.slot_wear_id) synd_mob.equip_if_possible(new /obj/item/weapon/storage/backpack(synd_mob), synd_mob.slot_back) - synd_mob.equip_if_possible(new /obj/item/ammo_magazine/c45(synd_mob), synd_mob.slot_in_backpack) + synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack) + synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack) synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack) - synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/mini_uzi(synd_mob), synd_mob.slot_belt) + synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt) var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob) E.imp_in = synd_mob E.implanted = 1 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9ac7e268a6..b54a50b32d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -114,6 +114,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. icon = 'Doorglass.dmi' opacity = 0 doortype = 7 + glass = 1 /obj/machinery/door/airlock/centcom name = "Airlock" @@ -132,6 +133,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. icon = 'Door2x1glassfull.dmi' opacity = 0 doortype = 10 + glass = 1 /obj/machinery/door/airlock/freezer name = "Freezer Airlock" @@ -156,24 +158,28 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. icon = 'Doorcomglass.dmi' opacity = 0 doortype = 14 + glass = 1 /obj/machinery/door/airlock/glass_engineering name = "Maintenance Hatch" icon = 'Doorengglass.dmi' opacity = 0 doortype = 15 + glass = 1 /obj/machinery/door/airlock/glass_security name = "Maintenance Hatch" icon = 'Doorsecglass.dmi' opacity = 0 doortype = 16 + glass = 1 /obj/machinery/door/airlock/glass_medical name = "Maintenance Hatch" icon = 'doormedglass.dmi' opacity = 0 doortype = 17 + glass = 1 /* About the new airlock wires panel: diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fc73044345..5c5584522b 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -289,7 +289,7 @@ /obj/machinery/door/proc/close() if(density) return 1 - if (src.operating) + if(src.operating) return src.operating = 1 @@ -299,7 +299,7 @@ sleep(10) update_icon() - if (src.visible && (!istype(src, /obj/machinery/door/airlock/glass))) + if(src.visible && (!src.glass)) src.sd_SetOpacity(1) if(operating == 1) operating = 0 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 2315111a03..8ff52bdddd 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -82,9 +82,6 @@ // ^ makes sinle list of active (R.contents) and inactive modules (R.module.modules) for(var/obj/O in um) // Engineering - if(istype(O,/obj/item/weapon/rcd)) - if(O:matter < 30) - O:matter += 1 if(istype(O,/obj/item/stack/sheet/metal) || istype(O,/obj/item/stack/sheet/rglass) || istype(O,/obj/item/weapon/cable_coil)) if(O:amount < 50) O:amount += 1 @@ -104,12 +101,10 @@ if(O.reagents.get_reagent_amount("enzyme") < 50) O.reagents.add_reagent("enzyme", 1) //Medical - if(istype(O,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline)) - if(O.reagents.get_reagent_amount("inaprovaline") < 30) - O.reagents.add_reagent("inaprovaline", 1) - if(istype(O,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin)) - if(O.reagents.get_reagent_amount("anti_toxin") < 30) - O.reagents.add_reagent("anti_toxin", 1) + if(istype(O,/obj/item/weapon/reagent_containers/glass/bottle/robot)) + var/obj/item/weapon/reagent_containers/glass/bottle/robot/B = O + if(B.reagent && (B.reagents.get_reagent_amount(B.reagent) < B.volume)) + B.reagents.add_reagent(B.reagent, 2) if(R) if(R.module) diff --git a/code/game/objects/closets/nuclear.dm b/code/game/objects/closets/nuclear.dm index 4deb2bb8f3..78472fd457 100644 --- a/code/game/objects/closets/nuclear.dm +++ b/code/game/objects/closets/nuclear.dm @@ -1,18 +1,24 @@ /obj/structure/closet/syndicate/nuclear/New() ..() sleep(2) - new /obj/item/ammo_magazine/c45( src ) - new /obj/item/ammo_magazine/c45( src ) - new /obj/item/ammo_magazine/c45( src ) - new /obj/item/weapon/storage/handcuff_kit( src ) - new /obj/item/weapon/storage/flashbang_kit( src ) - new /obj/item/weapon/gun/energy/gun( src ) - new /obj/item/weapon/gun/energy/gun( src ) - new /obj/item/weapon/gun/energy/gun( src ) - new /obj/item/weapon/pinpointer( src ) - new /obj/item/weapon/pinpointer( src ) - new /obj/item/weapon/pinpointer( src ) - new /obj/item/device/pda/syndicate( src ) - var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink( src ) + new /obj/item/ammo_magazine/a12mm(src) + new /obj/item/ammo_magazine/a12mm(src) + new /obj/item/ammo_magazine/a12mm(src) + new /obj/item/ammo_magazine/a12mm(src) + new /obj/item/ammo_magazine/a12mm(src) + new /obj/item/weapon/storage/handcuff_kit(src) + new /obj/item/weapon/storage/flashbang_kit(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/pinpointer(src) + new /obj/item/weapon/pinpointer(src) + new /obj/item/weapon/pinpointer(src) + new /obj/item/weapon/pinpointer(src) + new /obj/item/weapon/pinpointer(src) + new /obj/item/device/pda/syndicate(src) + var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink(src) U.uses = 40 return diff --git a/code/game/objects/items/robot_items.dm b/code/game/objects/items/robot_items.dm new file mode 100644 index 0000000000..035fe2002a --- /dev/null +++ b/code/game/objects/items/robot_items.dm @@ -0,0 +1,294 @@ +/********************************************************************** + Cyborg Spec Items +***********************************************************************/ +//Might want to move this into several files later but for now it works here +/obj/item/borg/stun + name = "Electrified Arm" + icon = 'decals.dmi' + icon_state = "shock" + + attack(mob/M as mob, mob/living/silicon/robot/user as mob) + M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") + user.cell.charge -= 30 + if (M.weakened < 5) + M.weakened = 5 + if (M.stuttering < 5) + M.stuttering = 5 + if (M.stunned < 5) + M.stunned = 5 + for(var/mob/O in viewers(M, null)) + if (O.client) + O.show_message("\red [user] has prodded [M] with an electrically-charged arm!", 1, "\red You hear someone fall", 2) + + + +/********************************************************************** + HUD/SIGHT things +***********************************************************************/ +/obj/item/borg/sight + icon = 'decals.dmi' + icon_state = "securearea" + var/sight_mode = null + + +/obj/item/borg/sight/xray + name = "X-ray Vision" + sight_mode = BORGXRAY + + +/obj/item/borg/sight/thermal + name = "Thermal Vision" + sight_mode = BORGTHERM + + +/obj/item/borg/sight/meson + name = "Meson Vision" + sight_mode = BORGMESON + + +/obj/item/borg/sight/hud + name = "Hud" + var/obj/item/clothing/glasses/hud/hud = null + + +/obj/item/borg/sight/hud/med + name = "Medical Hud" + + + New() + ..() + hud = new /obj/item/clothing/glasses/hud/health(src) + return + + +/obj/item/borg/sight/hud/sec + name = "Security Hud" + + + New() + ..() + hud = new /obj/item/clothing/glasses/hud/security(src) + return + + + +/********************************************************************** + Chemical things +***********************************************************************/ + +/obj/item/weapon/reagent_containers/glass/bottle/robot + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(5,10,15) + flags = FPRINT | TABLEPASS | OPENCONTAINER + volume = 60 + var + reagent = "" + + +/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline + name = "internal inaprovaline bottle" + desc = "A small bottle. Contains inaprovaline - used to stabilize patients." + icon = 'chemical.dmi' + icon_state = "bottle16" + reagent = "inaprovaline" + + New() + ..() + reagents.add_reagent("inaprovaline", 60) + return + + +/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin + name = "internal anti-toxin bottle" + desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug." + icon = 'chemical.dmi' + icon_state = "bottle17" + reagent = "anti_toxin" + + New() + ..() + reagents.add_reagent("anti_toxin", 60) + return + + + +/obj/item/weapon/reagent_containers/robodropper + name = "Industrial Dropper" + desc = "A larger dropper. Transfers 10 units." + icon = 'chemical.dmi' + icon_state = "dropper0" + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10) + volume = 10 + var/filled = 0 + + afterattack(obj/target, mob/user , flag) + if(!target.reagents) return + + if(filled) + + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "\red [target] is full." + return + + if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food)) //You can inject humans and food but you cant remove the shit. + user << "\red You cannot directly fill this object." + return + + if(ismob(target)) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] drips something onto []!", user, target), 1) + src.reagents.reaction(target, TOUCH) + + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "\blue You transfer [trans] units of the solution." + if (src.reagents.total_volume<=0) + filled = 0 + icon_state = "dropper[filled]" + + else + + if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) + user << "\red You cannot directly remove reagents from [target]." + return + + if(!target.reagents.total_volume) + user << "\red [target] is empty." + return + + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) + + user << "\blue You fill the dropper with [trans] units of the solution." + + filled = 1 + icon_state = "dropper[filled]" + + return + + +/********************************************************************** + Chemical things +***********************************************************************/ +/obj/item/borg/rcd + name = "robotic rapid-construction-device" + desc = "A device used to rapidly build walls/floor." + icon = 'items.dmi' + icon_state = "rcd" + flags = FPRINT | TABLEPASS| CONDUCT + force = 5.0 + w_class = 3.0 + var + datum/effect/effect/system/spark_spread/spark_system + working = 0 + mode = 1 + + + New() + src.spark_system = new /datum/effect/effect/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + return + + + proc/activate() + spark_system.set_up(5, 0, src) + src.spark_system.start() + playsound(src.loc, 'Deconstruct.ogg', 50, 1) + + + attack_self(mob/user as mob) + //Change the mode + playsound(src.loc, 'pop.ogg', 50, 0) + if(mode == 1) + mode = 2 + user << "Changed mode to 'Airlock'" + src.spark_system.start() + return + if(mode == 2) + mode = 3 + user << "Changed mode to 'Deconstruct'" + src.spark_system.start() + return + if(mode == 3) + mode = 1 + user << "Changed mode to 'Floor & Walls'" + src.spark_system.start() + return + + + afterattack(atom/A, mob/user as mob) + if(!isrobot(user)) return + if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock))) return + + var/mob/living/silicon/robot/R = user + var/obj/item/weapon/cell/cell = R.cell + if(!cell) return + + if(istype(A, /turf)) + switch(mode) + if(1) + if(istype(A, /turf/space)) + if(!cell.use(30)) return + user << "Building Floor..." + activate() + A:ReplaceWithFloor() + return + + if(istype(A, /turf/simulated/floor)) + if(!cell.use(90)) return + user << "Building Wall (3)..." + playsound(src.loc, 'click.ogg', 50, 1) + if(do_after(user, 20)) + activate() + A:ReplaceWithWall() + return + + if(2) + if(istype(A, /turf/simulated/floor)) + if(!cell.use(300)) return + user << "Building Airlock..." + playsound(src.loc, 'click.ogg', 50, 1) + if(do_after(user, 50)) + activate() + if(locate(/obj/machinery/door) in get_turf(src)) return + var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A ) + T.autoclose = 1 + return + + if(3) + if(istype(A, /turf/simulated/wall)) + if(!cell.use(150)) return + user << "Deconstructing Wall..." + playsound(src.loc, 'click.ogg', 50, 1) + if(do_after(user, 40)) + activate() + A:ReplaceWithFloor() + return + + if(istype(A, /turf/simulated/wall/r_wall)) + if(!cell.use(300)) return + user << "Deconstructing RWall..." + playsound(src.loc, 'click.ogg', 50, 1) + if(do_after(user, 60)) + activate() + A:ReplaceWithWall() + return + + if(istype(A, /turf/simulated/floor)) + user << "Deconstructing Floor..." + playsound(src.loc, 'click.ogg', 50, 1) + if(do_after(user, 50)) + activate() + A:ReplaceWithSpace() + return + + if(istype(A, /obj/machinery/door/airlock)) + user << "Deconstructing Airlock..." + playsound(src.loc, 'click.ogg', 50, 1) + if(do_after(user, 50)) + playsound(src.loc, 'click.ogg', 50, 1) + del(A) + return + return + diff --git a/code/game/objects/items/tk_grab.dm b/code/game/objects/items/tk_grab.dm new file mode 100644 index 0000000000..74bf92955d --- /dev/null +++ b/code/game/objects/items/tk_grab.dm @@ -0,0 +1,88 @@ +/obj/item/tk_grab + name = "Telekinetic Grab" + icon = 'magic.dmi'//Needs sprites + icon_state = "2" + flags = USEDELAY + //item_state = null + w_class = 10.0 + layer = 20 + + var + last_throw = 0 + obj/focus = null + mob/living/host = null + + + dropped(mob/user as mob) + del(src) + return + + + equipped(var/mob/user, var/slot) + del(src) + return + + + afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)//TODO: go over this + if(!target || !user) return + if(last_throw+4 > world.time) return + if(!host) + del(src) + return + if(!host.mutations & TK) + del(src) + return + if(!focus) + focus_object(target) + return + + if((get_dist(target, user) <= 16) && (get_dist(focus, user) <= 10)) + apply_focus_overlay() + focus.throw_at(target, 10, 1) + last_throw = world.time + return + + + proc/focus_object(var/obj/target) + if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later + if(target.anchored) return//No throwing anchored things + focus = target + update_icon() + apply_focus_overlay() + return + + + proc/apply_focus_overlay() + if(!focus) return + var/obj/effect/overlay/O = new /obj/effect/overlay(locate(focus.x,focus.y,focus.z)) + O.name = "sparkles" + O.anchored = 1 + O.density = 0 + O.layer = FLY_LAYER + O.dir = pick(cardinal) + O.icon = 'effects.dmi' + O.icon_state = "nothing" + flick("empdisable",O) + spawn(5) + del(O) + return + + + update_icon() + overlays = null + if(focus) + overlays += "[focus.icon_state]" + return + +//equip_if_possible(obj/item/W, slot, del_on_fail = 1) +/* + if(istype(user, /mob/living/carbon)) + if(user:mutations & TK && get_dist(source, user) <= 7) + if(user:equipped()) return 0 + var/X = source:x + var/Y = source:y + var/Z = source:z + spawn(0) + //I really shouldnt put this here but i dont have a better idea + +*/ \ No newline at end of file diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 69416e53c0..131cd9b099 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -36,8 +36,8 @@ RCD attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if (istype(W, /obj/item/weapon/rcd_ammo)) - if ((matter + 10) > 30) + if(istype(W, /obj/item/weapon/rcd_ammo)) + if((matter + 10) > 30) user << "The RCD cant hold any more matter." return del(W) @@ -51,17 +51,17 @@ RCD attack_self(mob/user as mob) //Change the mode playsound(src.loc, 'pop.ogg', 50, 0) - if (mode == 1) + if(mode == 1) mode = 2 user << "Changed mode to 'Airlock'" src.spark_system.start() return - if (mode == 2) + if(mode == 2) mode = 3 user << "Changed mode to 'Deconstruct'" src.spark_system.start() return - if (mode == 3) + if(mode == 3) mode = 1 user << "Changed mode to 'Floor & Walls'" src.spark_system.start() @@ -69,49 +69,39 @@ RCD afterattack(atom/A, mob/user as mob) - if (!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock))) + if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock))) return - if (istype(A, /turf) && mode == 1) - if (istype(A, /turf/space) && matter >= 1) + if(istype(A, /turf) && mode == 1) + if(istype(A, /turf/space) && matter >= 1) user << "Building Floor (1)..." - if (!disabled) + if(!disabled && matter >= 1) playsound(src.loc, 'Deconstruct.ogg', 50, 1) spark_system.set_up(5, 0, src) src.spark_system.start() A:ReplaceWithFloor() - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 30 - else - if(!matter >= 1) return - matter-- - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + matter-- + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return - if (istype(A, /turf/simulated/floor) && matter >= 3) + if(istype(A, /turf/simulated/floor) && matter >= 3) user << "Building Wall (3)..." playsound(src.loc, 'click.ogg', 50, 1) if(do_after(user, 20)) - if (!disabled) + if(!disabled && matter >= 3) spark_system.set_up(5, 0, src) src.spark_system.start() A:ReplaceWithWall() playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 90 - else - if(!matter >= 3) return - matter -= 3 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + matter -= 3 + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return - else if (istype(A, /turf/simulated/floor) && mode == 2 && matter >= 10) + else if(istype(A, /turf/simulated/floor) && mode == 2 && matter >= 10) user << "Building Airlock (10)..." playsound(src.loc, 'click.ogg', 50, 1) if(do_after(user, 50)) - if (!disabled) + if(!disabled && matter >= 10) spark_system.set_up(5, 0, src) src.spark_system.start() if(locate(/obj/machinery/door) in get_turf(src)) return @@ -122,86 +112,60 @@ RCD T.autoclose = 1 playsound(src.loc, 'Deconstruct.ogg', 50, 1) playsound(src.loc, 'sparks2.ogg', 50, 1) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 300 - else - if(!matter >= 10) return - matter -= 10 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." - + matter -= 10 + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return - else if (mode == 3 && (istype(A, /turf) || istype(A, /obj/machinery/door/airlock) ) ) - if (istype(A, /turf/simulated/wall) && matter >= 5) - user << "Deconstructing Wall (5)..." + else if(mode == 3 && (istype(A, /turf) || istype(A, /obj/machinery/door/airlock) ) ) + if(istype(A, /turf/simulated/wall) && matter >= 4) + user << "Deconstructing Wall (4)..." playsound(src.loc, 'click.ogg', 50, 1) - if(do_after(user, 50)) - if (!disabled) + if(do_after(user, 40)) + if(!disabled && matter >= 4) spark_system.set_up(5, 0, src) src.spark_system.start() A:ReplaceWithFloor() playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 150 - else - if(!matter >= 5) return - matter -= 5 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + matter -= 4 + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return - if (istype(A, /turf/simulated/wall/r_wall) && matter >= 5) - user << "Deconstructing RWall (5)..." + if(istype(A, /turf/simulated/wall/r_wall) && matter >= 8) + user << "Deconstructing RWall (8)..." playsound(src.loc, 'click.ogg', 50, 1) - if(do_after(user, 50)) - if (!disabled) + if(do_after(user, 60)) + if(!disabled && matter >= 8) spark_system.set_up(5, 0, src) src.spark_system.start() A:ReplaceWithWall() playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 150 - else - if(!matter >= 5) return - matter -= 5 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + matter -= 8 + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return - if (istype(A, /turf/simulated/floor) && matter >= 5) + if(istype(A, /turf/simulated/floor) && matter >= 5) user << "Deconstructing Floor (5)..." playsound(src.loc, 'click.ogg', 50, 1) if(do_after(user, 50)) - if (!disabled) + if(!disabled && matter >= 5) spark_system.set_up(5, 0, src) src.spark_system.start() A:ReplaceWithSpace() playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 150 - else - if(!matter >= 5) return - matter -= 5 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + matter -= 5 + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return - if (istype(A, /obj/machinery/door/airlock) && matter >= 10) + if(istype(A, /obj/machinery/door/airlock) && matter >= 10) user << "Deconstructing Airlock (10)..." playsound(src.loc, 'click.ogg', 50, 1) if(do_after(user, 50)) - if (!disabled) + if(!disabled && matter >= 10) spark_system.set_up(5, 0, src) src.spark_system.start() del(A) playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 300 - else - if(!matter >= 10) return - matter -= 10 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + matter -= 10 + user << "The RCD now holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/30 matter-units." return diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index e402842e3f..56315cf104 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -253,6 +253,8 @@ CIRCULAR SAW if(!istype(M)) return ..() + if(M.mutations & HUSK) return ..() + if((user.mutations & CLUMSY) && prob(50)) M = user return eyestab(M,user) diff --git a/code/game/objects/storage/storage.dm b/code/game/objects/storage/storage.dm index 866d9b6dde..c947e2148c 100644 --- a/code/game/objects/storage/storage.dm +++ b/code/game/objects/storage/storage.dm @@ -82,8 +82,7 @@ var/col_num = 0 var/row_count = min(7,storage_slots) -1 //For belts, the meanings of the two variables are inverted, so we don't have to declare new ones if (contents.len > 7) - if(contents.len % 7) //So having 14 items keeps them in 2 wors instead of 3 - col_num = round(contents.len / 7) // 7 is the maximum allowed column height for r_hand, l_hand and back storage items. + col_num = round((contents.len-1) / 7) // 7 is the maximum allowed column height for r_hand, l_hand and back storage items. if (src == user.l_hand) src.orient_objs(3-col_num, 3+row_count, 3, 3) else if(src == user.r_hand) @@ -148,7 +147,7 @@ sum_w_class += I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it. if(sum_w_class > max_combined_w_class) - user << "\red The [W] cannot fit in the [src]. Remove some items or add a smaller one.." + user << "\red The [src] is full, make some space." return if ( W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) @@ -172,8 +171,7 @@ var/col_num = 0 var/row_count = min(7,storage_slots) -1 if (contents.len > 7) - if(contents.len % 7) - col_num = round(contents.len / 7) // 7 is the maximum allowed column height for r_hand, l_hand and back storage items. + col_num = round((contents.len-1) / 7) // 7 is the maximum allowed column height for r_hand, l_hand and back storage items. src.orient_objs(5, 10+col_num, 5 + row_count, 10) return diff --git a/code/game/throwing.dm b/code/game/throwing.dm index 958f3bd93a..8f8780d6ec 100644 --- a/code/game/throwing.dm +++ b/code/game/throwing.dm @@ -1,4 +1,14 @@ /mob/living/carbon/proc/toggle_throw_mode() + if(!equipped())//Not holding anything + if(mutations & TK) + if (hand) + l_hand = new/obj/item/tk_grab(src) + l_hand:host = src + else + r_hand = new/obj/item/tk_grab(src) + r_hand:host = src + return + if (src.in_throw_mode) throw_mode_off() else diff --git a/code/modules/chemical/Chemistry-Holder.dm b/code/modules/chemical/Chemistry-Holder.dm index 2db703bdec..9d087001f9 100644 --- a/code/modules/chemical/Chemistry-Holder.dm +++ b/code/modules/chemical/Chemistry-Holder.dm @@ -1,5 +1,6 @@ -#define TOUCH 1 -#define INGEST 2 +var/const + TOUCH = 1 + INGEST = 2 /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 8b0cbf183c..e20a033d5d 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -734,59 +734,6 @@ return -/obj/item/weapon/reagent_containers/robodropper - name = "Industrial Dropper" - desc = "A larger dropper. Transfers 10 units." - icon = 'chemical.dmi' - icon_state = "dropper0" - amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10) - volume = 10 - var/filled = 0 - - afterattack(obj/target, mob/user , flag) - if(!target.reagents) return - - if(filled) - - if(target.reagents.total_volume >= target.reagents.maximum_volume) - user << "\red [target] is full." - return - - if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food)) //You can inject humans and food but you cant remove the shit. - user << "\red You cannot directly fill this object." - return - - if(ismob(target)) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [] drips something onto []!", user, target), 1) - src.reagents.reaction(target, TOUCH) - - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) - user << "\blue You transfer [trans] units of the solution." - if (src.reagents.total_volume<=0) - filled = 0 - icon_state = "dropper[filled]" - - else - - if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) - user << "\red You cannot directly remove reagents from [target]." - return - - if(!target.reagents.total_volume) - user << "\red [target] is empty." - return - - var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) - - user << "\blue You fill the dropper with [trans] units of the solution." - - filled = 1 - icon_state = "dropper[filled]" - - return - //////////////////////////////////////////////////////////////////////////////// /// Droppers. END //////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d0502da208..50494ff064 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -733,7 +733,7 @@ if (mutations & COLD_RESISTANCE) overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]") - if (mutations & PORTALS) + if (mutations & TK) overlays += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead[fat][!lying ? "_s" : "_l"]") if (mutations & LASER) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 44a868b80e..db1325159c 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -5,7 +5,7 @@ ..() - if(check_shields(0, M.name)) + if((M != src) && check_shields(0, M.name)) visible_message("\red [M] attempted to touch [src]!") return 0 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index bf7922a094..2b8c139c3f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -75,7 +75,7 @@ emp_act visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!") - if(check_shields(I.force, "the [I.name]")) + if((user != src) && check_shields(I.force, "the [I.name]")) return 0 var/armor = run_armor_check(affecting, "melee", "Your armor has protected you from a hit to the [hit_area].", "Your armor has softened hit to your [hit_area].") if(armor >= 2) return 0 diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index c4cea38cfc..4ca8704a73 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -33,7 +33,7 @@ stunned = max(min(stunned, 30),0) paralysis = max(min(paralysis, 30), 0) weakened = max(min(weakened, 20), 0) - sleeping = max(min(sleeping, 5), 0) + sleeping = 0 bruteloss = max(bruteloss, 0) toxloss = max(toxloss, 0) oxyloss = max(oxyloss, 0) @@ -177,6 +177,10 @@ src.see_in_dark = 8 src.see_invisible = 2 + var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src) + if(hud && hud.hud) hud.hud.process_hud(src) + + if (src.sleep) src.sleep.icon_state = text("sleep[]", src.sleeping) if (src.rest) src.rest.icon_state = text("rest[]", src.resting) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d7bd5c6d53..b43d38cce4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -736,19 +736,19 @@ module_state_1 = O O.layer = 20 contents += O - if(istype(module_state_1,/obj/item/weapon/borg/sight)) + if(istype(module_state_1,/obj/item/borg/sight)) sight_mode |= module_state_1:sight_mode else if(!module_state_2) module_state_2 = O O.layer = 20 contents += O - if(istype(module_state_2,/obj/item/weapon/borg/sight)) + if(istype(module_state_2,/obj/item/borg/sight)) sight_mode |= module_state_2:sight_mode else if(!module_state_3) module_state_3 = O O.layer = 20 contents += O - if(istype(module_state_3,/obj/item/weapon/borg/sight)) + if(istype(module_state_3,/obj/item/borg/sight)) sight_mode |= module_state_3:sight_mode else src << "You need to disable a module first!" @@ -777,7 +777,7 @@ if(isnull(module_active)) return if(module_state_1 == module_active) - if(istype(module_state_1,/obj/item/weapon/borg/sight)) + if(istype(module_state_1,/obj/item/borg/sight)) sight_mode &= ~module_state_1:sight_mode if (client) client.screen -= module_state_1 @@ -786,7 +786,7 @@ module_state_1 = null inv1.icon_state = "inv1" else if(module_state_2 == module_active) - if(istype(module_state_2,/obj/item/weapon/borg/sight)) + if(istype(module_state_2,/obj/item/borg/sight)) sight_mode &= ~module_state_2:sight_mode if (client) client.screen -= module_state_2 @@ -795,7 +795,7 @@ module_state_2 = null inv2.icon_state = "inv2" else if(module_state_3 == module_active) - if(istype(module_state_3,/obj/item/weapon/borg/sight)) + if(istype(module_state_3,/obj/item/borg/sight)) sight_mode &= ~module_state_3:sight_mode if (client) client.screen -= module_state_3 @@ -808,7 +808,7 @@ module_active = null if(module_state_1) - if(istype(module_state_1,/obj/item/weapon/borg/sight)) + if(istype(module_state_1,/obj/item/borg/sight)) sight_mode &= ~module_state_1:sight_mode if (client) client.screen -= module_state_1 @@ -816,7 +816,7 @@ module_state_1 = null inv1.icon_state = "inv1" if(module_state_2) - if(istype(module_state_2,/obj/item/weapon/borg/sight)) + if(istype(module_state_2,/obj/item/borg/sight)) sight_mode &= ~module_state_2:sight_mode if (client) client.screen -= module_state_2 @@ -824,7 +824,7 @@ module_state_2 = null inv2.icon_state = "inv2" if(module_state_3) - if(istype(module_state_3,/obj/item/weapon/borg/sight)) + if(istype(module_state_3,/obj/item/borg/sight)) sight_mode &= ~module_state_3:sight_mode if (client) client.screen -= module_state_3 diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ab90e742f4..04ae5578da 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -2,11 +2,13 @@ name = "robot module" icon = 'module.dmi' icon_state = "std_module" - w_class = 2.0 + w_class = 100.0 item_state = "electronic" flags = FPRINT|TABLEPASS | CONDUCT - var/list/modules = list() - var/obj/item/emag + var + list/modules = list() + obj/item/emag = null + emp_act(severity) if(modules) @@ -15,253 +17,220 @@ if(emag) emag.emp_act(severity) ..() + return + + + New() + src.modules += new /obj/item/device/flash(src) + src.emag = new /obj/item/toy/sword(src) + src.emag.name = "Placeholder Emag Item" + return + proc/respawn_consumable(var/mob/living/silicon/robot/R) return + + /obj/item/weapon/robot_module/standard name = "standard robot module" -/obj/item/weapon/robot_module/hydroborg - name = "hydroponics robot module" + + New() + ..() + src.modules += new /obj/item/weapon/melee/baton(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.emag = new /obj/item/weapon/melee/energy/sword(src) + return + + /obj/item/weapon/robot_module/medical name = "medical robot module" + + New() + ..() + src.modules += new /obj/item/device/healthanalyzer(src) + for(var/i = 1 to 3) + var/obj/item/weapon/reagent_containers/syringe/S = new /obj/item/weapon/reagent_containers/syringe(src) + switch(i) + if(1) S.name = "Syringe-(Inaprovaline)" + if(2) S.name = "Syringe-(Anti-Toxin)" + if(3) S.name = "Syringe-(Mixed)" + src.modules += S + + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin(src) + for(var/i = 1 to 2) + src.modules += new /obj/item/weapon/reagent_containers/pill/kelotane(src) + for(var/i = 1 to 2) + src.modules += new /obj/item/weapon/reagent_containers/pill/dexalin(src) + + src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src) + src.modules += new /obj/item/borg/sight/hud/med(src) + src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src) + return + + + respawn_consumable(var/mob/living/silicon/robot/R) + var/list/what = list ( + /obj/item/weapon/reagent_containers/pill/kelotane, + /obj/item/weapon/reagent_containers/pill/kelotane, + /obj/item/weapon/reagent_containers/pill/dexalin, + /obj/item/weapon/reagent_containers/pill/dexalin + ) + for (var/T in what) + if (!(locate(T) in src.modules)) + src.modules -= null + var/O = new T(src) + src.modules += O + if (R.emagged && !src.emag) //thanks to cyborg-900 for uncovering this + src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src) + return + + + /obj/item/weapon/robot_module/engineering name = "engineering robot module" + + New() + ..() + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/weldingtool/largetank(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/device/analyzer(src) + src.modules += new /obj/item/device/flashlight(src) + src.modules += new /obj/item/borg/rcd(src) + src.modules += new /obj/item/device/t_scanner(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/wirecutters(src) + src.modules += new /obj/item/device/multitool(src) + + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(src) + M.amount = 50 + src.modules += M + + var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass(src) + G.amount = 50 + src.modules += G + + var/obj/item/weapon/cable_coil/W = new /obj/item/weapon/cable_coil(src) + W.amount = 50 + src.modules += W + + src.modules += new /obj/item/borg/sight/meson(src) + src.emag = new /obj/item/borg/stun(src) + return + + + respawn_consumable(var/mob/living/silicon/robot/R) + var/list/what = list ( + /obj/item/stack/sheet/metal, + /obj/item/stack/sheet/rglass, + /obj/item/weapon/cable_coil, + ) + for (var/T in what) + if (!(locate(T) in src.modules)) + src.modules -= null + var/O = new T(src) + src.modules += O + O:amount = 1 + return + + + /obj/item/weapon/robot_module/security name = "security robot module" + + New() + ..() + src.modules += new /obj/item/weapon/melee/baton(src) + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) + src.modules += new /obj/item/borg/sight/hud/sec(src) + src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) + return + + + /obj/item/weapon/robot_module/janitor name = "janitorial robot module" -/* -/obj/item/weapon/robot_module/brobot - name = "brobot robot module" -*/ + + New() + ..() + src.modules += new /obj/item/weapon/cleaner(src) + src.modules += new /obj/item/weapon/mop(src) + src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) + src.emag = new /obj/item/weapon/cleaner(src) + var/datum/reagents/R = new/datum/reagents(1000) + src.emag.reagents = R + R.my_atom = src.emag + R.add_reagent("lube", 1000) + src.emag.name = "Lube spray" + return + + + /obj/item/weapon/robot_module/butler name = "service robot module" + + New() + ..() + src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src) + src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) + src.modules += new /obj/item/weapon/pen(src) + + var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) + M.matter = 30 + src.modules += M + src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) + + var/obj/item/weapon/zippo/L = new /obj/item/weapon/zippo(src) + L.lit = 1 + src.modules += L + + src.modules += new /obj/item/weapon/tray(src) + src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) + src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src) + var/datum/reagents/R = new/datum/reagents(50) + src.emag.reagents = R + R.my_atom = src.emag + R.add_reagent("beer2", 50) + src.emag.name = "Mickey Finn's Special Brew" + return + + + /obj/item/weapon/robot_module/miner name = "miner robot module" -obj/item/weapon/robot_module/syndicate + + New() + ..() + src.modules += new /obj/item/weapon/pickaxe/jackhammer(src) + src.modules += new /obj/item/weapon/shovel(src) + src.modules += new /obj/item/weapon/satchel(src) + src.modules += new /obj/item/borg/sight/meson(src) + src.emag = new /obj/item/borg/stun(src) + return + + +/obj/item/weapon/robot_module/syndicate name = "syndicate robot module" -/obj/item/weapon/robot_module/New()//Shit all the mods have - src.modules += new /obj/item/device/flash(src) - src.emag = new /obj/item/toy/sword(src) - src.emag.name = "Placeholder Emag Item" - -/obj/item/weapon/robot_module/standard/New() - ..() - src.modules += new /obj/item/weapon/melee/baton(src) - src.modules += new /obj/item/weapon/extinguisher(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/device/healthanalyzer(src) - src.emag = new /obj/item/weapon/melee/energy/sword(src) -/* -/obj/item/weapon/robot_module/hydroborg/New() - ..() - src.modules += new /obj/item/weapon/minihoe(src) - src.modules += new /obj/item/weapon/pestspray(src) - src.modules += new /obj/item/weapon/plantbgone(src) - src.modules += new /obj/item/nutrient/rh(src) - src.modules += new /obj/item/nutrient/l4z(src) - src.modules += new /obj/item/weapon/rsp(src) - src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - src.emag = new /obj/item/weapon/grown/deathnettle(src) -*/ -/obj/item/weapon/robot_module/engineering/New() - ..() - src.modules += new /obj/item/weapon/extinguisher(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/weapon/weldingtool/largetank(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/device/analyzer(src) - src.modules += new /obj/item/device/flashlight(src) - - var/obj/item/weapon/rcd/R = new /obj/item/weapon/rcd(src) - R.matter = 30 - src.modules += R - - src.modules += new /obj/item/device/t_scanner(src) - src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/weapon/wirecutters(src) - src.modules += new /obj/item/device/multitool(src) - - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(src) - M.amount = 50 - src.modules += M - - var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass(src) - G.amount = 50 - src.modules += G - - var/obj/item/weapon/cable_coil/W = new /obj/item/weapon/cable_coil(src) - W.amount = 50 - src.modules += W - src.modules += new /obj/item/weapon/borg/sight/meson(src) - - src.emag = new /obj/item/weapon/borg/stun(src) - - -/obj/item/weapon/robot_module/engineering/respawn_consumable(var/mob/living/silicon/robot/R) - var/list/what = list ( - /obj/item/stack/sheet/metal, - /obj/item/stack/sheet/rglass, - /obj/item/weapon/cable_coil, - ) - for (var/T in what) - if (!(locate(T) in src.modules)) - src.modules -= null - var/O = new T(src) - src.modules += O - O:amount = 1 - -/obj/item/weapon/robot_module/medical/respawn_consumable(var/mob/living/silicon/robot/R) - var/list/what = list ( - /obj/item/weapon/reagent_containers/pill/kelotane, - /obj/item/weapon/reagent_containers/pill/dexalin, - ) - for (var/T in what) - if (!(locate(T) in src.modules)) - src.modules -= null - var/O = new T(src) - src.modules += O - if (R.emagged && !src.emag) //thanks to cyborg-900 for uncovering this - src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src) - - - -/obj/item/weapon/robot_module/medical/New() - ..() - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) - src.modules += new /obj/item/weapon/reagent_containers/pill/kelotane(src) - src.modules += new /obj/item/weapon/reagent_containers/pill/dexalin(src) - //commented out due to law 1 - //src.modules += new /obj/item/weapon/scalpel(src) - //src.modules += new /obj/item/weapon/circular_saw(src) - src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src) - - - src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src) - -/obj/item/weapon/robot_module/butler/New() - ..() - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src) - src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) - src.modules += new /obj/item/weapon/pen(src) - - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.matter = 30 - src.modules += M - - src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) - - var/obj/item/weapon/zippo/L = new /obj/item/weapon/zippo(src) - L.lit = 1 - src.modules += L - - src.modules += new /obj/item/weapon/tray(src) - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) -// src.emag = new /obj/item/weapon/reagent_containers/food/snacks/roburgerbig(src) -// src.emag.name = "Last Meal" - src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src) - var/datum/reagents/R = new/datum/reagents(50) - src.emag.reagents = R - R.my_atom = src.emag - R.add_reagent("beer2", 50) - src.emag.name = "Mickey Finn's Special Brew" - - -/obj/item/weapon/robot_module/security/New() - ..() - src.modules += new /obj/item/weapon/melee/baton(src) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) - src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) - - -/obj/item/weapon/robot_module/janitor/New() - ..() - src.modules += new /obj/item/weapon/cleaner(src) - src.modules += new /obj/item/weapon/mop(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) - src.emag = new /obj/item/weapon/cleaner(src) - var/datum/reagents/R = new/datum/reagents(1000) - src.emag.reagents = R - R.my_atom = src.emag - R.add_reagent("lube", 1000) - src.emag.name = "Lube spray" - - -/obj/item/weapon/robot_module/miner/New() - ..() - src.modules += new /obj/item/weapon/pickaxe/jackhammer(src) - src.modules += new /obj/item/weapon/shovel(src) - src.modules += new /obj/item/weapon/satchel(src) - src.modules += new /obj/item/weapon/borg/sight/meson(src) - src.emag = new /obj/item/weapon/borg/stun(src) - -/* /obj/item/weapon/robot_module/brobot/New() - ..() - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src) - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src) - src.modules += new /obj/item/weapon/spacecash(src) - src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src) - var/datum/reagents/R = new/datum/reagents(50) - src.emag.reagents = R - R.my_atom = src.emag - R.add_reagent("beer2", 50) - src.emag.name = "Mickey Finn's Special Brew" -*/ //Merged with Service borg, not a death, just a transformation - -obj/item/weapon/robot_module/syndicate/New() - src.modules += new /obj/item/weapon/card/emag(src) - - -/obj/item/weapon/borg/stun - name = "Electrified Arm" - icon = 'decals.dmi' - icon_state = "shock" - - attack(mob/M as mob, mob/living/silicon/robot/user as mob) - - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - user.cell.charge -= 30 - if (M.weakened < 5) - M.weakened = 5 - if (M.stuttering < 5) - M.stuttering = 5 - if (M.stunned < 5) - M.stunned = 5 - for(var/mob/O in viewers(M, null)) - if (O.client) - O.show_message("\red [user] has prodded [M] with an electrically-charged arm!", 1, "\red You hear someone fall", 2) - -/obj/item/weapon/borg/sight - icon = 'decals.dmi' - icon_state = "securearea" - var/sight_mode - -/obj/item/weapon/borg/sight/xray - name = "X-ray Vision" - sight_mode = BORGXRAY - -/obj/item/weapon/borg/sight/thermal - name = "Thermal Vision" - sight_mode = BORGTHERM - -/obj/item/weapon/borg/sight/meson - name = "Meson Vision" - sight_mode = BORGMESON + New() + src.modules += new /obj/item/weapon/card/emag(src) + return diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 04820249ab..8012ccad7e 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -46,7 +46,7 @@ /obj/item/ammo_magazine/c9mm name = "Ammunition Box (9mm)" icon_state = "9mm" - origin_tech = "combat=3;materials=2" + origin_tech = "combat=2" ammo_type = "/obj/item/ammo_casing/c9mm" max_ammo = 30 @@ -55,6 +55,24 @@ /obj/item/ammo_magazine/c45 name = "Ammunition Box (.45)" icon_state = "9mm" - origin_tech = "combat=3;materials=2" + origin_tech = "combat=2" ammo_type = "/obj/item/ammo_casing/c45" max_ammo = 30 + + + +/obj/item/ammo_magazine/a12mm + name = "magazine (12mm)" + icon_state = "12mm" + origin_tech = "combat=2" + ammo_type = "/obj/item/ammo_casing/a12mm" + max_ammo = 20 + multiple_sprites = 1 + + + +/obj/item/ammo_magazine/a12mm/empty + name = "magazine (12mm)" + icon_state = "12mm" + ammo_type = "/obj/item/ammo_casing/12mm" + max_ammo = 0 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index b9f118a2e8..09585d912d 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -40,6 +40,12 @@ projectile_type = "/obj/item/projectile/bullet/midbullet" +/obj/item/ammo_casing/a12mm + desc = "A 12mm bullet casing." + caliber = "12mm" + projectile_type = "/obj/item/projectile/bullet/midbullet" + + /obj/item/ammo_casing/shotgun name = "shotgun shell" desc = "A 12 gauge shell." diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 89956ae931..39031c61c7 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -9,7 +9,6 @@ - /obj/item/weapon/gun/energy/laser/captain icon_state = "caplaser" desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding." @@ -30,7 +29,7 @@ process() charge_tick++ - if(!charge_tick >= 5) return 0 + if(!charge_tick >= 10) return 0 charge_tick = 0 if(!power_supply) return 0 power_supply.give(100) @@ -38,12 +37,13 @@ return 1 + /obj/item/weapon/gun/energy/laser/cyborg/load_into_chamber() if(in_chamber) return 1 if(isrobot(src.loc)) var/mob/living/silicon/robot/R = src.loc if(R && R.cell) - R.cell.use(40) + R.cell.use(100) in_chamber = new/obj/item/projectile/beam(src) return 1 return 0 diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 6e61558aa8..6a8aeb8523 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -51,7 +51,7 @@ process() charge_tick++ - if(!charge_tick >= 5) return 0 + if(!charge_tick >= 10) return 0 charge_tick = 0 if(!power_supply) return 0 if(!failcheck()) return 0 diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 2332c25a28..2b573450dc 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -62,7 +62,7 @@ process() charge_tick++ - if(!charge_tick >= 5) return 0 + if(!charge_tick >= 10) return 0 charge_tick = 0 if(!power_supply) return 0 power_supply.give(100) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index a5ccf826cc..9d17671303 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -11,13 +11,16 @@ ammo_type = "/obj/item/ammo_casing/a357" list/loaded = list() max_shells = 7 - load_method = 0 //0 = Single shells or quick loader, 1 = magazine + load_method = 0 //0 = Single shells or quick loader, 1 = box, 2 = magazine + obj/item/ammo_magazine/empty_mag = null New() + ..() for(var/i = 1, i <= max_shells, i++) loaded += new ammo_type(src) update_icon() + return load_into_chamber() @@ -37,6 +40,7 @@ attackby(var/obj/item/A as obj, mob/user as mob) var/num_loaded = 0 if(istype(A, /obj/item/ammo_magazine)) + if((load_method == 2) && loaded.len) return var/obj/item/ammo_magazine/AM = A for(var/obj/item/ammo_casing/AC in AM.stored_ammo) if(loaded.len >= max_shells) @@ -46,7 +50,11 @@ AM.stored_ammo -= AC loaded += AC num_loaded++ - else if(istype(A, /obj/item/ammo_casing) && !load_method) + if(load_method == 2) + user.remove_from_mob(AM) + empty_mag = AM + empty_mag.loc = src + if(istype(A, /obj/item/ammo_casing) && !load_method) var/obj/item/ammo_casing/AC = A if(AC.caliber == caliber && loaded.len < max_shells) user.drop_item() @@ -56,8 +64,11 @@ if(num_loaded) user << text("\blue You load [] shell\s into the gun!", num_loaded) A.update_icon() + update_icon() return + update_icon() desc = initial(desc) + text(" Has [] rounds remaining.", loaded.len) + return diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index c2615a1cee..074445c994 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -12,7 +12,7 @@ /obj/item/weapon/gun/projectile/automatic/mini_uzi name = "Mini-Uzi" - desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses .45 rounds." + desc = "A lightweight, fast firing gun, for when you want someone dead. Uses .45 rounds." icon_state = "mini-uzi" w_class = 3.0 max_shells = 20 @@ -20,3 +20,51 @@ origin_tech = "combat=5;materials=2;syndicate=8" ammo_type = "/obj/item/ammo_casing/c45" + + +/obj/item/weapon/gun/projectile/automatic/c20r + name = "C-20r SMG" + desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses .12mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp" + icon_state = "c20r" + item_state = "c20r" + w_class = 3.0 + max_shells = 20 + caliber = "12mm" + origin_tech = "combat=5;materials=2;syndicate=8" + ammo_type = "/obj/item/ammo_casing/a12mm" + fire_sound = 'Gunshot_smg.ogg' + load_method = 2 + + + New() + ..() + empty_mag = new /obj/item/ammo_magazine/a12mm/empty(src) + update_icon() + return + + + afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) + ..() + if(!loaded.len && empty_mag) + empty_mag.loc = get_turf(src.loc) + empty_mag = null + playsound(user, 'smg_empty_alarm.ogg', 40, 1) + update_icon() + return + + + update_icon() + ..() + overlays = null + if(empty_mag) + overlays += "c20r-[round(loaded.len,4)]" + return + + + + + + + + + diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index c04f39a7a8..2d7da580fe 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -1,7 +1,6 @@ /obj/item/projectile/bullet name = "bullet" icon_state = "bullet" - damage = 60 damage_type = BRUTE nodamage = 0 diff --git a/code/setup.dm b/code/setup.dm index 42d28d5843..8f8c115954 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -149,18 +149,25 @@ #define FULL_BODY 2047 //bitflags for mutations -#define PORTALS 1 -#define COLD_RESISTANCE 2 -#define XRAY 4 -#define HULK 8 -#define CLUMSY 16 -#define FAT 32 -#define HUSK 64 //changeling-drained -#define LASER 128 -#define HEAL 256 +var/const + TK =(1<<0) + COLD_RESISTANCE =(1<<1) + XRAY =(1<<2) + HULK =(1<<3) + CLUMSY =(1<<4) + FAT =(1<<5) + HUSK =(1<<6) + LASER =(1<<7) + HEAL =(1<<8) + + +//mob/var/stat things +var/const + CONSCIOUS = 0 + UNCONSCIOUS = 1 + DEAD = 2 // channel numbers for power - #define EQUIP 1 #define LIGHT 2 #define ENVIRON 3 diff --git a/html/changelog.html b/html/changelog.html index 42b1a77daa..712855e1ea 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -54,6 +54,15 @@ Stuff which is in development and not yet visible to players or just code relate (ie. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit tho. Thanks. --> +27 October 2011 +
    +
  • Mport updated: +
      +
    • New WIP TK system added. To activate your TK click the throw button with an empty hand. This will bring up a tkgrab item. Click on a non-anchored (currently) non mob Object to select it as your "focus". Once a focus is selected so long as you are in range of the focus you can now click somewhere to throw the focus at the target. To quit using TK just drop the tkgrab item.
    • +
    +
  • +
+ 21 October 2011, Tuesday: