Revert "The winter update, part 2"

This commit is contained in:
d3athrow
2014-12-16 12:15:01 -06:00
parent 1ddc92bd4a
commit 26626a1aa0
33 changed files with 52 additions and 1033 deletions

View File

@@ -279,7 +279,6 @@
#include "code\game\gamemodes\events\biomass.dm"
#include "code\game\gamemodes\events\black_hole.dm"
#include "code\game\gamemodes\events\clang.dm"
#include "code\game\gamemodes\events\cosmic_freeze.dm"
#include "code\game\gamemodes\events\dust.dm"
#include "code\game\gamemodes\events\miniblob.dm"
#include "code\game\gamemodes\events\ninja_abilities.dm"
@@ -713,7 +712,6 @@
#include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\safe.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\snow.dm"
#include "code\game\objects\structures\support_rail.dm"
#include "code\game\objects\structures\tables_racks.dm"
#include "code\game\objects\structures\tank_dispenser.dm"
@@ -952,7 +950,6 @@
#include "code\modules\events\carp_migration.dm"
#include "code\modules\events\comms_blackout.dm"
#include "code\modules\events\communications_blackout.dm"
#include "code\modules\events\cosmic_freeze.dm"
#include "code\modules\events\disease_outbreak.dm"
#include "code\modules\events\electrical_storm.dm"
#include "code\modules\events\event.dm"
@@ -1251,7 +1248,6 @@
#include "code\modules\mob\living\simple_animal\hostile\retaliate\cluwne.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\snowman.dm"
#include "code\modules\mob\new_player\login.dm"
#include "code\modules\mob\new_player\logout.dm"
#include "code\modules\mob\new_player\new_player.dm"

View File

@@ -1,25 +0,0 @@
/proc/cosmic_freeze_event()
var/list/turf/simulated/floor/turfs = list()
var/area/A = locate(pick(typesof(/area/hallway,/area/crew_quarters,/area/maintenance)))
var/area/B = pick(A.related)
for(var/turf/simulated/floor/F in B.contents)
if(F.z == map.zMainStation)
var/blocked = 0
for(var/atom/AT in F)
if(AT.density)
blocked = 1
if(!blocked)
turfs += F
if(turfs.len)
var/turf/simulated/floor/T = pick(turfs)
new/obj/structure/snow/cosmic(T)
message_admins("<span class='notice'>Event: Cosmic Snow Storm spawned at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[T.loc] ([T.x],[T.y],[T.z])</a></span>")
return T
else
return .()

View File

@@ -181,21 +181,15 @@
/obj/machinery/alarm/process()
var/turf/simulated/location = loc
if(!istype(location)) return//returns if loc is not simulated
var/datum/gas_mixture/environment = location.return_air()
if(stat & (FROZEN))
if(environment.temperature >= MELTPOINT_SNOW)
visible_message("The ice on \the [src] melts away. It should be operational once again.")
stat &= ~FROZEN
update_icon()
return
if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2)
use_power = 0
return
var/turf/simulated/location = loc
if(!istype(location)) return//returns if loc is not simulated
var/datum/gas_mixture/environment = location.return_air()
// Handle temperature adjustment here.
if(environment.temperature < target_temperature - 2 || environment.temperature > target_temperature + 2 || regulating_temperature)
//If it goes too far, we should adjust ourselves back before stopping.
@@ -319,14 +313,9 @@
return 0
/obj/machinery/alarm/update_icon()
overlays = list()
if(stat & FROZEN)
overlays += image(icon,"alarmf")
if(wiresexposed)
icon_state = "alarmx"
return
if((stat & (NOPOWER|BROKEN)) || shorted)
icon_state = "alarmp"
return
@@ -655,10 +644,6 @@
/obj/machinery/alarm/interact(mob/user)
if(stat & FROZEN)
user << "If only you could somehow melt the ice covering \the [src]'s interface..."
return
user.set_machine(src)
if(buildstage!=2)
@@ -845,24 +830,6 @@
*/
src.add_fingerprint(user)
if(stat & FROZEN)
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(!WT.isOn()) return
if (WT.get_fuel() < 5) // uses up 5 fuel.
user << "<span class='warning'>You need more fuel to complete this task.</span>"
return
user << "You begin melting the ice on \the [src]."
playsound(get_turf(src), pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1)
if(do_after(user, 50))
if(!src || !WT.remove_fuel(5, user)) return
user << "You melt the ice. \The [src] should be operational once again."
stat &= ~FROZEN
update_icon()
return ..()
switch(buildstage)
if(2)
if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up.

View File

@@ -33,7 +33,6 @@ var/const/HOLOPAD_MODE = 0
name = "\improper AI holopad"
desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely."
icon_state = "holopad0"
layer = 2.45//same layer as vents
var/mob/living/silicon/ai/master//Which AI, if any, is controlling the object? Only one AI may control a hologram at any time.
var/last_request = 0 //to prevent request spam. ~Carn
var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating.

View File

