From 71c045f22a6771498ec63d07c965cab16b212dbe Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Tue, 23 Apr 2019 13:47:06 +0200 Subject: [PATCH 01/26] New stun beam type single shot stun weapon beam and gun. Beam proportionally scaled agony based on powerdrain (40*6) Beam light colour AA00FF Single shot stun gun, uses all of its energy for 1 singular shot that is a guranteed stun on hit. Downsides: Massive power consumption, Massive recoil affecting anyone recoil effect scales with size and stacks with micro gun base recoil. --- code/modules/projectiles/projectile/beams.dm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 9755f604ab..364f587bec 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -18,6 +18,7 @@ muzzle_type = /obj/effect/projectile/laser/muzzle tracer_type = /obj/effect/projectile/laser/tracer impact_type = /obj/effect/projectile/laser/impact + /obj/item/projectile/beam/practice name = "laser" @@ -210,4 +211,12 @@ /obj/item/projectile/beam/stun/med name = "stun beam" icon_state = "stun" - agony = 35 \ No newline at end of file + agony = 35 + +//CHOMPEDIT: Charge beam that drains all power +/obj/item/projectile/beam/stun/oneshot + name = "Overdrive Stun beam" + light_color = "#AA00FF" + //shotcost = 2400 + agony = 240 +//CHOMPEDIT END. From 4aada5ee68a399ae3b4b0a2922dfe027bf4835d4 Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Tue, 23 Apr 2019 14:17:14 +0200 Subject: [PATCH 02/26] One shot stun gun code --- .../modules/projectiles/guns/energy/stun_vr.dm | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/stun_vr.dm b/code/modules/projectiles/guns/energy/stun_vr.dm index b0bfd53e46..0a1ceeb597 100644 --- a/code/modules/projectiles/guns/energy/stun_vr.dm +++ b/code/modules/projectiles/guns/energy/stun_vr.dm @@ -3,4 +3,20 @@ fire_delay = 4 /obj/item/weapon/gun/energy/stunrevolver - charge_cost = 400 \ No newline at end of file + charge_cost = 400 + +//CHOMPEDIT: +/obj/item/weapon/gun/energy/stunrevolver/oneshot + desc = "A heavily modified LAEP20 Zeus. It fires a beam instead of an electrode. The massive recoil makes it only useful as a last resort weapon." + charge_cost = 2400 + projectile_type = /obj/item/projectile/beam/stun/oneshot + +/obj/item/weapon/gun/energy/stunrevolver/oneshot/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + ..() + if(iscarbon(user)) + var/mob/living/carbon/nerd = user + var/mysize = nerd.size_multiplier + nerd.Weaken(3-mysize) //200% gets the knockdown micros usually get now from firing a gun. Micros get their base knockdown + this. + nerd.adjustBruteLoss(10-mysize*4) //This means 200% = 10-8; 100% = 10-4; etc + + From 54bec876d986728657cf6de38db668b7fddcb6d5 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 23 Apr 2019 20:41:15 -0400 Subject: [PATCH 03/26] Indigestible Collar Adds indigestible collar to loadout, same look as holo-collar. Primarily for those who want to RP out something surviving them no matter what. :> --- code/modules/clothing/under/accessories/accessory_vr.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/clothing/under/accessories/accessory_vr.dm b/code/modules/clothing/under/accessories/accessory_vr.dm index 4c30c2cef8..2adf9557a4 100644 --- a/code/modules/clothing/under/accessories/accessory_vr.dm +++ b/code/modules/clothing/under/accessories/accessory_vr.dm @@ -165,6 +165,15 @@ overlay_state = "collar_holo_overlay" matter = list(DEFAULT_WALL_MATERIAL = 50) +//TFF 23/4/19: Indigestible collar addition +/obj/item/clothing/accessory/collar/holo/indigestible + name = "Holo-collar" + desc = "A special variety of the holo-collar that seems to be made of a very durable fabric that fits around the neck." + icon_state = "collar_holo" + item_state = "collar_holo_overlay" + overlay_state = "collar_holo_overlay" + matter = list(DEFAULT_WALL_MATERIAL = 50) + // Chompstation edit - Deprecated, implementing a custom method of renaming collars. /* /obj/item/clothing/accessory/collar/holo/attack_self(mob/user as mob) From f15a6dfa1357a4d34176104afa9bd7ceef54b428 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 23 Apr 2019 20:42:22 -0400 Subject: [PATCH 04/26] Indigestible Collar Add selectable collar to loadout. --- .../preference_setup/loadout/loadout_accessories_vr.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index 86ea0381d0..23746cc104 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -30,6 +30,11 @@ display_name = "collar, holo" path = /obj/item/clothing/accessory/collar/holo +//TFF 23/4/19: Indigestible collar addition +/datum/gear/collar/holo/indigestible + display_name = "collar, holo (indigestible)" + path = /obj/item/clothing/accessory/collar/holo/indigestible + /datum/gear/accessory/white_drop_pouches allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist") @@ -53,4 +58,4 @@ /datum/gear/accessory/flops/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) \ No newline at end of file + gear_tweaks = list(gear_tweak_free_color_choice) From dbf7994fb9ba4887f82be0469451bd4fa637927d Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 23 Apr 2019 20:43:45 -0400 Subject: [PATCH 05/26] New Listing: Indigestible Collar --- code/modules/vore/eating/digest_act_vr.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 20843b0b3d..aa77f113f1 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -39,7 +39,9 @@ return FALSE //Sorta important to not digest your own beacons. /obj/item/weapon/storage/glass_ornament/digest_act(...) return FALSE - +//TFF 23/4/19: Indigestible collar addition +/obj/item/clothing/accessory/collar/holo/indigestible/digest_act(...) + return FALSE ///////////// // Some special treatment ///////////// From fce1e53ea416902b8dc42bbc78e192bc8ba90e19 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Wed, 24 Apr 2019 09:06:09 -0400 Subject: [PATCH 06/26] Indents Causes Warnings. Begone! On the tin, mostly. Forces some if statements to execute properly and not trigger Travis. --- code/modules/mob/living/carbon/human/human_damage.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 394acc565e..45f174063f 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -118,7 +118,7 @@ if(!isnull(M.incoming_brute_damage_percent)) amount *= M.incoming_brute_damage_percent if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - take_overall_damage(amount, 0) + take_overall_damage(amount, 0) else for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) @@ -136,7 +136,7 @@ if(!isnull(M.incoming_fire_damage_percent)) amount *= M.incoming_fire_damage_percent if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - take_overall_damage(0, amount) + take_overall_damage(0, amount) else for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) @@ -178,7 +178,7 @@ if(!isnull(M.incoming_fire_damage_percent)) amount *= M.incoming_fire_damage_percent if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) + O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) else for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) From 29492e1621f6f3072f25630b1d552c7302514bc7 Mon Sep 17 00:00:00 2001 From: AnonymousHybi <31137109+AnonymousHybi@users.noreply.github.com> Date: Wed, 24 Apr 2019 15:46:43 +0100 Subject: [PATCH 07/26] Attempt to fix --- code/modules/mob/living/carbon/human/human_damage.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 45f174063f..31e14a5f63 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -117,8 +117,8 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_brute_damage_percent)) amount *= M.incoming_brute_damage_percent - if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - take_overall_damage(amount, 0) + if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)) + take_overall_damage(amount *= 0.7, 0) //VOREStation Edit - NIF mod for damage resistance for this type of damage else for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) @@ -135,8 +135,8 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_fire_damage_percent)) amount *= M.incoming_fire_damage_percent - if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - take_overall_damage(0, amount) + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)) + take_overall_damage(0, amount *= 0.7) //VOREStation Edit - NIF mod for damage resistance for this type of damage else for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) @@ -177,8 +177,8 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_fire_damage_percent)) amount *= M.incoming_fire_damage_percent - if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage - O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)) + O.take_damage(0, amount *= 0.7, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) //VOREStation Edit - NIF mod for damage resistance for this type of damage else for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) From 3137d48fcf80dfb82a9d6078e8a856e5e0607bec Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Wed, 24 Apr 2019 12:22:47 -0400 Subject: [PATCH 08/26] Enable Developers to Use Quick-NIF Verb On the tin. --- code/modules/admin/verbs/debug_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/debug_vr.dm b/code/modules/admin/verbs/debug_vr.dm index 79089c8da0..aaf959e059 100644 --- a/code/modules/admin/verbs/debug_vr.dm +++ b/code/modules/admin/verbs/debug_vr.dm @@ -3,7 +3,7 @@ set name = "Quick NIF" set desc = "Spawns a NIF into someone in quick-implant mode." - if(!check_rights(R_ADMIN || R_EVENT)) + if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) //TFF 24/4/19: Allow Devs to use Quick-NIF verb. return var/mob/living/carbon/human/H = input("Pick a mob with a player","Quick NIF") as null|anything in player_list From d489d44c263e2aed4352d8aa5fed7173803b0d02 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Thu, 25 Apr 2019 14:30:59 -0400 Subject: [PATCH 09/26] Add Mermaid Tail Sprite Given from a player and uploaded upon request to use for a new listing in the Char Setup. --- icons/mob/vore/taurs_vr.dmi | Bin 88980 -> 90465 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 9e9c0793cdef83cd9b33bd89addcf5099cac0385..db916678c9deedcaa7898fa77b21f3259363e798 100644 GIT binary patch delta 15946 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 P!_k# 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 a80oDor%xyq`G7}((oogCn0?;n!T$oiAPpP< delta 14587 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 V%fqSz3G1oJK-ctq!8ynK{|C~RNN4~6 From 45ea452c44044616506ddd363bf515c761452edb Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Thu, 25 Apr 2019 14:34:43 -0400 Subject: [PATCH 10/26] Add Mermaid Tail On the tin and also makes Roiz's tail colourable. --- .../appearance/sprite_accessories_taur_vr.dm | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index 9ee5356f7c..24893b10dc 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -143,7 +143,7 @@ /datum/sprite_accessory/tail/taur/roiz_long_lizard // Not ACTUALLY a taur, but it uses 32x64 so it wouldn't fit in tails.dmi, and having it as a tail bugs up the sprite. name = "Long Lizard Tail (Roiz Lizden)" icon_state = "roiz_tail_s" - do_colouration = 0 + do_colouration = 1 //TFF 25/4/19: Make colourable as per request. // ckeys_allowed = list("spoopylizz") /datum/sprite_accessory/tail/taur/wolf @@ -399,6 +399,38 @@ icon_state = "otie_s" extra_overlay = "otie_markings" +//TFF 25/4/19: Add Mermaid taur body selection. Requested addition! +/datum/sprite_accessory/tail/taur/mermaid + name = "Mermaid (Taur)" + icon_state = "mermaid_s" + + msg_owner_help_walk = "You carefully slide around %prey." + msg_prey_help_walk = "%owner's huge fin slides past beside you!" + + msg_owner_help_run = "You carefully slide around %prey." + msg_prey_help_run = "%owner's huge fine slides past beside you!" + + msg_owner_disarm_run = "Your fin comes up above %prey, pushing them down to the ground!" + msg_prey_disarm_run = "%owner's fin comes up you, forcing you down to the ground!" + + msg_owner_disarm_walk = "You push down on %prey with your fin, pinning them down under you!" + msg_prey_disarm_walk = "%owner pushes down on you with their fin, pinning you down below them!" + + msg_owner_harm_run = "While sliding across the ground, you go right over %prey, crushing them!" + msg_prey_harm_run = "%owner slides over your body, carelessly crushing you with their heavy fin!" + + msg_owner_harm_walk = "Your heavy fin slowly and methodically slides down upon %prey, crushing against the floor below!" + msg_prey_harm_walk = "%owner's thick, heavy fin slowly and methodically slides down upon your body, mercilessly crushing you into the floor below!" + + msg_owner_grab_success = "You slide over %prey with your large, thick fin, smushing them against the ground before bending around them, trapping them between the base of the fin and the end of it!" + msg_prey_grab_success = "%owner slithers over you with their large, thick fin, smushing you against the ground before bending around you, trapping you between the fin's base and the end of it!" + + msg_owner_grab_fail = "You squish %prey under your large, thick fin, forcing them onto the ground!" + msg_prey_grab_fail = "%owner pins you under their large, thick fin, forcing you onto the ground!" + + msg_prey_stepunder = "You jump over %prey's thick fin." + msg_owner_stepunder = "%owner bounds over your fin." + //wickedtemp: Chakat Tempest /datum/sprite_accessory/tail/taur/feline/tempest name = "Feline (wickedtemp) (Taur)" From 74ba41b8b93bbb48288771ede29e5a4d050347df Mon Sep 17 00:00:00 2001 From: kcin2001 Date: Thu, 25 Apr 2019 22:41:04 -0700 Subject: [PATCH 11/26] Adds 3 new pieces of clothing --- .../loadout/loadout_eyes_vr.dm | 6 +- .../loadout/loadout_shoes_vr.dm | 8 ++- .../loadout/loadout_suit_vr.dm | 6 +- .../vore/fluffstuff/custom_clothes_vr.dm | 64 +++++++++++++++++- icons/mob/eyes_vr.dmi | Bin 0 -> 715 bytes icons/mob/feet_vr.dmi | Bin 740 -> 805 bytes icons/mob/species/seromi/eyes_vr.dmi | Bin 0 -> 716 bytes icons/mob/suit_vr.dmi | Bin 28345 -> 29293 bytes 8 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 icons/mob/eyes_vr.dmi create mode 100644 icons/mob/species/seromi/eyes_vr.dmi diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm b/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm index d8b29d0d92..36deb28018 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm @@ -12,4 +12,8 @@ /datum/gear/eyes/science_proper display_name = "science goggles (no overlay)" - path = /obj/item/clothing/glasses/fluff/science_proper \ No newline at end of file + path = /obj/item/clothing/glasses/fluff/science_proper + +datum/gear/eyes/flipgoggles + display_name = "Flip Goggles" + path = /obj/item/clothing/glasses/goggles/flip \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm b/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm index ff04b6a989..5c5fac3e7f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_shoes_vr.dm @@ -12,4 +12,10 @@ /datum/gear/shoes/siren display_name = "boots, Siren" - path = /obj/item/clothing/shoes/boots/fluff/siren \ No newline at end of file + path = /obj/item/clothing/shoes/boots/fluff/siren + +/datum/gear/shoes/tall + display_name = "tall jackboots" + path = /obj/item/clothing/shoes/boots/jackboots/tall + slot = slot_shoes + sort_category = "Shoes and Footwear" \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index 002d032a3d..22e8dea4ac 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -20,4 +20,8 @@ /datum/gear/suit/gntop display_name = "GN crop jacket" - path = /obj/item/clothing/suit/storage/fluff/gntop \ No newline at end of file + path = /obj/item/clothing/suit/storage/fluff/gntop + +/datum/gear/suit/denim_vest/black + display_name = "black denim vest" + path = /obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless/black \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index eceeed617a..fc37b581df 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -1806,4 +1806,66 @@ Departamental Swimsuits, for general use icon_state = "zao_cap" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "zao_cap_mob" \ No newline at end of file + item_state = "zao_cap_mob" + + +/obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless/black + name = "black denim vest" + desc = "A black denim vest." + icon_state = "blk_jacket" + icon_override = "icons/mob/suit_vr.dmi" + icon = 'icons/mob/suit_vr.dmi' + +/obj/item/clothing/glasses/goggles/flip + name = "goggles" + icon_override = "icons/mob/eyes_vr.dmi" + icon = 'icons/mob/eyes_vr.dmi' + desc = "Just some plain old goggles." + icon_state = "Goggles-g" + item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") + item_flags = AIRTIGHT + body_parts_covered = EYES + action_button_name = "Flip Goggles" + var/up = 0 + + sprite_sheets = list( + "Teshari" = 'icons/mob/species/seromi/eyes_vr.dmi' + ) + +/obj/item/clothing/shoes/boots/jackboots/tall + name = "tall jackboots" + desc = "Modified pair of jackboots, made to be taller by some fashion designer." + icon_state = "tallboots" + icon_override = 'icons/mob/feet_vr.dmi' + icon = 'icons/mob/feet_vr.dmi' + item_state_slots = list(slot_r_hand_str = "tallboots", slot_l_hand_str = "jackboots") + species_restricted = null + + +/obj/item/clothing/glasses/goggles/flip/attack_self() + toggle() + +/obj/item/clothing/glasses/goggles/flip/verb/toggle() + set category = "Object" + set name = "Adjust goggles" + set src in usr + + if(usr.canmove && !usr.stat && !usr.restrained()) + if(src.up) + src.up = !src.up + flags_inv |= HIDEEYES + body_parts_covered |= EYES + icon_state = initial(icon_state) + flash_protection = initial(flash_protection) + tint = initial(tint) + to_chat(usr, "You flip \the [src] down to protect your eyes.") + else + src.up = !src.up + flags_inv &= ~HIDEEYES + body_parts_covered &= ~EYES + icon_state = "[initial(icon_state)]up" + flash_protection = FLASH_PROTECTION_NONE + tint = TINT_NONE + to_chat(usr, "You push \the [src] up out of your face.") + update_clothing_icon() + usr.update_action_buttons() \ No newline at end of file diff --git a/icons/mob/eyes_vr.dmi b/icons/mob/eyes_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ca5e9fb3ee8aa0edd491f8b6a5aa20792c2577cb GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGo)m0%8B`&GO$wiq3C7Jno3=9=> zN>6R%YBmsHdtmup#NH}8>vffPrw3at`$1#QEulp#_w92Im$m=lwddA3-VJ*f`%XIc zl-sR%_vD+8r!Y&LXP>EXvHef`Ged3(*Xjv*Cu-rg}Rn(ZLr@GyR6$*v>cVw{!-c<-P7KJUX?bs-^$cIa;HGR!@)3lh1@`_I#kK*~RzcxMc(=q?ST}g&Ch8c_rp^Qc6 zg3nb}?W+sVes}QvtfR*YZQNa!Oj&mOZCPJO#;mkgzyAen?o_?CZEoN3$MO61mmV?T znY~6{(D44@KXp2H4=;RX_+?{fq6FXP*GKDL%#JALU&ZvI^p8**)B?5!5*gc0GsIr^ z1)}rUtG85G{nFlX|Gi<~q~9Dhi0so=Ekda z|F-(Q{nfpE@$GGM=X3t}dQy9-%aQ7ymG<)kBZ|!uzy55P<@$B@bLNEIHC(^^co>Ws z&M+7-A0U>IGkx>I^(9twFMR#W5A@NuNet2FU%db8bKuUZ_YFTizFG7=pS8VR|Lcr% zd9$80FPh(Uug+#J j--BQQlH3AS{F}ideXmCn%P&V@>SXYA^>bP0l+XkK$(lFL literal 0 HcmV?d00001 diff --git a/icons/mob/feet_vr.dmi b/icons/mob/feet_vr.dmi index 41062144df1a5c5b457387a486d15b689766aadd..8b3c9e8ed8f598f48d475b82b97f4ba232fdbb5d 100644 GIT binary patch delta 555 zcmV+`0@VHF1*Ha%7Ycv~0{{R3^x%>Cks*Zvf{~|jf8rFDBgNLX833<< zL5;^o-vj^v0o+MMK~#90?U=!G!Y~X(9TBK;L*f7~X+jI_|9@mNYt?Lb+Un@#QVQrA=ZCM&L#UCSY7 z)FJ!2<^$%80000000000%+N#^8$&n6&m7kle~9gt^=+$Xh`ToKt?K*O?u_t845$|8 z^zp=u0V6!dC^zI?(OWUlD!LmxU^&=FqXV&xIdznMO5est3^v)Pc86UwhQI^h1A1`g zvi)5DJYyKJf&l;k000000NerTDJ7S9y;65sG*n5Ea~R=ita6<`TC@#V{tqd2T%b$o zf1v1>4ovGzmxG`6`p>yWr`7NKK?)3gKULvyeCfns_j1%6bZPL%{#C30+8_OpGy|ve z+uQkc*?z8Pl8En`fp-ZuX9NHM000000RPJ`ypD(Y*YWVDuj3n^=fCiOV3;#7;QzoK t{~yR4T#{YWPnT_)G1&M&koi7>4}NJe5xF(jON{^k002ovPDHLkV1oVr2c7@` delta 489 zcmVS1!1BMvE`0xV4qB&dCNXXD>Aa%LQdt zPIt+Gf2$+|WLbC0hIofg-+&_$cTm<;@r0J@db+yh>Ei~fY2CyT9EoD2Cg-FLltgvf zKut7tgp31{PGv3afJLh1zo5vuwzz?!C|0Y+#81;q>8q%iBE3?L6eAwlHVp@;Hv#|v z000000Puv?8{aCrDn4q=ZQ#2#>+4Rg;5VJ$e`?*gzS}72Z89KQe5Q{PPYfvO-upBm zzk=Q+1D&9oaRZuztyebSJ0DB?^iJt(-zI}?^eN4-@yZeS030AENAAz-`Xfd$pd|wU z00000008&^!gmNJ@OP$eqNu2;M698thq22%eYB_>(ERU0=(#~3!cNfd8<^IaJ|^$w zPyYMZqnG**!yz>|48v51-SN~XgZ=3!Iq1W|9)};P|Icu=haed^U#{27`To4FM?w;B fl7U-F{(pjB5iuSqQI22`00000NkvXXu0mjfQ%K|I diff --git a/icons/mob/species/seromi/eyes_vr.dmi b/icons/mob/species/seromi/eyes_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1addecdfd3ad7c44c23bad21188984b1e002e70f GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoHB})IB`&GO$wiq3C7Jno3=9=> zN>6R%YcddEd$9AnNPWVwj!pNHynNUz*oFGCg+(u~{_u-uomJh*@Wn z-1+TUtQan3YxMkzpZc7Efr;DG#WAE}&f7bNMYA0w93IBcEZKGBTa4540Pp?NABcU~ zV%4hWxIXUdwH+IU7Wr_AwWhE6ZkiTTQC{(><54`{_1C6HemdqqxGTw!#xR31A(XM` zT=2Qds(p3g+3yaXpLO(Dp^dxCk}1n>zb)(Q$e5M(>i55Z&7G>Zw$1H3{y2WW{?a1` zJhRux3mV=({HIRm?%{>c48LsbOqAgJ{Q7A9i`fyy{HvH=l>QNFgId7WKq6z?X@=PA zzCd*Tdi9nHt6$nX?!Pzed%QDq*2~Y&Tki$0z51Ma+qB|&UYZkwc73U>_t1>>(%g8p z?%!6wx4*iVFTTBP?tIQ4Ur%Z;bvaVqv(kQkU_`N5;@6)Ivs}Nwleb zE^pSePZ9Oq+qeDKzX}Z8`aSFHmTtMJZnU&yW_#Ve)AK^+@^}2GTKsbB??v;Q?$z1M j<$Dk;K$2Uaihna$r0?}eV)^9=Or8v$u6{1-oD!M<0ogU^ literal 0 HcmV?d00001 diff --git a/icons/mob/suit_vr.dmi b/icons/mob/suit_vr.dmi index da3c85c44354bdf2c3b31d8d37af666f26653cec..c8a89bd322650c7689bc1115563f9d4395532c24 100644 GIT binary patch delta 11246 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 Date: Sun, 28 Apr 2019 11:57:47 -0700 Subject: [PATCH 12/26] Icon fix --- code/modules/mob/living/simple_animal/animals/sculpture.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/simple_animal/animals/sculpture.dm b/code/modules/mob/living/simple_animal/animals/sculpture.dm index 1acf703a89..be0057f501 100644 --- a/code/modules/mob/living/simple_animal/animals/sculpture.dm +++ b/code/modules/mob/living/simple_animal/animals/sculpture.dm @@ -3,6 +3,7 @@ /mob/living/simple_animal/sculpture name = "\improper sculpture" desc = "It's some kind of hastily-painted human-size stone sculpture. Just looking at it makes you feel nervous." + icon = 'icons/mob/sculpture.dmi' icon_state = "sculpture" icon_living = "sculpture" icon_dead = "sculpture" From fb19b795fe883f342f47c13a2616eb8a4d44d216 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:26:09 -0400 Subject: [PATCH 13/26] Restart Travis --- code/modules/vore/appearance/sprite_accessories_taur_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index 24893b10dc..0ecd23b221 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -399,7 +399,7 @@ icon_state = "otie_s" extra_overlay = "otie_markings" -//TFF 25/4/19: Add Mermaid taur body selection. Requested addition! +//TFF 25/4/19: Add Mermaid taur body selection. Requested addition! /datum/sprite_accessory/tail/taur/mermaid name = "Mermaid (Taur)" icon_state = "mermaid_s" From 6935e3237ea129f53e52b194a0d552ce16cb5201 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 11:03:03 -0400 Subject: [PATCH 14/26] Filepath Change New loadout selection refactors this a little bit. By removing one word, maybe, but it's still a refactor. Blep. --- code/modules/mob/living/carbon/human/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e1a120643f..884f016e23 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -167,7 +167,7 @@ update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message) if(update) UpdateDamageIcon() -/mob/living/carbon/human/proc/implant_loadout(var/datum/gear/G = new/datum/gear/utility/implant) +/mob/living/carbon/human/proc/implant_loadout(var/datum/gear/G = new/datum/gear/implant) //TFF 29/4/19: filepath change due to loadout change var/obj/item/weapon/implant/I = new G.path(src) I.imp_in = src I.implanted = 1 From f6b84d2d5f71060a0dd42d9d6bf5326efe5df393 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 14:57:46 -0400 Subject: [PATCH 15/26] Implants Category Adds a new category to the loadout selection, moves over the implant listings from loadout_utility.dm to loadout_implants.dm --- .../loadout/loadout_implants.dm | 33 +++++++++++++++++++ .../loadout/loadout_utility.dm | 17 +--------- 2 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 code/modules/client/preference_setup/loadout/loadout_implants.dm diff --git a/code/modules/client/preference_setup/loadout/loadout_implants.dm b/code/modules/client/preference_setup/loadout/loadout_implants.dm new file mode 100644 index 0000000000..d4a57fec27 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_implants.dm @@ -0,0 +1,33 @@ +//TFF 29/4/19: Add implants category, includes reagent implanters + + +/datum/gear/implant + exploitable = 0 + sort_category = "Implants" +/* VOREStation Edit - Make languages great again +/datum/gear/utility/implant/eal //This does nothing if you don't actually know EAL. + display_name = "implant, language, EAL" + path = /obj/item/weapon/implant/language/eal + cost = 2 + slot = "implant" + exploitable = 1*/ + +/datum/gear/implant/tracking + display_name = "implant, tracking" + path = /obj/item/weapon/implant/tracking/weak + cost = 0 //VOREStation Edit. Changed cost to 0 + slot = "implant" + exploitable = 1 + +//Reagent implants - cost of 2 to reduce chance of abuse +/datum/gear/implant/reagent_generator + exploitable = 0 + cost = 2 + +/datum/gear/implant/reagent_generator/milk + display_name = "implant, milk production" + path = /obj/item/weapon/implanter/reagent_generator/milk + +/datum/gear/implant/reagent_generator/egg + display_name = "implant, egg production" + path = /obj/item/weapon/implanter/reagent_generator/egg diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 76178dada2..c381c980dc 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -115,22 +115,7 @@ display_name = "cell, device" path = /obj/item/weapon/cell/device -/datum/gear/utility/implant - exploitable = 1 -/* VOREStation Edit - Make languages great again -/datum/gear/utility/implant/eal //This does nothing if you don't actually know EAL. - display_name = "implant, language, EAL" - path = /obj/item/weapon/implant/language/eal - cost = 2 - slot = "implant" - exploitable = 1*/ - -/datum/gear/utility/implant/tracking - display_name = "implant, tracking" - path = /obj/item/weapon/implant/tracking/weak - cost = 0 //VOREStation Edit. Changed cost to 0 - slot = "implant" - exploitable = 1 +//TFF 29/4/19: remove implants, move to loadout_implants.dm /datum/gear/utility/pen display_name = "Fountain Pen" From 7c84d253c8980a00d439af8c9938af1397ecb171 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 14:59:12 -0400 Subject: [PATCH 16/26] + Include loadout_implants.dm --- vorestation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/vorestation.dme b/vorestation.dme index 685cc538ca..d514b34a51 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1486,6 +1486,7 @@ #include "code\modules\client\preference_setup\loadout\loadout_gloves_vr.dm" #include "code\modules\client\preference_setup\loadout\loadout_head.dm" #include "code\modules\client\preference_setup\loadout\loadout_head_vr.dm" +#include "code\modules\client\preference_setup\loadout\loadout_implants.dm" #include "code\modules\client\preference_setup\loadout\loadout_mask.dm" #include "code\modules\client\preference_setup\loadout\loadout_shoes.dm" #include "code\modules\client\preference_setup\loadout\loadout_shoes_vr.dm" From 649a79c8f68aae17c2a1b5b795e7fc84d319a82c Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 15:02:57 -0400 Subject: [PATCH 17/26] Loadout-Specific Reagent Implanters Add basic reagent implanters for the loadout to select. --- .../vore/fluffstuff/custom_items_vr.dm | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 7221feb2cf..a3d2f6b724 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -615,6 +615,93 @@ taurtype = /datum/sprite_accessory/tail/taur/feline/tempest no_message = "These saddlebags seem to be fitted for someone else, and keep slipping off!" +//TFF 29/4/19: Add standardised reagent generators for loadout +/obj/item/weapon/implant/reagent_generator/milk + name = "milk generation implant" + desc = "It's an implant you can use to make milk from yourself!" + generated_reagents = list("milk" = 2) + reagent_name = "milk" + usable_volume = 1000 + + empty_message = list("Your breasts are almost completely drained!") + full_message = list("Your teats feel heavy and swollen!") + emote_descriptor = list("squeezes milk", "tugs on their breasts, milking them") + self_emote_descriptor = list("squeeze") + random_emote = list("moos quietly") + verb_name = "Milk" + verb_desc = "Grab their nipples and milk them into a container! May cause blushing and groaning." + +/obj/item/weapon/implanter/reagent_generator/milk + implant_type = /obj/item/weapon/implant/reagent_generator/milk + +/obj/item/weapon/implant/reagent_generator/egg + name = "egg laying implant" + desc = "This is an implant that allows the user to lay eggs." + generated_reagents = list("egg" = 2) + usable_volume = 500 + transfer_amount = 50 + + empty_message = list("Your lower belly feels smooth and empty. Sorry, we're out of eggs!", "The reduced pressure in your lower belly tells you there are no more eggs.") + full_message = list("Your lower belly looks swollen with irregular bumps, and it feels heavy.", "Your lower abdomen feels really heavy, making it a bit hard to walk.") + emote_descriptor = list("an egg right out of their belly!", "into their belly firmly, forcing them to lay an egg!", "them really tight, making them lay an egg promptly!") + var/verb_descriptor = list("squeezes", "pushes", "hugs") + var/self_verb_descriptor = list("squeeze", "push", "hug") + var/short_emote_descriptor = list("lays", "forces out", "pushes out") + self_emote_descriptor = list("lay", "force out", "push out") + random_emote = list("moans softly with a blush on their face", "yelps in embarrassment", "grunts a little") + assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_egg + +/obj/item/weapon/implant/reagent_generator/egg/implanted(mob/living/carbon/source) + processing_objects += src + to_chat(source, "You implant [source] with \the [src].") + source.verbs |= assigned_proc + return 1 + +/obj/item/weapon/implanter/reagent_generator/egg + implant_type = /obj/item/weapon/implant/reagent_generator/egg + +/mob/living/carbon/human/proc/use_reagent_implant_egg() + set name = "Lay Egg" + set desc = "Force them to lay an egg by squeezing into their lower body!" + set category = "Object" + set src in view(1) + + //do_reagent_implant(usr) + if(!isliving(usr) || !usr.canClick()) + return + + if(usr.incapacitated() || usr.stat > CONSCIOUS) + return + + var/obj/item/weapon/implant/reagent_generator/egg/rimplant + for(var/obj/item/organ/external/E in organs) + for(var/obj/item/weapon/implant/I in E.implants) + if(istype(I, /obj/item/weapon/implant/reagent_generator)) + rimplant = I + break + if (rimplant) + if(rimplant.reagents.total_volume <= rimplant.transfer_amount) + to_chat(src, "[pick(rimplant.empty_message)]") + return + + new /obj/item/weapon/reagent_containers/food/snacks/egg(get_turf(src)) + + var/index = rand(0,3) + + if (usr != src) + var/emote = rimplant.emote_descriptor[index] + var/verb_desc = rimplant.verb_descriptor[index] + var/self_verb_desc = rimplant.self_verb_descriptor[index] + usr.visible_message("[usr] [verb_desc] [emote]", + "You [self_verb_desc] [emote]") + else + visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", + "You [pick(rimplant.self_emote_descriptor)] an egg.") + if(prob(15)) + visible_message("[src] [pick(rimplant.random_emote)].") // M-mlem. + + rimplant.reagents.remove_any(rimplant.transfer_amount) + //WickedTempest: Chakat Tempest /obj/item/weapon/implant/reagent_generator/tempest generated_reagents = list("milk" = 2) From 28e620b6a120794d3f8a4eedf2460d1add6c5def Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 15:21:19 -0400 Subject: [PATCH 18/26] Shuts Travis Up Adjustments to give display_names to parent datums. --- .../loadout/loadout_implants.dm | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/code/modules/client/preference_setup/loadout/loadout_implants.dm b/code/modules/client/preference_setup/loadout/loadout_implants.dm index d4a57fec27..d58e3dc762 100644 --- a/code/modules/client/preference_setup/loadout/loadout_implants.dm +++ b/code/modules/client/preference_setup/loadout/loadout_implants.dm @@ -2,8 +2,13 @@ /datum/gear/implant - exploitable = 0 + display_name = "implant, tracking" + path = /obj/item/weapon/implant/tracking/weak + cost = 0 //VOREStation Edit. Changed cost to 0 + slot = "implant" + exploitable = 1 sort_category = "Implants" + /* VOREStation Edit - Make languages great again /datum/gear/utility/implant/eal //This does nothing if you don't actually know EAL. display_name = "implant, language, EAL" @@ -12,21 +17,12 @@ slot = "implant" exploitable = 1*/ -/datum/gear/implant/tracking - display_name = "implant, tracking" - path = /obj/item/weapon/implant/tracking/weak - cost = 0 //VOREStation Edit. Changed cost to 0 - slot = "implant" - exploitable = 1 - //Reagent implants - cost of 2 to reduce chance of abuse /datum/gear/implant/reagent_generator - exploitable = 0 - cost = 2 - -/datum/gear/implant/reagent_generator/milk display_name = "implant, milk production" path = /obj/item/weapon/implanter/reagent_generator/milk + exploitable = 0 + cost = 2 /datum/gear/implant/reagent_generator/egg display_name = "implant, egg production" From d7782509cecfbc5e145198acbf5848e8590157a3 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 17:34:48 -0400 Subject: [PATCH 19/26] Bones Galore Adds a new .dmi file with bones related to remains. --- icons/obj/bones_vr.dmi | Bin 0 -> 700 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/obj/bones_vr.dmi diff --git a/icons/obj/bones_vr.dmi b/icons/obj/bones_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ad384a69073ddd4c0d69c1863df3ec42d6f96abc GIT binary patch literal 700 zcmV;t0z>_YP)fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM z;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+JvA@2C^K1!i!&v&s2C_>$i#mdB2|{=C6;7l5~;W%H7`G-GN~vt1(yb81y?^8 zaBu+tSwLEtAW86(0004-NkldWZ zW;fcfs0)S3jg~HMs4Q-!xUsu1`(uPb`0f%)8r|%h?z`{3``+E~4j{rW5DP1yG#o!q z%OUwyr5J)A10Fvq9b%ng0lDC{N-+Pp(c1D$99TPBL)~Og<`cd9vs9`TQfcO@klnQn z>rQg5Z_ft;9Ika9XS;UFvWAkO=5DQ0!Wkt+1v#3z)4c-#I_sK4o}dYfkuL~X6IW`3 zF;XGu3~eyB_7B)d>cEjB$k=mNxPcB5C{-!0r@d!fb_GWpT-_={?fdUCMG}x|FhNEK z^5Fz3RSuH`v|Aws5h6tRGdRwZxRE;wXBl8+UQTw4`R8m3lE3us(i`LuwXP8dEU0N=R?moC#YXv3-B+i*|yQ^@B9tt zmN|Birvy9Ku_fPe92Y%{(Vuy~gWu_kaU8yLO~VEuvq-xRo&en&#vl->4_6HQW+GSs inKx-eJs^ni&+rY6t6LUd)`c(t0000 Date: Tue, 30 Apr 2019 23:34:11 -0400 Subject: [PATCH 20/26] Define Additions New Belly mode and additional mob defines --- code/__defines/belly_modes_vr.dm | 7 ++++--- code/__defines/mobs_vr.dm | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index e6f072ca0c..c85550b991 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -29,9 +29,10 @@ #define DM_TRANSFORM_FEMALE_EGG "Transform (Female) (EGG)" //Addon mode flags -#define DM_FLAG_NUMBING 0x1 -#define DM_FLAG_ITEMWEAK 0x2 -#define DM_FLAG_STRIPPING 0x4 +#define DM_FLAG_NUMBING 0x1 +#define DM_FLAG_STRIPPING 0x2 +#define DM_FLAG_LEAVEREMAINS 0x4 //TFF 30/4/19: Ports VoreStation Remains Option - new belly mode +#define DM_FLAG_ITEMWEAK 0x8 // Stance for hostile mobs to be in while devouring someone. #define HOSTILE_STANCE_EATING 99 diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index 2e3f8b0760..1ed0f361a0 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -27,3 +27,10 @@ #define SPECIES_ZORREN_FLAT "Flatland Zorren" #define SPECIES_ZORREN_HIGH "Highlander Zorren" #define SPECIES_CUSTOM "Custom Species" + +//TFF 30/4/19: Ports VoreStation Remains Option - new mob defines + +#define SPECIES_MONKEY_AKULA "Sobaka" +#define SPECIES_MONKEY_NEVREAN "Sparra" +#define SPECIES_MONKEY_SERGAL "Saru" +#define SPECIES_MONKEY_VULPKANIN "Wolpin" From ef45b626803084498c88b0ac2c9ab7f04680f5c4 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 23:44:33 -0400 Subject: [PATCH 21/26] Spineless Cretins Adds species that won't digest with bone remains. --- code/_helpers/global_lists_vr.dm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 7294474cab..a977a5e317 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -372,6 +372,27 @@ var/global/list/cont_flavors_musky = list("drenched", "sticky", "tainted") +//TFF 30/4/19: Ports VoreStation Remains Option - sets species that won't result in remains left behind +var/global/list/remainless_species = list(SPECIES_PROMETHEAN, + SPECIES_DIONA, + SPECIES_ALRAUNE, + SPECIES_PROTEAN, + SPECIES_MONKEY, //Exclude all monkey subtypes, to prevent abuse of it. They aren't, + SPECIES_MONKEY_TAJ, //set to have remains anyway, but making double sure, + SPECIES_MONKEY_SKRELL, + SPECIES_MONKEY_UNATHI, + SPECIES_MONKEY_AKULA, + SPECIES_MONKEY_NEVREAN, + SPECIES_MONKEY_SERGAL, + SPECIES_MONKEY_VULPKANIN, + SPECIES_XENO, //Same for xenos, + SPECIES_XENO_DRONE, + SPECIES_XENO_HUNTER, + SPECIES_XENO_SENTINEL, + SPECIES_XENO_QUEEN, + SPECIES_SHADOW, + SPECIES_GOLEM) //Some special species that may or may not be ever used in event too + /hook/startup/proc/init_vore_datum_ref_lists() var/paths From a56ed90e0c333ba473531ee0775b8f8e9b8f7f31 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 23:48:36 -0400 Subject: [PATCH 22/26] Refactor Species Names On the tin, plus additional piggybacking with other edits from VoreStation related to this to make it all work. >w> --- .../living/carbon/human/species/station/blank_vr.dm | 12 ++++++++---- .../living/carbon/human/species/station/monkey_vr.dm | 9 +++++---- .../human/species/station/station_special_vr.dm | 4 +++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm index f2847a1523..dd9d811198 100644 --- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -1,15 +1,19 @@ +//TFF 30/4/19: Make leave_remains_vr.dm work! >:C /datum/species //var/vore_numbing = 0 - var/gets_food_nutrition = 1 // If this is set to 0, the person can't get nutrition from food. + var/gets_food_nutrition = TRUE // If this is set to 0, the person can't get nutrition from food. var/metabolism = 0.0015 - var/lightweight = 0 //Oof! Nonhelpful bump stumbles. - var/trashcan = 0 //It's always sunny in the wrestling ring. + var/lightweight = FALSE //Oof! Nonhelpful bump stumbles. + var/trashcan = FALSE //It's always sunny in the wrestling ring. + var/base_species = null // Unused outside of a few species + var/selects_bodytype = 0 // Allows the species to choose from body types intead of being forced to be just one. /datum/species/custom name = SPECIES_CUSTOM name_plural = "Custom" - var/base_species = "Human" + selects_bodytype = TRUE + base_species = SPECIES_HUMAN unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) diff --git a/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm b/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm index f56faa515a..e2a48c75ab 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm @@ -1,5 +1,6 @@ +//TFF 30/4/19: Ports VoreStation Remains Option - refactor species names /datum/species/monkey/shark - name = "Sobaka" + name = SPECIES_MONKEY_AKULA name_plural = "Sobaka" icobase = 'icons/mob/human_races/monkeys/r_sobaka_vr.dmi' deform = 'icons/mob/human_races/monkeys/r_sobaka_vr.dmi' @@ -8,7 +9,7 @@ default_language = "Skrellian" //Closest we have. /datum/species/monkey/sergal - name = "Saru" + name = SPECIES_MONKEY_SERGAL greater_form = "Sergal" icobase = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi' deform = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi' @@ -16,7 +17,7 @@ default_language = LANGUAGE_SAGARU /datum/species/monkey/sparra - name = "Sparra" + name = SPECIES_MONKEY_NEVREAN name_plural = "Sparra" greater_form = "Nevrean" tail = null @@ -41,7 +42,7 @@ */ /datum/species/monkey/vulpkanin - name = "Wolpin" + name = SPECIES_MONKEY_VULPKANIN name_plural = "Wolpin" icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi' diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index aa8af0e273..da5d052b65 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -14,7 +14,9 @@ slowdown = -0.2 //scuttly, but not as scuttly as a tajara or a teshari. brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though. burn_mod = 1.15 //As vulnerable to burn as a Tajara. - var/base_species = "Xenochimera" + //TFF 30/4/19: Making leave_remains_vr.dm work. >:C + base_species = "Xenochimera" + selects_bodytype = TRUE num_alternate_languages = 2 secondary_langs = list("Sol Common") From b7340c4f94daa7c02f87dc5e5b25b90056ce8bc0 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 23:50:31 -0400 Subject: [PATCH 23/26] It's a Crate! Or is it? Prevent metagamey-ness stuff with Mechanical Vore Prefs displaying. --- code/modules/mob/living/simple_animal/aliens/mimic.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm index fff75ecbe7..0a22010c72 100644 --- a/code/modules/mob/living/simple_animal/aliens/mimic.dm +++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm @@ -38,6 +38,8 @@ minbodytemp = 0 meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat +//TFF 30/4/19: Port VoreStation Mechanical Vore Prefs - hide Mimic prefs + showvoreprefs = 0 //VOREStation Edit - Hides mechanical vore prefs for mimics. You can't see their gaping maws when they're just sitting idle. /mob/living/simple_animal/hostile/mimic/set_target() . = ..() From 29d7e1a74a280ea2be2002059df7ead4e333b6ab Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 23:55:51 -0400 Subject: [PATCH 24/26] Bone Alert Add new file that focuses on prey leaving behind bones, specifying a need for prefs to match in mechanical settings. Added: Belly Mode Addon Handler to leave remains Add Prefs settings to Vore Panel - also include an egg. :egg: --- code/modules/vore/eating/belly_obj_vr.dm | 7 +- code/modules/vore/eating/bellymodes_vr.dm | 9 +- code/modules/vore/eating/leave_remains_vr.dm | 164 +++++++++++++++++++ code/modules/vore/eating/living_vr.dm | 32 ++++ code/modules/vore/eating/vore_vr.dm | 17 +- code/modules/vore/eating/vorepanel_vr.dm | 30 +++- 6 files changed, 244 insertions(+), 15 deletions(-) create mode 100644 code/modules/vore/eating/leave_remains_vr.dm diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 6a45b64488..630f10602d 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -39,7 +39,7 @@ //Actual full digest modes var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL) //Digest mode addon flags - var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Itemweak" = DM_FLAG_ITEMWEAK, "Stripping" = DM_FLAG_STRIPPING) + var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Itemweak" = DM_FLAG_ITEMWEAK, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS) //TFF 30/4/19: Ports VoreStation Remains Option - add new belly mode addon to toggle //Transformation 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) @@ -259,10 +259,9 @@ if(owner.stat == DEAD) return if(!prey.isEdible) //CHOMPEDIT: Trying to make pred mobs prey? N O U - + var/mob/living/simple_animal/preydator = prey - - if(preydator.icon_state == preydator.icon_living && preydator.size_multiplier >= 1) + if(preydator.icon_state == preydator.icon_living) user.visible_message("\the [user] promptly gets tackled by \the [prey] for trying to break their prefs! !!") user.Weaken(5) if (preydator.will_eat(user)) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 6c7a38633d..a632bdebcd 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -113,6 +113,9 @@ to_chat(M,"" + digest_alert_prey + "") play_sound = pick(death_sounds) + //TFF 30/4/19: Ports VoreStation Remains Option - handler to leave remains + if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains) + handle_remains_leaving(M) digestion_death(M) owner.update_icons() if(compensation > 0) @@ -129,9 +132,9 @@ if(istype(M,/mob/living/simple_animal/retaliate/synx)) var/syntox = digest_brute+digest_burn owner.adjustToxLoss(syntox) - M.adjustBruteLoss(-syntox*2) //Should automaticaly clamp to 0 - M.adjustFireLoss(-syntox*2) //Should automaticaly clamp to 0 - //END SYNX hook. + if(M.health <= M.maxHealth) + M.health = M.health + syntox*2 + // Deal digestion damage (and feed the pred) var/old_brute = M.getBruteLoss() var/old_burn = M.getFireLoss() diff --git a/code/modules/vore/eating/leave_remains_vr.dm b/code/modules/vore/eating/leave_remains_vr.dm new file mode 100644 index 0000000000..46ac2f873e --- /dev/null +++ b/code/modules/vore/eating/leave_remains_vr.dm @@ -0,0 +1,164 @@ +//TFF 30/4/19: Ports VoreStation Remains Option - add new file to handle leaving some remains after digestion kills you +/obj/belly/proc/handle_remains_leaving(var/mob/living/M) + + if(istype(M,/mob/living/carbon/human)) //Are we even humanoid? + var/mob/living/carbon/human/H = M + + if((H.species.name in remainless_species) || H.isSynthetic()) //Don't leave anything if there is nothing to leave + return + + else + var/bones_amount = rand(2,3) //some random variety in amount of bones left + + if(prob(20)) //ribcage surviving whole is some luck + new /obj/item/weapon/digestion_remains/ribcage(src,owner) + bones_amount-- + + while(bones_amount) //throw in the rest + new /obj/item/weapon/digestion_remains(src,owner) + bones_amount-- + + var/skull_amount = 1 + switch(H.species.name) //oh boy here we go, finding us a right skull + if(SPECIES_HUMAN) + new /obj/item/weapon/digestion_remains/skull(src,owner) + skull_amount-- + if(SPECIES_TAJ) + new /obj/item/weapon/digestion_remains/skull/tajaran(src,owner) + skull_amount-- + if(SPECIES_UNATHI) + new /obj/item/weapon/digestion_remains/skull/unathi(src,owner) + skull_amount-- + if(SPECIES_SKRELL) + new /obj/item/weapon/digestion_remains/skull/skrell(src,owner) + skull_amount-- + if(SPECIES_VASILISSAN) + new /obj/item/weapon/digestion_remains/skull/vasilissan(src,owner) + skull_amount-- + if(SPECIES_AKULA) + new /obj/item/weapon/digestion_remains/skull/akula(src,owner) + skull_amount-- + if(SPECIES_RAPALA) + new /obj/item/weapon/digestion_remains/skull/rapala(src,owner) + skull_amount-- + if(SPECIES_VULPKANIN) + new /obj/item/weapon/digestion_remains/skull/vulpkanin(src,owner) + skull_amount-- + if(SPECIES_SERGAL) + new /obj/item/weapon/digestion_remains/skull/sergal(src,owner) + skull_amount-- + if(SPECIES_ZORREN_FLAT || SPECIES_ZORREN_HIGH) + new /obj/item/weapon/digestion_remains/skull/zorren(src,owner) + skull_amount-- + if(SPECIES_NEVREAN) + new /obj/item/weapon/digestion_remains/skull/nevrean(src,owner) + skull_amount-- + if(SPECIES_TESHARI) + new /obj/item/weapon/digestion_remains/skull/teshari(src,owner) + skull_amount-- + if(SPECIES_VOX) + new /obj/item/weapon/digestion_remains/skull/vox(src,owner) + skull_amount-- + if(SPECIES_XENOHYBRID) + new /obj/item/weapon/digestion_remains/skull/xenohybrid(src,owner) + skull_amount-- + if(skull_amount && H.species.selects_bodytype) //We still haven't found correct skull... + if(H.species.base_species == SPECIES_HUMAN) + new /obj/item/weapon/digestion_remains/skull/unknown(src,owner) + else + new /obj/item/weapon/digestion_remains/skull/unknown/anthro(src,owner) + else if(skull_amount) //Something entirely different... + new /obj/item/weapon/digestion_remains/skull/unknown(src,owner) + else + return + +/obj/item/weapon/digestion_remains + name = "bone" + desc = "A bleached bone. It's very non-descript and its hard to tell what species or part of the body it came from." + icon = 'icons/obj/bones_vr.dmi' + icon_state = "generic" + force = 0 + throwforce = 0 + item_state = "bone" + w_class = ITEMSIZE_SMALL + var/pred_ckey + var/pred_name + +/obj/item/weapon/digestion_remains/New(var/newloc,var/mob/living/pred) + ..(newloc) + pred_ckey = pred.ckey + pred_name = pred.name + +/obj/item/weapon/digestion_remains/attack_self(mob/user) + if(user.a_intent == I_HURT) + to_chat(user,"As you squeeze the [name], it crumbles into dust and falls apart into nothing!") + qdel(src) + +/obj/item/weapon/digestion_remains/ribcage + name = "ribcage" + desc = "A bleached ribcage. It's very white and definitely has seen better times. Hard to tell what it belonged to." + icon_state = "ribcage" + +/obj/item/weapon/digestion_remains/skull + name = "skull" + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a human." + icon_state = "skull" + +/obj/item/weapon/digestion_remains/skull/tajaran + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a tajara." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/unathi + desc = "A bleached skull. It looks very weakened. Seems like it belonged to an unathi." + icon_state = "skull_unathi" + +/obj/item/weapon/digestion_remains/skull/skrell + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a skrell." + icon_state = "skull" + +/obj/item/weapon/digestion_remains/skull/vasilissan + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a vasilissan." + icon_state = "skull" + +/obj/item/weapon/digestion_remains/skull/akula + desc = "A bleached skull. It looks very weakened. Seems like it belonged to an akula." + icon_state = "skull_unathi" + +/obj/item/weapon/digestion_remains/skull/rapala + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a rapala." + icon_state = "skull" + +/obj/item/weapon/digestion_remains/skull/vulpkanin + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a vulpkanin." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/sergal + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a sergal." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/zorren + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a zorren." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/nevrean + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a nevrean." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/teshari + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a teshari." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/vox + desc = "A bleached skull. It looks very weakened. Seems like it belonged to a vox." + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/unknown + desc = "A bleached skull. It looks very weakened. You can't quite tell what species it belonged to." + icon_state = "skull" + +/obj/item/weapon/digestion_remains/skull/unknown/anthro + icon_state = "skull_taj" + +/obj/item/weapon/digestion_remains/skull/xenohybrid + desc = "A bleached skull. It looks very weakened. Seems like it belonged to something with an elongated head." + icon_state = "skull_xenohybrid" \ No newline at end of file diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index a7bfc1af9c..8d1717b320 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -1,7 +1,11 @@ ///////////////////// Mob Living ///////////////////// /mob/living var/digestable = 1 // Can the mob be digested inside a belly? + //TFF 30/4/19: Ports VoreStation Remains Option - set var for leaving remains + var/digest_leave_remains = 0 // Will this mob leave bones/skull/etc after the melty demise? var/allowmobvore = 1 // Will simplemobs attempt to eat the mob? + //TFF 30/4/19: Ports VoreStation Mechanical Vore Prefs - set var for displaying vore prefs on examine + var/showvoreprefs = 1 // Determines if the mechanical vore preferences button will be displayed on the mob or not. var/obj/belly/vore_selected // Default to no vore capability. var/list/vore_organs = list() // List of vore containers inside a mob var/absorbed = 0 // If a mob is absorbed into another @@ -194,6 +198,8 @@ var/datum/vore_preferences/P = client.prefs_vr P.digestable = src.digestable + //TFF 30/4/19: Ports VoreStation Remains Option + P.digest_leave_remains = src.digest_leave_remains P.allowmobvore = src.allowmobvore P.vore_taste = src.vore_taste P.can_be_drop_prey = src.can_be_drop_prey @@ -219,6 +225,8 @@ var/datum/vore_preferences/P = client.prefs_vr digestable = P.digestable + //TFF 30/4/19: Ports VoreStation Remains Option + P.digest_leave_remains = src.digest_leave_remains allowmobvore = P.allowmobvore vore_taste = P.vore_taste can_be_drop_prey = P.can_be_drop_prey @@ -612,3 +620,27 @@ set category = "Preferences" set desc = "Switch sharp/fuzzy scaling for current mob." appearance_flags ^= PIXEL_SCALE + +//TFF 30/4/19: Ports VoreStation Mechanical Vore Prefs & Remains-leaving in 1 go +/mob/living/examine(mob/user) + . = ..() + if(showvoreprefs) + to_chat(user, "\[Mechanical Vore Preferences\]") + +/mob/living/Topic(href, href_list) //Can't find any instances of Topic() being overridden by /mob/living in polaris' base code, even though /mob/living/carbon/human's Topic() has a ..() call + if(href_list["vore_prefs"]) + display_voreprefs(usr) + return ..() + +/mob/living/proc/display_voreprefs(mob/user) //Called by Topic() calls on instances of /mob/living (and subtypes) containing vore_prefs as an argument + if(!user) + CRASH("display_voreprefs() was called without an associated user.") + var/dispvoreprefs = "[src]'s vore preferences


