Merge pull request #3229 from Verkister/voars

Vore fixes and additions. (gurgledeath item drop, vorepanel load button, corrupt prettyboi)
This commit is contained in:
Aronai Sieyes
2018-03-16 20:55:39 -04:00
committed by GitHub
5 changed files with 55 additions and 25 deletions
@@ -1,6 +1,6 @@
/mob/living/simple_animal/hostile/badboi
name = "corrupt hound"
desc = "Good boy machine broke. At least they haven't stripped the planet down to bare minerals yet."
desc = "Good boy machine broke. This is definitely no good news for the organic lifeforms in vicinity."
icon = 'icons/mob/vore64x32.dmi'
icon_state = "badboi"
icon_living = "badboi"
@@ -57,6 +57,22 @@
loot_list = list(/obj/item/borg/upgrade/syndicate = 6, /obj/item/borg/upgrade/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6)
/mob/living/simple_animal/hostile/badboi/prettyboi
name = "corrupt corrupt hound"
desc = "Bad boy machine broke as well. Seems an attempt was made to achieve a less threatening look, and this one is definitely having some conflicting feelings about it."
icon_state = "prettyboi"
icon_living = "prettyboi"
icon_dead = "prettyboi-dead"
icon_rest = "prettyboi_rest"
speak = list("I FEEL SOFT.","FEED ME!","Feelin' fine... So fine!","F-F-F-F-darn.","Delicious!","Still craving meat...","PET ME!","I am become softness.","I AM BIG MEAN HUG MACHINE!","Honk...")
speak_emote = list("growls", "declares", "groans", "distorts")
emote_hear = list("jitters and snaps.", "lets out some awkwardly distorted kitten noises.", "awoos mechanically", "growls.", "emits some soft distorted melody.", "gurgles ferociously.", "lets out a distorted beep.", "borks.", "lets out a broken howl.")
emote_see = list("stares ferociously.", "snarls.", "jitters and snaps.", "convulses.", "suddenly hugs something unseen.", "appears to howl unaudibly.", "nuzzles at something unseen.", "dissociates for a moment.", "twitches.")
say_maybe_target = list("MEAT?", "NEW FRIEND?", "WHAT!", "Not again. NOT AGAIN!", "FRIEND?")
say_got_target = list("HERE COMES BIG MEAN HUG MACHINE!", "I'LL BE GENTLE!", "FUEL ME FRIEND!", "I*M SO SORRY!", "YUMMY TREAT DETECTED!", "LOVE ME!", "Not again. NOT AGAIN!")
/mob/living/simple_animal/hostile/badboi/isSynthetic()
return TRUE
+13 -10
View File
@@ -173,14 +173,14 @@
// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
// Returns the number of mobs so released.
/obj/belly/proc/release_all_contents(var/include_absorbed = FALSE, var/silent = FALSE)
//Don't bother if we don't have contents
if(!contents.len)
return 0
//Find where we should drop things into (certainly not the owner)
var/count = 0
//Iterate over contents and move them all
for(var/thing in contents)
var/atom/movable/AM = thing
@@ -189,18 +189,18 @@
if(L.absorbed && !include_absorbed)
continue
count += release_specific_contents(AM, silent = TRUE)
//Clean up our own business
items_preserved.Cut()
if(isanimal(owner))
owner.update_icons()
//Print notifications/sound if necessary
if(!silent)
owner.visible_message("<font color='green'><b>[owner] expels everything from their [lowertext(name)]!</b></font>")
owner.visible_message("<font color='green'><b>[owner] expels everything from their [lowertext(name)]!</b></font>")
if(release_sound)
playsound(src, 'sound/effects/splat.ogg', vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
return count
// Release a specific atom from the contents of this belly into the owning mob's location.
@@ -213,7 +213,7 @@
//Place them into our drop_location
M.forceMove(drop_location())
items_preserved -= M
//Special treatment for absorbed prey
if(istype(M,/mob/living))
var/mob/living/ML = M
@@ -232,13 +232,13 @@
//Clean up our own business
if(isanimal(owner))
owner.update_icons()
//Print notifications/sound if necessary
if(!silent)
owner.visible_message("<font color='green'><b>[owner] expels [M] from their [lowertext(name)]!</b></font>")
if(release_sound)
playsound(src, 'sound/effects/splat.ogg', vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
return 1
// Actually perform the mechanics of devouring the tasty prey.
@@ -441,6 +441,9 @@
/obj/belly/AllowDrop()
return TRUE
/obj/belly/onDropInto(var/atom/movable/AM)
return null
//Handle a mob struggling
// Called from /mob/living/carbon/relaymove()
/obj/belly/proc/relay_resist(var/mob/living/R)
+9 -8
View File
@@ -51,7 +51,7 @@
B.name = "Stomach"
B.desc = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [M.name]."
B.can_taste = 1
//Return 1 to hook-caller
return 1
@@ -147,7 +147,7 @@
var/obj/belly/B = loc
B.relay_resist(src)
return TRUE //resist() on living does this TRUE thing.
//Other overridden resists go here
return 0
@@ -192,7 +192,7 @@
for(var/belly in src.vore_organs)
var/obj/belly/B = belly
serialized += list(B.serialize()) //Can't add a list as an object to another list in Byond. Thanks.
P.belly_prefs = serialized
return 1
@@ -213,6 +213,7 @@
can_be_drop_prey = P.can_be_drop_prey
can_be_drop_pred = P.can_be_drop_pred
release_vore_contents(silent = TRUE)
vore_organs.Cut()
for(var/entry in P.belly_prefs)
list_to_object(entry,src)
@@ -321,7 +322,7 @@
for(var/mob/living/simple_animal/SA in range(10))
SA.prey_excludes[src] = world.time
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[B.owner.x];Y=[B.owner.y];Z=[B.owner.z]'>JMP</a>" : "null"])")
if(isanimal(B.owner))
var/mob/living/simple_animal/SA = B.owner
SA.update_icons()
@@ -465,7 +466,7 @@
to_chat(src,"<font color='blue'>You manage to escape \the [C]!</font>")
to_chat(H,"<font color='red'>Somone has climbed out of your [C]!</font>")
forceMove(H.loc)
else //Being held by a human
to_chat(src,"<font color='blue'>You start to climb out of \the [C]!</font>")
to_chat(H,"<font color='red'>Something is trying to climb out of your [C]!</font>")
@@ -522,17 +523,17 @@
if(!vore_selected)
to_chat(src,"<span class='warning'>You either don't have a belly selected, or don't have a belly!</span>")
return
var/obj/item/I = get_active_hand()
if(!I)
to_chat(src, "<span class='notice'>You are not holding anything.</span>")
return
if(is_type_in_list(I,edible_trash))
drop_item()
I.forceMove(vore_selected)
updateVRPanel()
if(istype(I,/obj/item/device/flashlight/flare) || istype(I,/obj/item/weapon/flame/match) || istype(I,/obj/item/weapon/storage/box/matches))
to_chat(src, "<span class='notice'>You can taste the flavor of spicy cardboard.</span>")
else if(istype(I,/obj/item/device/flashlight/glowstick))
+16 -6
View File
@@ -56,7 +56,7 @@
/datum/vore_look/proc/gen_ui(var/mob/living/user)
var/dat
var/atom/userloc = user.loc
if (isbelly(userloc))
var/obj/belly/inside_belly = userloc
@@ -288,6 +288,7 @@
//Under the last HR, save and stuff.
dat += "<a href='?src=\ref[src];saveprefs=1'>Save Prefs</a>"
dat += "<a href='?src=\ref[src];refresh=1'>Refresh</a>"
dat += "<a href='?src=\ref[src];applyprefs=1'>Reload Slot Prefs</a>"
//Returns the dat html to the vore_look
return dat
@@ -410,7 +411,7 @@
var/obj/belly/choice = input("Move all where?","Select Belly") as null|anything in user.vore_organs
if(!choice)
return 0
for(var/atom/movable/tgt in selected)
to_chat(tgt,"<span class='warning'>You're squished from [user]'s [lowertext(selected)] to their [lowertext(choice.name)]!</span>")
selected.transfer_contents(tgt, choice, 1)
@@ -602,7 +603,7 @@
to_chat(user,"<span class='notice'>Invalid size.</span>")
else if(new_bulge)
selected.bulge_size = (new_bulge/100)
if(href_list["b_grow_shrink"])
var/new_grow = input(user, "Choose the size that prey will be grown/shrunk to, ranging from 25% to 200%", "Set Growth Shrink Size.", selected.shrink_grow_size) as num|null
if (new_grow == null)
@@ -679,7 +680,7 @@
var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel")
if(!alert == "Delete")
return 0
var/failure_msg = ""
var/dest_for //Check to see if it's the destination of another vore organ.
@@ -696,7 +697,7 @@
failure_msg += "This belly is marked as undeletable. "
if(user.vore_organs.len == 1)
failure_msg += "You must have at least one belly. "
if(failure_msg)
alert(user,failure_msg,"Error!")
return 0
@@ -711,11 +712,20 @@
else
to_chat(user,"<span class='notice'>Virgo-specific preferences saved!</span>")
if(href_list["applyprefs"])
var/alert = alert("Are you sure you want to reload character slot preferences? This will remove your current vore organs and eject their contents.","Confirmation","Reload","Cancel")
if(!alert == "Reload")
return 0
if(!user.apply_vore_prefs())
alert("ERROR: Virgo-specific preferences failed to apply!","Error")
else
to_chat(user,"<span class='notice'>Virgo-specific preferences applied from active slot!</span>")
if(href_list["setflavor"])
var/new_flavor = html_encode(input(usr,"What your character tastes like (40ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",user.vore_taste) as text|null)
if(!new_flavor)
return 0
new_flavor = readd_quotes(new_flavor)
if(length(new_flavor) > FLAVOR_MAX)
alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error!")