Adds some new gurglemodes and other tweaks

-Adds numbing item friendly gurglemode.
-Adds item friendly strip digestion. (still soggy though)
-Adds strip absorption. (absorb naked victim, leave their stuff in gut)
-Makes absorption mute the drained absorbee's hunger noises if enabled.
-Makes draining and absorption speeds scale with gurgledamage settings.
-Also makes them affect borg charges.
-Disables item friendly gurgles completely ruining IDs, the likely most important item the prey wants spared when suggesting the mode. (still messy though)
-Makes borg sleeperbelly sounds use the new pref-respecting noise system.
-Adds a finisher gurgle and ding sound to finished self-clean cycle.
This commit is contained in:
Verkister
2018-04-10 10:00:35 +03:00
parent e97f0290b2
commit 6b535efd27
6 changed files with 80 additions and 43 deletions
@@ -22,6 +22,7 @@
var/synced = FALSE
var/startdrain = 500
var/max_item_count = 1
var/gulpsound = 'sound/vore/gulp.ogg'
/obj/item/device/dogborg/sleeper/New()
..()
@@ -55,7 +56,7 @@
if(do_after(user, 30, target) && length(contents) < max_item_count)
target.forceMove(src)
user.visible_message("<span class='warning'>[hound.name]'s internal analyzer groans lightly as [target.name] slips inside.</span>", "<span class='notice'>Your internal analyzer groans lightly as [target] slips inside.</span>")
playsound(hound, 'sound/vore/gulp.ogg', 30, 1)
playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
if(istype(target,/obj/item))
var/obj/item/tech_item = target
for(var/T in tech_item.origin_tech)
@@ -79,7 +80,7 @@
trashman.reset_view(src)
processing_objects |= src
user.visible_message("<span class='warning'>[hound.name]'s internal analyzer groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your internal analyzer groans lightly as [trashman] slips inside.</span>")
playsound(hound, 'sound/vore/gulp.ogg', 80, 1)
playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
update_patient()
if(UI_open == TRUE)
sleeperUI(usr)
@@ -96,7 +97,7 @@
if(do_after(user, 30, target) && length(contents) < max_item_count)
target.forceMove(src)
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [target.name] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [target] slips inside.</span>")
playsound(hound, 'sound/vore/gulp.ogg', 30, 1)
playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
update_patient()
if(UI_open == TRUE)
sleeperUI(usr)
@@ -109,7 +110,7 @@
trashmouse.forceMove(src)
trashmouse.reset_view(src)
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashmouse] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashmouse] slips inside.</span>")
playsound(hound, 'sound/vore/gulp.ogg', 30, 1)
playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
update_patient()
if(UI_open == TRUE)
sleeperUI(usr)
@@ -129,7 +130,7 @@
trashman.reset_view(src)
processing_objects |= src
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
playsound(hound, 'sound/vore/gulp.ogg', 80, 1)
playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
update_patient()
if(UI_open == TRUE)
sleeperUI(usr)
@@ -157,7 +158,7 @@
processing_objects |= src
user.visible_message("<span class='warning'>[hound.name]'s medical pod lights up as [H.name] slips inside into their [src.name].</span>", "<span class='notice'>Your medical pod lights up as [H] slips into your [src]. Life support functions engaged.</span>")
message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[hound.x];Y=[hound.y];Z=[hound.z]'>JMP</a>" : "null"])")
playsound(hound, 'sound/vore/gulp.ogg', 80, 1)
playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
if(UI_open == TRUE)
sleeperUI(usr)
@@ -462,9 +463,22 @@
//Belly is entirely empty
if(!length(contents))
var/finisher = pick(
'sound/vore/death1.ogg',
'sound/vore/death2.ogg',
'sound/vore/death3.ogg',
'sound/vore/death4.ogg',
'sound/vore/death5.ogg',
'sound/vore/death6.ogg',
'sound/vore/death7.ogg',
'sound/vore/death8.ogg',
'sound/vore/death9.ogg',
'sound/vore/death10.ogg')
playsound(hound, finisher, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises)
to_chat(hound, "<span class='notice'>Your [src.name] is now clean. Ending self-cleaning cycle.</span>")
cleaning = 0
update_patient()
playsound(hound, 'sound/machines/ding.ogg', 50, 1)
return
if(prob(20))
@@ -481,10 +495,7 @@
'sound/vore/digest10.ogg',
'sound/vore/digest11.ogg',
'sound/vore/digest12.ogg')
for(var/mob/outhearer in range(1,hound))
outhearer << sound(churnsound)
for(var/mob/inhearer in contents)
inhearer << sound(churnsound)
playsound(hound, churnsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises)
//If the timing is right, and there are items to be touched
if(air_master.current_cycle%3==1 && length(touchable_items))
@@ -523,9 +534,7 @@
'sound/vore/death8.ogg',
'sound/vore/death9.ogg',
'sound/vore/death10.ogg')
for(var/mob/hearer in range(1,src.hound))
hearer << deathsound
T << deathsound
playsound(hound, deathsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises)
if(is_vore_predator(T))
for(var/belly in T.vore_organs)
var/obj/belly/B = belly
+3 -1
View File
@@ -34,7 +34,7 @@
var/release_sound = TRUE // Boolean for now, maybe replace with something else later
//I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ITEMWEAK,DM_STRIPDIGEST,DM_HEAL,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_DIGEST_NUMB) // Possible digest modes
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ITEMWEAK,DM_DIGEST_NUMB,DM_ITEMWEAK_NUMB,DM_STRIPDIGEST,DM_STRIP_ITEMWEAK,DM_HEAL,DM_ABSORB,DM_ABSORB_STRIP,DM_DRAIN,DM_UNABSORB,DM_SHRINK,DM_GROW,DM_SIZE_STEAL) // Possible digest modes
var/tmp/static/list/transform_modes = list(DM_TRANSFORM_MALE,DM_TRANSFORM_FEMALE,DM_TRANSFORM_KEEP_GENDER,DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR,DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG,DM_TRANSFORM_REPLICA,DM_TRANSFORM_REPLICA_EGG,DM_TRANSFORM_KEEP_GENDER_EGG,DM_TRANSFORM_MALE_EGG,DM_TRANSFORM_FEMALE_EGG, DM_EGG)
var/tmp/static/list/slots = list(slot_back,slot_handcuffed,slot_l_store,slot_r_store,slot_wear_mask,slot_l_hand,slot_r_hand,slot_wear_id,slot_glasses,slot_gloves,slot_head,slot_shoes,slot_belt,slot_wear_suit,slot_w_uniform,slot_s_store,slot_l_ear,slot_r_ear)
@@ -383,6 +383,8 @@
M.absorbed = 1
to_chat(M,"<span class='notice'>[owner]'s [lowertext(name)] absorbs your body, making you part of them.</span>")
to_chat(owner,"<span class='notice'>Your [lowertext(name)] absorbs [M]'s body, making them part of you.</span>")
if(M.noisy) //Mute drained absorbee hunger if enabled.
M.noisy = FALSE
if(ishuman(M) && ishuman(owner))
var/mob/living/carbon/human/Prey = M
+47 -26
View File
@@ -20,7 +20,7 @@
var/list/EL = emote_lists[digest_mode]
if(LAZYLEN(EL))
for(var/mob/living/M in contents)
if(M.digestable || !(digest_mode == DM_DIGEST || digest_mode == DM_DIGEST_NUMB || digest_mode == DM_ITEMWEAK)) // don't give digesty messages to indigestible people
if(M.digestable || !(digest_mode == DM_DIGEST || digest_mode == DM_DIGEST_NUMB || digest_mode == DM_ITEMWEAK || digest_mode == DM_ITEMWEAK_NUMB)) // don't give digesty messages to indigestible people
to_chat(M,"<span class='notice'>[pick(EL)]</span>")
/////////////////////////// Exit Early ////////////////////////////
@@ -38,7 +38,7 @@
return SSBELLIES_PROCESSED //Pretty boring, huh
//////////////////////////// DM_DIGEST ////////////////////////////
else if(digest_mode == DM_DIGEST || digest_mode == DM_DIGEST_NUMB || digest_mode == DM_ITEMWEAK)
else if(digest_mode == DM_DIGEST || digest_mode == DM_DIGEST_NUMB || digest_mode == DM_ITEMWEAK || digest_mode == DM_ITEMWEAK_NUMB)
if(prob(50)) //Was SO OFTEN. AAAA.
play_sound = pick(digestion_sounds)
@@ -71,7 +71,7 @@
owner.update_icons()
continue
if(digest_mode == DM_DIGEST_NUMB && ishuman(M))
if(digest_mode == DM_DIGEST_NUMB || digest_mode == DM_ITEMWEAK_NUMB && ishuman(M))
var/mob/living/carbon/human/H = M
if(H.bloodstr.get_reagent_amount("numbenzyme") < 5)
H.bloodstr.add_reagent("numbenzyme",10)
@@ -94,7 +94,26 @@
//Contaminate or gurgle items
var/obj/item/T = pick(touchable_items)
if(istype(T))
if(digest_mode == DM_ITEMWEAK)
if(digest_mode == DM_ITEMWEAK || digest_mode == DM_ITEMWEAK_NUMB)
if(istype(T,/obj/item/weapon/reagent_containers/food) || istype(T,/obj/item/weapon/holder) || istype(T,/obj/item/organ))
digest_item(T)
else
T.gurgle_contaminate(contents, owner)
items_preserved |= T
else
digest_item(T)
owner.updateVRPanel()
//////////////////////////// DM_STRIPDIGEST ////////////////////////////
else if(digest_mode == DM_STRIPDIGEST || digest_mode == DM_STRIP_ITEMWEAK) // Only gurgle the gear off your prey.
if(prob(50))
play_sound = pick(digestion_sounds)
// Handle loose items first.
var/obj/item/T = pick(touchable_items)
if(istype(T))
if(digest_mode == DM_STRIP_ITEMWEAK)
if(istype(T,/obj/item/weapon/reagent_containers/food) || istype(T,/obj/item/weapon/holder) || istype(T,/obj/item/organ))
digest_item(T)
else
@@ -103,19 +122,6 @@
else
digest_item(T)
owner.updateVRPanel()
//////////////////////////// DM_STRIPDIGEST ////////////////////////////
else if(digest_mode == DM_STRIPDIGEST) // Only gurgle the gear off your prey.
if(prob(50))
play_sound = pick(digestion_sounds)
// Handle loose items first.
var/obj/item/T = pick(touchable_items)
if(istype(T))
digest_item(T)
for(var/mob/living/carbon/human/M in contents)
if (M.absorbed)
continue
@@ -123,14 +129,20 @@
var/obj/item/thingy = M.get_equipped_item(slot = slot)
if(thingy)
M.unEquip(thingy,force = TRUE)
digest_item(thingy)
if(digest_mode == DM_STRIP_ITEMWEAK)
if(istype(thingy,/obj/item/weapon/reagent_containers/food) || istype(thingy,/obj/item/weapon/holder) || istype(thingy,/obj/item/organ))
digest_item(thingy)
else
thingy.gurgle_contaminate(contents, owner)
items_preserved |= thingy
else
digest_item(T)
break
M.updateVRPanel()
owner.updateVRPanel()
//////////////////////////// DM_ABSORB ////////////////////////////
else if(digest_mode == DM_ABSORB)
else if(digest_mode == DM_ABSORB || digest_mode == DM_ABSORB_STRIP)
for (var/mob/living/M in contents)
@@ -141,10 +153,17 @@
continue
if(M.nutrition >= 100) //Drain them until there's no nutrients left. Slowly "absorb" them.
var/oldnutrition = (M.nutrition * 0.05)
M.nutrition = (M.nutrition * 0.95)
owner.nutrition += oldnutrition
M.nutrition -= digest_brute+digest_burn
owner.nutrition += digest_brute+digest_burn
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
R.cell.charge += 10*(digest_brute+digest_burn)
else if(M.nutrition < 100) //When they're finally drained.
if(digest_mode == DM_ABSORB_STRIP)
for(var/slot in slots)
var/obj/item/thingy = M.get_equipped_item(slot = slot)
if(thingy)
M.unEquip(thingy,force = TRUE)
absorb_living(M)
//////////////////////////// DM_UNABSORB ////////////////////////////
@@ -166,9 +185,11 @@
play_sound = pick(digestion_sounds)
if(M.nutrition >= 100) //Drain them until there's no nutrients left.
var/oldnutrition = (M.nutrition * 0.05)
M.nutrition = (M.nutrition * 0.95)
owner.nutrition += oldnutrition
M.nutrition -= digest_brute+digest_burn
owner.nutrition += digest_brute+digest_burn
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
R.cell.charge += 10*(digest_brute+digest_burn)
//////////////////////////// DM_SHRINK ////////////////////////////
else if(digest_mode == DM_SHRINK)
+2 -2
View File
@@ -93,9 +93,9 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi')
//////////////
// Special handling of gurgle_contaminate
//////////////
/obj/item/weapon/card/id/gurgle_contaminate(var/atom/movable/item_storage = null)
/*/obj/item/weapon/card/id/gurgle_contaminate(var/atom/movable/item_storage = null)
digest_act(item_storage) //Digesting these anyway
return TRUE
return TRUE*/
/obj/item/weapon/reagent_containers/food/gurgle_contaminate(var/atom/movable/item_storage = null)
digest_act(item_storage)
+2
View File
@@ -118,6 +118,8 @@
spanstyle = "color:green;"
if(DM_ABSORB)
spanstyle = "color:purple;"
if(DM_ABSORB_STRIP)
spanstyle = "color:purple;"
if(DM_DRAIN)
spanstyle = "color:purple;"
if(DM_SHRINK)