mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Merge pull request #1221 from CHOMPStationBot/upstream-merge-9622
[MIRROR] New advanced Egg Release mechanics.
This commit is contained in:
@@ -108,30 +108,66 @@ var/global/list/fancy_release_sounds = list(
|
||||
)
|
||||
|
||||
var/global/list/global_vore_egg_types = list(
|
||||
"Unathi" = UNATHI_EGG,
|
||||
"Tajaran" = TAJARAN_EGG,
|
||||
"Akula" = AKULA_EGG,
|
||||
"Skrell" = SKRELL_EGG,
|
||||
"Nevrean" = NEVREAN_EGG,
|
||||
"Sergal" = SERGAL_EGG,
|
||||
"Human" = HUMAN_EGG,
|
||||
"Slime" = SLIME_EGG,
|
||||
"Egg" = EGG_EGG,
|
||||
"Xenochimera" = XENOCHIMERA_EGG,
|
||||
"Xenomorph" = XENOMORPH_EGG)
|
||||
"Unathi",
|
||||
"Tajara",
|
||||
"Akula",
|
||||
"Skrell",
|
||||
"Sergal",
|
||||
"Nevrean",
|
||||
"Human",
|
||||
"Slime",
|
||||
"Egg",
|
||||
"Xenochimera",
|
||||
"Xenomorph",
|
||||
"Chocolate",
|
||||
"Boney",
|
||||
"Slime glob",
|
||||
"Chicken",
|
||||
"Synthetic",
|
||||
"Cooking error",
|
||||
"Escape pod",
|
||||
"Web cocoon",
|
||||
"Bug cocoon",
|
||||
"Rock",
|
||||
"Yellow",
|
||||
"Blue",
|
||||
"Green",
|
||||
"Orange",
|
||||
"Purple",
|
||||
"Red",
|
||||
"Rainbow",
|
||||
"Spotted pink")
|
||||
|
||||
var/global/list/tf_vore_egg_types = list(
|
||||
"Unathi" = /obj/structure/closet/secure_closet/egg/unathi,
|
||||
"Tajara" = /obj/structure/closet/secure_closet/egg/tajaran,
|
||||
"Akula" = /obj/structure/closet/secure_closet/egg/shark,
|
||||
"Skrell" = /obj/structure/closet/secure_closet/egg/skrell,
|
||||
"Sergal" = /obj/structure/closet/secure_closet/egg/sergal,
|
||||
"Nevrean" = /obj/structure/closet/secure_closet/egg/nevrean,
|
||||
"Human" = /obj/structure/closet/secure_closet/egg/human,
|
||||
"Slime" = /obj/structure/closet/secure_closet/egg/slime,
|
||||
"Egg" = /obj/structure/closet/secure_closet/egg,
|
||||
"Xenochimera" = /obj/structure/closet/secure_closet/egg/scree,
|
||||
"Xenomorph" = /obj/structure/closet/secure_closet/egg/xenomorph)
|
||||
"Unathi" = /obj/item/weapon/storage/vore_egg/unathi,
|
||||
"Tajara" = /obj/item/weapon/storage/vore_egg/tajaran,
|
||||
"Akula" = /obj/item/weapon/storage/vore_egg/shark,
|
||||
"Skrell" = /obj/item/weapon/storage/vore_egg/skrell,
|
||||
"Sergal" = /obj/item/weapon/storage/vore_egg/sergal,
|
||||
"Nevrean" = /obj/item/weapon/storage/vore_egg/nevrean,
|
||||
"Human" = /obj/item/weapon/storage/vore_egg/human,
|
||||
"Slime" = /obj/item/weapon/storage/vore_egg/slime,
|
||||
"Egg" = /obj/item/weapon/storage/vore_egg,
|
||||
"Xenochimera" = /obj/item/weapon/storage/vore_egg/scree,
|
||||
"Xenomorph" = /obj/item/weapon/storage/vore_egg/xenomorph,
|
||||
"Chocolate" = /obj/item/weapon/storage/vore_egg/chocolate,
|
||||
"Boney" = /obj/item/weapon/storage/vore_egg/owlpellet,
|
||||
"Slime glob" = /obj/item/weapon/storage/vore_egg/slimeglob,
|
||||
"Chicken" = /obj/item/weapon/storage/vore_egg/chicken,
|
||||
"Synthetic" = /obj/item/weapon/storage/vore_egg/synthetic,
|
||||
"Cooking error" = /obj/item/weapon/storage/vore_egg/badrecipe,
|
||||
"Escape pod" = /obj/item/weapon/storage/vore_egg/escapepod,
|
||||
"Web cocoon" = /obj/item/weapon/storage/vore_egg/cocoon,
|
||||
"Bug cocoon" = /obj/item/weapon/storage/vore_egg/bugcocoon,
|
||||
"Rock" = /obj/item/weapon/storage/vore_egg/rock,
|
||||
"Yellow" = /obj/item/weapon/storage/vore_egg/yellow,
|
||||
"Blue" = /obj/item/weapon/storage/vore_egg/blue,
|
||||
"Green" = /obj/item/weapon/storage/vore_egg/green,
|
||||
"Orange" = /obj/item/weapon/storage/vore_egg/orange,
|
||||
"Purple" = /obj/item/weapon/storage/vore_egg/purple,
|
||||
"Red" = /obj/item/weapon/storage/vore_egg/red,
|
||||
"Rainbow" = /obj/item/weapon/storage/vore_egg/rainbow,
|
||||
"Spotted pink" = /obj/item/weapon/storage/vore_egg/pinkspots)
|
||||
|
||||
var/global/list/edible_trash = list(/obj/item/broken_device,
|
||||
/obj/item/clothing/accessory/collar, //TFF 10/7/19 - add option to nom collars,
|
||||
@@ -182,7 +218,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/fancy/crayons,
|
||||
/obj/item/weapon/storage/fancy/egg_box,
|
||||
/obj/item/weapon/storage/wallet)
|
||||
/obj/item/weapon/storage/wallet,
|
||||
/obj/item/weapon/storage/vore_egg)
|
||||
|
||||
var/global/list/contamination_flavors = list(
|
||||
"Generic" = contamination_flavors_generic,
|
||||
|
||||
182
code/game/objects/items/weapons/storage/egg_vr.dm
Normal file
182
code/game/objects/items/weapons/storage/egg_vr.dm
Normal file
@@ -0,0 +1,182 @@
|
||||
//Item type vorepanel egg release containers.
|
||||
|
||||
/obj/item/weapon/storage/vore_egg
|
||||
name = "egg"
|
||||
desc = "It's an egg; it's smooth to the touch." //This is the default egg.
|
||||
icon = 'icons/obj/egg_new_vr.dmi'
|
||||
icon_state = "egg"
|
||||
var/open_egg_icon = 'icons/obj/egg_open_vr.dmi'
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi',
|
||||
)
|
||||
w_class = 2
|
||||
max_w_class = 0
|
||||
show_messages = 0
|
||||
allow_quick_empty = TRUE
|
||||
use_sound = 'sound/items/drop/flesh.ogg'
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/open(mob/user as mob)
|
||||
icon = open_egg_icon
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/proc/hatch(mob/living/user as mob)
|
||||
visible_message("<span class='danger'>\The [src] begins to shake as something pushes out from within!</span>")
|
||||
animate_shake()
|
||||
if(do_after(user, 50))
|
||||
if(use_sound)
|
||||
playsound(src, src.use_sound, 50, 0, -5)
|
||||
animate_shake()
|
||||
drop_contents()
|
||||
icon = open_egg_icon
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/proc/animate_shake()
|
||||
var/init_px = pixel_x
|
||||
var/shake_dir = pick(-1, 1)
|
||||
animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
|
||||
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/unathi
|
||||
name = "unathi egg"
|
||||
desc = "Some species of Unathi apparently lay soft-shelled eggs!"
|
||||
icon_state = "egg_unathi"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/nevrean
|
||||
name = "nevrean egg"
|
||||
desc = "Most Nevreans lay hard-shelled eggs!"
|
||||
icon_state = "egg_nevrean"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/human
|
||||
name = "human egg"
|
||||
desc = "Some humans lay eggs that are--wait, what?"
|
||||
icon_state = "egg_human"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/tajaran
|
||||
name = "tajaran egg"
|
||||
desc = "Apparently that's what a Tajaran egg looks like. Weird."
|
||||
icon_state = "egg_tajaran"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/skrell
|
||||
name = "skrell egg"
|
||||
desc = "Its soft and squishy"
|
||||
icon_state = "egg_skrell"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/shark
|
||||
name = "akula egg"
|
||||
desc = "Its soft and slimy to the touch"
|
||||
icon_state = "egg_akula"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/sergal
|
||||
name = "sergal egg"
|
||||
desc = "An egg with a slightly fuzzy exterior, and a hard layer beneath."
|
||||
icon_state = "egg_sergal"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/slime
|
||||
name = "slime egg"
|
||||
desc = "An egg with a soft and squishy interior, coated with slime."
|
||||
icon_state = "egg_slime"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/special //Not actually used, but the sprites are in, and it's there in case any admins need to spawn in the egg for any specific reasons.
|
||||
name = "special egg"
|
||||
desc = "This egg has a very unique look to it."
|
||||
icon_state = "egg_unique"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/scree
|
||||
name = "Chimera egg"
|
||||
desc = "...You don't know what type of creature laid this egg."
|
||||
icon_state = "egg_scree"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/xenomorph
|
||||
name = "Xenomorph egg"
|
||||
desc = "Some type of pitch black egg. It has a slimy exterior coating."
|
||||
icon_state = "egg_xenomorph"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/chocolate
|
||||
name = "chocolate egg"
|
||||
desc = "Delicious. May contain a choking hazard."
|
||||
icon_state = "egg_chocolate"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/owlpellet
|
||||
name = "boney egg"
|
||||
desc = "Can an egg shell be made of bones and hair?"
|
||||
icon_state = "egg_pellet"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/slimeglob
|
||||
name = "glob of slime"
|
||||
desc = "Very squishy."
|
||||
icon_state = "egg_slimeglob"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/chicken
|
||||
name = "chicken egg"
|
||||
desc = "Looks like chickens come in all sizes and shapes."
|
||||
icon_state = "egg_chicken"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/synthetic
|
||||
name = "synthetic egg"
|
||||
desc = "Can robots lay eggs?"
|
||||
icon_state = "egg_synthetic"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/badrecipe
|
||||
name = "Burned mess"
|
||||
desc = "Someone didn't cook this egg quite right..."
|
||||
icon_state = "egg_badrecipe"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/escapepod
|
||||
name = "small escape pod"
|
||||
desc = "Someone left in a hurry."
|
||||
icon_state = "egg_escapepod"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/cocoon
|
||||
name = "web cocoon"
|
||||
desc = "It straight up smells like spiders in here."
|
||||
icon_state = "egg_cocoon"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/bugcocoon
|
||||
name = "bug cocoon"
|
||||
desc = "Metamorphosis!"
|
||||
icon_state = "egg_bugcocoon"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/rock
|
||||
name = "rock egg"
|
||||
desc = "It looks like a small boulder."
|
||||
icon_state = "egg_rock"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/yellow
|
||||
name = "yellow egg"
|
||||
desc = "It is a nice yellow egg."
|
||||
icon_state = "egg_yellow"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/blue
|
||||
name = "blue egg"
|
||||
desc = "It is a nice blue egg."
|
||||
icon_state = "egg_blue"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/green
|
||||
name = "green egg"
|
||||
desc = "It is a nice green egg."
|
||||
icon_state = "egg_green"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/orange
|
||||
name = "orange egg"
|
||||
desc = "It is a nice orange egg."
|
||||
icon_state = "egg_orange"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/purple
|
||||
name = "purple egg"
|
||||
desc = "It is a nice purple egg."
|
||||
icon_state = "egg_purple"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/red
|
||||
name = "red egg"
|
||||
desc = "It is a nice red egg."
|
||||
icon_state = "egg_red"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/rainbow
|
||||
name = "rainbow egg"
|
||||
desc = "It looks so colorful."
|
||||
icon_state = "egg_rainbow"
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/pinkspots
|
||||
name = "spotted pink egg"
|
||||
desc = "It is a cute pink egg with white spots."
|
||||
icon_state = "egg_pinkspots"
|
||||
@@ -36,11 +36,11 @@
|
||||
icon_opened = "egg_unathi_open"
|
||||
|
||||
/obj/structure/closet/secure_closet/egg/nevrean
|
||||
name = "nevarean egg"
|
||||
desc = "Most Nevareans lay hard-shelled eggs!"
|
||||
icon_state = "egg_nevarean"
|
||||
icon_closed = "egg_nevarean"
|
||||
icon_opened = "egg_nevarean_open"
|
||||
name = "nevrean egg"
|
||||
desc = "Most Nevreans lay hard-shelled eggs!"
|
||||
icon_state = "egg_nevrean"
|
||||
icon_closed = "egg_nevrean"
|
||||
icon_opened = "egg_nevrean_open"
|
||||
|
||||
/obj/structure/closet/secure_closet/egg/human
|
||||
name = "human egg"
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
var/UNATHI_EGG = "Unathi"
|
||||
var/TAJARAN_EGG = "Tajaran"
|
||||
var/AKULA_EGG = "Akula"
|
||||
var/SKRELL_EGG = "Skrell"
|
||||
var/SERGAL_EGG = "Sergal"
|
||||
var/HUMAN_EGG = "Human"
|
||||
var/NEVREAN_EGG = "nevrean"
|
||||
var/SLIME_EGG = "Slime"
|
||||
var/EGG_EGG = "Egg"
|
||||
var/XENOCHIMERA_EGG = "Xenochimera"
|
||||
var/XENOMORPH_EGG = "Xenomorph"
|
||||
|
||||
// Define a place to save appearance in character setup
|
||||
/datum/preferences
|
||||
var/vore_egg_type = "Egg" //The egg type they have.
|
||||
@@ -26,8 +14,7 @@ var/XENOMORPH_EGG = "Xenomorph"
|
||||
S["vore_egg_type"] << pref.vore_egg_type
|
||||
|
||||
/datum/category_item/player_setup_item/vore/egg/sanitize_character()
|
||||
var/valid_vore_egg_types = global_vore_egg_types
|
||||
pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, valid_vore_egg_types, initial(pref.vore_egg_type))
|
||||
pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, global_vore_egg_types, initial(pref.vore_egg_type))
|
||||
|
||||
/datum/category_item/player_setup_item/vore/egg/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.vore_egg_type = pref.vore_egg_type
|
||||
@@ -44,7 +31,7 @@ var/XENOMORPH_EGG = "Xenomorph"
|
||||
var/list/vore_egg_types = global_vore_egg_types
|
||||
var/selection = input(user, "Choose your character's egg type:", "Character Preference", pref.vore_egg_type) as null|anything in vore_egg_types
|
||||
if(selection)
|
||||
pref.vore_egg_type = vore_egg_types[selection]
|
||||
pref.vore_egg_type = selection
|
||||
return TOPIC_REFRESH
|
||||
else
|
||||
return
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
var/fancy_vore = FALSE // Using the new sounds?
|
||||
var/is_wet = TRUE // Is this belly's insides made of slimy parts?
|
||||
var/wet_loop = TRUE // Does the belly have a fleshy loop playing?
|
||||
var/obj/item/weapon/storage/vore_egg/ownegg // Is this belly creating an egg?
|
||||
var/egg_type = "egg" // Default egg type and path.
|
||||
var/egg_path = /obj/item/weapon/storage/vore_egg
|
||||
|
||||
//I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
|
||||
//Actual full digest modes
|
||||
@@ -341,6 +344,11 @@
|
||||
if (!(M in contents))
|
||||
return 0 // They weren't in this belly anyway
|
||||
|
||||
for(var/mob/living/L in M.contents)
|
||||
L.muffled = 0
|
||||
for(var/obj/item/weapon/holder/H in M.contents)
|
||||
H.held_mob.muffled = 0
|
||||
|
||||
//Place them into our drop_location
|
||||
M.forceMove(drop_location())
|
||||
|
||||
@@ -601,9 +609,10 @@
|
||||
|
||||
//Handle a mob struggling
|
||||
// Called from /mob/living/carbon/relaymove()
|
||||
/obj/belly/proc/relay_resist(mob/living/R)
|
||||
/obj/belly/proc/relay_resist(mob/living/R, obj/item/C)
|
||||
if (!(R in contents))
|
||||
return // User is not in this belly
|
||||
if(!C)
|
||||
return // User is not in this belly
|
||||
|
||||
R.setClickCooldown(50)
|
||||
|
||||
@@ -612,9 +621,13 @@
|
||||
to_chat(owner, "<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
|
||||
|
||||
if(do_after(R, escapetime, owner, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED))
|
||||
if((owner.stat || escapable) && (R.loc == src)) //Can still escape?
|
||||
release_specific_contents(R)
|
||||
return
|
||||
if((owner.stat || escapable)) //Can still escape?
|
||||
if(C)
|
||||
release_specific_contents(C)
|
||||
return
|
||||
if(R.loc == src)
|
||||
release_specific_contents(R)
|
||||
return
|
||||
else if(R.loc != src) //Aren't even in the belly. Quietly fail.
|
||||
return
|
||||
else //Belly became inescapable or mob revived
|
||||
@@ -657,6 +670,13 @@
|
||||
to_chat(R, "<span class='warning'>You start to climb out of \the [lowertext(name)].</span>")
|
||||
to_chat(owner, "<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
|
||||
if(do_after(R, escapetime))
|
||||
if(escapable && C)
|
||||
release_specific_contents(C)
|
||||
to_chat(R,"<span class='warning'>Your struggles successfully cause [owner] to squeeze your container out of their \the [lowertext(name)].</span>")
|
||||
to_chat(owner,"<span class='warning'>[C] suddenly slips out of your [lowertext(name)]!</span>")
|
||||
for(var/mob/M in hearers(4, owner))
|
||||
M.show_message("<span class='warning'>[C] suddenly slips out of [owner]'s [lowertext(name)]!</span>", 2)
|
||||
return
|
||||
if((escapable) && (R.loc == src) && !R.absorbed) //Does the owner still have escapable enabled?
|
||||
release_specific_contents(R)
|
||||
to_chat(R,"<span class='warning'>You climb out of \the [lowertext(name)].</span>")
|
||||
@@ -687,6 +707,9 @@
|
||||
|
||||
to_chat(R, "<span class='warning'>Your attempt to escape [lowertext(name)] has failed and your struggles only results in you sliding into [owner]'s [transferlocation]!</span>")
|
||||
to_chat(owner, "<span class='warning'>Someone slid into your [transferlocation] due to their struggling inside your [lowertext(name)]!</span>")
|
||||
if(C)
|
||||
transfer_contents(C, dest_belly)
|
||||
return
|
||||
transfer_contents(R, dest_belly)
|
||||
return
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ GLOBAL_LIST_INIT(digest_modes, list())
|
||||
/datum/digest_mode/proc/process_mob(obj/belly/B, mob/living/L)
|
||||
return null
|
||||
|
||||
/datum/digest_mode/proc/handle_atoms(obj/belly/B, list/touchable_atoms)
|
||||
return FALSE
|
||||
|
||||
/datum/digest_mode/digest
|
||||
id = DM_DIGEST
|
||||
noise_chance = 50
|
||||
@@ -156,8 +159,69 @@ GLOBAL_LIST_INIT(digest_modes, list())
|
||||
// E G G
|
||||
/datum/digest_mode/egg
|
||||
id = DM_EGG
|
||||
|
||||
/*
|
||||
/datum/digest_mode/egg/process_mob(obj/belly/B, mob/living/carbon/human/H)
|
||||
if(!istype(H) || H.stat == DEAD || H.absorbed)
|
||||
return null
|
||||
B.put_in_egg(H, 1)
|
||||
B.put_in_egg(H, 1)*/
|
||||
|
||||
/datum/digest_mode/egg/handle_atoms(obj/belly/B, list/touchable_atoms)
|
||||
var/list/egg_contents = list()
|
||||
for(var/E in touchable_atoms)
|
||||
if(istype(E, /obj/item/weapon/storage/vore_egg)) // Don't egg other eggs.
|
||||
continue
|
||||
if(isliving(E))
|
||||
var/mob/living/L = E
|
||||
if(L.absorbed)
|
||||
continue
|
||||
egg_contents += L
|
||||
if(isitem(E))
|
||||
egg_contents += E
|
||||
if(egg_contents.len)
|
||||
if(!B.ownegg)
|
||||
if(B.owner.vore_egg_type in tf_vore_egg_types)
|
||||
B.egg_type = B.owner.vore_egg_type
|
||||
B.egg_path = tf_vore_egg_types[B.egg_type]
|
||||
B.ownegg = new B.egg_path(B)
|
||||
for(var/atom/movable/C in egg_contents)
|
||||
if(isitem(C) && egg_contents.len == 1) //Only egging one item
|
||||
var/obj/item/I = C
|
||||
B.ownegg.w_class = I.w_class
|
||||
B.ownegg.max_storage_space = B.ownegg.w_class
|
||||
I.forceMove(B.ownegg)
|
||||
B.ownegg.icon_scale_x = 0.2 * B.ownegg.w_class
|
||||
B.ownegg.icon_scale_y = 0.2 * B.ownegg.w_class
|
||||
B.ownegg.update_transform()
|
||||
egg_contents -= I
|
||||
B.ownegg = null
|
||||
return
|
||||
if(isliving(C))
|
||||
var/mob/living/M = C
|
||||
B.ownegg.w_class = M.size_multiplier * 4 //Egg size and weight scaled to match occupant.
|
||||
var/obj/item/weapon/holder/H = new M.holder_type(B.ownegg)
|
||||
H.held_mob = M
|
||||
M.forceMove(H)
|
||||
H.sync(M)
|
||||
B.ownegg.max_storage_space = H.w_class
|
||||
B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class
|
||||
B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class
|
||||
B.ownegg.update_transform()
|
||||
egg_contents -= M
|
||||
if(B.ownegg.w_class > 4)
|
||||
B.ownegg.slowdown = B.ownegg.w_class - 4
|
||||
B.ownegg = null
|
||||
return
|
||||
C.forceMove(B.ownegg)
|
||||
if(isitem(C))
|
||||
var/obj/item/I = C
|
||||
B.ownegg.w_class += I.w_class //Let's assume a regular outfit can reach total w_class of 16.
|
||||
B.ownegg.calibrate_size()
|
||||
B.ownegg.orient2hud()
|
||||
B.ownegg.w_class = clamp(B.ownegg.w_class * 0.25, 1, 8) //A total w_class of 16 will result in a backpack sized egg.
|
||||
B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class
|
||||
B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class
|
||||
B.ownegg.update_transform()
|
||||
if(B.ownegg.w_class > 4)
|
||||
B.ownegg.slowdown = B.ownegg.w_class - 4
|
||||
B.ownegg = null
|
||||
return
|
||||
@@ -32,6 +32,14 @@
|
||||
if(!length(touchable_atoms))
|
||||
return
|
||||
|
||||
var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
|
||||
if(!DM)
|
||||
log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!")
|
||||
return FALSE
|
||||
if(DM.handle_atoms(src, touchable_atoms))
|
||||
updateVRPanels()
|
||||
return
|
||||
|
||||
var/list/touchable_mobs = null
|
||||
|
||||
var/list/hta_returns = handle_touchable_atoms(touchable_atoms)
|
||||
@@ -55,11 +63,6 @@
|
||||
continue // don't give digesty messages to indigestible people
|
||||
to_chat(M, "<span class='notice'>[pick(EL)]</span>")
|
||||
|
||||
var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
|
||||
if(!DM)
|
||||
log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!")
|
||||
return FALSE
|
||||
|
||||
if(!digestion_noise_chance)
|
||||
digestion_noise_chance = DM.noise_chance
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
"belly_fullscreen" = selected.belly_fullscreen,
|
||||
"possible_fullscreens" = icon_states('icons/mob/screen_full_vore.dmi'),
|
||||
"vorespawn_blacklist" = selected.vorespawn_blacklist
|
||||
)
|
||||
) //CHOMP Addition: vorespawn blacklist
|
||||
|
||||
data["selected"]["addons"] = list()
|
||||
for(var/flag_name in selected.mode_flag_list)
|
||||
@@ -929,7 +929,8 @@
|
||||
qdel(host.vore_selected)
|
||||
host.vore_selected = host.vore_organs[1]
|
||||
. = TRUE
|
||||
if("b_vorespawn_blacklist")
|
||||
|
||||
if("b_vorespawn_blacklist") //CHOMP Addition
|
||||
host.vore_selected.vorespawn_blacklist = !host.vore_selected.vorespawn_blacklist
|
||||
. = TRUE
|
||||
|
||||
|
||||
@@ -48,3 +48,23 @@
|
||||
..()
|
||||
for(var/mob/living/carbon/human/I in contents)
|
||||
item_state = lowertext(I.species.name)
|
||||
|
||||
//Egg features.
|
||||
/obj/item/weapon/holder/attack_hand(mob/living/user as mob)
|
||||
if(istype(src.loc, /obj/item/weapon/storage/vore_egg)) //Don't scoop up the egged mob
|
||||
src.pickup(user)
|
||||
user.drop_from_inventory(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/holder/container_resist(mob/living/held)
|
||||
if(!istype(src.loc, /obj/item/weapon/storage/vore_egg))
|
||||
..()
|
||||
else
|
||||
var/obj/item/weapon/storage/vore_egg/E = src.loc
|
||||
if(isbelly(E.loc))
|
||||
var/obj/belly/B = E.loc
|
||||
B.relay_resist(held, E)
|
||||
return
|
||||
E.hatch(held)
|
||||
return
|
||||
|
||||
BIN
icons/obj/egg_new_vr.dmi
Normal file
BIN
icons/obj/egg_new_vr.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
icons/obj/egg_open_vr.dmi
Normal file
BIN
icons/obj/egg_open_vr.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
@@ -1428,6 +1428,7 @@
|
||||
#include "code\game\objects\items\weapons\storage\boxes_ch.dm"
|
||||
#include "code\game\objects\items\weapons\storage\boxes_vr.dm"
|
||||
#include "code\game\objects\items\weapons\storage\briefcase.dm"
|
||||
#include "code\game\objects\items\weapons\storage\egg_vr.dm"
|
||||
#include "code\game\objects\items\weapons\storage\fancy.dm"
|
||||
#include "code\game\objects\items\weapons\storage\fancy_ch.dm"
|
||||
#include "code\game\objects\items\weapons\storage\fancy_yw.dm"
|
||||
|
||||
Reference in New Issue
Block a user