Skip to content

Commit

Permalink
VisualChat gets Horny
Browse files Browse the repository at this point in the history
  • Loading branch information
Superlagg committed Aug 13, 2024
1 parent d94a62b commit 1f5eb3d
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 36 deletions.
55 changes: 31 additions & 24 deletions code/controllers/subsystem/chat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -638,8 +638,8 @@ SUBSYSTEM_DEF(chat)
/// - A color for the text background
/// - A color for the header background
/// and from this, we will make a furry dating sim style message that will be sent to the target *and* the speaker
var/m_name = mommy.speakername
var/m_verb = mommy.message_saymod_comma
var/m_name = mommy.speakername || mommy.source.name
var/m_verb = mommy.message_saymod_comma || "says, "
var/m_rawmessage = mommy.original_message
var/m_message = mommy.message
var/m_mode = mommy.message_mode || MODE_SAY
Expand Down Expand Up @@ -738,28 +738,34 @@ SUBSYSTEM_DEF(chat)
target.heard_data[mommyquid] = list("last_heard" = world.time, "message_mode" = m_mode)
var/nomessage = FALSE
var/nobold_verb = FALSE
if(LAZYLEN(hidden_toe))
if(!LAZYLEN(ckey(m_rawmessage)))
// so see if they have a CustomBlankVerb and CustomMessageVerb
// if they do, use that instead of the default message and verb
var/vess = hidden_toe["CustomBlankVerb"]
if(vess)
m_verb = vess
else
m_verb = "does something!"
nobold_verb = TRUE
nomessage = TRUE
else if(hidden_toe["CustomMessageVerb"])
if(findtext(hidden_toe["CustomMessageVerb"], "|"))
var/list/verblist = splittext(hidden_toe["CustomMessageVerb"], "|")
if(LAZYLEN(verblist) > 1)
m_verb = pick(verblist)
var/no_boober_period = FALSE // the name and verb
if(mommy.is_emote || mommy.hide_name_n_verb)
no_boober_period = TRUE // message is self-contained, just show it raw without the head or the verb
if(mommy.partial) // for *scream stuff
giv_head = FALSE
else
if(LAZYLEN(hidden_toe))
if(!LAZYLEN(ckey(m_rawmessage)))
// so see if they have a CustomBlankVerb and CustomMessageVerb
// if they do, use that instead of the default message and verb
var/vess = hidden_toe["CustomBlankVerb"]
if(vess)
m_verb = vess
else
m_verb = "does something!"
nobold_verb = TRUE
nomessage = TRUE
else if(hidden_toe["CustomMessageVerb"])
if(findtext(hidden_toe["CustomMessageVerb"], "|"))
var/list/verblist = splittext(hidden_toe["CustomMessageVerb"], "|")
if(LAZYLEN(verblist) > 1)
m_verb = pick(verblist)
else
m_verb = hidden_toe["CustomMessageVerb"]
// nobold_verb = TRUE
else
m_verb = hidden_toe["CustomMessageVerb"]
// nobold_verb = TRUE
else
m_verb = hidden_toe["CustomMessageVerb"]
// nobold_verb = TRUE
// nobold_verb = TRUE

/// Character Directory link
// var/m_charlink = "<a href='?src=[REF(src)];CHARDIR=1;reciever_quid=[mommyquid];sender_quid=[targetquid]'>
Expand Down Expand Up @@ -806,9 +812,10 @@ SUBSYSTEM_DEF(chat)
// now the body - the BottomBox
if(giv_body)
cum += "<div style='width: 100%; background: linear-gradient([bbangle]deg, [bbc_1], [bbc_2]); border: [bbbs]px [bbbt] [bbbc]; padding: 2px; display: flex; flex-direction: column;'>"
cum += "<p style='font-weight: bold; margin: 0;'>[m_name] <span style='[nobold_verb? "font-weight: normal;" : ""] font-style: italic; color: [dtc];'>[m_verb]</span></p>"
if(!no_boober_period)
cum += "<p style='font-weight: bold; margin: 0;'>[m_name] <span style='[nobold_verb? "font-weight: normal;" : ""] font-style: italic; color: [dtc];'>[m_verb]</span></p>"
if(!nomessage)
cum += "<p style='margin: 0; color: [dtc]; id='Message'>[m_message]</p>"
cum += "<p style='margin: 0; colorr: [dtc]; id='Message'>[m_message]</p>"
cum += "</div>"
cum += "</div>"
// now we need to send it to the target
Expand Down
9 changes: 9 additions & 0 deletions code/controllers/subsystem/datumrentals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ SUBSYSTEM_DEF(rentaldatums)
var/source_ckey
var/datum/preferences/prefs_override
var/dummy
var/is_emote
var/partial
var/hide_name_n_verb

/datum/rental_mommy/chat/copy_mommy(datum/rental_mommy/chat/mommy)
if(!..())
Expand Down Expand Up @@ -185,6 +188,9 @@ SUBSYSTEM_DEF(rentaldatums)
source_ckey = mommy.source_ckey
prefs_override = mommy.prefs_override
dummy = mommy.dummy
is_emote = mommy.is_emote
partial = mommy.partial
hide_name_n_verb = mommy.hide_name_n_verb

