diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm
index 8bc450a4e89..7dda2b1ac45 100644
--- a/code/datums/components/crafting/recipes.dm
+++ b/code/datums/components/crafting/recipes.dm
@@ -786,3 +786,11 @@
/obj/item/shovel/spade = 1)
result = /obj/item/shovel/serrated
category = CAT_PRIMAL
+
+/datum/crafting_recipe/lasso
+ name = "Bone Lasso"
+ reqs = list(
+ /obj/item/stack/sheet/bone = 1,
+ /obj/item/stack/sheet/sinew = 5)
+ result = /obj/item/key/lasso
+ category = CAT_PRIMAL
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index 529492e3ed7..cfc5d4682d1 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -197,7 +197,7 @@
handle_vehicle_layer()
handle_vehicle_offsets()
else
- to_chat(user, "You'll need the keys in one of your hands to [drive_verb] [AM].")
+ to_chat(user, "You'll need a special item in one of your hands to [drive_verb] [AM].")
/datum/component/riding/proc/Unbuckle(atom/movable/M)
addtimer(CALLBACK(parent, /atom/movable/.proc/unbuckle_mob, M), 0, TIMER_UNIQUE)
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 10ff8274e4f..245f734784e 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -160,6 +160,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \
new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \
new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2), \
new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \
+ new/datum/stack_recipe("saddle", /obj/item/saddle, 5), \
))
/obj/item/stack/sheet/leather/get_main_recipes()
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 618c33c9f87..3015efbe45a 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -288,7 +288,8 @@
/obj/item/organ/regenerative_core,
/obj/item/wormhole_jaunter,
/obj/item/storage/bag/plants,
- /obj/item/stack/marker_beacon
+ /obj/item/stack/marker_beacon,
+ /obj/item/key/lasso
))
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 52360540c29..65e802c7f48 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -169,6 +169,7 @@
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
+ D.drive_verb = "ride"
/mob/living/simple_animal/cow/Life()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index 4cecdf37dee..c835d5cc011 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -32,6 +32,7 @@
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_VERY_STRONG
pull_force = MOVE_FORCE_VERY_STRONG
+ gender = MALE//lavaland elite goliath says that i'''' 't s female and i ''t s stronger because of sexual dimorphism, so normal goliaths should be male
var/pre_attack = 0
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
@@ -49,9 +50,11 @@
return
icon_state = pre_attack_icon
-/mob/living/simple_animal/hostile/asteroid/goliath/revive(full_heal = FALSE, admin_revive = FALSE)
+/mob/living/simple_animal/hostile/asteroid/goliath/revive(full_heal = FALSE, admin_revive = FALSE)//who the fuck anchors mobs
if(..())
- anchored = TRUE
+ move_force = MOVE_FORCE_VERY_STRONG
+ move_resist = MOVE_FORCE_VERY_STRONG
+ pull_force = MOVE_FORCE_VERY_STRONG
. = 1
/mob/living/simple_animal/hostile/asteroid/goliath/death(gibbed)
@@ -99,6 +102,39 @@
loot = list()
stat_attack = UNCONSCIOUS
robust_searching = 1
+ food_type = list(/obj/item/reagent_containers/food/snacks/customizable/salad/ashsalad, /obj/item/reagent_containers/food/snacks/customizable/soup/ashsoup, /obj/item/reagent_containers/food/snacks/grown/ash_flora)//use lavaland plants to feed the lavaland monster
+ tame_chance = 10
+ bonus_tame_chance = 5
+ var/saddled = FALSE
+
+/mob/living/simple_animal/hostile/asteroid/goliath/beast/tamed(whomst)
+ if(isliving(whomst))
+ var/mob/living/fren = whomst
+ friends = fren
+ faction = fren.faction.Copy()
+ ..()
+
+/mob/living/simple_animal/hostile/asteroid/goliath/beast/attackby(obj/item/O, mob/user, params)
+ if(istype(O, /obj/item/saddle) && !saddled)
+ if(tame && do_after(user,55,target=src))
+ user.visible_message("You manage to put [O] on [src], you can now ride [p_them()].")
+ qdel(O)
+ saddled = TRUE
+ can_buckle = TRUE
+ buckle_lying = FALSE
+ add_overlay("goliath_saddled")
+ var/datum/component/riding/D = LoadComponent(/datum/component/riding)
+ D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
+ D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
+ D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
+ D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
+ D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
+ D.keytype = /obj/item/key/lasso
+ D.drive_verb = "ride"
+ else
+ user.visible_message("[src] is rocking around! You can't put the saddle on!")
+ return
+ ..()
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
. = ..()
@@ -202,3 +238,9 @@
icon_state = "Goliath_tentacle_retract"
deltimer(timerid)
timerid = QDEL_IN(src, 7)
+
+/obj/item/saddle
+ name = "saddle"
+ desc = "This saddle will solve all your problems with being killed by lava beasts!"
+ icon = 'icons/obj/items_and_weapons.dmi'
+ icon_state = "saddle"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 70319db4621..dc674ba56ff 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -184,12 +184,12 @@
return
if (prob(tame_chance)) //note: lack of feedback message is deliberate, keep them guessing!
tame = TRUE
- tamed()
+ tamed(user)
else
tame_chance += bonus_tame_chance
///Extra effects to add when the mob is tamed, such as adding a riding component
-/mob/living/simple_animal/proc/tamed()
+/mob/living/simple_animal/proc/tamed(whomst)
return
/mob/living/simple_animal/examine(mob/user)
diff --git a/code/modules/vehicles/lavaboat.dm b/code/modules/vehicles/lavaboat.dm
index 89b0a5c7bc6..8015024753d 100644
--- a/code/modules/vehicles/lavaboat.dm
+++ b/code/modules/vehicles/lavaboat.dm
@@ -15,7 +15,7 @@
/obj/vehicle/ridden/lavaboat/Initialize()
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.keytype = /obj/item/oar
+ D.keytype = list(/obj/item/oar)
D.allowed_turf_typecache = typecacheof(allowed_turf)
/obj/item/oar
diff --git a/code/modules/vehicles/vehicle_key.dm b/code/modules/vehicles/vehicle_key.dm
index 204a10bd17e..0847512f094 100644
--- a/code/modules/vehicles/vehicle_key.dm
+++ b/code/modules/vehicles/vehicle_key.dm
@@ -13,3 +13,14 @@
desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
icon_state = "keyjanitor"
+/obj/item/key/lasso
+ name = "bone lasso"
+ desc = "Perfect for taming all kinds of supernatural beasts! (Warning: only perfect for taming one kind of supernatural beast.)"
+ force = 12
+ icon_state = "lasso"
+ item_state = "chain"
+ lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
+ attack_verb = list("flogged", "whipped", "lashed", "disciplined")
+ hitsound = 'sound/weapons/whip.ogg'
+ slot_flags = ITEM_SLOT_BELT
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index 79b0a9b76c9..5b495fd993a 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi
index 38283d45e29..ff49753f22b 100644
Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