Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 11/26/2017_ufo_poi

# Conflicts resolved:
#	maps/submaps/cave_submaps/cave_areas.dm
This commit is contained in:
Neerti
2017-11-26 12:09:55 -05:00
43 changed files with 946 additions and 52 deletions

View File

@@ -67,6 +67,15 @@
icon_state = "swat"
siemens_coefficient = 0.7
/obj/item/clothing/mask/gas/explorer
name = "explorer gas mask"
desc = "A military-grade gas mask that can be connected to an air supply."
icon_state = "explorer"
item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas")
armor = list(melee = 10, bullet = 5, laser = 5,energy = 5, bomb = 0, bio = 50, rad = 0)
body_parts_covered = HEAD|FACE|EYES
siemens_coefficient = 0.9
/obj/item/clothing/mask/gas/clown_hat
name = "clown wig and mask"
desc = "A true prankster's facial attire. A clown is incomplete without their wig and mask."

View File

@@ -96,6 +96,12 @@
desc = "A pair of winter boots. These ones are lined with brown fur, and their trim is ambrosia green"
icon_state = "winterboots_hydro"
/obj/item/clothing/shoes/boots/winter/explorer
name = "explorer winter boots"
desc = "Steel-toed winter boots for mining or exploration in hazardous environments. Very good at keeping toes warm and uncrushed."
icon_state = "explorer"
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
/obj/item/clothing/shoes/boots/tactical
name = "tactical boots"
desc = "Tan boots with extra padding and armor."

View File

@@ -770,6 +770,42 @@ obj/item/clothing/suit/storage/toggle/peacoat
name = "mining winter hood"
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/storage/hooded/explorer
name = "explorer suit"
desc = "An armoured suit for exploring harsh environments."
icon_state = "explorer"
item_state = "explorer"
flags = THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
hooded = TRUE
hoodtype = /obj/item/clothing/head/explorer
siemens_coefficient = 0.9
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50) // Inferior to sec vests in bullet/laser but better for environmental protection.
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/gun,
/obj/item/ammo_magazine,
/obj/item/weapon/melee,
/obj/item/weapon/material/knife,
/obj/item/weapon/tank,
/obj/item/device/radio,
/obj/item/weapon/pickaxe
)
/obj/item/clothing/head/explorer
name = "explorer hood"
desc = "An armoured hood for exploring harsh environments."
icon_state = "explorer"
body_parts_covered = HEAD
cold_protection = HEAD
flags = THICKMATERIAL
flags_inv = HIDEEARS | BLOCKHAIR
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50)
/obj/item/clothing/suit/varsity
name = "black varsity jacket"
desc = "A favorite of jocks everywhere from Sol to Nyx."

View File

@@ -31,6 +31,7 @@
/obj/item/clothing/suit/storage/hooded/proc/RemoveHood()
icon_state = "[initial(icon_state)]"
suittoggled = 0
hood.canremove = TRUE // This shouldn't matter anyways but just incase.
if(ishuman(hood.loc))
var/mob/living/carbon/H = hood.loc
H.unEquip(hood, 1)
@@ -53,6 +54,7 @@
else
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
suittoggled = 1
hood.canremove = FALSE
icon_state = "[initial(icon_state)]_t"
H.update_inv_wear_suit()
else

View File

@@ -812,3 +812,8 @@
desc = "A fluffy robe to keep you from showing off to the world."
icon_state = "bathrobe"
worn_state = "bathrobe"
/obj/item/clothing/under/explorer
desc = "A green uniform for operating in hazardous environments."
name = "explorer's jumpsuit"
icon_state = "explorer"

View File

@@ -197,3 +197,30 @@ var/list/wrapped_species_by_ref = list()
E.sync_colour_to_human(src)
regenerate_icons()
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors()
set name = "Select Hair Colors"
set category = "Abilities"
if(stat || world.time < last_special)
return
last_special = world.time + 50
var/new_hair = input("Please select a new hair color.", "Hair Colour") as color
if(!new_hair)
return
shapeshifter_set_hair_color(new_hair)
var/new_fhair = input("Please select a new facial hair color.", "Facial Hair Color") as color
if(!new_fhair)
return
shapeshifter_set_facial_color(new_fhair)
/mob/living/carbon/human/proc/shapeshifter_set_hair_color(var/new_hair)
change_hair_color(hex2num(copytext(new_hair, 2, 4)), hex2num(copytext(new_hair, 4, 6)), hex2num(copytext(new_hair, 6, 8)))
/mob/living/carbon/human/proc/shapeshifter_set_facial_color(var/new_fhair)
change_facial_hair_color(hex2num(copytext(new_fhair, 2, 4)), hex2num(copytext(new_fhair, 4, 6)), hex2num(copytext(new_fhair, 6, 8)))

View File

