mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-21 07:32:35 +00:00
Adds BS12 dismemberment. Not all features of it are implemented yet, but it should be equal to our previous system. Adds greater changeling code, but doesn't change the genome count yet on it. Renames registered to registered_name on IDs because bs12 had it and it seemed like a good idea to do last night. For some reason. Adds an afterattack to mobs that can be used. (In fairness, lots of shit in attack_hand should be in there instead, like stungloves and stuff, to minimize duplicated code) Revision: r3537 Author: VivianFoxfoot
358 lines
8.5 KiB
Plaintext
358 lines
8.5 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)
|
|
counter=lentext(phrase)
|
|
newphrase="";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)
|
|
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()
|