diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm
new file mode 100644
index 00000000000..8218ff99360
--- /dev/null
+++ b/code/datums/mutations/cold.dm
@@ -0,0 +1,41 @@
+/datum/mutation/human/geladikinesis
+ name = "Geladikinetic Creation"
+ desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
+ quality = POSITIVE
+ text_gain_indication = "Your hand feels cold."
+ instability = 10
+ difficulty = 10
+ power = /obj/effect/proc_holder/spell/targeted/conjure_item/snow
+
+/obj/effect/proc_holder/spell/targeted/conjure_item/snow
+ name = "Create Snow"
+ desc = "Concentrates cryokinetic forces to create snow, useful for snow-like construction."
+ item_type = /obj/item/stack/sheet/mineral/snow
+ charge_max = 50
+ delete_old = FALSE
+ action_icon_state = "snow"
+
+
+/datum/mutation/human/cryokinesis
+ name = "Cryokinesis"
+ desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will."
+ quality = POSITIVE //upsides and downsides
+ text_gain_indication = "Your hand feels cold."
+ instability = 20
+ difficulty = 12
+ power = /obj/effect/proc_holder/spell/aimed/cryo
+
+/obj/effect/proc_holder/spell/aimed/cryo
+ name = "Cryobeam"
+ desc = "This power fires a frozen bolt at a target."
+ charge_max = 150
+ cooldown_min = 150
+ clothes_req = FALSE
+ range = 3
+ projectile_type = /obj/item/projectile/temp/cryo
+ base_icon_state = "icebeam"
+ action_icon_state = "icebeam"
+ active_msg = "You focus your cryokinesis!"
+ deactive_msg = "You relax."
+ active = FALSE
+
diff --git a/code/datums/mutations/cold_resistance.dm b/code/datums/mutations/space_adaptation.dm
similarity index 100%
rename from code/datums/mutations/cold_resistance.dm
rename to code/datums/mutations/space_adaptation.dm
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 0c2fb14bfa9..5a5a9ceb363 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -342,9 +342,10 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
merge_type = /obj/item/stack/sheet/mineral/snow
GLOBAL_LIST_INIT(snow_recipes, list ( \
- new/datum/stack_recipe("Snow Wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("Snow wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Snowman", /obj/structure/statue/snow/snowman, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Snowball", /obj/item/toy/snowball, 1), \
+ new/datum/stack_recipe("Snow tile", /obj/item/stack/tile/mineral/snow, 1, 4, 20), \
))
/obj/item/stack/sheet/mineral/snow/Initialize(mapload, new_amount, merge = TRUE)
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index f4756a9f872..36f45368fb7 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -191,9 +191,15 @@
var/obj/O
if(R.max_res_amount > 1) //Is it a stack?
O = new R.result_type(usr.drop_location(), R.res_amount * multiplier)
+ else if(ispath(R.result_type, /turf))
+ var/turf/T = usr.drop_location()
+ if(!isturf(T))
+ return
+ T.PlaceOnTop(R.result_type)
else
O = new R.result_type(usr.drop_location())
- O.setDir(usr.dir)
+ if(O)
+ O.setDir(usr.dir)
use(R.req_amount * multiplier)
//START: oh fuck i'm so sorry
diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm
index 64be8853a79..74026b859c9 100644
--- a/code/game/objects/items/stacks/tiles/tile_mineral.dm
+++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm
@@ -77,4 +77,12 @@
icon_state = "tile_darkshuttle"
turf_type = /turf/open/floor/mineral/plastitanium
mineralType = "plastitanium"
- materials = list(MAT_TITANIUM=250, MAT_PLASMA=250)
\ No newline at end of file
+ materials = list(MAT_TITANIUM=250, MAT_PLASMA=250)
+
+/obj/item/stack/tile/mineral/snow
+ name = "snow tile"
+ singular_name = "snow tile"
+ desc = "A layer of snow."
+ icon_state = "tile_snow"
+ turf_type = /turf/open/floor/grass/snow
+ mineralType = "snow"
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm
index 44c8df6c009..ab851177538 100644
--- a/code/modules/projectiles/projectile/special/temperature.dm
+++ b/code/modules/projectiles/projectile/special/temperature.dm
@@ -16,3 +16,14 @@
/obj/item/projectile/temp/hot
name = "heat beam"
temperature = 400
+
+/obj/item/projectile/temp/cryo
+ name = "cryo beam"
+ range = 3
+
+/obj/item/projectile/temp/cryo/on_range()
+ var/turf/T = get_turf(src)
+ if(isopenturf(T))
+ var/turf/open/O = T
+ O.freon_gas_act()
+ return ..()
diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm
index 1f58a3cd8ab..0c5eb3ff4d8 100644
--- a/code/modules/spells/spell_types/conjure.dm
+++ b/code/modules/spells/spell_types/conjure.dm
@@ -80,11 +80,11 @@
school = "conjuration"
charge_max = 150
cooldown_min = 10
+ var/delete_old = TRUE //TRUE to delete the last summoned object if it's still there, FALSE for infinite item stream weeeee
/obj/effect/proc_holder/spell/targeted/conjure_item/cast(list/targets, mob/user = usr)
- if (item && !QDELETED(item))
- qdel(item)
- item = null
+ if (delete_old && item && !QDELETED(item))
+ QDEL_NULL(item)
else
for(var/mob/living/carbon/C in targets)
if(C.dropItemToGround(C.get_active_held_item()))
diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi
index ed7f5b0b673..86322042c98 100644
Binary files a/icons/mob/actions/actions_spells.dmi and b/icons/mob/actions/actions_spells.dmi differ
diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi
index 8b439d2bad3..5eab800ca26 100644
Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 7dfbea00d96..cd769112ca9 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -465,11 +465,12 @@
#include "code\datums\mutations\actions.dm"
#include "code\datums\mutations\body.dm"
#include "code\datums\mutations\chameleon.dm"
-#include "code\datums\mutations\cold_resistance.dm"
+#include "code\datums\mutations\cold.dm"
#include "code\datums\mutations\combined.dm"
#include "code\datums\mutations\hulk.dm"
#include "code\datums\mutations\radioactive.dm"
#include "code\datums\mutations\sight.dm"
+#include "code\datums\mutations\space_adaptation.dm"
#include "code\datums\mutations\speech.dm"
#include "code\datums\mutations\telekinesis.dm"
#include "code\datums\mutations\touch.dm"