Merge remote-tracking branch 'upstream/master'
@@ -12,6 +12,7 @@
|
||||
#include "map_files\PubbyStation\PubbyStation.dmm"
|
||||
#include "map_files\BoxStation\BoxStation.dmm"
|
||||
#include "map_files\SyndieBoxStation\SyndieBoxStation.dmm"
|
||||
#include "map_files\LambdaStation\lambda.dmm"
|
||||
|
||||
#ifdef TRAVISBUILDING
|
||||
#include "templates.dm"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#define FORCE_MAP "_maps/lambdastation.json"
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"map_name": "Lambda Station",
|
||||
"map_path": "map_files/LambdaStation",
|
||||
"map_file": "lambda.dmm",
|
||||
"shuttles": {
|
||||
"cargo": "cargo_box",
|
||||
"ferry": "ferry_fancy",
|
||||
"whiteship": "whiteship_meta",
|
||||
"emergency": "emergency_meta"
|
||||
}
|
||||
}
|
||||
@@ -88,22 +88,6 @@
|
||||
|
||||
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
|
||||
|
||||
//gradients
|
||||
GLOBAL_LIST_INIT(hair_gradients, list(
|
||||
"None" = "none",
|
||||
"Fade (Up)" = "fadeup",
|
||||
"Fade (Down)" = "fadedown",
|
||||
"Fade Low (Up)" = "fadeup_low",
|
||||
"Bottom Flat" = "bottomflat",
|
||||
"Fade Low (Down)" = "fadedown_low",
|
||||
"Vertical Split" = "vsplit",
|
||||
"Reflected" = "reflected",
|
||||
"Reflected (Inverted)" = "reflected_inverse",
|
||||
"Reflected High" = "reflected_high",
|
||||
"Reflected High (Inverted)" = "reflected_inverse_high",
|
||||
"Wavy" = "wavy"
|
||||
))
|
||||
|
||||
//creates every subtype of prototype (excluding prototype) and adds it to list L.
|
||||
//if no list/L is provided, one is created.
|
||||
/proc/init_subtypes(prototype, list/L)
|
||||
@@ -121,7 +105,3 @@ GLOBAL_LIST_INIT(hair_gradients, list(
|
||||
for(var/path in subtypesof(prototype))
|
||||
L+= path
|
||||
return L
|
||||
|
||||
|
||||
//hair gradient list. Since it shouldn't need to have a seperate datum list.sanitize_inlist
|
||||
|
||||
|
||||
@@ -1112,7 +1112,7 @@ B --><-- A
|
||||
|
||||
/proc/get_random_station_turf()
|
||||
return safepick(get_area_turfs(pick(GLOB.the_station_areas)))
|
||||
|
||||
|
||||
/proc/get_safe_random_station_turf()
|
||||
for (var/i in 1 to 5)
|
||||
var/list/L = get_area_turfs(pick(GLOB.the_station_areas))
|
||||
@@ -1339,6 +1339,10 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
var/obj/structure/window/W = O
|
||||
if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR)
|
||||
return FALSE
|
||||
if(istype(O, /obj/structure/railing))
|
||||
var/obj/structure/railing/rail = O
|
||||
if(rail.ini_dir == dir_to_check || rail.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
#define UNTIL(X) while(!(X)) stoplag()
|
||||
@@ -1508,7 +1512,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
blocked |= typesof(/obj/item/reagent_containers/food/drinks/prospacillin,
|
||||
/obj/item/reagent_containers/food/drinks/diminicillin
|
||||
)
|
||||
|
||||
|
||||
return pick(subtypesof(/obj/item/reagent_containers/food/drinks) - blocked)
|
||||
|
||||
//For these two procs refs MUST be ref = TRUE format like typecaches!
|
||||
|
||||
@@ -36,4 +36,203 @@
|
||||
/obj/effect/turf_decal/tile/neutral
|
||||
name = "neutral corner"
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/turf_decal/trimline
|
||||
layer = TURF_PLATING_DECAL_LAYER
|
||||
alpha = 110
|
||||
icon_state = "trimline_box"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white
|
||||
color = "#FFFFFF"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/line
|
||||
name = "trim decal"
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red
|
||||
color = "#DE3A3A"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green
|
||||
color = "#9FED58"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue
|
||||
color = "#52B4E9"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow
|
||||
color = "#EFB341"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple
|
||||
color = "#D381C9"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown
|
||||
color = "#A46106"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
@@ -2,6 +2,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
|
||||
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \
|
||||
new/datum/stack_recipe("railing", /obj/structure/railing, 3, time = 18, window_checks = TRUE), \
|
||||
))
|
||||
|
||||
/obj/item/stack/rods
|
||||
@@ -25,7 +26,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
|
||||
/obj/item/stack/rods/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins to stuff \the [src] down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide!</span>")//it looks like theyre ur mum
|
||||
return BRUTELOSS
|
||||
|
||||
|
||||
/obj/item/stack/rods/Initialize(mapload, new_amount, merge = TRUE)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
/obj/structure/railing
|
||||
name = "railing"
|
||||
desc = "Basic railing meant to protect idiots like you from falling."
|
||||
icon = 'icons/obj/fluff.dmi'
|
||||
icon_state = "railing"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
climbable = TRUE
|
||||
///Initial direction of the railing.
|
||||
var/ini_dir
|
||||
|
||||
/obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch
|
||||
icon_state = "railing_corner"
|
||||
density = FALSE
|
||||
climbable = FALSE
|
||||
|
||||
/obj/structure/railing/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation))
|
||||
|
||||
/obj/structure/railing/Initialize()
|
||||
. = ..()
|
||||
ini_dir = dir
|
||||
|
||||
/obj/structure/railing/attackby(obj/item/I, mob/living/user, params)
|
||||
..()
|
||||
add_fingerprint(user)
|
||||
if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HELP)
|
||||
if(obj_integrity < max_integrity)
|
||||
if(!I.tool_start_check(user, amount=0))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You begin repairing [src]...</span>")
|
||||
if(I.use_tool(src, user, 40, volume=50))
|
||||
obj_integrity = max_integrity
|
||||
to_chat(user, "<span class='notice'>You repair [src].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
|
||||
return
|
||||
|
||||
/obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I)
|
||||
. = ..()
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>You cut apart the railing.</span>")
|
||||
I.play_tool_sound(src, 100)
|
||||
deconstruct()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/deconstruct(disassembled)
|
||||
. = ..()
|
||||
if(!loc) //quick check if it's qdeleted already.
|
||||
return
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 3)
|
||||
transfer_fingerprints_to(rod)
|
||||
qdel(src)
|
||||
///Implements behaviour that makes it possible to unanchor the railing.
|
||||
/obj/structure/railing/wrench_act(mob/living/user, obj/item/I)
|
||||
. = ..()
|
||||
if(flags_1&NODECONSTRUCT_1)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You begin to [anchored ? "unfasten the railing from":"fasten the railing to"] the floor...</span>")
|
||||
if(I.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
|
||||
setAnchored(!anchored)
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "fasten the railing to":"unfasten the railing from"] the floor.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
|
||||
. = ..()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/corner/CanPass()
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/CheckExit(atom/movable/mover, turf/target)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/corner/CheckExit()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/proc/can_be_rotated(mob/user,rotation_type)
|
||||
if(anchored)
|
||||
to_chat(user, "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
|
||||
var/target_dir = turn(dir, rotation_type == ROTATION_CLOCKWISE ? -90 : 90)
|
||||
|
||||
if(!valid_window_location(loc, target_dir)) //Expanded to include rails, as well!
|
||||
to_chat(user, "<span class='warning'>[src] cannot be rotated in that direction!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/proc/check_anchored(checked_anchored)
|
||||
if(anchored == checked_anchored)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/railing/proc/after_rotation(mob/user,rotation_type)
|
||||
air_update_turf(1)
|
||||
ini_dir = dir
|
||||
add_fingerprint(user)
|
||||
@@ -92,8 +92,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/hair_color = "000" //Hair color
|
||||
var/facial_hair_style = "Shaved" //Face hair type
|
||||
var/facial_hair_color = "000" //Facial hair color
|
||||
var/grad_style = "None" //Hair Gradient style
|
||||
var/grad_color = "#000000" //Hair Gradient color
|
||||
var/skin_tone = "caucasian1" //Skin color
|
||||
var/eye_color = "000" //Eye color
|
||||
var/wing_color = "fff" //Wing color
|
||||
@@ -474,9 +472,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=hair_style;task=input'>[hair_style]</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=previous_hair_style;task=input'><</a> <a href='?_src_=prefs;preference=next_hair_style;task=input'>></a><BR>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[hair_color];'> </span> <a href='?_src_=prefs;preference=hair;task=input'>Change</a><BR>"
|
||||
dat += "<h3>Hair Gradiant</h3>"
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=grad_style;task=input'>[grad_style]</a>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[grad_color];'> </span> <a href='?_src_=prefs;preference=grad;task=input'>Change</a><BR>"
|
||||
|
||||
dat += "<h3>Facial Hair Style</h3>"
|
||||
|
||||
@@ -1752,18 +1747,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(hair_style == "Tail Hair" && clientckey <> "quotefox")
|
||||
hair_style = "Bald"
|
||||
|
||||
if("grad_style")
|
||||
var/new_grad_style
|
||||
new_grad_style = input(user, "Choose your character's hair gradiant:", "Character Preference") as null|anything in GLOB.hair_gradients
|
||||
if(new_grad_style)
|
||||
grad_style = new_grad_style
|
||||
|
||||
if("grad")
|
||||
var/new_grad
|
||||
new_grad = input(user, "Choose your character's gradiant color:", "Character Preference", new_grad) as color|null
|
||||
if(new_grad)
|
||||
grad_color = sanitize_hexcolor(new_grad)
|
||||
|
||||
if("facial")
|
||||
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference","#"+facial_hair_color) as color|null
|
||||
if(new_facial)
|
||||
@@ -2720,13 +2703,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
organ_eyes.old_eye_color = eye_color
|
||||
character.hair_color = hair_color
|
||||
character.facial_hair_color = facial_hair_color
|
||||
character.grad_color = grad_color
|
||||
character.wing_color = wing_color
|
||||
|
||||
character.skin_tone = skin_tone
|
||||
character.hair_style = hair_style
|
||||
character.facial_hair_style = facial_hair_style
|
||||
character.grad_style = grad_style
|
||||
character.underwear = underwear
|
||||
|
||||
character.saved_underwear = underwear
|
||||
|
||||
@@ -311,12 +311,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["body_size"] >> body_size
|
||||
S["hair_color"] >> hair_color
|
||||
S["facial_hair_color"] >> facial_hair_color
|
||||
S["grad_color"] >> grad_color
|
||||
S["eye_color"] >> eye_color
|
||||
S["skin_tone"] >> skin_tone
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["grad_style_name"] >> grad_style
|
||||
S["underwear"] >> underwear
|
||||
S["undie_color"] >> undie_color
|
||||
S["undershirt"] >> undershirt
|
||||
@@ -482,7 +480,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
else
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
|
||||
grad_style = sanitize_inlist(grad_style, GLOB.hair_gradients, "None")
|
||||
underwear = sanitize_inlist(underwear, GLOB.underwear_list)
|
||||
undie_color = sanitize_hexcolor(undie_color, 3, 0, initial(undie_color))
|
||||
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
|
||||
@@ -492,7 +489,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
hair_color = sanitize_hexcolor(hair_color, 3, 0)
|
||||
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
|
||||
grad_color = sanitize_hexcolor(grad_color, 6, 1)
|
||||
eye_color = sanitize_hexcolor(eye_color, 3, 0)
|
||||
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
|
||||
wing_color = sanitize_hexcolor(wing_color, 3, FALSE, "#FFFFFF")
|
||||
@@ -562,12 +558,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["age"] , age)
|
||||
WRITE_FILE(S["hair_color"] , hair_color)
|
||||
WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
|
||||
WRITE_FILE(S["grad_color"] , grad_color)
|
||||
WRITE_FILE(S["eye_color"] , eye_color)
|
||||
WRITE_FILE(S["skin_tone"] , skin_tone)
|
||||
WRITE_FILE(S["hair_style_name"] , hair_style)
|
||||
WRITE_FILE(S["facial_style_name"] , facial_hair_style)
|
||||
WRITE_FILE(S["grad_style_name"] , grad_style)
|
||||
WRITE_FILE(S["underwear"] , underwear)
|
||||
WRITE_FILE(S["body_size"] , body_size)
|
||||
WRITE_FILE(S["undie_color"] , undie_color)
|
||||
|
||||
@@ -11,6 +11,20 @@
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/gloves/guncaster
|
||||
name = "fingerless leather gloves"
|
||||
desc = "Sturdy leather gloves with no fingertips, buckled at the wrist."
|
||||
icon_state = "guncaster"
|
||||
item_state = "guncaster"
|
||||
icon = 'hyperstation/icons/obj/clothing/gloves.dmi'
|
||||
alternate_worn_icon = 'hyperstation/icons/mobs/gloves.dmi'
|
||||
item_color = null //So they don't wash.
|
||||
transfer_prints = TRUE
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/gloves/botanic_leather
|
||||
name = "botanist's leather gloves"
|
||||
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm."
|
||||
|
||||
@@ -14,9 +14,6 @@
|
||||
var/facial_hair_color = "000"
|
||||
var/facial_hair_style = "Shaved"
|
||||
|
||||
var/grad_style = "none"
|
||||
var/grad_color = "#000000"
|
||||
|
||||
//Eye colour
|
||||
var/eye_color = "000"
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
|
||||
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
|
||||
var/wing_color
|
||||
var/grad_color
|
||||
|
||||
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
|
||||
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
|
||||
@@ -468,16 +467,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(OFFSET_FACE in H.dna.species.offset_features)
|
||||
hair_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FACE][1]
|
||||
hair_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2]
|
||||
if(H.grad_style)
|
||||
var/icon/grad_s = new/icon("icon" = 'icons/mob/hair_gradients.dmi', "icon_state" = GLOB.hair_gradients[H.grad_style])
|
||||
var/grad_f_color = null
|
||||
if(grad_color)
|
||||
grad_f_color = "#" + grad_color
|
||||
else
|
||||
grad_f_color = "#" + H.grad_color
|
||||
grad_s.Blend(grad_f_color, ICON_ADD)
|
||||
hair_overlay.filters = filter(type="layer", icon = grad_s, blend_mode = BLEND_MULTIPLY)
|
||||
|
||||
if(hair_overlay.icon)
|
||||
standing += hair_overlay
|
||||
|
||||
|
||||
@@ -129,6 +129,9 @@
|
||||
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
|
||||
/obj/item/clothing/mask/balaclava = 3,
|
||||
/obj/item/clothing/head/ushanka = 3,
|
||||
/obj/item/clothing/suit/gcvest = 2,
|
||||
/obj/item/clothing/suit/gcvest/alt = 2,
|
||||
/obj/item/clothing/gloves/guncaster = 4,
|
||||
/obj/item/clothing/under/soviet = 3,
|
||||
/obj/item/storage/belt/fannypack/black = 3,
|
||||
/obj/item/clothing/suit/jacket/letterman_syndie = 5,
|
||||
|
||||
@@ -374,7 +374,7 @@ ANNOUNCE_ADMIN_LOGOUT
|
||||
|
||||
## Map rotation
|
||||
## You should edit maps.txt to match your configuration when you enable this.
|
||||
MAPROTATION
|
||||
#MAPROTATION
|
||||
|
||||
## TG-style map rotation
|
||||
## By default, Citadel uses a more traditional method of map voting, where at the end of a round, players are given a full upfront vote.
|
||||
|
||||
@@ -40,5 +40,8 @@ endmap
|
||||
map multiz_debug
|
||||
endmap
|
||||
|
||||
map lambdastation
|
||||
endmap
|
||||
|
||||
map syndieboxstation
|
||||
endmap
|
||||
@@ -7,3 +7,19 @@
|
||||
icon = 'hyperstation/icons/obj/clothing/suits.dmi'
|
||||
alternate_worn_icon = 'hyperstation/icons/mobs/suits.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
|
||||
/obj/item/clothing/suit/gcvest
|
||||
name = "Guncaster's Vest"
|
||||
desc = "An open leather vest with battlescarred metal shoulderpads, perfect for hunting interdimensional wazards. Smells of gunpowder and plasma."
|
||||
icon_state = "guncaster"
|
||||
item_state = "guncaster"
|
||||
icon = 'hyperstation/icons/obj/clothing/suits.dmi'
|
||||
alternate_worn_icon = 'hyperstation/icons/mobs/suits.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/suit/gcvest/alt
|
||||
name = "Hellraider's Vest"
|
||||
desc = "An open leather vest with battlescarred metal shoulderpads, discovered in a dimensional anomaly. Smells of gunpowder and plasma."
|
||||
icon_state = "guncaster_alt"
|
||||
item_state = "guncaster_alt"
|
||||
|
Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 570 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 501 B After Width: | Height: | Size: 894 B |
|
Before Width: | Height: | Size: 552 B After Width: | Height: | Size: 777 B |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 59 KiB |
@@ -3,6 +3,11 @@
|
||||
category = SLOT_GLOVES
|
||||
path = /obj/item/clothing/gloves/fingerless
|
||||
|
||||
/datum/gear/gcgloves
|
||||
name = "Fingerless Leather Gloves"
|
||||
category = SLOT_GLOVES
|
||||
path = /obj/item/clothing/gloves/guncaster
|
||||
|
||||
/datum/gear/goldring
|
||||
name = "A gold ring"
|
||||
category = SLOT_GLOVES
|
||||
|
||||
@@ -209,6 +209,16 @@
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/polychromic/kromacrop
|
||||
|
||||
/datum/gear/gcvest
|
||||
name = "Guncaster's Vest"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/gcvest
|
||||
|
||||
/datum/gear/gcvestalt
|
||||
name = "Hellraider's Vest"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/gcvest/alt
|
||||
|
||||
/datum/gear/blacksuitjacket
|
||||
name = "Black Suit Jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
|
||||
// BEGIN_INCLUDE
|
||||
#include "_maps\_basemap.dm"
|
||||
#include "_maps\boxstation.dm"
|
||||
#include "code\_compile_options.dm"
|
||||
#include "code\world.dm"
|
||||
#include "code\__DEFINES\_globals.dm"
|
||||
@@ -1060,6 +1059,7 @@
|
||||
#include "code\game\objects\structures\noticeboard.dm"
|
||||
#include "code\game\objects\structures\petrified_statue.dm"
|
||||
#include "code\game\objects\structures\plasticflaps.dm"
|
||||
#include "code\game\objects\structures\railings.dm"
|
||||
#include "code\game\objects\structures\reflector.dm"
|
||||
#include "code\game\objects\structures\safe.dm"
|
||||
#include "code\game\objects\structures\showcase.dm"
|
||||
|
||||