diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm
index a565dc12d0..e1a29d97f0 100644
--- a/code/ATMOSPHERICS/pipes.dm
+++ b/code/ATMOSPHERICS/pipes.dm
@@ -1171,6 +1171,7 @@
/obj/machinery/atmospherics/pipe/tank/nitrogen
name = "Pressure Tank (Nitrogen)"
icon_state = "n2_map"
+ volume = 40000 //Vorestation edit
/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
air_temporary = new
diff --git a/code/datums/supplypacks/science_vr.dm b/code/datums/supplypacks/science_vr.dm
index bfe2c0433c..ee73bf1089 100644
--- a/code/datums/supplypacks/science_vr.dm
+++ b/code/datums/supplypacks/science_vr.dm
@@ -28,7 +28,8 @@
/obj/item/weapon/disk/limb/dsi_vulpkanin,
/obj/item/weapon/disk/limb/dsi_akula,
/obj/item/weapon/disk/limb/dsi_spider,
- /obj/item/weapon/disk/limb/eggnerdltd
+ /obj/item/weapon/disk/limb/eggnerdltd,
+ /obj/item/weapon/disk/limb/eggnerdltdred
)
cost = 40
containertype = /obj/structure/closet/crate/secure
diff --git a/code/game/jobs/job/captain_vr.dm b/code/game/jobs/job/captain_vr.dm
deleted file mode 100644
index 9df22d6563..0000000000
--- a/code/game/jobs/job/captain_vr.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/datum/job/hop
- alt_titles = list("Deputy Director", "Crew Resources Officer")
\ No newline at end of file
diff --git a/code/game/jobs/job/civilian_vr.dm b/code/game/jobs/job/civilian_vr.dm
deleted file mode 100644
index 81f81a9dcf..0000000000
--- a/code/game/jobs/job/civilian_vr.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/datum/job/janitor
- alt_titles = list("Custodian", "Sanitation Technician", "Maid")
\ No newline at end of file
diff --git a/code/game/jobs/job/z_all_jobs_vr.dm b/code/game/jobs/job/z_all_jobs_vr.dm
new file mode 100644
index 0000000000..18afda3419
--- /dev/null
+++ b/code/game/jobs/job/z_all_jobs_vr.dm
@@ -0,0 +1,49 @@
+//Contains all modified jobs for easy access and editing.
+
+/datum/job/hop
+ alt_titles = list("Deputy Director", "Crew Resources Officer")
+
+/datum/job/doctor
+ total_positions = 5
+ spawn_positions = 5
+
+/datum/job/janitor //Lots of janitor substations on station.
+ total_positions = 3
+ spawn_positions = 3
+ alt_titles = list("Custodian", "Sanitation Technician", "Maid")
+
+/datum/job/officer
+ total_positions = 4
+ spawn_positions = 4
+
+/datum/job/cargo_tech
+ total_positions = 3
+ spawn_positions = 3
+
+/datum/job/psychiatrist
+ total_positions = 1
+ spawn_positions = 1
+
+/datum/job/mining
+ total_positions = 4
+ spawn_positions = 4
+
+/datum/job/cyborg
+ total_positions = 3
+ spawn_positions = 3
+
+/datum/job/bartender
+ total_positions = 2
+ spawn_positions = 2
+
+/datum/job/chef
+ total_positions = 2 //IT TAKES A LOT TO MAKE A STEW
+ spawn_positions = 2 //A PINCH OF SALT AND LAUGHTER, TOO
+
+/datum/job/engineer
+ total_positions = 5
+ spawn_positions = 5
+
+/datum/job/atmos
+ total_positions = 3
+ spawn_positions = 3
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index b6a699e803..f46f03d90f 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -588,7 +588,7 @@
//Departments that the cycler can paint suits to look like.
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Emergency Medical Response","Crowd Control")
//Species that the suits can be configured to fit.
- var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Xenochimera","Vasilissan") //VORESTATION EDIT
+ var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Xenochimera","Vasilissan", "Rapala") //VORESTATION EDIT
var/target_department
var/target_species
@@ -753,7 +753,7 @@
//Clear the access reqs, disable the safeties, and open up all paintjobs.
user << "You run the sequencer across the interface, corrupting the operating protocols."
departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Crowd Control","Emergency Medical Response","^%###^%$")
- species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Vasilissan") //VORESTATION EDIT
+ species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Vasilissan", "Rapala") //VORESTATION EDIT
emagged = 1
safeties = 0
diff --git a/code/game/machinery/suit_storage_unit_vr.dm b/code/game/machinery/suit_storage_unit_vr.dm
index 9f9e51ff35..abab98b8f1 100644
--- a/code/game/machinery/suit_storage_unit_vr.dm
+++ b/code/game/machinery/suit_storage_unit_vr.dm
@@ -1,2 +1,2 @@
/obj/machinery/suit_cycler
- species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Xenochimera","Vasilissan") //Added xenochimera while I was at it. Someone put in an issue about it.
+ species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Xenochimera","Vasilissan", "Rapala") //Added xenochimera while I was at it. Someone put in an issue about it.
diff --git a/code/game/objects/effects/spider_vr.dm b/code/game/objects/effects/spider_vr.dm
new file mode 100644
index 0000000000..d40f08aa9f
--- /dev/null
+++ b/code/game/objects/effects/spider_vr.dm
@@ -0,0 +1,13 @@
+/obj/effect/spider/spiderling/grub
+ name = "grub larva"
+ desc = "It never stays still for long."
+ //M.icon = 'grub_vr.dmi'
+ icon_state = "spiderling"
+
+obj/effect/spider/spiderling/grub/process()
+ if(amount_grown >= 100)
+ var/spawn_type = /mob/living/simple_animal/retaliate/solargrub
+ new spawn_type(src.loc, src)
+ qdel(src)
+ else
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm
index 822b832edb..283d9265b0 100644
--- a/code/game/objects/structures/trash_pile.dm
+++ b/code/game/objects/structures/trash_pile.dm
@@ -130,7 +130,7 @@
prob(5);/obj/item/weapon/storage/backpack,
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
prob(5);/obj/item/weapon/storage/box,
- prob(5);/obj/random/cigarettes,
+ // prob(5);/obj/random/cigarettes,
prob(4);/obj/item/broken_device,
prob(4);/obj/item/clothing/head/hardhat,
prob(4);/obj/item/clothing/mask/breath,
@@ -226,14 +226,14 @@
prob(3);/obj/item/weapon/material/knuckledusters,
prob(3);/obj/item/weapon/reagent_containers/syringe/drugs,
prob(2);/obj/item/weapon/handcuffs/fuzzy,
- prob(2);/obj/item/weapon/legcuffs,
+ // prob(2);/obj/item/weapon/legcuffs,
prob(2);/obj/item/weapon/storage/box/syndie_kit/spy,
prob(2);/obj/item/weapon/grenade/anti_photon,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
prob(1);/obj/item/device/nif/bad,
prob(1);/obj/item/device/radio_jammer,
prob(1);/obj/item/device/sleevemate,
- prob(1);/obj/item/device/bodysnatcher,
+ prob(1);/obj/item/device/bodysnatcher,
prob(1);/obj/item/weapon/beartrap,
prob(1);/obj/item/weapon/cell/hyper/empty,
prob(1);/obj/item/weapon/disk/nifsoft/compliance,
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm b/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm
index e92908ed3c..a38b489827 100644
--- a/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm
@@ -33,3 +33,8 @@
path = /obj/item/clothing/mask/gas/swat/vox
sort_category = "Xenowear"
whitelisted = "Vox"
+
+/datum/gear/uniform/loincloth
+ display_name = "loincloth"
+ path = /obj/item/clothing/suit/storage/fluff/loincloth
+ sort_category = "Xenowear"
\ No newline at end of file
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 1452475274..0f6248f0f1 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -462,6 +462,13 @@
return ..()
/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running)
+ if(prob(1) && !recent_squish) //VOREStation edit begin
+ recent_squish = 1
+ spawn(100)
+ recent_squish = 0
+ for(var/mob/living/M in contents)
+ var/emote = pick(inside_emotes)
+ M << emote //VOREStation edit end
return
/obj/item/clothing/shoes/update_clothing_icon()
diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm
index 4bbb91a530..5107fd2d05 100644
--- a/code/modules/clothing/clothing_vr.dm
+++ b/code/modules/clothing/clothing_vr.dm
@@ -1,3 +1,31 @@
+/obj/item/clothing
+ var/recent_struggle = 0
+
+/obj/item/clothing/shoes
+ var/list/inside_emotes = list()
+ var/recent_squish = 0
+
+/obj/item/clothing/shoes/New()
+ inside_emotes = list(
+ "You feel weightless for a moment as \the [name] moves upwards.",
+ "\The [name] are a ride you've got no choice but to participate in as the wearer moves.",
+ "The wearer of \the [name] moves, pressing down on you.",
+ "More motion while \the [name] move, feet pressing down against you."
+ )
+
+ ..()
+/* //Must be handled in clothing.dm
+/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running)
+ if(prob(1) && !recent_squish)
+ recent_squish = 1
+ spawn(100)
+ recent_squish = 0
+ for(var/mob/living/M in contents)
+ var/emote = pick(inside_emotes)
+ M << emote
+ return
+*/
+
//This is a crazy 'sideways' override.
/obj/item/clothing/shoes/attackby(var/obj/item/I, var/mob/user)
if(istype(I,/obj/item/weapon/holder/micro))
@@ -23,6 +51,28 @@
..()
+/obj/item/clothing/relaymove(var/mob/living/user,var/direction)
+
+ if(recent_struggle)
+ return
+
+ recent_struggle = 1
+
+ spawn(100)
+ recent_struggle = 0
+
+ if(ishuman(src.loc))
+ var/mob/living/carbon/human/H = src.loc
+ if(H.shoes == src)
+ H << "[user]'s tiny body presses against you in \the [src], squirming!"
+ user << "Your body presses out against [H]'s form! Well, what little you can get to!"
+ else
+ H << "[user]'s form shifts around in the \the [src], squirming!"
+ user << "You move around inside the [src], to no avail."
+ else
+ src.visible_message("\The [src] moves a little!")
+ user << "You throw yourself against the inside of \the [src]!"
+
//Mask
/obj/item/clothing/mask
name = "mask"
diff --git a/code/modules/clothing/glasses/glasses_vr.dm b/code/modules/clothing/glasses/glasses_vr.dm
index c001127eb4..015310e7f5 100644
--- a/code/modules/clothing/glasses/glasses_vr.dm
+++ b/code/modules/clothing/glasses/glasses_vr.dm
@@ -56,3 +56,6 @@
else
..()
+
+/obj/item/clothing/glasses/sunglasses/sechud/tactical
+ item_flags = AIRTIGHT
\ No newline at end of file
diff --git a/code/modules/events/event_container_vr.dm b/code/modules/events/event_container_vr.dm
index 5a54e974cf..62c297b5e8 100644
--- a/code/modules/events/event_container_vr.dm
+++ b/code/modules/events/event_container_vr.dm
@@ -74,6 +74,8 @@
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 30, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 75, list(ASSIGNMENT_SECURITY = 50, ASSIGNMENT_ENGINEER = 50), 1),
+ //Evil grubs that drain station power slightly
)
add_disabled_events(list(
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
diff --git a/code/modules/events/grubinfestation_vr.dm b/code/modules/events/grubinfestation_vr.dm
new file mode 100644
index 0000000000..5f1161c441
--- /dev/null
+++ b/code/modules/events/grubinfestation_vr.dm
@@ -0,0 +1,26 @@
+/datum/event/grub_infestation
+ announceWhen = 90
+ var/spawncount = 1
+
+
+/datum/event/grub_infestation/setup()
+ announceWhen = rand(announceWhen, announceWhen + 60)
+ spawncount = rand(4 * severity, 6 * severity) //grub larva only have a 50% chance to grow big and strong
+ sent_spiders_to_station = 0
+
+/datum/event/grub_infestation/announce()
+ command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
+
+
+/datum/event/grub_infestation/start()
+ var/list/vents = list()
+ for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
+ if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in using_map.station_levels)
+ if(temp_vent.network.normal_members.len > 50)
+ vents += temp_vent
+
+ while((spawncount >= 1) && vents.len)
+ var/obj/vent = pick(vents)
+ new /obj/effect/spider/spiderling/grub(vent.loc)
+ vents -= vent
+ spawncount--
diff --git a/code/modules/food/recipes_microwave_vr.dm b/code/modules/food/recipes_microwave_vr.dm
index 8375e4e964..f0cbad5a43 100644
--- a/code/modules/food/recipes_microwave_vr.dm
+++ b/code/modules/food/recipes_microwave_vr.dm
@@ -113,4 +113,26 @@
items = list(
/obj/item/weapon/reagent_containers/food/snacks/egg/roiz
)
- result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz
\ No newline at end of file
+ result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz
+
+/datum/recipe/pillbugball
+ reagents = list("carbon" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/bugball
+
+/datum/recipe/mammi
+ fruit = list("orange" = 1)
+ reagents = list("water" = 10, "flour" = 10, "milk" = 5, "sodiumchloride" = 1)
+ result = /obj/item/weapon/reagent_containers/food/snacks/mammi
+
+/datum/recipe/makaroni
+ reagents = list("flour" = 15, "milk" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat,
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/makaroni
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 3fdba139f2..1a45c1f459 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -312,6 +312,7 @@
msg += attempt_vr(src,"examine_bellies",args) //VOREStation Code
msg += attempt_vr(src,"examine_pickup_size",args) //VOREStation Code
msg += attempt_vr(src,"examine_step_size",args) //VOREStation Code
+ msg += attempt_vr(src,"nif_examine",args) //VOREStation Code
if(mSmallsize in mutations)
msg += "[T.He] [T.is] small halfling!\n"
diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm
index 8ca0efdfa3..16868827a7 100644
--- a/code/modules/mob/living/carbon/human/examine_vr.dm
+++ b/code/modules/mob/living/carbon/human/examine_vr.dm
@@ -152,4 +152,12 @@
var/message = ""
if((H.get_effective_size() - src.get_effective_size()) >= 0.75)
message = "They are small enough that you could easily trample them!\n"
- return message
\ No newline at end of file
+ return message
+
+/mob/living/carbon/human/proc/nif_examine(mob/living/carbon/human/H)
+ var/message = ""
+ if(!H.nif || H.conceal_nif || !H.nif_examine) //Do they have a nif, do they have the NIF concealed, and do they have a NIF examine message?
+ return "" //If so, no message.
+ else
+ message += "[H.nif_examine]\n"
+ return message
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm
index bc5afb7cf8..af8000e68a 100644
--- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm
@@ -1,7 +1,7 @@
/datum/species/shapeshifter/promethean
min_age = 18
max_age = 80
- valid_transform_species = list("Human", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey","Sergal","Akula","Nevrean","Highlander Zorren","Flatland Zorren", "Vulpkanin", "Vasilissan", "Neaera", "Stok", "Farwa", "Sobaka", "Wolpin", "Saru", "Sparra")
+ valid_transform_species = list("Human", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey","Sergal","Akula","Nevrean","Highlander Zorren","Flatland Zorren", "Vulpkanin", "Vasilissan", "Rapala", "Neaera", "Stok", "Farwa", "Sobaka", "Wolpin", "Saru", "Sparra")
heal_rate = 0.2 //They heal .2, along with the natural .2 heal per tick when below the organ natural heal damage threshhold.
siemens_coefficient = 1 //Prevents them from being immune to tasers and stun weapons.
death_message = "goes limp, their body becoming softer..."
diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
index 0bef1972b8..76ec29ff8a 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
@@ -331,3 +331,40 @@
gluttonous = 0
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
min_age = 18
+
+datum/species/harpy
+ name = "Rapala"
+ name_plural = "Rapalans"
+ icobase = 'icons/mob/human_races/r_harpy_vr.dmi'
+ deform = 'icons/mob/human_races/r_def_harpy_vr.dmi'
+ tail = "tail"
+ icobase_tail = 1
+ unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite)
+ num_alternate_languages = 3
+ secondary_langs = list(LANGUAGE_BIRDSONG)
+ name_language = null
+ color_mult = 1
+
+ min_age = 18
+ max_age = 80
+
+ blurb = "An Avian species, coming from a distant planet, the Rapalas are the very proud race.\
+ Sol researchers have commented on them having a very close resemblance to the mythical race called 'Harpies',\
+ who are known for having massive winged arms and talons as feet. They've been clocked at speeds of over 35 miler per hour chasing the planet's many fish-like fauna.\
+ The Rapalan's home-world 'Verita' is a strangely habitable gas giant, while no physical earth exists, there are fertile floating islands orbiting around the planet from past asteroid activity."
+
+ //primitive_form = "Saru"
+
+ spawn_flags = SPECIES_CAN_JOIN
+ appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
+
+ //flesh_color = "#AFA59E"
+ //base_color = "#777777"
+ //tail_hair = "feathers"
+ //reagent_tag = IS_SERGAL
+
+ heat_discomfort_strings = list(
+ "Your feathers prickle in the heat.",
+ "You feel uncomfortably warm.",
+ "Your overheated skin itches."
+ )
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index f734969192..35c8db067c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -779,6 +779,9 @@ default behaviour is:
spawn() C.mob_breakout(src)
return TRUE
+ if(istype(loc,/obj/item/clothing))
+ spawn() escape_clothes(loc)
+
if(attempt_vr(src,"vore_process_resist",args)) return TRUE //VOREStation Code
/mob/living/proc/escape_inventory(obj/item/weapon/holder/H)
diff --git a/code/modules/mob/living/simple_animal/vore/solargrub.dm b/code/modules/mob/living/simple_animal/vore/solargrub.dm
new file mode 100644
index 0000000000..6fdd271acb
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/vore/solargrub.dm
@@ -0,0 +1,114 @@
+/*
+A work in progress, lore will go here later.
+List of things solar grubs should be able to do:
+
+2. have three stages of growth depending on time. (Or energy drained altho that seems like a hard one to code)
+3. be capable of eating people that get knocked out. (also be able to shock attackers that don’t wear insulated gloves.)
+5. ((potentially use digested people to reproduce))
+6. add glow?
+*/
+
+#define SINK_POWER 1
+
+/mob/living/simple_animal/retaliate/solargrub
+ name = "juvenile solargrub"
+ desc = "A young sparkling solargrub"
+ icon = 'icons/mob/vore.dmi' //all of these are placeholders
+ icon_state = "solargrub"
+ icon_living = "solargrub"
+ icon_dead = "solargrub-dead"
+
+ faction = "grubs"
+ maxHealth = 250 //grubs can take a lot of harm
+ health = 250
+ move_to_delay = 5
+
+ melee_damage_lower = 1
+ melee_damage_upper = 5
+
+ speak_chance = 1
+ emote_see = list("squelches", "squishes")
+
+ speed = 2
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
+
+ response_help = "pokes"
+ response_disarm = "pushes"
+ response_harm = "roughly pushes"
+
+ // solar grubs are not affected by atmos
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+
+ resistances = list(
+ HALLOSS = 0,
+ BRUTE = 1,
+ BURN = 0.1,
+ TOX = 0,
+ OXY = 0,
+ CLONE = 0
+ )
+
+ var/poison_per_bite = 5 //grubs cause a shock when they bite someone
+ var/poison_type = "shockchem"
+ var/poison_chance = 100
+ var/datum/powernet/PN // Our powernet
+ var/obj/structure/cable/attached // the attached cable
+
+/mob/living/simple_animal/relatiate/solargrub/PunchTarget()
+ var/mob/living/carbon/human/grubfood = target_mob
+ for(var/obj/O in grubfood)
+ O.emp_act(3)
+ ..()
+
+/mob/living/simple_animal/retaliate/solargrub/Life()
+ . = ..()
+ if(!. || ai_inactive) return
+
+ if(stance == STANCE_IDLE)
+ //first, check for potential cables nearby to powersink
+ var/turf/S = loc
+ attached = locate() in S
+ if(attached)
+ if(prob(2))
+ src.visible_message("\The [src] begins to sink power from the net.")
+ anchored = 1
+ PN = attached.powernet
+ PN.draw_power(150000)
+ var/apc_drain_rate = 4000 //5000 seems a bit high, knocking it down to 4000
+ for(var/obj/machinery/power/terminal/T in PN.nodes)
+ if(istype(T.master, /obj/machinery/power/apc))
+ var/obj/machinery/power/apc/A = T.master
+ if(A.operating && A.cell)
+ var/cur_charge = A.cell.charge / CELLRATE
+ var/drain_val = min(apc_drain_rate, cur_charge)
+ A.cell.use(drain_val * CELLRATE)
+ else if(!attached && anchored)
+ anchored = 0
+ PN = null
+
+/mob/living/simple_animal/retaliate/solargrub //active noms
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0 //grubs only eat incapacitated targets
+
+/mob/living/simple_animal/retaliate/solargrub/PunchTarget()
+ . = ..()
+ if(isliving(.))
+ var/mob/living/L = .
+ if(L.reagents)
+ L.reagents.add_reagent(poison_type, poison_per_bite)
+ if(prob(poison_chance))
+ L << "You feel a shock rushing through your veins."
+ L.reagents.add_reagent(poison_type, poison_per_bite)
+
+/mob/living/simple_animal/retaliate/solargrub/death()
+ src.anchored = 0
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm
index dcf1fbb362..bcbe8092f8 100644
--- a/code/modules/mob/new_player/sprite_accessories_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_vr.dm
@@ -6,7 +6,7 @@
/datum/sprite_accessory/hair
- species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan") //This lets all races use the default hairstyles.
+ species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Rapala") //This lets all races use the default hairstyles.
sergal_plain
name = "Sergal Plain"
@@ -41,13 +41,13 @@
name = "Bald"
icon_state = "bald"
gender = MALE
- species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Xenochimera") //Lets all the races be bald if they want.
+ species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Xenochimera", "Rapala") //Lets all the races be bald if they want.
ponytail6_fixed //Eggnerd's done with waiting for upstream fixes lmao.
name = "Ponytail 6 but fixed"
icon = 'icons/mob/human_face_vr.dmi'
icon_state = "hair_ponytail6"
- species_allowed = list("Human","Skrell","Unathi","Tajara", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid")
+ species_allowed = list("Human","Skrell","Unathi","Tajara", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Rapala")
una_hood
name = "Cobra Hood"
@@ -333,7 +333,7 @@
gender = NEUTER
/datum/sprite_accessory/facial_hair
- species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan") //This lets all races use the facial hair styles.
+ species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Rapala") //This lets all races use the facial hair styles.
vulp_none
@@ -675,6 +675,18 @@
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
+ harpy_feathers
+ name = "Rapala leg Feather"
+ icon_state = "harpy-feathers"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_LEG,BP_R_LEG)
+
+ harpy_legs
+ name = "Rapala leg coloring"
+ icon_state = "harpy-leg"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
+
alurane
name = "Alurane Body"
icon_state = "alurane"
diff --git a/code/modules/nifsoft/software/01_vision.dm b/code/modules/nifsoft/software/01_vision.dm
index c58377f957..d6d3aded47 100644
--- a/code/modules/nifsoft/software/01_vision.dm
+++ b/code/modules/nifsoft/software/01_vision.dm
@@ -204,7 +204,8 @@
list_pos = NIF_THERMALS
cost = 1000
a_drain = 0.1
- access = access_captain
+ illegal = TRUE
+ access = 999
tick_flags = NIF_ACTIVETICK
activate()
diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm
index 28058af2e2..526e2a6a93 100644
--- a/code/modules/organs/robolimbs_vr.dm
+++ b/code/modules/organs/robolimbs_vr.dm
@@ -55,12 +55,26 @@
/obj/item/weapon/disk/limb/talon
company = "Talon LLC"
-/datum/robolimb/zenghu_taj
- company = "Zeng-Hu - Tajaran"
- desc = "This limb has a rubbery fleshtone covering with visible seams."
- icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_taj.dmi'
- unavailable_to_build = 1
- parts = list(BP_HEAD)
+/datum/robolimb/zenghu_taj //This wasn't indented. At all. It's a miracle this didn't break literally everything.
+ company = "Zeng-Hu - Tajaran"
+ desc = "This limb has a rubbery fleshtone covering with visible seams."
+ icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_taj.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+
+/datum/robolimb/eggnerdltdred
+ company = "Eggnerd Prototyping Ltd. (Red)"
+ desc = "A slightly more refined limb variant from Eggnerd Prototyping. Its got red plating instead of orange."
+ icon = 'icons/mob/human_races/cyberlimbs/rahboopred/rahboopred.dmi'
+ blood_color = "#5e280d"
+ includes_tail = 1
+ unavailable_to_build = 1
+
+/obj/item/weapon/disk/limb/eggnerdltdred
+ company = "Eggnerd Prototyping Ltd. (Red)"
+ icon = 'icons/obj/items_vr.dmi'
+ icon_state = "verkdisk"
+
//Darkside Incorperated synthetic augmentation list! Many current most used fuzzy and notsofuzzy races made into synths here.
@@ -153,4 +167,4 @@
suggested_species = "Vasilissan"
/obj/item/weapon/disk/limb/dsi_spider
- company = "DSI - Vasilissan"
\ No newline at end of file
+ company = "DSI - Vasilissan"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm
index bebbb91325..771fce0f67 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm
@@ -29,3 +29,19 @@
/datum/reagent/numbing_enzyme/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 200)
+
+/datum/reagent/vermicetol
+ name = "Vermicetol"
+ id = "vermicetol"
+ description = "A potent chemical that treats burn damage at an exceptional rate and lasts a while."
+ taste_description = "sparkles"
+ reagent_state = SOLID
+ color = "#964e06"
+ overdose = 10
+ scannable = 1
+ metabolism = 0.02
+ mrate_static = TRUE
+
+/datum/reagent/vermicetol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.heal_organ_damage(0, 21 * removed) //more potent than keloderm
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Vore_vr.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Vore_vr.dm
index ff6f713b67..9788c70cc6 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Vore_vr.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Vore_vr.dm
@@ -124,3 +124,17 @@
P.absorbed = 0
M.visible_message("Something spills into [M]'s [lowertext(B.name)]!")
return
+
+//Special toxins for solargrubs
+
+/datum/reagent/grubshock
+ name = "200 V" //in other words a painful shock
+ id = "shockchem"
+ description = "A liquid that quickly dissapates to deliver a painful shock."
+ reagent_state = LIQUID
+ color = "#E4EC2F"
+ metabolism = 2.50
+ var/power = 11
+
+/datum/reagent/grubshock/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.take_organ_damage(0, removed * power * 0.2)
diff --git a/code/modules/reagents/Chemistry-Recipes_vr.dm b/code/modules/reagents/Chemistry-Recipes_vr.dm
index de7f707ac5..5679c4b6ec 100644
--- a/code/modules/reagents/Chemistry-Recipes_vr.dm
+++ b/code/modules/reagents/Chemistry-Recipes_vr.dm
@@ -73,6 +73,23 @@
required_reagents = list("milk" = 2, "hydrogen" = 1, "potassium" = 1)
result_amount = 3
+/datum/chemical_reaction/vermicetol
+ name = "Vermicetol"
+ id = "vermicetol"
+ result = "vermicetol"
+ required_reagents = list("kelotane" = 1, "dermaline" = 1, "shockchem" = 1, "phoron" = 0.1)
+ catalysts = list("phoron" = 5)
+ result_amount = 3
+
+///////////////////////////////////////////////////////////////////////////////////
+/// Special drinks
+/datum/chemical_reaction/drinks/grubshake
+ name = "Grub protein drink"
+ id = "grubshake"
+ result = "grubshake"
+ required_reagents = list("shockchem" = 5, "water" = 25)
+ result_amount = 30
+
///////////////////////////////
//SLIME CORES BELOW HERE///////
///////////////////////////////
diff --git a/code/modules/reagents/reagent_containers/food/snacks_vr.dm b/code/modules/reagents/reagent_containers/food/snacks_vr.dm
index 721b9742c9..ec1da1832d 100644
--- a/code/modules/reagents/reagent_containers/food/snacks_vr.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks_vr.dm
@@ -190,6 +190,91 @@
reagents.add_reagent("protein", 4)
bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
+ name = "grubmeat"
+ desc = "A slab of grub meat, it gives a gentle shock if you touch it"
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "grubmeat"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("shockchem", 6)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/bugball
+ name = "bugball"
+ desc = "A hard chitin, dont chip a tooth!"
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "pillbugball"
+ trash = /obj/item/weapon/reagent_containers/food/snacks/pillbug
+ nutriment_amt = 1
+ nutriment_desc = list("crunchy shell bits" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/grub/bugball/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("carbon", 5)
+ bitesize = 7
+
+/obj/item/weapon/reagent_containers/food/snacks/pillbug
+ name = "pillbug"
+ desc = "A delicacy discovered and popularized by a famous restaurant called Mudca's Meat Hut."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "pillbug"
+ trash = /obj/item/weapon/reagent_containers/food/snacks/pillbugempty
+ nutriment_amt = 3
+ nutriment_desc = list("sparkles" = 5, "ancient inca culture" =3)
+
+/obj/item/weapon/reagent_containers/food/snacks/pillbug/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("shockchem", 6)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/pillbugempty
+ name = "pillbug shell"
+ desc = "Waste not, want not."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "pillbugempty"
+ nutriment_amt = 1
+ nutriment_desc = list("crunchy shell bits" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/pillbug/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("carbon", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/mammi
+ name = "mämmi"
+ desc = "Traditional finnish desert, some like it, others don't. It's drifting in some milk, add sugar!"
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "mammi"
+ trash = /obj/item/trash/plate
+ nutriment_amt = 3
+ nutriment_desc = list("brothy sweet goodness" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/mammi/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/makaroni
+ name = "makaronilaatikko"
+ desc = "A special kind of macaroni, it's a big dish, and this one has special meat in it."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "makaroni"
+ trash = /obj/item/trash/plate
+ nutriment_amt = 15
+ nutriment_desc = list("Cheese" = 5, "eggs" = 3, "pasta" = 4, "sparkles" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/makaroni/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("shockchem", 6)
+ bitesize = 7
+
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sobakacube
name = "sobaka cube"
monkey_type = "Sobaka"
diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm
index 07ffc042e8..a63943bca2 100644
--- a/code/modules/vore/appearance/sprite_accessories_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_vr.dm
@@ -95,6 +95,13 @@
desc = ""
icon_state = "demon-horns1"
+/datum/sprite_accessory/ears/demon_horns2
+ name = "demon horns, colorable(outward)"
+ desc = ""
+ icon_state = "demon-horns2"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
+
/datum/sprite_accessory/ears/foxears
name = "highlander zorren ears"
desc = ""
@@ -220,7 +227,7 @@
icon_state = "sleek"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
-
+
// Special snowflake ears go below here.
/datum/sprite_accessory/ears/molenar_kitsune
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index e255398e0b..b7adf59dcf 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -14,6 +14,8 @@
var/vore_taste = null // What the character tastes like
var/no_vore = 0 // If the character/mob can vore.
var/openpanel = 0 // Is the vore panel open?
+ var/conceal_nif = 0 // Do they wish to conceal their NIF from examine?
+ var/nif_examine = "There's a certain spark to their eyes" //The examine text of their NIF. This is the default placeholder.
//
// Hook for generic creation of stuff on new creatures
@@ -436,3 +438,60 @@
gas = list(
"oxygen" = 21,
"nitrogen" = 79)
+
+/mob/living/proc/escape_clothes(obj/item/clothing/C)
+ ASSERT(src.loc == C)
+
+ if(ishuman(C.loc)) //In a /mob/living/carbon/human
+ var/mob/living/carbon/human/H = C.loc
+ if(H.shoes == C) //Being worn
+ src << " You start to climb around the larger creature's feet and ankles!"
+ H << "Something is trying to climb out of your [C]!"
+ var/original_loc = H.loc
+ for(var/escape_time = 100,escape_time > 0,escape_time--)
+ if(H.loc != original_loc)
+ src << "You're pinned back underfoot!"
+ H << "You pin the escapee back underfoot!"
+ return
+ if(src.loc != C)
+ return
+ sleep(1)
+
+ src << "You manage to escape \the [C]!"
+ H << "Somone has climbed out of your [C]!"
+ src.loc = H.loc
+ var/datum/belly/B = check_belly(H)
+ if(B)
+ B.internal_contents += src
+ return
+ else //Being held by a human
+ src << "You start to climb out of \the [C]!"
+ H << "Something is trying to climb out of your [C]!"
+ for(var/escape_time = 60,escape_time > 0,escape_time--)
+ if(H.shoes == C)
+ src << "You're pinned underfoot!"
+ H << "You pin the escapee underfoot!"
+ return
+ if(src.loc != C)
+ return
+ sleep(1)
+ src << "You manage to escape \the [C]!"
+ H << "Somone has climbed out of your [C]!"
+ src.loc = H.loc
+ var/datum/belly/B = check_belly(H)
+ if(B)
+ B.internal_contents += src
+ return
+
+ src << "You start to climb out of \the [C]!"
+ sleep(50)
+ if(src.loc == C)
+ src << "You climb out of \the [C]!"
+ src.loc = C.loc
+ var/datum/belly/B
+ if(check_belly(C)) B = check_belly(C)
+ if(check_belly(C.loc)) B = check_belly(C.loc)
+ if(B)
+ B.internal_contents += src
+ return
+ return
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index 1f1e50b0b8..024e0ad4af 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -44,6 +44,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/digestable = 1
var/list/belly_prefs = list()
var/vore_taste
+ var/conceal_nif
+ var/nif_examine
//Mechanically required
var/path
@@ -103,6 +105,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
S["digestable"] >> digestable
S["belly_prefs"] >> belly_prefs
S["vore_taste"] >> vore_taste
+ S["conceal_nif"] >> conceal_nif
+ S["nif_examine"] >> nif_examine
if(isnull(digestable))
digestable = 1
@@ -121,5 +125,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
S["digestable"] << digestable
S["belly_prefs"] << belly_prefs
S["vore_taste"] << vore_taste
+ S["conceal_nif"] << conceal_nif
+ S["nif_examine"] << nif_examine
return 1
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index e76885147d..3467af7223 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -7,6 +7,7 @@
#define BELLIES_NAME_MAX 12
#define BELLIES_DESC_MAX 1024
#define FLAVOR_MAX 40
+#define NIF_EXAMINE_MAX 60
/mob/living/proc/insidePanel()
set name = "Vore Panel"
@@ -23,7 +24,7 @@
picker_holder.popup.open()
src.openpanel = 1
-/mob/living/proc/updateVRPanel() //Panel popup update call from belly évents.
+/mob/living/proc/updateVRPanel() //Panel popup update call from belly events.
if(src.openpanel == 1)
var/datum/vore_look/picker_holder = new()
picker_holder.loop = picker_holder
@@ -257,6 +258,9 @@
if(0)
dat += "Toggle Digestable"
+ dat += "
Set NIF concealment" //These two get their own, custom row.
+ dat += "Set NIF Examine Message."
+
//Returns the dat html to the vore_look
return dat
@@ -666,6 +670,28 @@
else //Returned null
return 0
+ if(href_list["toggle_nif"])
+ var/choice = alert(user, "Your nif is currently: [user.conceal_nif ? "Not able to be seen" : "Able to be seen"]", "", "Conceal NIF", "Cancel", "Show NIF")
+ switch(choice)
+ if("Cancel")
+ return 0
+ if("Conceal NIF")
+ user.conceal_nif = 1
+ if("Show NIF")
+ user.conceal_nif = 0
+
+ if(href_list["set_nif_flavor"])
+ var/new_nif_examine = html_encode(input(usr,"How people will see your NIF on examine (100ch limit):","Character Flavor",user.nif_examine) as text|null)
+
+ if(new_nif_examine)
+ new_nif_examine = readd_quotes(new_nif_examine)
+ if(length(new_nif_examine) > NIF_EXAMINE_MAX)
+ alert("Entered NIF examine text too long. [NIF_EXAMINE_MAX] character limit.","Error")
+ return 0
+ user.nif_examine = new_nif_examine
+ else //Returned null
+ return 0
+
if(href_list["toggledg"])
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable. Don't abuse this button by toggling it back and forth to extend a scene or whatever, or you'll make the admins cry. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
switch(choice)
diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
index 137e66dcb1..d43db000ea 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
@@ -1479,4 +1479,15 @@ Departamental Swimsuits, for general use
icon_state = "headbando"
icon_override = 'icons/vore/custom_clothes_vr.dmi'
- item_state = "headbando"
\ No newline at end of file
+ item_state = "headbando"
+
+//General use
+/obj/item/clothing/suit/storage/fluff/loincloth
+ name = "Loincloth"
+ desc = "A primitive piece of oak-borwn clothing wrapped firmly around the waist. A few bones line the edges."
+
+ icon = 'icons/vore/custom_clothes_vr.dmi'
+ icon_state = "loincloth"
+
+ icon_override = 'icons/vore/custom_clothes_vr.dmi'
+ item_state = "loincloth"
\ No newline at end of file
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index d4b197acb5..9a702c4004 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -989,7 +989,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie
..()
//verkister: Cameron Eggbert - Science goggles that ACTUALLY do nothing.
-/obj/item/clothing/glasses/science_proper
+/obj/item/clothing/glasses/fluff/science_proper
name = "Aesthetic Science Goggles"
desc = "The goggles really do nothing this time!"
icon_state = "purple"
@@ -997,12 +997,13 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie
item_flags = AIRTIGHT
//verkister: Opie Eggbert - Spiffy fluff goggles
-/obj/item/clothing/glasses/spiffygogs
+/obj/item/clothing/glasses/fluff/spiffygogs
name = "Chad Goggles"
desc = "You can almost feel the raw power radiating off these strange specs."
icon = 'icons/vore/custom_items_vr.dmi'
icon_override = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "spiffygogs"
+ slot_flags = SLOT_EYES | SLOT_EARS
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
toggleable = 1
off_state = "spiffygogsup"
@@ -1396,4 +1397,4 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie
H.monkeyize()
qdel(src) //One time use.
else //If not, do nothing.
- to_chat(user,"You are unable to inject other people.")
\ No newline at end of file
+ to_chat(user,"You are unable to inject other people.")
diff --git a/config/custom_items.txt b/config/custom_items.txt
index 90e934f639..d735fa8ffb 100644
--- a/config/custom_items.txt
+++ b/config/custom_items.txt
@@ -614,7 +614,7 @@ item_path: /obj/item/clothing/head/fluff/runac
{
ckey: verkister
character_name: Cameron Eggbert
-item_path: /obj/item/clothing/glasses/science_proper
+item_path: /obj/item/clothing/glasses/fluff/science_proper
}
{
ckey: verkister
@@ -624,7 +624,7 @@ item_path: /obj/item/weapon/disk/limb/eggnerdltd
{
ckey: verkister
character_name: Opie Eggbert
-item_path: /obj/item/clothing/glasses/spiffygogs
+item_path: /obj/item/clothing/glasses/fluff/spiffygogs
}
{
ckey: virgo113
diff --git a/icons/mob/human_races/cyberlimbs/rahboopred/rahboopred.dmi b/icons/mob/human_races/cyberlimbs/rahboopred/rahboopred.dmi
new file mode 100644
index 0000000000..f0d9dc8cab
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/rahboopred/rahboopred.dmi differ
diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi
index c62587f37f..aba11e8163 100644
Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ
diff --git a/icons/mob/human_races/r_def_harpy_vr.dmi b/icons/mob/human_races/r_def_harpy_vr.dmi
new file mode 100644
index 0000000000..d84bedfcdf
Binary files /dev/null and b/icons/mob/human_races/r_def_harpy_vr.dmi differ
diff --git a/icons/mob/human_races/r_harpy_vr.dmi b/icons/mob/human_races/r_harpy_vr.dmi
new file mode 100644
index 0000000000..002ee25e8d
Binary files /dev/null and b/icons/mob/human_races/r_harpy_vr.dmi differ
diff --git a/icons/mob/vore.dmi b/icons/mob/vore.dmi
index 34b51493ab..e34a68f2e8 100644
Binary files a/icons/mob/vore.dmi and b/icons/mob/vore.dmi differ
diff --git a/icons/mob/vore/ears_vr.dmi b/icons/mob/vore/ears_vr.dmi
index def41ce82a..5e44f60779 100644
Binary files a/icons/mob/vore/ears_vr.dmi and b/icons/mob/vore/ears_vr.dmi differ
diff --git a/icons/obj/food_vr.dmi b/icons/obj/food_vr.dmi
index f79a37f3ae..e7bd78f8bf 100644
Binary files a/icons/obj/food_vr.dmi and b/icons/obj/food_vr.dmi differ
diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi
index eeb4ecbc3b..e7afc65c96 100644
Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ
diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm
index b2ebe6a1cc..bab337657f 100644
--- a/maps/tether/tether-01-surface.dmm
+++ b/maps/tether/tether-01-surface.dmm
@@ -5547,7 +5547,6 @@
"ccI" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake)
"ccJ" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/alarm{breach_detection = 0; dir = 8; pixel_x = 25; pixel_y = 0; report_danger_level = 0},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake)
"ccK" = (/obj/effect/floor_decal/techfloor{dir = 8},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing)
-"ccL" = (/obj/machinery/power/thermoregulator,/turf/simulated/floor,/area/engineering/atmos/storage)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaacaacaacaacaacaacaacaacaacaacaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5744,7 +5743,7 @@ aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaK
aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvaUDaUraUrbeIaWRaWRaWRaWRaWRaGvbeJbeKaGvaKuaKuaKuaKuaWwbeLbeLbeMbeNbeMbeLbeLbeLaIhbePbbVbbVbeQbeRbeSbeRbeQbeTbeUbeVbeWbeXbeYbcObeZbfabfbbfcbfabfdbcMahsahsahsahsbaabaabaabaabbzbfebbzbaabffbfgbfhbbzbcWbbzbbzbcqbaaaKuaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvaUDaUraUrbfiaGvbfjbfkbflbfmbfnbfobfpaGvaKuaKuaKuaKuaKubeLbfqbfrbfsbftbfubfvbeLaIibfxbbVbfybeQbfzbfAbfBbeQbeQbeQbfCbfDbetbfEbcMbfFbfGbfHbfIbfJbfKbcMbfLbfMbfNbfNbfNbfObfNbeDbeDbeDbfPbaabfQbfRbfSbbzbfTbfUbfVbfWbaaaKuaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvaUDaVtaWpaUraGvbfXaGvaGvaGvaGvbeJbfYaGvaKuaKuaKuaKuaKubeLbfZbgabgbbgcbgdbgebeLaIjbggbbVbghbeQbgibgjbgkbglbgmbeQbgnbgobetbgpbcMbcMbcObcObcObcObcMbcMaWzaWzaWzaWzaWzaWzbaabaabaabaabaabaabaabaabgrbgsbRNbgubgvbaabaaaKuaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
-aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvbgwaUraUrbSEaGvaGvaGvaKuaKuaGvbgybgzaGvaKuaKuaKuaKuaKubeLbgAbgBbgCcbcbgEbgFbeLaIsbgHbbVbgIbeQbgJbgKbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgWbgWbgWbgWbgWbgYaWzbgZbhabhbccLaWzaKuaKuaKuaKuaKuaKuaKubaabhdbacbaabaabaabaaaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
+aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvbgwaUraUrbSEaGvaGvaGvaKuaKuaGvbgybgzaGvaKuaKuaKuaKuaKubeLbgAbgBbgCcbcbgEbgFbeLaIsbgHbbVbgIbeQbgJbgKbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgWbgWbgWbgWbgWbgYaWzbgZbhabhbbhbaWzaKuaKuaKuaKuaKuaKuaKubaabhdbacbaabaabaabaaaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvbhebhfbhgbhgaGvaKuaKuaKuaKuaGvbeJbfYaGvaKuaKuaKuaKuaKubeLbhhbhibhjbhkbhlbhmbeLaItbhobbVbhpbeQbhqbhrbhsbhtbhubeQbhvbhwbhxbhybhzbhzbhzbhzbhAbhAbhBbhCbhDbhEbhFbhGbhHaWzaKuaKuaKuaKuaKuaKuaKubaabhIbbzbaaaKuaKuaKuaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvaGvaGvaGvaGvaGvaKuaKuaKuaKuaGvbeJbfYbhJbhJbhJbhJbhJbhJbeLbeLbeLbeLbeLbeLbeLbeLaIvbhLbhMbhMbhMbhMbhMbhMbhMbhMbhMbhMbhNbhObhPbhMbhMbhMbhMbhMbhMbhMbbVaWzbhQbhFbhGbhGaWzaKuaKuaKuaKuaKuaKuaKubaabhIbaabaaaKuaKuaKuaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
aKsaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaKuaGvbeJbfYbhJbhRbhSbhTbhUbhVbhJaKubhMbhWbhXbhYbhZbiaaIwaIxaIAbiqaIyaIzaINaITaILaIMaIWaIYaIUaIVaJebiqbirbisbitbiubivbhMaKuaWzbiwbhFbhFbiyaWzaKuaKuaKuaKuaKuaKuaKubaabhIbaabizaKuaKuaKuaKuaKuaKuaKuaKuaKuaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKtaKs
diff --git a/vorestation.dme b/vorestation.dme
index 1fba751376..99db7d5b46 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -557,10 +557,8 @@
#include "code\game\jobs\whitelist_vr.dm"
#include "code\game\jobs\job\assistant.dm"
#include "code\game\jobs\job\captain.dm"
-#include "code\game\jobs\job\captain_vr.dm"
#include "code\game\jobs\job\civilian.dm"
#include "code\game\jobs\job\civilian_chaplain.dm"
-#include "code\game\jobs\job\civilian_vr.dm"
#include "code\game\jobs\job\engineering.dm"
#include "code\game\jobs\job\job.dm"
#include "code\game\jobs\job\job_vr.dm"
@@ -569,6 +567,7 @@
#include "code\game\jobs\job\security.dm"
#include "code\game\jobs\job\silicon.dm"
#include "code\game\jobs\job\special.dm"
+#include "code\game\jobs\job\z_all_jobs_vr.dm"
#include "code\game\machinery\adv_med.dm"
#include "code\game\machinery\adv_med_vr.dm"
#include "code\game\machinery\ai_slipper.dm"
@@ -803,6 +802,7 @@
#include "code\game\objects\effects\misc.dm"
#include "code\game\objects\effects\overlays.dm"
#include "code\game\objects\effects\portals.dm"
+#include "code\game\objects\effects\spider_vr.dm"
#include "code\game\objects\effects\spiders.dm"
#include "code\game\objects\effects\step_triggers.dm"
#include "code\game\objects\effects\zone_divider.dm"
@@ -1490,6 +1490,7 @@
#include "code\modules\events\event_manager.dm"
#include "code\modules\events\gravity.dm"
#include "code\modules\events\grid_check.dm"
+#include "code\modules\events\grubinfestation_vr.dm"
#include "code\modules\events\ian_storm_vr.dm"
#include "code\modules\events\infestation.dm"
#include "code\modules\events\ion_storm.dm"
@@ -1952,6 +1953,7 @@
#include "code\modules\mob\living\simple_animal\animals\pike_vr.dm"
#include "code\modules\mob\living\simple_animal\animals\slime.dm"
#include "code\modules\mob\living\simple_animal\animals\snake_vr.dm"
+#include "code\modules\mob\living\simple_animal\vore\solargrub.dm"
#include "code\modules\mob\living\simple_animal\animals\spiderbot.dm"
#include "code\modules\mob\living\simple_animal\animals\tomato.dm"
#include "code\modules\mob\living\simple_animal\animals\tree.dm"