[MIRROR] Icebox QoL minus features (#3459)

* Icebox QoL minus features (#56472)

* Icebox QoL minus features

Co-authored-by: Whoneedspacee <yougotreallyowned@gmail.com>
This commit is contained in:
SkyratBot
2021-02-21 22:02:33 +00:00
committed by GitHub
co-authored by Whoneedspacee
parent 2d7650c37b
commit fc2fc8db6b
36 changed files with 11651 additions and 11372 deletions
+2 -1
View File
@@ -70,7 +70,6 @@ SUBSYSTEM_DEF(mapping)
repopulate_sorted_areas()
process_teleport_locs() //Sets up the wizard teleport locations
preloadTemplates()
run_map_generation()
#ifndef LOWMEMORYMODE
// Create space ruin levels
@@ -119,6 +118,8 @@ SUBSYSTEM_DEF(mapping)
seedRuins(space_ruins, CONFIG_GET(number/space_budget), list(/area/space), space_ruins_templates)
loading_ruins = FALSE
#endif
// Run map generation after ruin generation to prevent issues
run_map_generation()
// Add the transit level
transit = add_new_zlevel("Transit/Reserved", list(ZTRAIT_RESERVED = TRUE))
repopulate_sorted_areas()
+14 -11
View File
@@ -1,22 +1,19 @@
/datum/map_generator/cave_generator
var/name = "Cave Generator"
///Weighted list of the types that spawns if the turf is open
var/open_turf_types = list(/turf/open/floor/plating/asteroid = 1)
var/open_turf_types = list(/turf/open/floor/plating/asteroid/airless = 1)
///Weighted list of the types that spawns if the turf is closed
var/closed_turf_types = list(/turf/closed/mineral/random/volcanic = 1)
var/closed_turf_types = list(/turf/closed/mineral/random = 1)
///Weighted list of extra features that can spawn in the area, such as geysers.
var/list/feature_spawn_list = list(/obj/structure/geyser/random = 1)
///Weighted list of mobs that can spawn in the area.
var/list/mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /obj/structure/spawner/lavaland/goliath = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 4, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
///Weighted list of flora that can spawn in the area.
var/list/flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2)
var/list/mob_spawn_list
// Weighted list of Megafauna that can spawn in the caves
var/list/megafauna_spawn_list
///Weighted list of flora that can spawn in the area.
var/list/flora_spawn_list
///Weighted list of extra features that can spawn in the area, such as geysers.
var/list/feature_spawn_list
///Base chance of spawning a mob
@@ -39,8 +36,14 @@
/datum/map_generator/cave_generator/New()
. = ..()
if(!mob_spawn_list)
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 1, /mob/living/simple_animal/hostile/asteroid/goliath = 5, /mob/living/simple_animal/hostile/asteroid/basilisk = 4, /mob/living/simple_animal/hostile/asteroid/hivelord = 3)
if(!megafauna_spawn_list)
megafauna_spawn_list = GLOB.megafauna_spawn_list
megafauna_spawn_list = GLOB.megafauna_spawn_list
if(!flora_spawn_list)
flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2)
if(!feature_spawn_list)
feature_spawn_list = list(/obj/structure/geyser/random = 1)
/datum/map_generator/cave_generator/generate_terrain(list/turfs)
. = ..()
+4 -2
View File
@@ -3,12 +3,12 @@
closed_turf_types = list(/turf/closed/mineral/random/snow = 1)
feature_spawn_list = list(/obj/structure/geyser/random = 1)
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/wolf = 50, /obj/structure/spawner/ice_moon = 3, \
/mob/living/simple_animal/hostile/asteroid/polarbear = 30, /obj/structure/spawner/ice_moon/polarbear = 3, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10, \
/mob/living/simple_animal/hostile/asteroid/lobstrosity = 15)
flora_spawn_list = list(/obj/structure/flora/tree/pine = 2, /obj/structure/flora/rock/icy = 2, /obj/structure/flora/rock/pile/icy = 2, /obj/structure/flora/grass/both = 6, /obj/structure/flora/ash/chilly = 2)
feature_spawn_list = list(/obj/structure/geyser/random = 1)
/datum/map_generator/cave_generator/icemoon/surface
flora_spawn_chance = 4
@@ -22,5 +22,7 @@
closed_turf_types = list(/turf/closed/mineral/random/snow/underground = 1)
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/ice_demon = 50, /obj/structure/spawner/ice_moon/demonic_portal = 3, \
/mob/living/simple_animal/hostile/asteroid/ice_whelp = 30, /obj/structure/spawner/ice_moon/demonic_portal/ice_whelp = 3, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /obj/structure/spawner/ice_moon/demonic_portal/snowlegion = 3)
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /obj/structure/spawner/ice_moon/demonic_portal/snowlegion = 3, \
SPAWN_MEGAFAUNA = 2)
megafauna_spawn_list = list(/mob/living/simple_animal/hostile/megafauna/colossus = 1)
flora_spawn_list = list(/obj/structure/flora/rock/icy = 6, /obj/structure/flora/rock/pile/icy = 6, /obj/structure/flora/ash/chilly = 1)
@@ -3,12 +3,12 @@
closed_turf_types = list(/turf/closed/mineral/random/volcanic = 1)
feature_spawn_list = list(/obj/structure/geyser/random = 1)
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /obj/structure/spawner/lavaland/goliath = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 4, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2)
feature_spawn_list = list(/obj/structure/geyser/random = 1)
initial_closed_chance = 45
smoothing_iterations = 50
+3 -2
View File
@@ -32,7 +32,8 @@
outdoors = TRUE
flags_1 = NONE
ambience_index = AMBIENCE_MINING
area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | CAVES_ALLOWED | NO_ALERTS
area_flags = VALID_TERRITORY | UNIQUE_AREA | NO_ALERTS | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED
map_generator = /datum/map_generator/cave_generator
min_ambience_cooldown = 70 SECONDS
max_ambience_cooldown = 220 SECONDS
@@ -131,11 +132,11 @@
/area/lavaland/surface/outdoors/unexplored //monsters and ruins spawn here
icon_state = "unexplored"
area_flags = VALID_TERRITORY | UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | NO_ALERTS
map_generator = /datum/map_generator/cave_generator/lavaland
/area/lavaland/surface/outdoors/unexplored/danger //megafauna will also spawn here
icon_state = "danger"
area_flags = VALID_TERRITORY | UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED | NO_ALERTS
map_generator = /datum/map_generator/cave_generator/lavaland
/area/lavaland/surface/outdoors/explored
name = "Lavaland Labor Camp"
@@ -80,6 +80,10 @@ GLOBAL_LIST_INIT(ore_probability, list(
light_range = 1
light_color = COLOR_SOFT_RED
/obj/structure/spawner/ice_moon/demonic_portal/Initialize()
. = ..()
AddComponent(/datum/component/gps, "Netheric Signal")
/obj/structure/spawner/ice_moon/demonic_portal/clear_rock()
for(var/turf/F in RANGE_TURFS(3, src))
if(abs(src.x - F.x) + abs(src.y - F.y) > 5)
+7 -2
View File
@@ -5,10 +5,12 @@
icon = 'icons/obj/structures.dmi'
icon_state = "ladder11"
anchored = TRUE
obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN
var/obj/structure/ladder/down //the ladder below this one
var/obj/structure/ladder/up //the ladder above this one
var/crafted = FALSE
obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN
/// Optional travel time for ladder in deciseconds
var/travel_time = 0
/obj/structure/ladder/Initialize(mapload, obj/structure/ladder/up, obj/structure/ladder/down)
..()
@@ -70,8 +72,11 @@
/obj/structure/ladder/proc/travel(going_up, mob/user, is_ghost, obj/structure/ladder/ladder)
if(!is_ghost)
show_fluff_message(going_up, user)
ladder.add_fingerprint(user)
if(!do_after(user, travel_time, target = src))
return
show_fluff_message(going_up, user)
var/turf/T = get_turf(ladder)
var/atom/movable/AM
+25 -1
View File
@@ -1,3 +1,5 @@
#define MINING_MESSAGE_COOLDOWN 20
/**********************Mineral deposits**************************/
/turf/closed/mineral //wall piece
@@ -22,6 +24,8 @@
var/last_act = 0
var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner
var/defer_change = 0
// If true you can mine the mineral turf with your hands
var/weak_turf = FALSE
/turf/closed/mineral/Initialize()
. = ..()
@@ -80,6 +84,22 @@
else
return attack_hand(user)
/turf/closed/mineral/attack_hand(mob/user)
if(!weak_turf)
return ..()
var/turf/user_turf = user.loc
if (!isturf(user_turf))
return
if(last_act + MINING_MESSAGE_COOLDOWN > world.time)//prevents message spam
return
last_act = world.time
to_chat(user, "<span class='notice'>You start pulling out pieces of [src] with your hands...</span>")
if(!do_after(user, 15 SECONDS, target = src))
return
if(ismineralturf(src))
to_chat(user, "<span class='notice'>You finish pulling apart [src].</span>")
gets_drilled(user)
/turf/closed/mineral/proc/gets_drilled(user, give_exp = FALSE)
if (mineralType && (mineralAmt > 0))
new mineralType(src, mineralAmt)
@@ -97,9 +117,10 @@
var/flags = NONE
if(defer_change) // TODO: make the defer change var a var for any changeturf flag
flags = CHANGETURF_DEFER_CHANGE
ScrapeAway(null, flags)
var/turf/open/mined = ScrapeAway(null, flags)
addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE)
playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
mined.update_visuals()
/turf/closed/mineral/attack_animal(mob/living/simple_animal/user, list/modifiers)
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
@@ -241,6 +262,7 @@
turf_type = /turf/open/floor/plating/asteroid/snow/icemoon
baseturfs = /turf/open/floor/plating/asteroid/snow/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
weak_turf = TRUE
/turf/closed/mineral/random/snow/Change_Ore(ore_type, random = 0)
. = ..()
@@ -630,3 +652,5 @@
/turf/closed/mineral/strong/ex_act(severity, target)
return
#undef MINING_MESSAGE_COOLDOWN
@@ -254,6 +254,9 @@
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
slowdown = 0
/turf/open/floor/plating/ice/icemoon/no_planet_atmos
planetary_atmos = FALSE
/turf/open/floor/plating/snowed
name = "snowed-over plating"
desc = "A section of heated plating, helps keep the snow from stacking up too high."
+12 -2
View File
@@ -152,17 +152,27 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
planetary_atmos = TRUE
var/replacement_turf = /turf/open/floor/plating/asteroid/snow/icemoon
/// Replaces itself with replacement_turf if the turf below this one is in a no ruins allowed area (usually ruins themselves)
var/protect_ruin = TRUE
/// If true mineral turfs below this openspace turf will be mined automatically
var/drill_below = TRUE
/turf/open/openspace/icemoon/Initialize()
. = ..()
var/turf/T = below()
if(T.flags_1 & NO_RUINS_1)
if(T.flags_1 & NO_RUINS_1 && protect_ruin)
ChangeTurf(replacement_turf, null, CHANGETURF_IGNORE_AIR)
return
if(!ismineralturf(T))
if(!ismineralturf(T) || !drill_below)
return
var/turf/closed/mineral/M = T
M.mineralAmt = 0
M.gets_drilled()
baseturfs = /turf/open/openspace/icemoon //This is to ensure that IF random turf generation produces a openturf, there won't be other turfs assigned other than openspace.
/turf/open/openspace/icemoon/keep_below
drill_below = FALSE
/turf/open/openspace/icemoon/ruins
protect_ruin = FALSE
drill_below = FALSE
@@ -249,13 +249,6 @@
baseturfs = /turf/open/lava/plasma/mafia
slowdown = 0
/obj/vehicle/ridden/lavaboat/plasma
name = "plasma boat"
desc = "A boat used for traversing the streams of plasma without turning into an icecube."
icon_state = "goliath_boat"
icon = 'icons/obj/lavaland/dragonboat.dmi'
resistance_flags = FREEZE_PROOF
can_buckle = TRUE
/////////// papers
+5 -1
View File
@@ -74,8 +74,10 @@
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 50, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100)
hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
transparent_protection = HIDEGLOVES|HIDESUITSTORAGE|HIDEJUMPSUIT|HIDESHOES
@@ -86,6 +88,8 @@
desc = "The skull of a dragon."
armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 50, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100)
clothing_flags = SNUG_FIT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
+1
View File
@@ -46,6 +46,7 @@
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Ice Hiking Boots", /obj/item/clothing/shoes/winterboots/ice_boots, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxuryelite, 10000),
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
@@ -1,3 +1,5 @@
GLOBAL_LIST_EMPTY(frost_miner_prisms)
/*
Difficulty: Extremely Hard
@@ -23,10 +25,11 @@ Difficulty: Extremely Hard
armour_penetration = 100
melee_damage_lower = 10
melee_damage_upper = 10
aggro_vision_range = 18 // large vision range so combat doesn't abruptly end when someone runs a bit away
vision_range = 18 // large vision range so combat doesn't abruptly end when someone runs a bit away
rapid_melee = 4
speed = 20
move_to_delay = 20
gps_name = "Bloodchilling Signal"
ranged = TRUE
crusher_loot = list(/obj/effect/decal/remains/plasma, /obj/item/crusher_trophy/ice_block_talisman)
loot = list(/obj/effect/decal/remains/plasma)
@@ -51,6 +54,8 @@ Difficulty: Extremely Hard
/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Initialize()
. = ..()
for(var/obj/structure/frost_miner_prism/prism_to_set in GLOB.frost_miner_prisms)
prism_to_set.set_prism_light(LIGHT_COLOR_BLUE, 5)
AddComponent(/datum/component/knockback, 7, FALSE, TRUE)
AddComponent(/datum/component/lifesteal, 50)
@@ -77,7 +82,7 @@ Difficulty: Extremely Hard
/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/OpenFire()
check_enraged()
projectile_speed_multiplier = 1 - enraged * 0.25
projectile_speed_multiplier = 1 - enraged * 0.5
SetRecoveryTime(100, 100)
if(client)
@@ -129,7 +134,7 @@ Difficulty: Extremely Hard
icon_state = "nuclear_particle"
damage = 5
armour_penetration = 100
speed = 4
speed = 3
damage_type = BRUTE
/obj/projectile/ice_blast
@@ -137,7 +142,7 @@ Difficulty: Extremely Hard
icon_state = "ice_2"
damage = 15
armour_penetration = 100
speed = 4
speed = 3
damage_type = BRUTE
/obj/projectile/ice_blast/on_hit(atom/target, blocked = FALSE)
@@ -252,6 +257,8 @@ Difficulty: Extremely Hard
icon_state = "demonic_miner_phase2"
animate(src, pixel_y = pixel_y - 96, time = 8, flags = ANIMATION_END_NOW)
spin(8, 2)
for(var/obj/structure/frost_miner_prism/prism_to_set in GLOB.frost_miner_prisms)
prism_to_set.set_prism_light(LIGHT_COLOR_PURPLE, 5)
SLEEP_CHECK_DEATH(8)
for(var/mob/living/L in viewers(src))
shake_camera(L, 3, 2)
@@ -265,6 +272,8 @@ Difficulty: Extremely Hard
return
var/turf/T = get_turf(src)
var/loot = rand(1, 3)
for(var/obj/structure/frost_miner_prism/prism_to_set in GLOB.frost_miner_prisms)
prism_to_set.set_prism_light(COLOR_GRAY, 1)
switch(loot)
if(1)
new /obj/item/resurrection_crystal(T)
@@ -312,7 +321,7 @@ Difficulty: Extremely Hard
desc = "A pair of winter boots contractually made by a devil, they cannot be taken off once put on."
actions_types = list(/datum/action/item_action/toggle)
var/on = FALSE
var/change_turf = /turf/open/floor/plating/ice/icemoon
var/change_turf = /turf/open/floor/plating/ice/icemoon/no_planet_atmos
var/duration = 6 SECONDS
/obj/item/clothing/shoes/winterboots/ice_boots/ice_trail/Initialize()
@@ -376,12 +385,17 @@ Difficulty: Extremely Hard
/datum/status_effect/ice_block_talisman
id = "ice_block_talisman"
duration = 40
status_type = STATUS_EFFECT_REFRESH
duration = 4 SECONDS
status_type = STATUS_EFFECT_REPLACE
alert_type = /atom/movable/screen/alert/status_effect/ice_block_talisman
/// Stored icon overlay for the hit mob, removed when effect is removed
var/icon/cube
/datum/status_effect/ice_block_talisman/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration))
duration = set_duration
return ..()
/atom/movable/screen/alert/status_effect/ice_block_talisman
name = "Frozen Solid"
desc = "You're frozen inside an ice cube, and cannot move!"
@@ -406,3 +420,22 @@ Difficulty: Extremely Hard
to_chat(owner, "<span class='notice'>The cube melts!</span>")
owner.cut_overlay(cube)
UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE)
/obj/structure/frost_miner_prism
name = "frost miner light prism"
desc = "A magical crystal enhanced by a demonic presence."
icon = 'icons/obj/slimecrossing.dmi'
icon_state = "lightprism"
density = FALSE
anchored = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
/obj/structure/frost_miner_prism/Initialize(mapload)
. = ..()
GLOB.frost_miner_prisms |= src
set_prism_light(LIGHT_COLOR_BLUE, 5)
/obj/structure/frost_miner_prism/proc/set_prism_light(new_color, new_range)
color = new_color
set_light_color(new_color)
set_light(new_range)
@@ -276,19 +276,26 @@
dragon_fire_line(src, turfs)
//fire line keeps going even if dragon is deleted
/proc/dragon_fire_line(atom/source, list/turfs)
/proc/dragon_fire_line(atom/source, list/turfs, frozen = FALSE)
var/list/hit_list = list()
for(var/turf/T in turfs)
if(istype(T, /turf/closed))
break
new /obj/effect/hotspot(T)
var/obj/effect/hotspot/drake_fire_hotspot = new /obj/effect/hotspot(T)
if(frozen)
drake_fire_hotspot.add_atom_colour(COLOR_BLUE_LIGHT, FIXED_COLOUR_PRIORITY)
T.hotspot_expose(DRAKE_FIRE_TEMP,DRAKE_FIRE_EXPOSURE,1)
for(var/mob/living/L in T.contents)
if(L in hit_list || istype(L, source.type))
continue
hit_list += L
L.adjustFireLoss(20)
to_chat(L, "<span class='userdanger'>You're hit by [source]'s fire breath!</span>")
if(!frozen)
L.adjustFireLoss(20)
to_chat(L, "<span class='userdanger'>You're hit by [source]'s fire breath!</span>")
continue
L.adjustFireLoss(10)
L.apply_status_effect(/datum/status_effect/ice_block_talisman, 20)
to_chat(L, "<span class='userdanger'>You're hit by [source]'s freezing breath!</span>")
// deals damage to mechs
for(var/obj/vehicle/sealed/mecha/M in T.contents)
@@ -154,7 +154,7 @@
/mob/living/simple_animal/hostile/megafauna/proc/SetRecoveryTime(buffer_time, ranged_buffer_time)
recovery_time = world.time + buffer_time
ranged_cooldown = world.time + buffer_time
if(ranged_buffer_time)
if(isnum(ranged_buffer_time))
ranged_cooldown = world.time + ranged_buffer_time
/// Grants medals and achievements to surrounding players
@@ -30,6 +30,7 @@ Difficulty: Hard
ranged = TRUE
pixel_x = -16
base_pixel_x = -16
gps_name = "Berserk Signal"
loot = list()
butcher_results = list()
guaranteed_butcher_results = list(/obj/item/wendigo_blood = 1)
@@ -15,7 +15,7 @@
projectilesound = 'sound/weapons/pierce.ogg'
ranged = TRUE
ranged_message = "manifests ice"
ranged_cooldown_time = 30
ranged_cooldown_time = 3 SECONDS
minimum_distance = 3
retreat_distance = 3
maxHealth = 150
@@ -46,20 +46,20 @@
/obj/projectile/temp/basilisk/ice
name = "ice blast"
damage = 5
speed = 4
nodamage = FALSE
temperature = -75
/mob/living/simple_animal/hostile/asteroid/ice_demon/OpenFire()
ranged_cooldown = world.time + ranged_cooldown_time
// Sentient ice demons teleporting has been linked to server crashes
if(client)
return ..()
if(teleport_distance <= 0)
return ..()
var/list/possible_ends = list()
for(var/turf/T in view(teleport_distance, target.loc) - view(teleport_distance - 1, target.loc))
if(isclosedturf(T))
continue
possible_ends |= T
var/list/possible_ends = view(teleport_distance, target.loc) - view(teleport_distance - 1, target.loc)
for(var/turf/closed/turf_to_remove in possible_ends)
possible_ends -= turf_to_remove
if(!possible_ends.len)
return ..()
var/turf/end = pick(possible_ends)
@@ -10,12 +10,12 @@
friendly_verb_continuous = "stares down"
friendly_verb_simple = "stare down"
speak_emote = list("roars")
speed = 30
move_to_delay = 30
speed = 12
move_to_delay = 12
ranged = TRUE
ranged_cooldown_time = 50
maxHealth = 350
health = 350
ranged_cooldown_time = 5 SECONDS
maxHealth = 300
health = 300
obj_damage = 40
armour_penetration = 20
melee_damage_lower = 20
@@ -23,6 +23,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/magic/demon_attack1.ogg'
ranged_message = "breathes fire at"
vision_range = 9
aggro_vision_range = 9
move_force = MOVE_FORCE_VERY_STRONG
@@ -39,10 +40,10 @@
/// How far the whelps fire can go
var/fire_range = 4
/mob/living/simple_animal/hostile/asteroid/ice_whelp/OpenFire()
var/turf/T = get_ranged_target_turf_direct(src, target, fire_range)
var/list/burn_turfs = getline(src, T) - get_turf(src)
dragon_fire_line(src, burn_turfs)
/mob/living/simple_animal/hostile/asteroid/ice_whelp/Shoot()
var/turf/target_fire_turf = get_ranged_target_turf_direct(src, target, fire_range)
var/list/burn_turfs = getline(src, target_fire_turf) - get_turf(src)
dragon_fire_line(src, burn_turfs, frozen = TRUE)
/mob/living/simple_animal/hostile/asteroid/ice_whelp/Life(delta_time = SSMOBS_DT, times_fired)
. = ..()
@@ -10,8 +10,8 @@
friendly_verb_continuous = "growls at"
friendly_verb_simple = "growl at"
speak_emote = list("growls")
speed = 12
move_to_delay = 12
speed = 8
move_to_delay = 8
maxHealth = 300
health = 300
obj_damage = 40
@@ -28,7 +28,6 @@
butcher_results = list(/obj/item/food/meat/slab/bear = 3, /obj/item/stack/sheet/bone = 2)
guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 1)
loot = list()
crusher_loot = /obj/item/crusher_trophy/goliath_tentacle
stat_attack = HARD_CRIT
robust_searching = TRUE
footstep_type = FOOTSTEP_MOB_CLAW
@@ -30,7 +30,6 @@
pull_force = MOVE_FORCE_WEAK
butcher_results = list(/obj/item/food/meat/slab = 2, /obj/item/stack/sheet/sinew/wolf = 2, /obj/item/stack/sheet/bone = 2)
loot = list()
crusher_loot = /obj/item/crusher_trophy/watcher_wing
stat_attack = HARD_CRIT
robust_searching = TRUE
footstep_type = FOOTSTEP_MOB_CLAW
+13
View File
@@ -41,6 +41,19 @@
time = 50
category = CAT_PRIMAL
/obj/vehicle/ridden/lavaboat/plasma
name = "plasma boat"
desc = "A boat used for traversing the streams of plasma without turning into an icecube."
icon_state = "goliath_boat"
icon = 'icons/obj/lavaland/dragonboat.dmi'
resistance_flags = FREEZE_PROOF
can_buckle = TRUE
/datum/crafting_recipe/boat/plasma
name = "Polar Bear Hide Boat"
result = /obj/vehicle/ridden/lavaboat/plasma
reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 3)
//Dragon Boat