@@ -15,7 +15,6 @@
var/size = 3.0
var/obj/item/gift = null
w_class = 3.0
autoignition_temperature=AUTOIGNITION_PAPER
/obj/item/weapon/gift/small
icon_state = "gift-small"
@@ -38,11 +37,6 @@
del(src)
return
/obj/item/weapon/gift/ashify()//so the content of player-made gifts can be recovered.
if(gift)
gift.loc = src.loc
..()
////WINTER GIFTS////
/obj/item/weapon/winter_gift
@@ -52,7 +46,6 @@
icon_state = "gift"
item_state = "gift"
w_class = 4.0
autoignition_temperature=AUTOIGNITION_PAPER
/obj/item/weapon/winter_gift/New()
..()
@@ -140,8 +133,6 @@
/obj/item/clothing/tie/horrible,
/obj/item/device/maracas,
/obj/item/weapon/gun/energy/temperature,
/obj/item/weapon/shovel,
/obj/item/clothing/shoes/galoshes,
)
var/obj/item/I = new gift_type(M)
@@ -152,7 +143,6 @@
qdel(src)
return
//christmas and festive food
/obj/item/weapon/winter_gift/food/attack_self(mob/M as mob)
var/gift_type = pick(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake,
@@ -168,18 +158,10 @@
qdel(src)
return
//warm clothes
/obj/item/weapon/winter_gift/cloth/attack_self(mob/M as mob)
if(prob(30))
cloth_bundle()
M << "<span class='notice'>You unwrapped a bundle of clothes! Looks comfy!</span>"
qdel(src)
return
var/gift_type = pick(
/obj/item/clothing/gloves/black,
/obj/item/clothing/head/ushanka,
/obj/item/clothing/head/bearpelt,
)
var/obj/item/I = new gift_type(M)
@@ -190,46 +172,11 @@
qdel(src)
return
/obj/item/weapon/winter_gift/cloth/proc/cloth_bundle()
var/bundle = pick(
3;"batman",
10;"russian fur",
10;"chicken",
8;"pirate captain",
2;"cuban pete"
)
switch(bundle)
if("batman")
new /obj/item/weapon/storage/belt/security/batmanbelt(get_turf(loc))
new /obj/item/clothing/head/batman(get_turf(loc))
new /obj/item/clothing/gloves/batmangloves(get_turf(loc))
new /obj/item/clothing/shoes/jackboots/batmanboots(get_turf(loc))
new /obj/item/clothing/under/batmansuit(get_turf(loc))
if("russian fur")
new /obj/item/clothing/suit/russofurcoat(get_turf(loc))
new /obj/item/clothing/head/russofurhat(get_turf(loc))
if("chicken")
new /obj/item/clothing/head/chicken(get_turf(loc))
new /obj/item/clothing/suit/chickensuit(get_turf(loc))
if("pirate captain")
new /obj/item/clothing/glasses/eyepatch(get_turf(loc))
new /obj/item/clothing/head/hgpiratecap(get_turf(loc))
new /obj/item/clothing/suit/hgpirate(get_turf(loc))
new /obj/item/clothing/under/captain_fly(get_turf(loc))
new /obj/item/clothing/shoes/jackboots(get_turf(loc))
if("cuban pete")
new /obj/item/clothing/head/collectable/petehat(get_turf(loc))
new /obj/item/device/maracas(get_turf(loc))
new /obj/item/device/maracas(get_turf(loc))
//dangerous items
/obj/item/weapon/winter_gift/special/attack_self(mob/M as mob)
var/gift_type = pick(
/obj/item/device/fuse_bomb,
/obj/item/weapon/card/emag,
/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned,
/obj/item/weapon/tome,
)
var/obj/item/I = new gift_type(M)
@@ -258,16 +205,6 @@
qdel(src)
return
//black gifts have 2% chance to spawn by default.
/obj/item/weapon/winter_gift/proc/pick_a_gift(var/turf/T,var/special_chance = 2)
var/gift_type = pick(
50;/obj/item/weapon/winter_gift/regular,
25;/obj/item/weapon/winter_gift/food,
25;/obj/item/weapon/winter_gift/cloth,
special_chance;/obj/item/weapon/winter_gift/special,
)
new gift_type(T)
////STRANGE PRESENTS(wrapped people)////
/obj/effect/spresent
@@ -285,7 +222,12 @@
user << "<span class='notice'>You can't move.</span>"
/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wirecutters))
..()
if (!istype(W, /obj/item/weapon/wirecutters))
user << "<span class='notice'>You need wirecutters for that.</span>"
return
user << "<span class='notice'>You cut open the present.</span>"
for(var/mob/M in src) //Should only be one but whatever.
@@ -294,13 +236,7 @@
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
qdel(src)
else
user << "<span class='notice'>You need wirecutters for that.</span>"
return ..()
del(src)
/*
* Wrapping Paper
@@ -394,7 +330,7 @@
if (src.amount <= 0)
new /obj/item/weapon/c_tube( src.loc )
qdel(src)
del(src)
return
/obj/item/weapon/wrapping_paper/afterattack(var/obj/target as obj, mob/user as mob)

View File

@@ -1,580 +0,0 @@
//////SNOW//////(winter 2014, by Deity Link)
#define SNOWCOVERING_FULL 2
#define SNOWCOVERING_MEDIUM 1
#define SNOWCOVERING_LITTLE 0
/obj/structure/snow
name = "snow"
layer = 2.5//above the plating and the vents, bellow most items and structures
icon = 'icons/turf/snow.dmi'
icon_state = "snow"
alpha = 230
anchored = 1
density = 0
mouse_opacity = 1
var/snow_amount = SNOWCOVERING_FULL
var/list/foliage = list(
"snowgrass1bb",
"snowgrass2bb",
"snowgrass3bb",
"snowgrass1gb",
"snowgrass2gb",
"snowgrass3gb",
"snowgrassall1",
"snowgrassall2",
"snowgrassall3",
)
/obj/structure/snow/New()
..()
if(prob(17))
overlays += image('icons/obj/flora/snowflora.dmi',pick(foliage))
/obj/structure/snow/attackby(obj/item/W,mob/user)
if(istype(W,/obj/item/weapon/shovel))//using a shovel or spade harvests some snow and let's you click on the lower layers
if(snow_amount != SNOWCOVERING_LITTLE)
snow_amount = SNOWCOVERING_LITTLE
icon_state = "snow_dug"
mouse_opacity = 0
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
sleep(400)
icon_state = "snow_grabbed"
snow_amount = SNOWCOVERING_MEDIUM
mouse_opacity = 1
sleep(400)
if(snow_amount != SNOWCOVERING_LITTLE)
icon_state = "snow"
snow_amount = SNOWCOVERING_FULL
else
user << "There isn't much snow left to dig. It might come back later."
/obj/structure/snow/attack_hand(mob/user)
if(snow_amount != SNOWCOVERING_FULL) return
playsound(get_turf(src), "rustle", 50, 1)
user << "<span class='notice'>You start digging the snow with your hands.</span>"
if(do_after(user,30))
snow_amount = SNOWCOVERING_MEDIUM
user << "<span class='notice'>You form a snowball in your hands.</span>"
user.put_in_hands(new /obj/item/stack/sheet/snow())
icon_state = "snow_grabbed"
sleep(400)
if(snow_amount != SNOWCOVERING_LITTLE)
icon_state = "snow"
snow_amount = SNOWCOVERING_FULL
return
//////COSMIC SNOW(the one that spreads everywhere)//////
/obj/structure/snow/cosmic
desc = "Winter is coming."
var/list/block_spread_turf = list(
/turf/space,
/turf/unsimulated,
)
var/list/block_spread_obj = list( //these objects always block the spread of the snow
/obj/structure/plasticflaps/mining,
/obj/structure/snow,
/obj/effect/forcefield,
)
var/list/block_spread_density = list( //these objects only block the spread of the snow if they are dense
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock,
/obj/machinery/door/morgue,
/obj/machinery/door/poddoor,
)
var/datum/gas_mixture/env = null
/obj/structure/snow/cosmic/New()
..()
snow_tiles++
var/blocked = 0
for(var/atom/A in get_turf(src))
if(A.density)
blocked = 1
if((snow_tiles >= COSMICFREEZE_LEVEL_1) && !blocked && prob(15))
if(prob(30))
new/obj/structure/snow_flora/sappling/pine(get_turf(src))
else
new/obj/structure/snow_flora/sappling(get_turf(src))
if((snow_tiles >= COSMICFREEZE_LEVEL_2) && !blocked && prob(2))
new/mob/living/simple_animal/hostile/retaliate/snowman(get_turf(src))
if(!bear_invasion && (snow_tiles >= COSMICFREEZE_LEVEL_4))
bear_invasion = 1
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
if(prob(50))
new /mob/living/simple_animal/hostile/bear(C.loc)
var/turf/simulated/TS = get_turf(src)
if(!istype(TS)) return
env = TS.return_air()
chill()
spawn(5)//so the parent snow doesn't have to wait for its children's spread to finish, to prevent some sort of gigantic recursion that only lets snow duplicate toward North.
if(src)
spread()
for(var/obj/machinery/alarm/A in get_turf(src))
A.stat |= FROZEN
A.rcon_setting = RCON_NO
A.update_icon()
/obj/structure/snow/cosmic/proc/update_env_air()
var/turf/simulated/TS = get_turf(src)
if(!istype(TS)) return
env = TS.return_air()
/obj/structure/snow/cosmic/proc/spread()
if(!src) return
update_env_air()
if(!env) return
if(env.temperature > MELTPOINT_SNOW)//above 30<33>C, the snow melts away)
var/turf/simulated/TS = get_turf(src)
if(!istype(TS)) return
TS.wet(300)
snow_tiles--
qdel(src)
return
if(env.temperature < SNOWSPREAD_MAXTEMP)//the cosmic snow only spreads when the temperature is bellow 23<32>C
for(var/i in cardinal)
var/turf/T = get_step(src,i)
if(is_type_in_list(T,block_spread_turf))
continue
if(T.density)
continue //walls, duh
var/can_spread = 1
for(var/blockingA in block_spread_obj)
if(locate(blockingA) in T)
can_spread = 0
break
for(var/blockingB in block_spread_density)
var/obj/BB = (locate(blockingB) in T)
if(BB && BB.density)
can_spread = 0
break
//checking for windows and windoors on the source tile
for(var/obj/structure/window/WA in get_turf(src))
if(WA.dir & get_dir(get_turf(src),T))
can_spread = 0
break
for(var/obj/machinery/door/window/WB in get_turf(src))
if((WB.dir & get_dir(get_turf(src),T)) && WB.density)
can_spread = 0
break
//checking for windows and windoors on the destination tile
for(var/obj/structure/window/WA in T)
if(WA.is_fulltile())
can_spread = 0
break
if(WA.dir & get_dir(T,get_turf(src)))
can_spread = 0
break
for(var/obj/machinery/door/window/WB in T)
if((WB.dir & get_dir(T,get_turf(src))) && WB.density)
can_spread = 0
break
var/datum/gas_mixture/env2 = T.return_air()
if(can_spread && (env2.temperature < MELTPOINT_SNOW))
new/obj/structure/snow/cosmic(T)
spawn(spread_delay)
.()
/obj/structure/snow/cosmic/proc/chill()
if(!src) return
if(env.temperature > COSMICSNOW_MINIMALTEMP)//the snow will slowly lower the temperature until -40<34>C.
env.temperature -= (0.01 * snow_amount)
spawn(chill_delay)
.()
//////SNOWBALLS//////
/obj/item/stack/sheet/snow
name = "snow"
desc = "Technically water."
singular_name = "snow ball"
icon_state = "snow"
melt_temperature = MELTPOINT_SNOW
force = 0
throwforce = 1
throw_speed = 3
throw_range = 6
var/spawn_loc = null
/obj/item/stack/sheet/snow/New(var/loc, var/amount=null)
recipes = snow_recipes
pixel_x = rand(-13,13)
pixel_y = rand(-13,13)
spawn_loc = src.loc
spawn(SNOWBALL_TIMELIMIT)
remove_snowball()
return ..()
/obj/item/stack/sheet/snow/proc/remove_snowball()
if(src && (src.loc == spawn_loc) && istype(src.loc,/turf))
qdel(src)
/obj/item/stack/sheet/snow/melt()
var/turf/T = get_turf(src)
if(istype(T,/turf/simulated))
var/turf/simulated/TS = T
TS.wet(100)
qdel(src)
/obj/item/stack/sheet/snow/throw_at(atom/target, range, speed)
playsound(src.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
..()
/obj/item/stack/sheet/snow/throw_impact(atom/hit_atom)
if(istype(hit_atom,/mob/living/carbon/))
var/mob/living/carbon/C = hit_atom
if(C.stuttering < 1 && (!(M_HULK in C.mutations)))
C.stuttering = 1
C.Weaken(1)
C.Stun(1)
playsound(C.loc, "swing_hit", 50, 1)
if(C.bodytemperature >= 265)
C.bodytemperature -= 5
else if(istype(hit_atom,/mob/living/simple_animal/hostile/retaliate/snowman))
var/mob/living/simple_animal/hostile/retaliate/snowman/S = hit_atom
playsound(S.loc, "swing_hit", 50, 1)
if(S.enemies.len)
if(prob(10))
S.enemies = list()
S.LoseTarget()
S.say("Ah, I give up, you've got a pretty good swing.")
call(/obj/item/weapon/winter_gift/proc/pick_a_gift)(S.loc)
else
S.say(pick("Didn't feel anything","You call that snowballing?"))
else
S.say(pick("A fight? With pleasure.","Don't forget that you're the one who started it all."))
S.Retaliate()
if(S.bodytemperature >= COSMICSNOW_MINIMALTEMP)
S.bodytemperature -= 5
else ..()
var/global/list/datum/stack_recipe/snow_recipes = list (
new/datum/stack_recipe("snowman", /mob/living/simple_animal/hostile/retaliate/snowman, 10, time = 50, one_per_turf = 0, on_floor = 1),
new/datum/stack_recipe("snow barricade", /obj/structure/barricade/snow, 20, time = 50, one_per_turf = 1, on_floor = 1),
)
//////BARRICADE//////
/obj/structure/barricade/snow
name = "snow barricade"
desc = "This space is blocked off by a snow barricade."
icon = 'icons/obj/structures.dmi'
icon_state = "snowbarricade"
anchored = 1.0
density = 1.0
var/health = 50.0
var/maxhealth = 50.0
/obj/structure/barricade/snow/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/stack/sheet/snow))
if (src.health < src.maxhealth)
visible_message("<span class='warning'>[user] begins to repair the [src]!</span>")
if(do_after(user,20))
src.health = src.maxhealth
W:use(1)
visible_message("<span class='warning'>[user] repairs the [src]</span>")
return
else
return
return
else
switch(W.damtype)
if("fire")
src.health -= W.force * 1
if("brute")
src.health -= W.force * 0.75
else
if (src.health <= 0)
visible_message("<span class='danger'>\the [src] is smashed apart!</span>")
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
del(src)
..()
/obj/structure/barricade/snow/ex_act(severity)
switch(severity)
if(1.0)
visible_message("<span class='danger'>\the [src] is blown apart!</span>")
qdel(src)
return
if(2.0)
src.health -= 25
if (src.health <= 0)
visible_message("<span class='danger'>\the [src] is blown apart!</span>")
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
qdel(src)
return
/obj/structure/barricade/snow/meteorhit()
visible_message("<span class='danger'>\the [src] is blown apart!</span>")
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
new /obj/item/stack/sheet/snow(get_turf(src), 1)
del(src)
return
/obj/structure/barricade/snow/blob_act()
src.health -= 25
if (src.health <= 0)
visible_message("<span class='danger'>The blob eats through \the [src]!</span>")
del(src)
return
/obj/structure/barricade/snow/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)//So bullets will fly over and stuff.
if(air_group || (height==0))
return 1
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1
else
return 0
//////TREES//////
/obj/structure/snow_flora
name = "snow_flora"
icon = 'icons/obj/flora/snowflora.dmi'
icon_state = "snowbush1"
autoignition_temperature=AUTOIGNITION_WOOD
/obj/structure/snow_flora/sappling
name = "sappling"
desc = "Shh, it's growing..."
density = 0
anchored = 1
icon = 'icons/obj/flora/snowflora.dmi'
icon_state = "snowbush1"
var/growth = 0
var/growthlevel = 20
pixel_x = 16
pixel_y = 21
/obj/structure/snow_flora/sappling/New()
..()
icon_state = pick(
"snowbush1",
"snowbush2",
"snowbush3",
"snowbush4",
"snowbush5",
"snowbush6",
)
growthlevel = rand(15,25)
growing()
/obj/structure/snow_flora/sappling/proc/growing()
if(growth > growthlevel)
new/obj/structure/snow_flora/tree(get_turf(src))
qdel(src)
if(locate(/obj/structure/snow) in get_turf(src))
growth++
spawn(40)
growing()
else
qdel(src)
/obj/structure/snow_flora/sappling/attackby(obj/item/W,mob/user)
var/list/cutting = list(
/obj/item/weapon/minihoe,
/obj/item/weapon/scythe,
)
if(is_type_in_list(W,cutting))
qdel(src)
/obj/structure/snow_flora/sappling/pine
pixel_x = 0
pixel_y = 0
growthlevel = 30
/obj/structure/snow_flora/sappling/pine/New()
..()
growthlevel = rand(25,35)
/obj/structure/snow_flora/sappling/pine/growing()
if(growth > growthlevel)
if(prob(20))
new/obj/structure/snow_flora/tree/pine/xmas(get_turf(src))
else
new/obj/structure/snow_flora/tree/pine(get_turf(src))
qdel(src)
if(locate(/obj/structure/snow) in get_turf(src))
growth++
spawn(40)
growing()
else
qdel(src)
/obj/structure/snow_flora/tree
name = "tree"
desc = "Where's my axe when I need it?"
density = 0
anchored = 1
layer = FLY_LAYER
icon = 'icons/obj/flora/deadtrees.dmi'
icon_state = "tree_1"
var/axe_hits = 0
pixel_y = 21//regular dead trees appear slightly to the north east, so we can justify that they don't block players.
/obj/structure/snow_flora/tree/New()
..()
icon_state = pick(
"tree_1",
"tree_2",
"tree_3",
"tree_4",
"tree_5",
"tree_6",
)
idle()
/obj/structure/snow_flora/tree/proc/idle()
if(!(locate(/obj/structure/snow) in get_turf(src)))
axe_hits++
if(axe_hits >= 3)
new/obj/item/weapon/grown/log(get_turf(src))
qdel(src)
return
spawn(50)
if(src)
idle()
/obj/structure/snow_flora/tree/attackby(obj/item/W,mob/user)
var/list/cutting = list(
/obj/item/weapon/hatchet,
/obj/item/weapon/twohanded/fireaxe,
)
if(is_type_in_list(W,cutting))
axe_hits++
user.visible_message("<span class='warning'>[user] hits \the [src] with \the [W].</span>")
if(axe_hits >= 3)
new/obj/item/weapon/grown/log(get_turf(src))
qdel(src)
/obj/structure/snow_flora/tree/pine
name = "pine tree"
desc = "O Tannenbaum..."
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_1"
density = 1
pixel_x = -16
pixel_y = 0
/obj/structure/snow_flora/tree/pine/New()
..()
icon_state = pick(
"pine_1",
"pine_2",
"pine_3",
)
if((snow_tiles >= COSMICFREEZE_LEVEL_3) && prob(20))
new /mob/living/simple_animal/hostile/giant_spider/spiderling(get_turf(src))
if((snow_tiles >= COSMICFREEZE_LEVEL_5) && prob(20))
new /mob/living/simple_animal/hostile/bear(get_turf(src))
/obj/structure/snow_flora/tree/pine/attackby(obj/item/W,mob/user)
var/list/cutting = list(
/obj/item/weapon/hatchet,
/obj/item/weapon/twohanded/fireaxe,
)
if(is_type_in_list(W,cutting))
axe_hits++
user.visible_message("<span class='warning'>[user] hits \the [src] with \the [W].</span>")
if(axe_hits >= 5)
new/obj/item/weapon/grown/log(get_turf(src))
new/obj/item/weapon/grown/log(get_turf(src))
new/obj/item/weapon/grown/log(get_turf(src))
qdel(src)
/obj/structure/snow_flora/tree/pine/idle()
if(!(locate(/obj/structure/snow) in get_turf(src)))
axe_hits++
if(axe_hits >= 5)
new/obj/item/weapon/grown/log(get_turf(src))
new/obj/item/weapon/grown/log(get_turf(src))
new/obj/item/weapon/grown/log(get_turf(src))
qdel(src)
return
spawn(50)
if(src)
idle()
/obj/structure/snow_flora/tree/pine/xmas
name = "christmas tree"
desc = "Heck yeah!"
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_c"
/obj/structure/snow_flora/tree/pine/xmas/New()
..()
for(var/turf/simulated/floor/T in orange(1,src))
var/blocked = 0
for(var/atom/A in T)
if(A.density)
blocked = 1
if(blocked) continue
for(var/i=1,i<=rand(1,3),i++)
call(/obj/item/weapon/winter_gift/proc/pick_a_gift)(T,5)
#undef SNOWCOVERING_FULL
#undef SNOWCOVERING_MEDIUM
#undef SNOWCOVERING_LITTLE

View File

@@ -349,9 +349,3 @@ var/list/score=list(
"dmgestdamage" = 0,
"dmgestkey" = null
)
//Cosmic Snow Storm event
/var/global/snow_tiles = 0
/var/global/bear_invasion = 0
/var/global/spread_delay = 5
/var/global/chill_delay = 20

View File

@@ -706,7 +706,6 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];secretsfun=spacevines'>Spawn Space-Vines</A><BR>
<A href='?src=\ref[src];secretsfun=comms_blackout'>Trigger a communication blackout</A><BR>
<A href='?src=\ref[src];secretsfun=pda_spam'>Trigger a wave of PDA spams</A><BR>
<A href='?src=\ref[src];secretsfun=freeze'>Spawn a cosmic snow storm</A><BR>
<BR>
<B>Fun Secrets</B><BR>
<BR>

View File

@@ -2370,11 +2370,6 @@
feedback_add_details("admin_secrets_fun_used","PDA")
new /datum/event/pda_spam
if("freeze")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","CF")
new /datum/event/cosmic_freeze
if("spaceninja")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SN")

View File

@@ -3,12 +3,6 @@
var/list/species_restricted = null //Only these species can wear this kit.
var/wizard_garb = 0 // Wearing this empowers a wizard.
//temperatures in Kelvin. These default values won't affect protections in any way.
var/cold_breath_protection = 300 //that cloth protects its wearer's breath from cold air down to that temperature
var/hot_breath_protection = 300 //that cloth protects its wearer's breath from hot air up to that temperature
var/cold_speed_protection = 300 //that cloth allows its wearer to keep walking at normal speed at lower temperatures
//BS12: Species-restricted clothing check.
/obj/item/clothing/mob_can_equip(M as mob, slot)
@@ -227,8 +221,6 @@ BLIND // can't see anything
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona","Muton")
cold_breath_protection = 230
/obj/item/clothing/suit/space
name = "Space suit"
desc = "A suit that protects against low pressure environments. Has a big 13 on the back."

View File

@@ -235,8 +235,6 @@
flags = FPRINT | TABLEPASS | BLOCKHAIR
siemens_coefficient = 2.0
cold_breath_protection = 230
/obj/item/clothing/head/bearpelt
name = "bear pelt hat"
desc = "Fuzzy."
@@ -245,8 +243,6 @@
flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
siemens_coefficient = 2.0
cold_breath_protection = 230
/obj/item/clothing/head/xenos
name = "xenos helmet"
icon_state = "xenos"
@@ -301,5 +297,3 @@
item_state = "russofurhat"
flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
flags_inv = HIDEEARS
cold_breath_protection = 230

View File

@@ -104,8 +104,6 @@
item_state = "ushankadown"
flags_inv = HIDEEARS
cold_breath_protection = 230
/obj/item/clothing/head/ushanka/attack_self(mob/user as mob)
if(src.icon_state == "ushankadown")
src.icon_state = "ushankaup"

View File

@@ -8,8 +8,6 @@
w_class = 2
species_fit = list("Vox")
cold_breath_protection = 230
/obj/item/clothing/mask/luchador
name = "Luchador Mask"
desc = "Worn by robust fighters, flying high to defeat their foes!"

View File

@@ -38,12 +38,7 @@
//scarves (fit in in mask slot)
/obj/item/clothing/mask/scarf
name = "scarf"
cold_breath_protection = 230
/obj/item/clothing/mask/scarf/blue
/obj/item/clothing/mask/bluescarf
name = "blue neck scarf"
desc = "A blue neck scarf."
icon_state = "blueneckscarf"
@@ -52,7 +47,7 @@
w_class = 2
gas_transfer_coefficient = 0.90
/obj/item/clothing/mask/scarf/redwhite
/obj/item/clothing/mask/redscarf
name = "red scarf"
desc = "A red and white checkered neck scarf."
icon_state = "redwhite_scarf"
@@ -61,7 +56,7 @@
w_class = 2
gas_transfer_coefficient = 0.90
/obj/item/clothing/mask/scarf/green
/obj/item/clothing/mask/greenscarf
name = "green scarf"
desc = "A green neck scarf."
icon_state = "green_scarf"
@@ -70,7 +65,7 @@
w_class = 2
gas_transfer_coefficient = 0.90
/obj/item/clothing/mask/scarf/ninja
/obj/item/clothing/mask/ninjascarf
name = "ninja scarf"
desc = "A stealthy, dark scarf."
icon_state = "ninja_scarf"
@@ -119,8 +114,6 @@
w_class = 1
can_flip = 1
cold_breath_protection = 230
obj/item/clothing/mask/bandana/red
name = "red bandana"
icon_state = "bandred"

View File

@@ -91,8 +91,6 @@
siemens_coefficient = 0.7
species_fit = list("Vox")
cold_speed_protection = 230
/obj/item/clothing/shoes/jackboots/batmanboots
name = "batboots"
desc = "Criminal stomping boots for fighting crime and looking good."

View File

@@ -49,7 +49,6 @@
flags_inv = HIDEJUMPSUIT
species_fit = list("Vox")
cold_speed_protection = 230
/obj/item/clothing/suit/cyborg_suit
name = "cyborg suit"
@@ -152,8 +151,6 @@
flags_inv = HIDESHOES|HIDEJUMPSUIT
siemens_coefficient = 2.0
cold_speed_protection = 230
/obj/item/clothing/suit/monkeysuit
name = "Monkey Suit"
@@ -383,21 +380,15 @@
icon_state = "officersuit"
item_state = "officersuit"
cold_speed_protection = 230
/obj/item/clothing/suit/soldiercoat
name = "Soldier's Coat"
desc = "Ein Mantel gemacht, um die Verb<72>ndeten zu zerst<73>ren."
icon_state = "soldiersuit"
item_state = "soldiersuit"
cold_speed_protection = 230
/obj/item/clothing/suit/russofurcoat
name = "russian fur coat"
desc = "Let the land do the fighting for you."
icon_state = "russofurcoat"
item_state = "russofurcoat"
allowed = list(/obj/item/weapon/gun)
cold_speed_protection = 230

View File

@@ -1,23 +0,0 @@
/datum/event/cosmic_freeze
var/turf/starting_turf = null
/datum/event/cosmic_freeze/start()
starting_turf = cosmic_freeze_event()
/datum/event/cosmic_freeze/announce()
command_alert("Thermal scans of [starting_turf.loc] suggest that the close approach of a comet has somehow manifested a snow storm aboard the station. Allowing that storm to propagate through the station might have unforeseen consequences.", "Cosmic Snow Storm")
/*
/obj/structure/snowreader
name = "snowreader"
/obj/structure/snowreader/New()
read_snow()
/obj/structure/snowreader/proc/read_snow()
world << "there are [snow_tiles] tiles covered in snow"
sleep(30)
read_snow()
*/

