Revert "The winter update, part 2"
@@ -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"
|
||||
|
||||
@@ -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 .()
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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"
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
*/
|
||||
@@ -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
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
var/plantname
|
||||
var/potency = 1
|
||||
|
||||
autoignition_temperature=AUTOIGNITION_WOOD
|
||||
|
||||
/obj/item/weapon/grown/New()
|
||||
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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).
|
||||
|
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 24 KiB |