mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
361 lines
8.7 KiB
Plaintext
361 lines
8.7 KiB
Plaintext
|
|
// fun if you want to typecast humans/monkeys/etc without writing long path-filled lines.
|
|
/proc/ishuman(A)
|
|
if(istype(A, /mob/living/carbon/human))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isamorph(A)
|
|
return istype(A, /mob/living/carbon/amorph)
|
|
|
|
/proc/ismonkey(A)
|
|
if(A && istype(A, /mob/living/carbon/monkey))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isbrain(A)
|
|
if(A && istype(A, /mob/living/carbon/brain))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isalien(A)
|
|
if(istype(A, /mob/living/carbon/alien))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isalienadult(A)
|
|
if(istype(A, /mob/living/carbon/alien/humanoid))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/islarva(A)
|
|
if(istype(A, /mob/living/carbon/alien/larva))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/ismetroid(A)
|
|
if(istype(A, /mob/living/carbon/metroid))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isrobot(A)
|
|
if(istype(A, /mob/living/silicon/robot))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isanimal(A)
|
|
if(istype(A, /mob/living/simple_animal))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/iscorgi(A)
|
|
if(istype(A, /mob/living/simple_animal/corgi))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/iscrab(A)
|
|
if(istype(A, /mob/living/simple_animal/crab))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/iscat(A)
|
|
if(istype(A, /mob/living/simple_animal/cat/))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/istajaran(A)
|
|
if(istype(A, /mob/living/carbon/human/tajaran))
|
|
return 1
|
|
return 0
|
|
|
|
/*proc/ishivebot(A)
|
|
if(A && istype(A, /mob/living/silicon/hivebot))
|
|
return 1
|
|
return 0*/
|
|
|
|
/*proc/ishivemainframe(A)
|
|
if(A && istype(A, /mob/living/silicon/hive_mainframe))
|
|
return 1
|
|
return 0*/
|
|
|
|
/proc/isAI(A)
|
|
if(istype(A, /mob/living/silicon/ai))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/ispAI(A)
|
|
if(istype(A, /mob/living/silicon/pai))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/iscarbon(A)
|
|
if(istype(A, /mob/living/carbon))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/issilicon(A)
|
|
if(istype(A, /mob/living/silicon))
|
|
return 1
|
|
return 0
|
|
|
|
/proc/isliving(A)
|
|
if(istype(A, /mob/living))
|
|
return 1
|
|
return 0
|
|
|
|
proc/isobserver(A)
|
|
if(istype(A, /mob/dead/observer))
|
|
return 1
|
|
return 0
|
|
|
|
proc/isorgan(A)
|
|
if(istype(A, /datum/organ/external))
|
|
return 1
|
|
return 0
|
|
|
|
proc/hasorgans(A)
|
|
if(ishuman(A) || ismonkey(A))
|
|
return 1
|
|
return 0
|
|
|
|
|
|
|
|
|
|
/proc/hsl2rgb(h, s, l)
|
|
return
|
|
|
|
|
|
/proc/check_zone(zone)
|
|
if(!zone)
|
|
return "chest"
|
|
switch(zone)
|
|
if("eyes")
|
|
zone = "head"
|
|
if("mouth")
|
|
zone = "head"
|
|
// if("groin")
|
|
// zone = "chest"
|
|
return zone
|
|
|
|
|
|
/proc/ran_zone(zone, probability)
|
|
zone = check_zone(zone)
|
|
if(!probability) probability = 90
|
|
if(probability == 100) return zone
|
|
|
|
if(zone == "chest")
|
|
if(prob(probability)) return "chest"
|
|
var/t = rand(1, 9)
|
|
switch(t)
|
|
if(1 to 3) return "head"
|
|
if(4 to 6) return "l_arm"
|
|
if(7 to 9) return "r_arm"
|
|
|
|
if(prob(probability)) return zone
|
|
return "chest"
|
|
|
|
|
|
/proc/stars(n, pr)
|
|
if (pr == null)
|
|
pr = 25
|
|
if (pr <= 0)
|
|
return null
|
|
else
|
|
if (pr >= 100)
|
|
return n
|
|
var/te = html_decode(n)
|
|
var/t = ""
|
|
n = length(n)
|
|
var/p = null
|
|
p = 1
|
|
while(p <= n)
|
|
if ((copytext(te, p, p + 1) == " " || prob(pr)))
|
|
t = text("[][]", t, copytext(te, p, p + 1))
|
|
else
|
|
t = text("[]*", t)
|
|
p++
|
|
return html_encode(t)
|
|
|
|
/*proc/NewStutter(phrase,stunned)
|
|
phrase = html_decode(phrase)
|
|
|
|
var/list/split_phrase = dd_text2list(phrase," ") //Split it up into words.
|
|
|
|
var/list/unstuttered_words = split_phrase.Copy()
|
|
var/i = rand(1,3)
|
|
if(stunned) i = split_phrase.len
|
|
for(,i > 0,i--) //Pick a few words to stutter on.
|
|
|
|
if (!unstuttered_words.len)
|
|
break
|
|
var/word = pick(unstuttered_words)
|
|
unstuttered_words -= word //Remove from unstuttered words so we don't stutter it again.
|
|
var/index = split_phrase.Find(word) //Find the word in the split phrase so we can replace it.
|
|
|
|
//Search for dipthongs (two letters that make one sound.)
|
|
var/first_sound = copytext(word,1,3)
|
|
var/first_letter = copytext(word,1,2)
|
|
if(lowertext(first_sound) in list("ch","th","sh"))
|
|
first_letter = first_sound
|
|
|
|
//Repeat the first letter to create a stutter.
|
|
var/rnum = rand(1,3)
|
|
switch(rnum)
|
|
if(1)
|
|
word = "[first_letter]-[word]"
|
|
if(2)
|
|
word = "[first_letter]-[first_letter]-[word]"
|
|
if(3)
|
|
word = "[first_letter]-[word]"
|
|
|
|
split_phrase[index] = word
|
|
|
|
return sanitize(dd_list2text(split_phrase," "))*/
|
|
|
|
|
|
proc/slur(phrase)
|
|
phrase = html_decode(phrase)
|
|
var/leng=lentext(phrase)
|
|
var/counter=lentext(phrase)
|
|
var/newphrase=""
|
|
var/newletter=""
|
|
while(counter>=1)
|
|
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
|
|
if(rand(1,3)==3)
|
|
if(lowertext(newletter)=="o") newletter="u"
|
|
if(lowertext(newletter)=="s") newletter="ch"
|
|
if(lowertext(newletter)=="a") newletter="ah"
|
|
if(lowertext(newletter)=="c") newletter="k"
|
|
switch(rand(1,15))
|
|
if(1,3,5,8) newletter="[lowertext(newletter)]"
|
|
if(2,4,6,15) newletter="[uppertext(newletter)]"
|
|
if(7) newletter+="'"
|
|
if(9,10) newletter="<b>[newletter]</b>"
|
|
if(11,12) newletter="<big>[newletter]</big>"
|
|
if(13) newletter="<small>[newletter]</small>"
|
|
newphrase+="[newletter]";counter-=1
|
|
return newphrase
|
|
|
|
/proc/stutter(n)
|
|
var/te = html_decode(n)
|
|
var/t = ""//placed before the message. Not really sure what it's for.
|
|
n = length(n)//length of the entire word
|
|
var/p = null
|
|
p = 1//1 is the start of any word
|
|
while(p <= n)//while P, which starts at 1 is less or equal to N which is the length.
|
|
var/n_letter = copytext(te, p, p + 1)//copies text from a certain distance. In this case, only one letter at a time.
|
|
if (prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z")))
|
|
if (prob(10))
|
|
n_letter = text("[n_letter]-[n_letter]-[n_letter]-[n_letter]")//replaces the current letter with this instead.
|
|
else
|
|
if (prob(20))
|
|
n_letter = text("[n_letter]-[n_letter]-[n_letter]")
|
|
else
|
|
if (prob(5))
|
|
n_letter = null
|
|
else
|
|
n_letter = text("[n_letter]-[n_letter]")
|
|
t = text("[t][n_letter]")//since the above is ran through for each letter, the text just adds up back to the original word.
|
|
p++//for each letter p is increased to find where the next letter will be.
|
|
return copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
|
|
|
|
|
proc/Gibberish(t, p)
|
|
/* Turn text into complete gibberish! */
|
|
var/returntext = ""
|
|
for(var/i = 1, i <= length(t), i++)
|
|
|
|
var/letter = copytext(t, i, i+1)
|
|
if(prob(50))
|
|
if(p >= 70)
|
|
letter = ""
|
|
|
|
for(var/j = 1, j <= rand(0, 2), j++)
|
|
letter += pick("#","@","*","&","%","$","/", "<", ">", ";","*","*","*","*","*","*","*")
|
|
|
|
returntext += letter
|
|
|
|
return returntext
|
|
|
|
|
|
/proc/ninjaspeak(n)
|
|
/*
|
|
The difference with stutter is that this proc can stutter more than 1 letter
|
|
The issue here is that anything that does not have a space is treated as one word (in many instances). For instance, "LOOKING," is a word, including the comma.
|
|
It's fairly easy to fix if dealing with single letters but not so much with compounds of letters./N
|
|
*/
|
|
var/te = html_decode(n)
|
|
var/t = ""
|
|
n = length(n)
|
|
var/p = 1
|
|
while(p <= n)
|
|
var/n_letter
|
|
var/n_mod = rand(1,4)
|
|
if(p+n_mod>n+1)
|
|
n_letter = copytext(te, p, n+1)
|
|
else
|
|
n_letter = copytext(te, p, p+n_mod)
|
|
if (prob(50))
|
|
if (prob(30))
|
|
n_letter = text("[n_letter]-[n_letter]-[n_letter]")
|
|
else
|
|
n_letter = text("[n_letter]-[n_letter]")
|
|
else
|
|
n_letter = text("[n_letter]")
|
|
t = text("[t][n_letter]")
|
|
p=p+n_mod
|
|
return copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
|
|
|
|
|
/proc/shake_camera(mob/M, duration, strength=1)
|
|
if(!M || !M.client || M.shakecamera)
|
|
return
|
|
spawn(1)
|
|
var/oldeye=M.client.eye
|
|
var/x
|
|
M.shakecamera = 1
|
|
for(x=0; x<duration, x++)
|
|
M.client.eye = locate(dd_range(1,M.loc.x+rand(-strength,strength),world.maxx),dd_range(1,M.loc.y+rand(-strength,strength),world.maxy),M.loc.z)
|
|
sleep(1)
|
|
M.shakecamera = 0
|
|
M.client.eye=oldeye
|
|
|
|
|
|
/proc/findname(msg)
|
|
for(var/mob/M in world)
|
|
if (M.real_name == text("[msg]"))
|
|
return 1
|
|
return 0
|
|
|
|
|
|
/mob/proc/abiotic(var/full_body = 0)
|
|
if(full_body && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask)))
|
|
return 1
|
|
|
|
if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )))
|
|
return 1
|
|
|
|
return 0
|
|
|
|
/mob/proc/abiotic2(var/full_body2 = 0)
|
|
if(full_body2 && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask)))
|
|
return 1
|
|
|
|
if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )))
|
|
return 1
|
|
|
|
return 0
|
|
|
|
/mob/proc/put_in_hands(var/obj/item/I) //A suprisingly useful proc. Allows a simple way to place an object in a mob's hands, or, if they are full, on the ground below them.
|
|
if(!r_hand)
|
|
I.loc = src
|
|
r_hand = I
|
|
I.layer = 20
|
|
else if(!l_hand)
|
|
I.loc = src
|
|
l_hand = I
|
|
I.layer = 20
|
|
else
|
|
I.loc = get_turf(src)
|
|
update_clothing()
|