diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 6338213195..fdc313c30a 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -7014,9 +7014,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/crew_quarters/fitness/recreation)
-"amG" = (
-/turf/closed/wall,
-/area/space)
"amH" = (
/obj/machinery/door/airlock/external{
req_one_access_txt = "13,8"
@@ -46794,7 +46791,7 @@
dir = 8
},
/turf/open/floor/plating,
-/area/space/nearstation)
+/area/maintenance/starboard/fore)
"bOZ" = (
/obj/machinery/chem_master/condimaster{
name = "CondiMaster Neo";
@@ -70554,7 +70551,7 @@
dir = 8
},
/turf/open/floor/plating,
-/area/space/nearstation)
+/area/maintenance/starboard/aft)
"cJg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/item/bedsheet/medical,
@@ -81152,10 +81149,6 @@
/obj/machinery/vr_sleeper,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
-"evy" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/space)
"eEe" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -81385,10 +81378,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"hKW" = (
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/maintenance/aft)
"ioI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -82834,10 +82823,6 @@
},
/turf/open/floor/plating,
/area/security/prison)
-"wkz" = (
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space)
"wlH" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -113085,7 +113070,7 @@ cCq
cgN
cMl
bTs
-hKW
+lMJ
aaf
aaf
aaf
@@ -113342,7 +113327,7 @@ cCq
cLA
bTs
bTs
-hKW
+lMJ
aaf
aaa
aaa
@@ -119762,9 +119747,9 @@ cEA
aaf
aaa
aaa
-blx
+dvY
cJf
-blx
+dvY
aaa
dbN
gsT
@@ -120019,9 +120004,9 @@ blx
aaa
aaa
aaa
-wkz
+ack
uim
-wkz
+ack
aaa
aaf
dbR
@@ -121287,7 +121272,7 @@ ciL
cgs
csc
dvY
-evy
+dxk
krD
lsv
txj
@@ -129695,8 +129680,8 @@ aaa
aaa
aaf
aaa
-amG
-blx
+dnh
+dnh
bOY
dqT
aaf
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 846fe48604..263cb44144 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -2822,7 +2822,7 @@
req_access_txt = "65"
},
/turf/open/floor/plating,
-/area/space/nearstation)
+/area/ai_monitored/turret_protected/aisat_interior)
"ahi" = (
/obj/structure/lattice/catwalk,
/turf/open/space,
@@ -2923,8 +2923,15 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/main)
"ahr" = (
-/turf/closed/wall/r_wall,
-/area/space)
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "Security External Airlock";
+ req_access_txt = "63"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore)
"ahs" = (
/obj/structure/lattice/catwalk,
/obj/structure/transit_tube,
@@ -4686,7 +4693,7 @@
pixel_y = 20
},
/turf/open/space,
-/area/space)
+/area/space/nearstation)
"alc" = (
/obj/structure/table,
/obj/item/storage/fancy/cigarettes/cigars,
@@ -6629,13 +6636,6 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"apn" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/external{
- name = "Security External Airlock";
- req_access_txt = "63"
- },
/turf/open/floor/plating,
/area/maintenance/fore)
"apo" = (
@@ -8698,9 +8698,18 @@
/turf/closed/wall,
/area/bridge)
"atZ" = (
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "Solar Maintenance";
+ req_access_txt = "10; 13"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/starboard)
"aua" = (
/obj/structure/closet/secure_closet/freezer/money,
/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka,
@@ -23763,18 +23772,12 @@
/turf/open/floor/plating,
/area/bridge)
"bcO" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 9
},
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/external{
- name = "Solar Maintenance";
- req_access_txt = "10; 13"
- },
-/turf/open/floor/plating,
-/area/maintenance/solars/starboard)
+/turf/open/space,
+/area/space/nearstation)
"bcQ" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -39888,12 +39891,6 @@
/area/science/mixing)
"bMp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/obj/machinery/door/airlock/external{
- req_access_txt = "8"
- },
/turf/open/floor/plating,
/area/science/mixing)
"bMq" = (
@@ -40373,11 +40370,10 @@
/turf/open/floor/engine/vacuum,
/area/science/mixing)
"bNq" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 1
},
-/turf/open/space,
+/turf/open/floor/plating/airless,
/area/science/mixing)
"bNr" = (
/obj/structure/window/reinforced{
@@ -40813,10 +40809,11 @@
/turf/open/floor/engine/vacuum,
/area/science/mixing)
"bOu" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 1
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
},
-/turf/open/floor/plating/airless,
+/turf/open/space,
/area/science/mixing)
"bOv" = (
/obj/structure/window/reinforced{
@@ -41104,12 +41101,15 @@
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bPl" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/machinery/door/airlock/external{
+ req_access_txt = "8"
+ },
+/turf/open/floor/plating,
+/area/science/mixing)
"bPn" = (
/obj/machinery/door/airlock/grunge{
name = "Chapel"
@@ -53174,10 +53174,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"dhS" = (
-/obj/structure/window/reinforced,
-/turf/open/space/basic,
-/area/space)
"dir" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 5
@@ -59590,7 +59586,7 @@
},
/obj/machinery/door/airlock/external,
/turf/open/floor/plating,
-/area/space/nearstation)
+/area/chapel/asteroid/monastery)
"rBh" = (
/obj/structure/mopbucket,
/obj/item/mop,
@@ -77801,7 +77797,7 @@ aiu
aiu
axC
axB
-rKr
+azN
axB
aaa
aaa
@@ -82501,8 +82497,8 @@ aht
aaa
aaa
abI
-dhS
-cqS
+bGI
+bNs
rzF
bNs
bOw
@@ -90640,9 +90636,9 @@ aaa
aaa
aaa
aaa
-aaa
-ahi
-ahi
+aoz
+ahr
+aoz
aqG
arD
asO
@@ -90898,8 +90894,8 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
+cdm
+cdm
aqG
arE
arA
@@ -94741,7 +94737,7 @@ ags
adX
adX
adX
-ahr
+adX
aaa
aaa
aaa
@@ -94997,7 +94993,7 @@ cnC
adX
adX
adX
-shH
+adX
alb
aaa
aaa
@@ -95255,7 +95251,7 @@ agt
agD
agR
ahh
-atZ
+ahi
aaa
aaa
aaa
@@ -95511,7 +95507,7 @@ agg
adX
adX
adX
-shH
+adX
alb
aaa
aaa
@@ -95769,7 +95765,7 @@ ags
adX
adX
adX
-shH
+adX
aFj
aht
aht
@@ -105617,9 +105613,9 @@ bIN
dAF
bCV
bCV
-bNq
+bCV
bOu
-aht
+bNq
aaa
aaa
aaa
@@ -105875,8 +105871,8 @@ bJT
wOS
bMp
bPl
-mZE
-aht
+bcO
+aaa
aaa
aaa
aaa
@@ -106131,9 +106127,9 @@ fBz
bCV
bCV
bCV
+bCV
ahi
aht
-aht
abI
abI
abI
@@ -109182,7 +109178,7 @@ aXC
aYF
baG
sut
-bcO
+oCX
rWE
baG
dsv
@@ -109439,7 +109435,7 @@ aEl
aEl
baG
rWE
-oCX
+atZ
rWE
baG
aEj
diff --git a/code/__HELPERS/donator_groupings.dm b/code/__HELPERS/donator_groupings.dm
index bdff20553a..4305fb1ed5 100644
--- a/code/__HELPERS/donator_groupings.dm
+++ b/code/__HELPERS/donator_groupings.dm
@@ -17,9 +17,9 @@ For fast lookups, this is generated using regenerate_donator_grouping_list()
/proc/regenerate_donator_grouping_list()
GLOB.donators_by_group = list() //reinit everything
var/list/donator_list = GLOB.donators_by_group //cache
- var/list/tier_1 = TIER_1_DONATORS
- donator_list[DONATOR_GROUP_TIER_1] = tier_1.Copy() //The .Copy() is to "decouple"/make a new list, rather than letting the global list impact the config list.
- var/list/tier_2 = tier_1 + TIER_2_DONATORS //Using + on lists implies making new lists, so we don't need to manually Copy().
+ var/list/tier_3 = TIER_3_DONATORS
+ donator_list[DONATOR_GROUP_TIER_3] = tier_3.Copy() //The .Copy() is to "decouple"/make a new list, rather than letting the global list impact the config list.
+ var/list/tier_2 = tier_3 + TIER_2_DONATORS //Using + on lists implies making new lists, so we don't need to manually Copy().
donator_list[DONATOR_GROUP_TIER_2] = tier_2
- var/list/tier_3 = tier_2 + TIER_3_DONATORS
- donator_list[DONATOR_GROUP_TIER_3] = tier_3
+ var/list/tier_1 = tier_2 + TIER_1_DONATORS
+ donator_list[DONATOR_GROUP_TIER_1] = tier_1
diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm
index 6cef7ac50f..179adf46bd 100644
--- a/code/datums/wires/airlock.dm
+++ b/code/datums/wires/airlock.dm
@@ -53,8 +53,6 @@
/datum/wires/airlock/interactable(mob/user)
var/obj/machinery/door/airlock/A = holder
- if(!A.hasSiliconAccessInArea(user) && A.isElectrified() && A.shock(user, 100))
- return FALSE
if(A.panel_open)
return TRUE
@@ -73,6 +71,8 @@
/datum/wires/airlock/on_pulse(wire)
set waitfor = FALSE
var/obj/machinery/door/airlock/A = holder
+ if(!A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100))
+ return FALSE
switch(wire)
if(WIRE_POWER1, WIRE_POWER2) // Pulse to loose power.
A.loseMainPower()
@@ -127,6 +127,8 @@
/datum/wires/airlock/on_cut(wire, mend)
var/obj/machinery/door/airlock/A = holder
+ if(!A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100))
+ return FALSE
switch(wire)
if(WIRE_POWER1, WIRE_POWER2) // Cut to loose power, repair all to gain power.
if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2))
@@ -174,4 +176,4 @@
A.update_icon()
if(WIRE_ZAP1, WIRE_ZAP2) // Ouch.
if(isliving(usr))
- A.shock(usr, 50)
\ No newline at end of file
+ A.shock(usr, 50)
diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm
index a7f7e3152c..6f1aec287b 100644
--- a/code/game/objects/items/miscellaneous.dm
+++ b/code/game/objects/items/miscellaneous.dm
@@ -47,8 +47,11 @@
spawn_option(stored_options[choice],M)
qdel(src)
-/obj/item/choice_beacon/proc/spawn_option(obj/choice,mob/living/M)
- var/obj/new_item = new choice()
+/obj/item/choice_beacon/proc/create_choice_atom(atom/choice, mob/owner)
+ return new choice()
+
+/obj/item/choice_beacon/proc/spawn_option(atom/choice,mob/living/M)
+ var/obj/new_item = create_choice_atom(choice, M)
var/obj/structure/closet/supplypod/bluespacepod/pod = new()
pod.explosionSize = list(0,0,0,0)
new_item.forceMove(pod)
@@ -152,10 +155,50 @@
augment_list[initial(A.name)] = A
return augment_list
-/obj/item/choice_beacon/augments/spawn_option(obj/choice,mob/living/M)
+/obj/item/choice_beacon/augments/spawn_option(atom/choice,mob/living/M)
new choice(get_turf(M))
to_chat(M, "You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from S.E.L.F. Message as follows: Item request received. Your package has been transported, use the autosurgeon supplied to apply the upgrade. Message ends.\"")
+/obj/item/choice_beacon/pet //donator beacon that summons a small friendly animal
+ name = "pet beacon"
+ desc = "Straight from the outerspace pet shop to your feet."
+ var/static/list/pets = list("Crab" = /mob/living/simple_animal/crab,
+ "Cat" = /mob/living/simple_animal/pet/cat,
+ "Space cat" = /mob/living/simple_animal/pet/cat/space,
+ "Kitten" = /mob/living/simple_animal/pet/cat/kitten,
+ "Dog" = /mob/living/simple_animal/pet/dog,
+ "Corgi" = /mob/living/simple_animal/pet/dog/corgi,
+ "Pug" = /mob/living/simple_animal/pet/dog/pug,
+ "Exotic Corgi" = /mob/living/simple_animal/pet/dog/corgi/exoticcorgi,
+ "Fox" = /mob/living/simple_animal/pet/fox,
+ "Red Panda" = /mob/living/simple_animal/pet/redpanda,
+ "Possum" = /mob/living/simple_animal/opossum)
+ var/pet_name
+
+/obj/item/choice_beacon/pet/generate_display_names()
+ return pets
+
+/obj/item/choice_beacon/pet/create_choice_atom(atom/choice, mob/owner)
+ var/mob/living/simple_animal/new_choice = new choice()
+ new_choice.butcher_results = null //please don't eat your pet, chef
+ var/obj/item/pet_carrier/donator/carrier = new() //a donator pet carrier is just a carrier that can't be shoved in an autolathe for metal
+ carrier.add_occupant(new_choice)
+ new_choice.mob_size = MOB_SIZE_TINY //yeah we're not letting you use this roundstart pet to hurt people / knock them down
+ new_choice.pass_flags = PASSTABLE | PASSMOB //your pet is not a bullet/person shield
+ new_choice.density = FALSE
+ new_choice.blood_volume = 0 //your pet cannot be used to drain blood from for a bloodsucker
+ new_choice.desc = "A pet [initial(choice.name)], owned by [owner]!"
+ new_choice.can_have_ai = FALSE //no it cant be sentient damnit
+ if(pet_name)
+ new_choice.name = pet_name
+ new_choice.unique_name = TRUE
+ return carrier
+
+/obj/item/choice_beacon/pet/spawn_option(atom/choice,mob/living/M)
+ pet_name = input(M, "What would you like to name the pet? (leave blank for default name)", "Pet Name")
+ ..()
+
+//choice boxes (they just open in your hand instead of making a pod)
/obj/item/choice_beacon/box
name = "choice box (default)"
desc = "Think really hard about what you want, and then rip it open!"
@@ -163,21 +206,17 @@
icon_state = "deliverypackage3"
item_state = "deliverypackage3"
-/obj/item/choice_beacon/box/spawn_option(obj/choice,mob/living/M)
- to_chat(M, "The box opens, revealing the [choice]!")
+/obj/item/choice_beacon/box/spawn_option(atom/choice,mob/living/M)
+ var/choice_text = choice
+ if(ispath(choice_text))
+ choice_text = initial(choice.name)
+ to_chat(M, "The box opens, revealing the [choice_text]!")
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
M.temporarilyRemoveItemFromInventory(src, TRUE)
M.put_in_hands(new choice)
qdel(src)
-/obj/item/choice_beacon/box/plushie
- name = "choice box (plushie)"
- desc = "Using the power of quantum entanglement, this box contains every plush, until the moment it is opened!"
- icon = 'icons/obj/plushes.dmi'
- icon_state = "box"
- item_state = "box"
-
-/obj/item/choice_beacon/box/spawn_option(choice,mob/living/M)
+/obj/item/choice_beacon/box/plushie/spawn_option(choice,mob/living/M)
if(ispath(choice, /obj/item/toy/plush))
..() //regular plush, spawn it naturally
else
@@ -188,6 +227,31 @@
M.put_in_hands(new choice)
qdel(src)
+/obj/item/choice_beacon/box/carpet //donator carpet beacon
+ name = "choice box (carpet)"
+ desc = "Contains 50 of a selected carpet inside!"
+ var/static/list/carpet_list = list(/obj/item/stack/tile/carpet/black/fifty = "Black Carpet",
+ "Black & Red Carpet" = /obj/item/stack/tile/carpet/blackred/fifty,
+ "Monochrome Carpet" = /obj/item/stack/tile/carpet/monochrome/fifty,
+ "Blue Carpet" = /obj/item/stack/tile/carpet/blue/fifty,
+ "Cyan Carpet" = /obj/item/stack/tile/carpet/cyan/fifty,
+ "Green Carpet" = /obj/item/stack/tile/carpet/green/fifty,
+ "Orange Carpet" = /obj/item/stack/tile/carpet/orange/fifty,
+ "Purple Carpet" = /obj/item/stack/tile/carpet/purple/fifty,
+ "Red Carpet" = /obj/item/stack/tile/carpet/red/fifty,
+ "Royal Black Carpet" = /obj/item/stack/tile/carpet/royalblack/fifty,
+ "Royal Blue Carpet" = /obj/item/stack/tile/carpet/royalblue/fifty)
+
+/obj/item/choice_beacon/box/carpet/generate_display_names()
+ return carpet_list
+
+/obj/item/choice_beacon/box/plushie
+ name = "choice box (plushie)"
+ desc = "Using the power of quantum entanglement, this box contains every plush, until the moment it is opened!"
+ icon = 'icons/obj/plushes.dmi'
+ icon_state = "box"
+ item_state = "box"
+
/obj/item/choice_beacon/box/plushie/generate_display_names()
var/list/plushie_list = list()
//plushie set 1: just subtypes of /obj/item/toy/plush
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm
index a4b12dd629..ef2fb44d3d 100644
--- a/code/game/objects/items/pet_carrier.dm
+++ b/code/game/objects/items/pet_carrier.dm
@@ -29,6 +29,9 @@
var/has_lock_sprites = TRUE //whether to load the lock overlays or not
var/allows_hostiles = FALSE //does the pet carrier allow hostile entities to be held within it?
+/obj/item/pet_carrier/donator
+ custom_materials = null //you cant just use the loadout item to get free metal!
+
/obj/item/pet_carrier/Destroy()
if(occupants.len)
for(var/V in occupants)
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 45cac650b8..c36fba96cb 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -243,10 +243,24 @@ LINEN BINS
/obj/item/bedsheet/random/Initialize()
..()
- var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random)
+ var/type = pick(typesof(/obj/item/bedsheet) - list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon))
new type(loc)
return INITIALIZE_HINT_QDEL
+/obj/item/bedsheet/chameleon //donator chameleon bedsheet
+ name = "chameleon bedsheet"
+ desc = "Bedsheet technology has truly gone too far."
+ var/datum/action/item_action/chameleon/change/chameleon_action
+
+/obj/item/bedsheet/chameleon/New()
+ ..()
+ chameleon_action = new(src)
+ chameleon_action.chameleon_type = /obj/item/bedsheet
+ chameleon_action.chameleon_name = "Bedsheet"
+ chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random), only_root_path = TRUE)
+ chameleon_action.initialize_disguises()
+
+//bedsheet bin
/obj/structure/bedsheetbin
name = "linen bin"
desc = "It looks rather cosy."
diff --git a/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/code/modules/antagonists/bloodsucker/powers/fortitude.dm
index 24cad2a188..740ec81782 100644
--- a/code/modules/antagonists/bloodsucker/powers/fortitude.dm
+++ b/code/modules/antagonists/bloodsucker/powers/fortitude.dm
@@ -54,7 +54,7 @@
REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude")
REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude")
REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
- REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude")
if(!ishuman(owner))
return
var/mob/living/carbon/human/H = owner
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 480ebda4f8..778b5175a7 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -801,7 +801,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(!subcategories.Find(gear_subcategory))
gear_subcategory = subcategories[1]
- var/firstsubcat = FALSE
+ var/firstsubcat = TRUE
for(var/subcategory in subcategories)
if(firstsubcat)
firstsubcat = FALSE
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 1c3ac0f340..b5d92fb780 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -199,12 +199,16 @@
/obj/item/clothing/gloves/evening
name = "evening gloves"
- desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish."
+ desc = "Thin, pretty gloves intended for use in regal feminine attire. A tag on the hem claims they were 'maid' in Space China, these were probably intended for use in some maid fetish."
icon_state = "evening"
item_state = "evening"
- strip_delay = 40
- equip_delay_other = 20
+ transfer_prints = TRUE
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
strip_mod = 0.9
- custom_price = PRICE_ALMOST_CHEAP
+
+/obj/item/clothing/gloves/evening/black
+ name = "midnight gloves"
+ desc = "Thin, pretty gloves intended for use in sexy feminine attire. A tag on the hem claims they pair great with black stockings."
+ icon_state = "eveningblack"
+ item_state = "eveningblack"
diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm
index c31008fa62..c17b62ba6c 100644
--- a/code/modules/mining/equipment/wormhole_jaunter.dm
+++ b/code/modules/mining/equipment/wormhole_jaunter.dm
@@ -35,18 +35,20 @@
return destinations
-/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent)
+/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent, force_entry = FALSE)
if(!turf_check(user))
return
var/list/L = get_destinations(user)
if(!L.len)
- to_chat(user, "The [src.name] found no beacons in the world to anchor a wormhole to.")
+ to_chat(user, "The [name] found no beacons in the world to anchor a wormhole to.")
return
var/chosen_beacon = pick(L)
- var/obj/effect/portal/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon))
+ var/obj/effect/portal/jaunt_tunnel/J = new (get_turf(src), 100, null, FALSE, get_turf(chosen_beacon))
if(adjacent)
try_move_adjacent(J)
+ if(force_entry)
+ J.teleport(user, force = TRUE)
playsound(src,'sound/effects/sparks4.ogg',50,1)
qdel(src)
@@ -73,7 +75,7 @@
if(user.get_item_by_slot(SLOT_BELT) == src)
to_chat(user, "Your [name] activates, saving you from the chasm!")
SSblackbox.record_feedback("tally", "jaunter", 1, "Chasm") // chasm automatic activation
- activate(user, FALSE)
+ activate(user, FALSE, TRUE)
else
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.")
@@ -84,9 +86,10 @@
icon_state = "bhole3"
desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
mech_sized = TRUE //save your ripley
+ teleport_channel = TELEPORT_CHANNEL_WORMHOLE
innate_accuracy_penalty = 6
-/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M)
+/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M, force = FALSE)
. = ..()
if(.)
// KERPLUNK
diff --git a/code/modules/spells/spell_types/taeclowndo.dm b/code/modules/spells/spell_types/taeclowndo.dm
index 59826daf07..9d6d71a89f 100644
--- a/code/modules/spells/spell_types/taeclowndo.dm
+++ b/code/modules/spells/spell_types/taeclowndo.dm
@@ -42,6 +42,8 @@
return
. = ..()
+ if(!.)
+ return
new /obj/item/grown/bananapeel(target)
/obj/effect/proc_holder/spell/aimed/banana_peel/update_icon()
diff --git a/code/modules/vending/kinkmate.dm b/code/modules/vending/kinkmate.dm
index dc4f4e9273..a78a4e6ef4 100644
--- a/code/modules/vending/kinkmate.dm
+++ b/code/modules/vending/kinkmate.dm
@@ -36,6 +36,7 @@
/obj/item/clothing/under/misc/keyholesweater = 2,
/obj/item/clothing/under/misc/stripper/mankini = 2,
/obj/item/clothing/under/costume/jabroni = 2,
+ /obj/item/clothing/gloves/evening/black = 2,
/obj/item/dildo/flared/huge = 3
)
premium = list(
diff --git a/html/changelogs/AutoChangeLog-pr-13182.yml b/html/changelogs/AutoChangeLog-pr-13182.yml
new file mode 100644
index 0000000000..9beb8f28c5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13182.yml
@@ -0,0 +1,4 @@
+author: "silicons"
+delete-after: True
+changes:
+ - bugfix: "airlocks now only shock on pulse/wirecutters instead of on tgui panel open."
diff --git a/html/changelogs/AutoChangeLog-pr-13204.yml b/html/changelogs/AutoChangeLog-pr-13204.yml
new file mode 100644
index 0000000000..e9033c299d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13204.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - rscadd: "three new items are in the loadout for all donators"
diff --git a/html/changelogs/AutoChangeLog-pr-13209.yml b/html/changelogs/AutoChangeLog-pr-13209.yml
new file mode 100644
index 0000000000..f885a4dc93
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13209.yml
@@ -0,0 +1,5 @@
+author: "silicons"
+delete-after: True
+changes:
+ - bugfix: "wormhole jaunters work"
+ - tweak: "wormhole jaunters no longer get interference from bags of holding"
diff --git a/html/changelogs/AutoChangeLog-pr-13239.yml b/html/changelogs/AutoChangeLog-pr-13239.yml
new file mode 100644
index 0000000000..0f01f680c6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13239.yml
@@ -0,0 +1,4 @@
+author: "zeroisthebiggay"
+delete-after: True
+changes:
+ - rscadd: "contraband black evening gloves in kinkvend"
diff --git a/html/changelogs/AutoChangeLog-pr-13243.yml b/html/changelogs/AutoChangeLog-pr-13243.yml
new file mode 100644
index 0000000000..a09ae5d607
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13243.yml
@@ -0,0 +1,4 @@
+author: "MrJWhit"
+delete-after: True
+changes:
+ - bugfix: "Fixes areas on expanded airlocks"
diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi
index 755280b332..44499649f9 100644
Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index 874f0d3660..c0f78ee604 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index 378c70d187..06783df03d 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -7,6 +7,27 @@
category = LOADOUT_CATEGORY_DONATOR
ckeywhitelist = list("This entry should never appear with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard
+/datum/gear/donator/pet
+ name = "Pet Beacon"
+ slot = SLOT_IN_BACKPACK
+ path = /obj/item/choice_beacon/pet
+ ckeywhitelist = list()
+ donator_group_id = DONATOR_GROUP_TIER_1 // can be accessed by all donators
+
+/datum/gear/donator/carpet
+ name = "Carpet Beacon"
+ slot = SLOT_IN_BACKPACK
+ path = /obj/item/choice_beacon/box/carpet
+ ckeywhitelist = list()
+ donator_group_id = DONATOR_GROUP_TIER_1
+
+/datum/gear/donator/chameleon_bedsheet
+ name = "Chameleon Bedsheet"
+ slot = SLOT_NECK
+ path = /obj/item/bedsheet/chameleon
+ ckeywhitelist = list()
+ donator_group_id = DONATOR_GROUP_TIER_1
+
/datum/gear/donator/donortestingbikehorn
name = "Donor item testing bikehorn"
slot = SLOT_IN_BACKPACK
diff --git a/modular_citadel/code/modules/client/loadout/gloves.dm b/modular_citadel/code/modules/client/loadout/gloves.dm
index ffa4724f63..09694ddec7 100644
--- a/modular_citadel/code/modules/client/loadout/gloves.dm
+++ b/modular_citadel/code/modules/client/loadout/gloves.dm
@@ -9,6 +9,10 @@
/datum/gear/gloves/evening
name = "Evening gloves"
path = /obj/item/clothing/gloves/evening
+
+/datum/gear/gloves/midnight
+ name = "Midnight gloves"
+ path = /obj/item/clothing/gloves/evening/black
/datum/gear/gloves/goldring
name = "A gold ring"