diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 4dd72c012ce..c59d39dc14c 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -198,6 +198,7 @@ #define TURF_WET_WATER 1 #define TURF_WET_LUBE 2 #define TURF_WET_ICE 3 +#define TURF_WET_PERMAFROST 4 #define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 3f3c394a7e6..a340b18c497 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -565,6 +565,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 11 surplus = 0 +/datum/uplink_item/dangerous/grenadier + name = "Grenadier's belt" + desc = "A belt containing 25 lethally dangerous and destructive grenades." + item = /obj/item/storage/belt/grenade/full + cost = 22 + surplus = 0 + gamemodes = list(/datum/game_mode/nuclear) + /datum/uplink_item/dangerous/emp name = "EMP Grenades and Implanter Kit" desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \ diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm index d24db633c87..1c843a4311b 100644 --- a/code/game/objects/items/weapons/grenades/atmosgrenade.dm +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -2,7 +2,7 @@ /obj/item/grenade/gas - name = "Plasma Fire Grenade" + name = "plasma fire grenade" desc = "A compressed plasma grenade, used to start horrific plasma fires." origin_tech = "materials=3;magnets=4;syndicate=3" icon = 'icons/obj/grenade.dmi' @@ -18,7 +18,33 @@ target_turf.air_update_turf() qdel(src) +/obj/item/grenade/gas/plasma + icon_state = "plasma" + /obj/item/grenade/gas/knockout - name = "Knockout Grenade" + name = "knockout grenade" desc = "A grenade that completely removes all air and heat from its detonation area." - spawn_contents = SPAWN_20C | SPAWN_N2O \ No newline at end of file + spawn_contents = SPAWN_20C | SPAWN_N2O + +/obj/item/grenade/gluon + desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also wet any nearby floors." + name = "gluon grenade" + icon = 'icons/obj/grenade.dmi' + icon_state = "gluon" + item_state = "flashbang" + var/range = 4 + var/rad_damage = 60 + var/stamina_damage = 30 + +/obj/item/grenade/gluon/prime() + update_mob() + playsound(loc, 'sound/effects/empulse.ogg', 50, 1) + for(var/turf/T in view(range,loc)) + if(isfloorturf(T)) + var/turf/simulated/F = T + F.MakeSlippery(TURF_WET_PERMAFROST) + for(var/mob/living/carbon/L in T) + L.adjustStaminaLoss(stamina_damage) + L.apply_effect(rad_damage, IRRADIATE) + L.adjust_bodytemperature(-230) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm index cf281b6ec8a..0172dd35717 100644 --- a/code/game/objects/items/weapons/grenades/syndieminibomb.dm +++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm @@ -8,5 +8,20 @@ /obj/item/grenade/syndieminibomb/prime() update_mob() - explosion(src.loc,1,2,4,flame_range = 2) + explosion(src.loc, 1, 2, 4, flame_range = 2) qdel(src) + +/obj/item/grenade/syndieminibomb/concussion + name = "HE Grenade" + desc = "A compact shrapnel grenade meant to devastate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction." + icon_state = "concussion" + +/obj/item/grenade/syndieminibomb/concussion/prime() + update_mob() + explosion(src.loc, 0, 2, 3, flame_range = 3) + qdel(src) + +/obj/item/grenade/syndieminibomb/concussion/frag + name = "frag grenade" + desc = "Fire in the hole." + icon_state = "frag" \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 3d9471c3f02..da0ba50b7a2 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -302,6 +302,48 @@ item_state = "utility" use_item_overlays = 1 // So it will still show tools in it in case sec get lazy and just glance at it. +/obj/item/storage/belt/grenade + name = "grenadier belt" + desc = "A belt for holding grenades." + icon_state = "assaultbelt" + item_state = "assault" + storage_slots = 30 + max_combined_w_class = 60 + display_contents_with_number = 1 + can_hold = list( + /obj/item/grenade, + /obj/item/lighter, + /obj/item/reagent_containers/food/drinks/bottle/molotov + ) + +/obj/item/storage/belt/grenade/full/New() + ..() + new /obj/item/grenade/smokebomb(src) //4 + new /obj/item/grenade/smokebomb(src) + new /obj/item/grenade/smokebomb(src) + new /obj/item/grenade/smokebomb(src) + new /obj/item/grenade/empgrenade(src) //2 + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/gluon(src) //4 + new /obj/item/grenade/gluon(src) + new /obj/item/grenade/gluon(src) + new /obj/item/grenade/gluon(src) + new /obj/item/grenade/chem_grenade/facid(src) //1 + new /obj/item/grenade/gas/plasma(src) //2 + new /obj/item/grenade/gas/plasma(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) //10 + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb/concussion/frag(src) + new /obj/item/grenade/syndieminibomb(src) //2 + new /obj/item/grenade/syndieminibomb(src) + /obj/item/storage/belt/military/abductor name = "agent belt" desc = "A belt used by abductor agents." diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 21dbdb9e024..51549c1a563 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -20,7 +20,7 @@ /turf/simulated/proc/burn_tile() -/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice +/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost if(wet >= wet_setting) return wet = wet_setting @@ -30,7 +30,10 @@ wet_overlay = null var/turf/simulated/floor/F = src if(istype(F)) - wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static") + if(wet_setting >= TURF_WET_ICE) + wet_overlay = image('icons/effects/water.dmi', src, "ice_floor") + else + wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static") else wet_overlay = image('icons/effects/water.dmi', src, "wet_static") overlays += wet_overlay @@ -83,6 +86,9 @@ if(!(prob(30) && M.slip("icy floor", 4, 2, tilesSlipped = 1, walkSafely = 1))) M.inertia_dir = 0 + if(TURF_WET_PERMAFROST) // Permafrost + M.slip("icy floor", 0, 5, tilesSlipped = 1, walkSafely = 0, slipAny = 1) + /turf/simulated/ChangeTurf(var/path) . = ..() queue_smooth_neighbors(src) diff --git a/icons/effects/water.dmi b/icons/effects/water.dmi index 1bccfad7773..f0368e72852 100644 Binary files a/icons/effects/water.dmi and b/icons/effects/water.dmi differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index be866dc4275..e1b2164a39a 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