From ea908fa99b52eee53b1c2d6897ee4c219846ea82 Mon Sep 17 00:00:00 2001 From: SomeguyManperson Date: Tue, 19 Nov 2019 02:18:04 -0500 Subject: [PATCH 01/16] verified --- .../lavaland_surface_elite_tumor.dmm | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 _maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm new file mode 100644 index 000000000000..6e44ec3197b6 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm @@ -0,0 +1,111 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/lavaland/surface/outdoors) +"b" = ( +/obj/structure/elite_tumor, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"c" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(4,1,1) = {" +a +a +a +c +c +c +a +a +a +"} +(5,1,1) = {" +a +a +a +c +b +c +a +a +a +"} +(6,1,1) = {" +a +a +a +c +c +c +a +a +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(8,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} From 666cabd982e67109516900d3b5ded5b87ed450d5 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:27:34 -0500 Subject: [PATCH 02/16] Im tired --- code/_onclick/hud/lavaland_elite.dm | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 code/_onclick/hud/lavaland_elite.dm diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm new file mode 100644 index 000000000000..480e0e398e0b --- /dev/null +++ b/code/_onclick/hud/lavaland_elite.dm @@ -0,0 +1,7 @@ +/datum/hud/lavaland_elite + ui_style = 'icons/mob/screen_slime.dmi' + +/datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite) + ..() + healths = new /obj/screen/healths/lavaland_elite() + infodisplay += healths From 543360da641bdd932ac2179608abe5cf24d060b8 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:28:56 -0500 Subject: [PATCH 03/16] Update screen_objects.dm --- code/_onclick/hud/screen_objects.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 884d74effae6..35716c7cc451 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -641,6 +641,12 @@ screen_loc = ui_slime_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT +/obj/screen/healths/lavaland_elite + icon = 'icons/mob/screen_elite.dmi' + icon_state = "elite_health0" + screen_loc = ui_health + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /obj/screen/healthdoll name = "health doll" screen_loc = ui_healthdoll From 847ed5c92f4f8fb03df9666f31e88e965aeaade2 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:30:09 -0500 Subject: [PATCH 04/16] Update generic_positive_events.dm --- code/datums/mood_events/generic_positive_events.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 40ded57491b3..50068c634752 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -147,3 +147,7 @@ description = "That work of art was so great it made me believe in the goodness of humanity. Says a lot in a place like this.\n" mood_change = 4 timeout = 4 MINUTES + +/datum/mood_event/hope_lavaland + description = "What a peculiar emblem. It makes me feel hopeful for my future.\n" + mood_change = 5 From 61645c1f4fb411ed73e16833d25ff81be29c6c29 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:30:55 -0500 Subject: [PATCH 05/16] Update lavaland.dm --- code/datums/ruins/lavaland.dm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 493ad80a79d7..035af9f06ea0 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -428,4 +428,13 @@ description = "Abandon All Hope Ye Who Enter Here." suffix = "kinggoatboss.dmm" always_place = TRUE - allow_duplicates = FALSE \ No newline at end of file + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/elite_tumor + name = "Pulsating Tumor" + id = "tumor" + description = "A strange tumor which houses a powerful beast..." + suffix = "lavaland_surface_elite_tumor.dmm" + cost = 5 + always_place = TRUE + allow_duplicates = TRUE From 699e14c3efd4b6062e3c93fd488d39ef02799ed7 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:33:58 -0500 Subject: [PATCH 06/16] Update human_defense.dm --- .../mob/living/carbon/human/human_defense.dm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 2933748565a3..e3091d8b5a7d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -24,7 +24,7 @@ if(!d_type) return 0 var/protection = 0 - var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) + var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id, wear_neck) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) for(var/bp in body_parts) if(!bp) continue @@ -119,16 +119,20 @@ if (istype(I, /obj/item/shield)) var/obj/item/shield/S = I return S.on_shield_block(src, AM, attack_text, damage, attack_type) - return 1 + return TRUE if(wear_suit) var/final_block_chance = wear_suit.block_chance - (CLAMP((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier if(wear_suit.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) - return 1 + return TRUE if(w_uniform) var/final_block_chance = w_uniform.block_chance - (CLAMP((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier if(w_uniform.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) - return 1 - return 0 + return TRUE + if(wear_neck) + var/final_block_chance = wear_neck.block_chance - (CLAMP((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier + if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) + return TRUE + return FALSE /mob/living/carbon/human/proc/check_block() if(mind) From 9ee88590da40040f90bca497e1324b6c4ffa3635 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:47:35 -0500 Subject: [PATCH 07/16] Create lovemobile --- .../living/simple_animal/hostile/mining_mobs/elites/lovemobile | 1 + 1 file changed, 1 insertion(+) create mode 100644 code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/lovemobile diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/lovemobile b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/lovemobile new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/lovemobile @@ -0,0 +1 @@ + From d857d84c2f0a02ee21b1eafe59b9963193ec31c6 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:51:01 -0500 Subject: [PATCH 08/16] Adds the boys --- .../hostile/mining_mobs/elites/elite.dm | 360 ++++++++++++++++++ .../mining_mobs/elites/goliath_broodmother.dm | 243 ++++++++++++ .../hostile/mining_mobs/elites/herald.dm | 274 +++++++++++++ .../hostile/mining_mobs/elites/legionnaire.dm | 300 +++++++++++++++ .../hostile/mining_mobs/elites/pandora.dm | 192 ++++++++++ 5 files changed, 1369 insertions(+) create mode 100644 code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm new file mode 100644 index 000000000000..7c135cc970c8 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -0,0 +1,360 @@ +#define TUMOR_INACTIVE 0 +#define TUMOR_ACTIVE 1 +#define TUMOR_PASSIVE 2 + +//Elite mining mobs +/mob/living/simple_animal/hostile/asteroid/elite + name = "elite" + desc = "An elite monster, found in one of the strange tumors on lavaland." + icon = 'icons/mob/lavaland/lavaland_elites.dmi' + faction = list("boss") + robust_searching = TRUE + ranged_ignores_vision = TRUE + ranged = TRUE + obj_damage = 5 + vision_range = 6 + aggro_vision_range = 18 + environment_smash = ENVIRONMENT_SMASH_NONE //This is to prevent elites smashing up the mining station, we'll make sure they can smash minerals fine below. + harm_intent_damage = 0 //Punching elites gets you nowhere + stat_attack = UNCONSCIOUS + layer = LARGE_MOB_LAYER + sentience_type = SENTIENCE_BOSS + hud_type = /datum/hud/lavaland_elite + var/chosen_attack = 1 + var/list/attack_action_types = list() + var/can_talk = FALSE + var/obj/loot_drop = null + + +//Gives player-controlled variants the ability to swap attacks +/mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload) + . = ..() + for(var/action_type in attack_action_types) + var/datum/action/innate/elite_attack/attack_action = new action_type() + attack_action.Grant(src) + +//Prevents elites from attacking members of their faction (can't hurt themselves either) and lets them mine rock with an attack despite not being able to smash walls. +/mob/living/simple_animal/hostile/asteroid/elite/AttackingTarget() + if(istype(target, /mob/living/simple_animal/hostile)) + var/mob/living/simple_animal/hostile/M = target + if(faction_check_mob(M)) + return FALSE + if(istype(target, /obj/structure/elite_tumor)) + var/obj/structure/elite_tumor/T = target + if(T.mychild == src && T.activity == TUMOR_PASSIVE) + var/elite_remove = alert("Re-enter the tumor?", "Despawn yourself?", "Yes", "No") + if(elite_remove == "No" || !src || QDELETED(src)) + return + T.mychild = null + T.activity = TUMOR_INACTIVE + T.icon_state = "advanced_tumor" + qdel(src) + return FALSE + . = ..() + if(ismineralturf(target)) + var/turf/closed/mineral/M = target + M.gets_drilled() + +//Elites can't talk (normally)! +/mob/living/simple_animal/hostile/asteroid/elite/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) + if(can_talk) + . = ..() + return TRUE + return FALSE + +/*Basic setup for elite attacks, based on Whoneedspace's megafauna attack setup. +While using this makes the system rely on OnFire, it still gives options for timers not tied to OnFire, and it makes using attacks consistent accross the board for player-controlled elites.*/ + +/datum/action/innate/elite_attack + name = "Elite Attack" + icon_icon = 'icons/mob/actions/actions_elites.dmi' + button_icon_state = "" + background_icon_state = "bg_default" + var/mob/living/simple_animal/hostile/asteroid/elite/M + var/chosen_message + var/chosen_attack_num = 0 + +/datum/action/innate/elite_attack/Grant(mob/living/L) + if(istype(L, /mob/living/simple_animal/hostile/asteroid/elite)) + M = L + return ..() + return FALSE + +/datum/action/innate/elite_attack/Activate() + M.chosen_attack = chosen_attack_num + to_chat(M, chosen_message) + +/mob/living/simple_animal/hostile/asteroid/elite/updatehealth() + . = ..() + update_health_hud() + +/mob/living/simple_animal/hostile/asteroid/elite/update_health_hud() + if(hud_used) + var/severity = 0 + var/healthpercent = (health/maxHealth) * 100 + switch(healthpercent) + if(100 to INFINITY) + hud_used.healths.icon_state = "elite_health0" + if(80 to 100) + severity = 1 + if(60 to 80) + severity = 2 + if(40 to 60) + severity = 3 + if(20 to 40) + severity = 4 + if(10 to 20) + severity = 5 + if(1 to 20) + severity = 6 + else + severity = 7 + hud_used.healths.icon_state = "elite_health[severity]" + if(severity > 0) + overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + else + clear_fullscreen("brute") + +//The Pulsing Tumor, the actual "spawn-point" of elites, handles the spawning, arena, and procs for dealing with basic scenarios. + +/obj/structure/elite_tumor + name = "pulsing tumor" + desc = "An odd, pulsing tumor sticking out of the ground. You feel compelled to reach out and touch it..." + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + resistance_flags = INDESTRUCTIBLE + var/activity = TUMOR_INACTIVE + var/boosted = FALSE + var/times_won = 0 + var/mob/living/carbon/human/activator = null + var/mob/living/simple_animal/hostile/asteroid/elite/mychild = null + var/potentialspawns = list(/mob/living/simple_animal/hostile/asteroid/elite/broodmother, + /mob/living/simple_animal/hostile/asteroid/elite/pandora, + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire, + /mob/living/simple_animal/hostile/asteroid/elite/herald) + icon = 'icons/obj/lavaland/tumor.dmi' + icon_state = "tumor" + pixel_x = -16 + light_color = LIGHT_COLOR_RED + light_range = 3 + anchored = TRUE + density = FALSE + +/obj/structure/elite_tumor/attack_hand(mob/user) + . = ..() + if(ishuman(user)) + switch(activity) + if(TUMOR_PASSIVE) + activity = TUMOR_ACTIVE + visible_message("[src] convulses as your arm enters its radius. Your instincts tell you to step back.") + activator = user + if(boosted) + mychild.playsound_local(get_turf(mychild), 'sound/effects/magic.ogg', 40, 0) + to_chat(mychild, "Someone has activated your tumor. You will be returned to fight shortly, get ready!") + addtimer(CALLBACK(src, .proc/return_elite), 30) + INVOKE_ASYNC(src, .proc/arena_checks) + if(TUMOR_INACTIVE) + activity = TUMOR_ACTIVE + var/mob/dead/observer/elitemind = null + visible_message("[src] begins to convulse. Your instincts tell you to step back.") + activator = user + if(!boosted) + addtimer(CALLBACK(src, .proc/spawn_elite), 30) + return + visible_message("Something within [src] stirs...") + var/list/candidates = pollCandidatesForMob("Do you want to play as a lavaland elite?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, src, POLL_IGNORE_SENTIENCE_POTION) + if(candidates.len) + audible_message("The stirring sounds increase in volume!") + elitemind = pick(candidates) + elitemind.playsound_local(get_turf(elitemind), 'sound/effects/magic.ogg', 40, 0) + to_chat(elitemind, "You have been chosen to play as a Lavaland Elite.\nIn a few seconds, you will be summoned on Lavaland as a monster to fight your activator, in a fight to the death.\nYour attacks can be switched using the buttons on the top left of the HUD, and used by clicking on targets or tiles similar to a gun.\nWhile the opponent might have an upper hand with powerful mining equipment and tools, you have great power normally limited by AI mobs.\nIf you want to win, you'll have to use your powers in creative ways to ensure the kill. It's suggested you try using them all as soon as possible.\nShould you win, you'll receive extra information regarding what to do after. Good luck!") + addtimer(CALLBACK(src, .proc/spawn_elite, elitemind), 100) + else + visible_message("The stirring stops, and nothing emerges. Perhaps try again later.") + activity = TUMOR_INACTIVE + activator = null + + +obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind) + var/selectedspawn = pick(potentialspawns) + mychild = new selectedspawn(loc) + visible_message("[mychild] emerges from [src]!") + playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) + if(boosted) + mychild.key = elitemind.key + mychild.sentience_act() + icon_state = "tumor_popped" + INVOKE_ASYNC(src, .proc/arena_checks) + +obj/structure/elite_tumor/proc/return_elite() + mychild.forceMove(loc) + visible_message("[mychild] emerges from [src]!") + playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) + mychild.revive(full_heal = TRUE, admin_revive = TRUE) + if(boosted) + mychild.maxHealth = mychild.maxHealth * 2 + mychild.health = mychild.maxHealth + +/obj/structure/elite_tumor/Initialize(mapload) + . = ..() + AddComponent(/datum/component/gps, "Menacing Signal") + START_PROCESSING(SSobj, src) + +/obj/structure/elite_tumor/Destroy() + STOP_PROCESSING(SSobj, src) + mychild = null + activator = null + return ..() + +/obj/structure/elite_tumor/process() + if(isturf(loc)) + for(var/mob/living/simple_animal/hostile/asteroid/elite/elitehere in loc) + if(elitehere == mychild && activity == TUMOR_PASSIVE) + mychild.adjustHealth(-mychild.maxHealth*0.05) + var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(mychild)) + H.color = "#FF0000" + +/obj/structure/elite_tumor/attackby(obj/item/I, mob/user, params) + . = ..() + if(istype(I, /obj/item/organ/regenerative_core) && activity == TUMOR_INACTIVE && !boosted) + var/obj/item/organ/regenerative_core/core = I + if(!core.preserved) + return + visible_message("As [user] drops the core into [src], [src] appears to swell.") + icon_state = "advanced_tumor" + boosted = TRUE + light_range = 6 + desc = "[desc] This one seems to glow with a strong intensity." + qdel(core) + return TRUE + +/obj/structure/elite_tumor/proc/arena_checks() + if(activity != TUMOR_ACTIVE || QDELETED(src)) + return + INVOKE_ASYNC(src, .proc/fighters_check) //Checks to see if our fighters died. + INVOKE_ASYNC(src, .proc/arena_trap) //Gets another arena trap queued up for when this one runs out. + INVOKE_ASYNC(src, .proc/border_check) //Checks to see if our fighters got out of the arena somehow. + addtimer(CALLBACK(src, .proc/arena_checks), 50) + +/obj/structure/elite_tumor/proc/fighters_check() + if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator)) + onEliteWon() + if(mychild != null && mychild.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(mychild)) + onEliteLoss() + +/obj/structure/elite_tumor/proc/arena_trap() + var/turf/T = get_turf(src) + if(loc == null) + return + for(var/t in RANGE_TURFS(12, T)) + if(get_dist(t, T) == 12) + var/obj/effect/temp_visual/elite_tumor_wall/newwall + newwall = new /obj/effect/temp_visual/elite_tumor_wall(t, src) + newwall.activator = src.activator + newwall.ourelite = src.mychild + +/obj/structure/elite_tumor/proc/border_check() + if(activator != null && get_dist(src, activator) >= 12) + activator.forceMove(loc) + visible_message("[activator] suddenly reappears above [src]!") + playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) + if(mychild != null && get_dist(src, mychild) >= 12) + mychild.forceMove(loc) + visible_message("[mychild] suddenly reappears above [src]!") + playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) + +obj/structure/elite_tumor/proc/onEliteLoss() + playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, TRUE, TRUE) + visible_message("[src] begins to convulse violently before beginning to dissipate.") + visible_message("As [src] closes, something is forced up from down below.") + var/obj/structure/closet/crate/necropolis/tendril/lootbox = new /obj/structure/closet/crate/necropolis/tendril(loc) + if(!boosted) + mychild = null + activator = null + qdel(src) + return + var/lootpick = rand(1, 2) + if(lootpick == 1 && mychild.loot_drop != null) + new mychild.loot_drop(lootbox) + else + new /obj/item/tumor_shard(lootbox) + mychild = null + activator = null + qdel(src) + +obj/structure/elite_tumor/proc/onEliteWon() + activity = TUMOR_PASSIVE + activator = null + mychild.revive(full_heal = TRUE, admin_revive = TRUE) + if(boosted) + times_won++ + mychild.maxHealth = mychild.maxHealth * 0.5 + mychild.health = mychild.maxHealth + if(times_won == 1) + mychild.playsound_local(get_turf(mychild), 'sound/effects/magic.ogg', 40, 0) + to_chat(mychild, "As the life in the activator's eyes fade, the forcefield around you dies out and you feel your power subside.\nDespite this inferno being your home, you feel as if you aren't welcome here anymore.\nWithout any guidance, your purpose is now for you to decide.") + to_chat(mychild, "Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\nBear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\nAlso, be weary of your fellow inhabitants, they likely won't be happy to see you!") + to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!") + +/obj/item/tumor_shard + name = "tumor shard" + desc = "A strange, sharp, crystal shard from an odd tumor on Lavaland. Stabbing the corpse of a lavaland elite with this will revive them, assuming their soul still lingers. Revived lavaland elites only have half their max health, but are completely loyal to their reviver." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "crevice_shard" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + item_state = "screwdriver_head" + throwforce = 5 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 5 + +/obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) + . = ..() + if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag) + var/mob/living/simple_animal/hostile/asteroid/elite/E = target + if(E.stat != DEAD || E.sentience_type != SENTIENCE_BOSS || !E.key) + user.visible_message("It appears [E] is unable to be revived right now. Perhaps try again later.") + return + E.faction = list("neutral") + E.revive(full_heal = TRUE, admin_revive = TRUE) + user.visible_message("[user] stabs [E] with [src], reviving it.") + E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0) + to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") + E.maxHealth = E.maxHealth * 0.5 + E.health = E.maxHealth + E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people." + E.sentience_type = SENTIENCE_ORGANIC + qdel(src) + else + to_chat(user, "[src] only works on the corpse of a sentient lavaland elite.") + +/obj/effect/temp_visual/elite_tumor_wall + name = "magic wall" + icon = 'icons/turf/walls/hierophant_wall_temp.dmi' + icon_state = "wall" + duration = 50 + smooth = SMOOTH_TRUE + layer = BELOW_MOB_LAYER + var/mob/living/carbon/human/activator = null + var/mob/living/simple_animal/hostile/asteroid/elite/ourelite = null + color = rgb(255,0,0) + light_range = MINIMUM_USEFUL_LIGHT_RANGE + light_color = LIGHT_COLOR_RED + +/obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster) + . = ..() + queue_smooth_neighbors(src) + queue_smooth(src) + +/obj/effect/temp_visual/elite_tumor_wall/Destroy() + queue_smooth_neighbors(src) + activator = null + ourelite = null + return ..() + +/obj/effect/temp_visual/elite_tumor_wall/CanPass(atom/movable/mover, turf/target) + if(mover == ourelite || mover == activator) + return FALSE + else + return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm new file mode 100644 index 000000000000..1bfc6d82d0ea --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -0,0 +1,243 @@ +#define TENTACLE_PATCH 1 +#define SPAWN_CHILDREN 2 +#define RAGE 3 +#define CALL_CHILDREN 4 + +/** + * # Goliath Broodmother + * + * A stronger, faster variation of the goliath. Has the ability to spawn baby goliaths, which it can later detonate at will. + * When it's health is below half, tendrils will spawn randomly around it. When it is below a quarter of health, this effect is doubled. + * It's attacks are as follows: + * - Spawns a 3x3/plus shape of tentacles on the target location + * - Spawns 2 baby goliaths on its tile, up to a max of 8. Children blow up when they die. + * - The broodmother lets out a noise, and is able to move faster for 6.5 seconds. + * - Summons your children around you. + * The broodmother is a fight revolving around stage control, as the activator has to manage the baby goliaths and the broodmother herself, along with all the tendrils. + */ + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother + name = "goliath broodmother" + desc = "An example of sexual dimorphism, this female goliath looks much different than the males of her species. She is, however, just as dangerous, if not more." + gender = FEMALE + icon_state = "broodmother" + icon_living = "broodmother" + icon_aggro = "broodmother" + icon_dead = "egg_sac" + icon_gib = "syndicate_gib" + maxHealth = 800 + health = 800 + melee_damage_lower = 30 + melee_damage_upper = 30 + armour_penetration = 30 + attack_verb_continuous = "beats down on" + attack_verb_simple = "beat down on" + attack_sound = 'sound/weapons/punch1.ogg' + throw_message = "does nothing to the rocky hide of the" + speed = 2 + move_to_delay = 5 + mob_biotypes = MOB_ORGANIC|MOB_BEAST + mouse_opacity = MOUSE_OPACITY_ICON + deathmessage = "explodes into gore!" + loot_drop = /obj/item/crusher_trophy/broodmother_tongue + + attack_action_types = list(/datum/action/innate/elite_attack/tentacle_patch, + /datum/action/innate/elite_attack/spawn_children, + /datum/action/innate/elite_attack/rage, + /datum/action/innate/elite_attack/call_children) + + var/rand_tent = 0 + var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list() + +/datum/action/innate/elite_attack/tentacle_patch + name = "Tentacle Patch" + button_icon_state = "tentacle_patch" + chosen_message = "You are now attacking with a patch of tentacles." + chosen_attack_num = TENTACLE_PATCH + +/datum/action/innate/elite_attack/spawn_children + name = "Spawn Children" + button_icon_state = "spawn_children" + chosen_message = "You will spawn two children at your location to assist you in combat. You can have up to 8." + chosen_attack_num = SPAWN_CHILDREN + +/datum/action/innate/elite_attack/rage + name = "Rage" + button_icon_state = "rage" + chosen_message = "You will temporarily increase your movement speed." + chosen_attack_num = RAGE + +/datum/action/innate/elite_attack/call_children + name = "Call Children" + button_icon_state = "call_children" + chosen_message = "You will summon your children to your location." + chosen_attack_num = CALL_CHILDREN + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/OpenFire() + if(client) + switch(chosen_attack) + if(TENTACLE_PATCH) + tentacle_patch(target) + if(SPAWN_CHILDREN) + spawn_children() + if(RAGE) + rage() + if(CALL_CHILDREN) + call_children() + return + var/aiattack = rand(1,4) + switch(aiattack) + if(TENTACLE_PATCH) + tentacle_patch(target) + if(SPAWN_CHILDREN) + spawn_children() + if(RAGE) + rage() + if(CALL_CHILDREN) + call_children() + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/Life() + . = ..() + if(health < maxHealth * 0.5 && rand_tent < world.time) + rand_tent = world.time + 30 + var/tentacle_amount = 5 + if(health < maxHealth * 0.25) + tentacle_amount = 10 + var/tentacle_loc = spiral_range_turfs(5, get_turf(src)) + for(var/i in 1 to tentacle_amount) + var/turf/t = pick_n_take(tentacle_loc) + new /obj/effect/temp_visual/goliath_tentacle/broodmother(t, src) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(var/target) + ranged_cooldown = world.time + 15 + var/tturf = get_turf(target) + if(!isturf(tturf)) + return + visible_message("[src] digs its tentacles under [target]!") + new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(tturf, src) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/spawn_children(var/target) + ranged_cooldown = world.time + 40 + visible_message("The ground churns behind [src]!") + for(var/i in 1 to 2) + if(children_list.len >= 8) + return + var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/newchild = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc) + newchild.GiveTarget(target) + newchild.faction = faction.Copy() + visible_message("[newchild] appears below [src]!") + newchild.mother = src + children_list += newchild + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage() + ranged_cooldown = world.time + 70 + playsound(src,'sound/spookoween/insane_low_laugh.ogg', 200, 1) + visible_message("[src] starts picking up speed!") + color = "#FF0000" + set_varspeed(0) + move_to_delay = 3 + addtimer(CALLBACK(src, .proc/reset_rage), 65) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/reset_rage() + color = "#FFFFFF" + set_varspeed(2) + move_to_delay = 5 + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/call_children() + ranged_cooldown = world.time + 60 + visible_message("The ground shakes near [src]!") + var/list/directions = GLOB.cardinals.Copy() + GLOB.diagonals.Copy() + for(var/mob/child in children_list) + var/spawndir = pick_n_take(directions) + var/turf/T = get_step(src, spawndir) + if(T) + child.forceMove(T) + playsound(src, 'sound/effects/bamf.ogg', 100, 1) + +//The goliath's children. Pretty weak, simple mobs which are able to put a single tentacle under their target when at range. +/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child + name = "baby goliath" + desc = "A young goliath recently born from it's mother. While they hatch from eggs, said eggs are incubated in the mother until they are ready to be born." + icon = 'icons/mob/lavaland/lavaland_monsters.dmi' + icon_state = "goliath_baby" + icon_living = "goliath_baby" + icon_aggro = "goliath_baby" + icon_dead = "goliath_baby_dead" + icon_gib = "syndicate_gib" + maxHealth = 30 + health = 30 + melee_damage_lower = 5 + melee_damage_upper = 5 + attack_verb_continuous = "bashes against" + attack_verb_simple = "bash against" + attack_sound = 'sound/weapons/punch1.ogg' + throw_message = "does nothing to the rocky hide of the" + speed = 2 + move_to_delay = 5 + mob_biotypes = MOB_ORGANIC|MOB_BEAST + mouse_opacity = MOUSE_OPACITY_ICON + butcher_results = list() + guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1) + deathmessage = "falls to the ground." + status_flags = CANPUSH + var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = null + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/OpenFire(target) + ranged_cooldown = world.time + 40 + var/tturf = get_turf(target) + if(!isturf(tturf)) + return + if(get_dist(src, target) <= 7)//Screen range check, so it can't attack people off-screen + visible_message("[src] digs one of its tentacles under [target]!") + new /obj/effect/temp_visual/goliath_tentacle/broodmother(tturf, src) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/death() + . = ..() + if(mother != null) + mother.children_list -= src + visible_message("[src] explodes!") + explosion(get_turf(loc),0,0,0,flame_range = 3, adminlog = FALSE) + gib() + +//Tentacles have less stun time compared to regular variant, to balance being able to use them much more often. Also, 10 more damage. +/obj/effect/temp_visual/goliath_tentacle/broodmother/trip() + var/latched = FALSE + for(var/mob/living/L in loc) + if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD) + continue + visible_message("[src] grabs hold of [L]!") + L.Stun(10) + L.adjustBruteLoss(rand(30,35)) + latched = TRUE + if(!latched) + retract() + else + deltimer(timerid) + timerid = addtimer(CALLBACK(src, .proc/retract), 10, TIMER_STOPPABLE) + +/obj/effect/temp_visual/goliath_tentacle/broodmother/patch/Initialize(mapload, new_spawner) + . = ..() + var/tentacle_locs = spiral_range_turfs(1, get_turf(src)) + for(var/T in tentacle_locs) + new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner) + var/list/directions = GLOB.cardinals.Copy() + for(var/i in directions) + var/turf/T = get_step(get_turf(src), i) + T = get_step(T, i) + new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner) + +// Broodmother's loot: Broodmother Tongue +/obj/item/crusher_trophy/broodmother_tongue + name = "broodmother tongue" + desc = "The tongue of a broodmother. If attached a certain way, makes for a suitable crusher trophy." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "broodmother_tongue" + denied_type = /obj/item/crusher_trophy/broodmother_tongue + bonus_value = 10 + +/obj/item/crusher_trophy/broodmother_tongue/effect_desc() + return "mark detonation to have a [bonus_value]% chance to summon a patch of goliath tentacles at the target's location" + +/obj/item/crusher_trophy/broodmother_tongue/on_mark_detonation(mob/living/target, mob/living/user) + if(rand(1, 100) <= bonus_value && target.stat != DEAD) + new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(get_turf(target), user) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm new file mode 100644 index 000000000000..cb85011fe5d2 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -0,0 +1,274 @@ +#define HERALD_TRISHOT 1 +#define HERALD_DIRECTIONALSHOT 2 +#define HERALD_TELESHOT 3 +#define HERALD_MIRROR 4 + +/** + * # Herald + * + * A slow-moving projectile user with a few tricks up it's sleeve. Less unga-bunga than Colossus, with more cleverness in it's fighting style. + * As it's health gets lower, the amount of projectiles fired per-attack increases. + * It's attacks are as follows: + * - Fires three projectiles in a a given direction. + * - Fires a spread in every cardinal and diagonal direction at once, then does it again after a bit. + * - Shoots a single, golden bolt. Wherever it lands, the herald will be teleported to the location. + * - Spawns a mirror which reflects projectiles directly at the target. + * Herald is a more concentrated variation of the Colossus fight, having less projectiles overall, but more focused attacks. + */ + +/mob/living/simple_animal/hostile/asteroid/elite/herald + name = "herald" + desc = "A monstrous beast which fires deadly projectiles at threats and prey." + icon_state = "herald" + icon_living = "herald" + icon_aggro = "herald" + icon_dead = "herald_dying" + icon_gib = "syndicate_gib" + maxHealth = 800 + health = 800 + melee_damage_lower = 20 + melee_damage_upper = 20 + attack_verb_continuous = "preaches to" + attack_verb_simple = "preach to" + attack_sound = 'sound/magic/clockwork/ratvar_attack.ogg' + throw_message = "doesn't affect the purity of" + speed = 4 + move_to_delay = 10 + mouse_opacity = MOUSE_OPACITY_ICON + deathsound = 'sound/magic/demon_dies.ogg' + deathmessage = "begins to shudder as it becomes transparent..." + loot_drop = /obj/item/clothing/neck/cloak/herald_cloak + + can_talk = 1 + + attack_action_types = list(/datum/action/innate/elite_attack/herald_trishot, + /datum/action/innate/elite_attack/herald_directionalshot, + /datum/action/innate/elite_attack/herald_teleshot, + /datum/action/innate/elite_attack/herald_mirror) + + var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/my_mirror = null + var/is_mirror = FALSE + +/mob/living/simple_animal/hostile/asteroid/elite/herald/death() + . = ..() + if(!is_mirror) + addtimer(CALLBACK(src, .proc/become_ghost), 8) + if(my_mirror != null) + qdel(my_mirror) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/become_ghost() + icon_state = "herald_ghost" + +/mob/living/simple_animal/hostile/asteroid/elite/herald/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) + . = ..() + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + +/datum/action/innate/elite_attack/herald_trishot + name = "Triple Shot" + button_icon_state = "herald_trishot" + chosen_message = "You are now firing three shots in your chosen direction." + chosen_attack_num = HERALD_TRISHOT + +/datum/action/innate/elite_attack/herald_directionalshot + name = "Circular Shot" + button_icon_state = "herald_directionalshot" + chosen_message = "You are firing projectiles in all directions." + chosen_attack_num = HERALD_DIRECTIONALSHOT + +/datum/action/innate/elite_attack/herald_teleshot + name = "Teleport Shot" + button_icon_state = "herald_teleshot" + chosen_message = "You will now fire a shot which teleports you where it lands." + chosen_attack_num = HERALD_TELESHOT + +/datum/action/innate/elite_attack/herald_mirror + name = "Summon Mirror" + button_icon_state = "herald_mirror" + chosen_message = "You will spawn a mirror which duplicates your attacks." + chosen_attack_num = HERALD_MIRROR + +/mob/living/simple_animal/hostile/asteroid/elite/herald/OpenFire() + if(client) + switch(chosen_attack) + if(HERALD_TRISHOT) + herald_trishot(target) + if(my_mirror != null) + my_mirror.herald_trishot(target) + if(HERALD_DIRECTIONALSHOT) + herald_directionalshot() + if(my_mirror != null) + my_mirror.herald_directionalshot() + if(HERALD_TELESHOT) + herald_teleshot(target) + if(my_mirror != null) + my_mirror.herald_teleshot(target) + if(HERALD_MIRROR) + herald_mirror() + return + var/aiattack = rand(1,4) + switch(aiattack) + if(HERALD_TRISHOT) + herald_trishot(target) + if(my_mirror != null) + my_mirror.herald_trishot(target) + if(HERALD_DIRECTIONALSHOT) + herald_directionalshot() + if(my_mirror != null) + my_mirror.herald_directionalshot() + if(HERALD_TELESHOT) + herald_teleshot(target) + if(my_mirror != null) + my_mirror.herald_teleshot(target) + if(HERALD_MIRROR) + herald_mirror() + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/shoot_projectile(turf/marker, set_angle, var/is_teleshot) + var/turf/startloc = get_turf(src) + var/obj/projectile/herald/H = null + if(!is_teleshot) + H = new /obj/projectile/herald(startloc) + else + H = new /obj/projectile/herald/teleshot(startloc) + H.preparePixelProjectile(marker, startloc) + H.firer = src + if(target) + H.original = target + H.fire(set_angle) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_trishot(target) + ranged_cooldown = world.time + 30 + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + var/target_turf = get_turf(target) + var/angle_to_target = Get_Angle(src, target_turf) + shoot_projectile(target_turf, angle_to_target, FALSE) + addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 2) + addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 4) + if(health < maxHealth * 0.5) + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 10) + addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 12) + addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 14) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_circleshot() + var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) + for(var/i in directional_shot_angles) + shoot_projectile(get_turf(src), i, FALSE) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/unenrage() + if(stat == DEAD || is_mirror) + return + icon_state = "herald" + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_directionalshot() + ranged_cooldown = world.time + 50 + if(!is_mirror) + icon_state = "herald_enraged" + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + addtimer(CALLBACK(src, .proc/herald_circleshot), 5) + if(health < maxHealth * 0.5) + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + addtimer(CALLBACK(src, .proc/herald_circleshot), 15) + addtimer(CALLBACK(src, .proc/unenrage), 20) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_teleshot(target) + ranged_cooldown = world.time + 30 + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + var/target_turf = get_turf(target) + var/angle_to_target = Get_Angle(src, target_turf) + shoot_projectile(target_turf, angle_to_target, TRUE) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_mirror() + ranged_cooldown = world.time + 40 + playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + if(my_mirror != null) + qdel(my_mirror) + my_mirror = null + var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/new_mirror = new /mob/living/simple_animal/hostile/asteroid/elite/herald/mirror(loc) + my_mirror = new_mirror + my_mirror.my_master = src + my_mirror.faction = faction.Copy() + +/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror + name = "herald's mirror" + desc = "This fiendish work of magic copies the herald's attacks. Seems logical to smash it." + health = 60 + maxHealth = 60 + icon_state = "herald_mirror" + deathmessage = "shatters violently!" + deathsound = 'sound/effects/glassbr1.ogg' + movement_type = FLYING + del_on_death = TRUE + is_mirror = TRUE + var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null + +/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize() + ..() + toggle_ai(AI_OFF) + +/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Destroy() + if(my_master != null) + my_master.my_mirror = null + . = ..() + +/obj/projectile/herald + name ="death bolt" + icon_state= "chronobolt" + damage = 15 + armour_penetration = 60 + speed = 2 + eyeblur = 0 + damage_type = BRUTE + pass_flags = PASSTABLE + +/obj/projectile/herald/teleshot + name ="golden bolt" + damage = 0 + color = rgb(255,255,102) + +/obj/projectile/herald/on_hit(atom/target, blocked = FALSE) + . = ..() + if(ismineralturf(target)) + var/turf/closed/mineral/M = target + M.gets_drilled() + return + else if(isliving(target)) + var/mob/living/L = target + var/mob/living/F = firer + if(F != null && istype(F, /mob/living/simple_animal/hostile/asteroid/elite) && F.faction_check_mob(L)) + L.heal_overall_damage(damage) + +/obj/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE) + . = ..() + firer.forceMove(get_turf(src)) + +//Herald's loot: Cloak of the Prophet + +/obj/item/clothing/neck/cloak/herald_cloak + name = "cloak of the prophet" + desc = "A cloak which protects you from the heresy of the world." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "herald_cloak" + body_parts_covered = CHEST|GROIN|ARMS + hit_reaction_chance = 10 + +/obj/item/clothing/neck/cloak/herald_cloak/proc/reactionshot(mob/living/carbon/owner) + var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) + for(var/i in directional_shot_angles) + shoot_projectile(get_turf(owner), i, owner) + +/obj/item/clothing/neck/cloak/herald_cloak/proc/shoot_projectile(turf/marker, set_angle, mob/living/carbon/owner) + var/turf/startloc = get_turf(owner) + var/obj/projectile/herald/H = null + H = new /obj/projectile/herald(startloc) + H.preparePixelProjectile(marker, startloc) + H.firer = owner + H.fire(set_angle) + +/obj/item/clothing/neck/cloak/herald_cloak/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + . = ..() + if(!rand(1,100) <= hit_reaction_chance) + return + owner.visible_message("[owner]'s [src] emits a loud noise as [owner] is struck!") + var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) + playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + addtimer(CALLBACK(src, .proc/reactionshot, owner), 10) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm new file mode 100644 index 000000000000..96989511bedc --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -0,0 +1,300 @@ +#define LEGIONNAIRE_CHARGE 1 +#define HEAD_DETACH 2 +#define BONFIRE_TELEPORT 3 +#define SPEW_SMOKE 4 + +/** + * # Legionnaire + * + * A towering skeleton, embodying the power of Legion. + * As it's health gets lower, the head does more damage. + * It's attacks are as follows: + * - Charges at the target after a telegraph, throwing them across the arena should it connect. + * - Legionnaire's head detaches, attacking as it's own entity. Has abilities of it's own later into the fight. Once dead, regenerates after a brief period. If the skill is used while the head is off, it will be killed. + * - Leaves a pile of bones at your location. Upon using this skill again, you'll swap locations with the bone pile. + * - Spews a cloud of smoke from it's maw, wherever said maw is. + * A unique fight incorporating the head mechanic of legion into a whole new beast. Combatants will need to make sure the tag-team of head and body don't lure them into a deadly trap. + */ + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire + name = "legionnaire" + desc = "A towering skeleton, embodying the terrifying power of Legion." + icon_state = "legionnaire" + icon_living = "legionnaire" + icon_aggro = "legionnaire" + icon_dead = "legionnaire_dead" + icon_gib = "syndicate_gib" + maxHealth = 800 + health = 800 + melee_damage_lower = 30 + melee_damage_upper = 30 + attack_verb_continuous = "slashes its arms at" + attack_verb_simple = "slash your arms at" + attack_sound = 'sound/weapons/bladeslice.ogg' + throw_message = "doesn't affect the sturdiness of" + speed = 1 + move_to_delay = 3 + mouse_opacity = MOUSE_OPACITY_ICON + deathsound = 'sound/magic/curse.ogg' + deathmessage = "'s arms reach out before it falls apart onto the floor, lifeless." + loot_drop = /obj/item/crusher_trophy/legionnaire_spine + + attack_action_types = list(/datum/action/innate/elite_attack/legionnaire_charge, + /datum/action/innate/elite_attack/head_detach, + /datum/action/innate/elite_attack/bonfire_teleport, + /datum/action/innate/elite_attack/spew_smoke) + + var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/myhead = null + var/obj/structure/legionnaire_bonfire/mypile = null + var/has_head = TRUE + +/datum/action/innate/elite_attack/legionnaire_charge + name = "Legionnaire Charge" + button_icon_state = "legionnaire_charge" + chosen_message = "You will attempt to grab your opponent and throw them." + chosen_attack_num = LEGIONNAIRE_CHARGE + +/datum/action/innate/elite_attack/head_detach + name = "Release Head" + button_icon_state = "head_detach" + chosen_message = "You will now detach your head or kill it if it is already released." + chosen_attack_num = HEAD_DETACH + +/datum/action/innate/elite_attack/bonfire_teleport + name = "Bonfire Teleport" + button_icon_state = "bonfire_teleport" + chosen_message = "You will leave a bonfire. Second use will let you swap positions with it indefintiely. Using this move on the same tile as your active bonfire removes it." + chosen_attack_num = BONFIRE_TELEPORT + +/datum/action/innate/elite_attack/spew_smoke + name = "Spew Smoke" + button_icon_state = "spew_smoke" + chosen_message = "Your head will spew smoke in an area, wherever it may be." + chosen_attack_num = SPEW_SMOKE + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/OpenFire() + if(client) + switch(chosen_attack) + if(LEGIONNAIRE_CHARGE) + legionnaire_charge(target) + if(HEAD_DETACH) + head_detach(target) + if(BONFIRE_TELEPORT) + bonfire_teleport() + if(SPEW_SMOKE) + spew_smoke() + return + var/aiattack = rand(1,4) + switch(aiattack) + if(LEGIONNAIRE_CHARGE) + legionnaire_charge(target) + if(HEAD_DETACH) + head_detach(target) + if(BONFIRE_TELEPORT) + bonfire_teleport() + if(SPEW_SMOKE) + spew_smoke() + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge(target) + ranged_cooldown = world.time + 50 + var/dir_to_target = get_dir(get_turf(src), get_turf(target)) + var/turf/T = get_step(get_turf(src), dir_to_target) + for(var/i in 1 to 4) + new /obj/effect/temp_visual/dragon_swoop/legionnaire(T) + T = get_step(T, dir_to_target) + playsound(src,'sound/magic/demon_attack1.ogg', 200, 1) + visible_message("[src] prepares to charge!") + addtimer(CALLBACK(src, .proc/legionnaire_charge_2, dir_to_target, 0), 5) + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge_2(var/move_dir, var/times_ran) + if(times_ran >= 4) + return + var/turf/T = get_step(get_turf(src), move_dir) + if(ismineralturf(T)) + var/turf/closed/mineral/M = T + M.gets_drilled() + if(T.density) + return + for(var/obj/structure/window/W in T.contents) + return + for(var/obj/machinery/door/D in T.contents) + return + forceMove(T) + playsound(src,'sound/effects/bang.ogg', 200, 1) + var/list/hit_things = list() + var/throwtarget = get_edge_target_turf(src, move_dir) + for(var/mob/living/L in T.contents - hit_things - src) + if(faction_check_mob(L)) + return + hit_things += L + visible_message("[src] attacks [L] with much force!") + to_chat(L, "[src] grabs you and throws you with much force!") + L.safe_throw_at(throwtarget, 10, 1, src) + L.Paralyze(20) + L.adjustBruteLoss(50) + addtimer(CALLBACK(src, .proc/legionnaire_charge_2, move_dir, (times_ran + 1)), 2) + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/head_detach(target) + ranged_cooldown = world.time + 10 + if(myhead != null) + myhead.adjustBruteLoss(600) + return + if(has_head) + has_head = FALSE + icon_state = "legionnaire_headless" + icon_living = "legionnaire_headless" + icon_aggro = "legionnaire_headless" + visible_message("[src]'s head flies off!") + var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/newhead = new /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead(loc) + newhead.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) + newhead.GiveTarget(target) + newhead.faction = faction.Copy() + myhead = newhead + myhead.body = src + if(health < maxHealth * 0.25) + myhead.melee_damage_lower = 30 + myhead.melee_damage_upper = 30 + else if(health < maxHealth * 0.5) + myhead.melee_damage_lower = 20 + myhead.melee_damage_upper = 20 + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/onHeadDeath() + myhead = null + addtimer(CALLBACK(src, .proc/regain_head), 50) + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/regain_head() + has_head = TRUE + if(stat == DEAD) + return + icon_state = "legionnaire" + icon_living = "legionnaire" + icon_aggro = "legionnaire" + visible_message("The top of [src]'s spine leaks a black liquid, forming into a skull!") + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/bonfire_teleport() + ranged_cooldown = world.time + 5 + if(mypile == null) + var/obj/structure/legionnaire_bonfire/newpile = new /obj/structure/legionnaire_bonfire(loc) + mypile = newpile + mypile.myowner = src + playsound(get_turf(src),'sound/items/fultext_deploy.ogg', 200, 1) + visible_message("[src] summons a bonfire on [get_turf(src)]!") + return + else + var/turf/legionturf = get_turf(src) + var/turf/pileturf = get_turf(mypile) + if(legionturf == pileturf) + mypile.take_damage(100) + mypile = null + return + playsound(pileturf,'sound/items/fultext_deploy.ogg', 200, 1) + playsound(legionturf,'sound/items/fultext_deploy.ogg', 200, 1) + visible_message("[src] melts down into a burning pile of bones!") + forceMove(pileturf) + visible_message("[src] forms from the bonfire!") + mypile.forceMove(legionturf) + +/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/spew_smoke() + ranged_cooldown = world.time + 60 + var/turf/T = null + if(myhead != null) + T = get_turf(myhead) + else + T = get_turf(src) + if(myhead != null) + myhead.visible_message("[myhead] spews smoke from its maw!") + else if(!has_head) + visible_message("[src] spews smoke from the tip of their spine!") + else + visible_message("[src] spews smoke from its maw!") + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(2, T) + smoke.start() + +//The legionnaire's head. Basically the same as any legion head, but we have to tell our creator when we die so they can generate another head. +/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead + name = "legionnaire head" + desc = "The legionnaire's head floating by itself. One shouldn't get too close, though once it sees you, you really don't have a choice." + icon_state = "legionnaire_head" + icon_living = "legionnaire_head" + icon_aggro = "legionnaire_head" + icon_dead = "legionnaire_dead" + icon_gib = "syndicate_gib" + maxHealth = 80 + health = 80 + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "bites at" + attack_verb_simple = "bite at" + attack_sound = 'sound/effects/curse1.ogg' + throw_message = "simply misses" + speed = 0 + move_to_delay = 2 + del_on_death = 1 + deathmessage = "crumbles away!" + faction = list() + ranged = FALSE + var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/body = null + +/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/death() + . = ..() + if(body) + body.onHeadDeath() + +//The legionnaire's bonfire, which can be swapped positions with. Also sets flammable living beings on fire when they walk over it. +/obj/structure/legionnaire_bonfire + name = "bone pile" + desc = "A pile of bones which seems to occasionally move a little. It's probably a good idea to smash them." + icon = 'icons/obj/lavaland/legionnaire_bonfire.dmi' + icon_state = "bonfire" + max_integrity = 100 + move_resist = MOVE_FORCE_EXTREMELY_STRONG + anchored = TRUE + density = FALSE + light_range = 4 + light_color = LIGHT_COLOR_RED + var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/myowner = null + + +/obj/structure/legionnaire_bonfire/Entered(atom/movable/mover, turf/target) + if(isliving(mover)) + var/mob/living/L = mover + L.adjust_fire_stacks(3) + L.IgniteMob() + . = ..() + +/obj/structure/legionnaire_bonfire/Destroy() + if(myowner != null) + myowner.mypile = null + . = ..() + +//The visual effect which appears in front of legionnaire when he goes to charge. +/obj/effect/temp_visual/dragon_swoop/legionnaire + duration = 10 + color = rgb(0,0,0) + +/obj/effect/temp_visual/dragon_swoop/legionnaire/Initialize() + . = ..() + transform *= 0.33 + +// Legionnaire's loot: Legionnaire Spine + +/obj/item/crusher_trophy/legionnaire_spine + name = "legionnaire spine" + desc = "The spine of a legionnaire. It almost feels like it's moving..." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "legionnaire_spine" + denied_type = /obj/item/crusher_trophy/legionnaire_spine + bonus_value = 20 + +/obj/item/crusher_trophy/legionnaire_spine/effect_desc() + return "mark detonation to have a [bonus_value]% chance to summon a loyal legion skull" + +/obj/item/crusher_trophy/legionnaire_spine/on_mark_detonation(mob/living/target, mob/living/user) + if(!rand(1, 100) <= bonus_value || target.stat == DEAD) + return + var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion(user.loc) + A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) + A.GiveTarget(target) + A.friends = user + A.faction = user.faction.Copy() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm new file mode 100644 index 000000000000..73aff69c6ce7 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -0,0 +1,192 @@ +#define SINGULAR_SHOT 1 +#define MAGIC_BOX 2 +#define PANDORA_TELEPORT 3 +#define AOE_SQUARES 4 + +/** + * # Pandora + * + * A box with a similar design to the Hierophant which trades large, single attacks for more frequent smaller ones. + * As it's health gets lower, the time between it's attacks decrease. + * It's attacks are as follows: + * - Fires hierophant blasts in a straight line. Can only fire in a straight line in 8 directions, being the diagonals and cardinals. + * - Creates a box of hierophant blasts around the target. If they try to run away to avoid it, they'll very likely get hit. + * - Teleports the pandora from one location to another, almost identical to Hierophant. + * - Spawns a 5x5 AOE at the location of choice, spreading out from the center. + * Pandora's fight mirrors Hierophant's closely, but has stark differences in attack effects. Instead of long-winded dodge times and long cooldowns, Pandora constantly attacks the opponent, but leaves itself open for attack. + */ + +/mob/living/simple_animal/hostile/asteroid/elite/pandora + name = "pandora" + desc = "A large magic box with similar power and design to the Hierophant. Once it opens, it's not easy to close it." + icon_state = "pandora" + icon_living = "pandora" + icon_aggro = "pandora" + icon_dead = "pandora_dead" + icon_gib = "syndicate_gib" + maxHealth = 800 + health = 800 + melee_damage_lower = 15 + melee_damage_upper = 15 + attack_verb_continuous = "smashes into the side of" + attack_verb_simple = "smash into the side of" + attack_sound = 'sound/weapons/sonic_jackhammer.ogg' + throw_message = "merely dinks off of the" + speed = 4 + move_to_delay = 10 + mouse_opacity = MOUSE_OPACITY_ICON + deathsound = 'sound/magic/repulse.ogg' + deathmessage = "'s lights flicker, before its top part falls down." + loot_drop = /obj/item/clothing/accessory/pandora_hope + + attack_action_types = list(/datum/action/innate/elite_attack/singular_shot, + /datum/action/innate/elite_attack/magic_box, + /datum/action/innate/elite_attack/pandora_teleport, + /datum/action/innate/elite_attack/aoe_squares) + + var/sing_shot_length = 8 + var/cooldown_time = 20 + +/datum/action/innate/elite_attack/singular_shot + name = "Singular Shot" + button_icon_state = "singular_shot" + chosen_message = "You are now creating a single linear magic square." + chosen_attack_num = SINGULAR_SHOT + +/datum/action/innate/elite_attack/magic_box + name = "Magic Box" + button_icon_state = "magic_box" + chosen_message = "You are now attacking with a box of magic squares." + chosen_attack_num = MAGIC_BOX + +/datum/action/innate/elite_attack/pandora_teleport + name = "Line Teleport" + button_icon_state = "pandora_teleport" + chosen_message = "You will now teleport to your target." + chosen_attack_num = PANDORA_TELEPORT + +/datum/action/innate/elite_attack/aoe_squares + name = "AOE Blast" + button_icon_state = "aoe_squares" + chosen_message = "Your attacks will spawn an AOE blast at your target location." + chosen_attack_num = AOE_SQUARES + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire() + if(client) + switch(chosen_attack) + if(SINGULAR_SHOT) + singular_shot(target) + if(MAGIC_BOX) + magic_box(target) + if(PANDORA_TELEPORT) + pandora_teleport(target) + if(AOE_SQUARES) + aoe_squares(target) + return + var/aiattack = rand(1,4) + switch(aiattack) + if(SINGULAR_SHOT) + singular_shot(target) + if(MAGIC_BOX) + magic_box(target) + if(PANDORA_TELEPORT) + pandora_teleport(target) + if(AOE_SQUARES) + aoe_squares(target) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/Life() + . = ..() + if(health >= maxHealth * 0.5) + cooldown_time = 20 + return + if(health < maxHealth * 0.5 && health > maxHealth * 0.25) + cooldown_time = 15 + return + else + cooldown_time = 10 + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target) + ranged_cooldown = world.time + (cooldown_time * 0.5) + var/dir_to_target = get_dir(get_turf(src), get_turf(target)) + var/turf/T = get_step(get_turf(src), dir_to_target) + singular_shot_line(sing_shot_length, dir_to_target, T) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot_line(var/procsleft, var/angleused, var/turf/T) + if(procsleft <= 0) + return + new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) + T = get_step(T, angleused) + procsleft = procsleft - 1 + addtimer(CALLBACK(src, .proc/singular_shot_line, procsleft, angleused, T), 2) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/magic_box(target) + ranged_cooldown = world.time + cooldown_time + var/turf/T = get_turf(target) + for(var/t in spiral_range_turfs(3, T)) + if(get_dist(t, T) > 1) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport(target) + ranged_cooldown = world.time + cooldown_time + var/turf/T = get_turf(target) + var/turf/source = get_turf(src) + new /obj/effect/temp_visual/hierophant/telegraph(T, src) + new /obj/effect/temp_visual/hierophant/telegraph(source, src) + playsound(source,'sound/machines/airlockopen.ogg', 200, 1) + addtimer(CALLBACK(src, .proc/pandora_teleport_2, T, source), 2) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(var/turf/T, var/turf/source) + new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) + new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src) + for(var/t in RANGE_TURFS(1, T)) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + for(var/t in RANGE_TURFS(1, source)) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out + visible_message("[src] fades out!") + density = FALSE + addtimer(CALLBACK(src, .proc/pandora_teleport_3, T), 2) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_3(var/turf/T) + forceMove(T) + animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN + density = TRUE + visible_message("[src] fades in!") + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares(target) + ranged_cooldown = world.time + cooldown_time + var/turf/T = get_turf(target) + new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) + var/max_size = 2 + addtimer(CALLBACK(src, .proc/aoe_squares_2, T, 0, max_size), 2) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares_2(var/turf/T, var/ring, var/max_size) + if(ring > max_size) + return + for(var/t in spiral_range_turfs(ring, T)) + if(get_dist(t, T) == ring) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + addtimer(CALLBACK(src, .proc/aoe_squares_2, T, (ring + 1), max_size), 2) + +//The specific version of hiero's squares pandora uses +/obj/effect/temp_visual/hierophant/blast/pandora + damage = 20 + monster_damage_boost = FALSE + +//Pandora's loot: Hope +/obj/item/clothing/accessory/pandora_hope + name = "Hope" + desc = "Found at the bottom of Pandora. After all the evil was released, this was the only thing left inside." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "hope" + resistance_flags = FIRE_PROOF + +/obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user) + var/mob/living/L = user + if(L && L.mind) + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "hope_lavaland", /datum/mood_event/hope_lavaland) + +/obj/item/clothing/accessory/pandora_hope/on_uniform_dropped(obj/item/clothing/under/U, user) + var/mob/living/L = user + if(L && L.mind) + SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland") \ No newline at end of file From 34fbbcadb58d03bc1afbd069f2fc9e083765a450 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:53:07 -0500 Subject: [PATCH 09/16] Images of da bois --- icons/mob/lavaland/lavaland_elites.dmi | Bin 0 -> 20149 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/mob/lavaland/lavaland_elites.dmi diff --git a/icons/mob/lavaland/lavaland_elites.dmi b/icons/mob/lavaland/lavaland_elites.dmi new file mode 100644 index 0000000000000000000000000000000000000000..69032735d96527a4df16717c8c1bb66006f4bd96 GIT binary patch literal 20149 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 literal 0 HcmV?d00001 From e8ad366e67d454213ec0f1fff9077e4bb74aab05 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:54:33 -0500 Subject: [PATCH 10/16] Stuff for da bois --- icons/obj/lavaland/artefacts.dmi | Bin 25700 -> 23014 bytes icons/obj/lavaland/elite_trophies.dmi | Bin 0 -> 1057 bytes icons/obj/lavaland/legionnaire_bonfire.dmi | Bin 0 -> 1184 bytes icons/obj/lavaland/tumor.dmi | Bin 0 -> 988 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/obj/lavaland/elite_trophies.dmi create mode 100644 icons/obj/lavaland/legionnaire_bonfire.dmi create mode 100644 icons/obj/lavaland/tumor.dmi diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index 7f11ba29d4192bc4a3bb58666fbdfaf9a2489867..4f1eed683d3dc0d13a44401a5d6d707569a5d8de 100644 GIT binary patch literal 23014 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 literal 25700 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 G{Qm%o1f{kB diff --git a/icons/obj/lavaland/elite_trophies.dmi b/icons/obj/lavaland/elite_trophies.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d194c93853dbb4e72d876448831b8b49e26b25f3 GIT binary patch literal 1057 zcmV++1m63JP)p-Q{{a90|NqPY|6gBUIyyRFURy^+Lwa{}E-foZ7#-GxjH6Uri9kkHASA%R zz()W8dKLs@3II9)0FxyWNX}0%00001bW%=J06^y0W&i*Hsd`jcbVOxyV{&P5bZKvH z004NLb&tUgf-n$7&+S(H?*HlHcWkjwjT{({GK|Kpz?1vE8-IgDBhRj-RPskxT zAlas=R_%YY)9F+eKcCMjk9To6d}RW>jen&)-p8#2>+uO3BC#GH!P~awJS;ARNaFnX z(>~ruIJ!9eLYBZ2pn{U>ne zVf8PBdyj%RJnZ|t9Bxl>K;?#S%(CeeebUX0oQ$l z!T21cG)(-_W-#&$iT++{Bee}nHxm*d@ZdGT)4;^%`+KP+OzTOzha&+^|E>Wg!NlkL zdjy5h(}W8JI>txL;YkDf7LU*O|Cl|5#^fQe4igyr7Y*=u48M1NzV{0#Y=IP+Ez*&o zANwZ_`k+R>dv1|I8|$7MtQ=_y4W^4MjsJ$d9AeCgR;^mKYSpU2X0np;Z#Vqiic!q-LgANU4C^{C z%eKwSR+Qnk-O4feBuX+gE0owkQgAh`B=fv2B^gj5&=h2_vDeZBMYnXp@;F;}mdUtb2MMJzpK=KX^|H%&jRsk+8EB|x>rzsS@I3C+lG-EWUD*ylh0d!JM zQvg8b*k%9#0C;*-Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1AzGbOXA7${=M#hF%= zn41b>n*l{ra}q0oOd}mQYE+1_111ADmK^Y)k+E1D#1kK~zYI?bW}I;#L#} z@S6gOOtr9B0aDpu$tcypBDo!pXS8(K_^hs{o+x#i)Yz=0<0!=rJC=O&Pdid*XtTwP z((S&&KF}T;48|Ck2Z+1h{jTw~h0e!VdVN!?v7M_{dy(f}ULW*#H*^N_(Y)K~?rt#p z#)~6)<=VKu$}c##-P`ezyz*1yyC3rlZ+^b`Wqc&BTwf%=P|aL*ZX5K3>Tdq+*3dOg z6&PmbwrLtUuX2%@O@_8&k1)c<@r!q@(<#-pcLP~zVb&wn>Qo|75a^-qnzzM%2ec=Um; zL+%;>`7Y3rWX10P?et!Imp}YVM?PR-^j2n;q;^K1Ocy<8s0?Yt0e@bb(K821{i^p~ zb|kwC%VT!QYytLA?OZ4w#p%#@&kP^ zE#x^D`k+yVM)Wt%=06#!4*-nGb0c3q31~g9)^Nu#&oBzPWco@+JUhcj54^4qqG#PNM z+ yJM$b}D={n1|HOX%N}C<t?z|7mE?*IS*0d!JMQvg8b*k%9#0FQc9Sad{Xb7OL8aCB*JZU6vy zoKseCa&`CgQ*iP1KjUr>;mf?cN}m$HJZp9|PC02^pL(N_(H(EtDfs!2paRA_6*MuQuh;K0N*4FZmw{4^zHAo0Ol z5(6SJh@XQk{=gTI%=0Ba0lOriR|Dk3e6#^CfF!{9mO(-SvS~17djh>3B#n5U^M6VJ z{1nY&&tdP$-l1&@d(B(HMmaq3djd(k)jiHn&j*0^C0Oqh`Nt9@@S0Dr^UL|=J;(2c(Uz>nyPZ|%Ron|Fw9@yqYx1!flh5xg}H_)k7yQs_0$ znpuACw58zuE#S}0Cz8SpKN#>NAjB(+4}5TNc*lz{c4O3C1^!1r2durZN_jYVXK_Qb z&*m|PPdqCGrIc(1r8>+zneHz4H@M={)#mddMDQ2cPM+~QhC_jj<}tiqzC-z4w0w_Q zzD~@td`T{)d{tG|zoE8m&opS;?{Aw`7#?HLTHw%G2EeT-qcmL&god&VT5C2w(*U2O zi?aIzWqj=q)c!#257hoZ?GM!cK Date: Tue, 19 Nov 2019 02:55:22 -0500 Subject: [PATCH 11/16] Screen for da bois --- icons/mob/screen_elite.dmi | Bin 0 -> 4403 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/mob/screen_elite.dmi diff --git a/icons/mob/screen_elite.dmi b/icons/mob/screen_elite.dmi new file mode 100644 index 0000000000000000000000000000000000000000..19d38911c70aa0856b1ad8924f532a359a55d495 GIT binary patch literal 4403 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 A%m4rY literal 0 HcmV?d00001 From 1411451b08fc04418f53d9438e5cc5b23521468e Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 02:56:04 -0500 Subject: [PATCH 12/16] Actions for da bois --- icons/mob/actions/actions_elites.dmi | Bin 0 -> 8631 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/mob/actions/actions_elites.dmi diff --git a/icons/mob/actions/actions_elites.dmi b/icons/mob/actions/actions_elites.dmi new file mode 100644 index 0000000000000000000000000000000000000000..335261b0f646eace1032a8539d44eb0d46bcbd66 GIT binary patch literal 8631 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 KM5U5d=>G$|N=ZHd literal 0 HcmV?d00001 From 874805dd5f68d11d7d8dbd8128843abb5b3958f3 Mon Sep 17 00:00:00 2001 From: SomeguyManperson Date: Tue, 19 Nov 2019 14:08:08 -0500 Subject: [PATCH 13/16] brubrubrubrubrubrubruburburubruh --- .../hostile/mining_mobs/elites/elite.dm | 54 +++++++------ .../mining_mobs/elites/goliath_broodmother.dm | 54 ++++++------- .../hostile/mining_mobs/elites/herald.dm | 76 +++++++++--------- .../hostile/mining_mobs/elites/legionnaire.dm | 50 ++++++------ .../hostile/mining_mobs/elites/pandora.dm | 42 +++++----- icons/mob/accessories.dmi | Bin 8763 -> 8844 bytes icons/mob/neck.dmi | Bin 39299 -> 40584 bytes yogstation.dme | 6 ++ 8 files changed, 148 insertions(+), 134 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 7c135cc970c8..7ae2260cf4a0 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -24,8 +24,8 @@ var/list/attack_action_types = list() var/can_talk = FALSE var/obj/loot_drop = null - - + + //Gives player-controlled variants the ability to swap attacks /mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload) . = ..() @@ -54,14 +54,14 @@ if(ismineralturf(target)) var/turf/closed/mineral/M = target M.gets_drilled() - + //Elites can't talk (normally)! /mob/living/simple_animal/hostile/asteroid/elite/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) if(can_talk) . = ..() return TRUE return FALSE - + /*Basic setup for elite attacks, based on Whoneedspace's megafauna attack setup. While using this makes the system rely on OnFire, it still gives options for timers not tied to OnFire, and it makes using attacks consistent accross the board for player-controlled elites.*/ @@ -83,11 +83,11 @@ While using this makes the system rely on OnFire, it still gives options for tim /datum/action/innate/elite_attack/Activate() M.chosen_attack = chosen_attack_num to_chat(M, chosen_message) - + /mob/living/simple_animal/hostile/asteroid/elite/updatehealth() . = ..() update_health_hud() - + /mob/living/simple_animal/hostile/asteroid/elite/update_health_hud() if(hud_used) var/severity = 0 @@ -138,7 +138,8 @@ While using this makes the system rely on OnFire, it still gives options for tim light_range = 3 anchored = TRUE density = FALSE - + var/obj/item/gps/internal + /obj/structure/elite_tumor/attack_hand(mob/user) . = ..() if(ishuman(user)) @@ -173,7 +174,7 @@ While using this makes the system rely on OnFire, it still gives options for tim activity = TUMOR_INACTIVE activator = null - + obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind) var/selectedspawn = pick(potentialspawns) mychild = new selectedspawn(loc) @@ -193,18 +194,25 @@ obj/structure/elite_tumor/proc/return_elite() if(boosted) mychild.maxHealth = mychild.maxHealth * 2 mychild.health = mychild.maxHealth - + /obj/structure/elite_tumor/Initialize(mapload) . = ..() - AddComponent(/datum/component/gps, "Menacing Signal") + //AddComponent(/datum/component/gps, "Menacing Signal") + internal = new /obj/item/gps/internal/elite(src) START_PROCESSING(SSobj, src) - + +/obj/item/gps/internal/elite + icon_state = null + gpstag = "Menacing Signal" + desc = "Something strange sleeps beneath the planet." + invisibility = 100 + /obj/structure/elite_tumor/Destroy() STOP_PROCESSING(SSobj, src) mychild = null activator = null return ..() - + /obj/structure/elite_tumor/process() if(isturf(loc)) for(var/mob/living/simple_animal/hostile/asteroid/elite/elitehere in loc) @@ -212,7 +220,7 @@ obj/structure/elite_tumor/proc/return_elite() mychild.adjustHealth(-mychild.maxHealth*0.05) var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(mychild)) H.color = "#FF0000" - + /obj/structure/elite_tumor/attackby(obj/item/I, mob/user, params) . = ..() if(istype(I, /obj/item/organ/regenerative_core) && activity == TUMOR_INACTIVE && !boosted) @@ -226,7 +234,7 @@ obj/structure/elite_tumor/proc/return_elite() desc = "[desc] This one seems to glow with a strong intensity." qdel(core) return TRUE - + /obj/structure/elite_tumor/proc/arena_checks() if(activity != TUMOR_ACTIVE || QDELETED(src)) return @@ -234,13 +242,13 @@ obj/structure/elite_tumor/proc/return_elite() INVOKE_ASYNC(src, .proc/arena_trap) //Gets another arena trap queued up for when this one runs out. INVOKE_ASYNC(src, .proc/border_check) //Checks to see if our fighters got out of the arena somehow. addtimer(CALLBACK(src, .proc/arena_checks), 50) - + /obj/structure/elite_tumor/proc/fighters_check() if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator)) onEliteWon() if(mychild != null && mychild.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(mychild)) onEliteLoss() - + /obj/structure/elite_tumor/proc/arena_trap() var/turf/T = get_turf(src) if(loc == null) @@ -251,7 +259,7 @@ obj/structure/elite_tumor/proc/return_elite() newwall = new /obj/effect/temp_visual/elite_tumor_wall(t, src) newwall.activator = src.activator newwall.ourelite = src.mychild - + /obj/structure/elite_tumor/proc/border_check() if(activator != null && get_dist(src, activator) >= 12) activator.forceMove(loc) @@ -261,7 +269,7 @@ obj/structure/elite_tumor/proc/return_elite() mychild.forceMove(loc) visible_message("[mychild] suddenly reappears above [src]!") playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) - + obj/structure/elite_tumor/proc/onEliteLoss() playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, TRUE, TRUE) visible_message("[src] begins to convulse violently before beginning to dissipate.") @@ -280,7 +288,7 @@ obj/structure/elite_tumor/proc/onEliteLoss() mychild = null activator = null qdel(src) - + obj/structure/elite_tumor/proc/onEliteWon() activity = TUMOR_PASSIVE activator = null @@ -294,7 +302,7 @@ obj/structure/elite_tumor/proc/onEliteWon() to_chat(mychild, "As the life in the activator's eyes fade, the forcefield around you dies out and you feel your power subside.\nDespite this inferno being your home, you feel as if you aren't welcome here anymore.\nWithout any guidance, your purpose is now for you to decide.") to_chat(mychild, "Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\nBear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\nAlso, be weary of your fellow inhabitants, they likely won't be happy to see you!") to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!") - + /obj/item/tumor_shard name = "tumor shard" desc = "A strange, sharp, crystal shard from an odd tumor on Lavaland. Stabbing the corpse of a lavaland elite with this will revive them, assuming their soul still lingers. Revived lavaland elites only have half their max health, but are completely loyal to their reviver." @@ -307,7 +315,7 @@ obj/structure/elite_tumor/proc/onEliteWon() w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - + /obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) . = ..() if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag) @@ -328,7 +336,7 @@ obj/structure/elite_tumor/proc/onEliteWon() qdel(src) else to_chat(user, "[src] only works on the corpse of a sentient lavaland elite.") - + /obj/effect/temp_visual/elite_tumor_wall name = "magic wall" icon = 'icons/turf/walls/hierophant_wall_temp.dmi' @@ -341,7 +349,7 @@ obj/structure/elite_tumor/proc/onEliteWon() color = rgb(255,0,0) light_range = MINIMUM_USEFUL_LIGHT_RANGE light_color = LIGHT_COLOR_RED - + /obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster) . = ..() queue_smooth_neighbors(src) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 1bfc6d82d0ea..d7034af2ec61 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -30,13 +30,13 @@ melee_damage_lower = 30 melee_damage_upper = 30 armour_penetration = 30 - attack_verb_continuous = "beats down on" - attack_verb_simple = "beat down on" + attacktext = "beats down on" + //attack_verb_simple = "beat down on" attack_sound = 'sound/weapons/punch1.ogg' throw_message = "does nothing to the rocky hide of the" speed = 2 move_to_delay = 5 - mob_biotypes = MOB_ORGANIC|MOB_BEAST + mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) mouse_opacity = MOUSE_OPACITY_ICON deathmessage = "explodes into gore!" loot_drop = /obj/item/crusher_trophy/broodmother_tongue @@ -45,34 +45,34 @@ /datum/action/innate/elite_attack/spawn_children, /datum/action/innate/elite_attack/rage, /datum/action/innate/elite_attack/call_children) - + var/rand_tent = 0 var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list() - + /datum/action/innate/elite_attack/tentacle_patch name = "Tentacle Patch" button_icon_state = "tentacle_patch" chosen_message = "You are now attacking with a patch of tentacles." chosen_attack_num = TENTACLE_PATCH - + /datum/action/innate/elite_attack/spawn_children name = "Spawn Children" button_icon_state = "spawn_children" chosen_message = "You will spawn two children at your location to assist you in combat. You can have up to 8." chosen_attack_num = SPAWN_CHILDREN - + /datum/action/innate/elite_attack/rage name = "Rage" button_icon_state = "rage" chosen_message = "You will temporarily increase your movement speed." chosen_attack_num = RAGE - + /datum/action/innate/elite_attack/call_children name = "Call Children" button_icon_state = "call_children" chosen_message = "You will summon your children to your location." chosen_attack_num = CALL_CHILDREN - + /mob/living/simple_animal/hostile/asteroid/elite/broodmother/OpenFire() if(client) switch(chosen_attack) @@ -95,9 +95,9 @@ rage() if(CALL_CHILDREN) call_children() - + /mob/living/simple_animal/hostile/asteroid/elite/broodmother/Life() - . = ..() + . = ..() if(health < maxHealth * 0.5 && rand_tent < world.time) rand_tent = world.time + 30 var/tentacle_amount = 5 @@ -107,16 +107,16 @@ for(var/i in 1 to tentacle_amount) var/turf/t = pick_n_take(tentacle_loc) new /obj/effect/temp_visual/goliath_tentacle/broodmother(t, src) - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(var/target) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(var/target) ranged_cooldown = world.time + 15 var/tturf = get_turf(target) if(!isturf(tturf)) return visible_message("[src] digs its tentacles under [target]!") new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(tturf, src) - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/spawn_children(var/target) + +/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/spawn_children(var/target) ranged_cooldown = world.time + 40 visible_message("The ground churns behind [src]!") for(var/i in 1 to 2) @@ -137,12 +137,12 @@ set_varspeed(0) move_to_delay = 3 addtimer(CALLBACK(src, .proc/reset_rage), 65) - + /mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/reset_rage() color = "#FFFFFF" set_varspeed(2) move_to_delay = 5 - + /mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/call_children() ranged_cooldown = world.time + 60 visible_message("The ground shakes near [src]!") @@ -153,8 +153,8 @@ if(T) child.forceMove(T) playsound(src, 'sound/effects/bamf.ogg', 100, 1) - -//The goliath's children. Pretty weak, simple mobs which are able to put a single tentacle under their target when at range. + +//The goliath's children. Pretty weak, simple mobs which are able to put a single tentacle under their target when at range. /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child name = "baby goliath" desc = "A young goliath recently born from it's mother. While they hatch from eggs, said eggs are incubated in the mother until they are ready to be born." @@ -168,20 +168,20 @@ health = 30 melee_damage_lower = 5 melee_damage_upper = 5 - attack_verb_continuous = "bashes against" - attack_verb_simple = "bash against" + attacktext = "bashes against" + //attack_verb_simple = "bash against" attack_sound = 'sound/weapons/punch1.ogg' throw_message = "does nothing to the rocky hide of the" speed = 2 move_to_delay = 5 - mob_biotypes = MOB_ORGANIC|MOB_BEAST + mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) mouse_opacity = MOUSE_OPACITY_ICON butcher_results = list() guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1) deathmessage = "falls to the ground." status_flags = CANPUSH var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = null - + /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/OpenFire(target) ranged_cooldown = world.time + 40 var/tturf = get_turf(target) @@ -190,7 +190,7 @@ if(get_dist(src, target) <= 7)//Screen range check, so it can't attack people off-screen visible_message("[src] digs one of its tentacles under [target]!") new /obj/effect/temp_visual/goliath_tentacle/broodmother(tturf, src) - + /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/death() . = ..() if(mother != null) @@ -198,7 +198,7 @@ visible_message("[src] explodes!") explosion(get_turf(loc),0,0,0,flame_range = 3, adminlog = FALSE) gib() - + //Tentacles have less stun time compared to regular variant, to balance being able to use them much more often. Also, 10 more damage. /obj/effect/temp_visual/goliath_tentacle/broodmother/trip() var/latched = FALSE @@ -214,7 +214,7 @@ else deltimer(timerid) timerid = addtimer(CALLBACK(src, .proc/retract), 10, TIMER_STOPPABLE) - + /obj/effect/temp_visual/goliath_tentacle/broodmother/patch/Initialize(mapload, new_spawner) . = ..() var/tentacle_locs = spiral_range_turfs(1, get_turf(src)) @@ -225,7 +225,7 @@ var/turf/T = get_step(get_turf(src), i) T = get_step(T, i) new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner) - + // Broodmother's loot: Broodmother Tongue /obj/item/crusher_trophy/broodmother_tongue name = "broodmother tongue" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index cb85011fe5d2..9391a277080f 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -28,8 +28,8 @@ health = 800 melee_damage_lower = 20 melee_damage_upper = 20 - attack_verb_continuous = "preaches to" - attack_verb_simple = "preach to" + attacktext = "preaches to" + //attack_verb_simple = "preach to" attack_sound = 'sound/magic/clockwork/ratvar_attack.ogg' throw_message = "doesn't affect the purity of" speed = 4 @@ -38,55 +38,55 @@ deathsound = 'sound/magic/demon_dies.ogg' deathmessage = "begins to shudder as it becomes transparent..." loot_drop = /obj/item/clothing/neck/cloak/herald_cloak - + can_talk = 1 attack_action_types = list(/datum/action/innate/elite_attack/herald_trishot, /datum/action/innate/elite_attack/herald_directionalshot, /datum/action/innate/elite_attack/herald_teleshot, /datum/action/innate/elite_attack/herald_mirror) - + var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/my_mirror = null var/is_mirror = FALSE - + /mob/living/simple_animal/hostile/asteroid/elite/herald/death() . = ..() if(!is_mirror) addtimer(CALLBACK(src, .proc/become_ghost), 8) if(my_mirror != null) qdel(my_mirror) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/become_ghost() icon_state = "herald_ghost" - + /mob/living/simple_animal/hostile/asteroid/elite/herald/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) . = ..() playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) - + /datum/action/innate/elite_attack/herald_trishot name = "Triple Shot" button_icon_state = "herald_trishot" chosen_message = "You are now firing three shots in your chosen direction." chosen_attack_num = HERALD_TRISHOT - + /datum/action/innate/elite_attack/herald_directionalshot name = "Circular Shot" button_icon_state = "herald_directionalshot" chosen_message = "You are firing projectiles in all directions." chosen_attack_num = HERALD_DIRECTIONALSHOT - + /datum/action/innate/elite_attack/herald_teleshot name = "Teleport Shot" button_icon_state = "herald_teleshot" chosen_message = "You will now fire a shot which teleports you where it lands." chosen_attack_num = HERALD_TELESHOT - + /datum/action/innate/elite_attack/herald_mirror name = "Summon Mirror" button_icon_state = "herald_mirror" chosen_message = "You will spawn a mirror which duplicates your attacks." chosen_attack_num = HERALD_MIRROR - + /mob/living/simple_animal/hostile/asteroid/elite/herald/OpenFire() if(client) switch(chosen_attack) @@ -121,20 +121,20 @@ my_mirror.herald_teleshot(target) if(HERALD_MIRROR) herald_mirror() - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/shoot_projectile(turf/marker, set_angle, var/is_teleshot) var/turf/startloc = get_turf(src) - var/obj/projectile/herald/H = null + var/obj/item/projectile/herald/H = null if(!is_teleshot) - H = new /obj/projectile/herald(startloc) + H = new /obj/item/projectile/herald(startloc) else - H = new /obj/projectile/herald/teleshot(startloc) + H = new /obj/item/projectile/herald/teleshot(startloc) H.preparePixelProjectile(marker, startloc) H.firer = src if(target) H.original = target H.fire(set_angle) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_trishot(target) ranged_cooldown = world.time + 30 playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) @@ -148,17 +148,17 @@ addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 10) addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 12) addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 14) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_circleshot() var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) for(var/i in directional_shot_angles) shoot_projectile(get_turf(src), i, FALSE) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/unenrage() if(stat == DEAD || is_mirror) return icon_state = "herald" - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_directionalshot() ranged_cooldown = world.time + 50 if(!is_mirror) @@ -169,14 +169,14 @@ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) addtimer(CALLBACK(src, .proc/herald_circleshot), 15) addtimer(CALLBACK(src, .proc/unenrage), 20) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_teleshot(target) ranged_cooldown = world.time + 30 playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) var/target_turf = get_turf(target) var/angle_to_target = Get_Angle(src, target_turf) shoot_projectile(target_turf, angle_to_target, TRUE) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_mirror() ranged_cooldown = world.time + 40 playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) @@ -187,7 +187,7 @@ my_mirror = new_mirror my_mirror.my_master = src my_mirror.faction = faction.Copy() - + /mob/living/simple_animal/hostile/asteroid/elite/herald/mirror name = "herald's mirror" desc = "This fiendish work of magic copies the herald's attacks. Seems logical to smash it." @@ -200,17 +200,17 @@ del_on_death = TRUE is_mirror = TRUE var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null - + /mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize() ..() toggle_ai(AI_OFF) - + /mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Destroy() if(my_master != null) my_master.my_mirror = null . = ..() - -/obj/projectile/herald + +/obj/item/projectile/herald name ="death bolt" icon_state= "chronobolt" damage = 15 @@ -219,13 +219,13 @@ eyeblur = 0 damage_type = BRUTE pass_flags = PASSTABLE - -/obj/projectile/herald/teleshot + +/obj/item/projectile/herald/teleshot name ="golden bolt" damage = 0 color = rgb(255,255,102) -/obj/projectile/herald/on_hit(atom/target, blocked = FALSE) +/obj/item/projectile/herald/on_hit(atom/target, blocked = FALSE) . = ..() if(ismineralturf(target)) var/turf/closed/mineral/M = target @@ -236,11 +236,11 @@ var/mob/living/F = firer if(F != null && istype(F, /mob/living/simple_animal/hostile/asteroid/elite) && F.faction_check_mob(L)) L.heal_overall_damage(damage) - -/obj/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE) + +/obj/item/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE) . = ..() firer.forceMove(get_turf(src)) - + //Herald's loot: Cloak of the Prophet /obj/item/clothing/neck/cloak/herald_cloak @@ -250,20 +250,20 @@ icon_state = "herald_cloak" body_parts_covered = CHEST|GROIN|ARMS hit_reaction_chance = 10 - + /obj/item/clothing/neck/cloak/herald_cloak/proc/reactionshot(mob/living/carbon/owner) var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) for(var/i in directional_shot_angles) shoot_projectile(get_turf(owner), i, owner) - + /obj/item/clothing/neck/cloak/herald_cloak/proc/shoot_projectile(turf/marker, set_angle, mob/living/carbon/owner) var/turf/startloc = get_turf(owner) - var/obj/projectile/herald/H = null - H = new /obj/projectile/herald(startloc) + var/obj/item/projectile/herald/H = null + H = new /obj/item/projectile/herald(startloc) H.preparePixelProjectile(marker, startloc) H.firer = owner H.fire(set_angle) - + /obj/item/clothing/neck/cloak/herald_cloak/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) . = ..() if(!rand(1,100) <= hit_reaction_chance) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index 96989511bedc..f260e7414fe4 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -12,7 +12,7 @@ * - Charges at the target after a telegraph, throwing them across the arena should it connect. * - Legionnaire's head detaches, attacking as it's own entity. Has abilities of it's own later into the fight. Once dead, regenerates after a brief period. If the skill is used while the head is off, it will be killed. * - Leaves a pile of bones at your location. Upon using this skill again, you'll swap locations with the bone pile. - * - Spews a cloud of smoke from it's maw, wherever said maw is. + * - Spews a cloud of smoke from it's maw, wherever said maw is. * A unique fight incorporating the head mechanic of legion into a whole new beast. Combatants will need to make sure the tag-team of head and body don't lure them into a deadly trap. */ @@ -28,8 +28,8 @@ health = 800 melee_damage_lower = 30 melee_damage_upper = 30 - attack_verb_continuous = "slashes its arms at" - attack_verb_simple = "slash your arms at" + attacktext = "slashes its arms at" + //attack_verb_simple = "slash your arms at" attack_sound = 'sound/weapons/bladeslice.ogg' throw_message = "doesn't affect the sturdiness of" speed = 1 @@ -43,35 +43,35 @@ /datum/action/innate/elite_attack/head_detach, /datum/action/innate/elite_attack/bonfire_teleport, /datum/action/innate/elite_attack/spew_smoke) - + var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/myhead = null var/obj/structure/legionnaire_bonfire/mypile = null var/has_head = TRUE - + /datum/action/innate/elite_attack/legionnaire_charge name = "Legionnaire Charge" button_icon_state = "legionnaire_charge" chosen_message = "You will attempt to grab your opponent and throw them." chosen_attack_num = LEGIONNAIRE_CHARGE - + /datum/action/innate/elite_attack/head_detach name = "Release Head" button_icon_state = "head_detach" chosen_message = "You will now detach your head or kill it if it is already released." chosen_attack_num = HEAD_DETACH - + /datum/action/innate/elite_attack/bonfire_teleport name = "Bonfire Teleport" button_icon_state = "bonfire_teleport" chosen_message = "You will leave a bonfire. Second use will let you swap positions with it indefintiely. Using this move on the same tile as your active bonfire removes it." chosen_attack_num = BONFIRE_TELEPORT - + /datum/action/innate/elite_attack/spew_smoke name = "Spew Smoke" button_icon_state = "spew_smoke" chosen_message = "Your head will spew smoke in an area, wherever it may be." chosen_attack_num = SPEW_SMOKE - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/OpenFire() if(client) switch(chosen_attack) @@ -94,7 +94,7 @@ bonfire_teleport() if(SPEW_SMOKE) spew_smoke() - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge(target) ranged_cooldown = world.time + 50 var/dir_to_target = get_dir(get_turf(src), get_turf(target)) @@ -105,7 +105,7 @@ playsound(src,'sound/magic/demon_attack1.ogg', 200, 1) visible_message("[src] prepares to charge!") addtimer(CALLBACK(src, .proc/legionnaire_charge_2, dir_to_target, 0), 5) - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge_2(var/move_dir, var/times_ran) if(times_ran >= 4) return @@ -133,7 +133,7 @@ L.Paralyze(20) L.adjustBruteLoss(50) addtimer(CALLBACK(src, .proc/legionnaire_charge_2, move_dir, (times_ran + 1)), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/head_detach(target) ranged_cooldown = world.time + 10 if(myhead != null) @@ -157,11 +157,11 @@ else if(health < maxHealth * 0.5) myhead.melee_damage_lower = 20 myhead.melee_damage_upper = 20 - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/onHeadDeath() myhead = null addtimer(CALLBACK(src, .proc/regain_head), 50) - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/regain_head() has_head = TRUE if(stat == DEAD) @@ -193,7 +193,7 @@ forceMove(pileturf) visible_message("[src] forms from the bonfire!") mypile.forceMove(legionturf) - + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/spew_smoke() ranged_cooldown = world.time + 60 var/turf/T = null @@ -210,7 +210,7 @@ var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(2, T) smoke.start() - + //The legionnaire's head. Basically the same as any legion head, but we have to tell our creator when we die so they can generate another head. /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead name = "legionnaire head" @@ -224,8 +224,8 @@ health = 80 melee_damage_lower = 10 melee_damage_upper = 10 - attack_verb_continuous = "bites at" - attack_verb_simple = "bite at" + attacktext = "bites at" + //attack_verb_simple = "bite at" attack_sound = 'sound/effects/curse1.ogg' throw_message = "simply misses" speed = 0 @@ -235,12 +235,12 @@ faction = list() ranged = FALSE var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/body = null - + /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/death() . = ..() if(body) body.onHeadDeath() - + //The legionnaire's bonfire, which can be swapped positions with. Also sets flammable living beings on fire when they walk over it. /obj/structure/legionnaire_bonfire name = "bone pile" @@ -254,20 +254,20 @@ light_range = 4 light_color = LIGHT_COLOR_RED var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/myowner = null - - + + /obj/structure/legionnaire_bonfire/Entered(atom/movable/mover, turf/target) if(isliving(mover)) var/mob/living/L = mover L.adjust_fire_stacks(3) L.IgniteMob() . = ..() - + /obj/structure/legionnaire_bonfire/Destroy() if(myowner != null) myowner.mypile = null . = ..() - + //The visual effect which appears in front of legionnaire when he goes to charge. /obj/effect/temp_visual/dragon_swoop/legionnaire duration = 10 @@ -276,7 +276,7 @@ /obj/effect/temp_visual/dragon_swoop/legionnaire/Initialize() . = ..() transform *= 0.33 - + // Legionnaire's loot: Legionnaire Spine /obj/item/crusher_trophy/legionnaire_spine diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index 73aff69c6ce7..dd34d035e6a6 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -28,8 +28,8 @@ health = 800 melee_damage_lower = 15 melee_damage_upper = 15 - attack_verb_continuous = "smashes into the side of" - attack_verb_simple = "smash into the side of" + attacktext = "smashes into the side of" + //attack_verb_simple = "smash into the side of" attack_sound = 'sound/weapons/sonic_jackhammer.ogg' throw_message = "merely dinks off of the" speed = 4 @@ -43,34 +43,34 @@ /datum/action/innate/elite_attack/magic_box, /datum/action/innate/elite_attack/pandora_teleport, /datum/action/innate/elite_attack/aoe_squares) - + var/sing_shot_length = 8 var/cooldown_time = 20 - + /datum/action/innate/elite_attack/singular_shot name = "Singular Shot" button_icon_state = "singular_shot" chosen_message = "You are now creating a single linear magic square." chosen_attack_num = SINGULAR_SHOT - + /datum/action/innate/elite_attack/magic_box name = "Magic Box" button_icon_state = "magic_box" chosen_message = "You are now attacking with a box of magic squares." chosen_attack_num = MAGIC_BOX - + /datum/action/innate/elite_attack/pandora_teleport name = "Line Teleport" button_icon_state = "pandora_teleport" chosen_message = "You will now teleport to your target." chosen_attack_num = PANDORA_TELEPORT - + /datum/action/innate/elite_attack/aoe_squares name = "AOE Blast" button_icon_state = "aoe_squares" chosen_message = "Your attacks will spawn an AOE blast at your target location." chosen_attack_num = AOE_SQUARES - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire() if(client) switch(chosen_attack) @@ -93,7 +93,7 @@ pandora_teleport(target) if(AOE_SQUARES) aoe_squares(target) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/Life() . = ..() if(health >= maxHealth * 0.5) @@ -104,13 +104,13 @@ return else cooldown_time = 10 - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target) ranged_cooldown = world.time + (cooldown_time * 0.5) var/dir_to_target = get_dir(get_turf(src), get_turf(target)) var/turf/T = get_step(get_turf(src), dir_to_target) singular_shot_line(sing_shot_length, dir_to_target, T) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot_line(var/procsleft, var/angleused, var/turf/T) if(procsleft <= 0) return @@ -118,14 +118,14 @@ T = get_step(T, angleused) procsleft = procsleft - 1 addtimer(CALLBACK(src, .proc/singular_shot_line, procsleft, angleused, T), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/magic_box(target) ranged_cooldown = world.time + cooldown_time var/turf/T = get_turf(target) for(var/t in spiral_range_turfs(3, T)) if(get_dist(t, T) > 1) new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport(target) ranged_cooldown = world.time + cooldown_time var/turf/T = get_turf(target) @@ -134,7 +134,7 @@ new /obj/effect/temp_visual/hierophant/telegraph(source, src) playsound(source,'sound/machines/airlockopen.ogg', 200, 1) addtimer(CALLBACK(src, .proc/pandora_teleport_2, T, source), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(var/turf/T, var/turf/source) new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src) @@ -146,20 +146,20 @@ visible_message("[src] fades out!") density = FALSE addtimer(CALLBACK(src, .proc/pandora_teleport_3, T), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_3(var/turf/T) forceMove(T) animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN density = TRUE visible_message("[src] fades in!") - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares(target) ranged_cooldown = world.time + cooldown_time var/turf/T = get_turf(target) new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) var/max_size = 2 addtimer(CALLBACK(src, .proc/aoe_squares_2, T, 0, max_size), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares_2(var/turf/T, var/ring, var/max_size) if(ring > max_size) return @@ -167,12 +167,12 @@ if(get_dist(t, T) == ring) new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) addtimer(CALLBACK(src, .proc/aoe_squares_2, T, (ring + 1), max_size), 2) - + //The specific version of hiero's squares pandora uses /obj/effect/temp_visual/hierophant/blast/pandora damage = 20 monster_damage_boost = FALSE - + //Pandora's loot: Hope /obj/item/clothing/accessory/pandora_hope name = "Hope" @@ -180,7 +180,7 @@ icon = 'icons/obj/lavaland/elite_trophies.dmi' icon_state = "hope" resistance_flags = FIRE_PROOF - + /obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user) var/mob/living/L = user if(L && L.mind) diff --git a/icons/mob/accessories.dmi b/icons/mob/accessories.dmi index 8e3e48230f4df3db50651700122338b61d3e09e5..0bcffe2026d193a7438324e869650d62753bd972 100644 GIT binary patch literal 8844 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 delta 18715 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 IM6N<$f^1$EJpcdz diff --git a/yogstation.dme b/yogstation.dme index 3e31da7b9afe..db5c7cdb0341 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -217,6 +217,7 @@ #include "code\_onclick\hud\guardian.dm" #include "code\_onclick\hud\hud.dm" #include "code\_onclick\hud\human.dm" +#include "code\_onclick\hud\lavaland_elite.dm" #include "code\_onclick\hud\monkey.dm" #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\pai.dm" @@ -2245,6 +2246,11 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\elite.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\goliath_broodmother.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\herald.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\legionnaire.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm" From eaacd353bbad6636ac75f519a24a391990119404 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 14:14:49 -0500 Subject: [PATCH 14/16] health is reduced to 200 on revival instead of 400 --- .../living/simple_animal/hostile/mining_mobs/elites/elite.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 7ae2260cf4a0..2dc209fedcbf 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -329,7 +329,7 @@ obj/structure/elite_tumor/proc/onEliteWon() E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0) to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") - E.maxHealth = E.maxHealth * 0.5 + E.maxHealth = E.maxHealth * 0.25 E.health = E.maxHealth E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people." E.sentience_type = SENTIENCE_ORGANIC From 73142e949846d08e468707c223f888d5eff409e3 Mon Sep 17 00:00:00 2001 From: SomeguyManperson Date: Tue, 19 Nov 2019 18:01:10 -0500 Subject: [PATCH 15/16] eeeeeeeeeeeeeeeee --- .../simple_animal/hostile/mining_mobs/elites/herald.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index 9391a277080f..4ee62a1363d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -265,10 +265,10 @@ H.fire(set_angle) /obj/item/clothing/neck/cloak/herald_cloak/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - . = ..() - if(!rand(1,100) <= hit_reaction_chance) - return + if(!prob(hit_reaction_chance)) + return FALSE owner.visible_message("[owner]'s [src] emits a loud noise as [owner] is struck!") var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) - addtimer(CALLBACK(src, .proc/reactionshot, owner), 10) \ No newline at end of file + addtimer(CALLBACK(src, .proc/reactionshot, owner), 10) + return TRUE \ No newline at end of file From 67a96a36d8a34121aa84f4cc2b996658763aaa44 Mon Sep 17 00:00:00 2001 From: Theos Date: Tue, 19 Nov 2019 18:12:22 -0500 Subject: [PATCH 16/16] hope gives minor armor same as talisman/codpiece --- .../living/simple_animal/hostile/mining_mobs/elites/pandora.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index dd34d035e6a6..2a7a9a9c72ea 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -179,6 +179,7 @@ desc = "Found at the bottom of Pandora. After all the evil was released, this was the only thing left inside." icon = 'icons/obj/lavaland/elite_trophies.dmi' icon_state = "hope" + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) //something something determination something resistance_flags = FIRE_PROOF /obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user) @@ -189,4 +190,4 @@ /obj/item/clothing/accessory/pandora_hope/on_uniform_dropped(obj/item/clothing/under/U, user) var/mob/living/L = user if(L && L.mind) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland") \ No newline at end of file + SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland")