diff --git a/baystation12.dme b/baystation12.dme index 5e432fe41c..6081151659 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -80,7 +80,6 @@ #define FILE_DIR "code/game/objects/stacks" #define FILE_DIR "code/game/objects/storage" #define FILE_DIR "code/game/objects/tanks" -#define FILE_DIR "code/game/structure" #define FILE_DIR "code/game/verbs" #define FILE_DIR "code/js" #define FILE_DIR "code/modules" @@ -147,6 +146,7 @@ #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara" #define FILE_DIR "code/WorkInProgress/mapload" #define FILE_DIR "code/WorkInProgress/Mini" +#define FILE_DIR "code/WorkInProgress/Mloc" #define FILE_DIR "code/WorkInProgress/organs" #define FILE_DIR "code/WorkInProgress/Ported" #define FILE_DIR "code/WorkInProgress/Ported/Abi79" @@ -517,7 +517,7 @@ #include "code\game\machinery\computer\id.dm" #include "code\game\machinery\computer\lockdown.dm" #include "code\game\machinery\computer\medical.dm" -#include "code\game\machinery\computer\operating.dm" +#include "code\game\machinery\computer\Operating.dm" #include "code\game\machinery\computer\power.dm" #include "code\game\machinery\computer\robot.dm" #include "code\game\machinery\computer\security.dm" @@ -724,7 +724,6 @@ #include "code\game\objects\tanks\emergency.dm" #include "code\game\objects\tanks\jetpack.dm" #include "code\game\objects\tanks\oxygen.dm" -#include "code\game\structure\structure.dm" #include "code\game\verbs\AI_status.dm" #include "code\game\verbs\checkkarma.dm" #include "code\game\verbs\ooc.dm" @@ -1033,6 +1032,7 @@ #include "code\WorkInProgress\mapload\reader.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\customitems.dm" +#include "code\WorkInProgress\Mloc\Shortcuts.dm" #include "code\WorkInProgress\Ported\head.dm" #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\Ported\Abi79\uplink_kits.dm" diff --git a/code/WorkInProgress/Mloc/Shortcuts.dm b/code/WorkInProgress/Mloc/Shortcuts.dm new file mode 100644 index 0000000000..8d537d1583 --- /dev/null +++ b/code/WorkInProgress/Mloc/Shortcuts.dm @@ -0,0 +1,33 @@ +/mob/verb/shortcut_changeintent(var/changeto as num) + set name = "_changeintent" + set hidden = 1 + if(istype(usr,/mob/living/carbon)) + if(changeto == 1) + switch(usr.a_intent) + if("help") + usr.a_intent = "disarm" + usr.hud_used.action_intent.icon_state = "disarm" + if("disarm") + usr.a_intent = "hurt" + usr.hud_used.action_intent.icon_state = "harm" + if("hurt") + usr.a_intent = "grab" + usr.hud_used.action_intent.icon_state = "grab" + if("grab") + usr.a_intent = "help" + usr.hud_used.action_intent.icon_state = "help" + else if(changeto == -1) + switch(usr.a_intent) + if("help") + usr.a_intent = "grab" + usr.hud_used.action_intent.icon_state = "grab" + if("disarm") + usr.a_intent = "help" + usr.hud_used.action_intent.icon_state = "help" + if("hurt") + usr.a_intent = "disarm" + usr.hud_used.action_intent.icon_state = "disarm" + if("grab") + usr.a_intent = "hurt" + usr.hud_used.action_intent.icon_state = "harm" + return \ No newline at end of file diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm index 85ffa1f891..a27345d4c0 100644 --- a/code/WorkInProgress/Ported/Abi79/uplinks.dm +++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm @@ -193,10 +193,20 @@ A list of items and costs is stored under the datum of every game mode, alongsid return explode() + var/turf/location = get_turf(src.loc) + if(location) + location.hotspot_expose(700,125) + explosion(location, 0, 0, 2, 4, 1) + var/obj/item/weapon/implant/uplink/U = src.loc var/mob/living/A = U.imp_in - A.gib() - ..() + var/datum/organ/external/head = A:organs["head"] + head.destroyed = 1 + spawn(2) + head.droplimb() + del(src.master) + del(src) + return /obj/item/device/uplink/radio diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 6e19ed87e7..5655f73a1e 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -663,6 +663,25 @@ anchored = 1.0 var/list/buckled_mobs = list( ) +/obj/stool/chair/comfy + name = "comfy chair" + desc = "It looks comfy." + +/obj/stool/chair/comfy/brown + icon_state = "comfychair_brown" + +/obj/stool/chair/comfy/beige + icon_state = "comfychair_beige" + +/obj/stool/chair/comfy/teal + icon_state = "comfychair_teal" + +/obj/stool/chair/comfy/black + icon_state = "comfychair_black" + +/obj/stool/chair/comfy/lime + icon_state = "comfychair_lime" + /obj/structure/stool/chair/e_chair name = "electrified chair" desc = "Looks absolutely terrifying!" diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 8c340f1ba2..a265cd2e1e 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -293,6 +293,9 @@ /atom/Click(location,control,params) //world << "atom.Click() on [src] by [usr] : src.type is [src.type]" var/list/pram = params2list(params) + if((pram["alt"] != null && pram["ctrl"] != null && pram["left"] != null) && istype(src,/atom/movable)) + src:pull() + return if(pram["ctrl"] != null && pram["left"] != null) src.examine() return diff --git a/code/game/dna.dm b/code/game/dna.dm index acb1d477f6..553c96c223 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -482,6 +482,7 @@ I.implanted = O O.flavor_text = M.flavor_text O.warn_flavor_changed() + O.update_clothing() del(M) return //////////////////////////////////////////////////////////// Monkey Block diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 58949c45ee..57d4d002cd 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -53,7 +53,7 @@ flag = BOTANIST department_flag = CIVILIAN faction = "Station" - total_positions = 3 + total_positions = 2 spawn_positions = 2 supervisors = "the head of personnel" diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index c5b159aaef..b28011c762 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -51,7 +51,7 @@ flag = ATMOSTECH department_flag = ENGSEC faction = "Station" - total_positions = 3 + total_positions = 2 spawn_positions = 2 supervisors = "the chief engineer" @@ -73,7 +73,7 @@ flag = ROBOTICIST department_flag = ENGSEC faction = "Station" - total_positions = 2 + total_positions = 1 spawn_positions = 1 supervisors = "the chief engineer and research director" diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 501200ebcf..bc3ce694f4 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -52,8 +52,8 @@ flag = GENETICIST department_flag = MEDSCI faction = "Station" - total_positions = 2 - spawn_positions = 2 + total_positions = 1 + spawn_positions = 1 supervisors = "the chief medical officer and research director" diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index a764f6e98f..3eedd80b16 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -49,8 +49,8 @@ flag = CHEMIST department_flag = MEDSCI faction = "Station" - total_positions = 2 - spawn_positions = 2 + total_positions = 1 + spawn_positions = 1 supervisors = "the chief medical officer and the research director" diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 7de7e40134..b165fe74ce 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -246,6 +246,7 @@ var/global/datum/controller/occupations/job_master var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H) H.equip_if_possible(BPK, H.slot_back,1) H.equip_if_possible(new /obj/item/weapon/storage/box(H.back), H.slot_in_backpack) + H.update_clothing() return 1 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 8aaac08db5..fe5606c369 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -528,7 +528,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. if (src.canAIHack()) src.hack(user) return - else if(user) + else if(user && !isrobot(user)) if(!C) return if(C.in_use) @@ -542,7 +542,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. return if(istype(C, /obj/item/device/hacktool/engineer)) return - else + else if(!isrobot(user)) world << "ERROR: Mob was null when calling attack_ai on [src.name] at [src.x],[src.y],[src.z]" return diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index 44c9d1bd3a..2bb197d7ce 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -369,6 +369,11 @@ mob/proc/flash_weak_pain() if(istype(M, /mob/living/carbon/human)) M:attacked_by(src, user, def_zone) + var/mob/living/carbon/human/H = M + if(H) + H.UpdateDamageIcon() + H.update_clothing() + user.update_clothing() else switch(src.damtype) if("brute") diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index c48b54bb2c..b25c819d6c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -266,6 +266,7 @@ ZIPPO else user.r_hand = W W.layer = 20 + user.update_clothing() else return ..() src.update_icon() diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 7468693ea3..0e3aa57dd8 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -87,6 +87,7 @@ spawn( 0 ) O.process() + user.update_clothing() return else for(var/mob/O in viewers(M, null)) diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm index 6d40b6aa56..d8665dd797 100644 --- a/code/game/objects/items/weapons/implants/implantfreedom.dm +++ b/code/game/objects/items/weapons/implants/implantfreedom.dm @@ -29,6 +29,7 @@ dropped(source) if (W) W.layer = initial(W.layer) + source.update_clothing() return diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm index 89b5977b82..62a2ff5957 100644 --- a/code/game/objects/stool.dm +++ b/code/game/objects/stool.dm @@ -69,6 +69,7 @@ if (M.buckled == src) M.buckled = null M.anchored = 0 + M.update_clothing() /obj/structure/stool/proc/manual_unbuckle_all(mob/user as mob) var/N = 0; @@ -87,6 +88,7 @@ // world << "[M] is no longer buckled to [src]" M.anchored = 0 M.buckled = null + M.update_clothing() N++ return N @@ -109,6 +111,7 @@ M.buckled = src M.loc = src.loc M.dir = src.dir + M.update_clothing() src:buckled_mobs += M src.add_fingerprint(user) return @@ -339,6 +342,7 @@ M.pixel_y = 0 M.anchored = 0 M.buckled = null + M.update_clothing() N++ if(N) density = 0 diff --git a/code/game/structure/structure.dm b/code/game/structure/structure.dm deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 6e7df37b39..039aac0192 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -140,6 +140,7 @@ process() + processing_objects.Remove(src) return diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 3a4633f21b..f6091cb602 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -45,10 +45,6 @@ if(scanning) src.overlays += text("infrared_old2") src.small_icon_state_overlays += text("infrared_on") - if(master && istype(master, /obj/item/weapon/chem_grenade)) - var/obj/item/weapon/chem_grenade/M = master - M.c_state(1) - if(holder) holder.update_icon() return diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index bcb5b31b7e..911ca27f02 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -87,15 +87,9 @@ if(timing) overlays += text("prox_timing") small_icon_state_overlays += text("prox_timing") - if(master && istype(master, /obj/item/weapon/chem_grenade)) - var/obj/item/weapon/chem_grenade/M = master - M.c_state(1) if(scanning) overlays += text("prox_scanning") small_icon_state_overlays += text("prox_scanning") - if(master && istype(master, /obj/item/weapon/chem_grenade)) - var/obj/item/weapon/chem_grenade/M = master - M.c_state(1) if(holder) holder.update_icon() diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 2ba02fd7c0..4b942d4a41 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -64,9 +64,6 @@ if(timing) overlays += text("timer_timing") small_icon_state_overlays += text("timer_timing") - if(master && istype(master, /obj/item/weapon/chem_grenade)) - var/obj/item/weapon/chem_grenade/M = master - M.c_state(1) if(holder) holder.update_icon() return diff --git a/code/modules/chemical/Chemistry-Recipes.dm b/code/modules/chemical/Chemistry-Recipes.dm index 557f4349b0..a403d17e01 100644 --- a/code/modules/chemical/Chemistry-Recipes.dm +++ b/code/modules/chemical/Chemistry-Recipes.dm @@ -194,7 +194,7 @@ datum name = "Dexalin" id = "dexalin" result = "dexalin" - required_reagents = list("oxygen" = 2) + required_reagents = list("oxygen" = 2, "plasma" = 0.1) required_catalysts = list("plasma" = 5) result_amount = 1 @@ -244,7 +244,7 @@ datum name = "Clonexadone" id = "clonexadone" result = "clonexadone" - required_reagents = list("cryoxadone" = 1, "sodium" = 1) + required_reagents = list("cryoxadone" = 1, "sodium" = 1, "plasma" = 0.1) required_catalysts = list("plasma" = 5) result_amount = 2 diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 44c15561ce..78af83ee6c 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -289,12 +289,6 @@ if(beaker_two) beaker_two.loc = get_turf(src.loc) - c_state(var/i = 0) - if(i) - icon_state = initial(icon_state) + "_armed" - return - - large name = "Large Chem Grenade" desc = "An oversized grenade that affects a larger area." diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7df3967af5..0fec1a769b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -12,6 +12,7 @@ life_tick = 0 isbreathing = 1 holdbreath = 0 + lyingcheck = 0 /mob/living/carbon/human/Life() set invisibility = 0 @@ -85,7 +86,10 @@ handle_health_updates() // Update clothing - update_clothing() +// update_clothing() + if(lyingcheck != lying) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every + update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared + lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal. if(client) handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 8cc12f2c5a..1f9933e8a4 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -211,6 +211,7 @@ var/Tempstun = 0 // temporary temperature stuns var/Discipline = 0 // if a metroid has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while var/SStun = 0 // stun variable + var/Obstacle = 1 // determines whether the turf the metroid will head to has an obstacle proc AIprocess() // the master AI process @@ -228,7 +229,9 @@ switch(nutrition) if(150 to 800) hungry = 1 if(0 to 149) starving = 1 + AIproc = 1 + while(AIproc && stat != 2 && (attacked > 0 || starving || hungry || rabid || Victim)) if(Victim) // can't eat AND have this little process at the same time break @@ -242,63 +245,63 @@ AIproc = 0 break - if(Target) - for(var/mob/living/carbon/metroid/M in view(1,Target)) - if(M.Victim == Target) - Target = null - AIproc = 0 - break - if(!AIproc) + for(var/mob/living/carbon/metroid/M in view(1,Target)) + if(M.Victim == Target) + Target = null + AIproc = 0 break - if(Target in view(1,src)) + if(!AIproc) + break - if(istype(Target, /mob/living/silicon)) - if(!Atkcool) - spawn() - Atkcool = 1 - sleep(15) - Atkcool = 0 + if(get_obstacle_ok(Target)) + Obstacle = 0 + else Obstacle = 1 - if(get_obstacle_ok(Target)) - Target.attack_metroid(src) - return - if(prob(80) && !Target.lying) + if(Target in view(1,src)) - if(Target.client && Target.health >= rand(10,30)) - if(!Atkcool) - spawn() - Atkcool = 1 - sleep(25) - Atkcool = 0 + if(istype(Target, /mob/living/silicon)) + if(!Atkcool) + spawn() + Atkcool = 1 + sleep(15) + Atkcool = 0 - if(get_obstacle_ok(Target)) - Target.attack_metroid(src) + if(!Obstacle) + Target.attack_metroid(src) + return + + if(prob(80) && !Target.lying && Target.client && Target.health >= rand(10,30)) + + if(!Atkcool) + spawn() + Atkcool = 1 + sleep(25) + Atkcool = 0 + + if(!Obstacle) + Target.attack_metroid(src) - if(prob(30)) - step_to(src, Target) - - else - if(!Atkcool && get_obstacle_ok(Target)) - Feedon(Target) - - else - if(!Atkcool && get_obstacle_ok(Target)) - Feedon(Target) + if(prob(30)) + step_to(src, Target) else - if(Target in view(30, src)) - if(get_obstacle_ok(Target)) - step_to(src, Target) + if(!Atkcool && !Obstacle) + Feedon(Target) - else - Target = null - AIproc = 0 - break + else + if(Target in view(30, src)) + if(!Obstacle) + step_to(src, Target) + + else + Target = null + AIproc = 0 + break var/sleeptime = movement_delay() - if(sleeptime <= 0) sleeptime = 1 + if(sleeptime < 1) sleeptime = 1 sleep(sleeptime + 2) // this is about as fast as a player Metroid can go diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index 59c871e55b..edf60ec1f9 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -474,6 +474,7 @@ usr << "\blue You successfully remove your handcuffs." usr:handcuffed:loc = usr:loc usr:handcuffed = null + usr.update_clothing() if(istype(usr, /mob/living/carbon/human) && istype(usr:wear_suit, /obj/item/clothing/suit/straight_jacket) && usr:canmove && (usr.last_special <= world.time)) usr.next_move = world.time + 200 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 00664be667..b256cceda1 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -464,6 +464,7 @@ m_amt = 60 var/rigged = 0 // true if rigged to explode var/brightness = 2 //how much light it gives off + var/repair_state = 0 /obj/item/weapon/light/tube name = "light tube" @@ -497,9 +498,15 @@ if(LIGHT_BURNED) icon_state = "[base_state]-burned" desc = "A burnt-out [name]." + if(repair_state == 1) + desc += " It has some wires hanging out." if(LIGHT_BROKEN) icon_state = "[base_state]-broken" desc = "A broken [name]." + if(repair_state == 1) + desc += " It has some wires hanging out." + else if(repair_state == 2) + desc += " It has had new wires put in." /obj/item/weapon/light/New() @@ -514,8 +521,9 @@ // attack bulb/tube with object // if a syringe, can inject plasma to make it explode +// also repairing them with wire and screwdriver +// and glass if it's broken /obj/item/weapon/light/attackby(var/obj/item/I, var/mob/user) - ..() if(istype(I, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = I @@ -526,8 +534,36 @@ rigged = 1 S.reagents.clear_reagents() - else - ..() + return + if(status != 0) + if(istype(I, /obj/item/weapon/cable_coil) && repair_state == 0) + user << "You put some new wiring into the [src]." + I:use(1) + repair_state = 1 + update() + return + if(istype(I, /obj/item/weapon/screwdriver) && repair_state == 1) + user << "You attach the new wiring." + playsound(src.loc, 'Screwdriver.ogg', 100, 1) + if(status == LIGHT_BURNED) + repair_state = 0 + status = LIGHT_OK + else + repair_state = 2 + update() + return + if(istype(I, /obj/item/stack/sheet/glass) && status == LIGHT_BROKEN) + user << "You repair the glass of the [src]." //this is worded terribly + I:use(1) + force = 2 //because breaking it changes the force, this changes it back + if(repair_state == 2) + repair_state = 0 + status = LIGHT_OK + else + status = LIGHT_BURNED + update() + return + ..() return // called after an attack with a light item diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index cf7cc1e282..28e0bd88ef 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 2bc55b414d..0a20c2a156 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -59,6 +59,14 @@ macro "macro" name = "CTRL+D" command = "drop-item" is-disabled = false + elem + name = "CTRL+E" + command = "_changeintent 1" + is-disabled = false + elem + name = "CTRL+Q" + command = "_changeintent -1" + is-disabled = false elem name = "CTRL+S" command = "swap-hand"