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"