View File

@@ -47,15 +47,6 @@ var/list/event_last_fired = list()
possibleEvents[/datum/event/electrical_storm] = 10
possibleEvents[/datum/event/wallrot] = 30
var/current_month = text2num(time2text(world.timeofday, "MM"))
switch(current_month)
if(12,1,2)
if(snow_tiles <= 10)
possibleEvents[/datum/event/cosmic_freeze] = 30
if(3 to 11)
if(snow_tiles == 0)
possibleEvents[/datum/event/cosmic_freeze] = 15
if(!spacevines_spawned)
possibleEvents[/datum/event/spacevine] = 15
if(minutes_passed >= 30 && active_with_role["Engineer"] > 1) // Give engineers time to not set up the engine

View File

@@ -8,8 +8,6 @@
var/plantname
var/potency = 1
autoignition_temperature=AUTOIGNITION_WOOD
/obj/item/weapon/grown/New()
..()

View File

@@ -53,7 +53,7 @@
return -1 // slimes become supercharged at high temperatures
if (bodytemperature < 183.222)
tally += (283.222 - bodytemperature) / 10 * 1.75
else if ((bodytemperature < 283.222) && !check_speed_protections())
else if (bodytemperature < 283.222)
tally += (283.222 - bodytemperature) / 10 * 1.75
@@ -62,15 +62,6 @@
return (tally+config.human_delay)
/mob/living/carbon/human/proc/check_speed_protections()
var/list/human_slots = get_cloth_slots()
for(var/obj/item/clothing/C in human_slots)
if(C.cold_speed_protection < bodytemperature)
return 1
return 0
/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
//Can we act
if(restrained()) return 0

