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"