/datum/rental_mommy/chat/wipe()
original_message = ""
Expand Down Expand Up @@ -237,4 +243,7 @@ SUBSYSTEM_DEF(rentaldatums)
source_ckey = null
prefs_override = null
dummy = null
is_emote = null
partial = null
hide_name_n_verb = null

30 changes: 28 additions & 2 deletions code/datums/emotes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
var/key_third_person = "" //This will also call the emote
var/no_message = FALSE
var/message = "" //Message displayed when emote is used
var/original_message = "" //Original message before any changes
var/message_alien = "" //Message displayed if the user is a grown alien
var/message_larva = "" //Message displayed if the user is an alien larva
var/message_robot = "" //Message displayed if the user is a robot
Expand All @@ -17,6 +18,8 @@
var/list/mob_type_blacklist_typecache //Types that are NOT allowed to use that emote
var/list/mob_type_ignore_stat_typecache
var/stat_allowed = SOFT_CRIT
var/mommychat = TRUE
var/mommychat_partial = TRUE
var/static/list/emote_list = list()
var/static/regex/stop_bad_mime = regex(@"says|exclaims|yells|asks")
/// Sound to play when emote is called.
Expand Down Expand Up @@ -89,14 +92,37 @@


msg = "<span class='emote'>[msg]</span>"
var/datum/rental_mommy/chat/mommy = (mommychat || mommychat_partial) && (user && user.client) && BuildMommy(user, msg)
if(!omit_left_name)
ENABLE_BITFIELD(message_flags, PUT_NAME_IN)

if(emote_type == EMOTE_AUDIBLE)
user.audible_message(msg, deaf_message = msg, audible_message_flags = message_flags, hearing_distance = message_range)
user.audible_message(msg, deaf_message = msg, audible_message_flags = message_flags, hearing_distance = message_range, data = list("mom" = mommy))
else
user.visible_message(msg, blind_message = msg, visible_message_flags = message_flags, vision_distance = message_range)
user.visible_message(msg, blind_message = msg, visible_message_flags = message_flags, vision_distance = message_range, data = list("mom" = mommy))
if(mommy)
mommy.checkin()

// OI WHAT IF YE MUM WERE BUILT ON BA'REYS
/datum/emote/proc/BuildMommy(mob/user, message)
if(!user || !user.client)
return
var/datum/rental_mommy/chat/mommy = SSrentaldatums.CheckoutMommy("chat_datums")
if(!mommy)
return
mommy.original_message = message
mommy.message = message
mommy.original_speakername = user.name
mommy.speakername = user.name
mommy.source = user
mommy.message_mode = null // it'll be set by the chat system
mommy.message_key = null // it'll be set by the chat system
mommy.is_emote = TRUE
mommy.partial = mommychat_partial
if(mommy.partial)
mommy.hide_name_n_verb = TRUE
mommy.furry_dating_sim = TRUE
return mommy

/// Sends the given emote message for all ghosts with ghost sight enabled, excluding close enough to listen normally.
/mob/proc/emote_for_ghost_sight(message, admin_only, message_range)
Expand Down
8 changes: 7 additions & 1 deletion code/modules/mob/living/emote.dm
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,8 @@
key_third_person = "custom"
message = null
emote_type = EMOTE_VISIBLE
mommychat = TRUE
mommychat_partial = FALSE // full blown

/datum/emote/living/custom/proc/check_invalid(mob/user, input)
if(stop_bad_mime.Find(input, 1, 1))
Expand Down Expand Up @@ -692,14 +694,18 @@
message = params
if(type_override)
emote_type = type_override
original_message = message
message = user.say_emphasis(message)
var/msg_check = user.say_narrate_replace(message, user)
if(msg_check)
message = msg_check
omit_left_name = TRUE
else
message = "<b>[user]</b> [message]" // die(t)
omit_left_name = TRUE
. = ..()
omit_left_name = FALSE
message = null
original_message = null

/datum/emote/living/custom/replace_pronoun(mob/user, message)
return message
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/living/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@
return mind.get_language_holder()
. = ..()

/mob/proc/should_hornify(datum/rental_mommy/chat/mommy)
/atom/proc/should_hornify(datum/rental_mommy/chat/mommy)
return FALSE // quit seducing ghosts in the lobby, wacky

/mob/living/should_hornify(datum/rental_mommy/chat/mommy)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Difficulty: Medium
return FALSE
return ..()

/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, visible_message_flags = NONE)
/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, visible_message_flags = NONE, data = null)
if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit
return
return ..()
Expand Down
40 changes: 34 additions & 6 deletions code/modules/mob/mob.dm
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,8 @@
mob/target,
target_message,
visible_message_flags = NONE,
pref_check
pref_check,
list/data = list()
)
var/turf/T = get_turf(src)
if(!T)
Expand All @@ -165,6 +166,7 @@
if(!length(hearers)) // yes, hearers is correct
return
hearers -= ignored_mobs
var/datum/rental_mommy/chat/momchat = LAZYLEN(data) ? data["mom"] : null