View File

@@ -37,21 +37,6 @@
r_store,
s_store)
/mob/living/carbon/human/proc/get_cloth_slots()
return list(
back,
wear_mask,
belt,
wear_id,
ears,
glasses,
gloves,
head,
shoes,
wear_suit,
w_uniform,
)
/mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/W, list/slots, act_on_fail = 1)
for (var/slot in slots)
if (equip_to_slot_if_possible(W, slots[slot], 0))

View File

@@ -256,14 +256,14 @@ var/global/list/whitelisted_species = list("Human")
if( (abs(310.15 - breath.temperature) > 50) && !(M_RESIST_HEAT in H.mutations)) // Hot air hurts :(
if(H.status_flags & GODMODE) return 1 //godmode
if(breath.temperature < cold_level_1)
if(prob(20) && !check_breath_protections(H,breath.temperature))
H << "<span class='warning'>You feel your face freezing and an icicle forming in your lungs!</span>"
if(prob(20))
H << "\red You feel your face freezing and an icicle forming in your lungs!"
else if(breath.temperature > heat_level_1)
if(prob(20))
if(H.dna.mutantrace == "slime")
H << "<span class='warning'>You feel supercharged by the extreme heat!</span>"
H << "\red You feel supercharged by the extreme heat!"
else
H << "<span class='warning'>You feel your face burning and a searing heat in your lungs!</span>"
H << "\red You feel your face burning and a searing heat in your lungs!"
if(H.dna.mutantrace == "slime")
if(breath.temperature < cold_level_1)
@@ -271,7 +271,6 @@ var/global/list/whitelisted_species = list("Human")
H.fire_alert = max(H.fire_alert, 1)
if(H.dna.mutantrace != "slime")
if(!check_breath_protections(H,breath.temperature))
switch(breath.temperature)
if(-INFINITY to cold_level_3)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
@@ -298,15 +297,6 @@ var/global/list/whitelisted_species = list("Human")
H.fire_alert = max(H.fire_alert, 2)
return 1
/datum/species/proc/check_breath_protections(var/mob/living/carbon/human/H,var/temperature)
var/list/human_slots = H.get_cloth_slots()
for(var/obj/item/clothing/C in human_slots)
if((C.cold_breath_protection < temperature) || (C.hot_breath_protection > temperature))
return 1
return 0
// Used for species-specific names (Vox, etc)
/datum/species/proc/makeName(var/gender,var/mob/living/carbon/C=null)
if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))

