mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
179 lines
6.7 KiB
Plaintext
179 lines
6.7 KiB
Plaintext
proc/random_hair_style(gender, species = "Human")
|
|
var/h_style = "Bald"
|
|
|
|
var/list/valid_hairstyles = list()
|
|
for(var/hairstyle in hair_styles_list)
|
|
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
|
if(gender == MALE && S.gender == FEMALE)
|
|
continue
|
|
if(gender == FEMALE && S.gender == MALE)
|
|
continue
|
|
if( !(species in S.species_allowed))
|
|
continue
|
|
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
|
|
|
if(valid_hairstyles.len)
|
|
h_style = pick(valid_hairstyles)
|
|
|
|
return h_style
|
|
|
|
/proc/GetOppositeDir(var/dir)
|
|
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/GetOppositeDir() called tick#: [world.time]")
|
|
switch(dir)
|
|
if(NORTH) return SOUTH
|
|
if(SOUTH) return NORTH
|
|
if(EAST) return WEST
|
|
if(WEST) return EAST
|
|
if(SOUTHWEST) return NORTHEAST
|
|
if(NORTHWEST) return SOUTHEAST
|
|
if(NORTHEAST) return SOUTHWEST
|
|
if(SOUTHEAST) return NORTHWEST
|
|
return 0
|
|
|
|
proc/random_facial_hair_style(gender, species = "Human")
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/random_facial_hair_style() called tick#: [world.time]")
|
|
var/f_style = "Shaved"
|
|
|
|
var/list/valid_facialhairstyles = list()
|
|
for(var/facialhairstyle in facial_hair_styles_list)
|
|
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
|
if(gender == MALE && S.gender == FEMALE)
|
|
continue
|
|
if(gender == FEMALE && S.gender == MALE)
|
|
continue
|
|
if( !(species in S.species_allowed))
|
|
continue
|
|
|
|
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
|
|
|
if(valid_facialhairstyles.len)
|
|
f_style = pick(valid_facialhairstyles)
|
|
|
|
return f_style
|
|
|
|
proc/random_name(gender, speciesName = "Human")
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/random_name() called tick#: [world.time]")
|
|
var/datum/species/S = all_species[speciesName]
|
|
if(S)
|
|
return S.makeName(gender)
|
|
else
|
|
var/datum/species/human/H = new
|
|
return H.makeName(gender)
|
|
|
|
|
|
|
|
proc/random_skin_tone()
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/random_skin_tone() called tick#: [world.time]")
|
|
switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino"))
|
|
if("caucasian") . = -10
|
|
if("afroamerican") . = -115
|
|
if("african") . = -165
|
|
if("latino") . = -55
|
|
if("albino") . = 34
|
|
else . = rand(-185,34)
|
|
return min(max( .+rand(-25, 25), -185),34)
|
|
|
|
proc/skintone2racedescription(tone)
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/skintone2racedescription() called tick#: [world.time]")
|
|
switch (tone)
|
|
if(30 to INFINITY) return "albino"
|
|
if(20 to 30) return "pale"
|
|
if(5 to 15) return "light skinned"
|
|
if(-10 to 5) return "white"
|
|
if(-25 to -10) return "tan"
|
|
if(-45 to -25) return "darker skinned"
|
|
if(-65 to -45) return "brown"
|
|
if(-INFINITY to -65) return "black"
|
|
else return "unknown"
|
|
|
|
proc/age2agedescription(age)
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/age2agedescription() called tick#: [world.time]")
|
|
switch(age)
|
|
if(0 to 1) return "infant"
|
|
if(1 to 3) return "toddler"
|
|
if(3 to 13) return "child"
|
|
if(13 to 19) return "teenager"
|
|
if(19 to 30) return "young adult"
|
|
if(30 to 45) return "adult"
|
|
if(45 to 60) return "middle-aged"
|
|
if(60 to 70) return "aging"
|
|
if(70 to INFINITY) return "elderly"
|
|
else return "unknown"
|
|
|
|
proc/RoundHealth(health)
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/RoundHealth() called tick#: [world.time]")
|
|
switch(health)
|
|
if(100 to INFINITY)
|
|
return "health100"
|
|
if(70 to 100)
|
|
return "health80"
|
|
if(50 to 70)
|
|
return "health60"
|
|
if(30 to 50)
|
|
return "health40"
|
|
if(18 to 30)
|
|
return "health25"
|
|
if(5 to 18)
|
|
return "health10"
|
|
if(1 to 5)
|
|
return "health1"
|
|
if(-99 to 0)
|
|
return "health0"
|
|
else
|
|
return "health-100"
|
|
return "0"
|
|
|
|
/*
|
|
Proc for attack log creation, because really why not
|
|
1 argument is the actor
|
|
2 argument is the target of action
|
|
3 is the description of action(like punched, throwed, or any other verb)
|
|
4 should it make adminlog note or not
|
|
5 is the tool with which the action was made(usually item) 5 and 6 are very similar(5 have "by " before it, that it) and are separated just to keep things in a bit more in order
|
|
6 is additional information, anything that needs to be added
|
|
*/
|
|
|
|
proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null)
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/add_logs() called tick#: [world.time]")
|
|
if(user && ismob(user))
|
|
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
|
|
if(target && ismob(target))
|
|
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
|
|
if(!iscarbon(user))
|
|
target.LAssailant = null
|
|
else
|
|
target.LAssailant = user
|
|
if(admin)
|
|
log_attack("<font color='red'>[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
|
|
|
|
proc/add_ghostlogs(var/mob/user, var/obj/target, var/what_done, var/admin=1, var/addition=null)
|
|
//writepanic("[__FILE__].[__LINE__] \\/proc/add_ghostlogs() called tick#: [world.time]")
|
|
var/target_text = "NON-EXISTENT TARGET"
|
|
var/subject_text = "NON-EXISTENT SUBJECT"
|
|
if(target)
|
|
target_text=target.name
|
|
if(ismob(target))
|
|
var/mob/M=target
|
|
if(M.ckey)
|
|
target_text += "([M.ckey])"
|
|
if(user)
|
|
subject_text=user.name
|
|
if(ismob(user))
|
|
var/mob/M=user
|
|
if(M.ckey)
|
|
subject_text += "([M.ckey])"
|
|
if(user && ismob(user))
|
|
user.attack_log += "\[[time_stamp()]\] GHOST: <font color='red'>Has [what_done] [target_text] [addition]</font>"
|
|
if(target && ismob(target))
|
|
var/mob/M=target
|
|
M.attack_log += "\[[time_stamp()]\] GHOST: <font color='orange'>Has been [what_done] by [subject_text] [addition]</font>"
|
|
if(admin)
|
|
//message_admins("GHOST: [subject_text] [what_done] [target_text] [addition]")
|
|
if(isAdminGhost(user))
|
|
log_adminghost("[subject_text] [what_done] [target_text] [addition]")
|
|
else
|
|
log_ghost("[subject_text] [what_done] [target_text] [addition]")
|
|
|
|
/mob/proc/isVentCrawling()
|
|
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/mob/proc/isVentCrawling() called tick#: [world.time]")
|
|
return (istype(loc, /obj/machinery/atmospherics)) // Crude but no other situation would put them inside of this |