diff --git a/_maps/RandomRuins/SpaceRuins/kinggoatarena.dmm b/_maps/RandomRuins/SpaceRuins/kinggoatarena.dmm index 2473abd136f..b16e7f6769b 100644 --- a/_maps/RandomRuins/SpaceRuins/kinggoatarena.dmm +++ b/_maps/RandomRuins/SpaceRuins/kinggoatarena.dmm @@ -24,6 +24,8 @@ /area/ruin/powered/kinggoat_arena) "f" = ( /mob/living/simple_animal/hostile/retaliate/goose{ + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0); + damage_coeff = list("brute" = 0, "fire" = 0, "toxin" = 0, "clone" = 0, "stamina" = 0, "oxygen" = 0); desc = "If you are alive and reading this you should not be in this room and should prob tell a admin how you got here."; name = "The Paradox Goose" }, diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index acf77ed73e1..1f96a5401b1 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -38,6 +38,7 @@ #define BOSS_MEDAL_LEGION "Legion Killer" #define BOSS_MEDAL_TENDRIL "Tendril Exterminator" #define BOSS_MEDAL_SWARMERS "Swarmer Beacon Killer" +#define BOSS_MEDAL_KINGGOAT "King Goat Killer" #define BOSS_MEDAL_MINER_CRUSHER "Blood-drunk Miner Crusher" #define BOSS_MEDAL_BUBBLEGUM_CRUSHER "Bubblegum Crusher" @@ -46,6 +47,7 @@ #define BOSS_MEDAL_HIEROPHANT_CRUSHER "Hierophant Crusher" #define BOSS_MEDAL_LEGION_CRUSHER "Legion Crusher" #define BOSS_MEDAL_SWARMERS_CRUSHER "Swarmer Beacon Crusher" +#define BOSS_MEDAL_KINGGOAT_CRUSHER "King Goat Crusher" // Medal hub IDs for boss-kill scores #define BOSS_SCORE "Bosses Killed" @@ -56,4 +58,5 @@ #define HIEROPHANT_SCORE "Hierophants Killed" #define LEGION_SCORE "Legion Killed" #define SWARMER_BEACON_SCORE "Swarmer Beacs Killed" +#define KINGGOAT_SCORE "King Goat Killed" #define TENDRIL_CLEAR_SCORE "Tendrils Killed" diff --git a/code/datums/achievements/boss_achievements.dm b/code/datums/achievements/boss_achievements.dm index 1c0cc0ad9ee..b15b848b479 100644 --- a/code/datums/achievements/boss_achievements.dm +++ b/code/datums/achievements/boss_achievements.dm @@ -56,6 +56,12 @@ database_id = BOSS_MEDAL_SWARMERS icon = "swarmer" +/datum/award/achievement/boss/king_goat_kill + name = "King Goat Killer" + desc = "The king is dead, long live the king!" + database_id = BOSS_MEDAL_KINGGOAT + icon = "goatboss" + /datum/award/achievement/boss/blood_miner_crusher name = "Blood-drunk Miner Crusher" desc = "I guess he couldn't handle his drink that well." @@ -95,3 +101,9 @@ name = "Swarm Beacon Crusher" desc = "GET THEM OFF OF ME!" database_id = BOSS_MEDAL_SWARMERS_CRUSHER + +/datum/award/achievement/boss/king_goat_crusher + name = "King Goat Crusher" + desc = "The king is dead, long live the king!" + database_id = BOSS_MEDAL_KINGGOAT_CRUSHER + icon = "goatboss" diff --git a/code/datums/action.dm b/code/datums/action.dm index cf98e7316e7..3c1913fdb38 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -334,6 +334,11 @@ button_icon_state = "vortex_recall" /datum/action/item_action/vortex_recall/IsAvailable() + var/turf/current_location = get_turf(target) + var/area/current_area = current_location.loc + if(current_area.noteleport) + to_chat(target, "[src] fizzles uselessly.") + return if(istype(target, /obj/item/hierophant_club)) var/obj/item/hierophant_club/H = target if(H.teleporting) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 276882e0f64..6de0a0a45ff 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2280,7 +2280,7 @@ if(prob(50)) the_toy = pickweight(GLOB.arcade_prize_pool) else - the_toy = pick(subtypesof(/obj/item/toy/plush)) + the_toy = pick(subtypesof(/obj/item/toy/plush) - typesof(/obj/item/toy/plush/goatplushie/angry/kinggoat)) new the_toy(.) /datum/supply_pack/costumes_toys/wizard diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index a30f3ede72f..cd30316fa41 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -448,7 +448,7 @@ denied_type = /obj/item/crusher_trophy/king_goat /obj/item/crusher_trophy/king_goat/effect_desc() - return "you to passivily recharge markers 5x as fast while equipped and do a decent amount of damage at the cost of dulling the blade" + return "you also passively recharge markers 5x as fast while equipped and do a decent amount of damage at the cost of dulling the blade" /obj/item/crusher_trophy/king_goat/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) marker.damage = 10 //in my testing only does damage to simple mobs so should be fine to have it high diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index ec684f83560..95a2c3f394b 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -41,7 +41,7 @@ /datum/map_template/shelter/alpha/New() . = ..() - blacklisted_turfs = typecacheof(/turf/open/indestructible) //yogs added indestructible floors to the shelter black list + blacklisted_turfs = typecacheof(/turf/open/indestructible) whitelisted_turfs = typecacheof(/turf/closed/mineral) banned_objects = typecacheof(/obj/structure/stone_tile) @@ -73,6 +73,6 @@ /datum/map_template/shelter/charlie/New() . = ..() - blacklisted_turfs = typecacheof(/turf/open/indestructible) //yogs added indestructible floors to the shelter black list + blacklisted_turfs = typecacheof(/turf/open/indestructible) whitelisted_turfs = typecacheof(/turf/closed/mineral) banned_objects = typecacheof(/obj/structure/stone_tile) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm similarity index 94% rename from code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm rename to code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm index 64091a118e8..195363c2ba4 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm @@ -56,9 +56,6 @@ Difficulty: Insanely Hard move_to_delay = 3 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 - - - var/stun_chance = 5 //chance per attack to Weaken target /mob/living/simple_animal/hostile/megafauna/king/ex_act(severity, target) @@ -78,6 +75,8 @@ Difficulty: Insanely Hard icon_state = "king_goat2" icon_living = "king_goat2" butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 4, /obj/item/clothing/head/goatpelt/king = 1) + achievement_type = /datum/award/achievement/boss/king_goat_kill + crusher_achievement_type = /datum/award/achievement/boss/king_goat_crusher health = 750 maxHealth = 750 armour_penetration = 50 @@ -85,15 +84,15 @@ Difficulty: Insanely Hard melee_damage_upper = 60 environment_smash = ENVIRONMENT_SMASH_RWALLS pixel_y = 5 - - var/spellscast = 0 + crusher_loot = list(/obj/item/crusher_trophy/king_goat) + stun_chance = 7 + var/spellscast = 0 //how many spells king goat can cast pr phase var/phase3 = FALSE var/sound_id = "goat" - var/special_attacks = 0 - var/list/rangers = list() + var/special_attacks = 0 //How many special attacks it can cast before he looses them which are passive attack buffs + var/list/rangers = list() //People in range of epic goat boss music var/current_song = 'sound/ambience/Visager-Battle.ogg' var/current_song_length = 1200 - stun_chance = 7 /mob/living/simple_animal/hostile/megafauna/king/phase2/Initialize() . = ..() @@ -166,7 +165,7 @@ Difficulty: Insanely Hard /mob/living/simple_animal/hostile/megafauna/king/phase2/Retaliate() set waitfor = FALSE ..() - if(spellscast < 10) + if(spellscast < 5) if(prob(5) && move_to_delay >= 3) //speed buff spellscast++ visible_message("\The [src] shimmers and seems to phase in and out of reality itself!") @@ -271,15 +270,15 @@ Difficulty: Insanely Hard continue L.stop_sound_channel(CHANNEL_JUKEBOX) if(move_to_delay < 3) - move_to_delay += 0.1 - if((health <= 150 && !phase3 && spellscast == 10) || (stat == DEAD && !phase3)) //begin phase 3, reset spell limit and heal + move_to_delay += 0.2 + if(!phase3 && ((health <= 150 && spellscast == 5) || stat == DEAD)) //begin phase 3, reset spell limit and heal phase3_transition() if(!.) return FALSE - if(special_attacks >= 10 && melee_damage_type != BRUTE) + if(special_attacks >= 5 && melee_damage_type != BRUTE) visible_message("The energy surrounding \the [src]'s horns dissipates.") melee_damage_type = BRUTE - if(special_attacks >= 10 && melee_damage_lower == 50) + if(special_attacks >= 5 && melee_damage_lower == 50) visible_message("The [src]' horns shrink back down to normal size.") melee_damage_lower = 40 diff --git a/code/modules/ruins/lavalandruin_code/kinggoat.dm b/code/modules/ruins/lavalandruin_code/kinggoat.dm index 72518dff292..3e889a836f4 100644 --- a/code/modules/ruins/lavalandruin_code/kinggoat.dm +++ b/code/modules/ruins/lavalandruin_code/kinggoat.dm @@ -1,5 +1,6 @@ /turf/open/indestructible/gold name = "gold floor" + initial_gas_mix = LAVALAND_DEFAULT_ATMOS baseturfs = /turf/open/indestructible/gold icon_state = "gold" tiled_dirt = FALSE @@ -7,6 +8,7 @@ /turf/open/indestructible/diamond name = "diamond floor" + initial_gas_mix = LAVALAND_DEFAULT_ATMOS baseturfs = /turf/open/indestructible/diamond icon_state = "diamond" tiled_dirt = FALSE @@ -34,7 +36,7 @@ /obj/item/gun/energy/goatgun name = "goat gun" desc = "Whoever you fire this at is gonna be in for a baaaaaaad surprise." //ha ha I am funny man please laugh HAHAHAHAHAHAHAHA - icon_state = "meteor_gun" + icon_state = "goat_gun" item_state = "c20r" w_class = WEIGHT_CLASS_BULKY ammo_type = list(/obj/item/ammo_casing/energy/goat) diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm index a19c932fa42..133f76b4fba 100644 --- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm @@ -44,6 +44,10 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) /obj/item/hilbertshotel/proc/promptAndCheckIn(mob/user) var/chosenRoomNumber = input(user, "What number room will you be checking into?", "Room Number") as null|num + var/area/currentArea = get_area(src) + if(currentArea.type == /area/ruin/powered/kinggoat_arena) + to_chat(user, "[src] fizzles uselessly.") + return if(!chosenRoomNumber) return if(chosenRoomNumber > SHORT_REAL_LIMIT) diff --git a/code/modules/spells/spell_types/rod_form.dm b/code/modules/spells/spell_types/rod_form.dm index 5debe7341c6..72b99b45492 100644 --- a/code/modules/spells/spell_types/rod_form.dm +++ b/code/modules/spells/spell_types/rod_form.dm @@ -16,6 +16,9 @@ if(istype(A, /area/wizard_station)) to_chat(user, "You know better than to trash Wizard Federation property. Best wait until you leave to use [src].") return + else if(istype(A, /area/ruin/powered/kinggoat_arena)) + to_chat(user, "Some foul goat based magic is preventing you from using rod form here!. You must beat the king goat or escape the arena somehow before you can use [src].") + return for(var/mob/living/M in targets) var/turf/start = get_turf(M) var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(start, M.dir, (15 + spell_level * 3))) diff --git a/icons/UI_Icons/Achievements/Boss/goatboss.png b/icons/UI_Icons/Achievements/Boss/goatboss.png new file mode 100644 index 00000000000..902e1195d39 Binary files /dev/null and b/icons/UI_Icons/Achievements/Boss/goatboss.png differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 8f065d41f6c..d52c07372c1 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index 6e509963eb7..e0aa1183cf8 100644 Binary files a/icons/obj/lavaland/artefacts.dmi and b/icons/obj/lavaland/artefacts.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 72835652852..f9d7d51257e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2326,6 +2326,7 @@ #include "code\modules\mob\living\simple_animal\hostile\megafauna\colossus.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\drake.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\hierophant.dm" +#include "code\modules\mob\living\simple_animal\hostile\megafauna\king_of_goats.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\megafauna.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\swarmer.dm" @@ -2345,7 +2346,6 @@ #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\ghost.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\king_of_goats.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\spaceman.dm" #include "code\modules\mob\living\simple_animal\slime\death.dm"