Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-03-15

# Conflicts:
#	README.md
#	code/__defines/mobs.dm
#	code/__defines/subsystems.dm
#	code/_helpers/global_lists.dm
#	code/controllers/subsystems/garbage.dm
#	code/controllers/subsystems/overlays.dm
#	code/datums/datacore.dm
#	code/datums/supplypacks/munitions.dm
#	code/game/machinery/suit_storage_unit.dm
#	code/game/objects/items/devices/communicator/UI.dm
#	code/game/objects/items/weapons/id cards/station_ids.dm
#	code/game/objects/random/random.dm
#	code/game/turfs/simulated/floor.dm
#	code/game/turfs/simulated/floor_icon.dm
#	code/modules/awaymissions/gateway.dm
#	code/modules/client/preferences.dm
#	code/modules/ext_scripts/python.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/life.dm
#	code/modules/mob/living/carbon/human/species/station/station.dm
#	code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm
#	code/modules/mob/living/carbon/human/update_icons.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/living/simple_animal/animals/bear.dm
#	code/modules/mob/mob_helpers.dm
#	code/modules/mob/new_player/new_player.dm
#	code/modules/mob/new_player/preferences_setup.dm
#	code/modules/mob/new_player/sprite_accessories.dm
#	code/modules/organs/organ_external.dm
#	code/modules/organs/organ_icon.dm
#	code/modules/organs/robolimbs.dm
#	code/modules/reagents/reagent_containers/glass.dm
#	code/modules/reagents/reagent_containers/syringes.dm
#	html/changelogs/.all_changelog.yml
#	maps/southern_cross/southern_cross-1.dmm
#	maps/southern_cross/southern_cross-3.dmm
#	maps/southern_cross/southern_cross-4.dmm
#	maps/southern_cross/southern_cross-6.dmm
#	vorestation.dme
This commit is contained in:
Leshana
2018-03-15 22:41:14 -04:00
242 changed files with 21216 additions and 547364 deletions
-7
View File
@@ -1001,11 +1001,6 @@
//strip their stuff and stick it in the crate
for(var/obj/item/I in M)
M.drop_from_inventory(I, locker)
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_icons_layers() //Cheaper
else
M.update_icons()
//so they black out before warping
M.Paralyse(5)
@@ -1188,10 +1183,8 @@
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
var/block=text2num(href_list["block"])
//testing("togmutate([href_list["block"]] -> [block])")
usr.client.cmd_admin_toggle_block(H,block)
show_player_panel(H)
//H.regenerate_icons()
else if(href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"])
-1
View File
@@ -37,7 +37,6 @@
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
H.name = H.get_visible_name()
// usr.regenerate_icons() //So the name is updated properly
usr.loc = O.loc // Appear where the object you were controlling is -- TLE
usr.client.eye = usr
+1 -1
View File
@@ -23,7 +23,7 @@
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
var/species = "Human"
var/species = SPECIES_HUMAN
delete_me = TRUE
/obj/effect/landmark/corpse/initialize()
+3 -1
View File
@@ -1,6 +1,6 @@
/obj/machinery/gateway
name = "gateway"
desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities."
desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities." //VOREStation Edit
icon = 'icons/obj/machines/gateway.dmi'
icon_state = "off"
density = 1
@@ -252,10 +252,12 @@ obj/machinery/gateway/centerstation/process()
user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return
else
// VOREStation Add
stationgate = locate(/obj/machinery/gateway/centerstation)
if(!stationgate)
user << "<span class='notice'>Error: Recalibration failed. No destination found... That can't be good.</span>"
return
// VOREStation Add End
else
user << "<font color='blue'><b>Recalibration successful!</b>:</font><font color='black'> This gate's systems have been fine tuned. Travel to this gate will now be on target.</font>"
calibrated = 1
+15 -2
View File
@@ -104,8 +104,8 @@
// Note that the current station being used will be pruned from this list upon being instantiated
destination_names = list(
"NSS Exodus in Nyx",
//"NCS Northern Star in Vir",
"NLS Southern Cross in Vir",
"NCS Northern Star in Vir",
//"NLS Southern Cross in Vir",
"NAS Vir Central Command",
"a dockyard orbiting Sif",
"an asteroid orbiting Kara",
@@ -235,6 +235,19 @@
motto = ""
ship_prefixes = list("WTV" = "freight")
ship_names = list(
"Comet",
"Aurora",
"Supernova",
"Nebula",
"Galaxy",
"Starburst",
"Constellation",
"Pulsar",
"Quark",
"Void",
"Asteroid"
)
destination_names = list()
/datum/lore/organization/tsc/bishop
@@ -152,7 +152,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
if(pref.species)
S = all_species[pref.species]
else
S = all_species["Human"]
S = all_species[SPECIES_HUMAN]
var/list/possible_genders = S.genders
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
return possible_genders
@@ -69,7 +69,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in playable_species))
pref.species = "Human"
pref.species = SPECIES_HUMAN
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
@@ -591,7 +591,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.rlimb_data[second_limb] = null
if("Prosthesis")
var/tmp_species = pref.species ? pref.species : "Human"
var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN
var/list/usable_manufacturers = list()
for(var/company in chargen_robolimbs)
var/datum/robolimb/M = chargen_robolimbs[company]
@@ -734,7 +734,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
if(!pref.species_preview || !(pref.species_preview in all_species))
pref.species_preview = "Human"
pref.species_preview = SPECIES_HUMAN
var/datum/species/current_species = all_species[pref.species_preview]
var/dat = "<body>"
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"
@@ -1,13 +1,13 @@
// Alien clothing.
/datum/gear/suit/zhan_furs
display_name = "Zhan-Khazan furs (Tajara)"
display_name = "Zhan-Khazan furs (Tajaran)"
path = /obj/item/clothing/suit/tajaran/furs
sort_category = "Xenowear"
/datum/gear/head/zhan_scarf
display_name = "Zhan headscarf"
path = /obj/item/clothing/head/tajaran/scarf
whitelisted = "Tajara"
whitelisted = SPECIES_TAJ
/datum/gear/suit/unathi_mantle
display_name = "hide mantle (Unathi)"
@@ -19,7 +19,7 @@
display_name = "headtail chain selection (Skrell)"
path = /obj/item/clothing/ears/skrell/chain
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/chains/New()
..()
@@ -33,7 +33,7 @@
display_name = "headtail band selection (Skrell)"
path = /obj/item/clothing/ears/skrell/band
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/bands/New()
..()
@@ -47,7 +47,7 @@
display_name = "short headtail cloth (Skrell)"
path = /obj/item/clothing/ears/skrell/cloth_male/black
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/cloth/short/New()
..()
@@ -61,7 +61,7 @@
display_name = "long headtail cloth (Skrell)"
path = /obj/item/clothing/ears/skrell/cloth_female/black
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/cloth/long/New()
..()
@@ -75,7 +75,7 @@
display_name = "Colored bands (Skrell)"
path = /obj/item/clothing/ears/skrell/colored/band
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/colored/band/New()
..()
@@ -85,7 +85,7 @@
display_name = "Colored chain (Skrell)"
path = /obj/item/clothing/ears/skrell/colored/chain
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/colored/chain/New()
..()
@@ -94,7 +94,7 @@
/datum/gear/uniform/smock
display_name = "smock selection (Teshari)"
path = /obj/item/clothing/under/seromi/smock
whitelisted = "Teshari"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/smock/New()
@@ -108,7 +108,7 @@
/datum/gear/uniform/undercoat
display_name = "undercoat selection (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat
whitelisted = "Teshari"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/undercoat/New()
@@ -122,7 +122,7 @@
/datum/gear/suit/cloak
display_name = "cloak selection (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak
whitelisted = "Teshari"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/cloak/New()
@@ -226,7 +226,7 @@
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/tajaraphobe
name = "Tajara-phobic"
name = "Tajaran-phobic"
desc = "Boilerplate racism for cats goes here."
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
+5 -6
View File
@@ -47,7 +47,7 @@ datum/preferences
var/r_eyes = 0 //Eye color
var/g_eyes = 0 //Eye color
var/b_eyes = 0 //Eye color
var/species = "Human" //Species datum to use.
var/species = SPECIES_HUMAN //Species datum to use.
var/species_preview //Used for the species selection window.
var/list/alternate_languages = list() //Secondary language(s)
var/list/language_prefixes = list() //Kanguage prefix keys
@@ -293,11 +293,10 @@ datum/preferences
if(icon_updates)
character.force_update_limbs()
character.update_mutations(0)
character.update_underwear(0)
character.update_hair(0)
character.update_eyes(0)
character.update_icons_all()
character.update_icons_body()
character.update_mutations()
character.update_underwear()
character.update_hair()
/datum/preferences/proc/open_load_dialog(mob/user)
var/dat = "<body>"
+46 -42
View File
@@ -22,6 +22,7 @@
*/
var/list/sprite_sheets_refit = null
var/ear_protection = 0
var/blood_sprite_state
//Updates the icons of the mob wearing the clothing item, if any.
/obj/item/clothing/proc/update_clothing_icon()
@@ -83,16 +84,14 @@
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
species_restricted = list("Human", "Skrell", "Promethean") //skrell/humans can wear each other's suits
if(SPECIES_HUMAN, SPECIES_SKRELL) //humanoid bodytypes
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell/humans can wear each other's suits
else
species_restricted = list(target_species)
//Set icon
if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
icon_override = sprite_sheets_refit[target_species]
else
icon_override = initial(icon_override)
sprite_sheets[target_species] = sprite_sheets_refit[target_species]
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species]
@@ -105,17 +104,15 @@
//Set species_restricted list
switch(target_species)
if("Skrell")
species_restricted = list("Human", "Skrell", "Promethean") //skrell helmets fit humans too
if(SPECIES_SKRELL)
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell helmets fit humans too
else
species_restricted = list(target_species)
//Set icon
if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
icon_override = sprite_sheets_refit[target_species]
else
icon_override = initial(icon_override)
sprite_sheets[target_species] = sprite_sheets_refit[target_species]
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species]
@@ -130,7 +127,7 @@
throwforce = 2
slot_flags = SLOT_EARS
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/ears.dmi')
SPECIES_TESHARI = 'icons/mob/species/seromi/ears.dmi')
/obj/item/clothing/ears/attack_hand(mob/user as mob)
if (!user) return
@@ -197,6 +194,7 @@
w_class = ITEMSIZE_SMALL
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.9
blood_sprite_state = "bloodyhands"
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
@@ -210,8 +208,8 @@
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/gloves.dmi',
"Vox" = 'icons/mob/species/vox/gloves.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/gloves.dmi',
SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
)
/obj/item/clothing/gloves/update_clothing_icon()
@@ -244,8 +242,8 @@
name = "modified [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
species_restricted -= "Tajara"
species_restricted -= SPECIES_UNATHI
species_restricted -= SPECIES_TAJ
return
*/
@@ -300,7 +298,7 @@
w_class = ITEMSIZE_TINY
icon = 'icons/obj/clothing/rings.dmi'
gender = NEUTER
species_restricted = list("exclude", "Diona")
species_restricted = list("exclude", SPECIES_DIONA)
siemens_coefficient = 1
glove_level = 1
fingerprint_chance = 100
@@ -318,15 +316,17 @@
body_parts_covered = HEAD
slot_flags = SLOT_HEAD
w_class = ITEMSIZE_SMALL
blood_sprite_state = "helmetblood"
var/light_overlay = "helmet_light"
var/light_applied
var/brightness_on
var/on = 0
var/image/helmet_light
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/attack_self(mob/user)
@@ -386,29 +386,29 @@
return 1
/obj/item/clothing/head/update_icon(var/mob/user)
overlays.Cut()
var/mob/living/carbon/human/H
if(istype(user,/mob/living/carbon/human))
if(ishuman(user))
H = user
if(on)
// Generate object icon.
if(!light_overlay_cache["[light_overlay]_icon"])
light_overlay_cache["[light_overlay]_icon"] = image("icon" = 'icons/obj/light_overlays.dmi', "icon_state" = "[light_overlay]")
overlays |= light_overlay_cache["[light_overlay]_icon"]
light_overlay_cache["[light_overlay]_icon"] = image(icon = 'icons/obj/light_overlays.dmi', icon_state = "[light_overlay]")
helmet_light = light_overlay_cache["[light_overlay]_icon"]
add_overlay(helmet_light)
// Generate and cache the on-mob icon, which is used in update_inv_head().
var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype(H)]" : ""]"
var/body_type = (H && H.species.get_bodytype(H))
var/cache_key = "[light_overlay][body_type && sprite_sheets[body_type] ? "_[body_type]" : ""]"
if(!light_overlay_cache[cache_key])
var/use_icon = 'icons/mob/light_overlays.dmi'
if(H && sprite_sheets[H.species.get_bodytype(H)])
use_icon = sprite_sheets[H.species.get_bodytype(H)]
light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]")
var/use_icon = LAZYACCESS(sprite_sheets,body_type) || 'icons/mob/light_overlays.dmi'
light_overlay_cache[cache_key] = image(icon = use_icon, icon_state = "[light_overlay]")
if(H)
H.update_inv_head()
else if(helmet_light)
cut_overlay(helmet_light)
helmet_light = null
user.update_inv_head() //Will redraw the helmet with the light on the mob
/obj/item/clothing/head/update_clothing_icon()
if (ismob(src.loc))
@@ -427,11 +427,12 @@
body_parts_covered = HEAD
slot_flags = SLOT_MASK
body_parts_covered = FACE|EYES
blood_sprite_state = "maskblood"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/masks.dmi',
"Vox" = 'icons/mob/species/vox/masks.dmi',
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/masks.dmi',
SPECIES_VOX = 'icons/mob/species/vox/masks.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/mask.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/mask.dmi'
)
var/voicechange = 0
@@ -460,6 +461,7 @@
siemens_coefficient = 0.9
body_parts_covered = FEET
slot_flags = SLOT_FEET
blood_sprite_state = "shoeblood"
var/can_hold_knife = 0
var/obj/item/holding
@@ -475,10 +477,10 @@
slowdown = SHOES_SLOWDOWN
force = 2
var/overshoes = 0
species_restricted = list("exclude","Teshari", "Vox")
species_restricted = list("exclude",SPECIES_TESHARI, SPECIES_VOX)
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/shoes.dmi',
"Vox" = 'icons/mob/species/vox/shoes.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/shoes.dmi',
SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
)
/obj/item/clothing/shoes/proc/draw_knife()
@@ -581,9 +583,10 @@
w_class = ITEMSIZE_NORMAL
preserve_item = 1
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi',
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
)
valid_accessory_slots = list("over", "armband")
@@ -609,6 +612,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = ITEMSIZE_NORMAL
show_messages = 1
blood_sprite_state = "uniformblood"
var/has_sensor = 1 //For the crew computer 2 = unable to change mode
var/sensor_mode = 0
@@ -621,8 +625,8 @@
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/uniform.dmi',
"Vox" = 'icons/mob/species/vox/uniform.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/uniform.dmi',
SPECIES_VOX = 'icons/mob/species/vox/uniform.dmi'
)
//convenience var for defining the icon state for the overlay used when the clothing is worn.
+34
View File
@@ -0,0 +1,34 @@
/obj/item/clothing/apply_accessories(var/image/standing)
if(LAZYLEN(accessories))
for(var/obj/item/clothing/accessory/A in accessories)
standing.add_overlay(A.get_mob_overlay())
/obj/item/clothing/apply_blood(var/image/standing)
if(blood_DNA && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state)
bloodsies.color = blood_color
standing.add_overlay(bloodsies)
//UNIFORM: Always appends "_s" to iconstate, stupidly.
/obj/item/clothing/under/get_worn_icon_state(var/slot_name)
var/state2use = ..()
state2use += "_s"
return state2use
//HELMET: May have a lighting overlay
/obj/item/clothing/head/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0)
var/image/standing = ..()
if(on && slot_name == slot_head_str)
var/cache_key = "[light_overlay][LAZYACCESS(sprite_sheets,body_type) ? "_[body_type]" : ""]"
if(standing && light_overlay_cache[cache_key])
standing.add_overlay(light_overlay_cache[cache_key])
return standing
//SUIT: Blood state is slightly different
/obj/item/clothing/suit/apply_blood(var/image/standing)
if(blood_DNA && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = "[blood_overlay_type]blood")
bloodsies.color = blood_color
standing.add_overlay(bloodsies)
+1 -1
View File
@@ -46,7 +46,7 @@
icon = 'icons/obj/clothing/ears.dmi'
w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS
species_restricted = list("Skrell")
species_restricted = list(SPECIES_SKRELL)
/obj/item/clothing/ears/skrell/chain
name = "Gold headtail chains"
+2 -2
View File
@@ -10,8 +10,8 @@
desc = "an ultra rare hat. It commands a certain respect."
icon_state = "petehat"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/collectable/slime
+2 -2
View File
@@ -153,8 +153,8 @@
icon_state = "swathelm"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
)
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
+1 -1
View File
@@ -59,7 +59,7 @@
body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask.
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD
phoronproof = 1
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
filtered_gases = list("oxygen", "sleeping_agent")
/obj/item/clothing/mask/gas/syndicate
+1 -1
View File
@@ -88,7 +88,7 @@
icon_state = "boots-vox"
item_flags = PHORONGUARD
phoronproof = 1
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
action_button_name = "Toggle the magclaws"
+4 -4
View File
@@ -4,7 +4,7 @@
desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl."
armor = list(melee = 20, bullet = 20, laser = 20, energy = 50, bomb = 50, bio = 100, rad = 50)
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Skrell","Human")
species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN)
/obj/item/clothing/head/helmet/space/skrell/white
icon_state = "skrell_helmet_white"
@@ -19,7 +19,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Skrell","Human")
species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN)
/obj/item/clothing/suit/space/skrell/white
icon_state = "skrell_suit_white"
@@ -39,7 +39,7 @@
siemens_coefficient = 0.2
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
/obj/item/clothing/head/helmet/space/vox
armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50)
@@ -47,7 +47,7 @@
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT | PHORONGUARD
flags_inv = 0
phoronproof = 1
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
/obj/item/clothing/head/helmet/space/vox/pressure
name = "alien helmet"
+10 -2
View File
@@ -180,6 +180,15 @@
spark_system = null
return ..()
/obj/item/weapon/rig/get_worn_icon_file(var/body_type,var/slot_name,var/default_icon,var/inhands)
if(!inhands && slot_name == slot_back_str)
if(icon_override)
return icon_override
else if(mob_icon)
return mob_icon
return ..()
/obj/item/weapon/rig/proc/suit_is_deployed()
if(!istype(wearer) || src.loc != wearer || wearer.back != src)
return 0
@@ -331,7 +340,6 @@
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
else
piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT)
update_icon(1)
/obj/item/weapon/rig/ui_action_click()
toggle_cooling(usr)
@@ -599,7 +607,7 @@
// update_inv_wear_suit(), handle species checks here.
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)])
species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)]
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
mob_icon = icon(icon = species_icon, icon_state = "[icon_state]")
if(installed_modules.len)
for(var/obj/item/rig_module/module in installed_modules)
@@ -11,10 +11,10 @@
cold_protection = HEAD|FACE|EYES
brightness_on = 4
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
species_restricted = null
@@ -50,9 +50,9 @@
resilience = 0.2
can_breach = 1
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi'
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
)
supporting_limbs = list()
var/obj/item/weapon/material/knife/tacknife
@@ -28,14 +28,14 @@
siemens_coefficient = 0.2
/obj/item/clothing/head/helmet/space/rig/breacher
species_restricted = list("Unathi")
species_restricted = list(SPECIES_UNATHI)
force = 5
/obj/item/clothing/suit/space/rig/breacher
species_restricted = list("Unathi")
species_restricted = list(SPECIES_UNATHI)
/obj/item/clothing/shoes/magboots/rig/breacher
species_restricted = list("Unathi")
species_restricted = list(SPECIES_UNATHI)
/*
* VOX
@@ -62,27 +62,27 @@
glove_type = /obj/item/clothing/gloves/gauntlets/rig/vox
/obj/item/clothing/head/helmet/space/rig/vox
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
phoronproof = 1
/obj/item/clothing/shoes/magboots/rig/vox
name = "talons"
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/shoes.dmi'
SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
)
phoronproof = 1
/obj/item/clothing/suit/space/rig/vox
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
phoronproof = 1
/obj/item/clothing/gloves/gauntlets/rig/vox
siemens_coefficient = 0
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
)
phoronproof = 1
@@ -19,10 +19,11 @@
light_overlay = "helmet_light_dual"
camera_networks = list(NETWORK_SECURITY)
//Internal Affairs suit
/obj/item/weapon/rig/internalaffairs
name = "augmented tie"
suit_type = "augmented suit"
desc = "Prepare for paperwork."
desc = "The last suit you'll ever wear."
icon_state = "internalaffairs_rig"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -30,7 +31,13 @@
offline_slowdown = 0
offline_vision_restriction = 0
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/briefcase,/obj/item/weapon/storage/secure/briefcase)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase,
/obj/item/weapon/storage/secure/briefcase
)
req_access = list()
req_one_access = list()
@@ -55,10 +62,11 @@
helm_type = null
boot_type = null
//Mining suit
/obj/item/weapon/rig/industrial
name = "industrial suit control module"
suit_type = "industrial hardsuit"
desc = "A heavy, powerful rig used by construction crews and mining corporations."
desc = "A heavy, powerful hardsuit used by construction crews and mining corporations."
icon_state = "engineering_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50)
slowdown = 1
@@ -69,7 +77,15 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/industrial
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/bag/ore,
/obj/item/device/t_scanner,
/obj/item/weapon/pickaxe,
/obj/item/weapon/rcd
)
req_access = list()
req_one_access = list()
@@ -84,10 +100,11 @@
/obj/item/rig_module/vision/material,
/obj/item/rig_module/maneuvering_jets) //VOREStation Edit - Added maneuvering jets
//Engineering suit
/obj/item/weapon/rig/eva
name = "EVA suit control module"
suit_type = "EVA hardsuit"
desc = "A light rig for repairs and maintenance to the outside of habitats and vessels."
desc = "A light hardsuit for repairs and maintenance to the outside of habitats and vessels."
icon_state = "eva_rig"
armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100)
slowdown = 0
@@ -98,7 +115,14 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/eva
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/weapon/rcd)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/device/t_scanner,
/obj/item/weapon/rcd
)
req_access = list()
req_one_access = list()
@@ -135,7 +159,14 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/device/t_scanner,
/obj/item/weapon/rcd
)
req_access = list()
req_one_access = list()
@@ -157,6 +188,7 @@
/obj/item/rig_module/vision/meson
)
//Research Director's suit. Just add red crowbar.
/obj/item/weapon/rig/hazmat
name = "AMI control module"
@@ -170,7 +202,23 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/stack/flag,
/obj/item/weapon/storage/excavation,
/obj/item/weapon/pickaxe,
/obj/item/device/healthanalyzer,
/obj/item/device/measuring_tape,
/obj/item/device/ano_scanner,
/obj/item/device/depth_scanner,
/obj/item/device/core_sampler,
/obj/item/device/gps,
/obj/item/device/beacon_locator,
/obj/item/device/radio/beacon,
/obj/item/weapon/pickaxe/hand,
/obj/item/weapon/storage/bag/fossils)
req_access = list()
req_one_access = list()
@@ -185,6 +233,7 @@
/obj/item/rig_module/device/anomaly_scanner
)
//Paramedic suit
/obj/item/weapon/rig/medical
name = "rescue suit control module"
@@ -198,7 +247,15 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller )
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/firstaid,
/obj/item/device/healthanalyzer,
/obj/item/stack/medical,
/obj/item/roller
)
req_access = list()
req_one_access = list()
@@ -215,6 +272,7 @@
/obj/item/rig_module/vision/medhud
)
//Security suit
/obj/item/weapon/rig/hazard
name = "hazard hardsuit control module"
suit_type = "hazard hardsuit"
@@ -228,7 +286,13 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazard
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
allowed = list(
/obj/item/weapon/gun,
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/melee/baton
)
req_access = list()
req_one_access = list()
@@ -14,7 +14,7 @@
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona")
species_restricted = list("exclude",SPECIES_DIONA)
preserve_item = 1
phoronproof = 1
flash_protection = FLASH_PROTECTION_MAJOR
@@ -62,7 +62,7 @@
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona")
species_restricted = list("exclude",SPECIES_DIONA)
preserve_item = 1
phoronproof = 1
+15 -15
View File
@@ -13,16 +13,16 @@
//Species-specific stuff.
species_restricted = list("Human", "Promethean")
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi'
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
"Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi',
"Teshari" = 'icons/obj/clothing/species/seromi/hats.dmi'
SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/hats.dmi',
SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/hats.dmi',
SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/hats.dmi',
SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/hats.dmi'
)
light_overlay = "helmet_light"
@@ -38,18 +38,18 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Human", "Skrell", "Promethean")
species_restricted = list("Human", SPECIES_SKRELL, "Promethean")
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
SPECIES_SKRELL = 'icons/mob/species/skrell/suit.dmi'
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
"Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi',
"Teshari" = 'icons/obj/clothing/species/seromi/suits.dmi'
SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/suits.dmi',
SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/suits.dmi',
SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/suits.dmi',
SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/suits.dmi'
)
//Breach thresholds, should ideally be inherited by most (if not all) voidsuits.
+1 -1
View File
@@ -5,7 +5,7 @@
icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi'
icon_state = "tesh_cloak_bo"
item_state = "tesh_cloak_bo"
species_restricted = list("Teshari")
species_restricted = list(SPECIES_TESHARI)
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/seromi/cloak/black_orange
+1 -1
View File
@@ -6,5 +6,5 @@
icon_state = "vox-scrap"
icon_state = "vox-scrap"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
siemens_coefficient = 1 //Its literally metal
@@ -265,6 +265,15 @@
return
..()
/obj/item/clothing/suit/straight_jacket/equipped(var/mob/living/user,var/slot)
. = ..()
if(slot == slot_wear_suit)
user.drop_l_hand()
user.drop_r_hand()
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.drop_from_inventory(H.handcuffed)
/obj/item/clothing/suit/ianshirt
name = "worn shirt"
desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in."
@@ -14,7 +14,7 @@
var/concealed_holster = 0
var/mob/living/carbon/human/wearer = null //To check if the wearer changes, so species spritesheets change properly.
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too!
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too!
/obj/item/clothing/accessory/Destroy()
on_removed()
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/clothing/under/seromi
icon = 'icons/obj/clothing/species/seromi/uniform.dmi'
icon_state = "seromi_grey"
species_restricted = list("Teshari")
species_restricted = list(SPECIES_TESHARI)
/obj/item/clothing/under/seromi/smock
name = "small grey smock"
+1 -1
View File
@@ -1,6 +1,6 @@
/obj/item/clothing/under/vox
has_sensor = 0
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
valid_accessory_slots = list("vox")
restricted_accessory_slots = list("vox")
phoronproof = 1
+1 -1
View File
@@ -2,5 +2,5 @@
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = supply_controller.ordernum
O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)]
O.orderedby = random_name(pick(MALE,FEMALE), species = "Human")
O.orderedby = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN)
supply_controller.shoppinglist += O
+3 -3
View File
@@ -2,7 +2,7 @@
return // VOREStation Edit - Can't exploit shell if we never call shell!
if (config.use_irc_bot)
if (config.use_node_bot)
shell("node bridge.js -h \"[config.irc_bot_host]\" -p \"[config.irc_bot_port]\" -c \"[channel]\" -m \"[msg]\"")
shell("node bridge.js -h \"[config.irc_bot_host]\" -p \"[config.irc_bot_port]\" -c \"[channel]\" -m \"[escape_shell_arg(msg)]\"")
else
if (config.irc_bot_host)
if(config.irc_bot_export)
@@ -17,10 +17,10 @@
nudge_lib = "lib/nudge.so"
spawn(0)
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[msg]")
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[escape_shell_arg(msg)]")
else
spawn(0)
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [msg]")
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [escape_shell_arg(msg)]")
return
/proc/send2mainirc(var/msg)
+21 -3
View File
@@ -1,10 +1,28 @@
// Ported from /vg/.
/proc/escape_shell_arg(var/arg)
// RCE prevention
// - Encloses arg in single quotes
// - Escapes single quotes
// Also escapes %, ! on windows
if(world.system_type == MS_WINDOWS)
arg = replacetext(arg, "^", "^^") // Escape char
arg = replacetext(arg, "%", "%%") // %PATH% -> %%PATH%%
arg = replacetext(arg, "!", "^!") // !PATH!, delayed variable expansion on Windows
arg = replacetext(arg, "\"", "^\"")
arg = "\"[arg]\""
else
arg = replacetext(arg, "\\", "\\\\'") // Escape char
arg = replacetext(arg, "'", "\\'") // No breaking out of the single quotes.
arg = "'[arg]'"
return arg
/proc/ext_python(var/script, var/args, var/scriptsprefix = 1)
return // VOREStation Edit - Can't exploit shell if we never call shell!
if(scriptsprefix) script = "scripts/" + script
if(scriptsprefix)
script = "scripts/" + script
if(world.system_type == MS_WINDOWS)
script = replacetext(script, "/", "\\")
var/command = config.python_path + " " + script + " " + args
return shell(command)
return shell(command)
+1 -1
View File
@@ -30,7 +30,7 @@
"_____ used ____ to create their newest invention, _____!",
"Scientists are not allowed to make Gatling _____.",
"It's not a party until the ____ arrive.",
"No matter how many Tajara you have, _____ is never acceptable.",
"No matter how many Tajaran you have, _____ is never acceptable.",
"No, the AI's first law is NOT to serve _____.",
"The robots are not disposal bins for your _____.",
"You can never have too many _____ on shift.",
+1 -1
View File
@@ -9,7 +9,7 @@
"Being in a cult",
"Racially biased lawsets",
"An Unathi who WON'T STOP FIGHTING",
"Tajara fetishists",
"Tajaran fetishists",
"Bald thirty-year-olds",
"A Chief Engineer who can't setup the engine",
"Being sucked out into space",
-1
View File
@@ -247,7 +247,6 @@
var/mob/M = obj.loc
if(ismob(M))
M.remove_from_mob(obj)
M.update_icons_layers() //so their overlays update
if(!silent)
var/obj/oldobj = obj
+2 -2
View File
@@ -104,8 +104,8 @@
base_icon = 'icons/turf/flooring/asteroid.dmi'
initial_flooring = null
/turf/simulated/floor/holofloor/desert/New()
..()
/turf/simulated/floor/holofloor/desert/initialize()
. = ..()
if(prob(10))
add_overlay("asteroid[rand(0,9)]")
+2 -2
View File
@@ -48,8 +48,8 @@
/datum/lore/codex/page/tajaran
name = "Tajaran"
keywords = list("Tajara")
data = "The Tajara are a race of humanoid mammalian aliens from Meralar, the fourth planet of the Rarkajar star system. Thickly furred and protected \
keywords = list("Tajaran")
data = "The Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet of the Rarkajar star system. Thickly furred and protected \
from cold, they thrive on their subarctic planet, where the only terran temperate areas spread across the equator and tropical belt. \
With their own share of bloody wars and great technological advances, the Tajaran are a proud kind. They fiercely believe they belong \
among the stars and consider themselves a rightful interstellar nation, even if the humans helped them to actually achieve superluminal \
+3 -1
View File
@@ -96,7 +96,7 @@ var/global/use_preloader = FALSE
var/zcrd = text2num(dmmRegex.group[5]) + z_offset - 1
var/zexpansion = zcrd > world.maxz
if(zexpansion)
if(zexpansion && !measureOnly)
if(cropMap)
continue
else
@@ -385,6 +385,8 @@ var/global/use_preloader = FALSE
/dmm_suite/proc/readlist(text as text, delimiter=",", keys_only_string = FALSE)
var/list/to_return = list()
if(text == "")
return to_return // Fast bail-out
var/position
var/old_position = 1
+1 -1
View File
@@ -269,7 +269,7 @@
resource_field += mine_turf
if(!resource_field.len)
system_error("resources depleted")
system_error("Resources depleted.")
/obj/machinery/mining/drill/proc/use_cell_power()
if(!cell) return 0
+2
View File
@@ -59,6 +59,7 @@
var/obj/item/stack/material/S = new stacktype (get_turf(machine.output))
S.amount = machine.stack_storage[href_list["release_stack"]]
machine.stack_storage[href_list["release_stack"]] = 0
S.update_icon()
src.add_fingerprint(usr)
src.updateUsrDialog()
@@ -128,6 +129,7 @@
var/obj/item/stack/material/S = new stacktype (get_turf(output))
S.amount = stack_amt
stack_storage[sheet] -= stack_amt
S.update_icon()
console.updateUsrDialog()
return
+1
View File
@@ -108,6 +108,7 @@ var/global/list/ore_data = list()
/ore/diamond
name = "diamond"
display_name = "diamond"
alloy = 1
compresses_to = "diamond"
result_amount = 5
spread_chance = 10
+63
View File
@@ -61,3 +61,66 @@
outgoing_melee_damage_percent = 0.5 //50% less outgoing melee damage.
attack_speed_percent = 1.2 //20% slower attack speed.
//////////////////////
//Surgical Modifiers// As of writing, limited to the 'Frankenstein' modifier.
//////////////////////
/datum/modifier/franken_sickness
name = "surgically attached brain"
desc = "You feel weak, as your central nervous system is still recovering from being repaired."
on_created_text = "<span class='warning'><font size='3'>You feel... off, and your head hurts.</font></span>"
on_expired_text = "<span class='notice'><font size='3'>You feel some strength returning to you.</font></span>"
max_health_percent = 0.9 // -10% max health.
incoming_damage_percent = 1.1 // 10% more incoming damage.
incoming_hal_damage_percent = 1.5 // 50% more halloss damage, stacking on the previous 1.1 widespread.
outgoing_melee_damage_percent = 0.9 // 10% less melee damage.
disable_duration_percent = 1.25 // Stuns last 25% longer.
incoming_healing_percent = 0.9 // -10% to all healing
slowdown = 0.5 // Slower, by a smidge.
evasion = -5 // 5% easier to hit.
accuracy_dispersion = 1 // Inaccurate trait level of tile dispersion.
stacks = MODIFIER_STACK_ALLOWED //You have somehow had the surgery done twice. Your brain is very, very fucked, but I won't say no.
/datum/modifier/franken_sickness/can_apply(var/mob/living/L)
if(!ishuman(L))
return FALSE
if(L.isSynthetic()) //Nonhumans and Machines cannot be Frankensteined, at this time.
return FALSE
return ..()
/datum/modifier/franken_sickness/tick()
if(holder.stat != DEAD)
if(istype(holder, /mob/living/carbon/human))
var/mob/living/carbon/human/F = holder
if(F.can_defib)
F.can_defib = 0
/datum/modifier/franken_sickness/on_expire() //Not permanent, but its child is.
holder.add_modifier(/datum/modifier/franken_recovery, 0)
/datum/modifier/franken_recovery //When Franken_Sickness expires, this will be permanently applied in its place.
name = "neural recovery"
desc = "You feel out of touch, as your central nervous system is still recovering from being repaired."
on_created_text = "<span class='warning'><font size='3'>You feel... off. Everything is fuzzy.</font></span>"
on_expired_text = "<span class='notice'><font size='3'>You feel your senses returning to you.</font></span>"
incoming_hal_damage_percent = 1.5 // 50% more halloss damage.
disable_duration_percent = 1.25 // Stuns last 25% longer.
evasion = -5 // 5% easier to hit.
accuracy_dispersion = 1 // Inaccurate trait level of tile dispersion.
stacks = MODIFIER_STACK_ALLOWED
/datum/modifier/franken_recovery/can_apply(var/mob/living/L)
if(!ishuman(L))
return FALSE
if(L.isSynthetic()) //Nonhumans and Machines cannot be Frankensteined, at this time.
return FALSE
return ..()
+1 -2
View File
@@ -103,8 +103,7 @@
if (ishuman(body))
var/mob/living/carbon/human/H = body
icon = H.icon
LAZYCLEARLIST(H.list_huds)
H.update_icons()
underlays = H.underlays
overlays = H.overlays
else
icon = body.icon
+2 -4
View File
@@ -9,8 +9,8 @@ var/list/holder_mob_icon_cache = list()
show_messages = 1
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
origin_tech = null
@@ -83,8 +83,6 @@ var/list/holder_mob_icon_cache = list()
H.update_inv_l_hand()
else if(H.r_hand == src)
H.update_inv_r_hand()
else
H.regenerate_icons()
//Mob specific holders.
/obj/item/weapon/holder/diona
+1 -2
View File
@@ -138,7 +138,6 @@ var/list/slot_equipment_priority = list( \
remove_from_mob(W, target)
if(!(W && W.loc))
return 1 // self destroying objects (tk, grabs)
update_icons_layers()
return 1
return 0
@@ -180,7 +179,7 @@ var/list/slot_equipment_priority = list( \
/mob/proc/get_inventory_slot(obj/item/I)
var/slot = 0
for(var/s in slot_back to slot_tie) //kind of worries me
for(var/s in 1 to SLOT_TOTAL)
if(get_equipped_item(s) == I)
slot = s
break
+14
View File
@@ -63,6 +63,20 @@
"ka","aasi","far","wa","baq","ara","qara","zir","saam","mak","hrar","nja","rir","khan","jun","dar","rik","kah",
"hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra")
/datum/language/tajaranakhani
name = LANGUAGE_AKHANI
desc = "The language of the sea-faring Njarir'Akhan Tajaran. Borrowing some elements from Siik, the language is distinctly more structured."
speech_verb = "chatters"
ask_verb = "mrowls"
exclaim_verb = "wails"
colour = "akhani"
key = "h"
flags = WHITELISTED
syllables = list("mrr","rr","marr","tar","ahk","ket","hal","kah","dra","nal","kra","vah","dar","hrar", "eh",
"ara","ka","zar","mah","ner","zir","mur","hai","raz","ni","ri","nar","njar","jir","ri","ahn","kha","sir",
"kar","yar","kzar","rha","hrar","err","fer","rir","rar","yarr","arr","ii'r","jar","kur","ran","rii","ii",
"nai","ou","kah","oa","ama","uuk","bel","chi","ayt","kay","kas","akor","tam","yir","enai")
/datum/language/tajaran/get_random_name(var/gender)
var/new_name = ..(gender,1)
+2 -2
View File
@@ -47,13 +47,13 @@
autohiss_extra_map = list(
"x" = list("ks", "kss", "ksss")
)
autohiss_exempt = list("Sinta'unathi")
autohiss_exempt = list(LANGUAGE_UNATHI)
/datum/species/tajaran
autohiss_basic_map = list(
"r" = list("rr", "rrr", "rrrr")
)
autohiss_exempt = list("Siik")
autohiss_exempt = list(LANGUAGE_SIIK,LANGUAGE_AKHANI)
/datum/species/proc/handle_autohiss(message, datum/language/lang, mode)
+235
View File
@@ -0,0 +1,235 @@
/mob/living/bot/cleanbot/edCLN
name = "ED-CLN Cleaning Robot"
desc = "A large cleaning robot. It looks rather efficient."
icon_state = "edCLN0"
req_one_access = list(access_robotics, access_janitor)
botcard_access = list(access_janitor, access_maint_tunnels)
locked = 0 // Start unlocked so roboticist can set them to patrol.
wait_if_pulled = 0 // One big boi.
min_target_dist = 0
patrol_speed = 3
target_speed = 6
cleaning = 0
blood = 0
var/red_switch = 0
var/blue_switch = 0
var/green_switch = 0
/mob/living/bot/cleanbot/edCLN/update_icons()
if(on && busy)
icon_state = "edCLN"
else
icon_state = "edCLN[on]"
/mob/living/bot/cleanbot/edCLN/handleIdle()
if(prob(10))
custom_emote(2, "makes a less than thrilled beeping sound.")
playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0)
if(red_switch && !blue_switch && !green_switch && prob(10) || src.emagged)
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
T.add_blood()
if(!red_switch && blue_switch && !green_switch && prob(50) || src.emagged)
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
visible_message("<span class='notice'>\The [src] squirts a puddle of water on the floor!</span>")
T.wet_floor()
if(!red_switch && !blue_switch && green_switch && prob(10) || src.emagged)
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
visible_message("<span class='warning'>\The [src] stomps on \the [T], breaking it!</span>")
qdel(T)
if(red_switch && blue_switch && green_switch && prob(1))
src.explode()
/mob/living/bot/cleanbot/edCLN/explode()
on = 0
visible_message("<span class='danger'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
new /obj/item/weapon/secbot_assembly/ed209_assembly(Tsec)
if(prob(50))
new /obj/item/robot_parts/l_leg(Tsec)
if(prob(50))
new /obj/item/robot_parts/r_leg(Tsec)
if(prob(50))
if(prob(50))
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
else
new /obj/item/device/assembly/prox_sensor(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
return
/mob/living/bot/cleanbot/edCLN/attack_hand(var/mob/user)
var/dat
usr.set_machine(src)
add_fingerprint(usr)
dat += "<TT><B>Automatic Station Cleaner v2.0</B></TT><BR><BR>"
dat += "Status: <A href='?src=\ref[src];operation=start'>[on ? "On" : "Off"]</A><BR>"
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<BR>"
dat += "Maintenance panel is [open ? "opened" : "closed"]"
if(!locked || issilicon(user))
dat += "<BR>Cleans Blood: <A href='?src=\ref[src];operation=blood'>[blood ? "Yes" : "No"]</A><BR>"
dat += "<BR>Patrol station: <A href='?src=\ref[src];operation=patrol'>[will_patrol ? "Yes" : "No"]</A><BR>"
if(open && !locked)
dat += "<BR>Red Switch: <A href='?src=\ref[src];operation=red_switch'>[red_switch ? "On" : "Off"]</A><BR>"
dat += "<BR>Green Switch: <A href='?src=\ref[src];operation=green_switch'>[green_switch ? "On" : "Off"]</A><BR>"
dat += "<BR>Blue Switch: <A href='?src=\ref[src];operation=blue_switch'>[blue_switch ? "On" : "Off"]</A>"
user << browse("<HEAD><TITLE>Cleaner v2.0 controls</TITLE></HEAD>[dat]", "window=autocleaner")
onclose(user, "autocleaner")
return
/mob/living/bot/cleanbot/edCLN/Topic(href, href_list)
usr.set_machine(src)
add_fingerprint(usr)
switch(href_list["operation"])
if("start")
if(on)
turn_off()
else
turn_on()
if("blood")
blood = !blood
get_targets()
if("patrol")
will_patrol = !will_patrol
patrol_path = null
if("red_switch")
red_switch = !red_switch
to_chat(usr, "<span class='notice'>You flip the red switch [red_switch ? "on" : "off"].</span>")
if("green_switch")
green_switch = !blue_switch
to_chat(usr, "<span class='notice'>You flip the green switch [green_switch ? "on" : "off"].</span>")
if("blue_switch")
blue_switch = !blue_switch
to_chat(usr, "<span class='notice'>You flip the blue switch [blue_switch ? "on" : "off"].</span>")
attack_hand(usr)
/mob/living/bot/cleanbot/edCLN/emag_act(var/remaining_uses, var/mob/user)
. = ..()
if(!emagged)
if(user)
to_chat(user, "<span class='notice'>The [src] buzzes and beeps.</span>")
playsound(src.loc, 'sound/machines/buzzbeep.ogg', 50, 0)
emagged = 1
return 1
// Assembly
/obj/item/weapon/secbot_assembly/edCLN_assembly
name = "ED-CLN assembly"
desc = "Some sort of bizarre assembly."
icon = 'icons/obj/aibots.dmi'
icon_state = "ed209_frame"
item_state = "buildpipe"
created_name = "ED-CLN Security Robot"
/obj/item/weapon/secbot_assembly/edCLN_assembly/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
..()
if(istype(W, /obj/item/weapon/pen))
var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN)
if(!t)
return
if(!in_range(src, usr) && src.loc != usr)
return
created_name = t
return
switch(build_step)
if(0, 1)
if(istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg) || (istype(W, /obj/item/organ/external/leg) && ((W.name == "robotic right leg") || (W.name == "robotic left leg"))))
user.drop_item()
qdel(W)
build_step++
to_chat(user, "<span class='notice'>You add \the [W] to \the [src].</span>")
name = "legs/frame assembly"
if(build_step == 1)
icon_state = "ed209_leg"
else
icon_state = "ed209_legs"
if(2)
if(istype(W, /obj/item/weapon/reagent_containers/glass/bucket))
user.drop_item()
qdel(W)
build_step++
to_chat(user, "<span class='notice'>You add \the [W] to \the [src].</span>")
name = "bucket/legs/frame assembly"
item_state = "edCLN_bucket"
icon_state = "edCLN_bucket"
if(3)
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
build_step++
name = "bucketed frame assembly"
to_chat(user, "<span class='notice'>You welded the bucket to \the [src].</span>")
if(4)
if(isprox(W))
user.drop_item()
qdel(W)
build_step++
to_chat(user, "<span class='notice'>You add \the [W] to \the [src].</span>")
name = "proximity bucket ED assembly"
item_state = "edCLN_prox"
icon_state = "edCLN_prox"
if(5)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if (C.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one coil of wire to wire \the [src].</span>")
return
to_chat(user, "<span class='notice'>You start to wire \the [src].</span>")
if(do_after(user, 40))
if(C.use(1))
build_step++
to_chat(user, "<span class='notice'>You wire the ED-CLN assembly.</span>")
name = "wired ED-CLN assembly"
return
if(6)
if(istype(W, /obj/item/weapon/mop))
name = "mop ED-CLN assembly"
build_step++
to_chat(user, "<span class='notice'>You add \the [W] to \the [src].</span>")
item_state = "edCLN_mop"
icon_state = "edCLN_mop"
user.drop_item()
qdel(W)
if(7)
if(istype(W, /obj/item/weapon/screwdriver))
playsound(src, W.usesound, 100, 1)
var/turf/T = get_turf(user)
to_chat(user, "<span class='notice'>Attatching the mop to the frame...</span>")
if(do_after(user, 40) && get_turf(user) == T)
build_step++
name = "mopped ED-CLN assembly"
to_chat(user, "<span class='notice'>Mop attached.</span>")
if(8)
if(istype(W, /obj/item/weapon/cell))
build_step++
to_chat(user, "<span class='notice'>You complete the ED-CLN.</span>")
var/turf/T = get_turf(src)
new /mob/living/bot/cleanbot/edCLN(T,created_name)
user.drop_item()
qdel(W)
user.drop_from_inventory(src)
qdel(src)
@@ -23,7 +23,7 @@
/mob/living/carbon/alien/diona/New()
..()
species = all_species["Diona"]
species = all_species[SPECIES_DIONA]
add_language(LANGUAGE_ROOTGLOBAL)
add_language(LANGUAGE_GALCOM)
verbs += /mob/living/carbon/alien/diona/proc/merge
@@ -19,7 +19,7 @@
if(istype(C,/mob/living/carbon/human))
var/mob/living/carbon/human/D = C
if(D.species && D.species.name == "Diona")
if(D.species && D.species.name == SPECIES_DIONA)
choices += C
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
@@ -1,6 +1,6 @@
/mob/living/carbon/alien/diona/confirm_evolution()
if(!is_alien_whitelisted(src, all_species["Diona"]))
if(!is_alien_whitelisted(src, all_species[SPECIES_DIONA]))
src << alert("You are currently not whitelisted to play as a full diona.")
return null
@@ -16,4 +16,4 @@
qdel(L)
src.visible_message("<font color='red'>[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.</font>","<font color='red'>You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.</font>")
return "Diona"
return SPECIES_DIONA
+3 -20
View File
@@ -1,8 +1,8 @@
/mob/living/carbon/New()
//setup reagent holders
bloodstr = new/datum/reagents/metabolism(1000, src, CHEM_BLOOD)
ingested = new/datum/reagents/metabolism(1000, src, CHEM_INGEST)
touching = new/datum/reagents/metabolism(1000, src, CHEM_TOUCH)
bloodstr = new/datum/reagents/metabolism/bloodstream(500, src)
ingested = new/datum/reagents/metabolism/ingested(500, src)
touching = new/datum/reagents/metabolism/touch(500, src)
reagents = bloodstr
if (!default_language && species_language)
default_language = all_languages[species_language]
@@ -278,23 +278,6 @@
// ++++ROCKDTBEN++++ MOB PROCS //END
/mob/living/carbon/clean_blood()
. = ..()
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.gloves)
if(H.gloves.clean_blood())
H.update_inv_gloves(0)
H.gloves.germ_level = 0
else
if(H.bloody_hands)
H.bloody_hands = 0
H.update_inv_gloves(0)
H.germ_level = 0
update_icons_layers(FALSE) //apply the now updated overlays to the mob
update_icons_body()
/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
var/temp_inc = max(min(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), exposed_temperature - bodytemperature), 0)
@@ -17,9 +17,9 @@
//Active emote/pose
var/pose = null
var/list/chem_effects = list()
var/datum/reagents/metabolism/bloodstr = null
var/datum/reagents/metabolism/ingested = null
var/datum/reagents/metabolism/touching = null
var/datum/reagents/metabolism/bloodstream/bloodstr = null
var/datum/reagents/metabolism/ingested/ingested = null
var/datum/reagents/metabolism/touch/touching = null
var/pulse = PULSE_NORM //current pulse level
+36 -29
View File
@@ -5,7 +5,8 @@
icon = 'icons/effects/effects.dmi' //We have an ultra-complex update icons that overlays everything, don't load some stupid random male human
icon_state = "nothing"
var/list/hud_list[TOTAL_HUDS]
has_huds = TRUE //We do have HUDs (like health, wanted, status, not inventory slots)
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
var/last_push_time //For human_attackhand.dm, keeps track of the last use of disarm
@@ -40,9 +41,8 @@
nutrition = rand(200,400)
make_hud_overlays()
human_mob_list |= src
..()
hide_underwear.Cut()
@@ -53,19 +53,11 @@
dna.ready_dna(src)
dna.real_name = real_name
sync_organ_dna()
make_blood()
/mob/living/carbon/human/Destroy()
human_mob_list -= src
for(var/organ in organs)
qdel(organ)
LAZYCLEARLIST(list_layers)
list_layers = null //Be free!
LAZYCLEARLIST(list_body)
list_body = null
LAZYCLEARLIST(list_huds)
list_huds = null
qdel_null(nif) //VOREStation Add
qdel_null_list(vore_organs) //VOREStation Add
return ..()
@@ -1034,7 +1026,7 @@
if(!blood_DNA[M.dna.unique_enzymes])
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
hand_blood_color = blood_color
src.update_inv_gloves() //handles bloody hands overlays and updating
update_bloodied()
verbs += /mob/living/carbon/human/proc/bloody_doodle
return 1 //we applied blood to the item
@@ -1044,14 +1036,30 @@
return md5(dna.uni_identity)
/mob/living/carbon/human/clean_blood(var/washshoes)
.=..()
. = ..()
gunshot_residue = null
if(washshoes && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
feet_blood_color = null
feet_blood_DNA.Cut()
//Always do hands (or whatever's on our hands)
if(gloves)
gloves.clean_blood()
update_inv_gloves()
gloves.germ_level = 0
else
bloody_hands = 0
germ_level = 0
//Sometimes do shoes if asked (or feet if no shoes)
if(washshoes && shoes)
shoes.clean_blood()
update_inv_shoes()
shoes.germ_level = 0
else if(washshoes && (feet_blood_color || LAZYLEN(feet_blood_DNA)))
LAZYCLEARLIST(feet_blood_DNA)
feet_blood_DNA = null
update_inv_shoes(1)
return 1
feet_blood_color = null
update_bloodied()
/mob/living/carbon/human/get_visible_implants(var/class = 0)
@@ -1128,7 +1136,7 @@
if(!dna)
if(!new_species)
new_species = "Human"
new_species = SPECIES_HUMAN
else
if(!new_species)
new_species = dna.species
@@ -1137,7 +1145,7 @@
// No more invisible screaming wheelchairs because of set_species() typos.
if(!all_species[new_species])
new_species = "Human"
new_species = SPECIES_HUMAN
if(species)
@@ -1185,6 +1193,7 @@
spawn(0)
if(regen_icons) regenerate_icons()
make_blood()
if(vessel.total_volume < species.blood_volume)
vessel.maximum_volume = species.blood_volume
vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
@@ -1201,6 +1210,9 @@
qdel(hud_used)
hud_used = new /datum/hud(src)
//A slew of bits that may be affected by our species change
regenerate_icons()
if(species)
//if(mind) //VOREStation Removal
//apply_traits() //VOREStation Removal
@@ -1557,25 +1569,20 @@
return species.fire_icon_state
// Called by job_controller. Makes drones start with a permit, might be useful for other people later too.
/mob/living/carbon/human/equip_post_job()
/mob/living/carbon/human/equip_post_job() //Drone Permit moved to equip_survival_gear()
var/braintype = get_FBP_type()
if(braintype == FBP_DRONE)
var/turf/T = get_turf(src)
var/obj/item/clothing/accessory/permit/drone/permit = new(T)
permit.set_name(real_name)
equip_to_slot_or_del(permit, slot_in_backpack)
equip_to_appropriate_slot(permit) // If for some reason it can't find room, it'll still be on the floor.
/mob/living/carbon/human/proc/update_icon_special(var/mutable_appearance/ma, var/update_icons = TRUE) //For things such as teshari hiding and whatnot.
/mob/living/carbon/human/proc/update_icon_special() //For things such as teshari hiding and whatnot.
if(hiding) // Hiding? Carry on.
if(stat == DEAD || paralysis || weakened || stunned) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work.
hiding = FALSE //No hiding for you. Mob layer should be updated naturally, but it actually doesn't.
else
ma.layer = HIDING_LAYER
//Can put special species icon update proc calls here, if any are ever invented.
if(update_icons)
update_icons()
layer = HIDING_LAYER
/mob/living/carbon/human/proc/get_display_species()
//Shows species in tooltip
@@ -103,8 +103,6 @@
can_be_antagged = TRUE
var/has_huds = TRUE //Do they have all the fancy life huds? Not for mannequins.
// Used by mobs in virtual reality to point back to the "real" mob the client belongs to.
var/mob/living/carbon/human/vr_holder = null
// Used by "real" mobs after they leave a VR session
@@ -108,7 +108,7 @@
return FBP_NONE
/mob/living/carbon/human/proc/make_hud_overlays()
/mob/living/carbon/human/make_hud_overlays()
hud_list[HEALTH_HUD] = gen_hud_image(ingame_hud_med, src, "100", plane = PLANE_CH_HEALTH)
if(isSynthetic())
hud_list[STATUS_HUD] = gen_hud_image(ingame_hud, src, "hudrobo", plane = PLANE_CH_STATUS)
@@ -123,6 +123,7 @@
hud_list[IMPTRACK_HUD] = gen_hud_image(ingame_hud, src, "hudblank", plane = PLANE_CH_IMPTRACK)
hud_list[SPECIALROLE_HUD] = gen_hud_image(ingame_hud, src, "hudblank", plane = PLANE_CH_SPECIAL)
hud_list[STATUS_HUD_OOC] = gen_hud_image(ingame_hud, src, "hudhealthy", plane = PLANE_CH_STATUS_OOC)
add_overlay(hud_list)
/mob/living/carbon/human/recalculate_vis()
if(!vis_enabled || !plane_holder)
@@ -2,7 +2,8 @@
var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES]
if(eyes)
eyes.update_colour()
regenerate_icons()
update_icons_body() //Body handles eyes
update_eyes() //For floating eyes only
/mob/living/carbon/var/list/internal_organs = list()
/mob/living/carbon/human/var/list/organs = list()
@@ -12,42 +12,42 @@
/mob/living/carbon/human/skrell/New(var/new_loc)
h_style = "Skrell Short Tentacles"
..(new_loc, "Skrell")
..(new_loc, SPECIES_SKRELL)
/mob/living/carbon/human/tajaran/New(var/new_loc)
h_style = "Tajaran Ears"
..(new_loc, "Tajara")
..(new_loc, SPECIES_TAJ)
/mob/living/carbon/human/unathi/New(var/new_loc)
h_style = "Unathi Horns"
..(new_loc, "Unathi")
..(new_loc, SPECIES_UNATHI)
/mob/living/carbon/human/vox/New(var/new_loc)
h_style = "Short Vox Quills"
..(new_loc, "Vox")
..(new_loc, SPECIES_VOX)
/mob/living/carbon/human/diona/New(var/new_loc)
..(new_loc, "Diona")
..(new_loc, SPECIES_DIONA)
/mob/living/carbon/human/teshari/New(var/new_loc)
h_style = "Teshari Default"
..(new_loc, "Teshari")
..(new_loc, SPECIES_TESHARI)
/mob/living/carbon/human/promethean/New(var/new_loc)
..(new_loc, "Promethean")
..(new_loc, SPECIES_PROMETHEAN)
/mob/living/carbon/human/machine/New(var/new_loc)
h_style = "blue IPC screen"
..(new_loc, "Machine")
/mob/living/carbon/human/monkey/New(var/new_loc)
..(new_loc, "Monkey")
..(new_loc, SPECIES_MONKEY)
/mob/living/carbon/human/farwa/New(var/new_loc)
..(new_loc, "Farwa")
..(new_loc, SPECIES_MONKEY_TAJ)
/mob/living/carbon/human/neaera/New(var/new_loc)
..(new_loc, "Neaera")
..(new_loc, SPECIES_MONKEY_SKRELL)
/mob/living/carbon/human/stok/New(var/new_loc)
..(new_loc, "Stok")
..(new_loc, SPECIES_MONKEY_UNATHI)
@@ -152,12 +152,14 @@ This saves us from having to call add_fingerprint() any time something is put in
else if (W == wear_id)
wear_id = null
update_inv_wear_id()
BITSET(hud_updateflag, ID_HUD)
BITSET(hud_updateflag, WANTED_HUD)
else if (W == r_store)
r_store = null
update_inv_pockets()
//update_inv_pockets() //Doesn't do anything.
else if (W == l_store)
l_store = null
update_inv_pockets()
//update_inv_pockets() //Doesn't do anything.
else if (W == s_store)
s_store = null
update_inv_s_store()
@@ -195,8 +197,7 @@ This saves us from having to call add_fingerprint() any time something is put in
//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible()
//set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc.
/mob/living/carbon/human/equip_to_slot(obj/item/W as obj, slot, redraw_mob = 1)
/mob/living/carbon/human/equip_to_slot(obj/item/W as obj, slot)
if(!slot)
return
@@ -213,39 +214,41 @@ This saves us from having to call add_fingerprint() any time something is put in
src.back = W
W.equipped(src, slot)
worn_clothing += back
update_inv_back(redraw_mob)
update_inv_back()
if(slot_wear_mask)
src.wear_mask = W
if(wear_mask.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR))
update_hair(redraw_mob) //rebuild hair
update_inv_ears(0)
update_hair() //rebuild hair
update_inv_ears()
W.equipped(src, slot)
worn_clothing += wear_mask
update_inv_wear_mask(redraw_mob)
update_inv_wear_mask()
if(slot_handcuffed)
src.handcuffed = W
update_inv_handcuffed(redraw_mob)
update_inv_handcuffed()
if(slot_legcuffed)
src.legcuffed = W
W.equipped(src, slot)
update_inv_legcuffed(redraw_mob)
update_inv_legcuffed()
if(slot_l_hand)
src.l_hand = W
W.equipped(src, slot)
update_inv_l_hand(redraw_mob)
update_inv_l_hand()
if(slot_r_hand)
src.r_hand = W
W.equipped(src, slot)
update_inv_r_hand(redraw_mob)
update_inv_r_hand()
if(slot_belt)
src.belt = W
W.equipped(src, slot)
worn_clothing += belt
update_inv_belt(redraw_mob)
update_inv_belt()
if(slot_wear_id)
src.wear_id = W
W.equipped(src, slot)
update_inv_wear_id(redraw_mob)
update_inv_wear_id()
BITSET(hud_updateflag, ID_HUD)
BITSET(hud_updateflag, WANTED_HUD)
if(slot_l_ear)
src.l_ear = W
if(l_ear.slot_flags & SLOT_TWOEARS)
@@ -254,7 +257,7 @@ This saves us from having to call add_fingerprint() any time something is put in
src.r_ear = O
O.hud_layerise()
W.equipped(src, slot)
update_inv_ears(redraw_mob)
update_inv_ears()
if(slot_r_ear)
src.r_ear = W
if(r_ear.slot_flags & SLOT_TWOEARS)
@@ -263,54 +266,54 @@ This saves us from having to call add_fingerprint() any time something is put in
src.l_ear = O
O.hud_layerise()
W.equipped(src, slot)
update_inv_ears(redraw_mob)
update_inv_ears()
if(slot_glasses)
src.glasses = W
W.equipped(src, slot)
update_inv_glasses(redraw_mob)
update_inv_glasses()
if(slot_gloves)
src.gloves = W
W.equipped(src, slot)
worn_clothing += glasses
update_inv_gloves(redraw_mob)
update_inv_gloves()
if(slot_head)
src.head = W
if(head.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR|HIDEMASK))
update_hair(redraw_mob) //rebuild hair
update_hair() //rebuild hair
update_inv_ears(0)
update_inv_wear_mask(0)
if(istype(W,/obj/item/clothing/head/kitty))
W.update_icon(src)
W.equipped(src, slot)
worn_clothing += head
update_inv_head(redraw_mob)
update_inv_head()
if(slot_shoes)
src.shoes = W
W.equipped(src, slot)
worn_clothing += shoes
update_inv_shoes(redraw_mob)
update_inv_shoes()
if(slot_wear_suit)
src.wear_suit = W
W.equipped(src, slot)
worn_clothing += wear_suit
update_inv_wear_suit(redraw_mob)
update_inv_wear_suit()
if(slot_w_uniform)
src.w_uniform = W
W.equipped(src, slot)
worn_clothing += w_uniform
update_inv_w_uniform(redraw_mob)
update_inv_w_uniform()
if(slot_l_store)
src.l_store = W
W.equipped(src, slot)
update_inv_pockets(redraw_mob)
//update_inv_pockets() //Doesn't do anything
if(slot_r_store)
src.r_store = W
W.equipped(src, slot)
update_inv_pockets(redraw_mob)
//update_inv_pockets() //Doesn't do anything
if(slot_s_store)
src.s_store = W
W.equipped(src, slot)
update_inv_s_store(redraw_mob)
update_inv_s_store()
if(slot_in_backpack)
if(src.get_active_hand() == W)
src.remove_from_mob(W)
+27 -27
View File
@@ -268,7 +268,7 @@
Weaken(3)
if(!lying)
emote("collapse")
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype() == "Human") //apes go bald
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype() == SPECIES_HUMAN) //apes go bald
if((h_style != "Bald" || f_style != "Shaved" ))
src << "<span class='warning'>Your hair falls out.</span>"
h_style = "Bald"
@@ -319,14 +319,15 @@
/mob/living/carbon/human/get_breath_from_internal(volume_needed=BREATH_VOLUME)
if(internal)
//Because rigs store their tanks out of reach of contents.Find(), a check has to be made to make
//sure the rig is still worn, still online, and that its air supply still exists.
var/obj/item/weapon/tank/rig_supply
if(istype(back,/obj/item/weapon/rig))
var/obj/item/weapon/rig/rig = back
if(!rig.offline && (rig.air_supply && internal == rig.air_supply))
rig_supply = rig.air_supply
if (!rig_supply && (!contents.Find(internal) || !((wear_mask && (wear_mask.item_flags & AIRTIGHT)) || (head && (head.item_flags & AIRTIGHT)))))
if ((!rig_supply && !contents.Find(internal)) || !((wear_mask && (wear_mask.item_flags & AIRTIGHT)) || (head && (head.item_flags & AIRTIGHT))))
internal = null
if(internal)
@@ -1592,26 +1593,24 @@
we only set those statuses and icons upon changes. Then those HUD items will simply add those pre-made images.
This proc below is only called when those HUD elements need to change as determined by the mobs hud_updateflag.
*/
/mob/living/carbon/human/proc/handle_hud_list()
if (BITTEST(hud_updateflag, HEALTH_HUD))
var/image/holder = hud_list[HEALTH_HUD]
var/image/holder = grab_hud(HEALTH_HUD)
if(stat == DEAD)
holder.icon_state = "-100" // X_X
else
holder.icon_state = RoundHealth((health-config.health_threshold_crit)/(getMaxHealth()-config.health_threshold_crit)*100)
hud_list[HEALTH_HUD] = holder
apply_hud(HEALTH_HUD, holder)
if (BITTEST(hud_updateflag, LIFE_HUD))
var/image/holder = hud_list[LIFE_HUD]
var/image/holder = grab_hud(LIFE_HUD)
if(isSynthetic())
holder.icon_state = "hudrobo"
else if(stat == DEAD)
holder.icon_state = "huddead"
else
holder.icon_state = "hudhealthy"
hud_list[LIFE_HUD] = holder
apply_hud(LIFE_HUD, holder)
if (BITTEST(hud_updateflag, STATUS_HUD))
var/foundVirus = 0
@@ -1620,8 +1619,8 @@
foundVirus = 1
break
var/image/holder = hud_list[STATUS_HUD]
var/image/holder2 = hud_list[STATUS_HUD_OOC]
var/image/holder = grab_hud(STATUS_HUD)
var/image/holder2 = grab_hud(STATUS_HUD_OOC)
if (isSynthetic())
holder.icon_state = "hudrobo"
else if(stat == DEAD)
@@ -1643,11 +1642,11 @@
else
holder2.icon_state = "hudhealthy"
hud_list[STATUS_HUD] = holder
hud_list[STATUS_HUD_OOC] = holder2
apply_hud(STATUS_HUD, holder)
apply_hud(STATUS_HUD_OOC, holder2)
if (BITTEST(hud_updateflag, ID_HUD))
var/image/holder = hud_list[ID_HUD]
var/image/holder = grab_hud(ID_HUD)
if(wear_id)
var/obj/item/weapon/card/id/I = wear_id.GetID()
if(I)
@@ -1657,11 +1656,10 @@
else
holder.icon_state = "hudunknown"
hud_list[ID_HUD] = holder
apply_hud(ID_HUD, holder)
if (BITTEST(hud_updateflag, WANTED_HUD))
var/image/holder = hud_list[WANTED_HUD]
var/image/holder = grab_hud(WANTED_HUD)
holder.icon_state = "hudblank"
var/perpname = name
if(wear_id)
@@ -1684,15 +1682,16 @@
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
holder.icon_state = "hudreleased"
break
hud_list[WANTED_HUD] = holder
apply_hud(WANTED_HUD, holder)
if ( BITTEST(hud_updateflag, IMPLOYAL_HUD) \
|| BITTEST(hud_updateflag, IMPCHEM_HUD) \
|| BITTEST(hud_updateflag, IMPTRACK_HUD))
var/image/holder1 = hud_list[IMPTRACK_HUD]
var/image/holder2 = hud_list[IMPLOYAL_HUD]
var/image/holder3 = hud_list[IMPCHEM_HUD]
var/image/holder1 = grab_hud(IMPTRACK_HUD)
var/image/holder2 = grab_hud(IMPLOYAL_HUD)
var/image/holder3 = grab_hud(IMPCHEM_HUD)
holder1.icon_state = "hudblank"
holder2.icon_state = "hudblank"
@@ -1708,22 +1707,23 @@
if(istype(I,/obj/item/weapon/implant/chem))
holder3.icon_state = "hud_imp_chem"
hud_list[IMPTRACK_HUD] = holder1
hud_list[IMPLOYAL_HUD] = holder2
hud_list[IMPCHEM_HUD] = holder3
apply_hud(IMPTRACK_HUD, holder1)
apply_hud(IMPLOYAL_HUD, holder2)
apply_hud(IMPCHEM_HUD, holder3)
if (BITTEST(hud_updateflag, SPECIALROLE_HUD))
var/image/holder = hud_list[SPECIALROLE_HUD]
var/image/holder = grab_hud(SPECIALROLE_HUD)
holder.icon_state = "hudblank"
if(mind && mind.special_role)
if(hud_icon_reference[mind.special_role])
holder.icon_state = hud_icon_reference[mind.special_role]
else
holder.icon_state = "hudsyndicate"
hud_list[SPECIALROLE_HUD] = holder
apply_hud(SPECIALROLE_HUD, holder)
attempt_vr(src,"handle_hud_list_vr",list()) //VOREStation Add - Custom HUDs.
hud_updateflag = 0
update_icons_huds()
/mob/living/carbon/human/handle_stunned()
if(!can_feel_pain())
@@ -1,5 +1,5 @@
/datum/species/shadow
name = "Shadow"
name = SPECIES_SHADOW
name_plural = "shadows"
icobase = 'icons/mob/human_races/r_shadow.dmi'
@@ -1,5 +1,5 @@
/datum/species/skeleton
name = "Skeleton"
name = SPECIES_SKELETON
name_plural = "Skeletons"
icobase = 'icons/mob/human_races/r_skeleton.dmi'
primitive_form = "Monkey"
@@ -1,5 +1,5 @@
/datum/species/vox
name = "Vox"
name = SPECIES_VOX
name_plural = "Vox"
icobase = 'icons/mob/human_races/r_vox.dmi'
deform = 'icons/mob/human_races/r_def_vox.dmi'
@@ -13,7 +13,7 @@ var/list/wrapped_species_by_ref = list()
var/list/valid_transform_species = list()
var/monochromatic
var/default_form = "Human"
var/default_form = SPECIES_HUMAN
/datum/species/shapeshifter/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H)
return valid_transform_species
@@ -1,5 +1,5 @@
/datum/species/golem
name = "Golem"
name = SPECIES_GOLEM
name_plural = "golems"
icobase = 'icons/mob/human_races/r_golem.dmi'
@@ -33,7 +33,7 @@
*/
/datum/species/human/vatgrown
name = "Vatborn"
name = SPECIES_HUMAN_VATBORN
name_plural = "Vatborn"
blurb = "With cloning on the forefront of human scientific advancement, cheap mass production \
of bodies is a very real and rather ethically grey industry. Vat-grown or Vatborn humans tend to be \
@@ -1,5 +1,5 @@
/datum/species/monkey
name = "Monkey"
name = SPECIES_MONKEY
name_plural = "Monkeys"
blurb = "Ook."
@@ -10,7 +10,7 @@
blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi'
language = null
default_language = "Chimpanzee"
greater_form = "Human"
greater_form = SPECIES_HUMAN
mob_size = MOB_SMALL
has_fine_manipulation = 0
show_ssd = null
@@ -66,26 +66,26 @@
return "[lowertext(name)] ([rand(100,999)])"
/datum/species/monkey/tajaran
name = "Farwa"
name = SPECIES_MONKEY_TAJ
name_plural = "Farwa"
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
greater_form = "Tajaran"
greater_form = SPECIES_TAJ
default_language = "Farwa"
flesh_color = "#AFA59E"
base_color = "#333333"
tail = "farwatail"
/datum/species/monkey/skrell
name = "Neaera"
name = SPECIES_MONKEY_SKRELL
name_plural = "Neaera"
icobase = 'icons/mob/human_races/monkeys/r_neaera.dmi'
deform = 'icons/mob/human_races/monkeys/r_neaera.dmi'
greater_form = "Skrell"
greater_form = SPECIES_SKRELL
default_language = "Neaera"
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
@@ -93,14 +93,14 @@
tail = null
/datum/species/monkey/unathi
name = "Stok"
name = SPECIES_MONKEY_UNATHI
name_plural = "Stok"
icobase = 'icons/mob/human_races/monkeys/r_stok.dmi'
deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
tail = "stoktail"
greater_form = "Unathi"
greater_form = SPECIES_UNATHI
default_language = "Stok"
flesh_color = "#34AF10"
base_color = "#066000"
@@ -3,7 +3,7 @@ var/datum/species/shapeshifter/promethean/prometheans
// Species definition follows.
/datum/species/shapeshifter/promethean
name = "Promethean"
name = SPECIES_PROMETHEAN
name_plural = "Prometheans"
blurb = "What has Science done?"
show_ssd = "totally quiescent"
@@ -88,7 +88,7 @@ var/datum/species/shapeshifter/promethean/prometheans
/mob/living/carbon/human/proc/regenerate
)
valid_transform_species = list("Human", "Vatborn", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey")
valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_DIONA, SPECIES_TESHARI, SPECIES_MONKEY)
var/heal_rate = 0.5 // Temp. Regen per tick.
@@ -1,5 +1,5 @@
/datum/species/teshari
name = "Teshari"
name = SPECIES_TESHARI
name_plural = "Tesharii"
blurb = "A race of feathered raptors who developed alongside the Skrell, inhabiting \
the polar tundral regions outside of Skrell territory. Extremely fragile, they developed \
@@ -1,7 +1,7 @@
/datum/species/human
name = "Human"
name = SPECIES_HUMAN
name_plural = "Humans"
primitive_form = "Monkey"
primitive_form = SPECIES_MONKEY
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite)
blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
colonies across a wide swathe of space. They hold a wide range of forms and creeds.<br/><br/> \
@@ -20,17 +20,17 @@
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
/datum/species/human/get_bodytype(var/mob/living/carbon/human/H)
return "Human"
return SPECIES_HUMAN
/datum/species/unathi
name = "Unathi"
name = SPECIES_UNATHI
name_plural = "Unathi"
icobase = 'icons/mob/human_races/r_lizard.dmi'
deform = 'icons/mob/human_races/r_def_lizard.dmi'
tail = "sogtail"
tail_animation = 'icons/mob/species/unathi/tail.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
primitive_form = "Stok"
primitive_form = SPECIES_MONKEY_UNATHI
darksight = 3
ambiguous_genders = TRUE
//gluttonous = 1 //VOREStation Edit - Redundant
@@ -131,7 +131,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
/datum/species/tajaran
name = "Tajara"
name = SPECIES_TAJ
name_plural = "Tajaran"
icobase = 'icons/mob/human_races/r_tajaran.dmi'
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
@@ -147,7 +147,7 @@
metabolic_rate = 1.1
gluttonous = 1
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_SIIK)
secondary_langs = list(LANGUAGE_SIIK, LANGUAGE_AKHANI)
name_language = LANGUAGE_SIIK
species_language = LANGUAGE_SIIK
health_hud_intensity = 2.5
@@ -184,7 +184,7 @@
breath_heat_level_2 = 430 //Default 450
breath_heat_level_3 = 1000 //Default 1250
*/
primitive_form = "Farwa"
primitive_form = SPECIES_MONKEY_TAJ
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
@@ -217,11 +217,11 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
/datum/species/skrell
name = "Skrell"
name = SPECIES_SKRELL
name_plural = "Skrell"
icobase = 'icons/mob/human_races/r_skrell.dmi'
deform = 'icons/mob/human_races/r_def_skrell.dmi'
primitive_form = "Neaera"
primitive_form = SPECIES_MONKEY_SKRELL
unarmed_types = list(/datum/unarmed_attack/punch)
blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
the royals' or 'Light of the Crown'.<br/><br/>Skrell are a highly advanced and logical race who live under the rule \
@@ -290,7 +290,7 @@
return TRUE
/datum/species/diona
name = "Diona"
name = SPECIES_DIONA
name_plural = "Dionaea"
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
@@ -5,7 +5,7 @@
// Species definition follows.
/datum/species/shapeshifter/promethean/avatar
name = "Virtual Reality Avatar"
name = SPECIES_VR
name_plural = "Virtual Reality Avatars"
blurb = "A 3-dimensional representation of some sort of animate object used to display the presence and actions of some-one or -thing using a virtual reality program."
show_ssd = "eerily still"
@@ -57,7 +57,7 @@
shapeshifter_change_species("Virtual Reality [src.species.get_bodytype(src)]")
else
icon_state = "promethean"
shapeshifter_change_species("Virtual Reality Avatar")
shapeshifter_change_species(SPECIES_VR)
// enter_vr is called on the original mob, and puts the mind into the supplied vr mob
@@ -42,7 +42,7 @@
)
/datum/species/shapeshifter/promethean/avatar/tajaran
name = "Virtual Reality Tajara"
name = "Virtual Reality Tajaran"
icobase = 'icons/mob/human_races/r_tajaran.dmi'
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
tail = "tajtail"
@@ -2,7 +2,7 @@
for(var/mob/living/carbon/human/Q in living_mob_list)
if(self && ignore_self && self == Q)
continue
if(Q.species.name != "Xenomorph Queen")
if(Q.species.name != SPECIES_XENO_QUEEN)
continue
if(!Q.key || !Q.client || Q.stat)
continue
@@ -1,6 +1,6 @@
//Stand-in until this is made more lore-friendly.
/datum/species/xenos
name = "Xenomorph"
name = SPECIES_XENO
name_plural = "Xenomorphs"
default_language = "Xenomorph"
@@ -77,7 +77,7 @@
)
/datum/species/xenos/get_bodytype()
return "Xenomorph"
return SPECIES_XENO
/datum/species/xenos/get_random_name()
return "alien [caste_name] ([alien_number])"
@@ -164,7 +164,7 @@
*/
/datum/species/xenos/drone
name = "Xenomorph Drone"
name = SPECIES_XENO_DRONE
caste_name = "drone"
weeds_plasma_rate = 15
slowdown = 1
@@ -202,7 +202,7 @@
..()
/datum/species/xenos/hunter
name = "Xenomorph Hunter"
name = SPECIES_XENO_HUNTER
weeds_plasma_rate = 5
caste_name = "hunter"
slowdown = -2
@@ -230,7 +230,7 @@
)
/datum/species/xenos/sentinel
name = "Xenomorph Sentinel"
name = SPECIES_XENO_SENTINEL
weeds_plasma_rate = 10
caste_name = "sentinel"
slowdown = 0
@@ -261,7 +261,7 @@
/datum/species/xenos/queen
name = "Xenomorph Queen"
name = SPECIES_XENO_QUEEN
total_health = 250
weeds_heal_rate = 5
weeds_plasma_rate = 20
@@ -10,22 +10,22 @@ proc/create_new_xenomorph(var/alien_caste,var/target)
/mob/living/carbon/human/xdrone/New(var/new_loc)
h_style = "Bald"
faction = "xeno"
..(new_loc, "Xenomorph Drone")
..(new_loc, SPECIES_XENO_DRONE)
/mob/living/carbon/human/xsentinel/New(var/new_loc)
h_style = "Bald"
faction = "xeno"
..(new_loc, "Xenomorph Sentinel")
..(new_loc, SPECIES_XENO_SENTINEL)
/mob/living/carbon/human/xhunter/New(var/new_loc)
h_style = "Bald"
faction = "xeno"
..(new_loc, "Xenomorph Hunter")
..(new_loc, SPECIES_XENO_HUNTER)
/mob/living/carbon/human/xqueen/New(var/new_loc)
h_style = "Bald"
faction = "xeno"
..(new_loc, "Xenomorph Queen")
..(new_loc, SPECIES_XENO_QUEEN)
// I feel like we should generalize/condense down all the various icon-rendering antag procs.
/*----------------------------------------
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -159,12 +159,12 @@
return ..()
/mob/living/carbon/escape_buckle()
setClickCooldown(100)
if(!buckled) return
if(!restrained())
..()
else
setClickCooldown(100)
visible_message(
"<span class='danger'>[usr] attempts to unbuckle themself!</span>",
"<span class='warning'>You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)</span>"
+4 -4
View File
@@ -72,16 +72,16 @@
/mob/living/u_equip(obj/W as obj)
if (W == r_hand)
r_hand = null
update_inv_r_hand(0)
update_inv_r_hand()
else if (W == l_hand)
l_hand = null
update_inv_l_hand(0)
update_inv_l_hand()
else if (W == back)
back = null
update_inv_back(0)
update_inv_back()
else if (W == wear_mask)
wear_mask = null
update_inv_wear_mask(0)
update_inv_wear_mask()
return
/mob/living/get_equipped_item(var/slot)
-6
View File
@@ -111,15 +111,11 @@
/mob/living/proc/handle_stunned()
if(stunned)
AdjustStunned(-1)
if(!stunned)
update_icons()
return stunned
/mob/living/proc/handle_weakened()
if(weakened)
weakened = max(weakened-1,0)
if(!weakened)
update_icons()
return weakened
/mob/living/proc/handle_stuttering()
@@ -145,8 +141,6 @@
/mob/living/proc/handle_paralysed()
if(paralysis)
AdjustParalysis(-1)
if(!paralysis)
update_icons()
return paralysis
/mob/living/proc/handle_disabilities()
+36 -12
View File
@@ -1,6 +1,13 @@
/mob/living/New()
..()
//Prime this list if we need it.
if(has_huds)
add_overlay(backplane,TRUE) //Strap this on here, to block HUDs from appearing in rightclick menus: http://www.byond.com/forum/?post=2336679
hud_list = list()
hud_list.len = TOTAL_HUDS
make_hud_overlays()
//I'll just hang my coat up over here
dsoverlay = image('icons/mob/darksight.dmi',global_hud.darksight) //This is a secret overlay! Go look at the file, you'll see.
var/mutable_appearance/dsma = new(dsoverlay) //Changing like ten things, might as well.
@@ -13,6 +20,8 @@
/mob/living/Destroy()
dsoverlay.loc = null //I'll take my coat with me
dsoverlay = null
if(buckled)
buckled.unbuckle_mob(src, TRUE)
return ..()
//mob verbs are faster than object verbs. See mob/verb/examine.
@@ -209,10 +218,10 @@ default behaviour is:
/mob/living/verb/succumb()
set hidden = 1
if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable
src.adjustOxyLoss(src.health + src.getMaxHealth() * 2) // Deal 2x health in OxyLoss damage, as before but variable.
src.health = src.getMaxHealth() - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss()
src.death()
to_chat(src, "<font color='blue'>You have given up life and succumbed to death.</font>")
else
to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>")
/mob/living/proc/updatehealth()
if(status_flags & GODMODE)
@@ -900,6 +909,7 @@ default behaviour is:
resting = !resting
to_chat(src, "<span class='notice'>You are now [resting ? "resting" : "getting up"]</span>")
update_canmove()
/mob/living/proc/cannot_use_vents()
if(mob_size > MOB_SMALL)
@@ -1047,14 +1057,10 @@ default behaviour is:
canmove = 0
break
//Temporarily moved here from the various life() procs
//I'm fixing stuff incrementally so this will likely find a better home.
//It just makes sense for now. ~Carn
if( update_icon ) //forces a full overlay update
update_icon = 0
regenerate_icons()
else if( lying != lying_prev )
update_icons()
if(lying != lying_prev)
lying_prev = lying
update_transform()
return canmove
// Adds overlays for specific modifiers.
@@ -1218,4 +1224,22 @@ default behaviour is:
return UNDERWATER
else
return ..()
//Add an entry to overlays, assuming it exists
/mob/living/proc/apply_hud(cache_index, var/image/I)
hud_list[cache_index] = I
if((. = hud_list[cache_index]))
//underlays += .
add_overlay(.)
//Remove an entry from overlays, and from the list
/mob/living/proc/grab_hud(cache_index)
var/I = hud_list[cache_index]
if(I)
//underlays -= I
cut_overlay(I)
hud_list[cache_index] = null
return I
/mob/living/proc/make_hud_overlays()
return
@@ -56,3 +56,6 @@
var/glow_color = "#FFFFFF" // The color they're glowing!
var/see_invisible_default = SEE_INVISIBLE_LIVING
var/list/hud_list //Holder for health hud, status hud, wanted hud, etc (not like inventory slots)
var/has_huds = FALSE //Whether or not we should bother initializing the above list
+5 -4
View File
@@ -150,6 +150,7 @@ var/list/ai_verbs_default = list(
add_language(LANGUAGE_SOL_COMMON, 1)
add_language(LANGUAGE_UNATHI, 1)
add_language(LANGUAGE_SIIK, 1)
add_language(LANGUAGE_AKHANI, 1)
add_language(LANGUAGE_SKRELLIAN, 1)
add_language(LANGUAGE_SKRELLIANFAR, 0)
add_language(LANGUAGE_TRADEBAND, 1)
@@ -586,8 +587,8 @@ var/list/ai_verbs_default = list(
"female human",
"male unathi",
"female unathi",
"male tajara",
"female tajara",
"male tajaran",
"female tajaran",
"male tesharii",
"female tesharii",
"male skrell",
@@ -629,9 +630,9 @@ var/list/ai_verbs_default = list(
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holounam"))
if("female unathi")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holounaf"))
if("male tajara")
if("male tajaran")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotajm"))
if("female tajara")
if("female tajaran")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotajf"))
if("male tesharii")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotesm"))
@@ -473,16 +473,18 @@
id = "translator"
toggle(mob/living/silicon/pai/user)
// Sol Common, Tradeband and Gutter are added with New() and are therefore the current default, always active languages
// Sol Common, Tradeband, Terminus and Gutter are added with New() and are therefore the current default, always active languages
user.translator_on = !user.translator_on
if(user.translator_on)
user.add_language(LANGUAGE_UNATHI)
user.add_language(LANGUAGE_SIIK)
user.add_language(LANGUAGE_AKHANI)
user.add_language(LANGUAGE_SKRELLIAN)
user.add_language(LANGUAGE_SCHECHI)
else
user.remove_language(LANGUAGE_UNATHI)
user.remove_language(LANGUAGE_SIIK)
user.remove_language(LANGUAGE_AKHANI)
user.remove_language(LANGUAGE_SKRELLIAN)
user.remove_language(LANGUAGE_SCHECHI)
@@ -24,7 +24,7 @@
if(response == "Analyze")
if(loaded_item)
var/confirm = alert(user, "This will destroy the item inside forever. Are you sure?","Confirm Analyze","Yes","No")
if(confirm == "Yes") //This is pretty copypasta-y
if(confirm == "Yes" && !QDELETED(loaded_item)) //This is pretty copypasta-y
user << "You activate the analyzer's microlaser, analyzing \the [loaded_item] and breaking it down."
flick("portable_analyzer_scan", src)
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
@@ -23,7 +23,7 @@ var/global/list/robot_modules = list(
var/hide_on_manifest = 0
var/channels = list()
var/networks = list()
var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0, LANGUAGE_TERMINUS = 1)
var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_AKHANI = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0, LANGUAGE_TERMINUS = 1)
var/sprites = list()
var/can_be_pushed = 1
var/no_slip = 0
@@ -576,6 +576,7 @@ var/global/list/robot_modules = list(
LANGUAGE_SOL_COMMON = 1,
LANGUAGE_UNATHI = 1,
LANGUAGE_SIIK = 1,
LANGUAGE_AKHANI = 1,
LANGUAGE_SKRELLIAN = 1,
LANGUAGE_SKRELLIANFAR = 0,
LANGUAGE_ROOTLOCAL = 0,
@@ -8,6 +8,7 @@
LANGUAGE_TRADEBAND = 1,
LANGUAGE_UNATHI = 0,
LANGUAGE_SIIK = 0,
LANGUAGE_AKHANI = 0,
LANGUAGE_SKRELLIAN = 0,
LANGUAGE_SKRELLIANFAR = 0,
LANGUAGE_ROOTLOCAL = 0,
+1 -1
View File
@@ -7,7 +7,7 @@
var/list/stating_laws = list()// Channels laws are currently being stated on
var/obj/item/device/radio/common_radio
var/list/hud_list[10]
has_huds = TRUE
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
//Used in say.dm.
@@ -24,6 +24,8 @@
harm_intent_damage = 5
melee_damage_lower = 25
melee_damage_upper = 25
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
@@ -13,8 +13,12 @@
speed = 8
harm_intent_damage = 8
melee_damage_lower = 5
melee_damage_upper = 5
melee_damage_lower = 8
melee_damage_upper = 15
attack_armor_pen = 5 //It's a horror from beyond, I ain't gotta explain 5 AP
attack_sharp = 1
attack_edge = 1
attacktext = list("chomped")
attack_sound = 'sound/weapons/bite.ogg'
@@ -48,7 +52,7 @@
health = 160
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_lower = 13
melee_damage_upper = 25
/mob/living/simple_animal/hostile/creature/strong/cult
@@ -17,8 +17,10 @@
response_harm = "hits"
harm_intent_damage = 10
melee_damage_lower = 5
melee_damage_upper = 5
melee_damage_lower = 10
melee_damage_upper = 18
attack_armor_pen = 5 //It's a horror from beyond, I ain't gotta explain 5 AP
attacktext = list("gripped")
attack_sound = 'sound/hallucinations/growl1.ogg'
@@ -67,8 +69,8 @@
health = 100
harm_intent_damage = 5
melee_damage_lower = 7
melee_damage_upper = 20
melee_damage_lower = 13
melee_damage_upper = 28
/mob/living/simple_animal/hostile/faithless/strong/cult
@@ -63,8 +63,8 @@
desc = "A robot. It looks fragile and weak"
maxHealth = 1 LASERS_TO_KILL
health = 1 LASERS_TO_KILL
melee_damage_lower = 3
melee_damage_upper = 3
melee_damage_lower = 8
melee_damage_upper = 8
// This one has a semi-weak ranged attack.
/mob/living/simple_animal/hostile/hivebot/range
@@ -20,6 +20,7 @@
melee_damage_lower = 5
melee_damage_upper = 15
attack_armor_pen = 100 //It's a ghost/horror from beyond, I ain't gotta explain 100 AP
attacktext = list("drained the life from")
minbodytemp = 0
@@ -21,8 +21,11 @@
response_harm = "hits the"
harm_intent_damage = 10
melee_damage_lower = 3
melee_damage_upper = 3
melee_damage_lower = 5
melee_damage_upper = 5
attack_sharp = 1
environment_smash = 1
attacktext = list("bites")
@@ -2,7 +2,6 @@
/mob/living/simple_animal/hostile/bear
name = "space bear"
desc = "RawrRawr!!"
tt_desc = "Ursinae aetherius" //...bearspace? Maybe.
icon_state = "bear"
icon_living = "bear"
icon_dead = "bear_dead"
@@ -24,6 +23,8 @@
melee_damage_lower = 20
melee_damage_upper = 30
attack_sharp = 1
attack_edge = 1
//Space bears aren't affected by atmos.
min_oxy = 0
@@ -68,8 +68,11 @@
minbodytemp = 175
melee_damage_lower = 15
melee_damage_lower = 22
melee_damage_upper = 35
attack_armor_pen = 35
attack_sharp = 1
attack_edge = 1
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "pets"
@@ -29,8 +29,11 @@
response_disarm = "gently pushes aside"
response_harm = "punches"
melee_damage_lower = 15
melee_damage_upper = 20
melee_damage_lower = 18
melee_damage_upper = 30
attack_sharp = 1
attack_edge = 1
heat_damage_per_tick = 20
cold_damage_per_tick = 20
@@ -70,8 +73,8 @@ Nurse Family
maxHealth = 40
health = 40
melee_damage_lower = 5
melee_damage_upper = 10
melee_damage_lower = 8
melee_damage_upper = 15
poison_per_bite = 7
poison_type = "spidertoxin" // VOREStation edit, original is stoxin. (sleep toxins)
@@ -102,10 +105,11 @@ Nurse Family
maxHealth = 320
health = 320
melee_damage_lower = 15
melee_damage_upper = 25
poison_per_bite = 10
melee_damage_lower = 20
melee_damage_upper = 30
attack_armor_pen = 25
poison_per_bite = 10
egg_inject_chance = 10
pixel_x = -16
@@ -129,8 +133,8 @@ Nurse Family
cooperative = 1
shoot_range = 5
melee_damage_lower = 5
melee_damage_upper = 10
melee_damage_lower = 8
melee_damage_upper = 15
poison_per_bite = 2
poison_type = "psilocybin"
@@ -162,8 +166,8 @@ Nurse Family
maxHealth = 100
health = 100
melee_damage_lower = 5
melee_damage_upper = 20
melee_damage_lower = 8
melee_damage_upper = 25
poison_per_bite = 3
poison_type = "chloralhydrate"
@@ -222,9 +226,6 @@ Hunter Family
health = 120
move_to_delay = 4
melee_damage_lower = 10
melee_damage_upper = 20
poison_per_bite = 5
/mob/living/simple_animal/hostile/giant_spider/lurker
@@ -238,7 +239,7 @@ Hunter Family
health = 100
move_to_delay = 4
melee_damage_lower = 5
melee_damage_lower = 8
melee_damage_upper = 20
@@ -289,8 +290,8 @@ Guard Family
maxHealth = 210
health = 210
melee_damage_lower = 5
melee_damage_upper = 10
melee_damage_lower = 8
melee_damage_upper = 15
poison_chance = 20
poison_per_bite = 5
@@ -309,8 +310,8 @@ Guard Family
maxHealth = 175
health = 175
melee_damage_lower = 5
melee_damage_upper = 15
melee_damage_lower = 10
melee_damage_upper = 25
poison_chance = 30
poison_per_bite = 1
@@ -326,8 +327,8 @@ Guard Family
health = 210
taser_kill = 0 //It -is- the taser.
melee_damage_lower = 5
melee_damage_upper = 10
melee_damage_lower = 10
melee_damage_upper = 25
ranged = 1
projectilesound = 'sound/weapons/taser2.ogg'
@@ -349,8 +350,9 @@ Guard Family
health = 225
taser_kill = 0 //You will need more than a peashooter to kill the juggernaut.
melee_damage_lower = 10
melee_damage_upper = 20
melee_damage_lower = 25
melee_damage_upper = 40
attack_armor_pen = 15
poison_chance = 30
poison_per_bite = 0.5
@@ -380,9 +382,6 @@ Guard Family
maxHealth = 175
health = 175
melee_damage_lower = 15
melee_damage_upper = 20
poison_per_bite = 5
poison_type = "cryotoxin"
@@ -15,8 +15,9 @@
speed = 1
move_to_delay = 1
melee_damage_lower = 1
melee_damage_upper = 8
melee_damage_lower = 4
melee_damage_upper = 12
attack_sharp = 1 //Bleeds, but it shouldn't rip off a limb?
attacktext = list("gouged")
cold_damage_per_tick = 0
@@ -15,7 +15,10 @@
move_to_delay = 2
melee_damage_lower = 15
melee_damage_upper = 25
melee_damage_upper = 35
attack_armor_pen = 15
attack_sharp = 1
attack_edge = 1
attacktext = list("mauled")
cold_damage_per_tick = 0
@@ -14,8 +14,11 @@
speed = 1
move_to_delay = 1
melee_damage_lower = 3
melee_damage_upper = 12
melee_damage_lower = 12
melee_damage_upper = 28
attack_armor_pen = 5
attack_sharp = 1
attack_edge = 1
attacktext = list("gouged")
cold_damage_per_tick = 0

Some files were not shown because too many files have changed in this diff Show More