diff --git a/sandcode/code/interactions/_interaction.dm b/sandcode/code/interactions/_interaction.dm
index 0236ec0e59..8be4d21e95 100644
--- a/sandcode/code/interactions/_interaction.dm
+++ b/sandcode/code/interactions/_interaction.dm
@@ -1,4 +1,4 @@
-/**********************************
+/*********************************
*******Interactions code by HONKERTRON feat TestUnit********
**Contains a lot ammount of ERP and MEHANOYEBLYA**
**CREDIT TO ATMTA STATION FOR MOST OF THIS CODE, I ONLY MADE IT WORK IN /vg/ - Matt
@@ -19,7 +19,7 @@ var/list/interactions
var/datum/interaction/I = new itype()
interactions[I.command] = I
-/mob/living/carbon/human/proc/list_interaction_attributes()
+/mob/living/proc/list_interaction_attributes()
var/dat = ""
if(has_hands())
dat += "...have hands."
@@ -49,24 +49,24 @@ var/list/interactions
var/user_is_target = FALSE //Boolean. Pretty self explanatory.
-/datum/interaction/proc/evaluate_user(mob/living/carbon/human/user, silent = TRUE)
+/datum/interaction/proc/evaluate_user(mob/living/user, silent = TRUE)
if(user.get_refraction_dif())
if(!silent) //bye spam
to_chat(user, "You're still exhausted from the last time. You need to wait [DisplayTimeText(user.get_refraction_dif(), TRUE)] until you can do that!")
return FALSE
if(require_user_mouth)
- if(!user.has_mouth())
+ if(!user.has_mouth() && !issilicon(user)) //Again, silicons do not have the required parts normally.
if(!silent)
to_chat(user, "You don't have a mouth.")
return FALSE
- if(!user.mouth_is_free())
+ if(!user.mouth_is_free() && !issilicon(user)) //Borgs cannot wear mouthgear, bypassing the check.
if(!silent)
to_chat(user, "Your mouth is covered.")
return FALSE
- if(require_user_hands && !user.has_hands())
+ if(require_user_hands && !user.has_hands() && !issilicon(user)) //Edited to allow silicons to interact.
if(!silent)
to_chat(user, "You don't have hands.")
return FALSE
@@ -75,32 +75,32 @@ var/list/interactions
return TRUE
return FALSE
-/datum/interaction/proc/evaluate_target(mob/living/carbon/human/user, mob/living/carbon/human/target, silent = TRUE)
+/datum/interaction/proc/evaluate_target(mob/living/user, mob/living/target, silent = TRUE)
if(!user_is_target)
if(user == target)
if(!silent)
to_chat(user, "You can't do that to yourself.")
return FALSE
-
+
if(require_target_mouth)
if(!target.has_mouth())
if(!silent)
to_chat(user, "They don't have a mouth.")
return FALSE
- if(!target.mouth_is_free())
+ if(!target.mouth_is_free() && !issilicon(target))
if(!silent)
to_chat(user, "Their mouth is covered.")
return FALSE
- if(require_target_hands && !target.has_hands())
+ if(require_target_hands && !target.has_hands() && !issilicon(target))
if(!silent)
to_chat(user, "They don't have hands.")
return FALSE
return TRUE
-/datum/interaction/proc/get_action_link_for(mob/living/carbon/human/user, mob/living/carbon/human/target)
+/datum/interaction/proc/get_action_link_for(mob/living/user, mob/living/target)
return "[description]
"
/datum/interaction/Topic(href, href_list)
@@ -111,7 +111,7 @@ var/list/interactions
return TRUE
return FALSE
-/datum/interaction/proc/do_action(mob/living/carbon/human/user, mob/living/carbon/human/target)
+/datum/interaction/proc/do_action(mob/living/user, mob/living/target)
if(!user_is_target)
if(user == target) //tactical href fix
to_chat(user, "You cannot target yourself.")
@@ -144,38 +144,38 @@ var/list/interactions
//add_logs(target, user, "fucked2")
//target.attack_log += text("\[[time_stamp()]\] [write_log_target] [user.name] ([user.ckey])")
-/datum/interaction/proc/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target)
+/datum/interaction/proc/display_interaction(mob/living/user, mob/living/target)
if(simple_message)
var/use_message = replacetext(simple_message, "USER", "\the [user]")
use_message = replacetext(use_message, "TARGET", "\the [target]")
user.visible_message("[capitalize(use_message)]")
-/datum/interaction/proc/post_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target)
+/datum/interaction/proc/post_interaction(mob/living/user, mob/living/target)
user.last_interaction_time = world.time + 6
if(interaction_sound)
playsound(get_turf(user), interaction_sound, 50, 1, -1)
return
/*
-/atom/movable/attack_hand(mob/living/carbon/human/user)
+/atom/movable/attack_hand(mob/living/user)
. = ..()
if(can_buckle && buckled_mob)
if(user_unbuckle_mob(user))
return TRUE
-/atom/movable/MouseDrop_T(mob/living/carbon/human/M, mob/living/carbon/human/user)
+/atom/movable/MouseDrop_T(mob/living/M, mob/living/user)
. = ..()
if(can_buckle && istype(M) && !buckled_mob)
if(user_buckle_mob(M, user))
return TRUE
-/atom/movable/attack_hand(mob/living/carbon/human/user)
+/atom/movable/attack_hand(mob/living/user)
. = ..()
if(can_buckle && buckled_mob)
if(user_unbuckle_mob(user))
return TRUE
-/atom/movable/MouseDrop_T(mob/living/carbon/human/M, mob/living/carbon/human/user)
+/atom/movable/MouseDrop_T(mob/living/carbon/human/M, mob/living/user)
. = ..()
if(can_buckle && istype(M) && !buckled_mob)
if(user_buckle_mob(M, user))
diff --git a/sandcode/code/interactions/interaction_definitions.dm b/sandcode/code/interactions/interaction_definitions.dm
index 040e63d1f8..9e966dd137 100644
--- a/sandcode/code/interactions/interaction_definitions.dm
+++ b/sandcode/code/interactions/interaction_definitions.dm
@@ -65,7 +65,7 @@
command = "holdhand"
description = "Hold their hand."
require_user_hands = 1
- simple_message = "USER holds TARGET's hand."
+ simple_message = "USER holds TARGET's hand. Degenerate."
max_distance = 25
needs_physical_contact = 1
max_distance = 25
diff --git a/sandcode/code/interactions/interaction_interface.dm b/sandcode/code/interactions/interaction_interface.dm
index 9d73cd8092..d0a98824b9 100644
--- a/sandcode/code/interactions/interaction_interface.dm
+++ b/sandcode/code/interactions/interaction_interface.dm
@@ -9,27 +9,46 @@
return ..()
*/
-/mob/living/carbon/human/MouseDrop_T(mob/M as mob, mob/living/carbon/human/user as mob)
+/mob/living/MouseDrop_T(mob/M as mob, mob/living/user as mob)
. = ..()
if(M == src || src == usr || M != usr)
return
if(usr.restrained())
return
- if(!ishuman(src))
- return
user.try_interaction(src)
-/mob/living/carbon/human/verb/interact_with()
+/mob/living/verb/interact_with()
set name = "Interact With"
set desc = "Perform an interaction with someone."
set category = "IC"
set src in view()
- if(!usr.restrained() && ishuman(src))
+ if(!usr.restrained())
usr.try_interaction(src)
-/mob/living/carbon/human/try_interaction(mob/living/carbon/human/partner)
+/mob/living/silicon/robot/verb/toggle_gender() //Change to add silicon genderchanges. Experimental.
+ set category = "IC"
+ set name = "Set Gender"
+ set desc = "Allows you to set your gender."
+
+ if(stat != CONSCIOUS)
+ to_chat(usr, "You cannot toggle your gender while unconcious!")
+ return
+
+ var/choice = alert(src, "Select Gender.", "Gender", "Both", "Male", "Female")
+ switch(choice)
+ if("Both")
+ src.has_penis = TRUE
+ src.has_vagina = TRUE
+ if("Male")
+ src.has_penis = TRUE
+ src.has_vagina = FALSE
+ if("Female")
+ src.has_penis = FALSE
+ src.has_vagina = TRUE
+
+/mob/living/try_interaction(mob/living/partner)
var/dat
if(partner != src)
dat = "
Interacting with \the [partner]...