mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 04:02:31 +00:00
Any PDA that can access the Security Records can, via the forensic scanner function (that was already there) store data on what was scanned, the same way that the Detective's scanner can. Scanning a PDA with said stored data in the Detective's computer-o-doom will transfer the data from the PDA to the computer's database. Made some area names improper as needed (Only ones where it makes sense to be improper.) Updated changelog. Revision: r3713 Author: joeheinemeyer
358 lines
8.6 KiB
Plaintext
358 lines
8.6 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/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()
|