diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 5a3b7237656..cc16d7cf41d 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -40,7 +40,7 @@
flags_inv = HIDEFACE
flags = HEADCOVERSEYES
body_parts_covered = HEAD|EYES
- armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
+ armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 17c30543e08..a930dbcc0ab 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -98,6 +98,29 @@
brightness_on = 2
w_class = 1
+/obj/item/device/flashlight/heavy
+ name = "heavy duty flashlight"
+ desc = "A high-luminosity flashlight for specialist duties."
+ icon_state = "heavyflashlight"
+ item_state = "heavyflashlight"
+ brightness_on = 7
+ w_class = 3
+ matter = list(DEFAULT_WALL_MATERIAL = 100,"glass" = 70)
+ contained_sprite = 1
+
+/obj/item/device/flashlight/maglight
+ name = "maglight"
+ desc = "A heavy flashlight designed for security personnel."
+ icon_state = "maglight"
+ item_state = "maglight"
+ force = 10
+ brightness_on = 5
+ w_class = 3
+ attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
+ matter = list(DEFAULT_WALL_MATERIAL = 200,"glass" = 100)
+ hitsound = 'sound/weapons/smash.ogg'
+ contained_sprite = 1
+
// the desk lamps are a bit special
/obj/item/device/flashlight/lamp
@@ -206,3 +229,79 @@
/obj/item/device/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle.
+
+//Glowsticks
+
+/obj/item/device/flashlight/glowstick
+ name = "green glowstick"
+ desc = "A green military-grade glowstick."
+ w_class = 2
+ brightness_on = 3
+ light_power = 2
+ light_color = "#49F37C"
+ icon = 'icons/obj/glowsticks.dmi'
+ icon_state = "glowstick"
+ item_state = "glowstick"
+ contained_sprite = 1
+ offset_light = 0
+ diona_restricted_light = 0
+ var/fuel = 0
+
+/obj/item/device/flashlight/glowstick/New()
+ fuel = rand(900, 1200)
+ ..()
+
+/obj/item/device/flashlight/glowstick/process()
+ fuel = max(fuel - 1, 0)
+ if(!fuel || !on)
+ turn_off()
+ if(!fuel)
+ src.icon_state = "[initial(icon_state)]-empty"
+ processing_objects -= src
+
+/obj/item/device/flashlight/glowstick/proc/turn_off()
+ on = 0
+ update_icon()
+
+/obj/item/device/flashlight/glowstick/attack_self(mob/user)
+
+ if(!fuel)
+ user << "\The [src] has already been used."
+ return
+ if(on)
+ user << "\The [src] has already been turned on."
+ return
+
+ . = ..()
+
+ if(.)
+ user.visible_message("[user] cracks and shakes \the [src].", "You crack and shake \the [src], turning it on!")
+ processing_objects += src
+
+/obj/item/device/flashlight/glowstick/red
+ name = "red glowstick"
+ desc = "A red military-grade glowstick."
+ light_color = "#FC0F29"
+ icon_state = "glowstick_red"
+ item_state = "glowstick_red"
+
+/obj/item/device/flashlight/glowstick/blue
+ name = "blue glowstick"
+ desc = "A blue military-grade glowstick."
+ light_color = "#599DFF"
+ icon_state = "glowstick_blue"
+ item_state = "glowstick_blue"
+
+/obj/item/device/flashlight/glowstick/orange
+ name = "orange glowstick"
+ desc = "A orange military-grade glowstick."
+ light_color = "#FA7C0B"
+ icon_state = "glowstick_orange"
+ item_state = "glowstick_orange"
+
+/obj/item/device/flashlight/glowstick/yellow
+ name = "yellow glowstick"
+ desc = "A yellow military-grade glowstick."
+ light_color = "#FEF923"
+ icon_state = "glowstick_yellow"
+ item_state = "glowstick_yellow"
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 12512026bbe..aeddc0b9c36 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -127,7 +127,9 @@
/obj/item/weapon/gun/energy/taser,
/obj/item/weapon/flame/lighter,
/obj/item/clothing/glasses/hud/security,
- /obj/item/device/flashlight,
+ /obj/item/device/flashlight/maglight,
+ /obj/item/device/flashlight/flare,
+ /obj/item/device/flashlight/glowstick,
/obj/item/device/pda,
/obj/item/device/radio/headset,
/obj/item/device/hailer,
diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm
index 2024ecc7140..90b16b67fb5 100644
--- a/code/modules/clothing/spacesuits/void/wizard.dm
+++ b/code/modules/clothing/spacesuits/void/wizard.dm
@@ -38,6 +38,7 @@
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.3
wizard_garb = 1
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/teleportation_scroll,/obj/item/weapon/scrying,/obj/item/weapon/spellbook,/obj/item/device/soulstone,/obj/item/weapon/material/knife/ritual)
equipped(var/mob/user)
if(!(user.mind.assigned_role == "Space Wizard"))
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 40bf82c8b1c..e3b4ec9d050 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -1,5 +1,5 @@
/obj/item/clothing/suit/armor
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = THICKMATERIAL
@@ -285,7 +285,7 @@
icon_state = "kvest"
item_state = "kvest"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
- allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
+ allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight)
siemens_coefficient = 0.5
/obj/item/clothing/suit/storage/vest/officer
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index bce2744aa32..764065cedf6 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -37,6 +37,7 @@
icon_state = "chaplain_hoodie"
item_state = "chaplain_hoodie"
body_parts_covered = UPPER_TORSO|ARMS
+ allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/bible,/obj/item/weapon/nullrod,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater)
sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi')
//Chaplain
@@ -47,6 +48,7 @@
item_state = "nun"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT
+ allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/bible,/obj/item/weapon/nullrod,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater)
sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi')
//Chef
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 908998c6f3c..e37d1eb7d4c 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -53,7 +53,7 @@
gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE
permeability_coefficient = 0.01
armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20)
- allowed = list(/obj/item/weapon/teleportation_scroll)
+ allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/teleportation_scroll,/obj/item/weapon/scrying,/obj/item/weapon/spellbook,/obj/item/device/soulstone,/obj/item/weapon/material/knife/ritual)
flags_inv = HIDEJUMPSUIT
siemens_coefficient = 0.7
wizard_garb = 1
diff --git a/html/changelogs/alberyk-PR-1025.yml b/html/changelogs/alberyk-PR-1025.yml
new file mode 100644
index 00000000000..a7fb437667e
--- /dev/null
+++ b/html/changelogs/alberyk-PR-1025.yml
@@ -0,0 +1,12 @@
+author: Alberyk
+
+delete-after: True
+
+changes:
+ - rscadd: "Added new flavors of flashlights."
+ - rscadd: "Ported glowsticks from polaris."
+ - rscadd: "You can now carry flashlights in your armor."
+ - rscadd: "Wizard robes and voidsuits can now carry magic related items."
+ - rscadd: "The chaplain hoodie, and nun robes, can now store religious objects in their suit storage."
+ - imageadd: "New recorder, camera and lantern sprites."
+ - tweak: "Cult hoods have the same armor as the robes now."
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 281ec1e62ba..3e2ee5330ab 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/glowsticks.dmi b/icons/obj/glowsticks.dmi
new file mode 100644
index 00000000000..0e21408fe4b
Binary files /dev/null and b/icons/obj/glowsticks.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index d8fdff5986a..4a9e31fbd2b 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index 1f1c7d3f0a0..5c164a603f4 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index c67df62011d..8fedc56a8d2 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -331,7 +331,7 @@
"ags" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/main)
"agt" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/main)
"agu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/main)
-"agv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/standard,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/turf/simulated/floor{icon_state = "bluecorner"},/area/security/main)
+"agv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/standard,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/simulated/floor{icon_state = "bluecorner"},/area/security/main)
"agw" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/crew_quarters/heads/hos)
"agx" = (/turf/simulated/wall,/area/crew_quarters/heads/hos)
"agy" = (/obj/structure/grille,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
@@ -821,7 +821,7 @@
"apO" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"apP" = (/obj/machinery/door/airlock/maintenance{name = "Dormitory\\Security Maintenance"; req_access = list(12)},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"apQ" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/swabs,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
-"apR" = (/obj/machinery/requests_console{pixel_x = 0; pixel_y = 30},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
+"apR" = (/obj/machinery/requests_console{pixel_x = 0; pixel_y = 30},/obj/structure/table/glass,/obj/item/device/flashlight/heavy,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"apS" = (/obj/machinery/dnaforensics,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"apT" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dorm_outer"; locked = 1; name = "Dormitory External Access"; req_access = list(13)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
"apU" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
@@ -1503,7 +1503,7 @@
"aCU" = (/obj/machinery/gateway{dir = 6},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/gateway)
"aCV" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
"aCW" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
-"aCX" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aCX" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/flashlight/heavy,/obj/item/device/flashlight/heavy,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aCY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/ai_monitored/storage/eva)
"aCZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aDa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
@@ -6101,7 +6101,7 @@
"cnq" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engineering/locker_room)
"cnr" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/device/suit_cooling_unit,/turf/simulated/floor,/area/engineering/locker_room)
"cns" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/engineering{c_tag = "Engineering Locker Room"; dir = 1},/obj/item/device/suit_cooling_unit,/turf/simulated/floor,/area/engineering/locker_room)
-"cnt" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/engineering/locker_room)
+"cnt" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/device/flashlight/heavy,/obj/item/device/flashlight/heavy,/obj/item/device/flashlight/heavy,/turf/simulated/floor,/area/engineering/locker_room)
"cnu" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
"cnv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
"cnw" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)