@@ -81,12 +81,12 @@ var/datum/species/shapeshifter/promethean/prometheans
/mob/living/carbon/human/proc/shapeshifter_select_shape,
/mob/living/carbon/human/proc/shapeshifter_select_colour,
/mob/living/carbon/human/proc/shapeshifter_select_hair,
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
/mob/living/carbon/human/proc/shapeshifter_select_gender,
/mob/living/carbon/human/proc/regenerate
)
valid_transform_species = list("Human", "Vatborn", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey")
monochromatic = 1
var/heal_rate = 0.5 // Temp. Regen per tick.

View File

@@ -2,6 +2,10 @@
iterations = 5
descriptor = "moon caves"
var/list/ore_turfs = list()
var/make_cracked_turfs = TRUE
/datum/random_map/automata/cave_system/no_cracks
make_cracked_turfs = FALSE
/datum/random_map/automata/cave_system/get_appropriate_path(var/value)
return
@@ -47,7 +51,7 @@
if(map[current_cell] == FLOOR_CHAR)
if(prob(90))
T.make_floor()
else
else if(make_cracked_turfs)
T.ChangeTurf(/turf/space/cracked_asteroid)
else
T.make_wall()

View File

@@ -54,62 +54,72 @@
if(!..(user, 2))
return
if(reagents && reagents.reagent_list.len)
user << "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
to_chat(user, "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>")
else
user << "<span class='notice'>It is empty.</span>"
to_chat(user, "<span class='notice'>It is empty.</span>")
if(!is_open_container())
user << "<span class='notice'>Airtight lid seals it completely.</span>"
to_chat(user, "<span class='notice'>Airtight lid seals it completely.</span>")
/obj/item/weapon/reagent_containers/glass/attack_self()
..()
if(is_open_container())
usr << "<span class = 'notice'>You put the lid on \the [src].</span>"
to_chat(usr, "<span class = 'notice'>You put the lid on \the [src].</span>")
flags ^= OPENCONTAINER
else
usr << "<span class = 'notice'>You take the lid off \the [src].</span>"
to_chat(usr, "<span class = 'notice'>You take the lid off \the [src].</span>")
flags |= OPENCONTAINER
update_icon()
/obj/item/weapon/reagent_containers/glass/do_surgery(mob/living/carbon/M, mob/living/user)
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
return ..()
afterattack(M, user, 1)
return 1
/obj/item/weapon/reagent_containers/glass/attack(mob/M as mob, mob/user as mob, def_zone)
if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
return ..()
if(standard_feed_mob(user, M))
return
return 0
/obj/item/weapon/reagent_containers/glass/standard_feed_mob(var/mob/user, var/mob/target)
if(!is_open_container())
to_chat(user, "<span class='notice'>You need to open \the [src] first.</span>")
return 1
if(user.a_intent == I_HURT)
return 1
return ..()
/obj/item/weapon/reagent_containers/glass/self_feed_message(var/mob/user)
to_chat(user, "<span class='notice'>You swallow a gulp from \the [src].</span>")
/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!is_open_container() || !proximity) //Is the container open & are they next to whatever they're clicking?
return //If not, do nothing.
return 1 //If not, do nothing.
for(var/type in can_be_placed_into) //Is it something it can be placed into?
if(istype(target, type))
return
return 1
if(standard_dispenser_refill(user, target)) //Are they clicking a water tank/some dispenser?
return
return 1
if(standard_pour_into(user, target)) //Pouring into another beaker?
return
if(user.a_intent == I_HURT) //Harm intent?
if(standard_splash_mob(user, target)) //If harm intent and can splash a mob, go ahead.
return
if(reagents && reagents.total_volume) //Otherwise? Splash the floor.
user << "<span class='notice'>You splash the solution onto [target].</span>"
if(user.a_intent == I_HURT)
if(standard_splash_mob(user,target))
return 1
if(reagents && reagents.total_volume)
to_chat(user, "<span class='notice'>You splash the solution onto [target].</span>") //They are on harm intent, aka wanting to spill it.
reagents.splash(target, reagents.total_volume)
return
return 1
..()
/obj/item/weapon/reagent_containers/glass/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
if(length(tmp_label) > 50)
user << "<span class='notice'>The label can be at most 50 characters long.</span>"
to_chat(user, "<span class='notice'>The label can be at most 50 characters long.</span>")
else if(length(tmp_label) > 10)
user << "<span class='notice'>You set the label.</span>"
to_chat(user, "<span class='notice'>You set the label.</span>")
label_text = tmp_label
update_name_label()
else
user << "<span class='notice'>You set the label to \"[tmp_label]\".</span>"
to_chat(user, "<span class='notice'>You set the label to \"[tmp_label]\".</span>")
label_text = tmp_label
update_name_label()
if(istype(W,/obj/item/weapon/storage/bag))
@@ -255,10 +265,10 @@
return
else if(istype(D, /obj/item/weapon/mop))
if(reagents.total_volume < 1)
user << "<span class='warning'>\The [src] is empty!</span>"
to_chat(user, "<span class='warning'>\The [src] is empty!</span>")
else
reagents.trans_to_obj(D, 5)
user << "<span class='notice'>You wet \the [D] in \the [src].</span>"
to_chat(user, "<span class='notice'>You wet \the [D] in \the [src].</span>")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
return
else
@@ -296,10 +306,10 @@ obj/item/weapon/reagent_containers/glass/bucket/wood
return
else if(istype(D, /obj/item/weapon/mop))
if(reagents.total_volume < 1)
user << "<span class='warning'>\The [src] is empty!</span>"
to_chat(user, "<span class='warning'>\The [src] is empty!</span>")
else
reagents.trans_to_obj(D, 5)
user << "<span class='notice'>You wet \the [D] in \the [src].</span>"
to_chat(user, "<span class='notice'>You wet \the [D] in \the [src].</span>")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
return
else

View File

@@ -1,17 +1,3 @@
/obj/item/device/gps
name = "relay positioning device"
desc = "Triangulates the approximate co-ordinates using a nearby satellite network."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
item_state = "locator"
origin_tech = list(TECH_MATERIAL = 2, TECH_DATA = 2, TECH_BLUESPACE = 2)
matter = list(DEFAULT_WALL_MATERIAL = 500)
w_class = ITEMSIZE_SMALL
/obj/item/device/gps/attack_self(var/mob/user as mob)
var/turf/T = get_turf(src)
user << "<span class='notice'>\icon[src] \The [src] flashes <i>[T.x]:[T.y]:[T.z]</i>.</span>"
/obj/item/device/measuring_tape
name = "measuring tape"
desc = "A coiled metallic tape used to check dimensions and lengths."