From 8d84299d6de66c4071f19ca57272095d5a514b46 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Wed, 27 Mar 2019 03:18:41 -0500 Subject: [PATCH] Feeding works! aaaaayyy. Didn't have to martial art it either --- code/modules/mob/living/living_defense.dm | 14 ++++++++ .../code/modules/mob/living/carbon/carbon.dm | 2 -- .../mob/living/carbon/human/human_defense.dm | 2 +- .../code/modules/vore/eating/belly_obj_vr.dm | 15 +++++++++ .../code/modules/vore/eating/living_vr.dm | 33 +++++++++++-------- .../code/modules/vore/eating/vorepanel_vr.dm | 3 +- 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index f5b44db70f..dddbe18666 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -129,6 +129,18 @@ /mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = 0) if(user == src || anchored || !isturf(user.loc)) return FALSE + + if(user.pulling && user.grab_state == GRAB_AGGRESSIVE && user.voremode) + if(ismob(user.pulling)) + var/mob/P = user.pulling + if(P != src) + to_chat(world, "grabbedby check : [user], [P], [src] (target).") + user.vore_attack(user, P, src) //feed grabbed to other + else + to_chat(world, "grabbedby check : [user], [P], [src] (target).") + user.vore_attack(user, P, src) //feed self to grabbed + return + if(!user.pulling || user.pulling != src) user.start_pulling(src, supress_message) return @@ -163,6 +175,8 @@ return 0 if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state || user.a_intent != INTENT_GRAB) return 0 + if(user.voremode && user.grab_state == GRAB_AGGRESSIVE) + return 0 user.grab_state++ switch(user.grab_state) if(GRAB_AGGRESSIVE) diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm index 95ebe54b29..75a482745a 100644 --- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm +++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm @@ -43,8 +43,6 @@ mob/living/carbon/proc/toggle_vore_mode() if(combatmode) return FALSE //let's not override the main draw of the game these days voremode = !voremode - if(client) - client.show_popup_menus = !voremode // it's the RIGHT way to nom. gettit if(hud_used && hud_used.static_inventory) for(var/obj/screen/voretoggle/selector in hud_used.static_inventory) selector.rebaseintomygut(src) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm index c1fc6623de..23add047ca 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm @@ -1,6 +1,6 @@ /mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) - vore_attack(user, pulling) + vore_attack(user, pulling, user) //feeding prey to self else ..() diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm index 142e5880d5..87c4ba495c 100644 --- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm +++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm @@ -184,6 +184,10 @@ // Returns the number of mobs so released. /obj/belly/proc/release_all_contents(var/include_absorbed = FALSE, var/silent = FALSE) var/atom/destination = drop_location() + //Don't bother if we don't have contents + if(!contents.len) + return 0 + var/count = 0 for(var/thing in contents) var/atom/movable/AM = thing @@ -204,6 +208,12 @@ for(var/mob/M in get_hearers_in_view(2, get_turf(owner))) if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) playsound(get_turf(owner),"[src.release_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) + + //Clean up our own business + items_preserved.Cut() + if(isanimal(owner)) + owner.update_icons() + if(!silent) owner.visible_message("[owner] expels everything from their [lowertext(name)]!") items_preserved.Cut() @@ -244,6 +254,11 @@ if(P.absorbed) absorbed_count++ Pred.reagents.trans_to(Prey, Pred.reagents.total_volume / absorbed_count) + + //Clean up our own business + if(isanimal(owner)) + owner.update_icons() + if(!silent) owner.visible_message("[owner] expels [M] from their [lowertext(name)]!") owner.update_icons() diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm index 45f5667bcb..cfbdcd49fa 100644 --- a/modular_citadel/code/modules/vore/eating/living_vr.dm +++ b/modular_citadel/code/modules/vore/eating/living_vr.dm @@ -81,35 +81,38 @@ if(!user || !prey || !pred) return - if(prey == src) //you click your target - if(!src.feeding) + if(!isliving(pred)) //no badmin, you can't feed people to ghosts or objects. + return + + if(pred == prey) //you click your target + if(!pred.feeding) to_chat(user, "They aren't able to be fed.") - to_chat(src, "[user] tried to feed you themselves, but you aren't voracious enough to be fed.") + to_chat(pred, "[user] tried to feed you themselves, but you aren't voracious enough to be fed.") return - if(!is_vore_predator(prey)) + if(!is_vore_predator(pred)) to_chat(user, "They aren't voracious enough.") return - feed_self_to_grabbed(user, src) + feed_self_to_grabbed(user, pred) - if(user == src) //you click yourself + else if(pred == user) //you click yourself if(!is_vore_predator(src)) to_chat(user, "You aren't voracious enough.") return - user.feed_grabbed_to_self(src, prey) + feed_grabbed_to_self(user, prey) else // click someone other than you/prey - if(!src.feeding) + if(!pred.feeding) to_chat(user, "They aren't voracious enough to be fed.") - to_chat(src, "[user] tried to feed you [prey], but you aren't voracious enough to be fed.") + to_chat(pred, "[user] tried to feed you [prey], but you aren't voracious enough to be fed.") return if(!prey.feeding) to_chat(user, "They aren't able to be fed to someone.") - to_chat(prey, "[user] tried to feed you to [src], but you aren't able to be fed to them.") + to_chat(prey, "[user] tried to feed you to [pred], but you aren't able to be fed to them.") return - if(!is_vore_predator(src)) + if(!is_vore_predator(pred)) to_chat(user, "They aren't voracious enough.") return - feed_grabbed_to_other(user, prey, src) + feed_grabbed_to_other(user, prey, pred) // // Eating procs depending on who clicked what // @@ -330,9 +333,9 @@ return //Actual escaping forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave. - if(is_blind(src) && !has_trait(TRAIT_BLIND)) - src.adjust_blindness(-1) + src.cure_blind("belly_[REF(src)]") src.stop_sound_channel(CHANNEL_PREYLOOP) + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey) for(var/mob/living/simple_animal/SA in range(10)) SA.prey_excludes[src] = world.time @@ -384,6 +387,7 @@ P.digestable = src.digestable P.devourable = src.devourable + P.feeding = src.feeding P.vore_taste = src.vore_taste var/list/serialized = list() @@ -407,6 +411,7 @@ digestable = P.digestable devourable = P.devourable + feeding = P.feeding vore_taste = P.vore_taste release_vore_contents(silent = TRUE) diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm index 2125e6f0cb..1a1ec27093 100644 --- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm @@ -56,7 +56,8 @@ /datum/vore_look/proc/gen_vui(var/mob/living/user) var/dat - + dat += "Remember to toggle the vore mode, it's to the left of your combat toggle. Open mouth means you're voracious!
" + dat += "
" var/atom/userloc = user.loc if (isbelly(userloc)) var/obj/belly/inside_belly = userloc