Polaris sync

This commit is contained in:
Eearslya
2016-08-06 20:34:44 -07:00
566 changed files with 16223 additions and 7350 deletions
+1 -5
View File
@@ -159,11 +159,7 @@ Works together with spawning an observer, noted above.
if(!loc) return
if(!client) return 0
if(client.images.len)
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud")
client.images.Remove(hud)
handle_regular_hud_updates()
if(antagHUD)
var/list/target_list = list()
+1
View File
@@ -74,6 +74,7 @@
drop_l_hand()
if(healths)
healths.overlays = null // This is specific to humans but the relevant code is here; shouldn't mess with other mobs.
healths.icon_state = "health6"
timeofdeath = world.time
+3 -5
View File
@@ -4,8 +4,8 @@
icon = 'icons/obj/aibots.dmi'
icon_state = "ed2090"
density = 1
health = 100
maxHealth = 100
health = 200
maxHealth = 200
is_ranged = 1
preparing_arrest_sounds = new()
@@ -76,7 +76,7 @@
desc = "Some sort of bizarre assembly."
icon = 'icons/obj/aibots.dmi'
icon_state = "ed209_frame"
item_state = "ed209_frame"
item_state = "buildpipe"
created_name = "ED-209 Security Robot"
var/lasercolor = ""
@@ -101,10 +101,8 @@
user << "<span class='notice'>You add the robot leg to [src].</span>"
name = "legs/frame assembly"
if(build_step == 1)
item_state = "ed209_leg"
icon_state = "ed209_leg"
else
item_state = "ed209_legs"
icon_state = "ed209_legs"
if(2)
+20 -4
View File
@@ -2,8 +2,8 @@
name = "Securitron"
desc = "A little security robot. He looks less than thrilled."
icon_state = "secbot0"
maxHealth = 50
health = 50
maxHealth = 100
health = 100
req_one_access = list(access_security, access_forensics_lockers)
botcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
patrol_speed = 2
@@ -85,6 +85,18 @@
declare_arrests = !declare_arrests
attack_hand(usr)
/mob/living/bot/secbot/emag_act(var/remaining_uses, var/mob/user)
. = ..()
if(!emagged)
if(user)
user << "<span class='notice'>\The [src] buzzes and beeps.</span>"
emagged = 1
patrol_speed = 3
target_speed = 4
return 1
else
user << "<span class='notice'>\The [src] is already corrupt.</span>"
/mob/living/bot/secbot/attackby(var/obj/item/O, var/mob/user)
var/curhealth = health
..()
@@ -130,7 +142,7 @@
if(ishuman(target) && declare_arrests)
var/area/location = get_area(src)
broadcast_security_hud_message("[src] is [arrest_type ? "detaining" : "arresting"] a level [check_threat(target)] suspect <b>[target]</b> in <b>[location]</b>.", src)
// say("Engaging patrol mode.")
/mob/living/bot/secbot/UnarmedAttack(var/mob/M, var/proximity)
@@ -145,7 +157,7 @@
var/cuff = 1
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(istype(H.back, /obj/item/weapon/rig) && istype(H.gloves,/obj/item/clothing/gloves/rig))
if(istype(H.back, /obj/item/weapon/rig) && istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig))
cuff = 0
if(!C.lying || C.handcuffed || arrest_type)
cuff = 0
@@ -238,6 +250,10 @@
desc = "Some sort of bizarre assembly."
icon = 'icons/obj/aibots.dmi'
icon_state = "helmet_signaler"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_hats.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_hats.dmi',
)
item_state = "helmet"
var/build_step = 0
var/created_name = "Securitron"
@@ -1,6 +1,6 @@
/mob/living/carbon/alien/diona/confirm_evolution()
if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist)
if(!is_alien_whitelisted(src, all_species["Diona"]))
src << alert("You are currently not whitelisted to play as a full diona.")
return null
+1 -1
View File
@@ -7,7 +7,7 @@
/mob/living/carbon/proc/breathe()
//if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return
if(!should_have_organ(O_LUNGS) || does_not_breathe) return
if(!should_have_organ(O_LUNGS)) return
var/datum/gas_mixture/breath = null
@@ -613,7 +613,7 @@ wink, yawn, swish, sway/wag, fastsway/qwag, stopsway/swag"}
set desc = "Sets a description which will be shown when someone examines you."
set category = "IC"
pose = sanitize(input(usr, "This is [src]. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"] [get_visible_gender() == NEUTER ? "are" : "is"]...", "Pose", null) as text)
pose = sanitize(input(usr, "This is [src]. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"]...", "Pose", null) as text)
/mob/living/carbon/human/verb/set_flavor()
set name = "Set Flavour Text"
@@ -419,7 +419,7 @@
if (pose)
if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 )
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\n[T.He] [T.is] [pose]"
msg += "\n[T.He] [pose]"
user << msg
+16 -17
View File
@@ -27,16 +27,16 @@
if(mind)
mind.name = real_name
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[LIFE_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudunknown")
hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, "100")
hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[ID_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudunknown")
hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy")
human_mob_list |= src
..()
@@ -341,6 +341,8 @@
var/obj/item/organ/external/affected_organ = get_organ(check_zone(def_zone))
var/siemens_coeff = base_siemens_coeff * get_siemens_coefficient_organ(affected_organ)
if(fire_stacks < 0) // Water makes you more conductive.
siemens_coeff *= 1.5
return ..(shock_damage, source, siemens_coeff, def_zone)
@@ -1028,9 +1030,8 @@
src << msg
organ.take_damage(rand(1,3), 0, 0)
if(!(organ.robotic >= ORGAN_ROBOT) && !(should_have_organ(O_HEART))) //There is no blood in protheses.
if(!(organ.robotic >= ORGAN_ROBOT) && (should_have_organ(O_HEART))) //There is no blood in protheses.
organ.status |= ORGAN_BLEEDING
src.adjustToxLoss(rand(1,3))
/mob/living/carbon/human/verb/check_pulse()
set category = "Object"
@@ -1331,13 +1332,11 @@
var/obj/item/organ/external/current_limb = organs_by_name[limb]
if(current_limb && current_limb.dislocated > 0 && !current_limb.is_parent_dislocated()) //if the parent is also dislocated you will have to relocate that first
limbs |= current_limb
var/choice = input(usr,"Which joint do you wish to relocate?") as null|anything in limbs
var/obj/item/organ/external/current_limb = input(usr,"Which joint do you wish to relocate?") as null|anything in limbs
if(!choice)
if(!current_limb)
return
var/obj/item/organ/external/current_limb = organs_by_name[choice]
if(self)
src << "<span class='warning'>You brace yourself to relocate your [current_limb.joint]...</span>"
else
@@ -1345,7 +1344,7 @@
if(!do_after(U, 30))
return
if(!choice || !current_limb || !S || !U)
if(!current_limb || !S || !U)
return
if(self)
@@ -18,12 +18,11 @@ emp_act
//Shields
var/shield_check = check_shields(P.damage, P, null, def_zone, "the [P.name]")
if(shield_check)
if(shield_check < 0)
return shield_check
else
P.on_hit(src, 2, def_zone)
return 2
if(shield_check) // If the block roll succeeded, this is true.
if(shield_check < 0) // The shield did something weird and the bullet needs to keep doing things (e.g. it was reflected).
return shield_check // Likely equal to PROJECTILE_FORCE_MISS or PROJECTILE_CONTINUE.
else // Otherwise we blocked normally and stopped all the damage.
return 0
//Shrapnel
if(P.can_embed())
@@ -40,6 +39,8 @@ emp_act
/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone)
var/obj/item/organ/external/affected = get_organ(check_zone(def_zone))
var/siemens_coeff = get_siemens_coefficient_organ(affected)
if(fire_stacks < 0) // Water makes you more conductive.
siemens_coeff *= 1.5
stun_amount *= siemens_coeff
agony_amount *= siemens_coeff
@@ -152,7 +153,16 @@ emp_act
if(user == src) // Attacking yourself can't miss
return target_zone
var/hit_zone = get_zone_with_miss_chance(target_zone, src)
// Certain statuses make it harder to score a hit. These are the same as gun accuracy, however melee doesn't use multiples of 15.
var/accuracy_penalty = 0
if(user.eye_blind)
accuracy_penalty += 75
if(user.eye_blurry)
accuracy_penalty += 30
if(user.confused)
accuracy_penalty += 45
var/hit_zone = get_zone_with_miss_chance(target_zone, src, accuracy_penalty)
if(!hit_zone)
visible_message("<span class='danger'>\The [user] misses [src] with \the [I]!</span>")
@@ -10,8 +10,11 @@
if(embedded_flag)
handle_embedded_objects() //Moving with objects stuck in you can cause bad times.
if(force_max_speed)
return -3 // Returning -1 will actually result in a slowdown for Teshari.
if(CE_SPEEDBOOST in chem_effects)
return -1
return -3
var/health_deficiency = (maxHealth - health)
if(health_deficiency >= 40) tally += (health_deficiency / 25)
@@ -32,6 +35,11 @@
for(var/obj/item/I in list(r_hand, l_hand) )
tally += max(I.slowdown, 0)
// Dragging heavy objects will also slow you down, similar to above.
if(pulling && istype(pulling, /obj/item))
var/obj/item/pulled = pulling
tally += max(pulled.slowdown, 0)
if(istype(buckled, /obj/structure/bed/chair/wheelchair))
for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM))
var/obj/item/organ/external/E = get_organ(organ_name)
+75 -54
View File
@@ -4,9 +4,9 @@
#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it.
#define HUMAN_CRIT_MAX_OXYLOSS ( 2.0 / 6) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 50HP to get through, so (1/6)*last_tick_duration per second. Breaths however only happen every 4 ticks. last_tick_duration = ~2.0 on average
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point
#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point
#define HEAT_DAMAGE_LEVEL_1 5 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 10 //Amount of damage applied when your body temperature passes the 400K point
#define HEAT_DAMAGE_LEVEL_3 20 //Amount of damage applied when your body temperature passes the 1000K point
#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point
#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point
@@ -327,6 +327,11 @@
if(status_flags & GODMODE)
return
if(does_not_breathe)
failed_last_breath = 0
adjustOxyLoss(-5)
return
if(!breath || (breath.total_moles == 0) || suiciding)
failed_last_breath = 1
if(suiciding)
@@ -1021,9 +1026,7 @@
if(!client)
return 0
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
client.images.Remove(hud)
..()
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg, global_hud.thermal, global_hud.meson, global_hud.science, global_hud.whitense)
@@ -1031,37 +1034,38 @@
var/obj/machinery/camera/cam = client.eye
client.screen |= cam.client_huds
if(stat == UNCONSCIOUS && health <= 0)
//Critical damage passage overlay
var/severity = 0
switch(health)
if(-20 to -10) severity = 1
if(-30 to -20) severity = 2
if(-40 to -30) severity = 3
if(-50 to -40) severity = 4
if(-60 to -50) severity = 5
if(-70 to -60) severity = 6
if(-80 to -70) severity = 7
if(-90 to -80) severity = 8
if(-95 to -90) severity = 9
if(-INFINITY to -95) severity = 10
overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity)
else
clear_fullscreen("crit")
//Oxygen damage overlay
if(oxyloss)
if(stat != DEAD)
if(stat == UNCONSCIOUS && health <= 0)
//Critical damage passage overlay
var/severity = 0
switch(oxyloss)
if(10 to 20) severity = 1
if(20 to 25) severity = 2
if(25 to 30) severity = 3
if(30 to 35) severity = 4
if(35 to 40) severity = 5
if(40 to 45) severity = 6
if(45 to INFINITY) severity = 7
overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity)
switch(health)
if(-20 to -10) severity = 1
if(-30 to -20) severity = 2
if(-40 to -30) severity = 3
if(-50 to -40) severity = 4
if(-60 to -50) severity = 5
if(-70 to -60) severity = 6
if(-80 to -70) severity = 7
if(-90 to -80) severity = 8
if(-95 to -90) severity = 9
if(-INFINITY to -95) severity = 10
overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity)
else
clear_fullscreen("oxy")
clear_fullscreen("crit")
//Oxygen damage overlay
if(oxyloss)
var/severity = 0
switch(oxyloss)
if(10 to 20) severity = 1
if(20 to 25) severity = 2
if(25 to 30) severity = 3
if(30 to 35) severity = 4
if(35 to 40) severity = 5
if(40 to 45) severity = 6
if(45 to INFINITY) severity = 7
overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity)
else
clear_fullscreen("oxy")
//Fire and Brute damage overlay (BSSR)
var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp
@@ -1137,19 +1141,37 @@
if (analgesic > 100)
healths.icon_state = "health_numb"
else
switch(hal_screwyhud)
if(1) healths.icon_state = "health6"
if(2) healths.icon_state = "health7"
else
//switch(health - halloss)
switch(100 - (!can_feel_pain() ? 0 : traumatic_shock))
if(100 to INFINITY) healths.icon_state = "health0"
if(80 to 100) healths.icon_state = "health1"
if(60 to 80) healths.icon_state = "health2"
if(40 to 60) healths.icon_state = "health3"
if(20 to 40) healths.icon_state = "health4"
if(0 to 20) healths.icon_state = "health5"
else healths.icon_state = "health6"
// Generate a by-limb health display.
healths.icon_state = "blank"
healths.overlays = null
var/no_damage = 1
var/trauma_val = 0 // Used in calculating softcrit/hardcrit indicators.
if(!(species.flags & NO_PAIN))
trauma_val = max(traumatic_shock,halloss)/species.total_health
var/limb_trauma_val = trauma_val*0.3
// Collect and apply the images all at once to avoid appearance churn.
var/list/health_images = list()
for(var/obj/item/organ/external/E in organs)
if(no_damage && (E.brute_dam || E.burn_dam))
no_damage = 0
health_images += E.get_damage_hud_image(limb_trauma_val)
// Apply a fire overlay if we're burning.
if(on_fire)
health_images += image('icons/mob/screen1_health.dmi',"burning")
// Show a general pain/crit indicator if needed.
if(trauma_val)
if(!(species.flags & NO_PAIN))
if(trauma_val > 0.7)
health_images += image('icons/mob/screen1_health.dmi',"softcrit")
if(trauma_val >= 1)
health_images += image('icons/mob/screen1_health.dmi',"hardcrit")
else if(no_damage)
health_images += image('icons/mob/screen1_health.dmi',"fullhealth")
healths.overlays += health_images
if(nutrition_icon)
switch(nutrition)
@@ -1166,10 +1188,10 @@
// if(resting || lying || sleeping) rest.icon_state = "rest1"
// else rest.icon_state = "rest0"
if(toxin)
if(hal_screwyhud == 4 || phoron_alert) toxin.icon_state = "tox1"
if(hal_screwyhud == 4 || (phoron_alert && !does_not_breathe)) toxin.icon_state = "tox1"
else toxin.icon_state = "tox0"
if(oxygen)
if(hal_screwyhud == 3 || oxygen_alert) oxygen.icon_state = "oxy1"
if(hal_screwyhud == 3 || (oxygen_alert && !does_not_breathe)) oxygen.icon_state = "oxy1"
else oxygen.icon_state = "oxy0"
if(fire)
if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat.
@@ -1307,7 +1329,7 @@
// Puke if toxloss is too high
if(!stat)
if (getToxLoss() >= 45 && nutrition > 20)
if (getToxLoss() >= 45)
spawn vomit()
//0.1% chance of playing a scary sound to someone who's in complete darkness
@@ -1495,10 +1517,9 @@
if (BITTEST(hud_updateflag, HEALTH_HUD))
var/image/holder = hud_list[HEALTH_HUD]
if(stat == DEAD)
holder.icon_state = "hudhealth-100" // X_X
holder.icon_state = "-100" // X_X
else
var/percentage_health = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100)
holder.icon_state = "hud[percentage_health]"
holder.icon_state = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100)
hud_list[HEALTH_HUD] = holder
if (BITTEST(hud_updateflag, LIFE_HUD))
@@ -108,6 +108,7 @@
// HUD data vars.
var/datum/hud_data/hud
var/hud_type
var/health_hud_intensity = 1 // This modifies how intensely the health hud is colored.
// Body/form vars.
var/list/inherent_verbs // Species-specific verbs.
@@ -14,6 +14,7 @@
mob_size = MOB_SMALL
has_fine_manipulation = 0
show_ssd = null
health_hud_intensity = 2
gibbed_anim = "gibbed-m"
dusted_anim = "dust-m"
@@ -23,6 +23,7 @@ var/datum/species/shapeshifter/promethean/prometheans
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED //VOREStation Edit
health_hud_intensity = 2
breath_type = null
poison_type = null
@@ -11,6 +11,7 @@
name_language = "Schechi"
min_age = 12
max_age = 45
health_hud_intensity = 3
blood_color = "#D514F7"
flesh_color = "#5F7BB0"
@@ -57,7 +58,7 @@
)
has_limbs = list(
BP_CHEST = list("path" = /obj/item/organ/external/chest),
BP_TORSO = list("path" = /obj/item/organ/external/chest),
BP_GROIN = list("path" = /obj/item/organ/external/groin),
BP_HEAD = list("path" = /obj/item/organ/external/head/seromi),
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
@@ -84,7 +85,7 @@
/datum/unarmed_attack/claws,
/datum/unarmed_attack/stomp/weak
)
/*
var/shock_cap = 30
var/hallucination_cap = 25
@@ -111,7 +112,7 @@
H.shock_stage += 1
if(H.shock_stage >= shock_cap && H.hallucination < hallucination_cap)
H.hallucination += 2.5
*/
/datum/species/teshari/get_vision_flags(var/mob/living/carbon/human/H)
if(!(H.sdisabilities & DEAF) && !H.ear_deaf)
return SEE_SELF|SEE_MOBS
@@ -13,6 +13,7 @@
name_language = null // Use the first-name last-name generator rather than a language scrambler
min_age = 17
max_age = 110
health_hud_intensity = 1.5
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
@@ -37,6 +38,7 @@
num_alternate_languages = 2
secondary_langs = list("Sinta'unathi")
name_language = "Sinta'unathi"
health_hud_intensity = 2.5
min_age = 18
max_age = 60
@@ -97,6 +99,7 @@
num_alternate_languages = 2
secondary_langs = list("Siik'tajr")
name_language = "Siik'tajr"
health_hud_intensity = 2.5
min_age = 17
max_age = 80
@@ -107,6 +110,11 @@
of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
using unique inflections their mouths form."
/* VOREStation Removal
blurb = "The Tajaran are a mammalian species resembling roughly felines, hailing from Meralar in the Rarkajar system. \
While reaching to the stars independently from outside influences, the humans engaged them in peaceful trade contact \
and have accelerated the fledgling culture into the interstellar age. Their history is full of war and highly fractious \
governments, something that permeates even to today's times. They prefer colder, tundra-like climates, much like their \
home worlds and speak a variety of languages, especially Siik and Akhani."
cold_level_1 = 200 //Default 260
cold_level_2 = 140 //Default 200
cold_level_3 = 80 //Default 120
@@ -152,6 +160,7 @@
num_alternate_languages = 2
secondary_langs = list("Skrellian", "Schechi")
name_language = "Skrellian"
health_hud_intensity = 2
min_age = 19
max_age = 80
@@ -194,6 +203,7 @@
show_ssd = "completely quiescent"
num_alternate_languages = 1
name_language = "Rootspeak"
health_hud_intensity = 2.5
min_age = 1
max_age = 300
+3 -6
View File
@@ -18,9 +18,6 @@
ExtinguishMob()
return TRUE
if(..())
return TRUE
if(handcuffed)
spawn() escape_handcuffs()
else if(legcuffed)
@@ -50,7 +47,7 @@
displaytime = breakouttime / 600 //Minutes
var/mob/living/carbon/human/H = src
if(istype(H) && H.gloves && istype(H.gloves,/obj/item/clothing/gloves/rig))
if(istype(H) && H.gloves && istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig))
breakouttime /= 2
displaytime /= 2
@@ -59,8 +56,8 @@
"<span class='warning'>You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)</span>"
)
if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED))
if(!handcuffed || buckled)
if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN))
if(!handcuffed)
return
visible_message(
"<span class='danger'>\The [src] manages to remove \the [handcuffed]!</span>",
+25 -28
View File
@@ -829,38 +829,35 @@ default behaviour is:
return
if(!lastpuke)
lastpuke = 1
if (nutrition <= 100)
src << "<span class='danger'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
src.Weaken(10)
src.adjustToxLoss(3)
return
lastpuke = 1
src << "<span class='warning'>You feel nauseous...</span>"
if(!skip_wait)
sleep(150) //15 seconds until second warning
src << "<span class='warning'>You feel like you are about to throw up!</span>"
sleep(100) //and you have 10 more for mad dash to the bucket
Stun(5)
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
var/turf/simulated/T = get_turf(src)
if(istype(T))
if(blood_vomit)
T.add_blood_floor(src)
else
T.add_vomit_floor(src, 1)
if(blood_vomit)
if(getBruteLoss() < 50)
adjustBruteLoss(3)
else
nutrition -= 40
adjustToxLoss(-3)
src << "<span class='warning'>You feel nauseous...</span>"
if(!skip_wait)
sleep(150) //15 seconds until second warning
src << "<span class='warning'>You feel like you are about to throw up!</span>"
sleep(100) //and you have 10 more for mad dash to the bucket
Stun(5)
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
var/turf/simulated/T = get_turf(src)
if(istype(T))
if(blood_vomit)
T.add_blood_floor(src)
else
T.add_vomit_floor(src, 1)
if(blood_vomit)
if(getBruteLoss() < 50)
adjustBruteLoss(3)
else
nutrition -= 40
adjustToxLoss(-3)
sleep(350)
lastpuke = 0
+4 -1
View File
@@ -162,7 +162,7 @@
//returns 0 if the effects failed to apply for some reason, 1 otherwise.
/mob/living/proc/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/blocked, var/hit_zone)
if(!effective_force || blocked >= 100)
if(!effective_force || blocked >= 100)
return 0
//Hulk modifier
@@ -300,6 +300,9 @@
if(fire_stacks < 0)
fire_stacks = min(0, ++fire_stacks) //If we've doused ourselves in water to avoid fire, dry off slowly
if(fire_stacks > 0)
fire_stacks = max(0, (fire_stacks-0.1)) //Should slowly burn out
if(!on_fire)
return 1
else if(fire_stacks <= 0)
@@ -44,3 +44,6 @@
var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
var/lastpuke = 0
var/evasion = 0 // Makes attacks harder to land. Each number equals 15% more likely to miss. Negative numbers increase hit chance.
var/force_max_speed = 0 // If 1, the mob runs extremely fast and cannot be slowed.
+53 -10
View File
@@ -173,15 +173,15 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
spawn(5)
new /obj/machinery/ai_powersupply(src)
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[LIFE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[ID_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
ai_list += src
..()
@@ -565,7 +565,21 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
var/icon_list[] = list(
"default",
"floating face",
"carp"
"carp",
"ian",
"runtime",
"poly",
"pun pun",
"male human",
"female human",
"male unathi",
"female unathi",
"male tajara",
"female tajara",
"male tesharii",
"female tesharii",
"male skrell",
"female skrell"
)
input = input("Please select a hologram:") as null|anything in icon_list
if(input)
@@ -577,6 +591,35 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo2"))
if("carp")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo4"))
if("ian")
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"corgi"))
if("runtime")
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"cat"))
if("poly")
holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"parrot_fly"))
if("pun pun")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"punpun"))
if("male human")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holohumm"))
if("female human")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holohumf"))
if("male unathi")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holounam"))
if("female unathi")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holounaf"))
if("male tajara")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotajm"))
if("female tajara")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotajf"))
if("male tesharii")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotesm"))
if("female tesharii")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotesf"))
if("male skrell")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holoskrm"))
if("female skrell")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holoskrf"))
return
//Toggles the luminosity and applies it by re-entereing the camera.
+1 -12
View File
@@ -29,15 +29,4 @@ var/global/list/empty_playable_ai_cores = list()
global_announcer.autosay("[src] has been moved to intelligence storage.", "Artificial Intelligence Oversight")
//Handle job slot/tater cleanup.
var/job = mind.assigned_role
job_master.FreeRole(job)
if(mind.objectives.len)
qdel(mind.objectives)
mind.special_role = null
clear_antag_roles(mind)
ghostize(0)
qdel(src)
clear_client()
@@ -444,3 +444,18 @@
else
idaccessible = 0
src << "<span class='notice'>You block access modfications.</span>"
/mob/living/silicon/pai/verb/wipe_software()
set name = "Wipe Software"
set category = "OOC"
set desc = "Wipe your software. This is functionally equivalent to cryo or robotic storage, freeing up your job slot."
// Make sure people don't kill themselves accidentally
if(alert("WARNING: This will immediately wipe your software and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?",
"Wipe Software", "No", "No", "Yes") != "Yes")
return
close_up()
visible_message("<b>[src]</b> fades away from the screen, the pAI device goes silent.")
card.removePersonality()
clear_client()
@@ -16,7 +16,18 @@
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
var/mode = 1;
/obj/item/device/robotanalyzer/do_surgery(mob/living/M, mob/living/user)
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
return ..()
do_scan(M, user) //default surgery behaviour is just to scan as usual
return 1
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
do_scan(M, user)
/obj/item/device/robotanalyzer/proc/do_scan(mob/living/M as mob, mob/living/user as mob)
if((CLUMSY in user.mutations) && prob(50))
user << text("\red You try to analyze the floor's vitals!")
for(var/mob/O in viewers(M, null))
@@ -50,6 +50,15 @@
/obj/item/weapon/newspaper
)
/obj/item/weapon/gripper/chemistry
name = "chemistry gripper"
desc = "A simple grasping tool for chemical work."
can_hold = list(
/obj/item/weapon/reagent_containers/glass,
/obj/item/weapon/storage/pill_bottle
)
/obj/item/weapon/gripper/research //A general usage gripper, used for toxins/robotics/xenobio/etc
name = "scientific gripper"
icon_state = "gripper-sci"
@@ -92,6 +101,22 @@
/obj/item/organ
)
/obj/item/weapon/gripper/no_use/organ/Entered(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 1
for(var/obj/item/organ/organ in O)
organ.preserved = 1
..()
/obj/item/weapon/gripper/no_use/organ/Exited(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
O.preserved = 0
for(var/obj/item/organ/organ in O)
organ.preserved = 0
..()
/obj/item/weapon/gripper/no_use/organ/robotics
name = "external organ gripper"
icon_state = "gripper-flesh"
@@ -147,15 +147,15 @@
add_robot_verbs()
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
hud_list[LIFE_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealth100")
hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealth100")
hud_list[ID_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
/mob/living/silicon/robot/proc/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -267,6 +267,10 @@
name = "paper dispenser"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "paper_bin1"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
item_state = "sheet-metal"
/obj/item/weapon/form_printer/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
@@ -247,6 +247,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/gripper/chemistry(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
+16 -1
View File
@@ -364,4 +364,19 @@
/mob/living/silicon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash)
if(affect_silicon)
return ..()
return ..()
/mob/living/silicon/proc/clear_client()
//Handle job slot/tater cleanup.
var/job = mind.assigned_role
job_master.FreeRole(job)
if(mind.objectives.len)
qdel(mind.objectives)
mind.special_role = null
clear_antag_roles(mind)
ghostize(0)
qdel(src)
@@ -126,6 +126,7 @@
// redirect the projectile
P.redirect(new_x, new_y, curloc, src)
P.reflected = 1
return -1 // complete projectile permutation
@@ -131,7 +131,7 @@
/mob/living/simple_animal/cat/fluff/handle_movement_target()
if (friend)
var/follow_dist = 5
var/follow_dist = 4
if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) //danger
follow_dist = 1
else if (friend.stat || friend.health <= 50) //danger or just sleeping
@@ -181,24 +181,28 @@
var/verb = pick("meows", "mews", "mrowls")
audible_emote("[verb] anxiously.")
/mob/living/simple_animal/cat/fluff/verb/friend()
/mob/living/simple_animal/cat/fluff/verb/become_friends()
set name = "Become Friends"
set category = "IC"
set src in view(1)
if(friend && usr == friend)
if(!friend)
var/mob/living/carbon/human/H = usr
if(istype(H) && (!befriend_job || H.job == befriend_job))
friend = usr
. = 1
else if(usr == friend)
. = 1 //already friends, but show success anyways
if(.)
set_dir(get_dir(src, friend))
say("Meow!")
return
if (!(ishuman(usr) && befriend_job && usr.job == befriend_job))
visible_emote(pick("nuzzles [friend].",
"brushes against [friend].",
"rubs against [friend].",
"purrs."))
else
usr << "<span class='notice'>[src] ignores you.</span>"
return
friend = usr
set_dir(get_dir(src, friend))
say("Meow!")
return
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/cat/fluff/Runtime
@@ -209,7 +213,6 @@
item_state = "cat"
icon_living = "cat"
icon_dead = "cat_dead"
befriend_job = "Chief Medical Officer"
/mob/living/simple_animal/cat/kitten
name = "kitten"
@@ -195,3 +195,23 @@
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
set_dir(i)
sleep(1)
//Technically this should be like, its own file or something or a subset of dog but whatever. Not a coder.
/mob/living/simple_animal/corgi/tamaskan
name = "\improper tamaskan"
real_name = "tamaskan"
desc = "It's a tamaskan."
icon_state = "tamaskan"
icon_living = "tamaskan"
icon_dead = "tamaskan_dead"
/mob/living/simple_animal/corgi/tamaskan/spice
name = "Spice"
real_name = "Spice" //Intended to hold the name without altering it.
gender = FEMALE
desc = "It's a tamaskan, the name Spice can be found on its collar."
var/turns_since_scan = 0
var/obj/movement_target
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
@@ -155,7 +155,7 @@
eject_brain()
death()
/mob/living/simple_animal/spiderbot/proc/update_icon()
/mob/living/simple_animal/spiderbot/update_icon()
if(mmi)
if(positronic)
icon_state = "spiderbot-chassis-posi"
@@ -81,6 +81,7 @@
var/destroy_surroundings = 0
var/shuttletarget = null
var/enroute = 0
var/ai_inactive = 0 // Set to 1 to turn off most AI actions in Life()
var/list/resistances = list(
HALLOSS = 0,
@@ -136,7 +137,7 @@
handle_supernatural()
//Movement
if(!client && !stop_automated_movement && wander && !anchored)
if(!client && !stop_automated_movement && wander && !anchored && !ai_inactive)
if(isturf(src.loc) && !resting && !buckled && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc.
turns_since_move++
if(turns_since_move >= turns_per_move)
@@ -236,7 +237,7 @@
adjustBruteLoss(unsuitable_atoms_damage)
//Hostility
if(!stat && !client && hostile)
if(!stat && !client && hostile && !ai_inactive)
switch(stance)
if(STANCE_IDLE)
target_mob = FindTarget()
@@ -123,7 +123,7 @@
return
proc/update_icon() //only for the sake of consistency with the other update icon procs
update_icon() //only for the sake of consistency with the other update icon procs
if(stat == CONSCIOUS || stat == UNCONSCIOUS)
if(previous) //midsection
icon_state = "spaceworm[get_dir(src,previous) | get_dir(src,next)]" //see 3 lines below
+3
View File
@@ -31,9 +31,12 @@
var/obj/screen/gun/run/gun_run_icon = null
var/obj/screen/gun/mode/gun_setting_icon = null
var/obj/screen/ling/chems/ling_chem_display = null
var/obj/screen/wizard/energy/wiz_energy_display = null
var/obj/screen/wizard/instability/wiz_instability_display = null
//spells hud icons - this interacts with add_spell and remove_spell
var/list/obj/screen/movable/spell_master/spell_masters = null
var/obj/screen/movable/ability_master/ability_master = null
/*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob.
A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such.
+15 -22
View File
@@ -76,7 +76,7 @@
stat("Game Mode:", "Secret")
else
if(ticker.hide_mode == 0)
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
stat("Game Mode:", "[config.mode_names[master_mode]]") // Old setting for showing the game mode
if(ticker.current_state == GAME_STATE_PREGAME)
stat("Time To Start:", "[ticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]")
@@ -172,15 +172,14 @@
usr << "<span class='danger'>The station is currently exploding. Joining would go poorly.</span>"
return
if(client.prefs.species != "Human")
if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist)
src << alert("You are currently not whitelisted to play [client.prefs.species].")
return 0
if(!is_alien_whitelisted(src, all_species[client.prefs.species]))
src << alert("You are currently not whitelisted to play [client.prefs.species].")
return 0
var/datum/species/S = all_species[client.prefs.species]
if(!(S.spawn_flags & SPECIES_CAN_JOIN))
src << alert("Your current species, [client.prefs.species], is not available for play on the station.")
return 0
var/datum/species/S = all_species[client.prefs.species]
if(!(S.spawn_flags & SPECIES_CAN_JOIN))
src << alert("Your current species, [client.prefs.species], is not available for play on the station.")
return 0
AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint)
return
@@ -410,7 +409,7 @@
if(chosen_species && use_species_name)
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
if(is_species_whitelisted(chosen_species) || has_admin_rights())
if(is_alien_whitelisted(chosen_species))
new_character = new(loc, use_species_name)
if(!new_character)
@@ -418,13 +417,6 @@
new_character.lastarea = get_area(loc)
for(var/lang in client.prefs.alternate_languages)
var/datum/language/chosen_language = all_languages[lang]
if(chosen_language)
if(!config.usealienwhitelist || !(chosen_language.flags & WHITELISTED) || is_alien_whitelisted(src, lang) || has_admin_rights() \
|| (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
if(ticker.random_players)
new_character.gender = pick(MALE, FEMALE)
client.prefs.real_name = random_name(new_character.gender)
@@ -451,6 +443,11 @@
new_character.dna.SetSEState(GLASSESBLOCK,1,0)
new_character.disabilities |= NEARSIGHTED
for(var/lang in client.prefs.alternate_languages)
var/datum/language/chosen_language = all_languages[lang]
if(chosen_language)
if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
// And uncomment this, too.
//new_character.dna.UpdateSE()
@@ -484,10 +481,6 @@
/mob/new_player/proc/has_admin_rights()
return check_rights(R_ADMIN, 0, src)
/mob/new_player/proc/is_species_whitelisted(datum/species/S)
if(!S) return 1
return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & SPECIES_IS_WHITELISTED)
/mob/new_player/get_species()
var/datum/species/chosen_species
if(client.prefs.species)
@@ -496,7 +489,7 @@
if(!chosen_species)
return "Human"
if(is_species_whitelisted(chosen_species) || has_admin_rights())
if(is_alien_whitelisted(chosen_species))
return chosen_species.name
return "Human"
@@ -194,31 +194,31 @@
b_skin = blue
/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin)
copy_to(mannequin)
if(!dress_mob)
var/update_icon = FALSE
copy_to(mannequin, TRUE)
var/datum/job/previewJob
if(equip_preview_mob)
// Determine what job is marked as 'High' priority, and dress them up as such.
if(job_civilian_low & ASSISTANT)
previewJob = job_master.GetJob("Assistant")
else
for(var/datum/job/job in job_master.occupations)
var/job_flag
switch(job.department_flag)
if(CIVILIAN)
job_flag = job_civilian_high
if(MEDSCI)
job_flag = job_medsci_high
if(ENGSEC)
job_flag = job_engsec_high
if(job.flag == job_flag)
previewJob = job
break
else
return
// Determine what job is marked as 'High' priority, and dress them up as such.
var/datum/job/previewJob
if(job_civilian_low & ASSISTANT)
previewJob = job_master.GetJob("Assistant")
else
for(var/datum/job/job in job_master.occupations)
var/job_flag
switch(job.department_flag)
if(CIVILIAN)
job_flag = job_civilian_high
if(MEDSCI)
job_flag = job_medsci_high
if(ENGSEC)
job_flag = job_engsec_high
if(job.flag == job_flag)
previewJob = job
break
if(previewJob)
mannequin.job = previewJob.title
previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title])
if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && (previewJob.type == /datum/job/ai || previewJob.type == /datum/job/cyborg)))
var/list/equipped_slots = list() //If more than one item takes the same slot only spawn the first
for(var/thing in gear)
var/datum/gear/G = gear_datums[thing]
@@ -238,9 +238,17 @@
continue
if(G.slot && !(G.slot in equipped_slots))
equipped_slots += G.slot
var/metadata = gear[G.display_name]
mannequin.equip_to_slot_or_del(G.spawn_item(mannequin, metadata), G.slot)
if(mannequin.equip_to_slot_or_del(G.spawn_item(mannequin, metadata), G.slot))
equipped_slots += G.slot
update_icon = TRUE
if((equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob)
mannequin.job = previewJob.title
previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title])
update_icon = TRUE
if(update_icon)
mannequin.update_icons()
/datum/preferences/proc/update_preview_icon()
@@ -190,6 +190,9 @@
name = "Tress Shoulder"
icon_state = "hair_tressshoulder"
spikyponytail
name = "Spiky Ponytail"
icon_state = "hair_spikyponytail"
wisp
name = "Wisp"
icon_state = "hair_wisp"
@@ -387,10 +390,6 @@
name = "Hime Cut"
icon_state = "hair_himecut"
braid
name = "Floorlength Braid"
icon_state = "bald" //Trust me, it's better this way.
mbraid
name = "Medium Braid"
icon_state = "hair_shortbraid"
@@ -721,6 +720,31 @@
icon_state = "hair_messy"
species_allowed = list("Tajara")
taj_ears_curls
name = "Tajara Curly"
icon_state = "hair_curly"
species_allowed = list("Tajara")
taj_ears_wife
name = "Tajara Housewife"
icon_state = "hair_wife"
species_allowed = list("Tajara")
taj_ears_victory
name = "Tajara Victory Curls"
icon_state = "hair_victory"
species_allowed = list("Tajara")
taj_ears_bob
name = "Tajara Bob"
icon_state = "hair_tbob"
species_allowed = list("Tajara")
taj_ears_fingercurl
name = "Tajara Finger Curls"
icon_state = "hair_fingerwave"
species_allowed = list("Tajara")
/datum/sprite_accessory/facial_hair
taj_sideburns