From bc59a20becec3e1404e50fc9ddb2d7962004ee76 Mon Sep 17 00:00:00 2001 From: Geeves Date: Thu, 31 Oct 2019 20:54:44 +0200 Subject: [PATCH] Kitchen Strikes Back: The Rattening (#7268) --- .../crates_lockers/closets/job_closets.dm | 4 ++ .../mob/living/simple_animal/friendly/rat.dm | 16 ++--- .../projectiles/guns/energy/special.dm | 20 +++--- code/modules/projectiles/projectile/beams.dm | 71 +++++++++++++++---- html/changelogs/geeves - deathToRats.yml | 10 +++ 5 files changed, 88 insertions(+), 33 deletions(-) create mode 100644 html/changelogs/geeves - deathToRats.yml diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 0c9db7dca3d..ef45b4800dc 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -48,6 +48,8 @@ new /obj/item/clothing/under/sundress(src) new /obj/item/clothing/under/waiter(src) new /obj/item/clothing/under/waiter(src) + if(prob(1)) + new /obj/item/weapon/gun/energy/mousegun(src) new /obj/item/device/radio/headset/headset_service(src) new /obj/item/device/radio/headset/headset_service(src) new /obj/item/weapon/storage/box/gloves(src) @@ -70,6 +72,8 @@ new /obj/item/weapon/cartridge/janitor(src) new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/head/soft/purple(src) + new /obj/item/weapon/gun/energy/mousegun(src) + new /obj/item/clothing/accessory/holster/armpit(src) new /obj/item/device/flashlight(src) new /obj/item/weapon/caution(src) new /obj/item/weapon/caution(src) diff --git a/code/modules/mob/living/simple_animal/friendly/rat.dm b/code/modules/mob/living/simple_animal/friendly/rat.dm index 1ceaaf201ee..39e00218e8e 100644 --- a/code/modules/mob/living/simple_animal/friendly/rat.dm +++ b/code/modules/mob/living/simple_animal/friendly/rat.dm @@ -18,21 +18,21 @@ 'sound/effects/creatures/rat_squeaks_2.ogg', 'sound/effects/creatures/rat_squeaks_3.ogg', 'sound/effects/creatures/rat_squeaks_4.ogg') - var/last_softsqueak = null//Used to prevent the same soft squeak twice in a row - var/squeals = 5//Spam control. - var/maxSqueals = 2//SPAM PROTECTION - var/last_squealgain = 0// #TODO-FUTURE: Remove from life() once something else is created + var/last_softsqueak = null //Used to prevent the same soft squeak twice in a row + var/squeals = 5 //Spam control. + var/maxSqueals = 2 //SPAM PROTECTION + var/last_squealgain = 0 // #TODO-FUTURE: Remove from life() once something else is created var/squeakcooldown = 0 pass_flags = PASSTABLE speak_chance = 3 turns_per_move = 5 see_in_dark = 6 - maxHealth = 10 - health = 10 + maxHealth = 5 + health = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/rat - response_help = "pets" + response_help = "pets" response_disarm = "gently pushes aside" - response_harm = "stomps on" + response_harm = "stomps on" density = 0 meat_amount = 2 // Rats are a bit bigger, so a bit more meat for dreg-feeding. var/body_color //brown, gray, white, american irish, hooded leave blank for random diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index b20218bd088..34aa757e83d 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -158,8 +158,8 @@ dispersion = list(0, 8) /obj/item/weapon/gun/energy/mousegun - name = "\improper NT \"Arodentia\" Exterminator ray" - desc = "A highly sophisticated and certainly experimental raygun designed for rapid pest-control." + name = "\improper NT \"Arodentia\" Pesti-Shock" + desc = "A highly sophisticated and probably safe beamgun designed for rapid pest-control." icon_state = "floramut100" item_state = "floramut" charge_meter = 0 @@ -170,21 +170,21 @@ slot_flags = SLOT_HOLSTER | SLOT_BELT max_shots = 6 sel_mode = 1 - burst = 3 - burst_delay = 1 - move_delay = 0 - fire_delay = 3 - dispersion = list(0, 15, 15) - + var/emagged = FALSE needspin = FALSE - var/lightfail = 0 - /obj/item/weapon/gun/energy/mousegun/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0, var/playemote = 1) var/T = get_turf(user) spark(T, 3, alldirs) ..() +/obj/item/weapon/gun/energy/mousegun/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + to_chat(user, "You overload \the [src]'s shock modulator.") + projectile_type = /obj/item/projectile/beam/mousegun/emag + emagged = TRUE + return TRUE + /obj/item/weapon/gun/energy/net name = "net gun" desc = "A gun designed to deploy energy nets to capture animals or unruly crew members." diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 0368657c51f..e8d7aebbd04 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -177,7 +177,7 @@ impact_type = /obj/effect/projectile/impact/disabler /obj/item/projectile/beam/mousegun - name = "diffuse electrical arc" + name = "electrical arc" icon_state = "stun" nodamage = 1 damage_type = HALLOSS @@ -191,37 +191,78 @@ ..() /obj/item/projectile/beam/mousegun/proc/mousepulse(turf/epicenter, range, log=0) - if (!epicenter) + if(!epicenter) return - if (!istype(epicenter, /turf)) + if(!istype(epicenter, /turf)) epicenter = get_turf(epicenter.loc) - for (var/mob/living/M in range(range, epicenter)) + for(var/mob/living/M in range(range, epicenter)) var/distance = get_dist(epicenter, M) - if (distance < 0) + if(distance < 0) distance = 0 - if (distance <= range) - if (M.mob_size <= 2 && (M.find_type() & TYPE_ORGANIC)) - M.visible_message("[M] bursts like a balloon!") - M.gib() + if(distance <= range) + if (M.mob_size <= 3 && (M.find_type() & TYPE_ORGANIC)) + M.visible_message("\The [M] gets fried!") + M.color = "#4d4d4d" //get fried + M.death() spark(M, 3, alldirs) - else if (iscarbon(M) && M.contents.len) - for (var/obj/item/weapon/holder/H in M.contents) - if (!H.contained) + else if(iscarbon(M) && M.contents.len) + for(var/obj/item/weapon/holder/H in M.contents) + if(!H.contained) continue var/mob/living/A = H.contained - if (!istype(A)) + if(!istype(A)) continue - if (A.mob_size <= 2 && (A.find_type() & TYPE_ORGANIC)) + if(A.mob_size <= 3 && (A.find_type() & TYPE_ORGANIC)) + H.release_mob() + A.visible_message("\The [A] gets fried!") + A.color = "#4d4d4d" //get fried + A.death() + + to_chat(M, 'sound/effects/basscannon.ogg') + return TRUE + +/obj/item/projectile/beam/mousegun/emag + name = "diffuse electrical arc" + + taser_effect = 1 + agony = 60 + +/obj/item/projectile/beam/mousegun/emag/mousepulse(turf/epicenter, range, log=0) + if(!epicenter) + return + + if(!istype(epicenter, /turf)) + epicenter = get_turf(epicenter.loc) + + for(var/mob/living/M in range(range, epicenter)) + var/distance = get_dist(epicenter, M) + if(distance < 0) + distance = 0 + if(distance <= range) + if(M.mob_size <= 4 && (M.find_type() & TYPE_ORGANIC)) + M.visible_message("[M] bursts like a balloon!") + M.gib() + spark(M, 3, alldirs) + else if(iscarbon(M) && M.contents.len) + for(var/obj/item/weapon/holder/H in M.contents) + if(!H.contained) + continue + + var/mob/living/A = H.contained + if(!istype(A)) + continue + + if(A.mob_size <= 4 && (A.find_type() & TYPE_ORGANIC)) H.release_mob() A.visible_message("[A] bursts like a balloon!") A.gib() to_chat(M, 'sound/effects/basscannon.ogg') - return 1 + return TRUE /obj/item/projectile/beam/shotgun name = "diffuse laser" diff --git a/html/changelogs/geeves - deathToRats.yml b/html/changelogs/geeves - deathToRats.yml new file mode 100644 index 00000000000..b219144424f --- /dev/null +++ b/html/changelogs/geeves - deathToRats.yml @@ -0,0 +1,10 @@ + +author: Geeves + +delete-after: True + +changes: + - rscadd: "Janitorial staff are now equipped with an Arodentia gun, capable of keeping any well-meaning establishment clear of pests." + - rscadd: "Janitorial staff now have an armpit holster to keep their Arodentia gun in." + - tweak: "Arodentia guns have come out of the experimental phase, now featuring new abilities." + - tweak: "Rats now have their health reduced to reasonable levels." \ No newline at end of file