From 92ec84f6efd91473eb71c57eea6db3171a57a4d2 Mon Sep 17 00:00:00 2001 From: Casey Date: Sun, 18 Sep 2022 05:33:43 -0400 Subject: [PATCH 1/2] Allows Long Predatorial Reach to toggle modes. --- .../station/station_special_abilities_vr.dm | 214 ++++++++++++++++++ .../living/simple_mob/subtypes/vore/vore.dm | 5 + code/modules/vore/eating/living_vr.dm | 15 ++ code/modules/vore/eating/vore_vr.dm | 22 ++ code/modules/vore/eating/vorepanel_vr.dm | 5 + code/modules/vore/mouseray.dm | 5 + 6 files changed, 266 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index c4c55fa63e..38d6c68933 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -1166,3 +1166,217 @@ to_chat(src, " You turn on your pain simulators ") synth_cosmetic_pain = !synth_cosmetic_pain +<<<<<<< HEAD +======= + +//This is the 'long vore' ability. Also known as "Grab Prey with appendage" or "Long Predatorial Reach". Or simply "Tongue Vore" +//It involves projectiles (which means it can be VV'd onto a gun for shenanigans) +//It can also be recolored via the proc, which persists between rounds. + +/mob/living/proc/long_vore() // Allows the user to tongue grab a creature in range. Made a /living proc so frogs can frog you. + set name = "Grab Prey With Appendage" + set category = "Abilities" + set desc = "Grab a target with any of your appendages!" + + if(stat || paralysis || weakened || stunned || world.time < last_special) //No tongue flicking while stunned. + to_chat(src, "You can't do that in your current state.") + return + + last_special = world.time + 10 //Anti-spam. + + if (!istype(src, /mob/living)) + to_chat(src, "It doesn't work that way.") + return + + var/choice = tgui_alert(src, "Do you wish to change the color of your appendage, use it, or change its functionality?", "Selection List", list("Use it", "Color", "Functionality")) + + if(choice == "Color") //Easy way to set color so we don't bloat up the menu with even more buttons. + var/new_color = input(usr, "Choose a color to set your appendage to!", "", appendage_color) as color|null + if(new_color) + appendage_color = new_color + if(choice == "Functionality") //Easy way to set color so we don't bloat up the menu with even more buttons. + var/choice2 = tgui_alert(usr, "Choose if you want to be pulled to the target or pull them to you!", "Functionality Setting", list("Pull target to self", "Pull self to target")) + if(choice2 == "Pull target to self") + appendage_alt_setting = 0 + else + appendage_alt_setting = 1 + else + var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. + + for(var/mob/living/L in range(5, src)) + if(!istype(L, /mob/living)) //Don't eat anything that isn't mob/living. Failsafe. + continue + if(L == src) //no eating yourself. 1984. + continue + if(L.devourable && L.throw_vore && (L.can_be_drop_pred || L.can_be_drop_prey)) + targets += L + + if(!(targets.len)) + to_chat(src, "No eligible targets found.") + return + + var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets) + + if(!target) + return + + if(!istype(target, /mob/living)) //Safety. + to_chat(src, "You need to select a living target!") + return + + if (get_dist(src,target) >= 6) + to_chat(src, "You need to be closer to do that.") + return + + visible_message("\The [src] attempts to snatch up [target]!", \ + "You attempt to snatch up [target]!" ) + playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25) + + //Code to shoot the beam here. + var/obj/item/projectile/beam/appendage/appendage_attack = new /obj/item/projectile/beam/appendage(get_turf(loc)) + appendage_attack.launch_projectile(target, BP_TORSO, src) //Send it. + last_special = world.time + 100 //Cooldown for successful strike. + + + + +/obj/item/projectile/beam/appendage //The tongue projecitle. + name = "appendage" + icon_state = "laser" + nodamage = 1 + damage = 0 + eyeblur = 0 + check_armour = "bullet" //Not really needed, but whatever. + can_miss = FALSE //Let's not miss our tongue! + hitsound = 'sound/vore/sunesound/pred/schlorp.ogg' + hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg' + excavation_amount = 0 + hitscan_light_intensity = 0 + hitscan_light_range = 0 + muzzle_flash_intensity = 0 + muzzle_flash_range = 0 + impact_light_intensity = 0 + impact_light_range = 0 + light_range = 0 //No your tongue can not glow...For now. + light_power = 0 + light_on = 0 //NO LIGHT + combustion = FALSE //No, your tongue can't set the room on fire. + pass_flags = PASSTABLE + + muzzle_type = /obj/effect/projectile/muzzle/appendage + tracer_type = /obj/effect/projectile/tracer/appendage + impact_type = /obj/effect/projectile/impact/appendage + +/obj/item/projectile/beam/appendage/generate_hitscan_tracers() + if(firer) //This neat little code block allows for C O L O R A B L E tongues! Correction: 'Appendages' + if(istype(firer,/mob/living)) + var/mob/living/originator = firer + color = originator.appendage_color + ..() + +/obj/item/projectile/beam/appendage/on_hit(var/atom/target) + if(target == firer) //NO EATING YOURSELF + return + if(istype(target, /mob/living)) + var/mob/living/M = target + var/throw_range = get_dist(firer,M) + if(istype(firer, /mob/living)) //Let's check for any alt settings. Such as: User selected to be thrown at target. + var/mob/living/F = firer + if(F.appendage_alt_setting == 1) + F.throw_at(M, throw_range, firer.throw_speed, F) //Firer thrown at target. + F.updateicon() + return + if(istype(M)) + M.throw_at(firer, throw_range, M.throw_speed, firer) //Fun fact: living things have a throw_speed of 2. + M.updateicon() + return + else //Anything that isn't a /living + return + if(istype(target, /obj/item/)) //We hit an object? Pull it. This can only happen via admin shenanigans such as a gun being VV'd with this projectile. + var/obj/item/hit_object = target + if(hit_object.density || hit_object.anchored) + if(istype(firer, /mob/living)) + var/mob/living/originator = firer + originator.Weaken(2) //If you hit something dense or anchored, fall flat on your face. + originator.visible_message("\The [originator] trips over their self and falls flat on their face!", \ + "You trip over yourself and fall flat on your face!" ) + playsound(originator, "punch", 25, 1, -1) + return + else + hit_object.throw_at(firer, throw_range, hit_object.throw_speed, firer) + if(istype(target, /turf/simulated/wall) || istype(target, /obj/machinery/door) || istype(target, /obj/structure/window)) //This can happen normally due to odd terrain. For some reason, it seems to not actually interact with walls. + if(istype(firer, /mob/living)) + var/mob/living/originator = firer + originator.Weaken(2) //Hit a wall? Whoops! + originator.visible_message("\The [originator] trips over their self and falls flat on their face!", \ + "You trip over yourself and fall flat on your face!" ) + playsound(originator, "punch", 25, 1, -1) + return + else + return + + + +/obj/effect/projectile/muzzle/appendage + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "muzzle_appendage" + light_range = 0 + light_power = 0 + light_color = "#FF0D00" + +/obj/effect/projectile/tracer/appendage + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "appendage_beam" + light_range = 0 + light_power = 0 + light_color = "#FF0D00" //Doesn't matter. Not used. + +/obj/effect/projectile/impact/appendage + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "impact_appendage_combined" + light_range = 0 + light_power = 0 + light_color = "#FF0D00" +//LONG VORE ABILITY END + +/obj/item/weapon/gun/energy/gun/tongue //This is the 'tongue' gun for admin memery. + name = "tongue" + desc = "A tongue that can be used to grab things." + icon = 'icons/mob/dogborg_vr.dmi' + icon_state = "synthtongue" + item_state = "gun" + fire_delay = null + force = 0 + fire_delay = 1 //Adminspawn. No delay. + charge_cost = 0 //This is an adminspawn gun...No reason to force it to have a charge state. + + projectile_type = /obj/item/projectile/beam/appendage + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + modifystate = null + + + firemodes = list( + list(mode_name="vore", projectile_type=/obj/item/projectile/beam/appendage, modifystate=null, fire_sound='sound/vore/sunesound/pred/schlorp.ogg', charge_cost = 0),) + +/obj/item/weapon/gun/energy/gun/tongue/update_icon() //No updating the icon. + icon_state = "synthtongue" + return + +/obj/item/weapon/gun/energy/bfgtaser/tongue + name = "9000-series Ball Tongue Taser" + desc = "A banned riot control device." + slot_flags = SLOT_BELT|SLOT_BACK + projectile_type = /obj/item/projectile/bullet/BFGtaser/tongue + fire_delay = 20 + w_class = ITEMSIZE_LARGE + one_handed_penalty = 90 // The thing's heavy and huge. + accuracy = 45 + charge_cost = 2400 //yes, this bad boy empties an entire weapon cell in one shot. What of it? + +/obj/item/projectile/bullet/BFGtaser/tongue + name = "tongue ball" + hitsound = 'sound/vore/sunesound/pred/schlorp.ogg' + hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg' + zaptype = /obj/item/projectile/beam/appendage +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index ff6d6636ac..2c26069dff 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -25,6 +25,11 @@ permit_healbelly = client.prefs_vr.permit_healbelly noisy = client.prefs_vr.noisy selective_preference = client.prefs_vr.selective_preference +<<<<<<< HEAD +======= + appendage_color = client.prefs_vr.appendage_color + appendage_alt_setting = client.prefs_vr.appendage_alt_setting +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT drop_vore = client.prefs_vr.drop_vore stumble_vore = client.prefs_vr.stumble_vore diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 6e64db0d10..f555f7d28e 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -48,6 +48,11 @@ var/latejoin_prey = FALSE //CHOMPedit: If enabled, latejoiners can spawn ontop of and instantly eat the victim var/noisy_full = FALSE //CHOMPedit: Enables belching when a mob has overeaten var/selective_preference = DM_DEFAULT // Preference for selective bellymode +<<<<<<< HEAD +======= + var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait. + var/appendage_alt_setting = FALSE // Dictates if 'long_vore' user pulls prey to them or not. 1 = user thrown towards target. +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT var/regen_sounds = list( 'sound/effects/mob_effects/xenochimera/regen_1.ogg', 'sound/effects/mob_effects/xenochimera/regen_2.ogg', @@ -276,6 +281,11 @@ P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred P.allow_spontaneous_tf = src.allow_spontaneous_tf +<<<<<<< HEAD +======= + P.appendage_color = src.appendage_color + P.appendage_alt_setting = src.appendage_alt_setting +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT P.step_mechanics_pref = src.step_mechanics_pref P.pickup_pref = src.pickup_pref P.drop_vore = src.drop_vore @@ -329,6 +339,11 @@ can_be_drop_pred = P.can_be_drop_pred // allow_inbelly_spawning = P.allow_inbelly_spawning //CHOMP Removal: we have vore spawning at home. Actually if this were to be enabled, it would break anyway. Just leaving this here as a reference to it. allow_spontaneous_tf = P.allow_spontaneous_tf +<<<<<<< HEAD +======= + appendage_color = P.appendage_color + appendage_alt_setting = P.appendage_alt_setting +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT step_mechanics_pref = P.step_mechanics_pref pickup_pref = P.pickup_pref drop_vore = P.drop_vore diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 7089e4f896..7b746769a2 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -76,6 +76,11 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/list/belly_prefs = list() var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" +<<<<<<< HEAD +======= + var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait. + var/appendage_alt_setting = 0 //Decides if appendage user is thrown at target or not. +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT var/selective_preference = DM_DEFAULT @@ -182,6 +187,11 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] noisy = json_from_file["noisy"] +<<<<<<< HEAD +======= + appendage_color = json_from_file["appendage_color"] + appendage_alt_setting = json_from_file["appendage_alt_setting"] +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT selective_preference = json_from_file["selective_preference"] show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] @@ -228,6 +238,13 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE selective_preference = DM_DEFAULT if (isnull(noisy)) noisy = FALSE +<<<<<<< HEAD +======= + if (isnull(appendage_color)) + appendage_color = "#e03997" + if (isnull(appendage_alt_setting)) + appendage_alt_setting = 0 +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT if(isnull(show_vore_fx)) show_vore_fx = TRUE if(isnull(can_be_drop_prey)) @@ -309,6 +326,11 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, "noisy" = noisy, +<<<<<<< HEAD +======= + "appendage_color" = appendage_color, + "appendage_alt_setting" = appendage_alt_setting, +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT "selective_preference" = selective_preference, "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 80e9fb8058..0f67483c07 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -333,6 +333,11 @@ "latejoin_vore" = host.latejoin_vore, //CHOMPedit "latejoin_prey" = host.latejoin_prey, //CHOMPedit "allow_spontaneous_tf" = host.allow_spontaneous_tf, +<<<<<<< HEAD +======= + "appendage_color" = host.appendage_color, + "appendage_alt_setting" = host.appendage_alt_setting, +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT "step_mechanics_active" = host.step_mechanics_pref, "pickup_mechanics_active" = host.pickup_pref, "noisy" = host.noisy, diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm index 65f997ad1a..83db1f63c1 100644 --- a/code/modules/vore/mouseray.dm +++ b/code/modules/vore/mouseray.dm @@ -230,6 +230,11 @@ new_mob.permit_healbelly = permit_healbelly new_mob.noisy = noisy new_mob.selective_preference = selective_preference +<<<<<<< HEAD +======= + new_mob.appendage_color = appendage_color + new_mob.appendage_alt_setting = appendage_alt_setting +>>>>>>> 6285a02b37... Merge pull request #13731 from Cameron653/TONGUE_EDIT new_mob.drop_vore = drop_vore new_mob.stumble_vore = stumble_vore new_mob.slip_vore = slip_vore From 74026e602263c1f486b046e2c425813ba49a5af2 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 23 Sep 2022 19:08:30 -0400 Subject: [PATCH 2/2] powder that makes you say yes --- .../human/species/station/station_special_abilities_vr.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index f0dafec0a6..28d4734749 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -1198,7 +1198,6 @@ appendage_alt_setting = 0 else appendage_alt_setting = 1 - else var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. @@ -1377,4 +1376,4 @@ name = "tongue ball" hitsound = 'sound/vore/sunesound/pred/schlorp.ogg' hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg' - zaptype = /obj/item/projectile/beam/appendage \ No newline at end of file + zaptype = /obj/item/projectile/beam/appendage