Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions code/datums/sexcon/sex_actions/deviant/bootjob.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/datum/sex_action/bootjob
name = "Hump their boots"
check_same_tile = FALSE

/datum/sex_action/bootjob/shows_on_menu(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user == target)
return FALSE
if(!user.getorganslot(ORGAN_SLOT_PENIS, ORGAN_SLOT_VAGINA))
return FALSE
return TRUE

/datum/sex_action/bootjob/can_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user == target)
return FALSE
if(!user.getorganslot(ORGAN_SLOT_PENIS, ORGAN_SLOT_VAGINA))
return FALSE
return TRUE

/datum/sex_action/bootjob/on_start(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] straddles [target]'s boots and begins to grind against them!"))

/datum/sex_action/bootjob/on_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(user.sexcon.spanify_force("[user] [user.sexcon.get_generic_force_adjective()] humps into [target]'s boot."))
user.sexcon.outercourse_noise(target)

user.sexcon.perform_sex_action(user, 2, 0.5, TRUE)
user.sexcon.handle_passive_ejaculation()

/datum/sex_action/bootjob/on_finish(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] pulls themselves off of [target]'s boot."))
46 changes: 46 additions & 0 deletions code/datums/sexcon/sex_actions/deviant/pistoljob.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/datum/sex_action/miscellaneous/pistoljob
name = "Prod mouth with firearm"
category = SEX_CATEGORY_PENETRATE
target_sex_part = SEX_PART_JAWS

/datum/sex_action/miscellaneous/pistoljob/shows_on_menu(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user == target)
return FALSE
var/obj/item/held_item = user.get_active_held_item()
if(!istype(held_item, /obj/item/gun/ballistic))
return FALSE
return TRUE

/datum/sex_action/miscellaneous/pistoljob/can_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
. = ..()
if(!.)
return FALSE
if(user == target)
return FALSE
if(!check_location_accessible(user, user, BODY_ZONE_PRECISE_MOUTH))
return FALSE
var/obj/item/held_item = user.get_active_held_item()
if(istype(held_item, /obj/item/gun/ballistic))
return TRUE
return TRUE

/datum/sex_action/pistoljob/on_start(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] places the barrel of [user.p_their()] [user.get_active_held_item()] into [target]'s mouth..."))

/datum/sex_action/pistoljob/on_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(user.sexcon.spanify_force("[user] [user.sexcon.get_generic_force_adjective()] forces the [user.get_active_held_item()] into [target]."))
user.sexcon.oralcourse_noise(user)


user.sexcon.perform_sex_action(target, 0.5, 0, TRUE)
target.sexcon.handle_passive_ejaculation()
if(!target.sexcon.considered_limp())
user.sexcon.perform_deepthroat_oxyloss(user, 1.3)

/datum/sex_action/pistoljob/on_finish(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] stops gun-fucking [target]."))

