diff --git a/code/datums/underwear/socks.dm b/code/datums/underwear/socks.dm
index fc1c96ce53..e1fe7e07f2 100644
--- a/code/datums/underwear/socks.dm
+++ b/code/datums/underwear/socks.dm
@@ -56,4 +56,8 @@
/datum/category_item/underwear/socks/fishnet
name = "Fishnet"
- icon_state = "fishnet"
\ No newline at end of file
+ icon_state = "fishnet"
+
+/datum/category_item/underwear/socks/leggings
+ name = "Leggings"
+ icon_state = "leggings"
\ No newline at end of file
diff --git a/code/datums/underwear/top.dm b/code/datums/underwear/top.dm
index 72ac72c232..28a17c3ab7 100644
--- a/code/datums/underwear/top.dm
+++ b/code/datums/underwear/top.dm
@@ -62,4 +62,12 @@
/datum/category_item/underwear/top/striped_bra
name = "Striped Bra"
icon_state = "striped_bra"
- has_color = TRUE
\ No newline at end of file
+ has_color = TRUE
+
+/datum/category_item/underwear/top/binder
+ name = "Binder"
+ icon_state = "binder_s"
+
+/datum/category_item/underwear/top/straplessbinder
+ name = "Binder Strapless"
+ icon_state = "straplessbinder_s"
\ No newline at end of file
diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm
index 1bbbae7fb5..1f91d1222c 100644
--- a/code/datums/underwear/undershirts.dm
+++ b/code/datums/underwear/undershirts.dm
@@ -165,4 +165,16 @@
/datum/category_item/underwear/undershirt/tiedye
name = "Tiedye Shirt"
- icon_state = "tiedye"
\ No newline at end of file
+ icon_state = "tiedye"
+
+/datum/category_item/underwear/undershirt/longstripe_pink
+ name = "Longsleeve Striped Shirt, Pink"
+ icon_state = "longstripe_pink_s"
+
+/datum/category_item/underwear/undershirt/wingshirt
+ name = "Pink Wing Shirt"
+ icon_state = "wing_shirt_s"
+
+/datum/category_item/underwear/undershirt/pinkblack_tshirt
+ name = "Pink and Black T-Shirt"
+ icon_state = "pinkblack_tshirt"
\ No newline at end of file
diff --git a/code/game/jobs/access_datum_vr.dm b/code/game/jobs/access_datum_vr.dm
new file mode 100644
index 0000000000..872db2ae73
--- /dev/null
+++ b/code/game/jobs/access_datum_vr.dm
@@ -0,0 +1,12 @@
+//Moved from southern_cross_jobs.vr to fix a runtime
+var/const/access_explorer = 43
+/datum/access/explorer
+ id = access_explorer
+ desc = "Explorer"
+ region = ACCESS_REGION_GENERAL
+
+var/const/access_pilot = 67
+/datum/access/pilot
+ id = access_pilot
+ desc = "Pilot"
+ region = ACCESS_REGION_SUPPLY
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index ffda46f7cf..91fe137e54 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -391,6 +391,13 @@
var/obj/belly/B = belly
for(var/mob/living/sub_L in B)
despawn_occupant(sub_L)
+ for(var/obj/item/W in B)
+ W.forceMove(src)
+ if(W.contents.len)
+ for(var/obj/item/O in W.contents)
+ if(istype(O,/obj/item/weapon/storage/internal))
+ continue
+ O.forceMove(src)
if(ishuman(to_despawn))
var/mob/living/carbon/human/H = to_despawn
if(H.nif)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 4c447e91f3..fa808ea051 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -132,7 +132,7 @@
if("cellremove")
if(panel_open && cell && !usr.get_active_hand())
- usr.visible_message("\The usr] removes \the [cell] from \the [src].", "You remove \the [cell] from \the [src].")
+ usr.visible_message("\The [usr] removes \the [cell] from \the [src].", "You remove \the [cell] from \the [src].")
cell.update_icon()
usr.put_in_hands(cell)
cell.add_fingerprint(usr)
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 672b0a2c4e..480e613c27 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -50,6 +50,7 @@
else
state = 5
update_icon()
+ playsound(src, 'sound/items/washingmachine.ogg', 50, 1, 1)
sleep(200)
for(var/atom/A in washing)
A.clean_blood()
diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm
index 7b9eb67691..ab46a48fbc 100644
--- a/code/game/mecha/combat/durand.dm
+++ b/code/game/mecha/combat/durand.dm
@@ -48,6 +48,7 @@
set popup_menu = 0
if(usr!=src.occupant)
return
+ playsound(src, 'sound/mecha/duranddefencemode.ogg', 50, 1)
defence = !defence
if(defence)
deflect_chance = defence_deflect
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index 591351032b..978bbdeda8 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -37,6 +37,7 @@
wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
max_equip = 4
step_energy_drain = 5
+ mech_faction = MECH_FACTION_SYNDI
max_hull_equip = 1
max_weapon_equip = 2
@@ -84,6 +85,7 @@
step_energy_drain = step_energy_drain*overload_coeff
src.occupant_message("You enable leg actuators overload.")
src.log_message("Toggled leg actuators overload.")
+ playsound(src, 'sound/mecha/mechanical_toggle.ogg', 50, 1)
return
/obj/mecha/combat/gygax/dyndomove(direction)
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index 3236600309..27bdf905a9 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -22,6 +22,7 @@
internal_damage_threshold = 25
force = 45
max_equip = 4
+ mech_faction = MECH_FACTION_NT
max_hull_equip = 3
max_weapon_equip = 3
@@ -42,6 +43,7 @@
force = 55
max_equip = 5
+
/obj/mecha/combat/marauder/mauler
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
name = "Mauler"
@@ -49,6 +51,7 @@
initial_icon = "mauler"
operation_req_access = list(access_syndicate)
wreckage = /obj/effect/decal/mecha_wreckage/mauler
+ mech_faction = MECH_FACTION_SYNDI
/obj/mecha/combat/marauder/New()
..()
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index fec8c18e1d..825dfde5f5 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -20,10 +20,13 @@
var/required_type = /obj/mecha //may be either a type or a list of allowed types
var/equip_type = null //mechaequip2
var/allow_duplicate = FALSE
+ var/ready_sound = 'sound/mecha/mech_reload_default.ogg' //Sound to play once the fire delay passed.
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1)
sleep(equip_cooldown)
set_ready_state(1)
+ if(ready_sound) //Kind of like the kinetic accelerator.
+ playsound(loc, ready_sound, 50, 1, -1)
if(target && chassis)
return 1
return 0
@@ -69,10 +72,22 @@
src.update_chassis_page()
chassis.occupant_message("The [src] is destroyed!")
chassis.log_append_to_last("[src] is destroyed.",1)
- if(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon))
- chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50)
- else
- chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50)
+ if(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon))//Gun
+ switch(chassis.mech_faction)
+ if(MECH_FACTION_NT)
+ src.chassis.occupant << sound('sound/mecha/weapdestrnano.ogg',volume=70)
+ if(MECH_FACTION_SYNDI)
+ src.chassis.occupant << sound('sound/mecha/weapdestrsyndi.ogg',volume=60)
+ else
+ src.chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50)
+ else //Not a gun
+ switch(chassis.mech_faction)
+ if(MECH_FACTION_NT)
+ src.chassis.occupant << sound('sound/mecha/critdestrnano.ogg',volume=70)
+ if(MECH_FACTION_SYNDI)
+ src.chassis.occupant << sound('sound/mecha/critdestrsyndi.ogg',volume=70)
+ else
+ src.chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50)
spawn
qdel(src)
return
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 73bddbb433..68e0c1380e 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -128,7 +128,7 @@
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_diamond_drill"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
- equip_cooldown = 20
+ equip_cooldown = 10
force = 15
/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/action(atom/target)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index d3bdbb4158..82a0627fa7 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -7,6 +7,11 @@
#define MELEE 1
#define RANGED 2
+
+#define MECH_FACTION_NT "nano"
+#define MECH_FACTION_SYNDI "syndi"
+#define MECH_FACTION_NONE "none"
+
/obj/mecha
name = "Mecha"
desc = "Exosuit"
@@ -41,6 +46,10 @@
var/lights_power = 6
var/force = 0
+ var/mech_faction = null
+ var/firstactivation = 0 //It's simple. If it's 0, no one entered it yet. Otherwise someone entered it at least once.
+
+
//inner atmos
var/use_internal_tank = 0
var/internal_tank_valve = ONE_ATMOSPHERE
@@ -500,7 +509,7 @@
internal_damage |= int_dam_flag
pr_internal_damage.start()
log_append_to_last("Internal damage of type [int_dam_flag].",1)
- occupant << sound('sound/machines/warning-buzzer.ogg',wait=0)
+ occupant << sound('sound/mecha/internaldmgalarm.ogg',volume=50) //Better sounding.
return
/obj/mecha/proc/clearInternalDamage(int_dam_flag)
@@ -1008,6 +1017,7 @@
if(network && !(internal_tank.return_air() in network.gases))
network.gases += internal_tank.return_air()
network.update = 1
+ playsound(src, 'sound/mecha/gasconnected.ogg', 50, 1)
log_message("Connected to gas port.")
return 1
@@ -1021,6 +1031,7 @@
connected_port.connected_device = null
connected_port = null
+ playsound(src, 'sound/mecha/gasdisconnected.ogg', 50, 1)
src.log_message("Disconnected from gas port.")
return 1
@@ -1078,6 +1089,7 @@
else set_light(light_range - lights_power)
src.occupant_message("Toggled lights [lights?"on":"off"].")
log_message("Toggled lights [lights?"on":"off"].")
+ playsound(src, 'sound/mecha/heavylightswitch.ogg', 50, 1)
return
@@ -1176,8 +1188,22 @@
src.icon_state = src.reset_icon()
set_dir(dir_in)
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- if(!hasInternalDamage())
- src.occupant << sound('sound/mecha/nominal.ogg',volume=50)
+ if(!hasInternalDamage()) //Otherwise it's not nominal!
+ switch(mech_faction)
+ if(MECH_FACTION_NT)//The good guys category
+ if(firstactivation)//First time = long activation sound
+ firstactivation = 1
+ src.occupant << sound('sound/mecha/LongNanoActivation.ogg',volume=50)
+ else
+ src.occupant << sound('sound/mecha/nominalnano.ogg',volume=50)
+ if(MECH_FACTION_SYNDI)//Bad guys
+ if(firstactivation)
+ firstactivation = 1
+ src.occupant << sound('sound/mecha/LongSyndiActivation.ogg',volume=50)
+ else
+ src.occupant << sound('sound/mecha/nominalsyndi.ogg',volume=50)
+ else//Everyone else gets the normal noise
+ src.occupant << sound('sound/mecha/nominal.ogg',volume=50)
return 1
else
return 0
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 44d3c98c8c..b25d86897f 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -68,6 +68,7 @@
cell.charge = 0
visible_message("\The [src] flickers before going dull.")
set_light(0)
+ playsound(src.loc, 'sound/effects/sparks3.ogg', 10, 1, -3) //Small cue that your light went dull in your pocket.
on = 0
update_icon()
@@ -180,6 +181,7 @@
user.put_in_hands(cell)
cell = null
user << "You remove the cell from the [src]."
+ playsound(src, 'sound/machines/button.ogg', 30, 1, 0)
on = 0
update_icon()
return
@@ -228,6 +230,7 @@
W.loc = src
cell = W
user << "You install a cell in \the [src]."
+ playsound(src, 'sound/machines/button.ogg', 30, 1, 0)
update_icon()
else
user << "\The [src] already has a cell."
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index d404b5cd44..260a01b04d 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -7,55 +7,82 @@ RSF
/obj/item/weapon/rsf
name = "\improper Rapid-Service-Fabricator"
desc = "A device used to rapidly deploy service items."
- icon = 'icons/obj/items.dmi'
+ description_info = "Control Clicking on the device will allow you to choose the glass it dispenses when in the proper mode."
+ icon = 'icons/obj/tools.dmi'
icon_state = "rcd"
opacity = 0
density = 0
anchored = 0.0
var/stored_matter = 30
var/mode = 1
+ var/obj/item/weapon/reagent_containers/glasstype = /obj/item/weapon/reagent_containers/food/drinks/metaglass
+
+ var/list/container_types = list(
+ "metamorphic glass" = /obj/item/weapon/reagent_containers/food/drinks/metaglass,
+ "half-pint glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/square,
+ "rocks glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks,
+ "milkshake glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/shake,
+ "cocktail glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail,
+ "shot glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/shot,
+ "pint glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/pint,
+ "mug" = /obj/item/weapon/reagent_containers/food/drinks/glass2/mug,
+ "wine glass" = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine,
+ "condiment bottle" = /obj/item/weapon/reagent_containers/food/condiment
+ )
+
w_class = ITEMSIZE_NORMAL
/obj/item/weapon/rsf/examine(mob/user)
if(..(user, 0))
- user << "It currently holds [stored_matter]/30 fabrication-units."
+ to_chat(user,"It currently holds [stored_matter]/30 fabrication-units.")
/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/rcd_ammo))
if ((stored_matter + 10) > 30)
- user << "The RSF can't hold any more matter."
+ to_chat(user, "The RSF can't hold any more matter.")
return
qdel(W)
stored_matter += 10
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
- user << "The RSF now holds [stored_matter]/30 fabrication-units."
+ to_chat(user,"The RSF now holds [stored_matter]/30 fabrication-units.")
return
+/obj/item/weapon/rsf/CtrlClick(mob/living/user)
+ if(!Adjacent(user) || !istype(user))
+ to_chat(user,"You are too far away.")
+ return
+ var/glass_choice = input(user, "Please choose which type of glass you would like to produce.") as null|anything in container_types
+
+ if(glass_choice)
+ glasstype = container_types[glass_choice]
+ else
+ glasstype = /obj/item/weapon/reagent_containers/food/drinks/metaglass
+
/obj/item/weapon/rsf/attack_self(mob/user as mob)
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
if (mode == 1)
mode = 2
- user << "Changed dispensing mode to 'Drinking Glass:Pint'"
+ to_chat(user,"Changed dispensing mode to 'Container'.")
return
if (mode == 2)
mode = 3
- user << "Changed dispensing mode to 'Paper'"
+ to_chat(user,"Changed dispensing mode to 'Paper'")
return
if (mode == 3)
mode = 4
- user << "Changed dispensing mode to 'Pen'"
+ to_chat(user,"Changed dispensing mode to 'Pen'")
return
if (mode == 4)
mode = 5
- user << "Changed dispensing mode to 'Dice Pack'"
+ to_chat(user,"Changed dispensing mode to 'Dice Pack'")
return
if (mode == 5)
mode = 1
- user << "Changed dispensing mode to 'Cigarette'"
+ to_chat(user,"Changed dispensing mode to 'Cigarette'")
return
/obj/item/weapon/rsf/afterattack(atom/A, mob/user as mob, proximity)
@@ -82,7 +109,7 @@ RSF
product = new /obj/item/clothing/mask/smokable/cigarette()
used_energy = 10
if(2)
- product = new /obj/item/weapon/reagent_containers/food/drinks/glass2/pint()
+ product = new glasstype()
used_energy = 50
if(3)
product = new /obj/item/weapon/paper()
@@ -94,7 +121,7 @@ RSF
product = new /obj/item/weapon/storage/pill_bottle/dice()
used_energy = 200
- user << "Dispensing [product ? product : "product"]..."
+ to_chat(user,"Dispensing [product ? product : "product"]...")
product.loc = get_turf(A)
if(isrobot(user))
@@ -103,4 +130,4 @@ RSF
R.cell.use(used_energy)
else
stored_matter--
- user << "The RSF now holds [stored_matter]/30 fabrication-units."
+ to_chat(user,"The RSF now holds [stored_matter]/30 fabrication-units.")
diff --git a/code/game/objects/items/weapons/implants/implantreagent_vr.dm b/code/game/objects/items/weapons/implants/implantreagent_vr.dm
index 83a586d2ba..0b227d9539 100644
--- a/code/game/objects/items/weapons/implants/implantreagent_vr.dm
+++ b/code/game/objects/items/weapons/implants/implantreagent_vr.dm
@@ -82,10 +82,11 @@
var/obj/item/weapon/implant/reagent_generator/rimplant
- for(var/I in src.contents)
- if(istype(I, /obj/item/weapon/implant/reagent_generator))
- rimplant = I
- break
+ for(var/obj/item/organ/external/E in organs)
+ for(var/obj/item/weapon/implant/I in E.implants)
+ if(istype(I, /obj/item/weapon/implant/reagent_generator))
+ rimplant = I
+ break
if(rimplant)
if(container.reagents.total_volume < container.volume)
var/container_name = container.name
diff --git a/code/modules/reagents/reagent_containers/glass/bottle_vr.dm b/code/modules/food/glass/bottle_vr.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/glass/bottle_vr.dm
rename to code/modules/food/glass/bottle_vr.dm
diff --git a/code/game/machinery/kitchen/smartfridge_vr.dm b/code/modules/food/kitchen/smartfridge_vr.dm
similarity index 100%
rename from code/game/machinery/kitchen/smartfridge_vr.dm
rename to code/modules/food/kitchen/smartfridge_vr.dm
diff --git a/code/modules/mob/living/carbon/human/life_vr.dm b/code/modules/mob/living/carbon/human/life_vr.dm
index 1dc37ff8cc..dc340058a0 100644
--- a/code/modules/mob/living/carbon/human/life_vr.dm
+++ b/code/modules/mob/living/carbon/human/life_vr.dm
@@ -28,15 +28,16 @@
holder.icon_state = "hudblank"
- for(var/obj/item/weapon/implant/I in src)
- if(I.implanted)
- if(istype(I,/obj/item/weapon/implant/backup))
- if(!mind)
- holder.icon_state = "hud_backup_nomind"
- else if(!(mind.name in SStranscore.body_scans))
- holder.icon_state = "hud_backup_nobody"
- else
- holder.icon_state = "hud_backup_norm"
+ for(var/obj/item/organ/external/E in organs)
+ for(var/obj/item/weapon/implant/I in E.implants)
+ if(I.implanted)
+ if(istype(I,/obj/item/weapon/implant/backup))
+ if(!mind)
+ holder.icon_state = "hud_backup_nomind"
+ else if(!(mind.name in SStranscore.body_scans))
+ holder.icon_state = "hud_backup_nobody"
+ else
+ holder.icon_state = "hud_backup_norm"
apply_hud(BACKUP_HUD, holder)
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
index 32e31c9a9a..73ba23aebd 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
@@ -224,7 +224,7 @@
dat += "Cargo compartment slot: Fuel.
"
dat += "([list2text(contents - (deliveryslot_1 + deliveryslot_2 + deliveryslot_3),", ")])
"
- if(analyzer && synced)
+ if(analyzer && !synced)
dat += "Sync Files
"
//Cleaning and there are still un-preserved items
@@ -666,4 +666,4 @@
desc = "A mounted cargo bay unit for tagged deliveries."
icon_state = "decompiler"
max_item_count = 20
- delivery = TRUE
\ No newline at end of file
+ delivery = TRUE
diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm
index 332fabb19f..97829f7429 100644
--- a/code/modules/mob/living/silicon/robot/robot_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_vr.dm
@@ -133,13 +133,7 @@
only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive.
/datum/riding/dogborg/handle_vehicle_layer()
- if(ridden.has_buckled_mobs())
- if(ridden.dir != NORTH)
- ridden.layer = ABOVE_MOB_LAYER
- else
- ridden.layer = initial(ridden.layer)
- else
- ridden.layer = initial(ridden.layer)
+ ridden.layer = initial(ridden.layer)
/datum/riding/dogborg/ride_check(mob/living/M)
var/mob/living/L = ridden
@@ -158,10 +152,10 @@
var/scale = L.size_multiplier
var/list/values = list(
- "[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER),
- "[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER),
- "[EAST]" = list(-5*scale, 8*scale, ABOVE_MOB_LAYER),
- "[WEST]" = list(5*scale, 8*scale, ABOVE_MOB_LAYER))
+ "[NORTH]" = list(0, 10*scale, ABOVE_MOB_LAYER),
+ "[SOUTH]" = list(0, 10*scale, BELOW_MOB_LAYER),
+ "[EAST]" = list(-5*scale, 10*scale, ABOVE_MOB_LAYER),
+ "[WEST]" = list(5*scale, 10*scale, ABOVE_MOB_LAYER))
return values
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 dea5206448..9eeb6b8b97 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -32,6 +32,9 @@
var/vore_fullness = 0 // How "full" the belly is (controls icons)
var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
+ var/mount_offset_x = 5 // Horizontal riding offset.
+ var/mount_offset_y = 8 // Vertical riding offset
+
// Release belly contents before being gc'd!
/mob/living/simple_animal/Destroy()
release_vore_contents()
@@ -241,3 +244,89 @@
if(a_intent == I_GRAB && isliving(A) && !has_hands)
animal_nom(A)
+
+// Riding
+/datum/riding/simple_animal
+ keytype = /obj/item/weapon/material/twohanded/fluff/riding_crop // Crack!
+ nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
+ key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called.
+ only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive.
+
+/datum/riding/simple_animal/handle_vehicle_layer()
+ ridden.layer = initial(ridden.layer)
+
+/datum/riding/simple_animal/ride_check(mob/living/M)
+ var/mob/living/L = ridden
+ if(L.stat)
+ force_dismount(M)
+ return FALSE
+ return TRUE
+
+/datum/riding/simple_animal/force_dismount(mob/M)
+ . =..()
+ ridden.visible_message("[M] stops riding [ridden]!")
+
+/datum/riding/simple_animal/get_offsets(pass_index) // list(dir = x, y, layer)
+ var/mob/living/simple_animal/L = ridden
+ var/scale = L.size_multiplier
+
+ var/list/values = list(
+ "[NORTH]" = list(0, L.mount_offset_y*scale, ABOVE_MOB_LAYER),
+ "[SOUTH]" = list(0, L.mount_offset_y*scale, BELOW_MOB_LAYER),
+ "[EAST]" = list(-L.mount_offset_x*scale, L.mount_offset_y*scale, ABOVE_MOB_LAYER),
+ "[WEST]" = list(L.mount_offset_x*scale, L.mount_offset_y*scale, ABOVE_MOB_LAYER))
+
+ return values
+
+/mob/living/simple_animal/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE)
+ if(forced)
+ return ..() // Skip our checks
+ if(!riding_datum)
+ return FALSE
+ if(lying)
+ return FALSE
+ if(!ishuman(M))
+ return FALSE
+ if(M in buckled_mobs)
+ return FALSE
+ if(M.size_multiplier > size_multiplier * 1.2)
+ to_chat(src,"This isn't a pony show! You need to be bigger for them to ride.")
+ return FALSE
+
+ var/mob/living/carbon/human/H = M
+
+ if(H.loc != src.loc)
+ if(H.Adjacent(src))
+ H.forceMove(get_turf(src))
+
+ . = ..()
+ if(.)
+ buckled_mobs[H] = "riding"
+
+/mob/living/simple_animal/attack_hand(mob/user as mob)
+ if(riding_datum && LAZYLEN(buckled_mobs))
+ //We're getting off!
+ if(user in buckled_mobs)
+ riding_datum.force_dismount(user)
+ //We're kicking everyone off!
+ if(user == src)
+ for(var/rider in buckled_mobs)
+ riding_datum.force_dismount(rider)
+ else
+ . = ..()
+
+/mob/living/simple_animal/proc/animal_mount(var/mob/living/M in living_mobs(1))
+ set name = "Animal Mount/Dismount"
+ set category = "Abilities"
+ set desc = "Let people ride on you."
+
+ if(LAZYLEN(buckled_mobs))
+ for(var/rider in buckled_mobs)
+ riding_datum.force_dismount(rider)
+ return
+ if (stat != CONSCIOUS)
+ return
+ if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled)
+ return
+ if(buckle_mob(M))
+ visible_message("[M] starts riding [name]!")
diff --git a/code/modules/mob/living/simple_animal/vore/corrupt_hounds.dm b/code/modules/mob/living/simple_animal/vore/corrupt_hounds.dm
index b8801ea2c9..eb62a21086 100644
--- a/code/modules/mob/living/simple_animal/vore/corrupt_hounds.dm
+++ b/code/modules/mob/living/simple_animal/vore/corrupt_hounds.dm
@@ -49,6 +49,11 @@
minbodytemp = 150
maxbodytemp = 900
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+
var/image/eye_layer = null
@@ -114,3 +119,12 @@
remove_eyes()
if(stat == CONSCIOUS && !resting)
add_eyes()
+
+/mob/living/simple_animal/hostile/corrupthound/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/hostile/corrupthound/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/deathclaw.dm b/code/modules/mob/living/simple_animal/vore/deathclaw.dm
index 2f99179bd9..91fe552ccc 100644
--- a/code/modules/mob/living/simple_animal/vore/deathclaw.dm
+++ b/code/modules/mob/living/simple_animal/vore/deathclaw.dm
@@ -22,6 +22,13 @@
pixel_x = -16
pixel_y = 0
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_x = 5
+ mount_offset_y = 30
+
// Activate Noms!
/mob/living/simple_animal/hostile/deathclaw
vore_active = 1
@@ -30,3 +37,12 @@
vore_min_size = RESIZE_SMALL
vore_pounce_chance = 0 // Beat them into crit before eating.
vore_icons = SA_ICON_LIVING
+
+/mob/living/simple_animal/hostile/deathclaw/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/hostile/deathclaw/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/dragon.dm b/code/modules/mob/living/simple_animal/vore/dragon.dm
index 7f64ee0da2..2d839fb149 100644
--- a/code/modules/mob/living/simple_animal/vore/dragon.dm
+++ b/code/modules/mob/living/simple_animal/vore/dragon.dm
@@ -30,6 +30,13 @@
pixel_x = -16
pixel_y = 0
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_x = -11
+ mount_offset_y = 16
+
/mob/living/simple_animal/hostile/dragon/Process_Spacemove(var/check_drift = 0)
return 1 //No drifting in space for space dragons!
@@ -49,3 +56,12 @@
maxHealth = 200
health = 200
faction = "virgo3b"
+
+/mob/living/simple_animal/hostile/dragon/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/hostile/dragon/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/hippo.dm b/code/modules/mob/living/simple_animal/vore/hippo.dm
index bfd28aafb5..ae9d8775e1 100644
--- a/code/modules/mob/living/simple_animal/vore/hippo.dm
+++ b/code/modules/mob/living/simple_animal/vore/hippo.dm
@@ -49,13 +49,19 @@
meat_amount = 10 //Infinite meat!
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_y = 20
+
// 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_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_HOLD
vore_digest_chance = 10
@@ -64,3 +70,12 @@
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
+
+/mob/living/simple_animal/retaliate/hippo/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/retaliate/hippo/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/horse.dm b/code/modules/mob/living/simple_animal/vore/horse.dm
index 59bbfa4550..80cd80dd0e 100644
--- a/code/modules/mob/living/simple_animal/vore/horse.dm
+++ b/code/modules/mob/living/simple_animal/vore/horse.dm
@@ -31,7 +31,22 @@
meat_amount = 4
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_x = 0
+
// Activate Noms!
/mob/living/simple_animal/horse
vore_active = 1
vore_icons = SA_ICON_LIVING
+
+/mob/living/simple_animal/horse/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/horse/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm
index 5220f861c5..c7d171ed84 100644
--- a/code/modules/mob/living/simple_animal/vore/otie.dm
+++ b/code/modules/mob/living/simple_animal/vore/otie.dm
@@ -46,6 +46,12 @@
pixel_x = -16
pixel_y = 0
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_y = 10
+
var/glowyeyes = FALSE
var/image/eye_layer = null
var/eyetype
@@ -382,4 +388,13 @@
/mob/living/simple_animal/otie/death(gibbed, deathmessage = "dies!")
.=..()
resting = 0
- icon_state = icon_dead
\ No newline at end of file
+ icon_state = icon_dead
+
+/mob/living/simple_animal/otie/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/otie/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/panther.dm b/code/modules/mob/living/simple_animal/vore/panther.dm
index 454ef4d927..45a18cf300 100644
--- a/code/modules/mob/living/simple_animal/vore/panther.dm
+++ b/code/modules/mob/living/simple_animal/vore/panther.dm
@@ -27,9 +27,24 @@
pixel_x = -16
pixel_y = 0
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_y = 12
+
// Activate Noms!
/mob/living/simple_animal/hostile/panther
vore_active = 1
vore_capacity = 2
vore_pounce_chance = 10
vore_icons = SA_ICON_LIVING | SA_ICON_REST
+
+/mob/living/simple_animal/hostile/panther/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/hostile/panther/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/rat.dm b/code/modules/mob/living/simple_animal/vore/rat.dm
index 40b1800aa0..1f6be2e3f4 100644
--- a/code/modules/mob/living/simple_animal/vore/rat.dm
+++ b/code/modules/mob/living/simple_animal/vore/rat.dm
@@ -36,6 +36,12 @@
pixel_x = -16
pixel_y = 0
+ max_buckled_mobs = 1 //Yeehaw
+ can_buckle = TRUE
+ buckle_movable = TRUE
+ buckle_lying = FALSE
+ mount_offset_y = 10
+
vore_active = TRUE
vore_capacity = 1
vore_pounce_chance = 45
@@ -159,3 +165,12 @@
/mob/living/simple_animal/hostile/rat/death()
playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 50, 1)
..()
+
+/mob/living/simple_animal/hostile/rat/Login()
+ . = ..()
+ if(!riding_datum)
+ riding_datum = new /datum/riding/simple_animal(src)
+ verbs |= /mob/living/simple_animal/proc/animal_mount
+
+/mob/living/simple_animal/hostile/rat/MouseDrop_T(mob/living/M, mob/living/user)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 3835bbb144..3a0499b7b2 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -750,9 +750,14 @@
icon_state = "hair_belenkotied"
flags = HAIR_TIEABLE
- belenkotied
- name = "Supernova"
- icon_state = "hair_supernova"
+ glossy
+ name = "Glossy"
+ icon_state = "hair_glossy"
+ flags = HAIR_TIEABLE
+
+ sharpponytail
+ name = "Sharp Ponytail"
+ icon_state = "hair_sharpponytail"
flags = HAIR_TIEABLE
/*
diff --git a/code/modules/projectiles/ammunition/magazines_vr.dm b/code/modules/projectiles/ammunition/magazines_vr.dm
new file mode 100644
index 0000000000..56221e2dde
--- /dev/null
+++ b/code/modules/projectiles/ammunition/magazines_vr.dm
@@ -0,0 +1,3 @@
+/obj/item/ammo_magazine/m9mm/large/preban/hp // Hollow Point Version
+ name = "magazine (9mm hollow-point)"
+ ammo_type = /obj/item/ammo_casing/a9mm/hp
\ No newline at end of file
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index 406dbcae88..e87c91409d 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -92,6 +92,11 @@
projectile_type = /obj/item/projectile/bullet/pistol/ap
matter = list(DEFAULT_WALL_MATERIAL = 80)
+/obj/item/ammo_casing/a9mm/hp
+ desc = "A 9mm hollow-point bullet casing."
+ projectile_type = /obj/item/projectile/bullet/pistol/hp
+
+
/obj/item/ammo_casing/a9mm/flash
desc = "A 9mm flash shell casing."
icon_state = "r-casing"
@@ -149,7 +154,7 @@
/obj/item/ammo_casing/a45/hp
desc = "A .45 hollow-point bullet casing."
- projectile_type = /obj/item/projectile/bullet/pistol/medium/hollow
+ projectile_type = /obj/item/projectile/bullet/pistol/medium/hp
/*
* 10mm
@@ -265,7 +270,7 @@
/obj/item/ammo_casing/a762/hp
desc = "A 7.62mm hollow-point bullet casing."
- projectile_type = /obj/item/projectile/bullet/rifle/a762/hollow
+ projectile_type = /obj/item/projectile/bullet/rifle/a762/hp
/obj/item/ammo_casing/a762/hunter
desc = "A 7.62mm hunting bullet casing."
@@ -311,7 +316,7 @@
/obj/item/ammo_casing/a545/hp
desc = "A 5.45mm hollow-point bullet casing."
- projectile_type = /obj/item/projectile/bullet/rifle/a545/hollow
+ projectile_type = /obj/item/projectile/bullet/rifle/a545/hp
/obj/item/ammo_casing/a545/hunter
desc = "A 5.45mm hunting bullet casing."
diff --git a/code/modules/projectiles/guns/projectile/pistol_vr.dm b/code/modules/projectiles/guns/projectile/pistol_vr.dm
index e7e369cebf..7a76b12552 100644
--- a/code/modules/projectiles/guns/projectile/pistol_vr.dm
+++ b/code/modules/projectiles/guns/projectile/pistol_vr.dm
@@ -6,4 +6,7 @@
/obj/item/weapon/gun/projectile/p92x/large/preban
icon_state = "p92x-brown"
- magazine_type = /obj/item/ammo_magazine/m9mm/large/preban // Spawns with big magazines that are legal.
\ No newline at end of file
+ magazine_type = /obj/item/ammo_magazine/m9mm/large/preban // Spawns with big magazines that are legal.
+
+/obj/item/weapon/gun/projectile/p92x/large/preban/hp
+ magazine_type = /obj/item/ammo_magazine/m9mm/large/preban/hp // Spawns with legal hollow-point mag
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index e4b7241bb0..ed16105939 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -64,38 +64,43 @@
/* short-casing projectiles, like the kind used in pistols or SMGs */
-/obj/item/projectile/bullet/pistol
- fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg'
+/obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity.
+ fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' // ToDo: Different shot sounds for different strength pistols. -Ace
damage = 20
/obj/item/projectile/bullet/pistol/ap
damage = 15
armor_penetration = 30
-/obj/item/projectile/bullet/pistol/medium
+/obj/item/projectile/bullet/pistol/hp
+ damage = 25
+ armor_penetration = -50
+
+/obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power.
+ // fire_sound = 'sound/weapons/gunshot3.ogg' // ToDo: Different shot sounds for different strength pistols.
damage = 25
/obj/item/projectile/bullet/pistol/medium/ap
damage = 20
armor_penetration = 15
-/obj/item/projectile/bullet/pistol/medium/hollow
+/obj/item/projectile/bullet/pistol/medium/hp
damage = 30
armor_penetration = -50
-/obj/item/projectile/bullet/pistol/strong //revolvers and matebas
- fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
+/obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power.
+ fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' // ToDo: Replace with something less ugly. I recommend weapons/gunshot3.ogg
damage = 60
-/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas
- fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
+/obj/item/projectile/bullet/pistol/rubber/strong // "Rubber" bullets for high power pistols.
+ fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' // ToDo: Same as above.
damage = 10
agony = 60
embed_chance = 0
sharp = 0
check_armour = "melee"
-/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
+/obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols.
name = "rubber bullet"
damage = 5
agony = 40
@@ -167,7 +172,7 @@
damage = 30
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
-/obj/item/projectile/bullet/rifle/a762/hollow
+/obj/item/projectile/bullet/rifle/a762/hp
damage = 40
armor_penetration = -50
penetrating = 0
@@ -184,7 +189,7 @@
damage = 20
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
-/obj/item/projectile/bullet/rifle/a545/hollow
+/obj/item/projectile/bullet/rifle/a545/hp
damage = 35
armor_penetration = -50
penetrating = 0
diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
index 6d0f63e95c..104463981d 100644
--- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
@@ -6,10 +6,7 @@
/datum/riding/taur/handle_vehicle_layer()
if(ridden.has_buckled_mobs())
- if(ridden.dir != NORTH)
- ridden.layer = ABOVE_MOB_LAYER
- else
- ridden.layer = initial(ridden.layer)
+ ridden.layer = initial(ridden.layer)
else
var/mob/living/L = ridden
if(!(istype(L) && (L.status_flags & HIDING)))
diff --git a/code/modules/vore/eating/contaminate_vr.dm b/code/modules/vore/eating/contaminate_vr.dm
index 7d09d1e245..36ecb8f470 100644
--- a/code/modules/vore/eating/contaminate_vr.dm
+++ b/code/modules/vore/eating/contaminate_vr.dm
@@ -90,6 +90,9 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi')
digest_act(item_storage) //Digesting these anyway
return TRUE
+/obj/item/device/pda/gurgle_contaminate(var/atom/movable/item_storage = null)
+ return FALSE
+
/obj/item/weapon/reagent_containers/food/gurgle_contaminate(var/atom/movable/item_storage = null)
digest_act(item_storage)
return TRUE
diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
index 4658c2b0f5..358ce19d48 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
@@ -780,6 +780,9 @@
/obj/item/clothing/head/fluff/pompom/digest_act(var/atom/movable/item_storage = null)
return FALSE
+/obj/item/clothing/head/fluff/pompom/gurgle_contaminate(var/atom/movable/item_storage = null)
+ return FALSE
+
/obj/item/clothing/head/fluff/pompom/attack_self(mob/user)
//if(!isturf(user.loc)) -- doesn't seem to cause problems to allow this and it's silly not to
// to_chat(user, "You cannot turn the light on while in this [user.loc]")
diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt
index 76f2a9b196..3db20fb9c1 100644
--- a/config/alienwhitelist.txt
+++ b/config/alienwhitelist.txt
@@ -1,3 +1,5 @@
+some~user - Species
+
admiraldragon - Vox
aether_elemental - Daemon
arokha - Protean
@@ -16,6 +18,7 @@ ktccd - Diona
mewchild - Diona
mewchild - Vox
natje - Xenochimera
+oreganovulgaris - Xenochimera
paradoxspace - Xenochimera
rapidvalj - Vox
rikaru19xjenkins - Xenomorph Hybrid
@@ -29,8 +32,8 @@ silverTalismen - Diona
silverTalismen - Vox
silvertalismen - Xenochimera
singo - Gutter
-some~user - Species
tastypred - Xenochimera
+varonis - Xenochimera
verkister - Xenochimera
wickedtemp - Shadekin Empathy
wtfismyname - Xenomorph Hybrid
diff --git a/config/names/first_female.txt b/config/names/first_female.txt
index b500f027ef..3f8c53a7a9 100644
--- a/config/names/first_female.txt
+++ b/config/names/first_female.txt
@@ -306,7 +306,6 @@ Yolanda
Ysabel
Zelda
Zune
-Emma
Isabella
Emily
Madison
@@ -314,13 +313,11 @@ Ava
Olivia
Sophia
Abigail
-Elizabeth
Chloe
Samantha
Addison
Natalie
Mia
-Alexis
Alyssa
Hannah
Ashley
@@ -330,7 +327,6 @@ Grace
Taylor
Brianna
Lily
-Hailey
Anna
Victoria
Kayla
@@ -345,19 +341,13 @@ Sofia
Makayla
Avery
Riley
-Julia
Leah
-Aubrey
-Jasmine
Audrey
Katherine
Morgan
Brooklyn
Destiny
-Sydney
-Alexa
Kylie
-Brooke
Kaitlyn
Evelyn
Layla
@@ -379,7 +369,6 @@ Trinity
Andrea
Maya
Valeria
-Sophie
Rachel
Vanessa
Aaliyah
@@ -406,7 +395,6 @@ Zoey
Gracie
Megan
Haley
-Mya
Michelle
Molly
Stephanie
@@ -427,7 +415,6 @@ Rebecca
Lydia
Daniela
Bella
-Keira
Adriana
Lilly
Hayden
@@ -464,7 +451,6 @@ London
Juliana
Shelby
Cheyenne
-Angel
Daisy
Makenzie
Miranda
@@ -478,7 +464,6 @@ Mikayla
Summer
Piper
Adrianna
-Jillian
Sierra
Jayden
Sienna
@@ -493,7 +478,6 @@ Sabrina
Stella
Aniyah
Annabelle
-Alexandria
Kathryn
Skylar
Aliyah
@@ -501,7 +485,6 @@ Delilah
Julianna
Kelsey
Khloe
-Carly
Amaya
Mariana
Christina
@@ -516,7 +499,6 @@ Josephine
Delaney
Scarlett
Elena
-Cadence
Alexia
Maggie
Laura
@@ -543,7 +525,6 @@ Caitlin
Kendra
Karina
Kyra
-Kayleigh
Addyson
Kiara
Jazmine
@@ -554,11 +535,9 @@ Lola
Kyla
Kelly
Fatima
-Tiffany
Kira
Crystal
Mallory
-Esmeralda
Alejandra
Eleanor
Angelica
@@ -607,14 +586,12 @@ Lexi
Camille
Savanna
Dulce
-Daniella
Lucia
Emely
Joselyn
Kiley
Kailey
Miriam
-Cynthia
Rihanna
Georgia
Rylie
@@ -652,7 +629,6 @@ Rose
Malia
Shayla
Fiona
-Phoebe
Nayeli
Paola
Kaelyn
@@ -675,8 +651,6 @@ Hanna
Tatum
Marlee
Nataly
-Helen
-Janelle
Lizbeth
Serena
Anya
@@ -686,13 +660,11 @@ Jazlyn
Nancy
Lindsay
Desiree
-Hayley
Itzel
Imani
Madelynn
Asia
Kadence
-Madyson
Talia
Jane
Kayden
@@ -704,7 +676,6 @@ Jadyn
Celeste
Jimena
Luna
-Yasmin
Emilia
Annika
Estrella
@@ -718,7 +689,6 @@ Dayana
Lilah
Lilliana
Natasha
-Hadley
Harley
Priscilla
Claudia
@@ -753,7 +723,6 @@ Meredith
Kailyn
Lesly
Johanna
-Diamond
Evangeline
Juliet
Kathleen
@@ -786,22 +755,660 @@ Perla
Amiyah
Alyson
Rachael
-Shannon
Aileen
Miracle
Lillie
Danika
-Heather
Kassidy
Taryn
-Tori
Francesca
Kristen
Amya
-Elle
Kristina
Cheyanne
Haylie
Patricia
-Anne
-Samara
\ No newline at end of file
+Samara
+Balina
+Skiftere
+Albana
+Fatushe
+Vilna
+Hamia
+Kalila
+Noura
+Shadia
+Selima
+Herri
+Zwina
+Tanit
+Satna
+Batti
+Loula
+Nuja
+Kassu
+Aketa
+Pherenike
+Cyrene
+Megare
+Hekaline
+Axiothea
+Atheer
+Hamda
+Hakeema
+Nadeera
+Farha
+Nasreen
+Arwa
+Pilar
+Gezana
+Dukinea
+Reyna
+Gala
+Cira
+Violeta
+Arpi
+Noushig
+Zabel
+Nane
+Arev
+Asiah
+Ishtar
+Zaminy
+Durna
+Liboko
+Mathe
+Ratu
+Nana
+Ntsebo
+Uraburu
+Ino
+Itzalle
+Graziana
+Ixone
+Celien
+Jente
+Marianne
+Floriane
+Stefanie
+Eloise
+Anke
+Dristi
+Chitra
+Geeta
+Shila
+Suravi
+Rani
+Ekta
+Fullara
+Anasuya
+Manali
+Annapurna
+Vanita
+Belma
+Elmedina
+Zineta
+Habiba
+Yi
+Eka
+Thi
+New
+Aye
+Azah
+Hapsatou
+Aibell
+Bethan
+Carys
+Branwyn
+Alis
+Gwen
+Gwendolyn
+Caitriona
+Morag
+Muireall
+Khazan
+Yahita
+Yisa
+Sovbika
+Zheng
+Liuxian
+Chao
+Ping
+Yan
+Hai
+Ling
+Min
+Ru
+Bao
+Sanja
+Gordana
+Dorotea
+Ruzena
+Tatjana
+Vilma
+Dagmar
+Blanka
+Yvonne
+Hertha
+Lise
+Liv
+Randi
+Ester
+Ziba
+Taban
+Shireen
+Yasaman
+Karlien
+Saar
+Liene
+Khat
+Maat
+Tauret
+Sitra
+Anta
+Niut
+Ankhi
+Bennu
+Anku
+Sagira
+Kakra
+Safa
+Masika
+Salma
+Aya
+Nesma
+Myrrh
+Wynfride
+Millicent
+Sybell
+Inna
+Rebeka
+Esta
+Endla
+Nanni
+Awet
+Sisay
+Lakech
+Jaana
+Kirsi
+Roosa
+Saimi
+Hilda
+Berta
+Rauna
+Reeta
+Kanerva
+Germaine
+Sabine
+Laurette
+Yvette
+Mara
+Elsbeth
+Maike
+Agatha
+Nadja
+Gerda
+Thalia
+Dora
+Corinna
+Lambrini
+Vassia
+Panagoita
+Leena
+Dayita
+Purva
+Hardi
+Pani
+Vedi
+Lasya
+Charvi
+Yanina
+Eliora
+Shir
+Ayelet
+Fanya
+Liza
+Gaya
+Zimra
+Nehal
+Ananya
+Jyoti
+Neha
+Salani
+Ruhi
+Karnavati
+Jaya
+Padmini
+Anu
+Sa
+Sua
+Neng
+True
+Fridlin
+Silfa
+Iren
+Iva
+Tamara
+Solny
+Snaiborg
+Dagny
+Holmfridur
+Hellveig
+Thula
+Hjalta
+Alfdis
+Freygerdur
+Aldis
+Thorhalla
+Pala
+Ingis
+Grima
+Telma
+Yobanna
+Kambiri
+Adanna
+Oluchi
+Amachey
+Mgbeke
+Yuka
+Koken
+Chiho
+Akae
+Taka
+Ritsuko
+Hasumi
+Tama
+Yumako
+Haniko
+Kaori
+Setsu
+Shoken
+Sakura
+Sen
+Tane
+Yoshe
+Imari
+Cho
+Jupar
+Janna
+Albina
+Maira
+Aru
+Nazira
+Aliya
+Zubaira
+Sang
+Phan
+Preap
+Kim
+Jey
+Meang
+Moul
+Touch
+Rous
+Sok
+Priti
+Damini
+Ihita
+Amrita
+Kalyani
+Rashmi
+Kunda
+Vani
+Sarika
+Wacu
+Nduta
+Noni
+Muthoni
+Nyambura
+Mukondi
+Wandia
+Magiri
+Njoki
+Mun
+Ya
+Noe
+Kal
+Pak
+Ton
+Wi
+Fulcina
+Vibia
+Sextia
+Cania
+Modesta
+Cordia
+Lae
+Moana
+Oke
+Lilo
+Wanika
+Kalena
+Napua
+Kalama
+Alona
+Kalia
+Makani
+Kawena
+Lani
+Halina
+Asola
+Salitia
+Dianna
+Denisa
+Katre
+Gaiva
+Rima
+Apollonia
+Kornelia
+Zofia
+Vika
+Anyang
+Ambala
+Apudo
+Awuor
+Naamah
+Akoth
+Atuku
+Farhat
+Aisyah
+Jeelaan
+Rihaab
+Mayang
+Meriam
+Rona
+Uruewa
+Marama
+Ruihi
+Neni
+Manewa
+Tapu
+Shefali
+Vritika
+Namita
+Ena
+Manisha
+Akshata
+Aaruni
+Orbei
+Temulun
+Saran
+Chagur
+Ghoa
+Aysha
+Zaheda
+Nezha
+Ahlam
+Fiza
+Hafida
+Saida
+Awinita
+Tuwa
+Orenda
+Pamuya
+Tsomah
+Hola
+Washta
+Yutu
+Catori
+Tablita
+Kasa
+Muna
+Weeko
+Minku
+Seti
+Sajal
+Thaili
+Rajani
+Kopeela
+Pratik
+Erna
+Sonja
+Margrete
+Turid
+Evy
+Tordis
+Anette
+Kristin
+Elna
+Malin
+Bente
+Frida
+Magnhild
+Astrid
+Monika
+Hamna
+Yesim
+Nira
+Diba
+Salwa
+Arta
+Nakisa
+Sima
+Tumay
+Maryam
+Soraya
+Fariba
+Pouri
+Pari
+Nikou
+Soheila
+Nasim
+Hanieh
+Shamsi
+Nassim
+Maja
+Szarlota
+Kinga
+Marietta
+Donata
+Lidia
+Luiza
+Adelina
+Josefina
+Sonia
+Salome
+Dores
+Amor
+Bruna
+Jassi
+Avneet
+Livnoor
+Yasmine
+Hir
+Lakh
+Shaminder
+Mashaal
+Ruza
+Kostana
+Esma
+Masilda
+Viollca
+Lajaria
+Tsura
+Jeta
+Vai
+Melania
+Teodora
+Aurelia
+Viorica
+Dominique
+Mariutza
+Dumitra
+Uta
+Delia
+Ylenia
+Grusha
+Galka
+Valeriya
+Lera
+Mashka
+Nelya
+Feodora
+Jelena
+Sveta
+Jenya
+Lara
+Matryosha
+Matryona
+Tina
+Eseta
+Emere
+Pele
+Svetlana
+Stanislava
+Jasna
+Olga
+Anka
+Dragica
+Bogdana
+Bozena
+Petra
+Jaroslava
+Jolana
+Alena
+Nikola
+Sona
+Vanda
+Zawati
+Tisa
+Hawa
+Jaha
+Shauriana
+Rashida
+Koffi
+Satsobek
+Sigrid
+Tilda
+Oleana
+Nelly
+Kerstin
+Britt
+Maj
+Siv
+Siri
+Agneta
+Asgard
+Rishmeka
+Oppila
+Rajanitha
+Vyshu
+Rabika
+Shai
+Nirai
+Kayala
+Mae
+Yodman
+Kwanjai
+Praitun
+Choi
+Phajee
+Sumana
+Adak
+Sevil
+Gunes
+Isil
+Izel
+Latife
+Kieu
+Minh
+Le
+Cat
+Thu
+Tien
+Jofrid
+Vigdis
+Signy
+Arnora
+Fridgerd
+Skuld
+Brynhild
+Bolla
+Gyrd
+Fastvi
+Disai
+Zena
+Katha
+Nith
+Navpreet
+Izula
+Sihle
+Ethwasa
+Xolani
+Thando
+Neith
+Zamani
+Zinhle
+Msizi
+Amehlo
+Fatiha
+Aicha
+Fatma
+Khiera
+Dalal
+Gamalat
+Hana
+Rania
+Milagrosa
+Amahle
+Lesedi
+Reem
+Aria
+Noemi
+Concepcion
+Antonella
+Aadya
+Diya
+Jing
+Ying
+Xiaoyan
+Xinyi
+Tingting
+Tala
+Rimas
+Adi
+Noam
+Tamar
+Yael
+Zara
+Seo
+Shu
+Althea
+Kabita
+Nor
+Zeynep
+Aura
+Chastity
+Rebel
+Vixen
+Zero
+Nix
+Wren
+India
+Pearl
+Natuna
+Dawn
+Aditya
+Mio
+Discovery
+Cas
+Zee
+Rewi
+Lusia
+Olympia
+Freya
+Chani
+Ash
+Val
+Okra
+Verda
+Mania
+Peace
+Fortuna
+Hathor
+Lucky
+Wish
+Africa
+Proxima
+Ceti
+Sabik
\ No newline at end of file
diff --git a/config/names/first_male.txt b/config/names/first_male.txt
index f2b03e1686..84270df02e 100644
--- a/config/names/first_male.txt
+++ b/config/names/first_male.txt
@@ -223,26 +223,21 @@ Woodrow
Zack
Zane
Zeke
-Jacob
-Michael
Ethan
Joshua
Daniel
Alexander
Anthony
-William
Christopher
Matthew
Jayden
Andrew
Joseph
David
-Noah
Aiden
James
Ryan
Logan
-John
Nathan
Elijah
Christian
@@ -265,15 +260,12 @@ Jack
Kevin
Jose
Isaiah
-Luke
Landon
Justin
-Lucas
Zachary
Jordan
Robert
Aaron
-Brayden
Thomas
Cameron
Hunter
@@ -285,9 +277,7 @@ Aidan
Jason
Julian
Wyatt
-Charles
Luis
-Carter
Juan
Chase
Diego
@@ -299,7 +289,6 @@ Carlos
Sebastian
Liam
Hayden
-Nathaniel
Henry
Jesus
Ian
@@ -307,18 +296,14 @@ Tristan
Bryan
Sean
Cole
-Alex
Eric
Brian
Jaden
Carson
-Blake
Ayden
Cooper
-Dominic
Brady
Caden
-Josiah
Kyle
Colton
Kaden
@@ -329,16 +314,11 @@ Parker
Steven
Alejandro
Riley
-Richard
-Timothy
-Devin
Jesse
Victor
-Jake
Joel
Colin
Kaleb
-Bryce
Levi
Oliver
Oscar
@@ -348,16 +328,12 @@ Cody
Micah
Preston
Marcus
-Max
-Patrick
Seth
Jeremy
Peyton
Nolan
Ivan
-Damian
Maxwell
-Alan
Kenneth
Jonah
Jorge
@@ -365,10 +341,8 @@ Mark
Giovanni
Eduardo
Grant
-Collin
Gage
Omar
-Emmanuel
Trevor
Edward
Ricardo
@@ -384,7 +358,6 @@ Andres
Derek
Garrett
Tanner
-Malachi
Conner
Fernando
Cesar
@@ -396,7 +369,6 @@ Leonardo
Santiago
Francisco
Cayden
-Shane
Edwin
Hudson
Travis
@@ -415,21 +387,18 @@ Damien
Kaiden
Spencer
Stephen
-Edgar
Wesley
Shawn
Trenton
Jared
Jeffrey
Landen
-Johnathan
Bradley
Braxton
Ryder
Camden
Roman
Asher
-Brendan
Maddox
Sergio
Israel
@@ -437,7 +406,6 @@ Andy
Lincoln
Erik
Donovan
-Raymond
Avery
Rylan
Dalton
@@ -447,7 +415,6 @@ Martin
Keegan
Marco
Jude
-Sawyer
Dakota
Leo
Calvin
@@ -457,7 +424,6 @@ Troy
Zion
Clayton
Roberto
-Zane
Gregory
Tucker
Rafael
@@ -468,7 +434,6 @@ Griffin
Devon
Drew
Lukas
-Johnny
Ty
Pedro
Tyson
@@ -478,12 +443,10 @@ Braylon
Cash
Aden
Chance
-Taylor
Marcos
Maximus
Ruben
Emanuel
-Simon
Corbin
Brennan
Dillon
@@ -499,8 +462,6 @@ Colby
Jonas
Joaquin
Payton
-Brock
-Frank
Enrique
Quinn
Emilio
@@ -516,7 +477,6 @@ Gerardo
Dante
Ezra
Armando
-Allen
Theodore
Gael
Amir
@@ -552,7 +512,6 @@ Anderson
Rodrigo
Pablo
Saul
-Danny
Donald
Elliot
Brayan
@@ -580,12 +539,9 @@ Felix
Jimmy
Cohen
Tony
-Holden
Reid
-Abel
Bennett
Zackary
-Arthur
Nehemiah
Ricky
Esteban
@@ -611,11 +567,9 @@ Darren
Elliott
Uriel
Alfredo
-Hugo
Alec
Jamari
Marshall
-Walter
Judah
Jay
Lance
@@ -629,13 +583,11 @@ Kobe
Bryant
Maurice
Russell
-Leland
Colten
Reed
Davis
Joe
Ernesto
-Desmond
Kade
Reece
Morgan
@@ -648,15 +600,12 @@ Paxton
Jacoby
Douglas
Kristopher
-Gary
Lawrence
Izaiah
Solomon
-Nikolas
Mekhi
Justice
Tate
-Jaydon
Salvador
Shaun
Alvin
@@ -664,7 +613,6 @@ Eddie
Kane
Davion
Zachariah
-Damien
Titus
Kellen
Camron
@@ -673,9 +621,7 @@ Javon
Nasir
Milo
Johan
-Byron
Jasper
-Jonathon
Chad
Marc
Kelvin
@@ -685,7 +631,6 @@ Cory
Deandre
River
Reese
-Roger
Quinton
Talon
Romeo
@@ -698,7 +643,6 @@ Damon
Jadon
Emerson
Micheal
-Bruce
Terry
Kolton
Melvin
@@ -712,7 +656,6 @@ Leonel
Karson
Zayden
Keagan
-Carl
Khalil
Cristopher
Nelson
@@ -722,4 +665,712 @@ Isaias
Roy
Triston
Walker
-Kale
\ No newline at end of file
+Kale
+Tafil
+Ismet
+Bardhal
+Valm
+Ermir
+Milosh
+Lunik
+Rahul
+Sabir
+Majed
+Bakri
+Feroz
+Taysir
+Hamal
+Mawel
+Amadsu
+Mastina
+Deren
+Ides
+Masar
+Belkin
+Kriton
+Aktis
+Lemnus
+Agastrophos
+Charax
+Cylon
+Theomestor
+Telephus
+Aatif
+Abdul
+Ridwaan
+Isaam
+Azmi
+Kaleem
+Akram
+Jafar
+Humaid
+Umar
+Masood
+Angelito
+Bautista
+Humberto
+Enzo
+Rey
+Taniel
+Matsag
+Movses
+Antog
+Moushegh
+Ismail
+Arseen
+Balishar
+Cavad
+Akif
+Orxun
+Thuso
+Malefane
+Makolo
+Refilwe
+Likotsi
+Mohau
+Amose
+Xurio
+Zipselo
+Patrizio
+Luze
+Benoit
+Emiel
+Bastien
+Anas
+Kylian
+Florent
+Rik
+Arjun
+Indranil
+Balinder
+Bimal
+Guru
+Hari
+Lalit
+Sudeep
+Sonu
+Subhash
+Anil
+Dipen
+Chandra
+Musa
+Vildan
+Hamza
+Mevludin
+Wai
+Linn
+Soe
+Kaung
+Khine
+Aung
+Phyo
+Thiha
+Entekele
+Leke
+Sakeh
+Dufach
+Rohan
+Glyn
+Elwyn
+Iver
+Berian
+Mercher
+Jesstin
+Ermid
+Dermid
+Dafydd
+Sion
+Conall
+Conn
+Alasdair
+Ruaraidh
+Rustam
+Asu
+Vakha
+Beksolta
+Nezh
+Illyas
+Tian
+Bai
+Delan
+Shun
+Gengxin
+Liang
+Jun
+Shui
+Chun
+Fang
+Zhenya
+Bo
+Dubravko
+Branko
+Davor
+Damir
+Mislav
+Lucijan
+Milovan
+Andrej
+Drahoslav
+Oluf
+Frans
+Rune
+Bernt
+Fardin
+Kalan
+Jebran
+Shapoor
+Klaas
+Siert
+Elco
+Jan
+Karst
+Aker
+Anum
+Kha
+Anhur
+Pakhrua
+Ahmes
+Hotep
+Tutamen
+Meri
+Sneferu
+Imhotep
+Nefer
+Pepi
+Hanif
+Odion
+Adel
+Aymn
+Mando
+Dodi
+Mustafa
+Adham
+Manu
+Darwishi
+Erasmus
+Cleeve
+Taaniel
+Kaljo
+Timmo
+Uno
+Nega
+Ayene
+Bekele
+Abenet
+Haile
+Mahmoud
+Aldo
+Benjam
+Sampo
+Oskari
+Mika
+Sampsa
+Risto
+Yves
+Antoine
+Theo
+Henri
+Maxime
+Mathis
+Eugene
+Jorg
+Ulrich
+Hubert
+Raimund
+Gunter
+Christoforos
+Markos
+Romanos
+Vasilios
+Valentinos
+Lambros
+Emmanouil
+Devnand
+Inesh
+Savit
+Yatnesh
+Vishay
+Manek
+Amit
+Munish
+Oris
+Jamiel
+Ahron
+Levey
+Yesochor
+Avidan
+Harrod
+Hanan
+Tabor
+Ephron
+Absolom
+Makis
+Ichabod
+Taaveti
+Sumit
+Vineet
+Rishnu
+Chand
+Madhavacharta
+Navin
+Pranav
+Tsim
+Fue
+Lung
+Pheng
+Sigbjorn
+Heidrekur
+Saimundur
+Jovin
+Ulfar
+Velaugur
+Hunn
+Edvald
+Sigurd
+Sigfinnur
+Bjarni
+Oddur
+Isar
+Vemundur
+Herluf
+Linberg
+Fenrir
+Uranus
+Skidi
+Gudgeir
+Geir
+Akuchi
+Okparo
+Chikere
+Chinou
+Jelani
+Chidy
+Natsuo
+Kyoden
+Kakuei
+Sotaro
+Masakado
+Kenji
+Konyo
+Kazuko
+Kenko
+Shogo
+Jo
+Shoji
+Kazi
+Shinji
+Akira
+Kakuzo
+Hiro
+Arman
+Nurbolat
+Alen
+Iskander
+Marat
+Lorn
+Moul
+Phann
+Pang
+Dith
+Chin
+Chim
+Aang
+Kovind
+Madhab
+Lalu
+Uttam
+Nayan
+Yasti
+Waigwa
+Theuri
+Chege
+Nyoro
+Ngure
+Kimaru
+Min
+Pak
+Changgok
+Gok
+Kim
+Nam
+Tycho
+Lycus
+Hadrius
+Cocus
+Augustus
+Virgo
+Hegio
+Leonida
+Leonid
+Nero
+Kanoa
+Loe
+Lilo
+Keon
+Makan
+Sommai
+Makaio
+Oke
+Kalei
+Alens
+Ruriks
+Falks
+Osvalds
+Godvars
+Gytis
+Naglis
+Mykolas
+Kestas
+Vaidas
+Mikas
+Artemas
+Okeyo
+Othiambo
+Onindo
+Odede
+Otiya
+Muda
+Jusoh
+Desa
+Raadi
+Raaji
+Jati
+Tuna
+Kingi
+Urutu
+Ruhi
+Taika
+Mahora
+Eteka
+Vivek
+Tarak
+Umanath
+Punit
+Dev
+Nirmal
+Kunal
+Tartu
+Bogen
+Yegu
+Bukdai
+Yul
+Ayoub
+Muslih
+Jaul
+Youssef
+Zamen
+Aqil
+Fala
+Tocho
+Wikvaya
+Wanahton
+Nantan
+Hinto
+Sugmuk
+Mikasi
+Alo
+Ouray
+Prakash
+Subodh
+Bishwa
+Mukesh
+Nikhil
+Dheer
+Yngvar
+Sivert
+Christer
+Age
+Svend
+Gudmund
+Tore
+Viggo
+Georg
+Torbjorn
+Vebjorn
+Isak
+Oystein
+Halvard
+Alf
+Helge
+Joar
+Thor
+Mats
+Husain
+Ziyaad
+Demir
+Sahand
+Sabahattin
+Hamood
+Birtan
+Ihsan
+Harun
+Balash
+Daud
+Jaffar
+Shahab
+Hossein
+Heshmat
+Arash
+Karim
+Sadeq
+Aref
+Parsa
+Abbas
+Aziz
+Morteza
+Hashem
+Feliks
+Prots
+Luboslaw
+Leslaw
+Urban
+Mieszko
+Hanusz
+Stojan
+Kasper
+Jozafat
+Wit
+Teobaldo
+Balbino
+Viriato
+Candido
+Ramiro
+Gaspar
+Godofredo
+Navjeev
+Uddam
+Kabir
+Sukhinidhan
+Biradol
+Mahanleen
+Harbeer
+Django
+Yanko
+Chal
+Lasho
+Tobar
+Durril
+Shandor
+Zale
+Bosnik
+Boiko
+Radu
+Vasile
+Marku
+Nicu
+Skender
+Grigore
+Toma
+Costache
+Catarino
+Sasha
+Aleksandr
+Filya
+Krasimir
+Kliment
+Vadim
+Rasim
+Vadik
+Iosif
+Danya
+Nikita
+Lukyan
+Petr
+Valentin
+Valya
+Ruslan
+Pili
+Malosi
+Losi
+Atini
+Vujadin
+Duro
+Miran
+Kalinik
+Jezdimir
+Gavrilo
+Lubos
+Henrich
+Silvester
+Miroslav
+Viliam
+Konrad
+Jakub
+Hodari
+Jamba
+Mosi
+Abasi
+Sefu
+Ayo
+Tamu
+Khalfani
+Ludvig
+Hakan
+Onne
+Zakarias
+Mikael
+Elton
+Sigge
+Roland
+Stefan
+Ovid
+Ravel
+Srinan
+Natheep
+Lithik
+Shikan
+Yasmith
+Sayan
+Venujayan
+Tadthon
+Chakan
+Vidura
+Trat
+Thorn
+Taat
+Vitaya
+Nattanan
+Somsak
+Pasat
+Ertek
+Haldun
+Eray
+Suat
+Erksun
+Mehmet
+Aytek
+Ergin
+Dogander
+Quang
+Quoc
+Tuan
+Viet
+Loc
+Khang
+Blann
+Skarf
+Thorvard
+Jorund
+Starolf
+Steinolf
+Haki
+Throst
+Rognvald
+Bolverk
+Vigi
+Odinkar
+Hjor
+Beinir
+Ingolf
+Ragnar
+Badahar
+Heru
+Abrik
+Darshanbir
+Baljeet
+Daldir
+Fakeer
+Puneet
+Maskeen
+Lungelo
+Phakama
+Horus
+Xeghu
+Ukuza
+Dundubala
+Thembelani
+Dumesani
+Mohamed
+Abdelkader
+Rachid
+Said
+Brahim
+Djamel
+Abdallah
+Habib
+Murad
+Fadi
+Mohammed
+Tareq
+Mamadou
+Junior
+Bandile
+Prince
+Mehdi
+Santino
+Keven
+Heitor
+Agustin
+Vicente
+Iker
+Jie
+Fenf
+Yong
+Bin
+Aarav
+Wei
+Reza
+Noam
+Itai
+Rahman
+Batkhaan
+Ichika
+So
+Minato
+Ren
+Hinata
+Haruta
+Ryo
+Somchai
+Prasert
+Maksim
+Cyrus
+Rip
+Ripley
+Colt
+Kilroy
+Zero
+Armitage
+Lucky
+Blitz
+Kroner
+Zak
+Basque
+Tau
+Kepler
+Neo
+Nova
+Cas
+Cypher
+Switch
+Thadeus
+Lock
+Morpheus
+Sifat
+Ose
+Havdid
+Bruno
+Jossen
+Tetsuo
+Talos
+Solo
+Tobor
+Huey
+Dewey
+Louie
+Ash
+Sonny
+Titan
+Bax
+Casper
+Finnegan
+Loki
+Odin
+Finley
+Flynn
+Shamus
+Ultan
+German
+Sirius
+Castor
+Pollux
\ No newline at end of file
diff --git a/config/names/last.txt b/config/names/last.txt
index 5b41e53aae..56079eee61 100644
--- a/config/names/last.txt
+++ b/config/names/last.txt
@@ -36,7 +36,6 @@ Logue
Reichard
Day
Dugmore
-Murray
Greenawalt
Jyllian
Osterwise
@@ -224,13 +223,11 @@ Unk
Otis
Quinn
Bell
-Roberts
Wood
Ullman
Bicknell
Gibson
Rohtin
-James
Wallick
Eggbert
Losey
@@ -273,7 +270,6 @@ Hook
Reighner
Welty
Jenkins
-Bennett
Swarner
Hawker
Agg
@@ -341,7 +337,6 @@ Laurenzi
Minnie
Houser
Langston
-Anderson
Barrett
Wible
Hujsak
@@ -398,7 +393,6 @@ Ratcliff
Riggle
Newton
Sanders
-Mitchell
Lauffer
Aggley
Moberly
@@ -438,13 +432,9 @@ Smith
Steele
Leach
Armstrong
-Wheeler
Easter
Greenwood
-Woodward
-Pratt
Buzzard
-Cox
Eliza
Rockwell
Zeal
@@ -468,7 +458,6 @@ Digson
Byers
Hincken
Shaner
-Todd
Whiteman
Lineman
Albright
@@ -506,68 +495,36 @@ Goebbles
McShain
McDonohugh
Power
-Smith
Jones
Williams
Brown
Taylor
Davies
Wilson
-Evans
-Thomas
-Roberts
-Johnson
Walker
Wright
-Robinson
Thompson
-Hughes
-White
-Edwards
-Hall
Patel
-Green
Martins
Lewis
-Wood
-Jackson
-Clarke
Harris
Clark
-Scott
Turner
-Hill
-Moore
Cooper
Morris
-Ward
-Watson
Morgan
-Anderson
Harrison
-King
-Campbell
-Young
-Mitchell
-Baker
-James
Kelly
Allen
-Bell
Phillips
Lee
-Stewart
-Miller
Parker
Simpson
-Bennett
-Davis
Griffiths
Shaw
Price
Cook
Richardson
-Murray
Marshall
Begum
Murphy
@@ -578,9 +535,6 @@ Bailey
Carter
Robertson
Graham
-Adams
-Richards
-Cox
Singh
Hussain
Ellis
@@ -592,22 +546,18 @@ Ali
Reid
Rathens
Rathen
-Mason
Chapman
Powell
Owen
Ahmed
-Gibson
Rogers
Webb
Holmes
Mills
Matthews
-Hunt
Palmer
Lloyd
Kaur
-Fisher
Ivanov
Smirnov
Vasilyev
@@ -617,4 +567,1061 @@ Mikhaylov
Pavlov
Semenov
Andreev
-Alekseev
\ No newline at end of file
+Alekseev
+Mali
+Troshani
+Nano
+Kupi
+Syla
+Lucca
+Hasani
+Khalef
+Benita
+Fahas
+Seghir
+Ziani
+Saadi
+Beghal
+Yamin
+Mousa
+Bilal
+Khalaf
+Zafar
+Salman
+Naderi
+Usman
+Al-Hassen
+El-Salame
+Al-Fadel
+El-Shaer
+El-Amini
+Al-Miah
+Al-Meskin
+El-Nazar
+Villar
+Caceres
+Dominguez
+Ortiz
+Vidal
+Escobar
+Schiavone
+Hagopian
+Petrosian
+Baronian
+Kostanian
+Ismailyan
+Jamshidova
+Kyrimsoy
+Maharramova
+Jurio
+Zabalain
+Ilurdoz
+Menda
+Anchoverri
+Osteriz
+Basque
+Duquesne
+Peeters
+Blindeman
+Piat
+Raes
+Delporte
+Verplancke
+Vandevelde
+Carton
+Basak
+Khuro
+Sastri
+Thakur
+Chakraborty
+Paramahamsa
+Mazumdar
+Momen
+Sanu
+Chatterjee
+Saraswat
+Ghosh
+Rakib
+Majumder
+Terzic
+Alagic
+Topalovic
+Bajramovic
+Ivanovic
+Vidovic
+Yadanar
+Nway
+Myat
+Naing
+Ebot
+Njoya
+Ewaso
+Lekeaka
+Lukombo
+Masumbuku
+Mukendi
+Dimonekene
+Kosi
+Linzenge
+Nguo
+Boko
+Manoka
+Gower
+Pumphrey
+Priddy
+Clough
+Sealy
+Bethel
+Ros
+MacLeoir
+MacCrum
+Tsarnaeva
+Khadzhiev
+Maskhadov
+Hamidov
+Musaeva
+Usamova
+Xing
+Feng
+Qui
+Zhang
+Xun
+Teng
+Huang
+Deng
+Pan
+Zhou
+Kong
+Cheng
+Mao
+Zou
+Solic
+Kopic
+Paunovic
+Papratovic
+Spiljak
+Marek
+Capek
+Prusik
+Vecerova
+Karaskova
+Jansen
+Ludvigsen
+Bentsen
+Berg
+Jepsen
+Karlsen
+Ebbesen
+Dogger
+Bakker
+Keulen
+Harloff
+Ossen
+Storteboom
+Vermeer
+Gasner
+Dam
+Boer
+Hurmann
+Geerts
+Cheverton
+Goddard
+Harpham
+Ashpole
+Hillyard
+Lochty
+Relish
+Fernsby
+Khepera
+Nebka
+Amemu
+Neferu
+Horemhebi
+Kharatanekha
+Anuketma
+Cham
+Bata
+Tannous
+Tuma
+Asghar
+Mallouf
+Bishara
+Aswan
+Kouri
+Hackeman
+Bulstrode
+Fane
+Norwood
+Goodstone
+Milner
+Parn
+Teder
+Sirel
+Magi
+Kask
+Lepmets
+Jogi
+Girma
+Abebe
+Lebna
+Anom
+Feleke
+Bereket
+Selassie
+Panaligan
+Manalastas
+Zoleta
+Decatoria
+Solonen
+Paananen
+Latvala
+Kukkonen
+Waris
+Niemi
+Kallo
+Delon
+Allard
+Renaud
+Blanc
+Gerin
+Aubert
+Geiger
+Landry
+Vannier
+Saint-Yves
+Gauthier
+Ehrenfest
+Konig
+Kindler
+Ruhl
+Voigt
+Rickenbacker
+Strasburger
+Stratos
+Rota
+Economos
+Romanos
+Hallos
+Floros
+Fotopoulos
+Constantinos
+Stamou
+Demetrios
+Stavropoulos
+Demetriou
+Panagopoulou
+Desai
+Vyas
+Chudasama
+Kotak
+Tripathi
+Bhansali
+Chitalia
+Sarabhai
+Modi
+Adani
+Silberstein
+Dresner
+Cohen
+Metz
+Bashevis
+Laski
+Yedidyah
+Ginsberg
+Levinstein
+Abraham
+Federman
+Adler
+Gottesman
+Rabinowicz
+Seth
+Vad
+Mahanta
+Chadda
+Bhaumik
+Jadhav
+Dvivedi
+Lata
+Poddar
+Talavalakar
+Satavelekar
+Mudaliyar
+Nayar
+Nan
+Tsab
+Chue
+Wong
+Thao
+Thai
+Song
+Finnsson
+Finnsdottir
+Kristvinsson
+Krisovinsdottir
+Ingvaldsson
+Ingvaldsdottir
+Abelsson
+Abelsdottir
+Sigurdsson
+Sigurdsdottir
+Holmsson
+Holmsdottir
+Chidey
+Onuchukwu
+Akachi
+Mazzi
+Onyekachi
+Ndulu
+Ngozi
+Obasi
+Jajah
+Uchechea
+Zebenjo
+Ishida
+Ito
+Matsushita
+Yoshimi
+Horikiri
+Sakai
+Kase
+Watari
+Tano
+Fuji
+Okada
+Yadama
+Yagami
+Homura
+Tanimoto
+Kugo
+Fuse
+Sugita
+Naya
+Hamakawa
+Kobayashi
+Serikov
+Fauskeev
+Yerbolatev
+Ayatova
+Ericova
+Khazretgaliev
+Baurzhanova
+Khemera
+Nhean
+Narith
+Sourkea
+Visal
+Poeu
+Kalliyan
+Akara
+Chantou
+Rachana
+Kunthea
+Rasmey
+Nuon
+Akash
+Vrsiini
+Ijay
+Navin
+Ikshu
+Asheesh
+Harihar
+Paramartha
+Mukesh
+Ngendo
+Mumbi
+Murugi
+Kioni
+Nyagura
+Njambi
+Mugo
+Kiongo
+Mburu
+Sook
+Eon
+Ri
+So-Yung
+So-Ri
+Dae-Jung
+Jin
+Joon
+Yong
+Yung
+Scaro
+Decius
+Geta
+Nero
+Natalis
+Pollienus
+Docilus
+Castus
+Nerva
+Siyavong
+Chanthraphone
+Sengtavisouk
+Thonemany
+Vatthana
+Keobunta
+Savang
+Rattanavongsa
+Khanthavong
+Lapsina
+Lodina
+Caune
+Veiss
+Ozers
+Lielmanis
+Lidaks
+Rubenis
+Tucs
+Bekeryte
+Vaiciute
+Pakeryte
+Maczinskiene
+Pretkelis
+Naidicas
+Suksta
+Kanapickas
+Straksys
+Remeza
+Kantautine
+Leipute
+Ogutu
+Ondiek
+Were
+Kowa
+Sialo
+Ochola
+Obonyo
+Akelo
+Hongo
+Julu
+Oduyu
+Orombi
+Noh
+Che
+Dhareef
+Taufan
+Petera
+Witika
+Pikari
+Enoka
+Timoti
+Piripi
+Arona
+Romana
+Natana
+Kapale
+Agarkar
+Karve
+Rasam
+Deshmane
+Sonarkar
+Lagu
+Shinde
+Javkar
+Sawant
+Ranganakar
+Hardas
+Pawgi
+Sibari
+Khatibi
+Mernissi
+Bikri
+Samie
+Zniber
+Lemsih
+Wasti
+Subba
+Karkee
+Pandeya
+Belbase
+Rawal
+Osland
+Thygesen
+Reiten
+Davidsen
+Haller
+Tofte
+Pettersen
+Island
+Handeland
+Saltvik
+Bakke
+Hotvedt
+Kampen
+Vangsness
+Fjerstad
+Underberg
+Munch
+Lodhra
+Ansari
+Banday
+Karlal
+Hameed
+Sarpara
+Bhatti
+Tareen
+Marri
+Kirmani
+Daudpota
+Ghazali
+Mangi
+Vele
+Paiyo
+Apa
+Henao
+Kasi
+Injia
+Kewa
+Tajik
+Raad
+Vakili
+Mashayekhi
+Hosseini
+Panahi
+Rashidi
+Fallah
+Mostofi
+Kasebi
+Afshani
+Boromand
+Qaderi
+Safavi
+Golshani
+Barbarz
+Bina
+Raoufi
+Ahangar
+Kabat
+Loszowska
+Ras
+Murawska
+Kwasny
+Halas
+Kabacinska
+Maszowska
+Rojek
+Maczko
+Makos
+Hodor
+Kapitan
+Sirek
+Kopinski
+Cordeiro
+Seixas
+Tavares
+Carneiro
+Neves
+Queiroz
+Nunes
+Hind
+Abril
+Baptista
+Montenegro
+Azevedo
+Sousa
+Bandiera
+Barboza
+Dhir
+Gora
+Tott
+Tatran
+Jhaal
+Motsara
+Dhama
+Bhadu
+Bargoti
+Sherred
+Heron
+Jell
+Kitt
+Driskin
+Ilica
+Gupta
+Cristea
+Ragar
+Lascar
+Troester
+Rosetti
+Bus
+Dita
+Trelles
+Macek
+Moscovici
+Gavrikova
+Bylinkaina
+Stepnova
+Kaverina
+Antipov
+Vadimovich
+Pavlovich
+Victorovna
+Denisovna
+Panina
+Desyatkova
+Burkov
+Kuzkin
+Dmitrivich
+Rusakov
+Safenu
+Niu
+Savali
+Pelesa
+Tilo
+Pule
+Lotomau
+Milovic
+Jelic
+Pesic
+Zoric
+Ristovski
+Karanovic
+Pejakovski
+Janketic
+Kovacova
+Tesarova
+Botosova
+Bartos
+Holub
+Koren
+Mokry
+Ekholm
+Wikstrom
+Malmquist
+Almgren
+Westermark
+Dahlman
+Wallin
+Mattson
+Ostlund
+Bjork
+Linden
+Stenbeck
+Forslund
+Sandstrom
+Srinan
+Natheep
+Lithik
+Shikan
+Yasmith
+Sayan
+Venujayan
+Palapol
+Sudham
+Kitjakarn
+Montri
+Singhapat
+Gason
+Wongsawat
+Juntasa
+Yao
+Tahir
+Sakir
+Keles
+Usta
+Hasim
+Karaduman
+Bayat
+Korkut
+Altun
+Nguyen
+Chu
+Hoang
+Do
+Huynh
+Duong
+Vu
+Quang
+Gunnsteinssen
+Ketilssen
+Skialgssen
+Kotkelldottir
+Ufidottir
+Warydottir
+Ragnarssen
+Junhi
+Rakhya
+Bhander
+Sadho
+Rajwa
+Kes
+Dhesi
+Sohi
+Puriwal
+Jawia
+Hayre
+Wains
+Asar
+Bati
+Li
+Truong
+Jang
+Wang
+Ruan
+Smirnova
+Mammadov
+Ailyev
+Hasanov
+Kazi
+Mina
+Pal
+Saha
+Roy
+Dewan
+Hasan
+Islam
+Wazen
+Rohman
+Akter
+Banik
+Bishwas
+Chakma
+Dey
+Gazi
+Shekh
+Xu
+Ho
+Law
+Lam
+Zhu
+Bedrize
+Gill
+Joshi
+Babu
+Dutta
+Kumar
+Patil
+Mehta
+Mittal
+Pandit
+Levi
+Mizrachi
+Peretz
+Biton
+Sato
+Kato
+Suzuki
+Takahashi
+Tanaka
+Watanabe
+Nakamura
+Yamamoto
+Kimura
+Abe
+Endo
+Park
+Shreshtha
+Thapa
+Navarro
+Perara
+Kumara
+Gamage
+Kaya
+Demir
+Gruber
+Huber
+Bauer
+Wagner
+Pichler
+Moser
+Mayer
+Maier
+Schuster
+Ivanou
+Kazlou
+janssens
+Maes
+Jacobs
+Mertens
+Simon
+Hodzic
+Petrovic
+Jovanovic
+Dimitrov
+Boyanov
+Tasev
+Nikolov
+Gruev
+Horvat
+Kovacevic
+Babic
+Maric
+Novak
+Svoboda
+Nielsen
+Jensen
+Pedersen
+Sorensen
+Tamm
+Saar
+Sepp
+Joensen
+Korhonen
+Virtanen
+Makinen
+Laine
+Salo
+Dubois
+Martin
+Roux
+Laurent
+Mercier
+Dupont
+Lambert
+Francois
+Michel
+Nagy
+Giannopoulos
+Kovacs
+Horvath
+Kiss
+Byrne
+Reilly
+Doyle
+Doherty
+Rossi
+Russo
+Ferrari
+Esposito
+Bianchi
+Colombo
+Ricci
+Rizzo
+Leone
+Conte
+Neri
+Caputo
+Grassi
+Monti
+Krasniqi
+Morina
+Ozols
+Berzins
+Kazlauskas
+Petrauskas
+Jankauskas
+Borg
+Camilleri
+Andov
+Heaven
+Bozinov
+Rusu
+Ceban
+Popa
+Bos
+Vos
+Hendriks
+Dijkstra
+Smits
+Janse
+Hansen
+Johansen
+Dahl
+Lund
+Nowak
+Kowalski
+Wisniewski
+Wojak
+Mazur
+Wozniak
+Silva
+Jesus
+Freitas
+Radu
+Stoica
+Popov
+Haven
+Moreno
+Sanz
+Bernasconi
+Fontana
+Yilmaz
+Melnyk
+Shevchenko
+Boyko
+MacDonald
+Driscoll
+Mackintosh
+Craig
+MacLean
+Cormack
+Keenan
+MacCulloch
+Mackinnon
+Tremblay
+Jimenez
+Gagnon
+Mora
+Solis
+Tjon
+Mars
+Venus
+Mercury
+Luna
+Ceres
+Deimos
+Phobos
+Ganymede
+Io
+Europa
+Amalthea
+Himalia
+Thebe
+Elara
+Pasiphae
+Metis
+Carme
+Sinope
+Lysithea
+Ananke
+Leda
+Themisto
+Praxidike
+Locaste
+Kalyke
+Megaclite
+Taygete
+Callirrhoe
+Autonoe
+Harpalyke
+Thyone
+Hermippe
+Chalende
+Aoede
+Eukalade
+Isonoe
+Helike
+Carpo
+Aitne
+Eurydome
+Hegomone
+Arche
+Euanthe
+Sponde
+Euporie
+Mneme
+Kore
+Kallichore
+Valetudo
+Titan
+Thea
+Iapetus
+Dione
+Tethys
+Enceladus
+Mimas
+Hyperion
+Pheobe
+Janus
+Epimethus
+Prometheus
+Pandora
+Siarnaq
+Helene
+Albiorix
+Atlas
+Telesto
+Paaliaq
+Calypso
+Ymir
+Tarvos
+Skathi
+Narvi
+Kari
+Skoll
+Bestla
+Methone
+Pallene
+Anthe
+Titania
+Oberon
+Umbriel
+Ariel
+Miranda
+Sycorax
+Puck
+Portia
+Juliet
+Caliban
+Belinda
+Rosalina
+Bianca
+Cupid
+Mab
+Triton
+Proteus
+Larissa
+Halimede
+Sao
+Charon
+Hydra
+Nix
+Kerberos
+Styx
+Jupiter
+Saturn
+Uranus
+Neptune
+Pluto
+Orcus
+Haumea
+Quaoar
+Makemake
+Eris
+Salacia
+Sedna
+Nova
+Trask
+Ripley
+Kilroy
+Simms
+Winters
+Renard
+Reeves
+Looper
+Cassini
+Juno
+Dawn
+Kepler
+Akatsuki
+Ofako
+Zeng
+Fong
+Said
+Halward
+Tetsuo
+Onishi
+Link
+Score
+Asimov
+Strugatsky
+Gort
+Gallagher
+Nimrod
+Jovian
+Crichton
+Andromeda
+Llewellyn
+Naylor
+Thorax
+Curie
+Zisa
+Zax
+Aegis
+Bishop
+Alpha
+Omega
+Delta
+Ohm
+Cain
+Brax
+Bracket
+Bolt
+Weld
+Apogee
+Gliese
+Zeta
+Leporis
+Barnard
+Vega
+Altair
\ No newline at end of file
diff --git a/html/changelogs/Cerebulon - Namelists.yml b/html/changelogs/Cerebulon - Namelists.yml
new file mode 100644
index 0000000000..6fd7911131
--- /dev/null
+++ b/html/changelogs/Cerebulon - Namelists.yml
@@ -0,0 +1,7 @@
+
+author: Cerebulon
+
+delete-after: True
+
+changes:
+ - rscadd: "Added 1000+ surnames and 1200+ forenames from various world cultures to human namelists"
diff --git a/html/changelogs/Mechoid-RSFs.yml b/html/changelogs/Mechoid-RSFs.yml
new file mode 100644
index 0000000000..72c7ac0b09
--- /dev/null
+++ b/html/changelogs/Mechoid-RSFs.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Mechoid
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Ctrl clicking a Rapid Service Fabricator when held will allow you to choose the container it deploys."
+ - bugfix: "The Rapid Service Fabricator's icon is correctly set."
diff --git a/html/changelogs/kartagrafi-NewHairAndUnderwear.yml b/html/changelogs/kartagrafi-NewHairAndUnderwear.yml
new file mode 100644
index 0000000000..f28a41c04b
--- /dev/null
+++ b/html/changelogs/kartagrafi-NewHairAndUnderwear.yml
@@ -0,0 +1,39 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: kartagrafi
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds new hairstyle ''Sharp Ponytail''"
+ - rscadd: "Adds several new underwear - ''Binder'', ''Strapless Binder'', ''Longsleeve Striped Shirt, Pink'', ''Pink Wing Shirt'', ''Pink and Black T-Shirt'', ''Leggings''"
+ - tweak: "Changes name of ''Supernova'' hairstyle to ''Glossy'', and makes the sprite somewhat neater"
+ - bugfix: "Fixes a hairstyle not appearing"
\ No newline at end of file
diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi
index fbea9c563e..cbf20402e6 100644
Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 75929194f9..a65de5defd 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_face_m.dmi b/icons/mob/human_face_m.dmi
index 457dd0e5df..fe62645869 100644
Binary files a/icons/mob/human_face_m.dmi and b/icons/mob/human_face_m.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard.dmi b/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard.dmi
index 7700cc1d17..ce86dcadfd 100644
Binary files a/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard.dmi and b/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard_a.dmi b/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard_a.dmi
index 4d3223b41e..1361b9e5fb 100644
Binary files a/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard_a.dmi and b/icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard_a.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/DSINevrean/dsi_nevrean.dmi b/icons/mob/human_races/cyberlimbs/DSINevrean/dsi_nevrean.dmi
index f19af52106..5424d46b78 100644
Binary files a/icons/mob/human_races/cyberlimbs/DSINevrean/dsi_nevrean.dmi and b/icons/mob/human_races/cyberlimbs/DSINevrean/dsi_nevrean.dmi differ
diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi
index 0abfa5e0cb..300caaa9d8 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_harpy_vr.dmi b/icons/mob/human_races/r_harpy_vr.dmi
index b4173fb818..827e0d605f 100644
Binary files a/icons/mob/human_races/r_harpy_vr.dmi and b/icons/mob/human_races/r_harpy_vr.dmi differ
diff --git a/icons/mob/human_races/r_human_vr.dmi b/icons/mob/human_races/r_human_vr.dmi
index 24413995a7..7a91929aad 100644
Binary files a/icons/mob/human_races/r_human_vr.dmi and b/icons/mob/human_races/r_human_vr.dmi differ
diff --git a/icons/mob/human_races/r_lizard_vr.dmi b/icons/mob/human_races/r_lizard_vr.dmi
index b2b6dfac12..0bfbfb04ee 100644
Binary files a/icons/mob/human_races/r_lizard_vr.dmi and b/icons/mob/human_races/r_lizard_vr.dmi differ
diff --git a/icons/mob/human_races/r_nevrean.dmi b/icons/mob/human_races/r_nevrean.dmi
index d937299dc5..d2bebc171a 100644
Binary files a/icons/mob/human_races/r_nevrean.dmi and b/icons/mob/human_races/r_nevrean.dmi differ
diff --git a/icons/mob/vore.dmi b/icons/mob/vore.dmi
index 0357739b9c..4479212c1b 100644
Binary files a/icons/mob/vore.dmi and b/icons/mob/vore.dmi differ
diff --git a/icons/mob/vore64x64.dmi b/icons/mob/vore64x64.dmi
index 8454da40d7..13a67edbe3 100644
Binary files a/icons/mob/vore64x64.dmi and b/icons/mob/vore64x64.dmi differ
diff --git a/maps/southern_cross/southern_cross_jobs_vr.dm b/maps/southern_cross/southern_cross_jobs_vr.dm
index 05dfdd478e..251417dbba 100644
--- a/maps/southern_cross/southern_cross_jobs_vr.dm
+++ b/maps/southern_cross/southern_cross_jobs_vr.dm
@@ -3,19 +3,6 @@ var/const/PILOT =(1<<15)
var/const/EXPLORER =(1<<12)
var/const/PATHFINDER =(1<<13)
-var/const/access_pilot = 67
-var/const/access_explorer = 43
-
-/datum/access/pilot
- id = access_pilot
- desc = "Pilot"
- region = ACCESS_REGION_SUPPLY
-
-/datum/access/explorer
- id = access_explorer
- desc = "Explorer"
- region = ACCESS_REGION_GENERAL
-
/obj/item/weapon/card/id/medical/sar
assignment = "Field Medic"
rank = "Field Medic"
@@ -65,7 +52,8 @@ var/const/access_explorer = 43
selection_color = "#AD6BAD"
idtype = /obj/item/weapon/card/id/explorer/head/pathfinder
economic_modifier = 7
-
+ minimal_player_age = 7
+
access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_research, access_gateway)
minimal_access = list(access_eva, access_pilot, access_explorer, access_research, access_gateway)
outfit_type = /decl/hierarchy/outfit/job/pathfinder
diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm
index d911465a74..e0cc536a33 100644
--- a/maps/tether/tether-07-station3.dmm
+++ b/maps/tether/tether-07-station3.dmm
@@ -10370,6 +10370,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/security/forensics)
"rm" = (
@@ -10384,6 +10387,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/lino,
/area/security/detectives_office)
"rn" = (
@@ -10398,6 +10404,9 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/lino,
/area/security/detectives_office)
"ro" = (
@@ -10412,6 +10421,9 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/lino,
/area/security/detectives_office)
"rp" = (
@@ -10431,6 +10443,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/lino,
/area/security/detectives_office)
"rq" = (
@@ -10445,6 +10460,9 @@
name = "Detective";
req_access = list(4)
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/security/detectives_office)
"rr" = (
@@ -15377,6 +15395,16 @@
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 10
},
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "north bump";
+ pixel_x = 0;
+ pixel_y = 28
+ },
+/obj/structure/cable{
+ d2 = 2;
+ icon_state = "0-2"
+ },
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
"yF" = (
@@ -16017,6 +16045,12 @@
/obj/effect/floor_decal/corner/lightgrey{
dir = 9
},
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2";
+ pixel_y = 0
+ },
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
"zz" = (
@@ -27333,13 +27367,31 @@
/obj/machinery/meter,
/turf/simulated/floor/tiled,
/area/security/eva)
+"Rn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled,
+/area/hallway/station/upper)
"Rs" = (
/obj/machinery/button/windowtint{
id = "sec_processing";
pixel_x = 26;
pixel_y = 6;
- req_access = list(1);
-
+ req_access = list(1)
},
/turf/simulated/floor/tiled,
/area/security/security_processing)
@@ -27478,6 +27530,28 @@
},
/turf/simulated/floor/bluegrid,
/area/ai/foyer)
+"XT" = (
+/obj/effect/floor_decal/borderfloor{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/lightgrey/border{
+ dir = 1
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals7,
+/obj/effect/floor_decal/steeldecal/steel_decals7{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/tiled,
+/area/hallway/station/upper)
"ZO" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled,
@@ -36927,8 +37001,8 @@ tn
sp
yE
zy
-As
-Bz
+XT
+Rn
Cn
Dr
DZ
diff --git a/maps/tether/tether-09-solars.dmm b/maps/tether/tether-09-solars.dmm
index d541ff126b..913fc4b196 100644
--- a/maps/tether/tether-09-solars.dmm
+++ b/maps/tether/tether-09-solars.dmm
@@ -1149,7 +1149,6 @@
/area/rnd/outpost/eva)
"cB" = (
/obj/machinery/alarm{
- frequency = 1441;
pixel_y = 22
},
/obj/effect/floor_decal/steeldecal/steel_decals5,
@@ -1330,7 +1329,6 @@
/area/rnd/outpost/testing)
"cT" = (
/obj/machinery/alarm{
- frequency = 1441;
pixel_y = 22
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -1879,7 +1877,6 @@
icon_state = "2-4"
},
/obj/machinery/alarm{
- frequency = 1441;
pixel_y = 22
},
/turf/simulated/floor,
@@ -2388,7 +2385,6 @@
icon_state = "4-8"
},
/obj/machinery/alarm{
- frequency = 1441;
pixel_y = 22
},
/obj/effect/floor_decal/borderfloor{
@@ -3416,7 +3412,6 @@
/area/rnd/outpost/heating)
"gx" = (
/obj/machinery/alarm{
- frequency = 1441;
pixel_y = 22
},
/obj/effect/floor_decal/corner/purple{
@@ -3517,7 +3512,6 @@
/area/rnd/outpost)
"gD" = (
/obj/machinery/alarm{
- frequency = 1441;
pixel_y = 22
},
/obj/effect/floor_decal/borderfloor{
diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm
index bde30ba4a2..194dcfa147 100644
--- a/maps/tether/tether_shuttles.dm
+++ b/maps/tether/tether_shuttles.dm
@@ -190,7 +190,7 @@
current_area = /area/shuttle/excursion/tether
docking_controller_tag = "expshuttle_docker"
web_master_type = /datum/shuttle_web_master/excursion
- var/abduct_chance = 0.5 //Prob
+ var/abduct_chance = 0 //Prob
/datum/shuttle/web_shuttle/excursion/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction)
if(prob(abduct_chance))
diff --git a/sound/items/washingmachine.ogg b/sound/items/washingmachine.ogg
new file mode 100644
index 0000000000..b4745c0e67
Binary files /dev/null and b/sound/items/washingmachine.ogg differ
diff --git a/sound/mecha/duranddefencemode.ogg b/sound/mecha/duranddefencemode.ogg
new file mode 100644
index 0000000000..5ae1ea60da
Binary files /dev/null and b/sound/mecha/duranddefencemode.ogg differ
diff --git a/sound/mecha/gasconnected.ogg b/sound/mecha/gasconnected.ogg
new file mode 100644
index 0000000000..c1eb9f3d73
Binary files /dev/null and b/sound/mecha/gasconnected.ogg differ
diff --git a/sound/mecha/gasdisconnected.ogg b/sound/mecha/gasdisconnected.ogg
new file mode 100644
index 0000000000..62fa87fdee
Binary files /dev/null and b/sound/mecha/gasdisconnected.ogg differ
diff --git a/sound/mecha/heavylightswitch.ogg b/sound/mecha/heavylightswitch.ogg
new file mode 100644
index 0000000000..aa54dc3a29
Binary files /dev/null and b/sound/mecha/heavylightswitch.ogg differ
diff --git a/sound/mecha/mech_reload_default.ogg b/sound/mecha/mech_reload_default.ogg
new file mode 100644
index 0000000000..74a07d285b
Binary files /dev/null and b/sound/mecha/mech_reload_default.ogg differ
diff --git a/sound/mecha/mechanical_toggle.ogg b/sound/mecha/mechanical_toggle.ogg
new file mode 100644
index 0000000000..707ae24952
Binary files /dev/null and b/sound/mecha/mechanical_toggle.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index fddb72fac2..dfb2549529 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -655,6 +655,7 @@
#include "code\game\jobs\_access_defs.dm"
#include "code\game\jobs\access.dm"
#include "code\game\jobs\access_datum.dm"
+#include "code\game\jobs\access_datum_vr.dm"
#include "code\game\jobs\job_controller.dm"
#include "code\game\jobs\jobs.dm"
#include "code\game\jobs\whitelist.dm"
@@ -1803,11 +1804,13 @@
#include "code\modules\food\food\drinks\bottle\robot.dm"
#include "code\modules\food\food\snacks\meat.dm"
#include "code\modules\food\glass\bottle.dm"
+#include "code\modules\food\glass\bottle_vr.dm"
#include "code\modules\food\glass\bottle\robot.dm"
#include "code\modules\food\kitchen\gibber.dm"
#include "code\modules\food\kitchen\icecream.dm"
#include "code\modules\food\kitchen\microwave.dm"
#include "code\modules\food\kitchen\smartfridge.dm"
+#include "code\modules\food\kitchen\smartfridge_vr.dm"
#include "code\modules\food\kitchen\cooking_machines\_cooker.dm"
#include "code\modules\food\kitchen\cooking_machines\_cooker_output.dm"
#include "code\modules\food\kitchen\cooking_machines\candy.dm"
@@ -2562,6 +2565,7 @@
#include "code\modules\projectiles\projectile.dm"
#include "code\modules\projectiles\ammunition\boxes_yw.dm"
#include "code\modules\projectiles\ammunition\magazines.dm"
+#include "code\modules\projectiles\ammunition\magazines_vr.dm"
#include "code\modules\projectiles\ammunition\magnetic.dm"
#include "code\modules\projectiles\ammunition\rounds.dm"
#include "code\modules\projectiles\ammunition\smartmag.dm"
@@ -2689,6 +2693,7 @@
#include "code\modules\reagents\reagent_containers\spray.dm"
#include "code\modules\reagents\reagent_containers\spray_vr.dm"
#include "code\modules\reagents\reagent_containers\syringes.dm"
+#include "code\modules\reagents\reagent_containers\syringes_vr.dm"
#include "code\modules\recycling\conveyor2.dm"
#include "code\modules\recycling\disposal-construction.dm"
#include "code\modules\recycling\disposal.dm"