diff --git a/code/datums/supplypacks/munitions_vr.dm b/code/datums/supplypacks/munitions_vr.dm
index e6629435bf..1c3e3051e8 100644
--- a/code/datums/supplypacks/munitions_vr.dm
+++ b/code/datums/supplypacks/munitions_vr.dm
@@ -1,7 +1,8 @@
/datum/supply_pack/munitions/expeditionguns
name = "Frontier phaser (station-locked) crate"
contains = list(
- /obj/item/weapon/gun/energy/frontier/locked = 2,
+ /obj/item/weapon/gun/energy/frontier/locked/basic = 2,
+ /obj/item/weapon/gun/energy/frontier/locked/holdout = 1,
)
cost = 35
containertype = /obj/structure/closet/crate/secure
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 998b213ff4..b191c69818 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -142,18 +142,30 @@
. = buckle_mob(M, forced)
if(.)
+ var/reveal_message = list("buckled_mob" = null, "buckled_to" = null) //VORE EDIT: This being a list and messages existing for the buckle target atom.
if(!silent)
if(M == user)
+ reveal_message["buckled_mob"] = "You come out of hiding and buckle yourself to [src]." //VORE EDIT
+ reveal_message["buckled_to"] = "You come out of hiding as [M.name] buckles themselves to you." //VORE EDIT
M.visible_message(\
"[M.name] buckles themselves to [src].",\
"You buckle yourself to [src].",\
"You hear metal clanking.")
else
+ reveal_message["buckled_mob"] = "You are revealed as you are buckled to [src]." //VORE EDIT
+ reveal_message["buckled_to"] = "You are revealed as [M.name] is buckled to you." //VORE EDIT
M.visible_message(\
"[M.name] is buckled to [src] by [user.name]!",\
"You are buckled to [src] by [user.name]!",\
"You hear metal clanking.")
+ M.reveal(silent, reveal_message["buckled_mob"]) //Reveal people so they aren't buckled to chairs from behind. //VORE EDIT, list arg instead of simple message var for buckled mob
+ //Vore edit start
+ var/mob/living/L = src
+ if(istype(L))
+ L.reveal(silent, reveal_message["buckled_to"])
+ //Vore edit end
+
/atom/movable/proc/user_unbuckle_mob(mob/living/buckled_mob, mob/user)
var/mob/living/M = unbuckle_mob(buckled_mob)
if(M)
@@ -193,4 +205,3 @@
riding_datum.handle_vehicle_layer()
riding_datum.handle_vehicle_offsets()
//VOREStation Add End
-
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index beb00b8f81..445168777d 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1560,9 +1560,8 @@
/mob/living/carbon/human/proc/update_icon_special() //For things such as teshari hiding and whatnot.
if(status_flags & HIDING) // Hiding? Carry on.
- if(stat == DEAD || paralysis || weakened || stunned || restrained()) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work.
- reset_plane_and_layer()
- status_flags &= ~HIDING
+ if(stat == DEAD || paralysis || weakened || stunned || restrained() || buckled || LAZYLEN(grabbed_by) || has_buckled_mobs()) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work. //VORE EDIT: Check for has_buckled_mobs() (taur riding)
+ reveal(null)
else
layer = HIDING_LAYER
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index f78f58d9de..a5da193678 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -1,5 +1,6 @@
/mob/living/death()
clear_fullscreens()
+ reveal(TRUE) //Silently reveal the mob if they were hidden.
//VOREStation Edit - Mob spawner stuff
if(source_spawner)
source_spawner.get_death_report(src)
diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm
index 1442c80f9b..787dd31361 100644
--- a/code/modules/mob/living/living_powers.dm
+++ b/code/modules/mob/living/living_powers.dm
@@ -1,15 +1,20 @@
+/mob/living/proc/reveal(var/silent, var/message = "You have been revealed! You are no longer hidden.")
+ if(status_flags & HIDING)
+ status_flags &= ~HIDING
+ reset_plane_and_layer()
+ if(!silent && message)
+ to_chat(src, message)
+
/mob/living/proc/hide()
set name = "Hide"
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
set category = "Abilities"
- if(stat == DEAD || paralysis || weakened || stunned || restrained())
+ if(stat == DEAD || paralysis || weakened || stunned || restrained() || buckled || LAZYLEN(grabbed_by) || has_buckled_mobs()) //VORE EDIT: Check for has_buckled_mobs() (taur riding)
return
if(status_flags & HIDING)
- status_flags &= ~HIDING
- reset_plane_and_layer()
- to_chat(src,"You have stopped hiding.")
+ reveal("You have stopped hiding.")
else
status_flags |= HIDING
layer = HIDING_LAYER //Just above cables with their 2.44
diff --git a/code/modules/mob/living/simple_animal/animals/giant_spider_vr.dm b/code/modules/mob/living/simple_animal/animals/giant_spider_vr.dm
new file mode 100644
index 0000000000..50d653f63e
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/animals/giant_spider_vr.dm
@@ -0,0 +1,23 @@
+// Slightly placeholder, mostly to replace ion hivebots on V4
+/mob/living/simple_animal/hostile/giant_spider/ion
+ desc = "Furry and green, it makes you shudder to look at it. This one has brilliant green eyes and a hint of static discharge."
+ tt_desc = "X Brachypelma phorus ionus"
+ icon_state = "webslinger"
+ icon_living = "webslinger"
+ icon_dead = "webslinger_dead"
+
+ maxHealth = 90
+ health = 90
+
+ melee_damage_lower = 8
+ melee_damage_upper = 15
+
+ ranged = 1
+ projectilesound = 'sound/weapons/taser2.ogg'
+ projectiletype = /obj/item/projectile/ion/small
+ firing_lines = 1
+ cooperative = 1
+
+ poison_chance = 15
+ poison_per_bite = 2
+ poison_type = "psilocybin"
diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
index 96d460476f..718dfee55b 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -14,6 +14,7 @@
var/vore_pounce_chance = 5 // Chance of this mob knocking down an opponent
var/vore_standing_too = 0 // Can also eat non-stunned mobs
var/vore_ignores_undigestable = 1 // Refuse to eat mobs who are undigestable by the prefs toggle.
+ var/swallowsound = null // What noise plays when you succeed in eating the mob.
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
var/vore_default_flags = DM_FLAG_ITEMWEAK // Itemweak by default
@@ -114,7 +115,9 @@
var/old_target = target_mob
handle_stance(STANCE_BUSY)
. = animal_nom(target_mob)
+ playsound(src, swallowsound, 50, 1)
update_icon()
+
if(.)
// If we succesfully ate them, lose the target
LoseTarget()
diff --git a/code/modules/mob/living/simple_animal/vore/hippo.dm b/code/modules/mob/living/simple_animal/vore/hippo.dm
new file mode 100644
index 0000000000..bfd28aafb5
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/vore/hippo.dm
@@ -0,0 +1,66 @@
+/mob/living/simple_animal/retaliate/hippo
+ name = "hippo"
+ desc = "Mostly know for the spectacular hit of the live action movie Hungry Hungry Hippos."
+ tt_desc = "Hippopotamus amphibius"
+ icon = 'icons/mob/vore64x64.dmi'
+ icon_state = "hippo"
+ icon_living = "hippo"
+ icon_dead = "hippo_dead"
+ icon_gib = "hippo_gib"
+ intelligence_level = SA_ANIMAL
+
+ maxHealth = 200
+ health = 200
+ turns_per_move = 5
+ see_in_dark = 3
+ stop_when_pulled = 1
+ speed = 5
+ armor = list(
+ "melee" = 15,//They thick as fuck boi
+ "bullet" = 15,
+ "laser" = 15,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0)
+
+ response_help = "pets the"
+ response_disarm = "gently pushes aside the"
+ response_harm = "hits the"
+ attacktext = list("bit")
+ retaliate = 1
+
+ melee_damage_upper = 25
+ melee_damage_lower = 15
+ attack_sharp = 1
+
+ old_x = -16
+ old_y = 0
+ default_pixel_x = -16
+ pixel_x = -16
+ pixel_y = 0
+
+ speak_chance = 0.1
+ speak = list("UUUUUUH")
+ speak_emote = list("grunts","groans", "roars", "snorts")
+ emote_hear = list("groan")
+ emote_see = list("shakes its head")
+
+ meat_amount = 10 //Infinite meat!
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+// Activate Noms!
+/mob/living/simple_animal/retaliate/hippo //I don't know why it's in a seperate line but everyone does it so i do it
+ vore_active = 1
+ vore_capacity = 1
+ vore_bump_chance = 15
+ vore_bump_emote = "lazily wraps its tentacles around"
+ vore_standing_too = 1
+ vore_ignores_undigestable = 0
+ vore_default_mode = DM_HOLD
+ vore_digest_chance = 10
+ vore_escape_chance = 20
+ vore_pounce_chance = 35 //it's hippo sized it doesn't care it just eats you
+ vore_stomach_name = "rumen" //First stomach of a ruminant. It's where the pre digestion bacteria stuff happens. Very warm.
+ vore_stomach_flavor = "You are squeezed into the sweltering insides of the herbivore rumen."
+ vore_icons = SA_ICON_LIVING
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 897f7c58c9..0bf523a48e 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -47,6 +47,8 @@
return
affecting.grabbed_by += src
+ affecting.reveal("You are revealed as [assailant] grabs you.")
+ assailant.reveal("You reveal yourself as you grab [affecting].")
hud = new /obj/screen/grab(src)
hud.icon_state = "reinforce"
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 26f3af2262..ea27828385 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -114,7 +114,7 @@
if(href_list["observe"])
- if(alert(src,"Are you sure you wish to observe? You will have to wait 1 minute before being able to respawn!","Player Setup","Yes","No") == "Yes")
+ if(alert(src,"Are you sure you wish to observe? You will have to wait 5 minute before being able to respawn!","Player Setup","Yes","No") == "Yes") //Vorestation edit
if(!client) return 1
//Make a new mannequin quickly, and allow the observer to take the appearance
diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
index 9c7b4fdcd8..6d0f63e95c 100644
--- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
@@ -11,7 +11,9 @@
else
ridden.layer = initial(ridden.layer)
else
- ridden.layer = initial(ridden.layer)
+ var/mob/living/L = ridden
+ if(!(istype(L) && (L.status_flags & HIDING)))
+ ridden.layer = initial(ridden.layer)
/datum/riding/taur/ride_check(mob/living/M)
var/mob/living/L = ridden
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index bb798781bf..7942abb5fb 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -47,9 +47,13 @@
I.gurgle_contaminate(src, cont_flavor)
items_preserved |= I
else
- digest_item(I)
- to_update = TRUE
- did_an_item = TRUE
+ I.gurgle_contaminate(src, cont_flavor)
+ if(I.digest_stage && I.digest_stage > 0)
+ digest_item(I)
+ else
+ digest_item(I)
+ did_an_item = TRUE
+ to_update = TRUE
//Handle eaten mobs
else if(isliving(A))
diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm
index cc247b5497..2641a43700 100644
--- a/code/modules/vore/eating/digest_act_vr.dm
+++ b/code/modules/vore/eating/digest_act_vr.dm
@@ -4,17 +4,38 @@
// Ye default implementation.
/obj/item/proc/digest_act(var/atom/movable/item_storage = null)
- for(var/obj/item/O in contents)
- if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets.
- for(var/obj/item/SO in O)
- if(item_storage)
- SO.forceMove(item_storage)
- qdel(O)
- else if(item_storage)
- O.forceMove(item_storage)
-
- qdel(src)
- return w_class
+ if(istype(item_storage,/obj/item/device/dogborg/sleeper))
+ for(var/obj/item/O in contents)
+ if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets.
+ for(var/obj/item/SO in O)
+ if(item_storage)
+ SO.forceMove(item_storage)
+ qdel(O)
+ else if(item_storage)
+ O.forceMove(item_storage)
+ qdel(src)
+ return w_class
+ var/g_damage = 1
+ if(digest_stage == null)
+ digest_stage = w_class
+ if(isbelly(item_storage))
+ var/obj/belly/B = item_storage
+ g_damage = 0.25 * (B.digest_brute + B.digest_burn)
+ if(digest_stage > 0)
+ if(g_damage > digest_stage)
+ g_damage = digest_stage
+ digest_stage -= g_damage
+ else
+ for(var/obj/item/O in contents)
+ if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets.
+ for(var/obj/item/SO in O)
+ if(item_storage)
+ SO.forceMove(item_storage)
+ qdel(O)
+ else if(item_storage)
+ O.forceMove(item_storage)
+ qdel(src)
+ return g_damage
/////////////
// Some indigestible stuff
@@ -91,3 +112,7 @@
/obj/item/device/mmi/digital/posibrain/digest_act(var/atom/movable/item_storage = null)
//Replace this with a VORE setting so all types of posibrains can/can't be digested on a whim
return FALSE
+
+// Gradual damage measurement
+/obj/item
+ var/digest_stage = null
\ No newline at end of file
diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm
index d9ad9f3d0c..5330b80006 100644
--- a/code/modules/vore/fluffstuff/custom_guns_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm
@@ -743,10 +743,6 @@
var/recharging = 0
projectile_type = /obj/item/projectile/beam
- firemodes = list(
- list(mode_name="normal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
- )
/obj/item/weapon/gun/energy/frontier/unload_ammo(var/mob/user)
if(recharging)
@@ -778,6 +774,13 @@
/obj/item/weapon/gun/energy/frontier/ex_act() //|rugged|
return
+//Needed to fix a bug with the holdout phaser
+/obj/item/weapon/gun/energy/frontier/basic
+ firemodes = list(
+ list(mode_name="normal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
+ )
+
/obj/item/weapon/gun/energy/frontier/locked
desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
req_access = list(access_armory) //for toggling safety
@@ -808,6 +811,13 @@
return 0
return ..()
+//Needed to fix a bug with the holdout phaser
+/obj/item/weapon/gun/energy/frontier/locked/basic
+ firemodes = list(
+ list(mode_name="normal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
+ )
+
//Expeditionary Holdout Phaser
/obj/item/weapon/gun/energy/frontier/locked/holdout
name = "holdout frontier phaser"
diff --git a/html/changelogs/KasparoVv - PR - 4130.yml b/html/changelogs/KasparoVv - PR - 4130.yml
new file mode 100644
index 0000000000..6a46094651
--- /dev/null
+++ b/html/changelogs/KasparoVv - PR - 4130.yml
@@ -0,0 +1,6 @@
+author: KasparoVy
+delete-after: True
+changes:
+ - rscadd: "Hiding mobs are now revealed when grabbed, buckled and/or killed."
+ - rscadd: "You cannot hide if you grab something, are grabbed yourself or are buckled."
+ - rscadd: "Adds some fluff messages for when hiding mobs are revealed."
diff --git a/icons/mob/human_races/r_tajaran_vr.dmi b/icons/mob/human_races/r_tajaran_vr.dmi
index 8f3453df3f..ecd56f4816 100644
Binary files a/icons/mob/human_races/r_tajaran_vr.dmi and b/icons/mob/human_races/r_tajaran_vr.dmi differ
diff --git a/icons/mob/vore64x64.dmi b/icons/mob/vore64x64.dmi
index 1f5522139b..8454da40d7 100644
Binary files a/icons/mob/vore64x64.dmi and b/icons/mob/vore64x64.dmi differ
diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi
index b0abd6ec61..7e37655180 100644
Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ
diff --git a/maps/tether/submaps/beach/_beach.dm b/maps/tether/submaps/beach/_beach.dm
index 321716e3ad..e58e678cc5 100644
--- a/maps/tether/submaps/beach/_beach.dm
+++ b/maps/tether/submaps/beach/_beach.dm
@@ -95,8 +95,7 @@
prob_fall = 25 //Chance goes down by this much each time it spawns one (not defining and prob_spawn 100 means they spawn as soon as one dies)
guard = 40 //They'll stay within this range (not defining this disables them staying nearby and they will wander the map (and through step teleports))
mobs_to_pick_from = list(
- /mob/living/simple_animal/hostile/giant_snake = 3, //Snakes are 3x more likely to spawn than,
- /mob/living/simple_animal/hostile/frog = 1 //these frogs are, with these values
+ /mob/living/simple_animal/snake
)
/obj/tether_away_spawner/beach_outside_friendly
@@ -115,12 +114,14 @@
faction = "beach_cave"
atmos_comp = TRUE
prob_spawn = 100
- prob_fall = 10
+ prob_fall = 40
guard = 20
mobs_to_pick_from = list(
- /mob/living/simple_animal/hostile/deathclaw,
- /mob/living/simple_animal/hostile/frog,
- /mob/living/simple_animal/hostile/hivebot/range/ion
+ /mob/living/simple_animal/hostile/frog = 3, //Frogs are 3x more likely to spawn than,
+ /mob/living/simple_animal/hostile/deathclaw = 1, //these deathclaws are, with these values,
+ /mob/living/simple_animal/hostile/giant_spider = 3,
+ /mob/living/simple_animal/hostile/giant_snake = 1,
+ /mob/living/simple_animal/hostile/giant_spider/ion = 2
)
// These are step-teleporters, for map edge transitions
diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm
index 859ef9667c..14d1b1bb81 100644
--- a/maps/tether/tether_things.dm
+++ b/maps/tether/tether_things.dm
@@ -395,7 +395,7 @@ var/global/list/latejoin_tram = list()
/obj/structure/closet/secure_closet/guncabinet/excursion/New()
..()
for(var/i = 1 to 4)
- new /obj/item/weapon/gun/energy/frontier/locked(src)
+ new /obj/item/weapon/gun/energy/frontier/locked/basic(src)
for(var/i = 1 to 4)
new /obj/item/weapon/gun/energy/frontier/locked/holdout(src)
diff --git a/vorestation.dme b/vorestation.dme
index fff4857629..d92d18520b 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2261,6 +2261,7 @@
#include "code\modules\mob\living\simple_animal\animals\fluffy_vr.dm"
#include "code\modules\mob\living\simple_animal\animals\fox_vr.dm"
#include "code\modules\mob\living\simple_animal\animals\giant_spider.dm"
+#include "code\modules\mob\living\simple_animal\animals\giant_spider_vr.dm"
#include "code\modules\mob\living\simple_animal\animals\goose.dm"
#include "code\modules\mob\living\simple_animal\animals\lizard.dm"
#include "code\modules\mob\living\simple_animal\animals\miscellaneous.dm"
@@ -2309,6 +2310,7 @@
#include "code\modules\mob\living\simple_animal\vore\fennix.dm"
#include "code\modules\mob\living\simple_animal\vore\frog.dm"
#include "code\modules\mob\living\simple_animal\vore\gaslamp.dm"
+#include "code\modules\mob\living\simple_animal\vore\hippo.dm"
#include "code\modules\mob\living\simple_animal\vore\horse.dm"
#include "code\modules\mob\living\simple_animal\vore\jelly.dm"
#include "code\modules\mob\living\simple_animal\vore\otie.dm"