diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index bb93b464481..4ec6e2f3bff 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -112,7 +112,8 @@
/mob/living/simple_animal/parrot/proc/steal_from_mob, \
/mob/living/simple_animal/parrot/verb/drop_held_item_player, \
/mob/living/simple_animal/parrot/proc/perch_player, \
- /mob/living/simple_animal/parrot/proc/toggle_mode)
+ /mob/living/simple_animal/parrot/proc/toggle_mode,
+ /mob/living/simple_animal/parrot/proc/perch_mob_player)
/mob/living/simple_animal/parrot/death(gibbed)
@@ -120,6 +121,13 @@
held_item.loc = src.loc
held_item = null
walk(src,0)
+
+ if(buckled)
+ buckled.buckled_mob = null
+ buckled = null
+ pixel_x = initial(pixel_x)
+ pixel_y = initial(pixel_y)
+
..(gibbed)
/mob/living/simple_animal/parrot/Stat()
@@ -787,6 +795,46 @@
src << "There is no perch nearby to sit on!"
return
+
+/mob/living/simple_animal/parrot/proc/perch_mob_player()
+ set name = "Sit on Human's Shoulder"
+ set category = "Parrot"
+ set desc = "Sit on a nice comfy human being!"
+
+ if(stat || !client)
+ return
+
+ if(icon_state == "parrot_fly")
+ for(var/mob/living/carbon/human/H in view(src,1))
+ if(H.buckled_mob) //Already has a parrot, or is being eaten by a slime
+ continue
+ perch_on_human(H)
+ return
+ src << "There is nobody nearby that you can sit on!"
+ else
+ icon_state = "parrot_fly"
+ parrot_state = PARROT_WANDER
+ if(buckled)
+ src << "You are no longer sitting on [buckled]'s shoulder."
+ buckled.buckled_mob = null
+ buckled = null
+ pixel_x = initial(pixel_x)
+ pixel_y = initial(pixel_y)
+
+
+
+/mob/living/simple_animal/parrot/proc/perch_on_human(mob/living/carbon/human/H)
+ if(!H)
+ return
+ loc = get_turf(H)
+ H.buckle_mob(src, force=1)
+ pixel_y = 9
+ pixel_x = pick(-8,8) //pick left or right shoulder
+ icon_state = "parrot_sit"
+ parrot_state = PARROT_PERCH
+ src << "You sit on [H]'s shoulder."
+
+
/mob/living/simple_animal/parrot/proc/toggle_mode()
set name = "Toggle mode"
set category = "Parrot"
@@ -801,6 +849,7 @@
else
melee_damage_upper = parrot_damage_upper
a_intent = "harm"
+ src << "You will now [a_intent] others..."
return
/*
diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm
index cd900cf3776..bc64b2168c2 100644
--- a/code/modules/mob/living/simple_animal/slime/powers.dm
+++ b/code/modules/mob/living/simple_animal/slime/powers.dm
@@ -46,6 +46,7 @@
return 1
/mob/living/simple_animal/slime/proc/Feedon(mob/living/M)
+ M.unbuckle_mob(force=1) //Slimes rip other mobs (eg: shoulder parrots) off (Slimes Vs Slimes is already handled in CanFeedon())
if(M.buckle_mob(src, force=1))
M.visible_message("The [name] has latched onto [M]!", \
"The [name] has latched onto [M]!")