mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-21 20:20:33 +01:00
[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:
co-authored by
Whoneedspacee
parent
2d7650c37b
commit
fc2fc8db6b
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user