mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Complete Absorb
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
#define DM_FLAG_THICKBELLY 0x8
|
#define DM_FLAG_THICKBELLY 0x8
|
||||||
#define DM_FLAG_AFFECTWORN 0x10
|
#define DM_FLAG_AFFECTWORN 0x10
|
||||||
#define DM_FLAG_JAMSENSORS 0x20
|
#define DM_FLAG_JAMSENSORS 0x20
|
||||||
|
#define DM_FLAG_FORCEPSAY 0x40
|
||||||
|
|
||||||
//Item related modes
|
//Item related modes
|
||||||
#define IM_HOLD "Hold"
|
#define IM_HOLD "Hold"
|
||||||
|
|||||||
@@ -27,6 +27,11 @@
|
|||||||
if(world.time < next_emote)
|
if(world.time < next_emote)
|
||||||
to_chat(src, SPAN_WARNING("You cannot use another emote yet."))
|
to_chat(src, SPAN_WARNING("You cannot use another emote yet."))
|
||||||
return
|
return
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
pme(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
if(act == "help")
|
if(act == "help")
|
||||||
if(world.time >= next_emote_refresh)
|
if(world.time >= next_emote_refresh)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/mob
|
/mob
|
||||||
var/muffled = 0 // Used by muffling belly
|
var/muffled = FALSE // Used by muffling belly
|
||||||
|
var/forced_psay = FALSE // If true will prevent the user from speaking with normal say/emotes, and instead redirect these to a private speech mode with their predator.
|
||||||
|
|
||||||
/mob/living
|
/mob/living
|
||||||
var/ooc_notes = null
|
var/ooc_notes = null
|
||||||
|
|||||||
@@ -160,7 +160,11 @@ var/list/channel_to_radio_key = new
|
|||||||
if(stat == DEAD && !forbid_seeing_deadchat)
|
if(stat == DEAD && !forbid_seeing_deadchat)
|
||||||
return say_dead(message)
|
return say_dead(message)
|
||||||
return
|
return
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
psay(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
//Parse the mode
|
//Parse the mode
|
||||||
var/message_mode = parse_message_mode(message, "headset")
|
var/message_mode = parse_message_mode(message, "headset")
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
desc = "Someone who has taken a back seat within their own body."
|
desc = "Someone who has taken a back seat within their own body."
|
||||||
icon = 'icons/obj/surgery.dmi'
|
icon = 'icons/obj/surgery.dmi'
|
||||||
icon_state = "brain1"
|
icon_state = "brain1"
|
||||||
|
forced_psay = TRUE
|
||||||
var/mob/living/prey_body //The body of the person who dominated the brain
|
var/mob/living/prey_body //The body of the person who dominated the brain
|
||||||
var/prey_ckey //The ckey of the person who dominated the brain
|
var/prey_ckey //The ckey of the person who dominated the brain
|
||||||
var/prey_name //In case the body is missing. ;3c
|
var/prey_name //In case the body is missing. ;3c
|
||||||
@@ -61,107 +62,9 @@
|
|||||||
pred_body = null
|
pred_body = null
|
||||||
|
|
||||||
/mob/living/dominated_brain/Destroy()
|
/mob/living/dominated_brain/Destroy()
|
||||||
if(pred_body)
|
|
||||||
var/P = FALSE
|
|
||||||
for(var/I in pred_body)
|
|
||||||
if(I == src)
|
|
||||||
continue
|
|
||||||
if(istype(I, /mob/living/dominated_brain))
|
|
||||||
P = TRUE
|
|
||||||
if(!P)
|
|
||||||
pred_body.verbs -= /mob/proc/psay
|
|
||||||
pred_body.verbs -= /mob/proc/pme
|
|
||||||
|
|
||||||
lets_unregister_our_signals()
|
lets_unregister_our_signals()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/mob/living/dominated_brain/say(var/message, var/datum/language/speaking = null, var/whispering = 0)
|
|
||||||
|
|
||||||
if (src.client)
|
|
||||||
if(client.prefs.muted & MUTE_IC)
|
|
||||||
to_chat(src, "<font color='red'>You cannot speak in IC (muted).</font>")
|
|
||||||
return
|
|
||||||
|
|
||||||
if(loc == pred_body)
|
|
||||||
|
|
||||||
message = sanitize(message)
|
|
||||||
if (!message)
|
|
||||||
return
|
|
||||||
log_say(message,src)
|
|
||||||
if (stat == 2)
|
|
||||||
return say_dead(message)
|
|
||||||
|
|
||||||
to_chat(src, "<span class='changeling'>You think, \"[message]\"</span>")
|
|
||||||
to_chat(pred_body, "<span class='changeling'>The captive mind of \the [src] thinks, \"[message]\"</span>")
|
|
||||||
for(var/I in pred_body.contents)
|
|
||||||
if(istype(I, /mob/living/dominated_brain) && I != src)
|
|
||||||
var/mob/living/dominated_brain/db = I
|
|
||||||
to_chat(db, "<span class='changeling'>The captive mind of \the [src] thinks, \"[message]\"</span>")
|
|
||||||
|
|
||||||
for (var/mob/M in player_list)
|
|
||||||
if (istype(M, /mob/new_player))
|
|
||||||
continue
|
|
||||||
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
|
||||||
to_chat(M, "The captive mind of [src] whispers, \"[message]\"")
|
|
||||||
|
|
||||||
/mob/living/dominated_brain/me_verb(message as text)
|
|
||||||
if (src.client)
|
|
||||||
if(client.prefs.muted & MUTE_IC)
|
|
||||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
if(loc == pred_body)
|
|
||||||
|
|
||||||
message = sanitize(message)
|
|
||||||
if (!message)
|
|
||||||
return
|
|
||||||
log_emote(message,src)
|
|
||||||
if (stat == 2)
|
|
||||||
return say_dead(message)
|
|
||||||
|
|
||||||
to_chat(src, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
to_chat(pred_body, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
for(var/I in pred_body.contents)
|
|
||||||
if(istype(I, /mob/living/dominated_brain) && I != src)
|
|
||||||
var/mob/living/dominated_brain/db = I
|
|
||||||
to_chat(db, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
|
|
||||||
for (var/mob/M in player_list)
|
|
||||||
if (istype(M, /mob/new_player))
|
|
||||||
continue
|
|
||||||
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
|
||||||
to_chat(M, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
/mob/living/dominated_brain/emote(var/message)
|
|
||||||
if (src.client)
|
|
||||||
if(client.prefs.muted & MUTE_IC)
|
|
||||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
if(loc == pred_body)
|
|
||||||
|
|
||||||
message = sanitize(message)
|
|
||||||
if (!message)
|
|
||||||
return
|
|
||||||
log_emote(message,src)
|
|
||||||
if (stat == 2)
|
|
||||||
return say_dead(message)
|
|
||||||
|
|
||||||
to_chat(src, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
to_chat(pred_body, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
for(var/I in pred_body.contents)
|
|
||||||
if(istype(I, /mob/living/dominated_brain) && I != src)
|
|
||||||
var/mob/living/dominated_brain/db = I
|
|
||||||
to_chat(db, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
|
|
||||||
for (var/mob/M in player_list)
|
|
||||||
if (istype(M, /mob/new_player))
|
|
||||||
continue
|
|
||||||
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
|
||||||
to_chat(M, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
/mob/living/dominated_brain/process_resist()
|
/mob/living/dominated_brain/process_resist()
|
||||||
//Resisting control by an alien mind.
|
//Resisting control by an alien mind.
|
||||||
if(pred_body.ckey == pred_ckey)
|
if(pred_body.ckey == pred_ckey)
|
||||||
@@ -199,8 +102,6 @@
|
|||||||
ndb.name = prey_name
|
ndb.name = prey_name
|
||||||
ndb.prey_ckey = src.prey_ckey
|
ndb.prey_ckey = src.prey_ckey
|
||||||
ndb.pred_ckey = src.pred_ckey
|
ndb.pred_ckey = src.pred_ckey
|
||||||
ndb.pred_body.verbs |= /mob/proc/pme
|
|
||||||
ndb.pred_body.verbs |= /mob/proc/psay
|
|
||||||
|
|
||||||
prey_goes_here = ndb
|
prey_goes_here = ndb
|
||||||
prey_goes_here.real_name = src.prey_name
|
prey_goes_here.real_name = src.prey_name
|
||||||
@@ -215,8 +116,6 @@
|
|||||||
ndb.name = prey_name
|
ndb.name = prey_name
|
||||||
ndb.prey_ckey = src.prey_ckey
|
ndb.prey_ckey = src.prey_ckey
|
||||||
ndb.pred_ckey = src.pred_ckey
|
ndb.pred_ckey = src.pred_ckey
|
||||||
ndb.pred_body.verbs |= /mob/proc/pme
|
|
||||||
ndb.pred_body.verbs |= /mob/proc/psay
|
|
||||||
|
|
||||||
prey_goes_here = ndb
|
prey_goes_here = ndb
|
||||||
src.languages -= src.temp_languages
|
src.languages -= src.temp_languages
|
||||||
@@ -234,26 +133,29 @@
|
|||||||
pred_body.ckey = src.pred_ckey
|
pred_body.ckey = src.pred_ckey
|
||||||
pred_body.ooc_notes = pred_ooc_notes
|
pred_body.ooc_notes = pred_ooc_notes
|
||||||
log_and_message_admins("[pred_body] is now controlled by [pred_body.ckey]. They were restored to control through prey domination, and had been controlled by [prey_ckey].")
|
log_and_message_admins("[pred_body] is now controlled by [pred_body.ckey]. They were restored to control through prey domination, and had been controlled by [prey_ckey].")
|
||||||
handle_langs(src)
|
pred_body.absorb_langs()
|
||||||
pred_body.prey_controlled = FALSE
|
pred_body.prey_controlled = FALSE
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/mob/living/dominated_brain/proc/handle_langs(var/mob/M)
|
/mob/living/proc/absorb_langs() //This should be called on the predator in the exchange
|
||||||
var/list/langlist = list()
|
var/list/langlist = list()
|
||||||
|
|
||||||
pred_body.languages -= pred_body.temp_languages
|
languages -= temp_languages
|
||||||
LAZYCLEARLIST(pred_body.temp_languages)
|
LAZYCLEARLIST(src.temp_languages)
|
||||||
pred_body.temp_languages = list()
|
src.temp_languages = list()
|
||||||
for(var/i in loc)
|
for(var/mob/living/L in contents)
|
||||||
if(i == M)
|
if(istype(L,/mob/living/dominated_brain))
|
||||||
continue
|
if(L.ckey)
|
||||||
if(istype(i,/mob/living/dominated_brain))
|
langlist |= L.languages
|
||||||
var/mob/living/dominated_brain/db = i
|
for(var/b in vore_organs)
|
||||||
langlist |= db.languages
|
for(var/mob/living/L in b)
|
||||||
langlist |= db.prey_langs
|
if(isliving(L))
|
||||||
langlist -= pred_body.languages
|
if(L.ckey)
|
||||||
pred_body.temp_languages |= langlist
|
langlist |= L.languages
|
||||||
pred_body.languages |= langlist
|
if(langlist.len)
|
||||||
|
langlist -= languages
|
||||||
|
temp_languages |= langlist
|
||||||
|
languages |= langlist
|
||||||
|
|
||||||
//Welcome to the adapted borer code.
|
//Welcome to the adapted borer code.
|
||||||
/mob/proc/dominate_predator()
|
/mob/proc/dominate_predator()
|
||||||
@@ -319,8 +221,6 @@
|
|||||||
else
|
else
|
||||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name, prey)
|
pred_brain = new /mob/living/dominated_brain(pred, pred, name, prey)
|
||||||
|
|
||||||
pred.verbs |= /mob/proc/pme
|
|
||||||
pred.verbs |= /mob/proc/psay
|
|
||||||
pred_brain.prey_ooc_notes = prey.ooc_notes
|
pred_brain.prey_ooc_notes = prey.ooc_notes
|
||||||
pred_brain.pred_ooc_notes = pred.ooc_notes
|
pred_brain.pred_ooc_notes = pred.ooc_notes
|
||||||
pred_brain.name = pred.name
|
pred_brain.name = pred.name
|
||||||
@@ -330,7 +230,7 @@
|
|||||||
pred_brain.prey_langs |= preylangs
|
pred_brain.prey_langs |= preylangs
|
||||||
pred_brain.prey_ckey = prey.ckey
|
pred_brain.prey_ckey = prey.ckey
|
||||||
pred_brain.pred_ckey = pred.ckey
|
pred_brain.pred_ckey = pred.ckey
|
||||||
pred_brain.handle_langs()
|
pred_brain.pred_body.absorb_langs()
|
||||||
pred.ooc_notes = pred_brain.prey_ooc_notes
|
pred.ooc_notes = pred_brain.prey_ooc_notes
|
||||||
|
|
||||||
pred.verbs |= /mob/proc/release_predator
|
pred.verbs |= /mob/proc/release_predator
|
||||||
@@ -381,72 +281,6 @@
|
|||||||
else
|
else
|
||||||
to_chat(src, "<span class='warning'>\The [pred_body] is already dominated, and cannot be controlled at this time.</span>")
|
to_chat(src, "<span class='warning'>\The [pred_body] is already dominated, and cannot be controlled at this time.</span>")
|
||||||
|
|
||||||
|
|
||||||
/mob/proc/psay(message as text|null)
|
|
||||||
set category = "Abilities"
|
|
||||||
set name = "Prey Say (psay)"
|
|
||||||
set desc = "Emote to a dominated predator/prey."
|
|
||||||
|
|
||||||
if (src.client)
|
|
||||||
if(client.prefs.muted & MUTE_IC)
|
|
||||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
|
||||||
return
|
|
||||||
message = sanitize(message)
|
|
||||||
if (!message)
|
|
||||||
message = input(usr, "Type a message to emote.","Emote to prey") as text|null
|
|
||||||
if (!message)
|
|
||||||
return
|
|
||||||
|
|
||||||
var/f = FALSE
|
|
||||||
for(var/I in contents)
|
|
||||||
if(istype(I, /mob/living/dominated_brain))
|
|
||||||
var/mob/living/dominated_brain/db = I
|
|
||||||
to_chat(db, "<span class='changeling'>\The [src] thinks, \"[message]\"</span>")
|
|
||||||
f = TRUE
|
|
||||||
if(f)
|
|
||||||
to_chat(src, "<span class='changeling'>You think \"[message]\"</span>")
|
|
||||||
for (var/mob/M in player_list)
|
|
||||||
if (istype(M, /mob/new_player))
|
|
||||||
continue
|
|
||||||
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
|
||||||
to_chat(M, "<span class='changeling'>\The [src] thinks, \"[message]\"</span>")
|
|
||||||
log_say(message,src)
|
|
||||||
else
|
|
||||||
to_chat(src, "<span class='warning'>There is no one inside you to talk to...</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
/mob/proc/pme(message as text|null)
|
|
||||||
set category = "Abilities"
|
|
||||||
set name = "Prey Emote (pme)"
|
|
||||||
set desc = "Emote to a dominated predator/prey."
|
|
||||||
|
|
||||||
if (src.client)
|
|
||||||
if(client.prefs.muted & MUTE_IC)
|
|
||||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
|
||||||
return
|
|
||||||
message = sanitize(message)
|
|
||||||
if (!message)
|
|
||||||
message = input(usr, "Type a message to emote.","Emote to prey") as text|null
|
|
||||||
if (!message)
|
|
||||||
return
|
|
||||||
var/f = FALSE
|
|
||||||
for(var/I in contents)
|
|
||||||
if(istype(I, /mob/living/dominated_brain))
|
|
||||||
var/mob/living/dominated_brain/db = I
|
|
||||||
to_chat(db, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
f = TRUE
|
|
||||||
if(f)
|
|
||||||
to_chat(src, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
for (var/mob/M in player_list)
|
|
||||||
if (istype(M, /mob/new_player))
|
|
||||||
continue
|
|
||||||
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
|
||||||
to_chat(M, "<span class='changeling'><i>\The [src] [message]</i></span>")
|
|
||||||
log_emote(message,src)
|
|
||||||
else
|
|
||||||
to_chat(src, "<span class='warning'>There is no one inside you to talk to...</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
/mob/living/proc/dominate_prey()
|
/mob/living/proc/dominate_prey()
|
||||||
set category = "Abilities"
|
set category = "Abilities"
|
||||||
set name = "Dominate Prey"
|
set name = "Dominate Prey"
|
||||||
@@ -491,8 +325,6 @@
|
|||||||
var/mob/living/dominated_brain/db = new /mob/living/dominated_brain(src, src, M.name, M)
|
var/mob/living/dominated_brain/db = new /mob/living/dominated_brain(src, src, M.name, M)
|
||||||
|
|
||||||
|
|
||||||
verbs |= /mob/proc/pme
|
|
||||||
verbs |= /mob/proc/psay
|
|
||||||
db.name = M.name
|
db.name = M.name
|
||||||
db.prey_ckey = M.ckey
|
db.prey_ckey = M.ckey
|
||||||
db.pred_ckey = src.ckey
|
db.pred_ckey = src.ckey
|
||||||
@@ -502,10 +334,11 @@
|
|||||||
|
|
||||||
M.languages -= M.temp_languages
|
M.languages -= M.temp_languages
|
||||||
db.languages |= M.languages
|
db.languages |= M.languages
|
||||||
db.handle_langs()
|
|
||||||
db.ooc_notes = M.ooc_notes
|
db.ooc_notes = M.ooc_notes
|
||||||
db.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness
|
db.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness
|
||||||
|
|
||||||
|
absorb_langs()
|
||||||
|
|
||||||
db.ckey = db.prey_ckey
|
db.ckey = db.prey_ckey
|
||||||
log_admin("[db] ([db.ckey]) has agreed to [src]'s dominate prey attempt, and so no longer occupies their original body.")
|
log_admin("[db] ([db.ckey]) has agreed to [src]'s dominate prey attempt, and so no longer occupies their original body.")
|
||||||
to_chat(src, "<span class='notice'>You feel your mind expanded as [M] is incorporated into you.</span>")
|
to_chat(src, "<span class='notice'>You feel your mind expanded as [M] is incorporated into you.</span>")
|
||||||
@@ -523,7 +356,7 @@
|
|||||||
if(prey_body && prey_body.loc.loc == pred_body)
|
if(prey_body && prey_body.loc.loc == pred_body)
|
||||||
|
|
||||||
prey_body.ckey = prey_ckey
|
prey_body.ckey = prey_ckey
|
||||||
handle_langs(src)
|
pred_body.absorb_langs()
|
||||||
to_chat(src, "<span class='warning'>Your connection to [pred_body] fades, and you awaken back in your own body!</span>")
|
to_chat(src, "<span class='warning'>Your connection to [pred_body] fades, and you awaken back in your own body!</span>")
|
||||||
to_chat(pred_body, "<span class='warning'>You feel as though a piece of yourself is missing, as \the [src] returns to their body.</span>")
|
to_chat(pred_body, "<span class='warning'>You feel as though a piece of yourself is missing, as \the [src] returns to their body.</span>")
|
||||||
log_admin("[src] ([src.ckey]) has returned to their body, [prey_body].")
|
log_admin("[src] ([src.ckey]) has returned to their body, [prey_body].")
|
||||||
|
|||||||
@@ -4,12 +4,22 @@
|
|||||||
/mob/verb/whisper(message as text)
|
/mob/verb/whisper(message as text)
|
||||||
set name = "Whisper"
|
set name = "Whisper"
|
||||||
set category = "IC"
|
set category = "IC"
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
psay(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
usr.say(message,whispering=1)
|
usr.say(message,whispering=1)
|
||||||
|
|
||||||
/mob/verb/say_verb(message as text)
|
/mob/verb/say_verb(message as text)
|
||||||
set name = "Say"
|
set name = "Say"
|
||||||
set category = "IC"
|
set category = "IC"
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
psay(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
set_typing_indicator(FALSE)
|
set_typing_indicator(FALSE)
|
||||||
usr.say(message)
|
usr.say(message)
|
||||||
@@ -21,6 +31,11 @@
|
|||||||
if(say_disabled) //This is here to try to identify lag problems
|
if(say_disabled) //This is here to try to identify lag problems
|
||||||
to_chat(usr, "<font color='red'>Speech is currently admin-disabled.</font>")
|
to_chat(usr, "<font color='red'>Speech is currently admin-disabled.</font>")
|
||||||
return
|
return
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
pme(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
//VOREStation Edit Start
|
//VOREStation Edit Start
|
||||||
if(muffled)
|
if(muffled)
|
||||||
@@ -63,6 +78,15 @@
|
|||||||
else if(universal_speak || universal_understand)
|
else if(universal_speak || universal_understand)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(isliving(src))
|
||||||
|
var/mob/living/L = src
|
||||||
|
if(isbelly(L.loc) && L.absorbed)
|
||||||
|
var/mob/living/P = L.loc.loc
|
||||||
|
if(P.say_understands(other, speaking))
|
||||||
|
return TRUE
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
//Languages are handled after.
|
//Languages are handled after.
|
||||||
if(!speaking)
|
if(!speaking)
|
||||||
if(!other)
|
if(!other)
|
||||||
|
|||||||
@@ -10,6 +10,11 @@
|
|||||||
if(say_disabled) //This is here to try to identify lag problems
|
if(say_disabled) //This is here to try to identify lag problems
|
||||||
to_chat(usr, "Speech is currently admin-disabled.")
|
to_chat(usr, "Speech is currently admin-disabled.")
|
||||||
return
|
return
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
pme(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
||||||
if(!message)
|
if(!message)
|
||||||
@@ -26,6 +31,12 @@
|
|||||||
to_chat(src, "You are unable to emote.")
|
to_chat(src, "You are unable to emote.")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
//VOREStation Addition Start
|
||||||
|
if(forced_psay)
|
||||||
|
pme(message)
|
||||||
|
return
|
||||||
|
//VOREStation Addition End
|
||||||
|
|
||||||
var/muzzled = is_muzzled()
|
var/muzzled = is_muzzled()
|
||||||
if(m_type == 2 && muzzled) return
|
if(m_type == 2 && muzzled) return
|
||||||
|
|
||||||
@@ -99,3 +110,163 @@
|
|||||||
to_chat(user,message)
|
to_chat(user,message)
|
||||||
to_chat(user, "<span class='danger'>^ This message was NOT SENT ^ -- It was [length] characters, and the limit is [MAX_MESSAGE_LEN]. It would fit in [posts] separate messages.</span>")
|
to_chat(user, "<span class='danger'>^ This message was NOT SENT ^ -- It was [length] characters, and the limit is [MAX_MESSAGE_LEN]. It would fit in [posts] separate messages.</span>")
|
||||||
#undef MAX_HUGE_MESSAGE_LEN
|
#undef MAX_HUGE_MESSAGE_LEN
|
||||||
|
|
||||||
|
///// PSAY /////
|
||||||
|
|
||||||
|
/mob/verb/psay(message as text|null)
|
||||||
|
set category = "IC"
|
||||||
|
set name = "Psay"
|
||||||
|
set desc = "Talk to people affected by complete absorbed or dominate predator/prey."
|
||||||
|
|
||||||
|
if (src.client)
|
||||||
|
if(client.prefs.muted & MUTE_IC)
|
||||||
|
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
||||||
|
return
|
||||||
|
if (!message)
|
||||||
|
message = input(usr, "Type a message to say.","Psay") as text|null
|
||||||
|
message = sanitize_or_reflect(message,src)
|
||||||
|
if (!message)
|
||||||
|
return
|
||||||
|
message = capitalize(message)
|
||||||
|
if (stat == DEAD)
|
||||||
|
return say_dead(message)
|
||||||
|
if(!isliving(src))
|
||||||
|
forced_psay = FALSE
|
||||||
|
say(message)
|
||||||
|
var/f = FALSE //did we find someone to send the message to other than ourself?
|
||||||
|
var/mob/living/pb //predator body
|
||||||
|
var/mob/living/M = src
|
||||||
|
if(istype(M, /mob/living/dominated_brain))
|
||||||
|
var/mob/living/dominated_brain/db = M
|
||||||
|
if(db.loc != db.pred_body)
|
||||||
|
to_chat(db, "<span class='danger'>You aren't inside of a brain anymore!!!</span>")
|
||||||
|
qdel(db) //Oh no, dominated brains shouldn't exist outside of the body, so if we got here something went very wrong.
|
||||||
|
return
|
||||||
|
else
|
||||||
|
pb = db.pred_body
|
||||||
|
to_chat(pb, "<span class='changeling'>The captive mind of \the [M] thinks, \"[message]\"</span>") //To our pred if dominated brain
|
||||||
|
f = TRUE
|
||||||
|
else if(M.absorbed && isbelly(M.loc))
|
||||||
|
pb = M.loc.loc
|
||||||
|
to_chat(pb, "<span class='changeling'>\The [M] thinks, \"[message]\"</span>") //To our pred if absorbed
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
if(pb) //We are prey, let's do the prey thing.
|
||||||
|
|
||||||
|
for(var/I in pb.contents)
|
||||||
|
if(istype(I, /mob/living/dominated_brain) && I != M)
|
||||||
|
var/mob/living/dominated_brain/db = I
|
||||||
|
to_chat(db, "<span class='changeling'>The captive mind of \the [M] thinks, \"[message]\"</span>") //To any dominated brains in the pred
|
||||||
|
f = TRUE
|
||||||
|
for(var/B in pb.vore_organs)
|
||||||
|
for(var/mob/living/L in B)
|
||||||
|
if(L.absorbed && L != M && L.ckey)
|
||||||
|
to_chat(L, "<span class='changeling'>\The [M] thinks, \"[message]\"</span>") //To any absorbed people in the pred
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
//Let's also check and see if there's anyone inside of us to send the message to.
|
||||||
|
for(var/I in M.contents)
|
||||||
|
if(istype(I, /mob/living/dominated_brain))
|
||||||
|
var/mob/living/dominated_brain/db = I
|
||||||
|
to_chat(db, "<span class='changeling'><b>\The [M] thinks, \"[message]\"</b></span>") //To any dominated brains inside us
|
||||||
|
f = TRUE
|
||||||
|
for(var/B in M.vore_organs)
|
||||||
|
for(var/mob/living/L in B)
|
||||||
|
if(L.absorbed)
|
||||||
|
to_chat(L, "<span class='changeling'><b>\The [M] thinks, \"[message]\"</b></span>") //To any absorbed people inside us
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
if(f) //We found someone to send the message to
|
||||||
|
if(pb)
|
||||||
|
to_chat(M, "<span class='changeling'>You think \"[message]\"</span>") //To us if we are the prey
|
||||||
|
else
|
||||||
|
to_chat(M, "<span class='changeling'><b>You think \"[message]\"</b></span>") //To us if we are the pred
|
||||||
|
for (var/mob/G in player_list)
|
||||||
|
if (istype(G, /mob/new_player))
|
||||||
|
continue
|
||||||
|
else if(G.stat == DEAD && G.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||||
|
to_chat(G, "<span class='changeling'>\The [M] thinks, \"[message]\"</span>")
|
||||||
|
log_say(message,M)
|
||||||
|
else //There wasn't anyone to send the message to, pred or prey, so let's just say it instead and correct our psay just in case.
|
||||||
|
M.forced_psay = FALSE
|
||||||
|
M.say(message)
|
||||||
|
|
||||||
|
///// PME /////
|
||||||
|
|
||||||
|
/mob/verb/pme(message as text|null)
|
||||||
|
set category = "IC"
|
||||||
|
set name = "Pme"
|
||||||
|
set desc = "Emote to people affected by complete absorbed or dominate predator/prey."
|
||||||
|
|
||||||
|
if (src.client)
|
||||||
|
if(client.prefs.muted & MUTE_IC)
|
||||||
|
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
||||||
|
return
|
||||||
|
if (!message)
|
||||||
|
message = input(usr, "Type a message to emote.","Pme") as text|null
|
||||||
|
message = sanitize_or_reflect(message,src)
|
||||||
|
if (!message)
|
||||||
|
return
|
||||||
|
if (stat == DEAD)
|
||||||
|
return say_dead(message)
|
||||||
|
if(!isliving(src))
|
||||||
|
forced_psay = FALSE
|
||||||
|
me_verb(message)
|
||||||
|
var/f = FALSE //did we find someone to send the message to other than ourself?
|
||||||
|
var/mob/living/pb //predator body
|
||||||
|
var/mob/living/M = src
|
||||||
|
if(istype(M, /mob/living/dominated_brain))
|
||||||
|
var/mob/living/dominated_brain/db = M
|
||||||
|
if(db.loc != db.pred_body)
|
||||||
|
to_chat(db, "<span class='danger'>You aren't inside of a brain anymore!!!</span>")
|
||||||
|
qdel(db) //Oh no, dominated brains shouldn't exist outside of the body, so if we got here something went very wrong.
|
||||||
|
return
|
||||||
|
else
|
||||||
|
pb = db.pred_body
|
||||||
|
to_chat(pb, "<span class='changeling'>\The [M] [message]</span>") //To our pred if dominated brain
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
else if(M.absorbed && isbelly(M.loc))
|
||||||
|
pb = M.loc.loc
|
||||||
|
to_chat(pb, "<span class='changeling'>\The [M] [message]</span>") //To our pred if absorbed
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
if(pb) //We are prey, let's do the prey thing.
|
||||||
|
|
||||||
|
for(var/I in pb.contents)
|
||||||
|
if(istype(I, /mob/living/dominated_brain) && I != M)
|
||||||
|
var/mob/living/dominated_brain/db = I
|
||||||
|
to_chat(db, "<span class='changeling'>\The [M] [message]</span>") //To any dominated brains in the pred
|
||||||
|
f = TRUE
|
||||||
|
for(var/B in pb.vore_organs)
|
||||||
|
for(var/mob/living/L in B)
|
||||||
|
if(L.absorbed && L != M && L.ckey)
|
||||||
|
to_chat(L, "<span class='changeling'>\The [M] [message]</span>") //To any absorbed people in the pred
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
//Let's also check and see if there's anyone inside of us to send the message to.
|
||||||
|
for(var/I in M.contents)
|
||||||
|
if(istype(I, /mob/living/dominated_brain))
|
||||||
|
var/mob/living/dominated_brain/db = I
|
||||||
|
to_chat(db, "<span class='changeling'><b>\The [M] [message]</b></span>") //To any dominated brains inside us
|
||||||
|
f = TRUE
|
||||||
|
for(var/B in M.vore_organs)
|
||||||
|
for(var/mob/living/L in B)
|
||||||
|
if(L.absorbed)
|
||||||
|
to_chat(L, "<span class='changeling'><b>\The [M] [message]</b></span>") //To any absorbed people inside us
|
||||||
|
f = TRUE
|
||||||
|
|
||||||
|
if(f) //We found someone to send the message to
|
||||||
|
if(pb)
|
||||||
|
to_chat(M, "<span class='changeling'>\The [M] [message]</span>") //To us if we are the prey
|
||||||
|
else
|
||||||
|
to_chat(M, "<span class='changeling'><b>\The [M] [message]</b></span>") //To us if we are the pred
|
||||||
|
for (var/mob/G in player_list)
|
||||||
|
if (istype(G, /mob/new_player))
|
||||||
|
continue
|
||||||
|
else if(G.stat == DEAD && G.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||||
|
to_chat(G, "<span class='changeling'>\The [M] [message]</span>")
|
||||||
|
log_say(message,M)
|
||||||
|
else //There wasn't anyone to send the message to, pred or prey, so let's just emote it instead and correct our psay just in case.
|
||||||
|
M.forced_psay = FALSE
|
||||||
|
M.me_verb(message)
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
//Actual full digest modes
|
//Actual full digest modes
|
||||||
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG)
|
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG)
|
||||||
//Digest mode addon flags
|
//Digest mode addon flags
|
||||||
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS)
|
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY)
|
||||||
//Item related modes
|
//Item related modes
|
||||||
var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL)
|
var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL)
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
"You feel %prey becoming part of you.")
|
"You feel %prey becoming part of you.")
|
||||||
|
|
||||||
var/list/absorb_messages_prey = list(
|
var/list/absorb_messages_prey = list(
|
||||||
"Your feel yourself becoming part of %pred's %belly!")
|
"You feel yourself becoming part of %pred's %belly!")
|
||||||
|
|
||||||
var/list/unabsorb_messages_owner = list(
|
var/list/unabsorb_messages_owner = list(
|
||||||
"You feel %prey reform into a recognizable state again.")
|
"You feel %prey reform into a recognizable state again.")
|
||||||
@@ -417,9 +417,12 @@
|
|||||||
p.undo_prey_takeover(FALSE)
|
p.undo_prey_takeover(FALSE)
|
||||||
return 0
|
return 0
|
||||||
for(var/mob/living/L in M.contents)
|
for(var/mob/living/L in M.contents)
|
||||||
L.muffled = 0
|
L.muffled = FALSE
|
||||||
|
L.forced_psay = FALSE
|
||||||
|
|
||||||
for(var/obj/item/weapon/holder/H in M.contents)
|
for(var/obj/item/weapon/holder/H in M.contents)
|
||||||
H.held_mob.muffled = 0
|
H.held_mob.muffled = FALSE
|
||||||
|
H.held_mob.forced_psay = FALSE
|
||||||
|
|
||||||
//Place them into our drop_location
|
//Place them into our drop_location
|
||||||
M.forceMove(drop_location())
|
M.forceMove(drop_location())
|
||||||
@@ -433,7 +436,9 @@
|
|||||||
if(ML.client)
|
if(ML.client)
|
||||||
ML.stop_sound_channel(CHANNEL_PREYLOOP) //Stop the internal loop, it'll restart if the isbelly check on next tick anyway
|
ML.stop_sound_channel(CHANNEL_PREYLOOP) //Stop the internal loop, it'll restart if the isbelly check on next tick anyway
|
||||||
if(ML.muffled)
|
if(ML.muffled)
|
||||||
ML.muffled = 0
|
ML.muffled = FALSE
|
||||||
|
if(ML.forced_psay)
|
||||||
|
ML.forced_psay = FALSE
|
||||||
if(ML.absorbed)
|
if(ML.absorbed)
|
||||||
ML.absorbed = FALSE
|
ML.absorbed = FALSE
|
||||||
handle_absorb_langs(ML, owner)
|
handle_absorb_langs(ML, owner)
|
||||||
@@ -744,8 +749,6 @@
|
|||||||
|
|
||||||
M.absorbed = TRUE
|
M.absorbed = TRUE
|
||||||
if(M.ckey)
|
if(M.ckey)
|
||||||
owner.temp_language_sources += M
|
|
||||||
M.temp_language_sources += owner
|
|
||||||
handle_absorb_langs(M, owner)
|
handle_absorb_langs(M, owner)
|
||||||
|
|
||||||
to_chat(M, "<span class='notice'>[absorb_alert_prey]</span>")
|
to_chat(M, "<span class='notice'>[absorb_alert_prey]</span>")
|
||||||
@@ -826,6 +829,7 @@
|
|||||||
owner.update_icon()
|
owner.update_icon()
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
<<<<<<< HEAD
|
||||||
/obj/belly/proc/handle_absorb_langs(var/mob/living/prey, var/mob/living/pred)
|
/obj/belly/proc/handle_absorb_langs(var/mob/living/prey, var/mob/living/pred)
|
||||||
for(var/mob/living/p in pred.temp_language_sources) //Let's look at the pred's sources
|
for(var/mob/living/p in pred.temp_language_sources) //Let's look at the pred's sources
|
||||||
if (!p.absorbed)
|
if (!p.absorbed)
|
||||||
@@ -854,6 +858,10 @@
|
|||||||
continue
|
continue
|
||||||
prey.languages += L
|
prey.languages += L
|
||||||
prey.temp_languages += L
|
prey.temp_languages += L
|
||||||
|
=======
|
||||||
|
/obj/belly/proc/handle_absorb_langs()
|
||||||
|
owner.absorb_langs()
|
||||||
|
>>>>>>> db38d34278... Merge pull request #12412 from Very-Soft/specialabsorb
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -224,6 +224,10 @@
|
|||||||
if((mode_flags & DM_FLAG_THICKBELLY) && !H.muffled)
|
if((mode_flags & DM_FLAG_THICKBELLY) && !H.muffled)
|
||||||
H.muffled = TRUE
|
H.muffled = TRUE
|
||||||
|
|
||||||
|
//Force psay
|
||||||
|
if((mode_flags & DM_FLAG_FORCEPSAY) && !H.forced_psay && H.absorbed)
|
||||||
|
H.forced_psay = TRUE
|
||||||
|
|
||||||
//Worn items flag
|
//Worn items flag
|
||||||
if(mode_flags & DM_FLAG_AFFECTWORN)
|
if(mode_flags & DM_FLAG_AFFECTWORN)
|
||||||
for(var/slot in slots)
|
for(var/slot in slots)
|
||||||
|
|||||||
@@ -439,8 +439,8 @@
|
|||||||
if(confirm != "Okay" || loc != B)
|
if(confirm != "Okay" || loc != B)
|
||||||
return
|
return
|
||||||
//Actual escaping
|
//Actual escaping
|
||||||
absorbed = 0 //Make sure we're not absorbed
|
absorbed = FALSE //Make sure we're not absorbed
|
||||||
muffled = 0 //Removes Muffling
|
muffled = FALSE //Removes Muffling
|
||||||
forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave.
|
forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave.
|
||||||
for(var/mob/living/simple_mob/SA in range(10))
|
for(var/mob/living/simple_mob/SA in range(10))
|
||||||
SA.prey_excludes[src] = world.time
|
SA.prey_excludes[src] = world.time
|
||||||
|
|||||||
Reference in New Issue
Block a user