var/saycolor = src.get_chat_color()
var/targetsaycolor = null
Expand Down Expand Up @@ -198,6 +200,9 @@
//if(visible_message_flags & EMOTE_MESSAGE)
// message = "<span class='emote'><b>[src]</b> [message]</span>"

if(momchat)
momchat.message = message

for(var/mob/M in hearers)
if(!M.client)
continue
Expand All @@ -222,10 +227,20 @@
if(!!target)
var/sanitizedtargetsaycolor = M.client.sanitize_chat_color(targetsaycolor)
msg = color_keyword(msg, sanitizedtargetsaycolor, target.name)
M.show_message(msg, MSG_VISUAL, msg, MSG_AUDIBLE)
var/datum/rental_mommy/chat/yourmom
if(momchat && M.should_hornify(momchat))
yourmom = SSrentaldatums.CheckoutMommy("chat_datums")
yourmom.copy_mommy(momchat)
yourmom.recipiant = M
yourmom.message = msg
yourmom.hide_name_n_verb = TRUE
M.show_message(msg, MSG_VISUAL, msg, MSG_AUDIBLE, momchat = yourmom)
if(yourmom)
yourmom.checkin()
momchat?.checkin()

///Adds the functionality to self_message.
/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, visible_message_flags = NONE, pref_check)
/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, visible_message_flags = NONE, pref_check, list/data = list())
. = ..()
// if(self_message && target != src)
// show_message(self_message, null, blind_message, null, pref_check)
Expand All @@ -248,7 +263,8 @@
self_message,
ignored_mobs,
audible_message_flags = NONE,
pref_check
pref_check,
list/data = list()
)
var/turf/T = get_turf(src)
if(!T)
Expand All @@ -267,6 +283,8 @@
//if(audible_message_flags & EMOTE_MESSAGE)
// message = "<span class='emote'><b>[src]</b> [message]</span>"

var/datum/rental_mommy/chat/momchat = LAZYLEN(data) ? data["mom"] : null

var/saycolor = src.get_chat_color()

for(var/mob/M in hearers)
Expand All @@ -275,6 +293,13 @@
var/msg = message
//if(M == src)
//msg = self_message
var/datum/rental_mommy/chat/yamum = null
if(momchat && M.should_hornify(momchat))
yamum = SSrentaldatums.CheckoutMommy("chat_datums")
yamum.copy_mommy(momchat)
yamum.recipiant = M
yamum.message = message
yamum.hide_name_n_verb = TRUE
if(!M.can_hear())
msg = deaf_message
if(M.client?.prefs.color_chat_log)
Expand All @@ -283,7 +308,10 @@
if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags))
M.create_chat_message(src, raw_message = msg, runechat_flags = audible_message_flags)
if(!CHECK_BITFIELD(audible_message_flags, ONLY_OVERHEAD))
M.show_message(msg, MSG_AUDIBLE, msg, MSG_VISUAL)
M.show_message(msg, MSG_AUDIBLE, msg, MSG_VISUAL, momchat = yamum)
if(yamum)
yamum.checkin()
momchat?.checkin()

/**
* Show a message to all mobs in earshot of this one
Expand All @@ -297,7 +325,7 @@
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
* * ignored_mobs (optional) doesn't show any message to any given mob in the list.
*/
/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, list/ignored_mobs, audible_message_flags = NONE, pref_check)
/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, list/ignored_mobs, audible_message_flags = NONE, pref_check, list/data = list())
. = ..()
// if(self_message)
// show_message(self_message, null, deaf_message, null, pref_check)
Expand Down
9 changes: 8 additions & 1 deletion code/modules/mob/say_vr.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
key = "subtler"
key_third_person = "subtler"
subtler = TRUE
mommychat_partial = FALSE // full blown

/datum/emote/living/subtle/proc/check_invalid(mob/user, input)
if(stop_bad_mime.Find(input, 1, 1))
Expand Down Expand Up @@ -65,6 +66,8 @@
. = TRUE
if(!can_run_emote(user))
return FALSE

var/original_message = message

user.log_message(message, subtler ? LOG_SUBTLER : LOG_SUBTLE)
var/msg_check = user.say_narrate_replace(message, user)
Expand All @@ -83,13 +86,17 @@
if(!check_rights_for(ghostie.client, R_ADMIN))
non_admin_ghosts += ghostie

var/datum/rental_mommy/chat/mommy = BuildMommy(user, message)
mommy.original_message = original_message

// Everyone in range can see it
user.visible_message(
message = message,
blind_message = message,
self_message = message,
vision_distance = message_range,
ignored_mobs = non_admin_ghosts)
ignored_mobs = non_admin_ghosts,
data = list("mom" = mommy))

//broadcast to ghosts, if they have a client, are dead, arent in the lobby, allow ghostsight, and, if subtler, are admemes
user.emote_for_ghost_sight(message, subtler, message_range)
Expand Down

0 comments on commit 1f5eb3d

Please sign in to comment.