/datum/sex_action/pistoljob/is_finished(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(target.sexcon.finished_check())
return TRUE
return FALSE
39 changes: 39 additions & 0 deletions code/datums/sexcon/sex_actions/deviant/stockjob.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/datum/sex_action/miscellaneous/stockjob
name = "Grind stock against them"
check_same_tile = FALSE

/datum/sex_action/miscellaneous/stockjob/shows_on_menu(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user == target)
return FALSE
var/obj/item/held_item = user.get_active_held_item()
if(!istype(held_item, /obj/item/gun/ballistic) && istype(held_item, /obj/item/gun/ballistic/pistol))
return FALSE
return TRUE

/datum/sex_action/miscellaneous/stockjob/can_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
. = ..()
if(!.)
return FALSE
if(user == target)
return FALSE
var/obj/item/held_item = user.get_active_held_item()
if(istype(held_item, /obj/item/gun/ballistic))
return TRUE
return TRUE

/datum/sex_action/stockjob/on_start(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] begins grinding the stock of [user.p_their()] [user.get_active_held_item()] into [target]'s groin..."))

/datum/sex_action/stockjob/on_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(user.sexcon.spanify_force("[user] [user.sexcon.get_generic_force_adjective()] grinds their [user.get_active_held_item()] against [target]'s groin."))
user.sexcon.generic_sex_noise()

user.sexcon.perform_sex_action(target, 2, 4, TRUE)
target.sexcon.handle_passive_ejaculation(user)

/datum/sex_action/stockjob/on_finish(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] stops grinding their [user.get_active_held_item()] against [target]."))

/datum/sex_action/stockjob/is_finished(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(target.sexcon.finished_check())
return TRUE
35 changes: 35 additions & 0 deletions code/datums/sexcon/sex_actions/masturbate/masturbate_gunfrot.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/datum/sex_action/miscellaneous/masturbate_gunfrot
name = "Frot with weapon"
check_same_tile = FALSE
category = SEX_CATEGORY_HANDS
user_sex_part = SEX_PART_COCK

/datum/sex_action/miscellaneous/masturbate_gunfrot/shows_on_menu(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user != target)
return FALSE
var/obj/item/held_item = user.get_active_held_item()
if(!istype(held_item, /obj/item/gun/ballistic))
return FALSE
return TRUE

/datum/sex_action/masturbate_gunfrot/on_start(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] shoves their cock against their [user.get_active_held_item()]..."))

/datum/sex_action/masturbate_gunfrot/on_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
var/chosen_verb = pick(list("pleasures themself against the [user.get_active_held_item()]", "grinds against \the [user.get_active_held_item()]"))

user.visible_message(user.sexcon.spanify_force("[user] [user.sexcon.get_generic_force_adjective()] [chosen_verb]."))

user.sexcon.generic_sex_noise()

user.sexcon.perform_sex_action(user, 2, 6, TRUE)

user.sexcon.handle_passive_ejaculation()

/datum/sex_action/masturbate_gunfrot/on_finish(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] stops frotting with their weapon."))

/datum/sex_action/masturbate_gunfrot/is_finished(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user.sexcon.finished_check())
return TRUE
return FALSE
35 changes: 35 additions & 0 deletions code/datums/sexcon/sex_actions/masturbate/masturbate_gungrind.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/datum/sex_action/miscellaneous/masturbate_gungrind
name = "Grind on weapon"
check_same_tile = FALSE
category = SEX_CATEGORY_HANDS
user_sex_part = SEX_PART_CUNT

/datum/sex_action/miscellaneous/masturbate_gungrind/shows_on_menu(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user != target)
return FALSE
var/obj/item/held_item = user.get_active_held_item()
if(!istype(held_item, /obj/item/gun/ballistic))
return FALSE
return TRUE

/datum/sex_action/masturbate_gungrind/on_start(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] starts grinding against their [user.get_active_held_item()]..."))

/datum/sex_action/masturbate_gungrind/on_perform(mob/living/carbon/human/user, mob/living/carbon/human/target)
var/chosen_verb = pick(list("pleasures themself against the [user.get_active_held_item()]", "grinds against \the [user.get_active_held_item()]"))

user.visible_message(user.sexcon.spanify_force("[user] [user.sexcon.get_generic_force_adjective()] [chosen_verb]."))

user.sexcon.generic_sex_noise()

user.sexcon.perform_sex_action(user, 2, 6, TRUE)

user.sexcon.handle_passive_ejaculation()

/datum/sex_action/masturbate_gungrind/on_finish(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_warning("[user] stops frotting with their weapon."))

/datum/sex_action/masturbate_gungrind/is_finished(mob/living/carbon/human/user, mob/living/carbon/human/target)
if(user.sexcon.finished_check())
return TRUE
return FALSE
5 changes: 5 additions & 0 deletions roguetown.dme
Original file line number Diff line number Diff line change
Expand Up @@ -697,15 +697,18 @@
#include "code\datums\sexcon\sexcon_helpers.dm"
#include "code\datums\sexcon\sexcon_knotting.dm"
#include "code\datums\sexcon\sexcon_reagents.dm"
#include "code\datums\sexcon\sex_actions\deviant\bootjob.dm"
#include "code\datums\sexcon\sex_actions\deviant\facesitting.dm"
#include "code\datums\sexcon\sex_actions\deviant\footjob.dm"
#include "code\datums\sexcon\sex_actions\deviant\force_thighjob.dm"
#include "code\datums\sexcon\sex_actions\deviant\force_titjob.dm"
#include "code\datums\sexcon\sex_actions\deviant\frotting.dm"
#include "code\datums\sexcon\sex_actions\deviant\grinding.dm"
#include "code\datums\sexcon\sex_actions\deviant\pistoljob.dm"
#include "code\datums\sexcon\sex_actions\deviant\rub_body.dm"
#include "code\datums\sexcon\sex_actions\deviant\scissoring.dm"
#include "code\datums\sexcon\sex_actions\deviant\spanking.dm"
#include "code\datums\sexcon\sex_actions\deviant\stockjob.dm"
#include "code\datums\sexcon\sex_actions\deviant\tailjob.dm"
#include "code\datums\sexcon\sex_actions\deviant\tailpegging_anal.dm"
#include "code\datums\sexcon\sex_actions\deviant\tailpegging_vaginal.dm"
Expand All @@ -722,6 +725,8 @@
#include "code\datums\sexcon\sex_actions\force\force_suck_nipples.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_anus.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_breasts.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_gunfrot.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_gungrind.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_other_anus.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_other_breasts.dm"
#include "code\datums\sexcon\sex_actions\masturbate\masturbate_other_penis.dm"
Expand Down