View File

@@ -1,116 +0,0 @@
/mob/living/simple_animal/hostile/retaliate/snowman
name = "snowman"
desc = "Good day sir."
icon_state = "snowman"
icon_living = "snowman"
icon_dead = ""
speak = list("Good day sir.","Would you happen to have a carrot for my nose?","Cold day, isn't it?","What a pleasant weather.")
speak_emote = list("says")
emote_hear = list("says")
emote_see = list("hums")
speak_chance = 2.5
turns_per_move = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "hugs"
response_disarm = "gently pushes aside"
response_harm = "stomps"
friendly = "hugs"
faction = "snow"
health = 40
ranged = 1
retreat_distance = 5
minimum_distance = 3
projectilesound = 'sound/weapons/punchmiss.ogg'
projectiletype = /obj/item/projectile/snowball
environment_smash = 0
minbodytemp = 0
maxbodytemp = MELTPOINT_SNOW
heat_damage_per_tick = 5
bodytemperature = 270
var/obj/item/hat = null
var/obj/item/carrot = null
/mob/living/simple_animal/hostile/retaliate/snowman/Life()
..()
if(!ckey && !stat)
if(isturf(src.loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc.
turns_since_move++
if(turns_since_move >= turns_per_move)
Move(get_step(src,pick(4,8)))
turns_since_move = 0
if(!stat && enemies.len && prob(5))
enemies = list()
LoseTarget()
src.say("Whatever.")
if(stat)
visible_message("<span class='game say'><span class='name'>[src.name]</span> murmurs, [pick("Oh my snowballs...","I will...be back...")]</span>")
visible_message("\the [src] collapses in a pile of snow.")
var/turf/T = get_turf(src)
new /obj/item/stack/sheet/snow(T, 1)
new /obj/item/stack/sheet/snow(T, 1)
new /obj/item/stack/sheet/snow(T, 1)
if(hat)
hat.loc = T
if(carrot)
carrot.loc = T
del(src)
else if(fire_alert)
src.say(pick("Oh god the heat...","I'm meltiiinggg...","Someone turn off the heater!"))
regenerate_icons()
/mob/living/simple_animal/hostile/retaliate/snowman/Retaliate()
..()
if(!stat)
src.say(pick("You, come fight me!","I say!","Coward!"))
/mob/living/simple_animal/hostile/retaliate/snowman/attackby(var/obj/item/W, var/mob/user)
if(!carrot && istype(W, /obj/item/weapon/reagent_containers/food/snacks/grown/carrot))
visible_message("<span class='notice'>[user] puts \a [W] on \the [src]'s nose.</span>")
user.drop_item()
carrot = W
carrot.loc = src
overlays += "snowman_carrot"
speak -= "Would you happen to have a carrot for my nose?"
src.say("Ah, most excellent!")
if(prob(30))
call(/obj/item/weapon/winter_gift/proc/pick_a_gift)(src.loc)
else if(istype(W,/obj/item/clothing/head/))
if(hat)
hat.loc = get_turf(src)
overlays -= image('icons/mob/head.dmi', hat.icon_state)
hat = null
else
speak += "I feel so dandy!"
user.drop_item()
hat = W
hat.loc = src
overlays += image('icons/mob/head.dmi', hat.icon_state)
else ..()
/obj/item/projectile/snowball
name = "flying snowball"
desc = "Think fast!"
icon = 'icons/obj/items.dmi'
icon_state = "snow"
nodamage = 1
stun = 1
weaken = 1
stutter = 1
/obj/item/projectile/snowball/Bump(atom/A as mob|obj|turf|area)
.=..()
if(.)
playsound(A.loc, "swing_hit", 50, 1)
if(istype(A,/mob/living/carbon/))
var/mob/living/carbon/C = A
if(C.bodytemperature >= SNOWBALL_MINIMALTEMP)
C.bodytemperature -= 5

View File

@@ -3,8 +3,6 @@
icon = 'icons/mob/animal.dmi'
health = 20
maxHealth = 20
fire_dmi = 'icons/mob/OnFire.dmi'
fire_sprite = "Generic_mob_burning"
var/icon_living = ""
var/icon_dead = ""

View File

@@ -58,7 +58,7 @@
if(200 to 260)
name = "cold beam" //temp at which mobs start taking COLD_DAMAGE_LEVEL_1
icon_state = "temp_2"
if(120 to 200)
if(120 to 260)
name = "ice beam" //temp at which mobs start taking COLD_DAMAGE_LEVEL_2
icon_state = "temp_1"
if(-INFINITY to 120)
@@ -78,9 +78,6 @@
if(temperature > 500)//emagged
M.adjust_fire_stacks(0.5)
M.on_fire = 1
if(M.fire_dmi && M.fire_sprite)
M.fire_overlay = image(M.fire_dmi,M.fire_sprite)
M.overlays += M.fire_overlay
M.update_icon = 1
playsound(M.loc, 'sound/effects/bamf.ogg', 50, 0)
return 1

View File

@@ -421,7 +421,6 @@ var/MAX_EXPLOSION_RANGE = 14
#define POWEROFF 4 // tbd
#define MAINT 8 // under maintaince
#define EMPED 16 // temporary broken by EMP pulse
#define FROZEN 32 // frozen by cosmic snow
//bitflags for door switches.
#define OPEN 1
@@ -902,21 +901,6 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
#define MELTPOINT_STEEL 1510+T0C
#define MELTPOINT_SILICON 1687 // KELVIN
#define MELTPOINT_PLASTIC 180+T0C
#define MELTPOINT_SNOW 304.15 //about 30<33>C
// snow business
#define SNOWBALL_MINIMALTEMP 265 //about -10<31>C, the minimal temperature at which a thrown snowball can cool you down.
#define SNOWBALL_TIMELIMIT 400 //in deciseconds, how long after being spawn does the snowball disappears if it hasn't been picked up
#define SNOWSPREAD_MAXTEMP 296.15 //23<32>C, the maximal temperature (in Kelvin) at which cosmic snow will spread to adjacent tiles
#define COSMICSNOW_MINIMALTEMP 233 //-40<34>C, the lowest temperature at which Cosmic snow will cool down its surroundings
//the following defines refer to the number of cosmic snow tiles in the world.
#define COSMICFREEZE_LEVEL_1 200 //Cosmic snow now has a chance to spawn a sappling upon spreading.
#define COSMICFREEZE_LEVEL_2 400 //Cosmic snow now has a chance to spawn a snowman upon spreading.
#define COSMICFREEZE_LEVEL_3 600 //Pine Trees now has a chance to spawn a spiderling upon growing.
#define COSMICFREEZE_LEVEL_4 800 //(triggered once per round) Space bears spawn around the station.
#define COSMICFREEZE_LEVEL_5 1000 //Pine Trees now have a chance to spawn a Space Bear upon growing.
//used to define machine behaviour in attackbys and other code situations
#define EMAGGABLE 1 //can we emag it? If this is flagged, the machine calls emag()

View File

@@ -1,21 +0,0 @@
author: Deity Link
delete-after: true
changes:
- rscadd: Added a new random event, Cosmic Freeze! Has an higher chance to occur in December, January and February.
- rscadd: Added new structures, snow and cosmic snow. Cosmic snow is spawned on a tile somewhere on the station when the Cosmic Freeze begin. An alert message is broadcasted.
- rscadd: Cosmic snow will rapidly propagate on tiles with an ambient air temperature of at most 23 degree Celsius. Only walls, closed doors, windows, and airtight airlocks can block its propagation.
- rscadd: Cosmic snow slowly lowers the ambient temperature. dozen of tile won't have too much of an impact, but since they propagate quickly, the temperature might very quickly dive all the way to the minimal -40 degrees Celsius.
- rscadd: Attacking the snow with bare hands will allow you to dig up a snowball. Attacking the snow with a shovel or spade will instantly dig up 3 snowballs, additionally, digging up the snow allows you to click on objects bellow the snow.
- rscadd: When dug, the snow will slowly regenerate. It takes 40 to 80 seconds for a snow tile to become full again.
- rscadd: Added a new sheet item, snowballs. Snowball can be stacked (like wooden planks or metal sheets), thrown at people to stun them for half a second, or used to build snow fortifications and snowmen.
- rscadd: Added a new mob, Snowmen. These talkative mobs are of the "retaliate" family. Just like goats or clowns, they will attack those who anger them. However, snowmen attack by throwing snowballs. Making them mostly inoffensive. Additionally, they might get bored of fighting more or less quickly.
- rscadd: You can "defeat" a snowman in a snowball fight by throwing enough snowballs at him before he gets bored. Doing so, he will award you a random winter gift.
- rscadd: Snowmen also have a chance to offer you a gift when you equip them with a carrot. You can also give them any hat. They will drop the hat whether when you give them a new one, or when they die.
- rscadd: Snowmen, Snowballs and Snow itself have a melt temperature. When reached, the snowmen start taking heavy damage, while the snow will disappear and wet the floor in its place.
- rscadd: As the total number of cosmic snow tiles on the station increases, new cosmic snow tiles have a chance to trigger various happenings: they can spawn a sappling, which will mature after 1-2 minutes into either a dead tree or a pine tree, and above a certain number they will even trigger a migration of space bear (similar to space carp migrations).
- rscadd: Above a certain number of snow tiles, pine trees also have a chance to spawn either spiderlings or bears when they mature.
- rscadd: When pine trees mature, they have a chance to become a Christmas Tree, in which case they will spawn tons of gifts on their surrounding tiles. Hunt for the christmas trees people!
- rscadd: Dead trees and pine trees can be cut down with either a hatchet or a fire axe. The sapplings can also be removed with a mini-hoe. Removing the snow under a sappling will kill it. Removing the snow under a tree will periodically damage it, until it falls. Trees spawn a few logs when they fall.
- rscadd: If a cosmic snow spawns on a tile occupied by an Air Alarm, the air alarm will enter a frozen state. Its remote control will be deactivated, and it won't trigger any alarms. The air alarm can be unfrozen by using a lit welding tool on it.
- rscadd: Clothes now have hot breath and cold breath resistance variables. Basically, wearing items with good breath resistance will protect you from the damage usually dealt by breathing air of extreme temperatures. (scarves, balaclava, chicken head, and a few other items will protect your breath from the cold down to -70 degrees Celsius.
- wip: (wip)Clothes now have a cold speed protection var. Wearing items with a good cold speed protection lets you run at normal speed at lower temperatures. This is temporary until I actually make clothes warm up their users (hopefully in part 3).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 24 KiB