[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 23:02:33 +01:00
committed by GitHub
parent 2d7650c37b
commit fc2fc8db6b
36 changed files with 11651 additions and 11372 deletions
@@ -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