mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-30 23:49:21 +01:00
Merge remote-tracking branch 'upstream/master' into kk-samples
This commit is contained in:
@@ -73,3 +73,10 @@
|
||||
**Creator:** Poojawa (https://github.com/VOREStation/VOREStation/pull/6052)<br>
|
||||
**License:** [General License](sound/vore/sunesound/LICENSE.txt)<br>
|
||||
**Notes:** Permission to use assets also given in writing. All files under this folder is NOT licensed under CC3. Seek separate permission before copying/using.<br>
|
||||
<br>
|
||||
**File:** `icons/rogue-star/loafs_64x32.dmi`and `icons/rogue-star/tails_64x32_rs.dmi`<br>
|
||||
**Title:** Rogue Star Tails<br>
|
||||
**Icon-States:** `flagtail`, derivs by VerySoft, `bnytr`, derivs by Verysoft, `chonksqrl`, derivs by Verysoft<br>
|
||||
**Creator:** VerySoft (https://github.com/TS-Rogue-Star/Rogue-Star/pull/435)<br>
|
||||
**URL:** [Website](https://rogue-star.net/)<br>
|
||||
**License:** Permission granting in writing for use by Virgo and Chomp with proper attribution
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#define SMITE_BLUESPACEARTILLERY "Bluespace Artillery"
|
||||
#define SMITE_SPONTANEOUSCOMBUSTION "Spontaneous Combustion"
|
||||
#define SMITE_LIGHTNINGBOLT "Lightning Bolt"
|
||||
#define SMITE_TERROR "Terrify"
|
||||
|
||||
#define ADMIN_QUE(user) "(<a href='?_src_=holder;[HrefToken(TRUE)];adminmoreinfo=\ref[user]'>?</a>)"
|
||||
#define ADMIN_FLW(user) "(<a href='?_src_=holder;[HrefToken(TRUE)];adminplayerobservefollow=\ref[user]'>FLW</a>)"
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#define SMITE_AD_SPAM "Ad Spam"
|
||||
#define SMITE_AUTOSAVE "10 Second Autosave"
|
||||
#define SMITE_AUTOSAVE_WIDE "10 Second Autosave (AoE)"
|
||||
#define SMITE_SPICEREQUEST "Give Them Spice (Harmless)"
|
||||
#define SMITE_PEPPERNADE "Give Them Spice (Extra Spicy)"
|
||||
#define MODIFIY_ROBOT_MODULE_ADD "Add a Module"
|
||||
#define MODIFIY_ROBOT_MODULE_REMOVE "Remove a Module"
|
||||
#define MODIFIY_ROBOT_APPLY_UPGRADE "Apply an Upgrade"
|
||||
|
||||
@@ -132,7 +132,10 @@
|
||||
layer = FULLSCREEN_LAYER
|
||||
|
||||
/obj/screen/fullscreen/fishbed
|
||||
icon_state = "fishbed"
|
||||
icon_state = "fishbed"
|
||||
|
||||
/obj/screen/fullscreen/fear
|
||||
icon_state = "fear"
|
||||
|
||||
/obj/screen/fullscreen/lighting_backdrop
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
var/answer = tgui_alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[src.name] as being your own fault, and you will be held accountable under the law." : ""]",\
|
||||
"\The [src]", list("Yes, [density ? "open" : "close"]", "No"))
|
||||
if(answer == "No")
|
||||
if(!answer || answer == "No")
|
||||
return
|
||||
if(user.incapacitated() || (get_dist(src, user) > 1 && !issilicon(user)))
|
||||
to_chat(user, "Sorry, you must remain able bodied and close to \the [src] in order to use it.")
|
||||
|
||||
@@ -97,4 +97,6 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.species)
|
||||
P.accuracy += H.species.gun_accuracy_mod
|
||||
P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0)
|
||||
P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0)
|
||||
if(H.fear > 30)
|
||||
P.accuracy -= 35
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
to_chat(usr,"<span class='warning'>A warning pops up on the device, informing you that [M] appears braindead.</span>")
|
||||
return
|
||||
|
||||
if(!M.allow_mind_transfer)
|
||||
to_chat(usr,"<span class='danger'>The target's mind is too complex to be affected!</span>")
|
||||
return
|
||||
|
||||
if(M.stat == DEAD) //Are they dead?
|
||||
to_chat(usr,"<span class='warning'>A warning pops up on the device, informing you that [M] is dead, and, as such, the mind transfer can not be done.</span>")
|
||||
return
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT)) return
|
||||
|
||||
|
||||
if(tgui_alert(usr, "WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", list("No", "Yes")) == "No")
|
||||
if(tgui_alert(usr, "WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", list("No", "Yes")) != "Yes")
|
||||
return
|
||||
feedback_add_details("admin_verb","FA")
|
||||
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
if(!istype(target))
|
||||
return
|
||||
|
||||
var/list/smite_types = list(SMITE_BREAKLEGS,SMITE_BLUESPACEARTILLERY,SMITE_SPONTANEOUSCOMBUSTION,SMITE_LIGHTNINGBOLT,
|
||||
SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_AD_SPAM,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE)
|
||||
var/list/smite_types = list(SMITE_BREAKLEGS,SMITE_BLUESPACEARTILLERY,SMITE_SPONTANEOUSCOMBUSTION,SMITE_LIGHTNINGBOLT,SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_AD_SPAM,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE,SMITE_SPICEREQUEST,SMITE_PEPPERNADE,SMITE_TERROR)
|
||||
|
||||
var/smite_choice = tgui_input_list(usr, "Select the type of SMITE for [target]","SMITE Type Choice", smite_types)
|
||||
if(!smite_choice)
|
||||
@@ -158,6 +157,21 @@
|
||||
if(target.client)
|
||||
target.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
|
||||
|
||||
if(SMITE_PEPPERNADE)
|
||||
var/obj/item/weapon/grenade/chem_grenade/teargas/grenade = new /obj/item/weapon/grenade/chem_grenade/teargas
|
||||
grenade.loc = target.loc
|
||||
to_chat(target,"<span class='warning'>GRENADE?!</span>")
|
||||
grenade.detonate()
|
||||
|
||||
if(SMITE_SPICEREQUEST)
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/spacespice/spice = new /obj/item/weapon/reagent_containers/food/condiment/spacespice
|
||||
spice.loc = target.loc
|
||||
to_chat(target,"A bottle of spices appears at your feet... be careful what you wish for!")
|
||||
|
||||
if(SMITE_TERROR)
|
||||
if(ishuman(target))
|
||||
target.fear = 200
|
||||
|
||||
else
|
||||
return //Injection? Don't print any messages.
|
||||
|
||||
|
||||
@@ -279,7 +279,8 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s
|
||||
|
||||
for(var/T in pref.pos_traits + pref.neg_traits)
|
||||
points_left -= traits_costs[T]
|
||||
traits_left--
|
||||
if(T in pref.pos_traits)
|
||||
traits_left--
|
||||
. += "<b>Traits Left:</b> [traits_left]<br>"
|
||||
. += "<b>Points Left:</b> [points_left]<br>"
|
||||
if(points_left < 0 || traits_left < 0 || (!pref.custom_species && pref.species == SPECIES_CUSTOM))
|
||||
|
||||
@@ -494,6 +494,10 @@ var/list/preferences_datums = list()
|
||||
error("Player picked [choice] slot to copy to, but that wasn't one we sent.")
|
||||
return
|
||||
|
||||
overwrite_character(slotnum)
|
||||
sanitize_preferences()
|
||||
ShowChoices(user)
|
||||
if(tgui_alert(user, "Are you sure you want to override slot [slotnum], [name][nickname ? " ([nickname])" : ""]'s savedata?", "Confirm Override", list("No", "Yes")) == "Yes")
|
||||
overwrite_character(slotnum)
|
||||
sanitize_preferences()
|
||||
save_preferences()
|
||||
save_character()
|
||||
attempt_vr(user.client?.prefs_vr,"load_vore","")
|
||||
ShowChoices(user)
|
||||
|
||||
@@ -4873,6 +4873,7 @@
|
||||
|
||||
/mob/living/simple_mob/slime
|
||||
composition_reagent = "slimejelly"
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob
|
||||
var/kitchen_tag = "animal" //Used for cooking with animals
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
var/frustration = 0
|
||||
var/max_frustration = 0
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/bot/New()
|
||||
..()
|
||||
//update_icons() //VOREstation edit: moved to Init
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
else if(!client)
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>"
|
||||
//VOREStation Add Start
|
||||
if(away_from_keyboard && manual_afk)
|
||||
if(client && away_from_keyboard && manual_afk)
|
||||
msg += "\[Away From Keyboard for [round((client.inactivity/10)/60)] minutes\]"
|
||||
else if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes
|
||||
msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]"
|
||||
|
||||
@@ -438,7 +438,7 @@
|
||||
organ.applied_pressure = null
|
||||
|
||||
if(user == src)
|
||||
user.visible_message("\<span class='filter_notice'>The [user] stops applying pressure to [TU.his] [organ.name]!</span>", "<span class='filter_notice'>You stop applying pressure to your [organ]!</span>")
|
||||
user.visible_message("<span class='filter_notice'>\The [user] stops applying pressure to [TU.his] [organ.name]!</span>", "<span class='filter_notice'>You stop applying pressure to your [organ]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='filter_notice'>\The [user] stops applying pressure to [src]'s [organ.name]!</span>", "<span class='filter_notice'>You stop applying pressure to [src]'s [organ.name]!</span>")
|
||||
|
||||
|
||||
@@ -162,4 +162,6 @@
|
||||
// Custom Species Name
|
||||
var/custom_species
|
||||
|
||||
var/block_hud
|
||||
var/block_hud
|
||||
|
||||
var/phobias //For holding a list of phobias
|
||||
@@ -73,6 +73,8 @@
|
||||
|
||||
handle_heartbeat()
|
||||
handle_nif() //VOREStation Addition
|
||||
if(phobias)
|
||||
handle_phobias()
|
||||
if(!client)
|
||||
species.handle_npc(src)
|
||||
|
||||
@@ -1244,6 +1246,27 @@
|
||||
if(tiredness >= 100)
|
||||
Sleeping(5)
|
||||
|
||||
if(fear)
|
||||
fear = (fear - 1)
|
||||
if(fear >= 80 && is_preference_enabled(/datum/client_preference/play_ambiance))
|
||||
if(last_fear_sound + 51 SECONDS <= world.time)
|
||||
src << sound('sound/effects/Heart Beat.ogg',0,0,0,25)
|
||||
last_fear_sound = world.time
|
||||
if(fear >= 80 && !isSynthetic())
|
||||
if(prob(1) && get_active_hand())
|
||||
var/stuff_to_drop = get_active_hand()
|
||||
drop_item()
|
||||
visible_message("<span class='notice'>\The [src] suddenly drops their [stuff_to_drop].</span>","<span class='warning'>You drop your [stuff_to_drop]!</span>")
|
||||
if(prob(5))
|
||||
var/fear_self = pick(fear_message_self)
|
||||
var/fear_other = pick(fear_message_other)
|
||||
visible_message("<span class='notice'>\The [src][fear_other]</span>","<span class='warning'>[fear_self]</span>")
|
||||
else if(fear >= 30 && !isSynthetic())
|
||||
if(prob(2))
|
||||
var/fear_self = pick(fear_message_self)
|
||||
var/fear_other = pick(fear_message_other)
|
||||
visible_message("<span class='notice'>\The [src][fear_other]</span>","<span class='warning'>[fear_self]</span>")
|
||||
|
||||
if(paralysis || sleeping)
|
||||
blinded = 1
|
||||
set_stat(UNCONSCIOUS)
|
||||
@@ -1442,6 +1465,19 @@
|
||||
else
|
||||
clear_fullscreen("tired")
|
||||
|
||||
if(fear)
|
||||
var/severity = 0
|
||||
switch(fear)
|
||||
if(10 to 20) severity = 1
|
||||
if(20 to 30) severity = 2
|
||||
if(30 to 50) severity = 3
|
||||
if(50 to 70) severity = 4
|
||||
if(70 to 90) severity = 5
|
||||
if(90 to INFINITY) severity = 6
|
||||
overlay_fullscreen("fear", /obj/screen/fullscreen/fear, severity)
|
||||
else
|
||||
clear_fullscreen("fear")
|
||||
|
||||
if(healths)
|
||||
if (chem_effects[CE_PAINKILLER] > 100)
|
||||
healths.icon_state = "health_numb"
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
//Handling and defining of phobias and fears
|
||||
#define NYCTOPHOBIA 1
|
||||
#define ARACHNOPHOBIA 2
|
||||
#define HEMOPHOBIA 4
|
||||
#define THALASSOPHOBIA 8
|
||||
#define CLAUSTROPHOBIA_MINOR 16
|
||||
#define CLAUSTROPHOBIA_MAJOR 32
|
||||
#define ANATIDAEPHOBIA 64
|
||||
#define AGRAVIAPHOBIA 128
|
||||
|
||||
/mob/living/carbon/human/proc/handle_phobias()
|
||||
if(phobias & NYCTOPHOBIA)
|
||||
var/turf/T = get_turf(src)
|
||||
var/brightness = T.get_lumcount()
|
||||
if(brightness < 0.2)
|
||||
fear = min((fear + 3), 102)
|
||||
if(phobias & ARACHNOPHOBIA)
|
||||
for (var/mob/living/simple_mob/animal/giant_spider/S in viewers(src, null))
|
||||
if(!istype(S) || S.stat)
|
||||
continue
|
||||
fear = min((fear + 6), 102)
|
||||
if(phobias & HEMOPHOBIA)
|
||||
for(var/obj/effect/decal/cleanable/blood/B in view(7, src))
|
||||
var/obj/effect/decal/cleanable/blood/oil/O = B
|
||||
var/obj/effect/decal/cleanable/blood/tracks/T = B
|
||||
if(istype(O) || istype(T))
|
||||
continue
|
||||
fear = min((fear + 2), 102)
|
||||
for(var/turf/simulated/floor/water/blood/T in view(7, src))
|
||||
fear = min((fear + 2), 102)
|
||||
if(phobias & THALASSOPHOBIA)
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T,/turf/simulated/floor/water/underwater) || istype(T,/turf/simulated/floor/water/deep))
|
||||
fear = min((fear + 4), 102)
|
||||
if(phobias & CLAUSTROPHOBIA_MINOR)
|
||||
if(!isturf(loc))
|
||||
if(!istype(loc,/obj/belly) && !istype(loc,/obj/item/weapon/holder/micro))
|
||||
fear = min((fear + 3), 102)
|
||||
if(phobias & CLAUSTROPHOBIA_MAJOR) //Also activated inside of a belly
|
||||
if(!isturf(loc))
|
||||
if(!istype(loc,/obj/item/weapon/holder/micro))
|
||||
fear = min((fear + 3), 102)
|
||||
if(phobias & ANATIDAEPHOBIA)
|
||||
for (var/mob/living/simple_mob/animal/space/goose/G in viewers(src, null))
|
||||
if(!istype(G) || G.stat)
|
||||
continue
|
||||
fear = min((fear + 3), 102)
|
||||
for (var/mob/living/simple_mob/animal/sif/duck/D in viewers(src, null))
|
||||
if(!istype(D) || D.stat)
|
||||
continue
|
||||
fear = min((fear + 3), 102)
|
||||
for(var/obj/item/weapon/bikehorn/rubberducky/R in view(7, src))
|
||||
if(!istype(R))
|
||||
continue
|
||||
fear = min((fear + 2), 102)
|
||||
if(phobias & AGRAVIAPHOBIA)
|
||||
if(is_floating)
|
||||
fear = min((fear + 4), 102)
|
||||
+1
-1
@@ -1563,7 +1563,7 @@
|
||||
to_chat(src, "<span class='notice'>You prepare to inject [trait_injection_amount] units of [trait_injection_selected ? "[trait_injection_selected]" : "...nothing. Select a reagent before trying to inject anything."]</span>")
|
||||
return
|
||||
if(choice == "Change amount")
|
||||
var/amount_choice = tgui_input_number(usr, "How much of the reagent do you want to inject? (Up to 5 units) (Can select 0 for a bite that doesn't inject venom!)", "How much?", trait_injection_amount, 5, 0)
|
||||
var/amount_choice = tgui_input_number(usr, "How much of the reagent do you want to inject? (Up to 5 units) (Can select 0 for a bite that doesn't inject venom!)", "How much?", trait_injection_amount, 5, 0, round_value = FALSE)
|
||||
if(amount_choice >= 0)
|
||||
trait_injection_amount = amount_choice
|
||||
to_chat(src, "<span class='notice'>You prepare to inject [trait_injection_amount] units of [trait_injection_selected ? "[trait_injection_selected]" : "...nothing. Select a reagent before trying to inject anything."]</span>")
|
||||
|
||||
@@ -1088,3 +1088,86 @@
|
||||
/datum/trait/neutral/food_pref/coffee
|
||||
)
|
||||
our_allergens = list(ALLERGEN_STIMULANT)
|
||||
|
||||
|
||||
//////////////PHOBIAS/////////////////
|
||||
|
||||
/datum/trait/neutral/nyctophobia
|
||||
name = "Phobia: Nyctophobia"
|
||||
desc = "You are afraid of the dark. When in very dark conditions, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/nyctophobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= NYCTOPHOBIA
|
||||
|
||||
/datum/trait/neutral/arachnophobia
|
||||
name = "Phobia: Arachnophobia"
|
||||
desc = "You are afraid of spiders. When you can see a large spider, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/arachnophobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= ARACHNOPHOBIA
|
||||
|
||||
/datum/trait/neutral/hemophobia
|
||||
name = "Phobia: Hemophobia"
|
||||
desc = "You are afraid of blood. When you can see large amounts of blood, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/hemophobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= HEMOPHOBIA
|
||||
|
||||
/datum/trait/neutral/thalassophobia
|
||||
name = "Phobia: Thalassophobia"
|
||||
desc = "You are afraid of deep water. When in deep water, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/thalassophobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= THALASSOPHOBIA
|
||||
|
||||
/datum/trait/neutral/clasutrophobia_minor
|
||||
name = "Phobia: Claustrophobia (non-vore)"
|
||||
desc = "You are afraid of tight, enclosed spaces. When inside of another object, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/clasutrophobia_minor/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= CLAUSTROPHOBIA_MINOR
|
||||
|
||||
/datum/trait/neutral/clasutrophobia_major
|
||||
name = "Phobia: Claustrophobia (vore)"
|
||||
desc = "You are afraid of tight, enclosed spaces. When inside of another object, including vore bellies, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/clasutrophobia_major/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= CLAUSTROPHOBIA_MAJOR
|
||||
|
||||
/datum/trait/neutral/anatidaephobia
|
||||
name = "Phobia: Anatidaephobia"
|
||||
desc = "You are afraid of ducks. When you can see a duck (even rubber ones), you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/anatidaephobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= ANATIDAEPHOBIA
|
||||
|
||||
/datum/trait/neutral/agraviaphobia
|
||||
name = "Phobia: Agraviaphobia"
|
||||
desc = "You are afraid of a lack of gravity. When you find yourself floating, you will become afraid."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/agraviaphobia/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.phobias |= AGRAVIAPHOBIA
|
||||
|
||||
@@ -1356,7 +1356,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(tail_style.extra_overlay)
|
||||
var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay) //CHOMPEdit
|
||||
if(wagging && tail_style.ani_state)
|
||||
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w)
|
||||
overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay_w) //RS EDIT
|
||||
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
|
||||
tail_s.Blend(overlay, ICON_OVERLAY)
|
||||
qdel(overlay)
|
||||
@@ -1368,7 +1368,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(tail_style.extra_overlay2)
|
||||
var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2) //CHOMPEdit
|
||||
if(wagging && tail_style.ani_state)
|
||||
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w)
|
||||
overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2_w) //RS EDIT
|
||||
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
|
||||
tail_s.Blend(overlay, ICON_OVERLAY)
|
||||
qdel(overlay)
|
||||
|
||||
@@ -83,3 +83,26 @@
|
||||
var/datum/inventory_panel/inventory_panel
|
||||
var/last_resist_time = 0 // world.time of the most recent resist that wasn't on cooldown.
|
||||
var/tiredness = 0 //For vore draining
|
||||
var/fear = 0 //For fear effects and phobias
|
||||
var/last_fear_sound = 0 //For making sure the heartbeats don't play over each other
|
||||
|
||||
var/list/fear_message_self = list(
|
||||
"Your heart is racing, it feels like it's going burst from your chest.",
|
||||
"Your stomach clenches and churns with anxiety.",
|
||||
"It's getting hard to breathe, you're panting heavily.",
|
||||
"You feel your eyes straining.",
|
||||
"A sharp shiver runs down your spine.",
|
||||
"You feel like you are drowning.",
|
||||
"You feel your palms clamming up.",
|
||||
"Your legs feel weak, you can barely control them.",
|
||||
"You have difficulty even swallowing."
|
||||
)
|
||||
var/list/fear_message_other = list(
|
||||
"'s eyes are darting around the room rapidly.",
|
||||
" looks like they are shivering, literally shaking.",
|
||||
" is breathing rapidly.",
|
||||
" looks profoundly uncomfortable.",
|
||||
"s literally trembling in front of you.",
|
||||
"'s hands are shaking.",
|
||||
" is rocking slightly from side to side."
|
||||
)
|
||||
|
||||
@@ -60,6 +60,8 @@
|
||||
|
||||
var/picked_color = FALSE
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
can_enter_vent_with = list(
|
||||
/obj/item/weapon/implant,
|
||||
/obj/item/device/radio/borg,
|
||||
|
||||
@@ -117,6 +117,8 @@
|
||||
/obj/item/stack/material/chitin = 1\
|
||||
)
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
// They can also be displaced by all mobs.
|
||||
/mob/living/simple_mob/animal/passive
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive
|
||||
mob_bump_flag = 0
|
||||
mob_bump_flag = 0
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
minbodytemp = 175
|
||||
cold_resist = 0.75
|
||||
heat_resist = -0.5
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/crabmeat = 20,
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
say_list_type = /datum/say_list/bear
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/datum/say_list/bear
|
||||
speak = list("RAWR!","Rawr!","GRR!","Growl!")
|
||||
emote_see = list("stares ferociously", "stomps")
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
var/do_seasons = TRUE
|
||||
var/picked_color = FALSE
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/////////////////////////////////////// Vore stuff///////////////////////////////////////////
|
||||
|
||||
swallowTime = 4 SECONDS
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
|
||||
faction = "vampire"
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/bat
|
||||
vore_active = 1
|
||||
@@ -55,4 +57,3 @@
|
||||
B.escapechance = 15
|
||||
B.selective_preference = DM_DRAIN
|
||||
B.escape_stun = 5
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
var/poison_chance = 10 // Chance for injection to occur.
|
||||
var/poison_per_bite = 1 // Amount added per injection.
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/bee/Process_Spacemove(var/check_drift = 0)
|
||||
return 1 //No drifting in space for space bee!
|
||||
|
||||
|
||||
@@ -325,6 +325,7 @@ I think I covered everything.
|
||||
///
|
||||
|
||||
/mob/living/simple_mob/vore/bigdragon/update_icon()
|
||||
..()
|
||||
update_fullness()
|
||||
build_icons()
|
||||
|
||||
@@ -342,9 +343,10 @@ I think I covered everything.
|
||||
/mob/living/simple_mob/vore/bigdragon/proc/build_icons(var/random)
|
||||
cut_overlays()
|
||||
if(stat == DEAD)
|
||||
icon_state = "dragon-dead"
|
||||
plane = MOB_LAYER
|
||||
return
|
||||
else
|
||||
plane = ABOVE_MOB_PLANE
|
||||
if(random)
|
||||
var/list/bodycolors = list("#1E1E1E","#3F3F3F","#545454","#969696","#DBDBDB","#ABBBD8","#3D0B00","#3A221D","#77554F","#281D1B","#631F00","#964421","#936B24","#381313","#380000","#682121","#700E00","#44525B","#283035","#29353D","#353E44","#281000","#38261A","#302F3D","#322E3A","#262738")
|
||||
under = pick(underbelly_styles)
|
||||
|
||||
@@ -73,6 +73,8 @@
|
||||
|
||||
loot_list = list(/obj/item/borg/upgrade/basic/syndicate = 6, /obj/item/borg/upgrade/basic/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6)
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/corrupthound/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."
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/deathclaw
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/aggressive/deathclaw
|
||||
vore_active = 1
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/aggressive/dino
|
||||
vore_active = 1
|
||||
|
||||
@@ -194,6 +194,10 @@
|
||||
to_chat(prey, "<span class='warning'>You cannot do that in your current state.</span>")
|
||||
return
|
||||
|
||||
if(!pred.allow_mind_transfer)
|
||||
to_chat(prey, "<span class='warning'>[pred] is unable to be dominated.</span>")
|
||||
return
|
||||
|
||||
if(!pred.ckey)
|
||||
to_chat(prey, "<span class='notice'>\The [pred] isn't able to be dominated.</span>")
|
||||
return
|
||||
@@ -316,7 +320,7 @@
|
||||
var/list/possible_mobs = list()
|
||||
for(var/obj/belly/B in src.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(isliving(L) && L.ckey)
|
||||
if(isliving(L) && L.ckey && L.allow_mind_transfer)
|
||||
possible_mobs |= L
|
||||
else
|
||||
continue
|
||||
@@ -327,6 +331,9 @@
|
||||
if(!input)
|
||||
return
|
||||
var/mob/living/M = input
|
||||
if(!M.allow_mind_transfer) //check if the dominated mob pref is enabled
|
||||
to_chat(src, "<span class='warning'>[M] is unable to be dominated.</span>")
|
||||
return
|
||||
if(tgui_alert(src, "You selected [M] to attempt to dominate. Are you sure?", "Dominate Prey",list("No","Yes")) != "Yes")
|
||||
return
|
||||
log_admin("[key_name_admin(src)] offered to use dominate prey on [M] ([M.ckey]).")
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
say_list_type = /datum/say_list/fennec
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/fennec
|
||||
vore_active = 1
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
say_list_type = /datum/say_list/fennix
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/datum/say_list/fennix
|
||||
speak = list("SQUEL!","SQEL?","Skree.")
|
||||
emote_hear = list("Screeeeecheeeeessss!","Chirrup.")
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
special_attack_max_range = 5
|
||||
special_attack_cooldown = 100
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Pepe is love, not hate.
|
||||
/mob/living/simple_mob/vore/aggressive/frog/New()
|
||||
if(rand(1,1000000) == 1)
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
say_list_type = /datum/say_list/horse
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/horse/big
|
||||
name = "horse"
|
||||
icon_state = "horse"
|
||||
@@ -194,4 +196,4 @@
|
||||
holder.set_dir(moving_to)
|
||||
holder.IMove(get_step(holder,moving_to))
|
||||
wander_delay = base_wander_delay
|
||||
ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE)
|
||||
ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE)
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 0
|
||||
|
||||
@@ -0,0 +1,260 @@
|
||||
/mob/living/simple_mob/vore/meowl
|
||||
name = "Meowl"
|
||||
desc = "A rather cute looking creature that seems to have the features of both a cat and an owl."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/meowl)
|
||||
tt_desc = "Strigiline"
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_dead = "meowl-dead"
|
||||
icon_living = "meowl"
|
||||
icon_state = "meowl"
|
||||
icon_rest = "meowl_rest"
|
||||
faction = "meowl"
|
||||
friendly = list("nudges", "sniffs on", "rumbles softly at", "nuzzles")
|
||||
response_help = "pets"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "attacks"
|
||||
movement_cooldown = 2
|
||||
harm_intent_damage = 1
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
maxHealth = 100
|
||||
attacktext = list("scratches")
|
||||
see_in_dark = 8
|
||||
minbodytemp = 0
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/vore/meowl
|
||||
var/well_fed = 0
|
||||
|
||||
vore_bump_chance = 0
|
||||
vore_digest_chance = 50
|
||||
vore_escape_chance = 5
|
||||
vore_pounce_chance = 1000
|
||||
vore_active = 1
|
||||
vore_icons = 1
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
vore_capacity = 1
|
||||
swallowTime = 50
|
||||
vore_ignores_undigestable = FALSE
|
||||
vore_default_mode = DM_HOLD
|
||||
vore_pounce_maxhealth = 1000
|
||||
vore_bump_emote = "pounces on"
|
||||
|
||||
/mob/living/simple_mob/vore/meowl/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The strange critter suddenly takes advantage of you being alone to pounce atop you and quickly engulf your head within its maw! Before you even have a chance to react, the world goes dark with the inside of the meowls mouth covering your face, a rough tounge lapping smearing wet hot slobber over you. The rest of the process is pretty quick as the cat-owl begins to gulp your head down through a surprisingly stretchy throat and along the tight, flexing tunnel of its gullet. Before long you are pushing face first into the creature's stomach, the wrinkled walls quickly beginning grind slick flesh across it like any other piece of food. The rest of your body soon follows into the increasingly tight space, forced to curl up over yourself as the stomach lining bears down on you from every angle. At first, the stomach itself seems rather inactive, happily just squeezing and massaging you as the meowl settles down to slowly enjoy their snack. Though, struggling might risk setting off the gut one way or another..."
|
||||
B.mode_flags = DM_FLAG_THICKBELLY
|
||||
B.belly_fullscreen = "yet_another_tumby"
|
||||
B.digest_brute = 1
|
||||
B.digest_burn = 1
|
||||
B.digest_oxy = 1
|
||||
B.selectchance = 25
|
||||
B.digestchance = 0
|
||||
B.absorbchance = 0
|
||||
B.escapechance = 10
|
||||
B.selective_preference = DM_DIGEST
|
||||
B.escape_stun = 5
|
||||
B.transferlocation_absorb = "chub"
|
||||
|
||||
var/obj/belly/chub = new /obj/belly(src)
|
||||
chub.immutable = TRUE
|
||||
chub.name = "chub"
|
||||
chub.desc = "Your body quickly begins to feel very... different? In fact, you can't really feel your body much at all any more, but you certainly still feel something. The pressure of the gut that was practically crushing you before is relieved, but somehow still present as though you were now on the other side of the interaction. Your being feels much more spread out and practically intertwined with the world around, that world being the meowl itself. The strange cat-owl's purring feels like it's reverberating throughout your entire form, whatever that might be. Every time the critter shakes to ruffle its feathers, you feel yourself shake with it. Even the creatures emotions feel tangible to you, as though you share themselves, and mostly they are ones of fullness and content."
|
||||
chub.digest_mode = DM_HOLD // like, its got you already, doesn't need to get you more
|
||||
chub.mode_flags = DM_FLAG_FORCEPSAY
|
||||
chub.escapable = TRUE // good luck
|
||||
chub.escapechance = 40 // high chance of STARTING a successful escape attempt
|
||||
chub.escapechance_absorbed = 5 // m i n e
|
||||
chub.vore_verb = "soak"
|
||||
chub.count_absorbed_prey_for_sprite = FALSE
|
||||
chub.absorbed_struggle_messages_inside = list(
|
||||
"You try and push free from %pred's %belly, but can't seem to will yourself to move.",
|
||||
"Your fruitless mental struggles only cause %pred to purr happily.",
|
||||
"You can't make any progress freeing yourself from %pred's %belly.")
|
||||
chub.escape_attempt_absorbed_messages_owner = list(
|
||||
"%prey is attempting to free themselves from your %belly!")
|
||||
|
||||
chub.escape_attempt_absorbed_messages_prey = list(
|
||||
"You try to force yourself out of %pred's %belly.",
|
||||
"You strain and push, attempting to reach out of %pred's %belly.",
|
||||
"You work up the will to try and force yourself free of %pred's clutches.")
|
||||
|
||||
chub.escape_absorbed_messages_owner = list(
|
||||
"%prey forces themselves free of your %belly!")
|
||||
|
||||
chub.escape_absorbed_messages_prey = list(
|
||||
"You finally manage to wrest yourself free from %pred's %belly, re-asserting your more usual form.",
|
||||
"You heave and push, eventually spilling out from %pred's %belly, eliciting a mildly annoyed flurry of wing flapping.")
|
||||
|
||||
chub.escape_absorbed_messages_outside = list(
|
||||
"%prey suddenly forces themselves free of %pred's %belly!")
|
||||
|
||||
chub.escape_fail_absorbed_messages_owner = list(
|
||||
"%prey's attempt to escape form your %belly has failed!")
|
||||
|
||||
chub.escape_fail_absorbed_messages_prey = list(
|
||||
"Before you manage to reach freedom, you feel yourself getting dragged back into %pred's %belly!",
|
||||
"%pred cheeps playfully, simply pressing your wrigging form back into their %belly before you get anywhere.",
|
||||
"%pred holds a wing down on their %belly, the gentle pressure breaking your concentration and sending you sinking back into its form.",
|
||||
"Try as you might, you barely make an impression before %pred simply clenches with the most minimal effort, binding you back into their %belly.",
|
||||
"Unfortunately, %pred seems to have absolutely no intention of letting you go, and your futile effort goes nowhere.",
|
||||
"Strain as you might, you can't keep up the effort long enough before you sink back into %pred's %belly.")
|
||||
|
||||
/mob/living/simple_mob/vore/meowl/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food))
|
||||
if(health <= 0)
|
||||
return
|
||||
user.visible_message("<span class='notice'>\The [src] happily gulps down \the [O] right out of \the [user]'s hand, it seems pretty content now.</span>","<span class='notice'>\The [src] happily gulps down \the [O] right out of your hand, it seems pretty content now.</span>")
|
||||
user.drop_from_inventory(O)
|
||||
qdel(O)
|
||||
well_fed = world.time
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/vore/meowl/PounceTarget(var/mob/living/M, var/successrate = 100)
|
||||
vore_pounce_cooldown = world.time + 1 SECONDS // don't attempt another pounce for a while
|
||||
if(prob(max(successrate,33))) // pounce success!
|
||||
M.Weaken(5)
|
||||
M.visible_message("<span class='danger'>\The [src] pounces on \the [M]!</span>!")
|
||||
else // pounce misses!
|
||||
M.visible_message("<span class='danger'>\The [src] attempts to pounce \the [M] but misses!</span>!")
|
||||
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
|
||||
if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too
|
||||
return EatTarget(M)
|
||||
else
|
||||
return //just leave them
|
||||
|
||||
/datum/category_item/catalogue/fauna/meowl
|
||||
name = "Extra-Realspace Fauna - Meowl"
|
||||
desc = "Classification: Strigiline\
|
||||
<br><br>\
|
||||
These unusual creatures are sometimes found within redgate locations and seem to exhibit both the characteristics of a cat and of an owl. \
|
||||
Whilst these animals at a glance appear to be rather sweet and friendly, they are actually very competent predators and excellent opportunists. \
|
||||
They will very rarely attack their prey when there are other creatures nearby, preferring to wait until their target is alone and unprotected. \
|
||||
Despite this, these creatues can be rather docile in the right conditions, and will not attack those who it believes it can get food from reliably."
|
||||
value = CATALOGUER_REWARD_HARD
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/meowl
|
||||
var/last_friend_time = 0
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/meowl/engage_target()
|
||||
ai_log("engage_target() : Entering.", AI_LOG_DEBUG)
|
||||
|
||||
// Can we still see them?
|
||||
if(!target || !can_attack(target))
|
||||
ai_log("engage_target() : Lost sight of target.", AI_LOG_TRACE)
|
||||
if(lose_target()) // We lost them (returns TRUE if we found something else to do)
|
||||
ai_log("engage_target() : Pursuing other options (last seen, or a new target).", AI_LOG_TRACE)
|
||||
return
|
||||
|
||||
var/distance = get_dist(holder, target)
|
||||
ai_log("engage_target() : Distance to target ([target]) is [distance].", AI_LOG_TRACE)
|
||||
holder.face_atom(target)
|
||||
last_conflict_time = world.time
|
||||
|
||||
// Check if there is more than one person nearby and if they allow eating them
|
||||
if(!check_attacker(target)) //Only act friendly if you haven't been attacked yet
|
||||
var/list/crowd = list_targets()
|
||||
|
||||
var/mob/living/L = target
|
||||
if(istype(L))
|
||||
if(!L.allowmobvore && vore_hostile && distance <= 8)
|
||||
play_friend(target)
|
||||
set_stance(STANCE_APPROACH)
|
||||
return
|
||||
|
||||
if(crowd.len > 1 && distance <= 8)
|
||||
play_friend(target)
|
||||
set_stance(STANCE_APPROACH)
|
||||
return
|
||||
|
||||
// Don't attack if you're well fed!
|
||||
|
||||
var/mob/living/simple_mob/vore/meowl/M = holder
|
||||
|
||||
if(istype(M))
|
||||
if(M.well_fed + 10 MINUTES > world.time)
|
||||
set_stance(STANCE_APPROACH)
|
||||
return
|
||||
|
||||
|
||||
// Do a 'special' attack, if one is allowed.
|
||||
// if(prob(special_attack_prob) && (distance >= special_attack_min_range) && (distance <= special_attack_max_range))
|
||||
if(holder.ICheckSpecialAttack(target))
|
||||
ai_log("engage_target() : Attempting a special attack.", AI_LOG_TRACE)
|
||||
on_engagement(target)
|
||||
if(special_attack(target)) // If this fails, then we try a regular melee/ranged attack.
|
||||
ai_log("engage_target() : Successful special attack. Exiting.", AI_LOG_DEBUG)
|
||||
return
|
||||
|
||||
// Stab them.
|
||||
else if(distance <= 1 && !pointblank)
|
||||
ai_log("engage_target() : Attempting a melee attack.", AI_LOG_TRACE)
|
||||
on_engagement(target)
|
||||
melee_attack(target)
|
||||
|
||||
else if(distance <= 1 && !holder.ICheckRangedAttack(target)) // Doesn't have projectile, but is pointblank
|
||||
ai_log("engage_target() : Attempting a melee attack.", AI_LOG_TRACE)
|
||||
on_engagement(target)
|
||||
melee_attack(target)
|
||||
|
||||
// Shoot them.
|
||||
else if(holder.ICheckRangedAttack(target) && (distance <= max_range(target)) )
|
||||
on_engagement(target)
|
||||
if(firing_lanes && !test_projectile_safety(target))
|
||||
// Nudge them a bit, maybe they can shoot next time.
|
||||
var/turf/T = get_step(holder, pick(cardinal))
|
||||
if(T)
|
||||
holder.IMove(T) // IMove() will respect movement cooldown.
|
||||
holder.face_atom(target)
|
||||
ai_log("engage_target() : Could not safely fire at target. Exiting.", AI_LOG_DEBUG)
|
||||
return
|
||||
|
||||
ai_log("engage_target() : Attempting a ranged attack.", AI_LOG_TRACE)
|
||||
ranged_attack(target)
|
||||
|
||||
// Run after them.
|
||||
else if(!stand_ground)
|
||||
ai_log("engage_target() : Target ([target]) too far away. Exiting.", AI_LOG_DEBUG)
|
||||
set_stance(STANCE_APPROACH)
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/meowl/proc/play_friend(target)
|
||||
if(last_friend_time + 60 SECONDS > world.time)
|
||||
return
|
||||
|
||||
var/list/friend_text_close = list("nuzzles its head against \the [target] sweetly.",
|
||||
"lets out a cute little chirp and flaps its wings.",
|
||||
"wriggles its tail excitedly and begins to purr.",
|
||||
"hops up and down on the spot!",
|
||||
"looks at \the [target] with the biggest, roundest eyes that it can manage.",
|
||||
"claws at the ground for a moment, as if looking for something.",
|
||||
"stares off into the distance before letting out a quiet meow.",
|
||||
"cheeps a high pitch sound, before looking up.",
|
||||
"rubs its head gently against \the [target].",
|
||||
"raises a wing to wash under it.",
|
||||
"lets out a long, sing-songy mrowl.",
|
||||
"purrs happily as it snuggles up to \the [target].",
|
||||
"flaps its wings and wiggles its whole body.",
|
||||
"shakes rapidly to ruffle its own feathers."
|
||||
)
|
||||
var/list/friend_text_far = list("lets out a cute little chirp and flaps its wings.",
|
||||
"wriggles its tail excitedly and begins to purr.",
|
||||
"hops up and down on the spot!",
|
||||
"claws at the ground for a moment, as if looking for something.",
|
||||
"stares off into the distance before letting out a quiet meow.",
|
||||
"cheeps a high pitch sound, before looking up.",
|
||||
"raises a wing to wash under it.",
|
||||
"lets out a long, sing-songy mrowl.",
|
||||
"flaps its wings and wiggles its whole body.",
|
||||
"shakes rapidly to ruffle its own feathers."
|
||||
)
|
||||
|
||||
var/distance = get_dist(holder, target)
|
||||
if(distance <= 1)
|
||||
var/talkies = pick(friend_text_close)
|
||||
holder.visible_message("<b>\The [holder]</b> [talkies]")
|
||||
else
|
||||
var/talkies = pick(friend_text_far)
|
||||
holder.visible_message("<b>\The [holder]</b> [talkies]")
|
||||
last_friend_time = world.time
|
||||
@@ -265,48 +265,45 @@
|
||||
var/list/possible_mobs = list()
|
||||
for(var/obj/belly/B in src.vore_organs)
|
||||
for(var/mob/living/H in B)
|
||||
if( (ishuman(H) || isrobot(H)) && H.ckey )
|
||||
if((ishuman(H) || isrobot(H)) && H.ckey)
|
||||
possible_mobs += H
|
||||
else
|
||||
continue
|
||||
var/mob/living/carbon/human/M
|
||||
var/input = tgui_input_list(src, "Select a mob to take over:", "Take Over Prey", possible_mobs)
|
||||
if(!input)
|
||||
return
|
||||
M = input
|
||||
if(!M)
|
||||
var/mob/living/L = tgui_input_list(src, "Select a mob to take over:", "Take Over Prey", possible_mobs)
|
||||
if(!L)
|
||||
return
|
||||
// Adding a ishuman check here, since silicon mobs don't have a resleeve_lock from what I can tell.
|
||||
if(ishuman(M))
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/M = L
|
||||
if(M.resleeve_lock && ckey != M.resleeve_lock)
|
||||
to_chat(src, "<span class='warning'>\The [M] cannot be impersonated!</span>")
|
||||
return
|
||||
if(tgui_alert(src, "You selected [M] to attempt to take over. Are you sure?", "Take Over Prey",list("No","Yes")) == "Yes")
|
||||
log_admin("[key_name_admin(src)] offered [M] to swap bodies as a morph.")
|
||||
if(tgui_alert(M, "\The [src] has elected to attempt to take over your body and control you. Is this something you will allow to happen?", "Allow Morph To Take Over",list("No","Yes")) == "Yes")
|
||||
if(tgui_alert(M, "Are you sure? The only way to undo this on your own is to OOC Escape.", "Allow Morph To Take Over",list("No","Yes")) == "Yes")
|
||||
if(tgui_alert(src, "You selected [L] to attempt to take over. Are you sure?", "Take Over Prey",list("No","Yes")) == "Yes")
|
||||
log_admin("[key_name_admin(src)] offered [L] to swap bodies as a morph.")
|
||||
if(tgui_alert(L, "\The [src] has elected to attempt to take over your body and control you. Is this something you will allow to happen?", "Allow Morph To Take Over",list("No","Yes")) == "Yes")
|
||||
if(tgui_alert(L, "Are you sure? The only way to undo this on your own is to OOC Escape.", "Allow Morph To Take Over",list("No","Yes")) == "Yes")
|
||||
if(buckled)
|
||||
buckled.unbuckle_mob()
|
||||
if(M.buckled)
|
||||
M.buckled.unbuckle_mob()
|
||||
if(L.buckled)
|
||||
L.buckled.unbuckle_mob()
|
||||
if(LAZYLEN(buckled_mobs))
|
||||
for(var/buckledmob in buckled_mobs)
|
||||
riding_datum.force_dismount(buckledmob)
|
||||
if(LAZYLEN(M.buckled_mobs))
|
||||
for(var/p_buckledmob in M.buckled_mobs)
|
||||
M.riding_datum.force_dismount(p_buckledmob)
|
||||
if(LAZYLEN(L.buckled_mobs))
|
||||
for(var/p_buckledmob in L.buckled_mobs)
|
||||
L.riding_datum.force_dismount(p_buckledmob)
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
if(M.pulledby)
|
||||
M.pulledby.stop_pulling()
|
||||
if(L.pulledby)
|
||||
L.pulledby.stop_pulling()
|
||||
stop_pulling()
|
||||
original_ckey = ckey
|
||||
log_and_message_admins("[key_name_admin(src)] has swapped bodies with [key_name_admin(M)] as a morph at [get_area(src)] - [COORD(src)].")
|
||||
new /mob/living/simple_mob/vore/morph/dominated_prey(M.vore_selected, M.ckey, src, M)
|
||||
log_and_message_admins("[key_name_admin(src)] has swapped bodies with [key_name_admin(L)] as a morph at [get_area(src)] - [COORD(src)].")
|
||||
new /mob/living/simple_mob/vore/morph/dominated_prey(L.vore_selected, L.ckey, src, L)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>\The [M] declined your request for control.</span>")
|
||||
to_chat(src, "<span class='warning'>\The [L] declined your request for control.</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>\The [M] declined your request for control.</span>")
|
||||
to_chat(src, "<span class='warning'>\The [L] declined your request for control.</span>")
|
||||
|
||||
/mob/living/simple_mob/vore/morph/dominated_prey
|
||||
name = "subservient node"
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
var/tamed = 0
|
||||
var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win!
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
|
||||
/mob/living/simple_mob/vore/otie
|
||||
|
||||
@@ -58,6 +58,8 @@
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/pakkun/Life()
|
||||
. = ..()
|
||||
if(client)
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
say_list_type = /datum/say_list/panther
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/aggressive/panther
|
||||
vore_active = 1
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
vore_default_mode = DM_HOLD
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
var/body_color //brown, black and white, leave blank for random
|
||||
|
||||
var/grumpiness = 0 // This determines how grumpy we are. Pet us to increase it, leave us alone to decrease.
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
"raptorwhite"
|
||||
)
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/raptor
|
||||
|
||||
vore_bump_chance = 25
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
say_list_type = /datum/say_list/rat
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/rat
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/rat/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
say_list_type = /datum/say_list/redpanda
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/redpanda
|
||||
vore_active = 1
|
||||
|
||||
@@ -56,6 +56,8 @@
|
||||
"scel_green"
|
||||
)
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/scel/New()
|
||||
..()
|
||||
if(random_skin)
|
||||
@@ -75,7 +77,7 @@
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
vore_capacity = 1
|
||||
swallowTime = 50
|
||||
vore_ignores_undigestable = TRUE
|
||||
vore_ignores_undigestable = FALSE
|
||||
vore_default_mode = DM_SELECT
|
||||
vore_pounce_maxhealth = 125
|
||||
vore_bump_emote = "tries to devour"
|
||||
|
||||
@@ -84,6 +84,8 @@
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
say_list_type = /datum/say_list/sect_drone
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/sect_drone/Login()
|
||||
. = ..()
|
||||
verbs |= /mob/living/simple_mob/vore/sect_drone/proc/set_abdomen_color
|
||||
|
||||
@@ -85,6 +85,8 @@
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
say_list_type = /datum/say_list/sect_queen
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/sect_queen/Login()
|
||||
. = ..()
|
||||
verbs |= /mob/living/simple_mob/vore/sect_queen/proc/set_abdomen_color
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/aggressive/giant_snake
|
||||
vore_active = 1
|
||||
|
||||
@@ -51,6 +51,7 @@ List of things solar grubs should be able to do:
|
||||
var/shock_chance = 10 // Beware
|
||||
var/tracked = FALSE
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
glow_override = TRUE
|
||||
|
||||
/datum/say_list/solargrub
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
show_vore_fx = client.prefs_vr.show_vore_fx
|
||||
step_mechanics_pref = client.prefs_vr.step_mechanics_pref
|
||||
pickup_pref = client.prefs_vr.pickup_pref
|
||||
allow_mind_transfer = client.prefs_vr.allow_mind_transfer
|
||||
|
||||
/mob/living/simple_mob/proc/set_name()
|
||||
set name = "Set Name"
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
|
||||
has_hands = 1
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Nomnomn
|
||||
/mob/living/simple_mob/vore/weretiger
|
||||
vore_active = 1
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/wolf)
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_mob/vore/wolf
|
||||
vore_active = 1
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
see_in_dark = 10
|
||||
|
||||
|
||||
//Something something, phoron mutation.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
@@ -64,5 +64,7 @@
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
say_list_type = /datum/say_list/xeno_defanged
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/datum/say_list/xeno_defanged
|
||||
say_got_target = list("hisses angrily!")
|
||||
say_got_target = list("hisses angrily!")
|
||||
|
||||
@@ -39,35 +39,35 @@
|
||||
pass = FALSE
|
||||
to_chat(src,"<span class='warning'>You have to name your custom species. Do this on the VORE tab in character setup.</span>")
|
||||
|
||||
//Check traits/costs
|
||||
var/list/megalist = client.prefs.pos_traits + client.prefs.neu_traits + client.prefs.neg_traits
|
||||
var/points_left = client.prefs.starting_trait_points
|
||||
var/traits_left = client.prefs.max_traits
|
||||
var/pref_synth = client.prefs.dirty_synth
|
||||
var/pref_meat = client.prefs.gross_meatbag
|
||||
for(var/datum/trait/T as anything in megalist)
|
||||
var/cost = traits_costs[T]
|
||||
//Check traits/costs
|
||||
var/list/megalist = client.prefs.pos_traits + client.prefs.neu_traits + client.prefs.neg_traits
|
||||
var/points_left = client.prefs.starting_trait_points
|
||||
var/traits_left = client.prefs.max_traits
|
||||
var/pref_synth = client.prefs.dirty_synth
|
||||
var/pref_meat = client.prefs.gross_meatbag
|
||||
for(var/datum/trait/T as anything in megalist)
|
||||
var/cost = traits_costs[T]
|
||||
|
||||
if(cost)
|
||||
traits_left--
|
||||
if(T.category == TRAIT_TYPE_POSITIVE)
|
||||
traits_left--
|
||||
|
||||
//A trait was removed from the game
|
||||
if(isnull(cost))
|
||||
pass = FALSE
|
||||
to_chat(src,"<span class='warning'>Your custom species is not playable. One or more traits appear to have been removed from the game or renamed. Enter character setup to correct this.</span>")
|
||||
break
|
||||
else
|
||||
points_left -= traits_costs[T]
|
||||
|
||||
var/take_flags = initial(T.can_take)
|
||||
if((pref_synth && !(take_flags & SYNTHETICS)) || (pref_meat && !(take_flags & ORGANICS)))
|
||||
pass = FALSE
|
||||
to_chat(src, "<span class='warning'>Some of your traits are not usable by your character type (synthetic traits on organic, or vice versa).</span>")
|
||||
|
||||
//Went into negatives
|
||||
if(points_left < 0 || traits_left < 0)
|
||||
//A trait was removed from the game
|
||||
if(isnull(cost))
|
||||
pass = FALSE
|
||||
to_chat(src,"<span class='warning'>Your custom species is not playable. Reconfigure your traits on the VORE tab.</span>")
|
||||
to_chat(src,"<span class='warning'>Your species is not playable. One or more traits appear to have been removed from the game or renamed. Enter character setup to correct this.</span>")
|
||||
break
|
||||
else
|
||||
points_left -= traits_costs[T]
|
||||
|
||||
var/take_flags = initial(T.can_take)
|
||||
if((pref_synth && !(take_flags & SYNTHETICS)) || (pref_meat && !(take_flags & ORGANICS)))
|
||||
pass = FALSE
|
||||
to_chat(src, "<span class='warning'>Some of your traits are not usable by your character type (synthetic traits on organic, or vice versa).</span>")
|
||||
|
||||
//Went into negatives
|
||||
if(points_left < 0 || traits_left < 0)
|
||||
pass = FALSE
|
||||
to_chat(src,"<span class='warning'>Your species is not playable. Reconfigure your traits on the VORE tab. Trait points: [points_left]. Traits left: [traits_left].</span>")
|
||||
|
||||
//Final popup notice
|
||||
if (!pass)
|
||||
|
||||
@@ -1532,3 +1532,21 @@
|
||||
extra_overlay2 = "kaiju_long_a_spikes_glow"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
//RS ADD START
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/flagtail
|
||||
name = "Flagtail"
|
||||
icon = 'icons/rogue-star/tails_64x32_rs.dmi'
|
||||
icon_state = "flagtail"
|
||||
extra_overlay = "flagtail-1"
|
||||
extra_overlay2 = "flagtail-2"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/chonksqrl
|
||||
name = "Squirrel (Big)"
|
||||
icon = 'icons/rogue-star/tails_64x32_rs.dmi'
|
||||
icon_state = "chonksqrl"
|
||||
extra_overlay = "chonksqrl-m1"
|
||||
extra_overlay2 = "chonksqrl-m2"
|
||||
|
||||
//RS ADD END
|
||||
@@ -363,69 +363,3 @@
|
||||
/datum/sprite_accessory/tail/taur/zorgoia/fat
|
||||
name = "Zorgoia (Fat Taur)"
|
||||
extra_overlay = "zorgoia_fat"
|
||||
|
||||
|
||||
/datum/sprite_accessory/tail/taur/wolf
|
||||
vore_tail_sprite_variant = "N"
|
||||
fullness_icons = 3
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/naga/naga_2c
|
||||
vore_tail_sprite_variant = "Naga"
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/horse
|
||||
vore_tail_sprite_variant = "Horse"
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/cow
|
||||
vore_tail_sprite_variant = "Cow"
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/lizard
|
||||
vore_tail_sprite_variant = "Lizard"
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/lizard/synthlizard
|
||||
vore_tail_sprite_variant = "SynthLiz"
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/feline
|
||||
vore_tail_sprite_variant = "Feline"
|
||||
belly_variant_when_loaf = TRUE
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/slug
|
||||
vore_tail_sprite_variant = "Slug"
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/drake
|
||||
vore_tail_sprite_variant = "Drake"
|
||||
belly_variant_when_loaf = TRUE
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/otie
|
||||
vore_tail_sprite_variant = "Otie"
|
||||
belly_variant_when_loaf = TRUE
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/deer
|
||||
vore_tail_sprite_variant = "Deer"
|
||||
belly_variant_when_loaf = TRUE
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
/datum/sprite_accessory/tail/taur/skunk
|
||||
vore_tail_sprite_variant = "Skunk"
|
||||
belly_variant_when_loaf = TRUE
|
||||
fullness_icons = 1
|
||||
struggle_anim = TRUE
|
||||
|
||||
@@ -84,22 +84,22 @@
|
||||
|
||||
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c
|
||||
name = "Fat Wolf 3-color (Taur)"
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //Ported from Chomp
|
||||
icon_state = "fatwolf_s"
|
||||
extra_overlay = "fatwolf_markings"
|
||||
extra_overlay2 = "fatwolf_markings_2" //CHOMPEdit
|
||||
extra_overlay2 = "fatwolf_markings_2" //Ported from Chomp
|
||||
//icon_sprite_tag = "fatwolf2c"
|
||||
loaf_offset = 3
|
||||
|
||||
/datum/sprite_accessory/tail/taur/wolf/wolf_2c_wag
|
||||
name = "Wolf 3-color (Taur, Fat vwag)"
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //Ported from Chomp
|
||||
icon_state = "wolf_s"
|
||||
extra_overlay = "wolf_markings"
|
||||
extra_overlay2 = "wolf_markings_2"
|
||||
ani_state = "fatwolf_s"
|
||||
extra_overlay_w = "fatwolf_markings"
|
||||
extra_overlay2_w = "fatwolf_markings_2" //CHOMPEdit
|
||||
extra_overlay2_w = "fatwolf_markings_2" //Ported from Chomp
|
||||
|
||||
/datum/sprite_accessory/tail/taur/wolf/synthwolf
|
||||
name = "SynthWolf dual-color (Taur)"
|
||||
@@ -323,7 +323,7 @@
|
||||
/datum/sprite_accessory/tail/taur/lizard
|
||||
name = "Lizard (Taur)"
|
||||
icon_state = "lizard_s"
|
||||
// suit_sprites = 'icons/mob/taursuits_lizard_vr.dmi' ///Chomp edit
|
||||
// suit_sprites = 'icons/mob/taursuits_lizard_vr.dmi' //Ported from Chomp
|
||||
suit_sprites = 'icons/mob/taursuits_lizard_ch.dmi'
|
||||
icon_sprite_tag = "lizard"
|
||||
can_loaf = TRUE
|
||||
@@ -488,10 +488,10 @@
|
||||
|
||||
/datum/sprite_accessory/tail/taur/feline/fatfeline_2c
|
||||
name = "Fat Feline 3-color (Taur)"
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //Ported from Chomp
|
||||
icon_state = "fatfeline_s"
|
||||
extra_overlay = "fatfeline_markings"
|
||||
extra_overlay2 = "fatfeline_markings_2" //CHOMPEdit
|
||||
extra_overlay2 = "fatfeline_markings_2" //Ported from Chomp
|
||||
//icon_sprite_tag = "fatfeline2c"
|
||||
can_loaf = TRUE
|
||||
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
|
||||
@@ -499,13 +499,13 @@
|
||||
|
||||
/datum/sprite_accessory/tail/taur/feline/feline_2c_wag
|
||||
name = "Feline 3-color (Taur, Fat vwag)"
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi' //Ported from Chomp
|
||||
icon_state = "feline_s"
|
||||
extra_overlay = "feline_markings"
|
||||
extra_overlay2 = "feline_markings_2"
|
||||
ani_state = "fatfeline_s"
|
||||
extra_overlay_w = "fatfeline_markings"
|
||||
extra_overlay2_w = "fatfeline_markings_2" //CHOMPEdit
|
||||
extra_overlay2_w = "fatfeline_markings_2" //Ported from Chomp
|
||||
loaf_offset = 3
|
||||
|
||||
/datum/sprite_accessory/tail/taur/feline/synthfeline
|
||||
@@ -930,7 +930,7 @@
|
||||
name = "Fat Sect Drone (Taur)"
|
||||
icon_state = "fat_sect_drone"
|
||||
extra_overlay = "fat_sect_drone_markings"
|
||||
icon_sprite_tag = "sect_drone" //CHOMPEdit addition
|
||||
icon_sprite_tag = "sect_drone" //Ported from Chomp
|
||||
|
||||
/datum/sprite_accessory/tail/taur/sect_drone/drone_wag
|
||||
name = "Sect Drone (Taur, Fat vwag)"
|
||||
@@ -938,7 +938,7 @@
|
||||
extra_overlay = "sect_drone_markings"
|
||||
ani_state = "fat_sect_drone"
|
||||
extra_overlay_w = "fat_sect_drone_markings"
|
||||
icon_sprite_tag = "sect_drone" //CHOMPEdit addition
|
||||
icon_sprite_tag = "sect_drone" //Ported from Chomp
|
||||
|
||||
/datum/sprite_accessory/tail/taur/giantspider_colorable//these are honestly better fit for vass icontypes whoops
|
||||
name = "Giant Spider dual-color (Taur)"
|
||||
@@ -1119,3 +1119,22 @@
|
||||
offset_y = -11
|
||||
mob_offset_y = 11
|
||||
*/
|
||||
|
||||
//RS ADD START
|
||||
|
||||
|
||||
/datum/sprite_accessory/tail/taur/bunny
|
||||
name = "Bunny (Taur, Fat vwag)"
|
||||
icon = 'icons/rogue-star/tails_64x32_rs.dmi'
|
||||
icon_state = "bnytr"
|
||||
extra_overlay = "bnytr-m1"
|
||||
extra_overlay2 = "bnytr-m2"
|
||||
ani_state = "bnytr-f"
|
||||
extra_overlay_w = "bnytr-m1"
|
||||
extra_overlay2_w = "bnytr-f-m2"
|
||||
|
||||
can_loaf = TRUE
|
||||
icon_loaf = 'icons/rogue-star/loafs_64x32.dmi'
|
||||
loaf_offset = 4
|
||||
|
||||
//RS ADD END
|
||||
@@ -512,6 +512,15 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
modular_bodyparts = MODULAR_BODYPART_PROSTHETIC
|
||||
parts = list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
|
||||
|
||||
/datum/robolimb/digi
|
||||
company = "DSI Digitigrade Legs" //yup that's how I'm fixing this, you NEED to have digi on or else oh god it looks weird
|
||||
desc = "Synthflesh-wrapped robotic digitigrade legs, for the animal in all of us."
|
||||
icon = 'icons/mob/human_races/r_digi.dmi'
|
||||
lifelike = 1
|
||||
unavailable_to_build = 1
|
||||
skin_tone = 1
|
||||
parts = list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
|
||||
|
||||
|
||||
/obj/item/weapon/disk/limb/New(var/newloc)
|
||||
..()
|
||||
|
||||
@@ -658,6 +658,8 @@
|
||||
if(H.species)
|
||||
P.accuracy += H.species.gun_accuracy_mod
|
||||
P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0)
|
||||
if(H.fear > 30)
|
||||
P.accuracy -= 35
|
||||
|
||||
//does the actual launching of the projectile
|
||||
/obj/item/weapon/gun/proc/process_projectile(obj/projectile, mob/user, atom/target, var/target_zone, var/params=null)
|
||||
|
||||
@@ -232,6 +232,11 @@
|
||||
high_message_list = list("Everything feels a bit more steady.", "Your mind feels stable.")
|
||||
sober_message_list = list("You feel a little tired.", "You feel a little more listless...")
|
||||
|
||||
/datum/reagent/drugs/citalopram/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
|
||||
M.fear = max((M.fear - 3),0)
|
||||
|
||||
/datum/reagent/drugs/paroxetine
|
||||
name = "Paroxetine"
|
||||
id = "paroxetine"
|
||||
@@ -243,6 +248,8 @@
|
||||
|
||||
/datum/reagent/drugs/paroxetine/affect_blood(mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
|
||||
M.fear = max((M.fear - 6),0)
|
||||
if(prob(5) && prob_proc == TRUE)
|
||||
to_chat(M, "<span class='warning'>Everything feels out of control...</span>")
|
||||
M.hallucination += 200
|
||||
|
||||
@@ -929,28 +929,35 @@
|
||||
// The next function sets the messages on the belly, from human-readable var
|
||||
// replacement strings and linebreaks as delimiters (two \n\n by default).
|
||||
// They also sanitize the messages.
|
||||
/obj/belly/proc/set_messages(raw_text, type, delim = "\n\n")
|
||||
// Give them a limit for each type...
|
||||
/obj/belly/proc/set_messages(raw_text, type, delim = "\n\n", limit)
|
||||
if(!limit)
|
||||
CRASH("[src] set message called without limit!")
|
||||
ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "escao" || type == "escap" || type == "escp" || type == "esco" || type == "escout" || type == "escip" || type == "escio" || type == "esciout" || type == "escfp" || type == "escfo" || type == "aescao" || type == "aescap" || type == "aescp" || type == "aesco" || type == "aescout" || type == "aescfp" || type == "aescfo" || type == "trnspp" || type == "trnspo" || type == "trnssp" || type == "trnsso" || type == "stmodp" || type == "stmodo" || type == "stmoap" || type == "stmoao" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
|
||||
|
||||
var/list/raw_list = splittext(html_encode(raw_text),delim)
|
||||
var/list/raw_list
|
||||
|
||||
if(findtext(raw_text, delim))
|
||||
raw_list = splittext(html_encode(raw_text), delim)
|
||||
else
|
||||
raw_list = list(raw_text)
|
||||
if(raw_list.len > 10)
|
||||
raw_list.Cut(11)
|
||||
log_debug("[owner] tried to set [lowertext(name)] with 11+ messages")
|
||||
|
||||
var/realIndex = 0
|
||||
for(var/i = 1, i <= raw_list.len, i++)
|
||||
if((length(raw_list[i]) > 160 || length(raw_list[i]) < 10) && !(type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")) //160 is fudged value due to htmlencoding increasing the size
|
||||
raw_list.Cut(i,i)
|
||||
log_debug("[owner] tried to set [lowertext(name)] with >121 or <10 char message")
|
||||
else if((type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb") && (length(raw_list[i]) > 510 || length(raw_list[i]) < 10))
|
||||
raw_list.Cut(i,i)
|
||||
log_debug("[owner] tried to set [lowertext(name)] idle message with >501 or <10 char message")
|
||||
else if((type == "em" || type == "ema") && (length(raw_list[i]) > 260 || length(raw_list[i]) < 10))
|
||||
raw_list.Cut(i,i)
|
||||
log_debug("[owner] tried to set [lowertext(name)] examine message with >260 or <10 char message")
|
||||
else
|
||||
raw_list[i] = readd_quotes(raw_list[i])
|
||||
//Also fix % sign for var replacement
|
||||
raw_list[i] = replacetext(raw_list[i],"%","%")
|
||||
realIndex++
|
||||
raw_list[i] = readd_quotes(raw_list[i])
|
||||
//Also fix % sign for var replacement
|
||||
raw_list[i] = replacetext(raw_list[i],"%","%")
|
||||
if(length(raw_list[i]) > limit || length(raw_list[i]) < 10)
|
||||
to_chat(owner, span_warning("One of the message for [lowertext(name)] exceeded the limit of [limit] characters or has been below the lower limit of 10 characters and has been removed. Actual length: [length(raw_list[i])]"))
|
||||
//Reflect message to the player so that they don't just lose it
|
||||
to_chat(owner, span_warning("Message [realIndex]: [raw_list[i]]"))
|
||||
log_debug("[owner] tried to set [lowertext(name)] [type] message with >[limit] or <10 characters")
|
||||
raw_list.Cut(i, i + 1)
|
||||
i--
|
||||
|
||||
ASSERT(raw_list.len <= 10) //Sanity
|
||||
|
||||
|
||||
@@ -264,6 +264,7 @@
|
||||
P.nutrition_messages = src.nutrition_messages
|
||||
P.weight_message_visible = src.weight_message_visible
|
||||
P.weight_messages = src.weight_messages
|
||||
P.allow_mind_transfer = src.allow_mind_transfer
|
||||
|
||||
P.vore_sprite_color = istype(src, /mob/living/carbon/human) ? src:vore_sprite_color : null
|
||||
|
||||
@@ -316,6 +317,7 @@
|
||||
nutrition_messages = P.nutrition_messages
|
||||
weight_message_visible = P.weight_message_visible
|
||||
weight_messages = P.weight_messages
|
||||
allow_mind_transfer = P.allow_mind_transfer
|
||||
|
||||
|
||||
if (istype(src, /mob/living/carbon/human))
|
||||
@@ -331,6 +333,78 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/proc/load_vore_prefs_from_slot()
|
||||
|
||||
var/datum/preferences/P = client.prefs
|
||||
|
||||
var/remembered_default = P.load_vore_prefs_from_client(src) //Loads the preferences of a chosen slot
|
||||
if(!remembered_default)
|
||||
return
|
||||
|
||||
apply_vore_prefs() //Applies the vore preferences of said slot
|
||||
|
||||
if(remembered_default)
|
||||
P.return_to_character_slot(src, remembered_default) //sets you back to the original default slot
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
/datum/preferences/proc/load_vore_prefs_from_client(mob/user)
|
||||
if(selecting_slots)
|
||||
to_chat(user, "<span class='warning'>You already have a slot selection dialog open!</span>")
|
||||
return
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
error("Somehow missing savefile path?! [path]")
|
||||
return
|
||||
|
||||
var/name
|
||||
var/nickname //vorestation edit - This set appends nicknames to the save slot
|
||||
var/list/charlist = list()
|
||||
var/default //VOREStation edit
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
S["nickname"] >> nickname //vorestation edit
|
||||
if(!name)
|
||||
name = "[i] - \[Unused Slot\]"
|
||||
else if(i == default_slot)
|
||||
name = "►[i] - [name]"
|
||||
else
|
||||
name = "[i] - [name]"
|
||||
if (i == default_slot) //VOREStation edit
|
||||
default = "[name][nickname ? " ([nickname])" : ""]"
|
||||
charlist["[name][nickname ? " ([nickname])" : ""]"] = i
|
||||
|
||||
var/remember_default = default_slot
|
||||
|
||||
selecting_slots = TRUE
|
||||
var/choice = tgui_input_list(user, "Select a character to load:", "Load Slot", charlist, default)
|
||||
selecting_slots = FALSE
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
var/slotnum = charlist[choice]
|
||||
if(!slotnum)
|
||||
error("Player picked [choice] slot to load, but that wasn't one we sent.")
|
||||
return
|
||||
|
||||
load_character(slotnum)
|
||||
attempt_vr(user.client?.prefs_vr,"load_vore","") //VOREStation Edit
|
||||
sanitize_preferences()
|
||||
|
||||
return remember_default
|
||||
|
||||
/datum/preferences/proc/return_to_character_slot(mob/user, var/remembered_default)
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
error("Somehow missing savefile path?! [path]")
|
||||
return
|
||||
|
||||
load_character(remembered_default)
|
||||
attempt_vr(user.client?.prefs_vr,"load_vore","") //VOREStation Edit
|
||||
sanitize_preferences()
|
||||
|
||||
//
|
||||
// Release everything in every vore organ
|
||||
//
|
||||
@@ -1135,6 +1209,7 @@
|
||||
dispvoreprefs += "<b>Food Vore:</b> [food_vore ? "Enabled" : "Disabled"]<br>"
|
||||
dispvoreprefs += "<b>Inbelly Spawning:</b> [allow_inbelly_spawning ? "Allowed" : "Disallowed"]<br>"
|
||||
dispvoreprefs += "<b>Spontaneous transformation:</b> [allow_spontaneous_tf ? "Enabled" : "Disabled"]<br>"
|
||||
dispvoreprefs += "<b>Mind transfer:</b> [allow_mind_transfer ? "Allowed" : "Disallowed"]<br>"
|
||||
dispvoreprefs += "<b>Can be stepped on/over:</b> [step_mechanics_pref ? "Allowed" : "Disallowed"]<br>"
|
||||
dispvoreprefs += "<b>Can be picked up:</b> [pickup_pref ? "Allowed" : "Disallowed"]<br>"
|
||||
dispvoreprefs += "<b>Global Vore Privacy is:</b> [eating_privacy_global ? "Subtle" : "Loud"]<br>"
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
var/selective_preference = DM_DEFAULT // Preference for selective bellymode
|
||||
var/text_warnings = TRUE // Allows us to dismiss the text limit warning messages after viewing it once per round
|
||||
var/eating_privacy_global = FALSE // Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var
|
||||
var/allow_mind_transfer = FALSE //Allows ones mind to be taken over or swapped
|
||||
var/nutrition_message_visible = TRUE
|
||||
var/list/nutrition_messages = list(
|
||||
"They are starving! You can hear their stomach snarling from across the room!",
|
||||
|
||||
@@ -70,6 +70,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
var/pickup_pref = TRUE
|
||||
|
||||
var/vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000")
|
||||
var/allow_mind_transfer = FALSE
|
||||
|
||||
var/list/belly_prefs = list()
|
||||
var/vore_taste = "nothing in particular"
|
||||
@@ -196,6 +197,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
weight_messages = json_from_file["weight_messages"]
|
||||
eating_privacy_global = json_from_file["eating_privacy_global"]
|
||||
vore_sprite_color = json_from_file["vore_sprite_color"]
|
||||
allow_mind_transfer = json_from_file["allow_mind_transfer"]
|
||||
|
||||
//Quick sanitize
|
||||
if(isnull(digestable))
|
||||
@@ -284,6 +286,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
weight_messages.Add("")
|
||||
if(isnull(vore_sprite_color))
|
||||
vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000")
|
||||
if(isnull(allow_mind_transfer))
|
||||
allow_mind_transfer = FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/vore_preferences/proc/save_vore()
|
||||
@@ -317,6 +321,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
"slip_vore" = slip_vore,
|
||||
"stumble_vore" = stumble_vore,
|
||||
"throw_vore" = throw_vore,
|
||||
"allow_mind_transfer" = allow_mind_transfer,
|
||||
"food_vore" = food_vore,
|
||||
"digest_pain" = digest_pain,
|
||||
"nutrition_message_visible" = nutrition_message_visible,
|
||||
|
||||
@@ -335,6 +335,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
|
||||
"step_mechanics_active" = host.step_mechanics_pref,
|
||||
"pickup_mechanics_active" = host.pickup_pref,
|
||||
"noisy" = host.noisy,
|
||||
"allow_mind_transfer" = host.allow_mind_transfer,
|
||||
"drop_vore" = host.drop_vore,
|
||||
"slip_vore" = host.slip_vore,
|
||||
"stumble_vore" = host.stumble_vore,
|
||||
@@ -444,6 +445,16 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
|
||||
to_chat(usr,"<span class='notice'>Virgo-specific preferences applied from active slot!</span>")
|
||||
unsaved_changes = FALSE
|
||||
return TRUE
|
||||
if("loadprefsfromslot")
|
||||
var/alert = tgui_alert(usr, "Are you sure you want to load another character slot's preferences? This will remove your current vore organs and eject their contents. This will not be immediately saved to your character slot, and you will need to save manually to overwrite your current bellies and preferences.","Confirmation",list("Load","Cancel"))
|
||||
if(alert != "Load")
|
||||
return FALSE
|
||||
if(!host.load_vore_prefs_from_slot())
|
||||
tgui_alert_async(usr, "ERROR: Virgo-specific preferences failed to apply!","Error")
|
||||
else
|
||||
to_chat(usr,"<span class='notice'>Virgo-specific preferences applied from active slot!</span>")
|
||||
unsaved_changes = TRUE
|
||||
return TRUE
|
||||
if("exportpanel")
|
||||
var/mob/living/user = usr
|
||||
if(!user)
|
||||
@@ -569,6 +580,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
|
||||
host.client.prefs_vr.pickup_pref = host.pickup_pref
|
||||
unsaved_changes = TRUE
|
||||
return TRUE
|
||||
if("toggle_allow_mind_transfer")
|
||||
host.allow_mind_transfer = !host.allow_mind_transfer
|
||||
if(host.client.prefs_vr)
|
||||
host.client.prefs_vr.allow_mind_transfer = host.allow_mind_transfer
|
||||
unsaved_changes = TRUE
|
||||
return TRUE
|
||||
if("toggle_healbelly")
|
||||
host.permit_healbelly = !host.permit_healbelly
|
||||
if(host.client.prefs_vr)
|
||||
@@ -1070,193 +1087,193 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
|
||||
. = TRUE
|
||||
if("b_msgs")
|
||||
if(user.text_warnings)
|
||||
if(tgui_alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message (250 for examines, 500 for idle messages), max 10 messages per topic.","Really, don't.",list("OK", "Disable Warnings")) == "Disable Warnings") // Should remain tgui_alert() (blocking)
|
||||
if(tgui_alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max [MAX_MESSAGE_LEN / 4] characters per message ([MAX_MESSAGE_LEN / 2] for examines, [MAX_MESSAGE_LEN / 4] for idle messages), max 10 messages per topic or a total of [MAX_MESSAGE_LEN * 1.5] characters.","Really, don't.",list("OK", "Disable Warnings")) == "Disable Warnings") // Should remain tgui_alert() (blocking)
|
||||
user.text_warnings = FALSE
|
||||
var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly. '%countprey' will be replaced with the number of living prey in your belly."
|
||||
switch(params["msgtype"])
|
||||
if("dmp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"dmp")
|
||||
host.vore_selected.set_messages(new_message,"dmp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("dmo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages("dmo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages("dmo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"dmo")
|
||||
host.vore_selected.set_messages(new_message,"dmo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("amp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("amp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorb Message (to prey)",host.vore_selected.get_messages("amp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"amp")
|
||||
host.vore_selected.set_messages(new_message,"amp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("amo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("amo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorb Message (to you)",host.vore_selected.get_messages("amo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"amo")
|
||||
host.vore_selected.set_messages(new_message,"amo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("uamp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("uamp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Unabsorb Message (to prey)",host.vore_selected.get_messages("uamp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"uamp")
|
||||
host.vore_selected.set_messages(new_message,"uamp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("uamo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("uamo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Unabsorb Message (to you)",host.vore_selected.get_messages("uamo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"uamo")
|
||||
host.vore_selected.set_messages(new_message,"uamo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("smo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"smo")
|
||||
host.vore_selected.set_messages(new_message,"smo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("smi")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages("smi"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages("smi"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"smi")
|
||||
host.vore_selected.set_messages(new_message,"smi", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("asmo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (outside)",host.vore_selected.get_messages("asmo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorbed Struggle Message (outside)",host.vore_selected.get_messages("asmo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"asmo")
|
||||
host.vore_selected.set_messages(new_message,"asmo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("asmi")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (inside)",host.vore_selected.get_messages("asmi"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorbed Struggle Message (inside)",host.vore_selected.get_messages("asmi"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"asmi")
|
||||
host.vore_selected.set_messages(new_message,"asmi", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escap")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Escape Attempt Message (to prey)",host.vore_selected.get_messages("escap"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Escape Attempt Message (to prey)",host.vore_selected.get_messages("escap"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escap")
|
||||
host.vore_selected.set_messages(new_message,"escap", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escao")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Attempt Message (to you)",host.vore_selected.get_messages("escao"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Attempt Message (to you)",host.vore_selected.get_messages("escao"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escao")
|
||||
host.vore_selected.set_messages(new_message,"escao", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they escape from within you. Write them in 2nd person ('you climb out of Y)."+help,"Escape Message (to prey)",host.vore_selected.get_messages("escp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they escape from within you. Write them in 2nd person ('you climb out of Y)."+help,"Escape Message (to prey)",host.vore_selected.get_messages("escp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escp")
|
||||
host.vore_selected.set_messages(new_message,"escp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("esco")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Message (to you)",host.vore_selected.get_messages("esco"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Message (to you)",host.vore_selected.get_messages("esco"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"esco")
|
||||
host.vore_selected.set_messages(new_message,"esco", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escout")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey escapes from within you. Write them in 3rd person ('X climbs out of Z's Y')."+help,"Escape Message (outside)",host.vore_selected.get_messages("escout"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey escapes from within you. Write them in 3rd person ('X climbs out of Z's Y')."+help,"Escape Message (outside)",host.vore_selected.get_messages("escout"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escout")
|
||||
host.vore_selected.set_messages(new_message,"escout", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escip")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they manage to eject an item from within you. Write them in 2nd person ('you manage to O'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to prey)",host.vore_selected.get_messages("escip"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they manage to eject an item from within you. Write them in 2nd person ('you manage to O'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to prey)",host.vore_selected.get_messages("escip"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escip")
|
||||
host.vore_selected.set_messages(new_message,"escip", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escio")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey manages to eject an item from within you. Write them in 2nd person ('O slips from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to you)",host.vore_selected.get_messages("escio"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey manages to eject an item from within you. Write them in 2nd person ('O slips from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to you)",host.vore_selected.get_messages("escio"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escio")
|
||||
host.vore_selected.set_messages(new_message,"escio", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("esciout")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey manages to eject an item from within you. Write them in 3rd person ('O from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (outside)",host.vore_selected.get_messages("esciout"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey manages to eject an item from within you. Write them in 3rd person ('O from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (outside)",host.vore_selected.get_messages("esciout"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"esciout")
|
||||
host.vore_selected.set_messages(new_message,"esciout", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escfp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Escape Fail Message (to prey)",host.vore_selected.get_messages("escfp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Escape Fail Message (to prey)",host.vore_selected.get_messages("escfp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escfp")
|
||||
host.vore_selected.set_messages(new_message,"escfp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("escfo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Escape Fail Message (to you)",host.vore_selected.get_messages("escfo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Escape Fail Message (to you)",host.vore_selected.get_messages("escfo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"escfo")
|
||||
host.vore_selected.set_messages(new_message,"escfo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aescap")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Absorbed Escape Attempt Message (to prey)",host.vore_selected.get_messages("aescap"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Absorbed Escape Attempt Message (to prey)",host.vore_selected.get_messages("aescap"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aescap")
|
||||
host.vore_selected.set_messages(new_message,"aescap", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aescao")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Attempt Message (to you)",host.vore_selected.get_messages("aescao"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Attempt Message (to you)",host.vore_selected.get_messages("aescao"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aescao")
|
||||
host.vore_selected.set_messages(new_message,"aescao", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aescp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they escape from within you. Write them in 2nd person ('you escape from Y')."+help,"Absorbed Escape Message (to prey)",host.vore_selected.get_messages("aescp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they escape from within you. Write them in 2nd person ('you escape from Y')."+help,"Absorbed Escape Message (to prey)",host.vore_selected.get_messages("aescp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aescp")
|
||||
host.vore_selected.set_messages(new_message,"aescp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aesco")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Message (to you)",host.vore_selected.get_messages("aesco"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Message (to you)",host.vore_selected.get_messages("aesco"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aesco")
|
||||
host.vore_selected.set_messages(new_message,"aesco", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aescout")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when absorbed prey escapes from within you. Write them in 3rd person ('X escapes from Z's Y')."+help,"Absorbed Escape Message (outside)",host.vore_selected.get_messages("aescout"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when absorbed prey escapes from within you. Write them in 3rd person ('X escapes from Z's Y')."+help,"Absorbed Escape Message (outside)",host.vore_selected.get_messages("aescout"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aescout")
|
||||
host.vore_selected.set_messages(new_message,"aescout", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aescfp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Absorbed Escape Fail Message (to prey)",host.vore_selected.get_messages("aescfp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Absorbed Escape Fail Message (to prey)",host.vore_selected.get_messages("aescfp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aescfp")
|
||||
host.vore_selected.set_messages(new_message,"aescfp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("aescfo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Absorbed Escape Fail Message (to you)",host.vore_selected.get_messages("aescfo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Absorbed Escape Fail Message (to you)",host.vore_selected.get_messages("aescfo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"aescfo")
|
||||
host.vore_selected.set_messages(new_message,"aescfo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("trnspp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your primary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to prey)",host.vore_selected.get_messages("trnspp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your primary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to prey)",host.vore_selected.get_messages("trnspp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"trnspp")
|
||||
host.vore_selected.set_messages(new_message,"trnspp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("trnspo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to you)",host.vore_selected.get_messages("trnspo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to you)",host.vore_selected.get_messages("trnspo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"trnspo")
|
||||
host.vore_selected.set_messages(new_message,"trnspo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("trnssp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your secondary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to prey)",host.vore_selected.get_messages("trnssp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your secondary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to prey)",host.vore_selected.get_messages("trnssp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"trnssp")
|
||||
host.vore_selected.set_messages(new_message,"trnssp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("trnsso")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to you)",host.vore_selected.get_messages("trnsso"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to you)",host.vore_selected.get_messages("trnsso"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"trnsso")
|
||||
host.vore_selected.set_messages(new_message,"trnsso", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("stmodp")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages("stmodp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages("stmodp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"stmodp")
|
||||
host.vore_selected.set_messages(new_message,"stmodp", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("stmodo")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages("stmodo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages("stmodo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"stmodo")
|
||||
host.vore_selected.set_messages(new_message,"stmodo", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("stmoap")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages("stmoap"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages("stmoap"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"stmoap")
|
||||
host.vore_selected.set_messages(new_message,"stmoap", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("stmoao")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages("stmoao"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages("stmoao"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"stmoao")
|
||||
host.vore_selected.set_messages(new_message,"stmoao", limit = MAX_MESSAGE_LEN / 4)
|
||||
if("em")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"em")
|
||||
host.vore_selected.set_messages(new_message,"em", limit = MAX_MESSAGE_LEN / 2)
|
||||
|
||||
if("ema")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"ema")
|
||||
host.vore_selected.set_messages(new_message,"ema", limit = MAX_MESSAGE_LEN / 2)
|
||||
|
||||
if("en")
|
||||
var/list/indices = list(1,2,3,4,5,6,7,8,9,10)
|
||||
@@ -1285,59 +1302,59 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
|
||||
host.weight_messages[index] = new_message
|
||||
|
||||
if("im_digest")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Digest mode. Write them in 2nd person ('%pred's %belly squishes down on you.')."+help,"Idle Message (Digest)",host.vore_selected.get_messages("im_digest"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Digest mode. Write them in 2nd person ('%pred's %belly squishes down on you.')."+help,"Idle Message (Digest)",host.vore_selected.get_messages("im_digest"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_digest")
|
||||
host.vore_selected.set_messages(new_message,"im_digest", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_hold")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Hold mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Hold)",host.vore_selected.get_messages("im_hold"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Hold mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Hold)",host.vore_selected.get_messages("im_hold"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_hold")
|
||||
host.vore_selected.set_messages(new_message,"im_hold", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_holdabsorbed")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages("im_holdabsorbed"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages("im_holdabsorbed"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_holdabsorbed")
|
||||
host.vore_selected.set_messages(new_message,"im_holdabsorbed", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_absorb")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages("im_absorb"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages("im_absorb"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_absorb")
|
||||
host.vore_selected.set_messages(new_message,"im_absorb", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_heal")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Heal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Heal)",host.vore_selected.get_messages("im_heal"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Heal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Heal)",host.vore_selected.get_messages("im_heal"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_heal")
|
||||
host.vore_selected.set_messages(new_message,"im_heal", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_drain")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Drain mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Drain)",host.vore_selected.get_messages("im_drain"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Drain mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Drain)",host.vore_selected.get_messages("im_drain"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_drain")
|
||||
host.vore_selected.set_messages(new_message,"im_drain", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_steal")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Size Steal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Size Steal)",host.vore_selected.get_messages("im_steal"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Size Steal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Size Steal)",host.vore_selected.get_messages("im_steal"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_steal")
|
||||
host.vore_selected.set_messages(new_message,"im_steal", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_egg")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Encase In Egg mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Encase In Egg)",host.vore_selected.get_messages("im_egg"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Encase In Egg mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Encase In Egg)",host.vore_selected.get_messages("im_egg"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_egg")
|
||||
host.vore_selected.set_messages(new_message,"im_egg", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_shrink")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Shrink mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Shrink)",host.vore_selected.get_messages("im_shrink"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Shrink mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Shrink)",host.vore_selected.get_messages("im_shrink"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_shrink")
|
||||
host.vore_selected.set_messages(new_message,"im_shrink", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_grow")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Grow mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Grow)",host.vore_selected.get_messages("im_grow"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Grow mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Grow)",host.vore_selected.get_messages("im_grow"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_grow")
|
||||
host.vore_selected.set_messages(new_message,"im_grow", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("im_unabsorb")
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Unabsorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Unabsorb)",host.vore_selected.get_messages("im_unabsorb"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
|
||||
var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Unabsorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Unabsorb)",host.vore_selected.get_messages("im_unabsorb"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
|
||||
if(new_message)
|
||||
host.vore_selected.set_messages(new_message,"im_unabsorb")
|
||||
host.vore_selected.set_messages(new_message,"im_unabsorb", limit = MAX_MESSAGE_LEN / 4)
|
||||
|
||||
if("reset")
|
||||
var/confirm = tgui_alert(user,"This will delete any custom messages. Are you sure?","Confirmation",list("Cancel","DELETE"))
|
||||
|
||||
@@ -250,6 +250,7 @@
|
||||
new_mob.allow_spontaneous_tf = allow_spontaneous_tf
|
||||
new_mob.eating_privacy_global = eating_privacy_global
|
||||
new_mob.text_warnings = text_warnings
|
||||
new_mob.allow_mind_transfer = allow_mind_transfer
|
||||
|
||||
/////SUBTYPES/////
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 2.3 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 429 KiB After Width: | Height: | Size: 435 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
+1
-1
@@ -50,7 +50,7 @@
|
||||
"swc-loader": "^0.2.6",
|
||||
"typescript": "^5.4.3",
|
||||
"url-loader": "^4.1.1",
|
||||
"webpack": "^5.91.0",
|
||||
"webpack": "^5.94.0",
|
||||
"webpack-bundle-analyzer": "^4.10.1",
|
||||
"webpack-cli": "^5.1.4"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "5.0.1",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"axios": "^1.6.8",
|
||||
"axios": "^1.7.4",
|
||||
"glob": "^7.2.3",
|
||||
"source-map": "^0.7.4",
|
||||
"stacktrace-parser": "^0.1.10",
|
||||
|
||||
@@ -137,12 +137,10 @@ export class DraggableControl extends Component {
|
||||
} else if (this.inputRef) {
|
||||
const input = this.inputRef.current;
|
||||
input.value = internalValue;
|
||||
// IE8: Dies when trying to focus a hidden element
|
||||
// (Error: Object does not support this action)
|
||||
try {
|
||||
setTimeout(() => {
|
||||
input.focus();
|
||||
input.select();
|
||||
} catch {}
|
||||
}, 100);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -174,12 +174,10 @@ export class NumberInput extends Component<Props, State> {
|
||||
} else if (this.inputRef) {
|
||||
const input = this.inputRef.current!;
|
||||
input.value = String(internalValue);
|
||||
// IE8: Dies when trying to focus a hidden element
|
||||
// (Error: Object does not support this action)
|
||||
try {
|
||||
setTimeout(() => {
|
||||
input.focus();
|
||||
input.select();
|
||||
} catch {}
|
||||
}, 100);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ export const SupplyConsoleMenu = (props) => {
|
||||
tab[4] = <SupplyConsoleMenuHistoryExport />;
|
||||
|
||||
return (
|
||||
<Section title="Menu" scrollable>
|
||||
<Section title="Menu">
|
||||
<Tabs>
|
||||
<Tabs.Tab
|
||||
icon="box"
|
||||
|
||||
@@ -11,7 +11,7 @@ export const SupplyConsoleMenuHistoryExport = (props) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<Section>
|
||||
<Section scrollable fill height="290px">
|
||||
{receipts.map((r, ri) => (
|
||||
<Section key={ri}>
|
||||
<LabeledList>
|
||||
|
||||
@@ -16,7 +16,7 @@ export const SupplyConsoleMenuOrderList = (props) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<Section>
|
||||
<Section scrollable fill height="290px">
|
||||
{mode === 'Requested' && order_auth ? (
|
||||
<Button
|
||||
mt={-1}
|
||||
|
||||
@@ -17,9 +17,9 @@ export const VoreBellySelectionAndCustomization = (props: {
|
||||
const { our_bellies, selected, show_pictures, host_mobtype } = props;
|
||||
|
||||
return (
|
||||
<Flex>
|
||||
<Flex.Item shrink>
|
||||
<Section title="My Bellies" scrollable>
|
||||
<Flex height="83%">
|
||||
<Flex.Item shrink basis="30%">
|
||||
<Section title="My Bellies" scrollable fill>
|
||||
<Tabs vertical>
|
||||
<Tabs.Tab onClick={() => act('newbelly')}>
|
||||
New
|
||||
@@ -53,7 +53,7 @@ export const VoreBellySelectionAndCustomization = (props: {
|
||||
</Flex.Item>
|
||||
<Flex.Item grow>
|
||||
{selected && (
|
||||
<Section title={selected.belly_name}>
|
||||
<Section title={selected.belly_name} fill scrollable>
|
||||
<VoreSelectedBelly
|
||||
belly={selected}
|
||||
show_pictures={show_pictures}
|
||||
|
||||
+153
-116
@@ -1,5 +1,8 @@
|
||||
import { useBackend } from '../../../backend';
|
||||
import { Button, LabeledList } from '../../../components';
|
||||
import { ReactNode, useEffect, useState } from 'react';
|
||||
import { useBackend } from 'tgui/backend';
|
||||
import { Box, Button, LabeledList } from 'tgui/components';
|
||||
|
||||
import { SYNTAX_COLOR, SYNTAX_REGEX } from '../constants';
|
||||
import { selectedData } from '../types';
|
||||
import { VoreSelectedBellyDescriptionsBellymode } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode';
|
||||
import { VoreSelectedBellyDescriptionsEscape } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape';
|
||||
@@ -8,6 +11,39 @@ import { VoreSelectedBellyDescriptionsInteractionChance } from '../VoreSelectedB
|
||||
import { VoreSelectedBellyDescriptionsStruggle } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsStruggle';
|
||||
import { VoreSelectedBellyDescriptionsTransfer } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer';
|
||||
|
||||
const DescriptionSyntaxHighlighting = (props: { desc: string }) => {
|
||||
const { desc } = props;
|
||||
const [htmlDesc, setHtmlDesc] = useState<ReactNode[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!desc || desc.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let elements: ReactNode[] = [];
|
||||
|
||||
const regexCopy = new RegExp(SYNTAX_REGEX);
|
||||
|
||||
let lastIndex = 0;
|
||||
let result;
|
||||
while ((result = regexCopy.exec(desc)) !== null) {
|
||||
elements.push(<>{desc.substring(lastIndex, result.index)}</>);
|
||||
elements.push(
|
||||
<Box inline color={SYNTAX_COLOR[result[0]]}>
|
||||
{result[0]}
|
||||
</Box>,
|
||||
);
|
||||
lastIndex = result.index + result[0].length;
|
||||
}
|
||||
|
||||
elements.push(<>{desc.substring(lastIndex)}</>);
|
||||
|
||||
setHtmlDesc(elements);
|
||||
}, [desc]);
|
||||
|
||||
return <Box preserveWhitespace>{htmlDesc}</Box>;
|
||||
};
|
||||
|
||||
export const VoreSelectedBellyDescriptions = (props: {
|
||||
belly: selectedData;
|
||||
}) => {
|
||||
@@ -27,127 +63,128 @@ export const VoreSelectedBellyDescriptions = (props: {
|
||||
} = belly;
|
||||
|
||||
return (
|
||||
<LabeledList>
|
||||
<LabeledList.Item
|
||||
label="Description"
|
||||
buttons={
|
||||
<Button
|
||||
onClick={() => act('set_attribute', { attribute: 'b_desc' })}
|
||||
icon="pen"
|
||||
/>
|
||||
}
|
||||
>
|
||||
{desc}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Description (Absorbed)"
|
||||
buttons={
|
||||
<Box>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Vore Verb">
|
||||
<Button onClick={() => act('set_attribute', { attribute: 'b_verb' })}>
|
||||
{verb}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Release Verb">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_absorbed_desc' })
|
||||
act('set_attribute', { attribute: 'b_release_verb' })
|
||||
}
|
||||
icon="pen"
|
||||
/>
|
||||
}
|
||||
>
|
||||
{absorbed_desc}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Vore Verb">
|
||||
<Button onClick={() => act('set_attribute', { attribute: 'b_verb' })}>
|
||||
{verb}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Release Verb">
|
||||
<Button
|
||||
onClick={() => act('set_attribute', { attribute: 'b_release_verb' })}
|
||||
>
|
||||
{release_verb}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Show All Messages">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', {
|
||||
attribute: 'b_message_mode',
|
||||
})
|
||||
}
|
||||
icon={message_mode ? 'toggle-on' : 'toggle-off'}
|
||||
selected={message_mode}
|
||||
>
|
||||
{message_mode ? 'True' : 'False'}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Examine Messages">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_msgs', msgtype: 'em' })
|
||||
}
|
||||
>
|
||||
Examine Message (when full)
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_msgs', msgtype: 'ema' })
|
||||
}
|
||||
>
|
||||
Examine Message (with absorbed victims)
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
{message_mode || escapable ? (
|
||||
<>
|
||||
<VoreSelectedBellyDescriptionsStruggle />
|
||||
<VoreSelectedBellyDescriptionsEscape
|
||||
>
|
||||
{release_verb}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Show All Messages">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', {
|
||||
attribute: 'b_message_mode',
|
||||
})
|
||||
}
|
||||
icon={message_mode ? 'toggle-on' : 'toggle-off'}
|
||||
selected={message_mode}
|
||||
>
|
||||
{message_mode ? 'True' : 'False'}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Examine Messages">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_msgs', msgtype: 'em' })
|
||||
}
|
||||
>
|
||||
Examine Message (when full)
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_msgs', msgtype: 'ema' })
|
||||
}
|
||||
>
|
||||
Examine Message (with absorbed victims)
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
{message_mode || escapable ? (
|
||||
<>
|
||||
<VoreSelectedBellyDescriptionsStruggle />
|
||||
<VoreSelectedBellyDescriptionsEscape
|
||||
message_mode={message_mode}
|
||||
interacts={interacts}
|
||||
/>
|
||||
{(message_mode ||
|
||||
!!interacts.transferlocation ||
|
||||
!!interacts.transferlocation_secondary) && (
|
||||
<VoreSelectedBellyDescriptionsTransfer
|
||||
message_mode={message_mode}
|
||||
interacts={interacts}
|
||||
/>
|
||||
)}
|
||||
{(message_mode ||
|
||||
interacts.digestchance > 0 ||
|
||||
interacts.absorbchance > 0) && (
|
||||
<VoreSelectedBellyDescriptionsInteractionChance
|
||||
message_mode={message_mode}
|
||||
interacts={interacts}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{(message_mode ||
|
||||
mode === 'Digest' ||
|
||||
mode === 'Selective' ||
|
||||
mode === 'Absorb' ||
|
||||
mode === 'Unabsorb') && (
|
||||
<VoreSelectedBellyDescriptionsBellymode
|
||||
message_mode={message_mode}
|
||||
interacts={interacts}
|
||||
mode={mode}
|
||||
/>
|
||||
{(message_mode ||
|
||||
!!interacts.transferlocation ||
|
||||
!!interacts.transferlocation_secondary) && (
|
||||
<VoreSelectedBellyDescriptionsTransfer
|
||||
message_mode={message_mode}
|
||||
interacts={interacts}
|
||||
/>
|
||||
)}
|
||||
{(message_mode ||
|
||||
interacts.digestchance > 0 ||
|
||||
interacts.absorbchance > 0) && (
|
||||
<VoreSelectedBellyDescriptionsInteractionChance
|
||||
message_mode={message_mode}
|
||||
interacts={interacts}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{(message_mode ||
|
||||
mode === 'Digest' ||
|
||||
mode === 'Selective' ||
|
||||
mode === 'Absorb' ||
|
||||
mode === 'Unabsorb') && (
|
||||
<VoreSelectedBellyDescriptionsBellymode
|
||||
message_mode={message_mode}
|
||||
mode={mode}
|
||||
/>
|
||||
)}
|
||||
{emote_active ? (
|
||||
<VoreSelectedBellyDescriptionsIdle
|
||||
message_mode={message_mode}
|
||||
mode={mode}
|
||||
/>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
<LabeledList.Item label="Reset Messages">
|
||||
)}
|
||||
{emote_active ? (
|
||||
<VoreSelectedBellyDescriptionsIdle
|
||||
message_mode={message_mode}
|
||||
mode={mode}
|
||||
/>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
<LabeledList.Item label="Reset Messages">
|
||||
<Button
|
||||
color="red"
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_msgs', msgtype: 'reset' })
|
||||
}
|
||||
>
|
||||
Reset Messages
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
<Box color="label" mt={1} mb={1}>
|
||||
Description:{' '}
|
||||
<Button
|
||||
color="red"
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_msgs', msgtype: 'reset' })
|
||||
}
|
||||
icon="pencil"
|
||||
onClick={() => act('set_attribute', { attribute: 'b_desc' })}
|
||||
>
|
||||
Reset Messages
|
||||
Edit
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Box>
|
||||
<DescriptionSyntaxHighlighting desc={desc} />
|
||||
<Box color="label" mt={2} mb={1}>
|
||||
Description (Absorbed):{' '}
|
||||
<Button
|
||||
icon="pencil"
|
||||
onClick={() => act('set_attribute', { attribute: 'b_absorbed_desc' })}
|
||||
>
|
||||
Edit
|
||||
</Button>
|
||||
</Box>
|
||||
<DescriptionSyntaxHighlighting desc={absorbed_desc} />
|
||||
<Box mb={2} />
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
+97
-71
@@ -1,7 +1,14 @@
|
||||
import { classes } from 'common/react';
|
||||
|
||||
import { useBackend } from '../../../backend';
|
||||
import { Box, Button, Flex, LabeledList, Section } from '../../../components';
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
Flex,
|
||||
LabeledList,
|
||||
Section,
|
||||
Stack,
|
||||
} from '../../../components';
|
||||
import { selectedData } from '../types';
|
||||
|
||||
export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
|
||||
@@ -211,85 +218,104 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
|
||||
</Flex>
|
||||
</Section>
|
||||
<Section title="Belly Fullscreens Preview and Coloring">
|
||||
<Flex direction="row">
|
||||
<Box
|
||||
backgroundColor={belly_fullscreen_color}
|
||||
width="20px"
|
||||
height="20px"
|
||||
/>
|
||||
<Button
|
||||
icon="eye-dropper"
|
||||
onClick={() =>
|
||||
act('set_attribute', {
|
||||
attribute: 'b_fullscreen_color',
|
||||
val: null,
|
||||
})
|
||||
}
|
||||
>
|
||||
Select Primary Color
|
||||
</Button>
|
||||
<Box
|
||||
backgroundColor={belly_fullscreen_color_secondary}
|
||||
width="20px"
|
||||
height="20px"
|
||||
/>
|
||||
<Button
|
||||
icon="eye-dropper"
|
||||
onClick={() =>
|
||||
act('set_attribute', {
|
||||
attribute: 'b_fullscreen_color_secondary',
|
||||
val: null,
|
||||
})
|
||||
}
|
||||
>
|
||||
Select Secondary Color
|
||||
</Button>
|
||||
<Box
|
||||
backgroundColor={belly_fullscreen_color_trinary}
|
||||
width="20px"
|
||||
height="20px"
|
||||
/>
|
||||
<Button
|
||||
icon="eye-dropper"
|
||||
onClick={() =>
|
||||
act('set_attribute', {
|
||||
attribute: 'b_fullscreen_color_trinary',
|
||||
val: null,
|
||||
})
|
||||
}
|
||||
>
|
||||
Select Trinary Color
|
||||
</Button>
|
||||
<LabeledList.Item label="Enable Coloration">
|
||||
<Stack align="center">
|
||||
<Stack.Item shrink>
|
||||
<Box
|
||||
backgroundColor={belly_fullscreen_color}
|
||||
width="20px"
|
||||
height="20px"
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
fluid
|
||||
icon="eye-dropper"
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_colorization_enabled' })
|
||||
}
|
||||
icon={colorization_enabled ? 'toggle-on' : 'toggle-off'}
|
||||
selected={colorization_enabled}
|
||||
>
|
||||
{colorization_enabled ? 'Yes' : 'No'}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Preview Belly">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_preview_belly' })
|
||||
act('set_attribute', {
|
||||
attribute: 'b_fullscreen_color',
|
||||
val: null,
|
||||
})
|
||||
}
|
||||
>
|
||||
Preview
|
||||
Select Primary Color
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Clear Preview">
|
||||
</Stack.Item>
|
||||
<Stack.Item shrink>
|
||||
<Box
|
||||
backgroundColor={belly_fullscreen_color_secondary}
|
||||
width="20px"
|
||||
height="20px"
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
fluid
|
||||
icon="eye-dropper"
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_clear_preview' })
|
||||
act('set_attribute', {
|
||||
attribute: 'b_fullscreen_color_secondary',
|
||||
val: null,
|
||||
})
|
||||
}
|
||||
>
|
||||
Clear
|
||||
Select Secondary Color
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
</Flex>
|
||||
</Stack.Item>
|
||||
<Stack.Item shrink>
|
||||
<Box
|
||||
backgroundColor={belly_fullscreen_color_trinary}
|
||||
width="20px"
|
||||
height="20px"
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
fluid
|
||||
icon="eye-dropper"
|
||||
onClick={() =>
|
||||
act('set_attribute', {
|
||||
attribute: 'b_fullscreen_color_trinary',
|
||||
val: null,
|
||||
})
|
||||
}
|
||||
>
|
||||
Select Trinary Color
|
||||
</Button>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
<Box mt={1}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Enable Coloration">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_colorization_enabled' })
|
||||
}
|
||||
icon={colorization_enabled ? 'toggle-on' : 'toggle-off'}
|
||||
selected={colorization_enabled}
|
||||
>
|
||||
{colorization_enabled ? 'Yes' : 'No'}
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Preview Belly">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_preview_belly' })
|
||||
}
|
||||
>
|
||||
Preview
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Clear Preview">
|
||||
<Button
|
||||
onClick={() =>
|
||||
act('set_attribute', { attribute: 'b_clear_preview' })
|
||||
}
|
||||
>
|
||||
Clear
|
||||
</Button>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Box>
|
||||
</Section>
|
||||
<Section>
|
||||
<Section title="Vore FX">
|
||||
@@ -307,7 +333,7 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section title="Belly Fullscreens Styles" width="800px">
|
||||
<Section title="Belly Fullscreens Styles">
|
||||
Belly styles:
|
||||
<Button
|
||||
fluid
|
||||
|
||||
@@ -28,6 +28,7 @@ export const VoreUserPreferences = (props: {
|
||||
can_be_drop_pred,
|
||||
allow_inbelly_spawning,
|
||||
allow_spontaneous_tf,
|
||||
allow_mind_transfer,
|
||||
step_mechanics_active,
|
||||
pickup_mechanics_active,
|
||||
noisy,
|
||||
@@ -367,6 +368,21 @@ export const VoreUserPreferences = (props: {
|
||||
disabled: 'Spontaneous TF Disabled',
|
||||
},
|
||||
},
|
||||
mind_transfer: {
|
||||
action: 'toggle_allow_mind_transfer',
|
||||
test: allow_mind_transfer,
|
||||
tooltip: {
|
||||
main:
|
||||
'This toggle is for mind transfer interactions' +
|
||||
' as a victim, such as mind-binder or dominate pred/prey.',
|
||||
enable: 'Click here to allow your mind being taken or swapped.',
|
||||
disable: 'Click here to disallow having your mind taken or swapped.',
|
||||
},
|
||||
content: {
|
||||
enabled: 'Mind Transfer Enabled',
|
||||
disabled: 'Mind Transfer Disabled',
|
||||
},
|
||||
},
|
||||
examine_nutrition: {
|
||||
action: 'toggle_nutrition_ex',
|
||||
test: nutrition_message_visible,
|
||||
@@ -431,6 +447,15 @@ export const VoreUserPreferences = (props: {
|
||||
Reload Prefs
|
||||
</Button>
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="49%" grow={1}>
|
||||
<Button
|
||||
fluid
|
||||
icon="people-arrows"
|
||||
onClick={() => act('loadprefsfromslot')}
|
||||
>
|
||||
Load Prefs From Slot
|
||||
</Button>
|
||||
</Flex.Item>
|
||||
</Flex>
|
||||
</Section>
|
||||
</Box>
|
||||
|
||||
+4
-1
@@ -112,7 +112,10 @@ export const VoreUserPreferencesMechanical = (props: {
|
||||
Selective Mode Preference
|
||||
</Button>
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="32%" grow={3}>
|
||||
<Flex.Item basis="32%">
|
||||
<VoreUserPreferenceItem spec={preferences.mind_transfer} />
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="32%" grow={1}>
|
||||
<VoreUserPreferenceItem spec={preferences.eating_privacy_global} />
|
||||
</Flex.Item>
|
||||
</Flex>
|
||||
|
||||
@@ -27,3 +27,10 @@ export const digestModeToPreyMode = {
|
||||
Heal: 'being healed.',
|
||||
'Encase In Egg': 'being encased in an egg.',
|
||||
};
|
||||
|
||||
export const SYNTAX_REGEX = /%belly|%pred|%prey/g;
|
||||
export const SYNTAX_COLOR = {
|
||||
'%belly': 'average',
|
||||
'%pred': 'bad',
|
||||
'%prey': 'good',
|
||||
};
|
||||
|
||||
@@ -37,7 +37,7 @@ export const VorePanel = (props) => {
|
||||
|
||||
return (
|
||||
<Window width={890} height={660} theme="abstract">
|
||||
<Window.Content scrollable>
|
||||
<Window.Content>
|
||||
{(data.unsaved_changes && (
|
||||
<NoticeBox danger>
|
||||
<Flex>
|
||||
|
||||
@@ -160,6 +160,7 @@ export type prefData = {
|
||||
step_mechanics_active: BooleanLike;
|
||||
pickup_mechanics_active: BooleanLike;
|
||||
noisy: BooleanLike;
|
||||
allow_mind_transfer: BooleanLike;
|
||||
drop_vore: BooleanLike;
|
||||
slip_vore: BooleanLike;
|
||||
stumble_vore: BooleanLike;
|
||||
@@ -198,6 +199,7 @@ export type localPrefs = {
|
||||
remains: preferenceData;
|
||||
pickuppref: preferenceData;
|
||||
spontaneous_tf: preferenceData;
|
||||
mind_transfer: preferenceData;
|
||||
examine_nutrition: preferenceData;
|
||||
examine_weight: preferenceData;
|
||||
eating_privacy_global: preferenceData;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+87
-87
File diff suppressed because one or more lines are too long
+27
-48
@@ -1341,27 +1341,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/eslint-scope@npm:^3.7.3":
|
||||
version: 3.7.7
|
||||
resolution: "@types/eslint-scope@npm:3.7.7"
|
||||
dependencies:
|
||||
"@types/eslint": "npm:*"
|
||||
"@types/estree": "npm:*"
|
||||
checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/eslint@npm:*":
|
||||
version: 8.56.10
|
||||
resolution: "@types/eslint@npm:8.56.10"
|
||||
dependencies:
|
||||
"@types/estree": "npm:*"
|
||||
"@types/json-schema": "npm:*"
|
||||
checksum: 10c0/674349d6c342c3864d70f4d5a9965f96fb253801532752c8c500ad6a1c2e8b219e01ccff5dc8791dcb58b5483012c495708bb9f3ff929f5c9322b3da126c15d3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/estree@npm:*, @types/estree@npm:^1.0.5":
|
||||
"@types/estree@npm:^1.0.5":
|
||||
version: 1.0.5
|
||||
resolution: "@types/estree@npm:1.0.5"
|
||||
checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d
|
||||
@@ -1423,7 +1403,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
|
||||
"@types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
|
||||
version: 7.0.15
|
||||
resolution: "@types/json-schema@npm:7.0.15"
|
||||
checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db
|
||||
@@ -1847,12 +1827,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"acorn-import-assertions@npm:^1.9.0":
|
||||
version: 1.9.0
|
||||
resolution: "acorn-import-assertions@npm:1.9.0"
|
||||
"acorn-import-attributes@npm:^1.9.5":
|
||||
version: 1.9.5
|
||||
resolution: "acorn-import-attributes@npm:1.9.5"
|
||||
peerDependencies:
|
||||
acorn: ^8
|
||||
checksum: 10c0/3b4a194e128efdc9b86c2b1544f623aba4c1aa70d638f8ab7dc3971a5b4aa4c57bd62f99af6e5325bb5973c55863b4112e708a6f408bad7a138647ca72283afe
|
||||
checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2226,14 +2206,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^1.6.8":
|
||||
version: 1.6.8
|
||||
resolution: "axios@npm:1.6.8"
|
||||
"axios@npm:^1.7.4":
|
||||
version: 1.7.6
|
||||
resolution: "axios@npm:1.7.6"
|
||||
dependencies:
|
||||
follow-redirects: "npm:^1.15.6"
|
||||
form-data: "npm:^4.0.0"
|
||||
proxy-from-env: "npm:^1.1.0"
|
||||
checksum: 10c0/0f22da6f490335479a89878bc7d5a1419484fbb437b564a80c34888fc36759ae4f56ea28d55a191695e5ed327f0bad56e7ff60fb6770c14d1be6501505d47ab9
|
||||
checksum: 10c0/8b4be67056f8f3895ebadbfce0708e5aa9c537a5a68e2da03bec49d35695e29b57f14ce38f20f55bb19946bd89787a839a7c3afa9e58e1152696c208046f8417
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2362,7 +2342,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"braces@npm:^3.0.2, braces@npm:~3.0.2":
|
||||
"braces@npm:^3.0.3, braces@npm:~3.0.2":
|
||||
version: 3.0.3
|
||||
resolution: "braces@npm:3.0.3"
|
||||
dependencies:
|
||||
@@ -3214,13 +3194,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"enhanced-resolve@npm:^5.16.0":
|
||||
version: 5.16.1
|
||||
resolution: "enhanced-resolve@npm:5.16.1"
|
||||
"enhanced-resolve@npm:^5.17.1":
|
||||
version: 5.17.1
|
||||
resolution: "enhanced-resolve@npm:5.17.1"
|
||||
dependencies:
|
||||
graceful-fs: "npm:^4.2.4"
|
||||
tapable: "npm:^2.2.0"
|
||||
checksum: 10c0/57d52625b978f18b32351a03006699de1e3695ce27af936ab4f1f98d3a4c825b219b445910bb4eef398303bbb5f37d7e382f842513d0f3a32614b78f6fd07ab7
|
||||
checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6148,12 +6128,12 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"micromatch@npm:^4.0.4":
|
||||
version: 4.0.5
|
||||
resolution: "micromatch@npm:4.0.5"
|
||||
version: 4.0.8
|
||||
resolution: "micromatch@npm:4.0.8"
|
||||
dependencies:
|
||||
braces: "npm:^3.0.2"
|
||||
braces: "npm:^3.0.3"
|
||||
picomatch: "npm:^2.3.1"
|
||||
checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff
|
||||
checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8260,7 +8240,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "tgui-dev-server@workspace:packages/tgui-dev-server"
|
||||
dependencies:
|
||||
axios: "npm:^1.6.8"
|
||||
axios: "npm:^1.7.4"
|
||||
glob: "npm:^7.2.3"
|
||||
source-map: "npm:^0.7.4"
|
||||
stacktrace-parser: "npm:^0.1.10"
|
||||
@@ -8341,7 +8321,7 @@ __metadata:
|
||||
swc-loader: "npm:^0.2.6"
|
||||
typescript: "npm:^5.4.3"
|
||||
url-loader: "npm:^4.1.1"
|
||||
webpack: "npm:^5.91.0"
|
||||
webpack: "npm:^5.94.0"
|
||||
webpack-bundle-analyzer: "npm:^4.10.1"
|
||||
webpack-cli: "npm:^5.1.4"
|
||||
languageName: unknown
|
||||
@@ -8925,20 +8905,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"webpack@npm:^5.91.0":
|
||||
version: 5.91.0
|
||||
resolution: "webpack@npm:5.91.0"
|
||||
"webpack@npm:^5.94.0":
|
||||
version: 5.94.0
|
||||
resolution: "webpack@npm:5.94.0"
|
||||
dependencies:
|
||||
"@types/eslint-scope": "npm:^3.7.3"
|
||||
"@types/estree": "npm:^1.0.5"
|
||||
"@webassemblyjs/ast": "npm:^1.12.1"
|
||||
"@webassemblyjs/wasm-edit": "npm:^1.12.1"
|
||||
"@webassemblyjs/wasm-parser": "npm:^1.12.1"
|
||||
acorn: "npm:^8.7.1"
|
||||
acorn-import-assertions: "npm:^1.9.0"
|
||||
acorn-import-attributes: "npm:^1.9.5"
|
||||
browserslist: "npm:^4.21.10"
|
||||
chrome-trace-event: "npm:^1.0.2"
|
||||
enhanced-resolve: "npm:^5.16.0"
|
||||
enhanced-resolve: "npm:^5.17.1"
|
||||
es-module-lexer: "npm:^1.2.1"
|
||||
eslint-scope: "npm:5.1.1"
|
||||
events: "npm:^3.2.0"
|
||||
@@ -8958,7 +8937,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
webpack: bin/webpack.js
|
||||
checksum: 10c0/74a3e0ea1c9a492accf035317f31769ffeaaab415811524b9f17bc7bf7012c5b6e1a9860df5ca6903f3ae2618727b801eb47d9351a2595dfffb25941d368b88c
|
||||
checksum: 10c0/b4d1b751f634079bd177a89eef84d80fa5bb8d6fc15d72ab40fc2b9ca5167a79b56585e1a849e9e27e259803ee5c4365cb719e54af70a43c06358ec268ff4ebf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
+3
-1
@@ -2942,6 +2942,7 @@
|
||||
#include "code\modules\mob\living\carbon\human\logout.dm"
|
||||
#include "code\modules\mob\living\carbon\human\MedicalSideEffects.dm"
|
||||
#include "code\modules\mob\living\carbon\human\npcs.dm"
|
||||
#include "code\modules\mob\living\carbon\human\phobias.dm"
|
||||
#include "code\modules\mob\living\carbon\human\say.dm"
|
||||
#include "code\modules\mob\living\carbon\human\stripping.dm"
|
||||
#include "code\modules\mob\living\carbon\human\unarmed_attack.dm"
|
||||
@@ -3286,6 +3287,7 @@
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\lamia.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\leopardmander.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\meowl.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\oregrub.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\otie.dm"
|
||||
@@ -4338,6 +4340,6 @@
|
||||
#include "maps\submaps\space_submaps\debrisfield\debrisfield.dm"
|
||||
#include "maps\submaps\surface_submaps\wilderness\wilderness.dm"
|
||||
#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
|
||||
#include "maps\tether\tether.dm"
|
||||
#include "maps\stellar_delight\stellar_delight.dm"
|
||||
#include "maps\~map_system\maps.dm"
|
||||
// END_INCLUDE
|
||||
|
||||
Reference in New Issue
Block a user