From cb06ebdd9fd81cf305e04938a50b5c40ce3e1775 Mon Sep 17 00:00:00 2001 From: warior4356 Date: Mon, 13 Jul 2020 22:05:56 -0700 Subject: [PATCH] Refactor complete. Matches added. --- code/game/atoms_movable.dm | 3 + code/game/objects/effects/decals/remains.dm | 7 ++ code/game/objects/effects/spiders.dm | 9 ++ code/game/objects/items/trash.dm | 6 ++ code/game/objects/items/weapons/cigs.dm | 5 + code/game/objects/items/weapons/lighters.dm | 8 +- code/game/objects/items/weapons/shards.dm | 5 + .../food_and_drinks/drinks/drinks/bottle.dm | 5 + code/modules/hydroponics/grown.dm | 5 + .../mob/living/silicon/robot/drone/drone.dm | 24 +++++ .../living/silicon/robot/drone/drone_items.dm | 99 +------------------ .../living/simple_animal/friendly/lizard.dm | 10 ++ .../living/simple_animal/friendly/mouse.dm | 10 ++ code/modules/power/lighting.dm | 6 ++ 14 files changed, 106 insertions(+), 96 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ab5ff19462a..00009c8eeca 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -567,3 +567,6 @@ /atom/movable/proc/portal_destroyed(obj/effect/portal/P) return + +/atom/movable/proc/decompile_act(obj/item/matter_decompiler/C, mob/user) // For drones to decompile mobs and objs. See drone for an example. + return FALSE diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 9a879a02da3..9747630fff1 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -28,6 +28,13 @@ icon_state = "remainsrobot" anchored = TRUE +/obj/effect/decal/remains/robot/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["glass"] += 1 + C.stored_comms["metal"] += 2 + C.stored_comms["plastic"] += 2 + qdel(src) + return TRUE + /obj/effect/decal/remains/slime name = "You shouldn't see this" desc = "Noooooooooooooooooooooo" diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 7af5d7a998f..54560d817eb 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -190,6 +190,15 @@ to_chat(S, "You are a spider who is loyal to [S.master_commander], obey [S.master_commander]'s every order and assist [S.master_commander.p_them()] in completing [S.master_commander.p_their()] goals at any cost.") qdel(src) +/obj/structure/spider/spiderling/decompile_act(obj/item/matter_decompiler/C, mob/user) + if(!istype(user, /mob/living/silicon/robot/drone)) + C.loc.visible_message("[C.loc] sucks [src] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.") + qdel(src) + C.stored_comms["wood"] += 2 + C.stored_comms["plastic"] += 2 + return TRUE + return ..() + /obj/effect/decal/cleanable/spiderling_remains name = "spiderling remains" desc = "Green squishy mess." diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 7cf48095e72..bbb8ebd55b8 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -8,6 +8,12 @@ desc = "This is rubbish." resistance_flags = FLAMMABLE +/obj/item/trash/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["metal"] += 1 + C.stored_comms["plastic"] += 2 + qdel(src) + return TRUE + /obj/item/trash/raisins name = "4no raisins" icon_state= "4no_raisins" diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 8c2c3e85917..73e6a93ffc9 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -311,6 +311,11 @@ LIGHTERS ARE IN LIGHTERS.DM pixel_y = rand(-10,10) transform = turn(transform,rand(0,360)) +/obj/item/cigbutt/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["plastic"] += 1 + qdel(src) + return TRUE + /obj/item/cigbutt/cigarbutt name = "cigar butt" desc = "A manky old cigar butt." diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index 740079db8e1..1bfeeabae03 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -244,12 +244,18 @@ else ..() +/obj/item/match/decompile_act(obj/item/matter_decompiler/C, mob/user) + if(burnt) + C.stored_comms["wood"] += 1 + qdel(src) + return TRUE + return ..() + /obj/item/proc/help_light_cig(mob/living/M) var/mask_item = M.get_item_by_slot(slot_wear_mask) if(istype(mask_item, /obj/item/clothing/mask/cigarette)) return mask_item - /obj/item/match/firebrand name = "firebrand" desc = "An unlit firebrand. It makes you wonder why it's not just called a stick." diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 52c2aea5ddb..6daabffe000 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -88,6 +88,11 @@ playsound(loc, 'sound/effects/glass_step.ogg', 50, TRUE) return ..() +/obj/item/shard/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["glass"] += 3 + qdel(src) + return TRUE + /obj/item/shard/plasma name = "plasma shard" desc = "A shard of plasma glass. Considerably tougher then normal glass shards. Apparently not tough enough to be a window." diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 4515a62d86b..f47707bd5d2 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -141,6 +141,11 @@ var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken") sharp = 1 +/obj/item/broken_bottle/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["glass"] += 3 + qdel(src) + return TRUE + /obj/item/reagent_containers/food/drinks/bottle/gin name = "Griffeater Gin" desc = "A bottle of high quality gin, produced in the New London Space Station." diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index a3b522187e2..5ad8a5f32f4 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -168,6 +168,11 @@ return return ..() +/obj/item/reagent_containers/food/snacks/grown/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["wood"] += 4 + qdel(src) + return TRUE + // For item-containing growns such as eggy or gatfruit /obj/item/reagent_containers/food/snacks/grown/shell/attack_self(mob/user) user.unEquip(src) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index ff7f7fba084..219e56ea08a 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -354,3 +354,27 @@ /mob/living/simple_animal/drone/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0) if(affect_silicon) return ..() + +/mob/living/silicon/robot/drone/decompile_act(obj/item/matter_decompiler/C, mob/user) + if(!client && istype(user, /mob/living/silicon/robot/drone)) + var/mob/living/silicon/robot/drone/D = C.loc + to_chat(D, "You begin decompiling the other drone.") + + if(!do_after(D, 50, target = src.loc)) + to_chat(D, "You need to remain still while decompiling such a large object.") + return + + if(!src || !D) return ..() + + to_chat(D, "You carefully and thoroughly decompile your downed fellow, storing as much of its resources as you can within yourself.") + + qdel(src) + new/obj/effect/decal/cleanable/blood/oil(get_turf(src)) + + C.stored_comms["metal"] += 15 + C.stored_comms["glass"] += 15 + C.stored_comms["wood"] += 5 + C.stored_comms["plastic"] += 5 + + return TRUE + return ..() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 8f2b9fee6ae..abc7b2cf865 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -158,8 +158,7 @@ /obj/item/matter_decompiler/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) return -/obj/item/matter_decompiler/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params) - +/obj/item/matter_decompiler/afterattack(atom/target, mob/living/user, proximity, params) if(!proximity) return //Not adjacent. //We only want to deal with using this on turfs. Specific items aren't important. @@ -170,99 +169,9 @@ //Used to give the right message. var/grabbed_something = 0 - for(var/mob/M in T) - if(istype(M,/mob/living/simple_animal/lizard) || istype(M,/mob/living/simple_animal/mouse)) - src.loc.visible_message("[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.") - new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) - qdel(M) - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - return - - else if(istype(M,/mob/living/silicon/robot/drone) && !M.client) - - var/mob/living/silicon/robot/drone/D = src.loc - - if(!istype(D)) - return - - to_chat(D, "You begin decompiling the other drone.") - - if(!do_after(D, 50, target = target)) - to_chat(D, "You need to remain still while decompiling such a large object.") - return - - if(!M || !D) return - - to_chat(D, "You carefully and thoroughly decompile your downed fellow, storing as much of its resources as you can within yourself.") - - qdel(M) - new/obj/effect/decal/cleanable/blood/oil(get_turf(src)) - - stored_comms["metal"] += 15 - stored_comms["glass"] += 15 - stored_comms["wood"] += 5 - stored_comms["plastic"] += 5 - - return - else - continue - - for(var/obj/W in T) - //Different classes of items give different commodities. - if(istype(W,/obj/item/cigbutt)) - stored_comms["plastic"]++ - else if(istype(W,/obj/structure/spider/spiderling)) - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - else if(istype(W,/obj/item/light)) - var/obj/item/light/L = W - if(L.status >= 2) //In before someone changes the inexplicably local defines. ~ Z - stored_comms["metal"]++ - stored_comms["glass"]++ - else - continue - else if(istype(W,/obj/effect/decal/remains/robot)) - stored_comms["metal"]++ - stored_comms["metal"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/trash)) - stored_comms["metal"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - else if(istype(W,/obj/effect/decal/cleanable/blood/gibs/robot)) - stored_comms["metal"]++ - stored_comms["metal"]++ - stored_comms["glass"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/ammo_casing)) - stored_comms["metal"]++ - else if(istype(W,/obj/item/shard)) - stored_comms["glass"]++ - stored_comms["glass"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/reagent_containers/food/snacks/grown)) - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["wood"]++ - else if(istype(W,/obj/item/broken_bottle)) - stored_comms["glass"]++ - stored_comms["glass"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/light/tube) || istype(W,/obj/item/light/bulb)) - stored_comms["glass"]++ - else - continue - - qdel(W) - grabbed_something = 1 + for(var/atom/movable/A in T) + if(A.decompile_act(src)) // Each decompileable mob or obj needs to have this defined + grabbed_something = 1 if(grabbed_something) to_chat(user, "You deploy your decompiler and clear out the contents of \the [T].") diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 96688963b73..b8c3ac607fd 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -23,3 +23,13 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) can_collar = 1 gold_core_spawnable = FRIENDLY_SPAWN + +/mob/living/simple_animal/lizard/decompile_act(obj/item/matter_decompiler/C, mob/user) + if(!istype(user, /mob/living/silicon/robot/drone)) + C.loc.visible_message("[C.loc] sucks [src] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.") + new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) + qdel(src) + C.stored_comms["wood"] += 2 + C.stored_comms["plastic"] += 2 + return TRUE + return ..() diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index a48b36cb0c7..fd91278761f 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -234,3 +234,13 @@ gold_core_spawnable = NO_SPAWN can_collar = 0 butcher_results = list(/obj/item/stack/sheet/metal = 1) + +/mob/living/simple_animal/mouse/decompile_act(obj/item/matter_decompiler/C, mob/user) + if(!(istype(user, /mob/living/silicon/robot/drone))) + C.loc.visible_message("[C.loc] sucks [src] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.") + new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) + qdel(src) + C.stored_comms["wood"] += 2 + C.stored_comms["plastic"] += 2 + return TRUE + return ..() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 0a31d882488..3e8d71b3280 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -634,6 +634,12 @@ shatter() return ..() +/obj/item/light/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["glass"] += 1 + C.stored_comms["metal"] += 1 + qdel(src) + return TRUE + /obj/item/light/tube name = "light tube" desc = "A replacement light tube."