" + dispvoreprefs += "Digestable: [digestable ? "Enabled" : "Disabled"]
" + dispvoreprefs += "Leaves Remains: [digest_leave_remains ? "Enabled" : "Disabled"]
" + dispvoreprefs += "Mob Vore: [allowmobvore ? "Enabled" : "Disabled"]
" + dispvoreprefs += "Drop-nom prey: [can_be_drop_prey ? "Enabled" : "Disabled"]
" + dispvoreprefs += "Drop-nom pred: [can_be_drop_pred ? "Enabled" : "Disabled"]
" + user << browse("Vore prefs: [src]
[dispvoreprefs]
", "window=[name];size=200x300;can_resize=0;can_minimize=0") + onclose(user, "[name]") + return diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index d6939e9c95..84c421c214 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -42,6 +42,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE /datum/vore_preferences //Actual preferences var/digestable = TRUE + //TFF 30/4/19: Ports VoreStation Remains Option - set boolean for leaving remains + var/digest_leave_remains = FALSE var/allowmobvore = TRUE var/list/belly_prefs = list() var/vore_taste = "nothing in particular" @@ -92,9 +94,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE return 0 //Need to know what character to load! slot = client.prefs.default_slot - + load_path(client_ckey,slot) - + if(!path) return 0 //Path couldn't be set? if(!fexists(path)) //Never saved before save_vore() //Make the file first @@ -108,6 +110,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE json_from_file = patch_version(json_from_file,version) digestable = json_from_file["digestable"] + //TFF 30/4/19: Ports VoreStation Remains Option - add json stuff for whether a char's player allows said char to leave bones behind + digest_leave_remains = json_from_file["digest_leave_remains"] allowmobvore = json_from_file["allowmobvore"] vore_taste = json_from_file["vore_taste"] can_be_drop_prey = json_from_file["can_be_drop_prey"] @@ -117,6 +121,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE //Quick sanitize if(isnull(digestable)) digestable = TRUE + //TFF 30/4/19: Ports VoreStation Remains Option - sanitise for setting to false if left null + if(isnull(digest_leave_remains)) + digest_leave_remains = FALSE if(isnull(allowmobvore)) allowmobvore = TRUE if(isnull(can_be_drop_prey)) @@ -130,11 +137,13 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE /datum/vore_preferences/proc/save_vore() if(!path) return 0 - + var/version = 1 //For "good times" use in the future var/list/settings_list = list( "version" = version, "digestable" = digestable, + //TFF 30/4/19: Ports VoreStation Remains Option - add toggleable setting to the list on Vore Panel + "digest_leave_remains" = digest_leave_remains, "allowmobvore" = allowmobvore, "vore_taste" = vore_taste, "can_be_drop_prey" = can_be_drop_prey, @@ -147,7 +156,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE if(!json_to_file) log_debug("Saving: [path] failed jsonencode") return 0 - + //Write it out if(fexists(path)) fdel(path) //Byond only supports APPENDING to files, not replacing. diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index f76cc11c59..5b7be77ea5 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -285,6 +285,13 @@ if(0) dat += "Toggle Digestable" + //TFF 30/4/19: Ports VoreStation Remains Option - add option to leave remains after you digest a meal + switch(user.digest_leave_remains) + if(1) + dat += "Toggle Leaving Remains" + if(0) + dat += "Toggle Leaving Remains" + switch(user.allowmobvore) if(1) dat += "Toggle Mob Vore" @@ -742,20 +749,21 @@ selected = user.vore_organs[1] user.vore_selected = user.vore_organs[1] +//TFF 30/4/19: We're not Virgo here, change to the right server name if(href_list["saveprefs"]) if(!user.save_vore_prefs()) - alert("ERROR: Virgo-specific preferences failed to save!","Error") + alert("ERROR: ChompStation-specific preferences failed to save!","Error") else - to_chat(user,"Virgo-specific preferences saved!") + to_chat(user,"ChompStation-specific preferences saved!") 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") + alert("ERROR: ChompStation-specific preferences failed to apply!","Error") else - to_chat(user,"Virgo-specific preferences applied from active slot!") + to_chat(user,"ChompStation-specific preferences applied from active slot!") 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) @@ -803,6 +811,20 @@ if(user.client.prefs_vr) user.client.prefs_vr.digestable = user.digestable + //TFF 30/4/19: Ports VoreStation Remains Option - add option that goes paw in paw with belly setting; allow yourself to leave bones behind after you're digested + if(href_list["toggledlm"]) + var/choice = alert(user, "This button allows preds to have your remains be left in their belly after you are digested. This will only happen if pred sets their belly to do so. Remains consist of skeletal parts. Currently you are [user.digest_leave_remains? "" : "not"] leaving remains.", "", "Allow Post-digestion Remains", "Cancel", "Disallow Post-digestion Remains") + switch(choice) + if("Cancel") + return 0 + if("Allow Post-digestion Remains") + user.digest_leave_remains = TRUE + if("Disallow Post-digestion Remains") + user.digest_leave_remains = FALSE + + if(user.client.prefs_vr) + user.client.prefs_vr.digest_leave_remains = user.digest_leave_remains + if(href_list["togglemv"]) var/choice = alert(user, "This button is for those who don't like being eaten by mobs. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Mobs are currently: [user.allowmobvore ? "Allowed to eat" : "Prevented from eating"] you.", "", "Allow Mob Predation", "Cancel", "Prevent Mob Predation") switch(choice) From 837fb339d1ade20bcff8a4dfc4e640bed6c84c86 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Tue, 30 Apr 2019 23:57:58 -0400 Subject: [PATCH 25/26] Add an Include On the tin for leave_remains_vr.dm --- vorestation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/vorestation.dme b/vorestation.dme index 685cc538ca..dd1d248059 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2801,6 +2801,7 @@ #include "code\modules\vore\eating\bellymodes_vr.dm" #include "code\modules\vore\eating\contaminate_vr.dm" #include "code\modules\vore\eating\digest_act_vr.dm" +#include "code\modules\vore\eating\leave_remains_vr.dm" #include "code\modules\vore\eating\living_vr.dm" #include "code\modules\vore\eating\silicon_vr.dm" #include "code\modules\vore\eating\simple_animal_vr.dm" From 62623e674a3dc6e8de0cd122e70435135d024208 Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Thu, 2 May 2019 01:16:15 -0400 Subject: [PATCH 26/26] Bob. I'm a Ghost! Ghost-ifies all prey inside guts again. Sorry about that, y'all. --- code/game/machinery/cryopod.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index bd3f075866..1b6d2f94fe 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -506,6 +506,11 @@ //visible_message("\The [initial(name)] hums and hisses as it moves [to_despawn.real_name] into storage.", 3) visible_message("\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2].", 3) +//TFF: Port Vorestation fix for people getting kicked while inside a belly. Re-added 1/5/19. Didn't synch my fork before that last one, apparently. >W> + if(to_despawn.client && to_despawn.stat<2) + var/mob/observer/dead/newghost = to_despawn.ghostize() + newghost.timeofdeath = world.time + //This should guarantee that ghosts don't spawn. to_despawn.ckey = null