Merge branch 'master' of https://github.com/PolarisSS13/Polaris into flan

This commit is contained in:
Cerebulon
2022-10-09 18:56:50 +01:00
133 changed files with 11158 additions and 1478 deletions
+3
View File
@@ -11,6 +11,9 @@
//#define ZASDBG // Uncomment to turn on super detailed ZAS debugging that probably won't even compile.
#define MULTIZAS // Uncomment to turn on Multi-Z ZAS Support!
// Movement Compile Options
//#define CARDINAL_INPUT_ONLY // Uncomment to disable diagonal player movement (restore previous cardinal-moves-only behavior)
// Comment/Uncomment this to turn off/on shuttle code debugging logs
#define DEBUG_SHUTTLES
+4
View File
@@ -13,6 +13,10 @@
GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768))
/* Directions */
///All the cardinal direction bitflags.
#define ALL_CARDINALS (NORTH|SOUTH|EAST|WEST)
// datum_flags
#define DF_VAR_EDITED (1<<0)
#define DF_ISPROCESSING (1<<1)
+21
View File
@@ -0,0 +1,21 @@
// Bitflags for the move_keys_held bitfield.
#define NORTH_KEY (1<<0)
#define SOUTH_KEY (1<<1)
#define EAST_KEY (1<<2)
#define WEST_KEY (1<<3)
#define W_KEY (1<<4)
#define S_KEY (1<<5)
#define D_KEY (1<<6)
#define A_KEY (1<<7)
// Combine the held WASD and arrow keys together (OR) into byond N/S/E/W dir
#define MOVEMENT_KEYS_TO_DIR(MK) ((((MK)>>4)|(MK))&(ALL_CARDINALS))
// Bitflags for pressed modifier keys.
// Values chosen specifically to not conflict with dir bitfield, in case we want to smoosh them together.
#define CTRL_KEY (1<<8)
#define SHIFT_KEY (1<<9)
#define ALT_KEY (1<<10)
// Uncomment to get a lot of debug logging for movement keys.
// #define DEBUG_INPUT(A) to_world_log(A)
#define DEBUG_INPUT(A)
+2
View File
@@ -55,6 +55,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
// The numbers just define the ordering, they are meaningless otherwise.
#define INIT_ORDER_WEBHOOKS 50
#define INIT_ORDER_SQLITE 40
#define INIT_ORDER_INPUT 37
#define INIT_ORDER_CHEMISTRY 35
#define INIT_ORDER_SKYBOX 30
#define INIT_ORDER_MAPPING 25
@@ -108,3 +109,4 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define FIRE_PRIORITY_PROJECTILES 150
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_OVERLAYS 500
#define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost.
+41 -3
View File
@@ -44,6 +44,25 @@
if ("SOUTHEAST") return 6
if ("SOUTHWEST") return 10
// Turns a direction into text showing all bits set
/proc/dirs2text(direction)
if(!direction)
return ""
var/list/dirs = list()
if(direction & NORTH)
dirs += "NORTH"
if(direction & SOUTH)
dirs += "SOUTH"
if(direction & EAST)
dirs += "EAST"
if(direction & WEST)
dirs += "WEST"
if(direction & UP)
dirs += "UP"
if(direction & DOWN)
dirs += "DOWN"
return dirs.Join(" ")
// Converts an angle (degrees) into an ss13 direction
/proc/angle2dir(var/degree)
degree = (degree + 22.5) % 365 // 22.5 = 45 / 2
@@ -99,6 +118,25 @@
if (rights & R_EVENT) . += "[seperator]+EVENT"
return .
// Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ).
/proc/hex2rgb(hex)
// Strips the starting #, in case this is ever supplied without one, so everything doesn't break.
if(findtext(hex,"#",1,2))
hex = copytext(hex, 2)
return list(hex2rgb_r(hex), hex2rgb_g(hex), hex2rgb_b(hex))
// The three procs below require that the '#' part of the hex be stripped, which hex2rgb() does automatically.
/proc/hex2rgb_r(hex)
var/hex_to_work_on = copytext(hex,1,3)
return hex2num(hex_to_work_on)
/proc/hex2rgb_g(hex)
var/hex_to_work_on = copytext(hex,3,5)
return hex2num(hex_to_work_on)
/proc/hex2rgb_b(hex)
var/hex_to_work_on = copytext(hex,5,7)
return hex2num(hex_to_work_on)
// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
/proc/heat2color(temp)
@@ -318,9 +356,9 @@
switch(child)
if(/datum)
return null
if(/obj, /mob)
if(/obj || /mob)
return /atom/movable
if(/area, /turf)
if(/area || /turf)
return /atom
else
return /datum
@@ -339,4 +377,4 @@
error("File not found ([filename])")
catch(var/exception/E)
if(error_on_invalid_return)
error("Exception when loading file as string: [E]")
error("Exception when loading file as string: [E]")
+13
View File
@@ -0,0 +1,13 @@
SUBSYSTEM_DEF(input)
name = "Input"
wait = 1 // SS_TICKER means this runs every tick
init_order = INIT_ORDER_INPUT
flags = SS_TICKER
priority = FIRE_PRIORITY_INPUT
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
/datum/controller/subsystem/input/fire()
var/list/clients = GLOB.clients // Let's sing the list cache song
for(var/i in 1 to clients.len)
var/client/C = clients[i]
C?.keyLoop()
+32 -1
View File
@@ -23,6 +23,28 @@
name = "Boxers, green & blue striped"
icon_state = "boxers_green_and_blue"
/datum/category_item/underwear/bottom/boxers_red_and_yellow
name = "Boxers, red & yellow striped"
icon_state = "redyellow"
/datum/category_item/underwear/bottom/boxers_rwb
name = "Boxers, red, white & blue"
icon_state = "redwhiteblue"
/datum/category_item/underwear/bottom/boxers_stripe
name = "Boxers, striped"
icon_state = "stripe"
/datum/category_item/underwear/bottom/boxers_midway
name = "Boxers, midway"
icon_state = "midway"
has_color = TRUE
/datum/category_item/underwear/bottom/jockstrap
name = "Jockstrap"
icon_state = "jock"
has_color = TRUE
/datum/category_item/underwear/bottom/panties
name = "Panties"
icon_state = "panties"
@@ -45,6 +67,11 @@
icon_state = "panties_alt"
has_color = TRUE
/datum/category_item/underwear/bottom/boyshorts
name = "Boyshorts"
icon_state = "boyshorts"
has_color = TRUE
/datum/category_item/underwear/bottom/compression_shorts
name = "Compression shorts"
icon_state = "compression_shorts"
@@ -59,6 +86,10 @@
name = "Fishnets"
icon_state = "fishnet_lower"
/datum/category_item/underwear/bottom/sheer_slip
name = "Sheer slip"
icon_state = "sheer"
/datum/category_item/underwear/bottom/striped_panties
name = "Striped Panties"
icon_state = "striped_panties"
@@ -67,4 +98,4 @@
/datum/category_item/underwear/bottom/longjon
name = "Long John Bottoms"
icon_state = "ljonb"
has_color = TRUE
has_color = TRUE
+16 -1
View File
@@ -37,11 +37,26 @@
name = "Lacy bra, alt, stripe"
icon_state = "lacy_bra_alt_stripe"
/datum/category_item/underwear/top/bralette
name = "Bralette"
icon_state = "Bralette"
has_color = TRUE
/datum/category_item/underwear/top/halterneck_bra
name = "Halterneck bra"
icon_state = "halterneck_bra"
has_color = TRUE
/datum/category_item/underwear/top/straplessbra
name = "Strapless bra"
icon_state = "strapless_bra"
has_color = TRUE
/datum/category_item/underwear/top/tubebra
name = "Tube Bra"
icon_state = "tube_bra"
has_color = TRUE
/datum/category_item/underwear/top/tubetop
name = "Tube Top"
icon_state = "tubetop"
@@ -70,4 +85,4 @@
/datum/category_item/underwear/top/straplessbinder
name = "Binder Strapless"
icon_state = "straplessbinder_s"
icon_state = "straplessbinder_s"
+39 -2
View File
@@ -33,7 +33,6 @@
icon_state = "shirt_long_female_s"
has_color = TRUE
/datum/category_item/underwear/undershirt/fishnet_simple
name = "Fishnet shirt"
icon_state = "fishnet_simple"
@@ -58,6 +57,11 @@
icon_state = "tanktop_alt_fem_vneck"
has_color = TRUE
/datum/category_item/underwear/undershirt/tank_cropped
name = "Tank top, feminine, cropped"
icon_state = "tanktop_cropped"
has_color = TRUE
/datum/category_item/underwear/undershirt/tank_cropped_vneck
name = "Tank top, feminine, cropped & v-neck"
icon_state = "tanktop_cropped_vneck"
@@ -79,6 +83,10 @@
name = "Tank top, striped"
icon_state = "tank_stripes_s"
/datum/category_item/underwear/undershirt/tank_top_stripes_alt
name = "Tank top, striped alt"
icon_state = "tank_stripes_alt_s"
/datum/category_item/underwear/undershirt/tank_top_sun
name = "Tank top, sun"
icon_state = "tank_sun_s"
@@ -135,6 +143,14 @@
name = "Sport shirt, blue"
icon_state = "blueshirtsport_s"
/datum/category_item/underwear/undershirt/jersey_blue
name = "Sports jersey, blue"
icon_state = "jersey_blue"
/datum/category_item/underwear/undershirt/jersey_red
name = "Sports jersey, red"
icon_state = "jersey_red"
/datum/category_item/underwear/undershirt/shirt_tiedye
name = "Shirt, tiedye"
icon_state = "shirt_tiedye_s"
@@ -143,6 +159,27 @@
name = "Shirt, blue stripes"
icon_state = "shirt_stripes_s"
/datum/category_item/underwear/undershirt/shirt_band
name = "Shirt, band"
icon_state = "band"
/datum/category_item/underwear/undershirt/shirt_question
name = "Shirt, question mark"
icon_state = "shirt_question"
/datum/category_item/underwear/undershirt/shirt_peace
name = "Shirt, peace"
icon_state = "peace"
/datum/category_item/underwear/undershirt/shirt_alien
name = "Shirt, little grey man"
icon_state = "shirt_alien"
/datum/category_item/underwear/undershirt/shirt_skull
name = "Shirt, red with skull"
icon_state = "shirt_skull"
/datum/category_item/underwear/undershirt/bowling
name = "Bowling Shirt, Red"
icon_state = "bowling"
@@ -206,4 +243,4 @@
/datum/category_item/underwear/undershirt/dress_shirt
name = "Dress shirt, masculine"
icon_state = "undershirt_dress"
has_color = TRUE
has_color = TRUE
+82 -6
View File
@@ -29,9 +29,9 @@
/obj/item/soap
name = "soap"
desc = "A cheap bar of soap. Doesn't smell."
desc = "A cheap bar of soap. Smells of lye."
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/soap.dmi'
icon_state = "soap"
flags = NOCONDUCT
w_class = ITEMSIZE_SMALL
@@ -41,20 +41,96 @@
throw_range = 20
/obj/item/soap/nanotrasen
desc = "A NanoTrasen-brand bar of soap. Smells of phoron."
desc = "A NanoTrasen-brand bar of soap. Smells of phoron, a years-old marketing gimmick."
icon_state = "soapnt"
/obj/item/soap/deluxe
icon_state = "soapdeluxe"
/obj/item/soap/deluxe/Initialize()
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
desc = "A deluxe NanoLux brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
. = ..()
/obj/item/soap/syndie
desc = "An untrustworthy bar of soap. Smells of fear."
desc = "An dubious bar of soap. Smells of lyes."
icon_state = "soapsyndie"
/obj/item/soap/space_soap
desc = "Smells like hot metal and walnuts."
icon_state = "space_soap"
/obj/item/soap/water_soap
desc = "Smells like chlorine."
icon_state = "water_soap"
/obj/item/soap/fire_soap
desc = "Smells like a campfire."
icon_state = "fire_soap"
/obj/item/soap/rainbow_soap
desc = "Smells sickly sweet."
icon_state = "rainbow_soap"
/obj/item/soap/diamond_soap
desc = "Smells like saffron and vanilla."
icon_state = "diamond_soap"
/obj/item/soap/uranium_soap
desc = "Smells not great... Not terrible."
icon_state = "uranium_soap"
/obj/item/soap/silver_soap
desc = "Smells like birch and amaranth."
icon_state = "silver_soap"
/obj/item/soap/brown_soap
desc = "Smells like cinnamon and cognac."
icon_state = "brown_soap"
/obj/item/soap/white_soap
desc = "Smells like nutmeg and oats."
icon_state = "white_soap"
/obj/item/soap/grey_soap
desc = "Smells like bergamot and lilies."
icon_state = "grey_soap"
/obj/item/soap/pink_soap
desc = "Smells like bubblegum."
icon_state = "pink_soap"
/obj/item/soap/purple_soap
desc = "Smells like lavender."
icon_state = "purple_soap"
/obj/item/soap/blue_soap
desc = "Smells like cardamom."
icon_state = "blue_soap"
/obj/item/soap/cyan_soap
desc = "Smells like bluebells and peaches."
icon_state = "cyan_soap"
/obj/item/soap/green_soap
desc = "Smells like a freshly mowed lawn."
icon_state = "green_soap"
/obj/item/soap/yellow_soap
desc = "Smells like citron and ginger."
icon_state = "yellow_soap"
/obj/item/soap/orange_soap
desc = "Smells like oranges and dark chocolate."
icon_state = "orange_soap"
/obj/item/soap/red_soap
desc = "Smells like cherries."
icon_state = "red_soap"
/obj/item/soap/golden_soap
desc = "Smells like honey."
icon_state = "golden_soap"
/obj/item/bikehorn
name = "bike horn"
desc = "A horn off of a bicycle."
@@ -354,7 +430,7 @@
if(B.rped_rating() > lowest_rating)
continue
remove_from_storage(B, T)
/obj/item/stock_parts
name = "stock part"
desc = "What?"
+6 -5
View File
@@ -1,6 +1,6 @@
/atom/movable
layer = OBJ_LAYER
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE
glide_size = 8
var/last_move = null //The direction the atom last moved
var/anchored = 0
@@ -103,7 +103,8 @@
var/dest_z = get_z(newloc)
// Do The Move
glide_for(movetime)
if(movetime)
glide_for(movetime) // First attempt, lets let the diag do it.
loc = newloc
. = TRUE
@@ -145,7 +146,7 @@
// place due to a Crossed, Bumped, etc. call will interrupt
// the second half of the diagonal movement, or the second attempt
// at a first half if step() fails because we hit something.
glide_for(movetime)
glide_for(movetime * 2)
if (direct & NORTH)
if (direct & EAST)
if (step(src, NORTH) && moving_diagonally)
@@ -198,7 +199,7 @@
// If we moved, call Moved() on ourselves
if(.)
Moved(oldloc, direct, FALSE, movetime)
Moved(oldloc, direct, FALSE, movetime ? movetime : ( (TICKS2DS(WORLD_ICON_SIZE/glide_size)) * (moving_diagonally ? (0.5) : 1) ) )
// Update timers/cooldown stuff
move_speed = world.time - l_move_time
@@ -697,4 +698,4 @@
return selfimage
/atom/movable/proc/get_cell()
return
return
+3
View File
@@ -198,6 +198,9 @@
open_sound_powered = 'sound/machines/door/space1o.ogg'
close_sound_powered = 'sound/machines/door/space1c.ogg'
/obj/machinery/door/airlock/external/white
icon = 'icons/obj/doors/Doorextwhite.dmi'
/obj/machinery/door/airlock/external/glass/bolted
icon_state = "door_locked" // So it looks visibly bolted in map editor
locked = 1
+8 -5
View File
@@ -622,7 +622,7 @@
name = "Nonstandard suit cycler"
model_text = "Nonstandard"
req_access = list(access_syndicate)
departments = list("Mercenary", "Charring","No Change")
departments = list("Mercenary", "Light Boarding", "Charring","No Change")
can_repair = 1
/obj/machinery/suit_cycler/exploration
@@ -1100,6 +1100,9 @@
if("Charring")
parent_helmet = /obj/item/clothing/head/helmet/space/void/merc/fire
parent_suit = /obj/item/clothing/suit/space/void/merc/fire
if("Light Boarding")
parent_helmet = /obj/item/clothing/head/helmet/space/void/boarding_ops
parent_suit = /obj/item/clothing/suit/space/void/boarding_ops
if("Gem-Encrusted", "Wizard")
parent_helmet = /obj/item/clothing/head/helmet/space/void/wizard
parent_suit = /obj/item/clothing/suit/space/void/wizard
@@ -1149,9 +1152,9 @@
var/suit_check = ((suit!=null && (initial(parent_suit.icon_state) in icon_states(suit.sprite_sheets_obj[target_species],1))) || suit==null)
var/suit_helmet_check = ((suit!=null && suit.helmet!=null && (initial(parent_helmet.icon_state) in icon_states(suit.helmet.sprite_sheets_obj[target_species],1))) || suit==null || suit.helmet==null)
if(helmet_check && suit_check && suit_helmet_check)
if(helmet)
if(helmet)
helmet.refit_for_species(target_species)
if(suit)
if(suit)
suit.refit_for_species(target_species)
if(suit.helmet)
suit.helmet.refit_for_species(target_species)
@@ -1160,9 +1163,9 @@
T.visible_message("[bicon(src)]<span class='warning'>Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.</span>")
return
else
if(helmet)
if(helmet)
helmet.refit_for_species(target_species)
if(suit)
if(suit)
suit.refit_for_species(target_species)
if(suit.helmet)
suit.helmet.refit_for_species(target_species)
@@ -1,7 +1,6 @@
/obj/item/grenade/chem_grenade
name = "grenade casing"
icon_state = "chemg"
item_state = "grenade"
desc = "A hand made chemical grenade."
w_class = ITEMSIZE_SMALL
force = 2.0
@@ -193,6 +192,7 @@
name = "large chem grenade"
desc = "An oversized grenade that affects a larger area."
icon_state = "large_grenade"
item_state = "largechemg"
allowed_containers = list(/obj/item/reagent_containers/glass)
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
affected_area = 4
@@ -305,4 +305,4 @@
beakers += B1
beakers += B2
icon_state = initial(icon_state) +"_locked"
icon_state = initial(icon_state) +"_locked"
@@ -1,6 +1,5 @@
/obj/item/grenade/empgrenade
name = "emp grenade"
icon = 'icons/obj/device.dmi'
pickup_sound = 'sound/items/pickup/device.ogg'
drop_sound = 'sound/items/drop/device.ogg'
icon_state = "emp"
@@ -21,8 +20,9 @@
name = "low yield emp grenade"
desc = "A weaker variant of the EMP grenade"
icon_state = "lyemp"
item_state = "lyemp"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
emp_heavy = 1
emp_med = 2
emp_light = 3
emp_long = 4
emp_long = 4
+65 -4
View File
@@ -309,10 +309,30 @@
icon_state = "soap"
/obj/random/soap/item_to_spawn()
return pick(prob(3);/obj/item/soap,
prob(2);/obj/item/soap/nanotrasen,
prob(2);/obj/item/soap/deluxe,
prob(1);/obj/item/soap/syndie)
return pick(/obj/item/soap,
/obj/item/soap/nanotrasen,
/obj/item/soap/deluxe,
/obj/item/soap/syndie,
/obj/item/soap/space_soap,
/obj/item/soap/space_soap,
/obj/item/soap/water_soap,
/obj/item/soap/fire_soap,
/obj/item/soap/rainbow_soap,
/obj/item/soap/diamond_soap,
/obj/item/soap/uranium_soap,
/obj/item/soap/silver_soap,
/obj/item/soap/brown_soap,
/obj/item/soap/white_soap,
/obj/item/soap/grey_soap,
/obj/item/soap/pink_soap,
/obj/item/soap/purple_soap,
/obj/item/soap/blue_soap,
/obj/item/soap/cyan_soap,
/obj/item/soap/green_soap,
/obj/item/soap/yellow_soap,
/obj/item/soap/orange_soap,
/obj/item/soap/red_soap,
/obj/item/soap/golden_soap)
/obj/random/drinkbottle
name = "random drink"
@@ -969,3 +989,44 @@
/obj/item/reagent_containers/food/drinks/glass2/coffeemug/green/dark,
/obj/item/reagent_containers/food/drinks/glass2/coffeemug/rainbow,
/obj/item/reagent_containers/food/drinks/glass2/coffeemug/metal)
/obj/random/helmet
name = "Random Armour Helmet"
desc = "This is a random helmet that protects your head."
/obj/random/helmet/item_to_spawn()
return pick(prob(5);/obj/item/clothing/head/helmet/space/void/boarding_ops/mk2,
prob(5);/obj/item/clothing/head/helmet/space/void/boarding_ops,
prob(20);/obj/item/clothing/head/helmet/riot/sifcop,
prob(20);/obj/item/clothing/head/helmet,
prob(10);/obj/item/clothing/head/helmet/bulletproof,
prob(10);/obj/item/clothing/head/helmet/flexitac,
prob(15);/obj/item/clothing/head/helmet/solgov,
prob(15);/obj/item/clothing/head/helmet/pcrc,
prob(10);/obj/item/clothing/head/helmet/space/void/scg,
prob(10);/obj/item/clothing/head/helmet/tac,
prob(10);/obj/item/clothing/head/helmet/merc,
prob(15);/obj/item/clothing/head/helmet/riot,
prob(10);/obj/item/clothing/head/helmet/space/void/grayson,
prob(10);/obj/item/clothing/head/helmet/space/void/hedberg,
prob(10);/obj/item/clothing/head/helmet/heavy,
prob(10);/obj/item/clothing/head/helmet/heavy/knight,
prob(5);/obj/item/clothing/head/helmet/newkyoto,
prob(5);/obj/item/clothing/head/helmet/space/void/scg/heavy
)
/obj/random/helmet/highend
desc = "This is a random actually good helmet that protects your head."
/obj/random/helmet/highend/item_to_spawn()
return pick(
prob(10);/obj/item/clothing/head/helmet/bulletproof,
prob(10);/obj/item/clothing/head/helmet/space/void/scg,
prob(10);/obj/item/clothing/head/helmet/merc,
prob(10);/obj/item/clothing/head/helmet/space/void/grayson,
prob(10);/obj/item/clothing/head/helmet/space/void/hedberg,
prob(10);/obj/item/clothing/head/helmet/heavy,
prob(10);/obj/item/clothing/head/helmet/heavy/knight,
prob(5);/obj/item/clothing/head/helmet/newkyoto,
prob(5);/obj/item/clothing/head/helmet/space/void/scg/heavy
)
+25 -1
View File
@@ -92,6 +92,26 @@
prob(5);list(
/obj/item/clothing/suit/space/void/pilot,
/obj/item/clothing/head/helmet/space/void/pilot
),
prob(2);list(
/obj/item/clothing/suit/space/void/boarding_ops,
/obj/item/clothing/head/helmet/space/void/boarding_ops
),
prob(2);list(
/obj/item/clothing/suit/space/void/boarding_ops,
/obj/item/clothing/head/helmet/space/void/boarding_ops/mk2
),
prob(2);list(
/obj/item/clothing/suit/space/void/scg,
/obj/item/clothing/head/helmet/space/void/scg
),
prob(2);list(
/obj/item/clothing/suit/space/void/scg,
/obj/item/clothing/head/helmet/space/void/scg/heavy
),
prob(1);list(
/obj/item/clothing/suit/space/void/pearlshield,
/obj/item/clothing/head/helmet/space/void/pearlshield
)
)
@@ -110,6 +130,10 @@
prob(1);list(
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt
),
prob(1);list(
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/grayson
)
)
@@ -257,4 +281,4 @@
prob(5);/obj/item/rig/eva,
prob(4);/obj/item/rig/light/stealth,
prob(3);/obj/item/rig/hazard,
prob(1);/obj/item/rig/merc/empty)
prob(1);/obj/item/rig/merc/empty)
+8 -8
View File
@@ -2,7 +2,7 @@
name = "extinguisher cabinet"
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
icon = 'icons/obj/closet.dmi'
icon_state = "extinguisher_closed"
icon_state = "fire_cabinet"
layer = ABOVE_WINDOW_LAYER
anchored = 1
density = 0
@@ -14,9 +14,9 @@
if(building)
pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27)
pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0
update_icon()
else
has_extinguisher = new/obj/item/extinguisher(src)
update_icon()
/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user)
if(isrobot(user))
@@ -74,13 +74,13 @@
update_icon()
/obj/structure/extinguisher_cabinet/update_icon()
if(!opened)
icon_state = "extinguisher_closed"
return
cut_overlays()
if(has_extinguisher)
if(istype(has_extinguisher, /obj/item/extinguisher/mini))
icon_state = "extinguisher_mini"
add_overlay("extinguisher_mini")
else
icon_state = "extinguisher_full"
add_overlay("extinguisher_full")
if(opened)
add_overlay("fire_cabinet_door_open")
else
icon_state = "extinguisher_empty"
add_overlay("fire_cabinet_door_closed")
+18 -7
View File
@@ -1,10 +1,9 @@
//I still dont think this should be a closet but whatever
/obj/structure/fireaxecabinet
name = "fire axe cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
var/obj/item/material/twohanded/fireaxe/fireaxe
icon = 'icons/obj/closet.dmi' //Not bothering to move icons out for now. But its dumb still.
icon_state = "fireaxe1000"
icon = 'icons/obj/axecabinet.dmi'
icon_state = "fireaxe"
layer = ABOVE_WINDOW_LAYER
anchored = 1
density = 0
@@ -16,6 +15,7 @@
/obj/structure/fireaxecabinet/Initialize()
. = ..()
fireaxe = new /obj/item/material/twohanded/fireaxe()
update_icon()
/obj/structure/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
//..() //That's very useful, Erro
@@ -179,8 +179,19 @@
to_chat(user, "<span class='notice'>Cabinet unlocked.</span>")
return
/obj/structure/fireaxecabinet/update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
var/hasaxe = 0
/obj/structure/fireaxecabinet/update_icon()
cut_overlays()
if(fireaxe)
hasaxe = 1
icon_state = text("fireaxe[][][][]",hasaxe,open,hitstaken,smashed)
add_overlay("axe")
if(smashed)
add_overlay("glass_broken")
if(locked)
add_overlay("locked")
else
add_overlay("unlocked")
if(open)
add_overlay("glass_raised")
else
add_overlay("glass")
if(hitstaken)
add_overlay("crack[hitstaken]")
+454 -24
View File
@@ -7,34 +7,25 @@
w_class = ITEMSIZE_NORMAL
/obj/structure/sign/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
qdel(src)
return
if(3.0)
qdel(src)
return
else
return
qdel(src)
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction
/obj/structure/sign/attackby(obj/item/tool, mob/user) //deconstruction
if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double))
playsound(src, tool.usesound, 50, 1)
to_chat(user, "You unfasten the sign with your [tool].")
var/obj/item/sign/S = new(src.loc)
S.name = name
S.desc = desc
S.icon_state = icon_state
//var/icon/I = icon('icons/obj/decals.dmi', icon_state)
//S.icon = I.Scale(24, 24)
S.sign_state = icon_state
S.original_type = type
qdel(src)
unfasten(user)
else ..()
/obj/structure/sign/proc/unfasten(mob/user)
user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You unfasten \the [src]."))
var/obj/item/sign/S = new(src.loc)
S.name = name
S.desc = desc
S.icon_state = icon_state
S.sign_state = icon_state
S.original_type = type
qdel(src)
/obj/item/sign
name = "sign"
desc = ""
@@ -1148,4 +1139,443 @@
/obj/structure/sign/chemdiamond
name = "\improper HAZARDOUS CHEMICALS sign"
desc = "A sign that warns of potentially hazardous chemicals nearby, indicating health risk, flash point, and reactivity."
icon_state = "chemdiamond"
icon_state = "chemdiamond"
//Here be Flags
//Flag item
/obj/item/flag
name = "boxed flag"
desc = "A flag neatly folded into a wooden container."
icon = 'icons/obj/flags.dmi'
icon_state = "flag_boxed"
var/flag_path = "flag"
var/flag_size = 0
//Flag on wall
/obj/structure/sign/flag
name = "blank flag"
desc = "Nothing to see here."
icon = 'icons/obj/flags.dmi'
icon_state = "flag"
var/icon/ripped_outline = icon('icons/obj/flags.dmi', "ripped")
var/obj/structure/sign/flag/linked_flag //For double flags
var/obj/item/flag/flagtype //For returning your flag
var/ripped = FALSE //If we've been torn down
/obj/structure/sign/flag/blank
name = "blank banner"
desc = "A blank white flag."
icon_state = "flag"
flagtype = /obj/item/flag
/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
if (!adjacent)
return
if((!iswall(A) && !istype(A, /obj/structure/window)) || !isturf(user.loc))
to_chat(user, SPAN_WARNING("You can't place this here!"))
return
var/placement_dir = get_dir(user, A)
if (!(placement_dir in cardinal))
to_chat(user, SPAN_WARNING("You must stand directly in front of the location you wish to place that on."))
return
var/obj/structure/sign/flag/P = new(user.loc)
switch(placement_dir)
if(NORTH)
P.pixel_y = 32
if(SOUTH)
P.pixel_y = -32
if(EAST)
P.pixel_x = 32
if(WEST)
P.pixel_x = -32
P.dir = placement_dir
if(flag_size)
P.icon_state = "[flag_path]_l"
var/obj/structure/sign/flag/P2 = new(user.loc)
P.linked_flag = P2
P2.linked_flag = P
P2.icon_state = "[flag_path]_r"
P2.dir = P.dir
switch(P2.dir)
if(NORTH)
P2.pixel_y = P.pixel_y
P2.pixel_x = 32
if(SOUTH)
P2.pixel_y = P.pixel_y
P2.pixel_x = 32
if(EAST)
P2.pixel_x = P.pixel_x
P2.pixel_y = -32
if(WEST)
P2.pixel_x = P.pixel_x
P2.pixel_y = 32
P2.name = name
P2.desc = desc
P2.description_info = description_info
P2.description_fluff = description_fluff
P2.flagtype = type
else
P.icon_state = "[flag_path]"
P.name = name
P.desc = desc
P.description_info = description_info
P.description_fluff = description_fluff
P.flagtype = type
qdel(src)
/obj/structure/sign/flag/Destroy()
if(linked_flag?.linked_flag == src) //Catches other instances where one half might be destroyed, say by a broken wall, to avoid runtimes.
linked_flag.linked_flag = null //linked_flag
. = ..()
/obj/structure/sign/flag/ex_act(severity)
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(50))
qdel(src)
else
rip()
if(3)
rip()
/obj/structure/sign/flag/unfasten(mob/user)
if(!ripped)
user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src] and folds it back up."), SPAN_NOTICE("You unfasten \the [src] and fold it back up."))
var/obj/item/flag/F = new flagtype(get_turf(user))
user.put_in_hands(F)
else
user.visible_message(SPAN_NOTICE("\The [user] unfastens the tattered remnants of \the [src]."), SPAN_NOTICE("You unfasten the tattered remains of \the [src]."))
if(linked_flag)
qdel(linked_flag) //otherwise you're going to get weird duping nonsense
qdel(src)
/obj/structure/sign/flag/attack_hand(mob/user)
if(alert("Do you want to rip \the [src] from its place?","You think...","Yes","No") == "Yes")
if(!Adjacent(user)) //Cannot bring up dialogue and walk away
return FALSE
visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!" ))
playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1)
add_fingerprint(user)
rip()
/obj/structure/sign/flag/proc/rip(var/rip_linked = TRUE)
var/icon/I = new('icons/obj/flags.dmi', icon_state)
var/icon/mask = new('icons/obj/flags.dmi', "ripped")
I.AddAlphaMask(mask)
icon = I
name = "ripped flag"
desc = "You can't make out anything from the flag's original print. It's ruined."
ripped = TRUE
if(linked_flag && rip_linked)
linked_flag.rip(FALSE) //Prevents an infinite ripping loop
/obj/structure/sign/flag/attackby(obj/item/W, mob/user)
..()
if(istype(W, /obj/item/flame/lighter) || istype(W, /obj/item/weldingtool))
visible_message(SPAN_WARNING("\The [user] starts to burn \the [src] down!"))
if(!do_after(user, 2 SECONDS))
return FALSE
visible_message(SPAN_WARNING("\The [user] burns \the [src] down!"))
playsound(src.loc, 'sound/items/cigs_lighters/cig_light.ogg', 100, 1)
new /obj/effect/decal/cleanable/ash(src.loc)
if(linked_flag)
qdel(linked_flag)
qdel(src)
return TRUE
/obj/structure/sign/flag/blank/left
icon_state = "flag_l"
/obj/structure/sign/flag/blank/right
icon_state = "flag_r"
//SolGov
/obj/structure/sign/flag/sol
name = "Solar Confederate Government flag"
desc = "The bright blue flag of the Solar Confederate Government."
icon_state = "solgov"
flagtype = /obj/item/flag/sol
/obj/structure/sign/flag/sol/left
icon_state = "solgov_l"
/obj/structure/sign/flag/sol/right
icon_state = "solgov_r"
/obj/item/flag/sol
name = "Solar Confederate Government flag"
desc = "The bright blue flag of the Solar Confederate Government."
flag_path = "solgov"
/obj/item/flag/sol/l
name = "large Solar Confederate Government flag"
flag_size = 1
//NanoTrasen
/obj/structure/sign/flag/nt
name = "NanoTrasen corporate flag"
desc = "A flag portraying the logo of the NanoTrasen corporation."
icon_state = "nanotrasen"
flagtype = /obj/item/flag/nt
/obj/structure/sign/flag/nt/left
icon_state = "nanotrasen_l"
/obj/structure/sign/flag/nt/right
icon_state = "nanotrasen_r"
/obj/item/flag/nt
name = "NanoTrasen corporate flag"
desc = "A flag portraying the logo of the NanoTrasen corporation."
flag_path = "nanotrasen"
/obj/item/flag/nt/l
name = "large NanoTrasen corporate flag"
flag_size = 1
//Vir
/obj/structure/sign/flag/vir
name = "Vir Governmental Authority flag"
desc = "The two-tone flag of the Vir Governmental Authority."
description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \
a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \
in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \
freedom to operate unobstructed in the Vir system."
icon_state = "vir"
flagtype = /obj/item/flag/vir
/obj/structure/sign/flag/vir/left
icon_state = "vir_l"
/obj/structure/sign/flag/vir/right
icon_state = "vir_r"
/obj/item/flag/vir
name = "Vir Governmental Authority flag"
desc = "The two-tone flag of the Vir Governmental Authority."
description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \
a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \
in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \
freedom to operate unobstructed in the Vir system."
flag_path = "vir"
/obj/item/flag/vir/l
name = "large Vir Governmental Authority flag"
flag_size = 1
//Almach Association
/obj/structure/sign/flag/almach_a
name = "Almach Association flag"
desc = "The black and grey flag of the now-defunct Almach Association."
description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \
states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \
the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \
\"inevitable\" dissolution."
icon_state = "almach_a"
flagtype = /obj/item/flag/almach_a
/obj/structure/sign/flag/almach_a/left
icon_state = "almach_a_l"
/obj/structure/sign/flag/almach_a/right
icon_state = "almach_a_r"
/obj/item/flag/almach_a
name = "Almach Association flag"
desc = "The black and grey flag of the now-defunct Almach Association."
description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \
states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \
the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \
\"inevitable\" dissolution."
flag_path = "almach_a"
/obj/item/flag/almach_a/l
name = "large Almach Association flag"
flag_size = 1
//Almach Protectorate
/obj/structure/sign/flag/almach_p
name = "Almach Protectorate flag"
desc = "The purple flag of the Almach Protectorate."
description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \
Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \
leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \
without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize."
icon_state = "almach_p"
flagtype = /obj/item/flag/almach_p
/obj/structure/sign/flag/almach_p/left
icon_state = "almach_p_l"
/obj/structure/sign/flag/almach_p/right
icon_state = "almach_p_r"
/obj/item/flag/almach_p
name = "Almach Protectorate flag"
desc = "The purple flag of the Almach Protectorate."
description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \
Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \
leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \
without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize."
flag_path = "almach_p"
/obj/item/flag/almach_p/l
name = "large Almach Protectorate flag"
flag_size = 1
//Vystholm
/obj/structure/sign/flag/vystholm
name = "Vystholm flag"
desc = "The black and gold flag of Vystholm."
description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \
First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \
to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \
Pearlshield Coalition."
icon_state = "vystholm"
flagtype = /obj/item/flag/vystholm
/obj/structure/sign/flag/vystholm/left
icon_state = "vystholm_l"
/obj/structure/sign/flag/vystholm/right
icon_state = "vystholm_r"
/obj/item/flag/vystholm
name = "Vystholm flag"
desc = "The black and gold flag of Vystholm."
description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \
First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \
to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \
Pearlshield Coalition."
flag_path = "vystholm"
/obj/item/flag/vystholm/l
name = "large Vystholm flag"
flag_size = 1
//Five Arrows
/obj/structure/sign/flag/fivearrows
name = "Five Arrows flag"
desc = "The red flag of the Five Arrows."
description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to percieved \
failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \
since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"."
icon_state = "fivearrows"
flagtype = /obj/item/flag/fivearrows
/obj/structure/sign/flag/fivearrows/left
icon_state = "fivearrows_l"
/obj/structure/sign/flag/fivearrows/right
icon_state = "fivearrows_r"
/obj/item/flag/fivearrows
name = "Five Arrows flag"
desc = "The red flag of the Five Arrows."
description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to percieved \
failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \
since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"."
flag_path = "fivearrows"
/obj/item/flag/fivearrows/l
name = "large Five Arrows flag"
flag_size = 1
//Pirates
/obj/structure/sign/flag/pirate
name = "pirate flag"
desc = "Shiver me timbers, hoist the black!"
icon_state = "pirate"
flagtype = /obj/item/flag/pirate
/obj/structure/sign/flag/pirate/left
icon_state = "pirate_l"
/obj/structure/sign/flag/pirate/right
icon_state = "pirate_r"
/obj/item/flag/pirate
name = "pirate flag"
desc = "Shiver me timbers, hoist the black!"
flag_path = "pirate"
/obj/item/flag/pirate/l
name = "large pirate flag"
flag_size = 1
//Catpirate
/obj/structure/sign/flag/catpirate
name = "Tajaran pirate flag"
desc = "Shiver me whiskers, hoist the black!"
icon_state = "catpirate"
flagtype = /obj/item/flag/catpirate
/obj/structure/sign/flag/catpirate/left
icon_state = "catpirate_l"
/obj/structure/sign/flag/catpirate/right
icon_state = "catpirate_r"
/obj/item/flag/catpirate
name = "Tajaran pirate flag"
desc = "Shiver me whiskers, hoist the black!"
flag_path = "catpirate"
/obj/item/flag/catpirate/l
name = "large Tajaran pirate flag"
flag_size = 1
//Political Parties
/obj/structure/sign/flag/icarus
name = "Icarus Front flag"
desc = "The flag of the right-populist Icarus Front political party."
icon_state = "icarus"
flagtype = /obj/item/flag/icarus
/obj/item/flag/icarus
name = "Icarus Front flag"
desc = "The flag of the right-populist Icarus Front political party."
flag_path = "icarus"
/obj/structure/sign/flag/shadowcoalition
name = "Shadow Coalition flag"
desc = "The flag of the neoliberal Shadow Coalition political party."
icon_state = "shadowcoalition"
flagtype = /obj/item/flag/shadowcoalition
/obj/item/flag/shadowcoalition
name = "Shadow Coalition flag"
desc = "The flag of the neoliberal Shadow Coalition political party."
flag_path = "shadowcoalition"
/obj/structure/sign/flag/seo
name = "Sol Economic Organization flag"
desc = "The flag of the protectionist Sol Economic Organization political party."
icon_state = "seo"
flagtype = /obj/item/flag/seo
/obj/item/flag/seo
name = "Sol Economic Organization flag"
desc = "The flag of the protectionist Sol Economic Organization political party."
flag_path = "seo"
/obj/structure/sign/flag/gap
name = "Galactic Autonomy Party flag"
desc = "The flag of the libertarian Galactic Autonomy Party political party."
icon_state = "gap"
flagtype = /obj/item/flag/seo
/obj/item/flag/gap
name = "Galactic Autonomy Party flag"
desc = "The flag of the libertarian Galactic Autonomy Party political party."
flag_path = "gap"
+2 -2
View File
@@ -154,7 +154,7 @@
/obj/machinery/shower
name = "shower"
desc = "The HS-451. Installed in the 2550s by the Hygiene Division."
desc = "The HS-451. Graciously provided by the Hygiene Division."
icon = 'icons/obj/watercloset.dmi'
icon_state = "shower"
density = 0
@@ -214,7 +214,7 @@
add_fingerprint(user)
/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
cut_overlay() //once it's been on for a while, in addition to handling the water overlay.
cut_overlays() //once it's been on for a while, in addition to handling the water overlay.
if(mymist)
qdel(mymist)
mymist = null
@@ -1238,3 +1238,90 @@ var/global/list/floor_decals = list()
name = "floor arrows"
icon_state = "arrows"
/obj/effect/floor_decal/emblem/nt1
icon_state = "nt1"
/obj/effect/floor_decal/emblem/nt2
icon_state = "nt2"
/obj/effect/floor_decal/emblem/nt3
icon_state = "nt3"
/obj/effect/floor_decal/milspec/stripe
icon_state = "ms_plating_striped"
/obj/effect/floor_decal/milspec/hatchmarks
icon_state = "ms_test_floor4"
/obj/effect/floor_decal/milspec/box
icon_state = "ms_test_floor5"
/obj/effect/floor_decal/milspec/cargo
icon_state = "ms_cargo"
/obj/effect/floor_decal/milspec/cargo_arrow
icon_state = "ms_cargo_arrow"
/obj/effect/floor_decal/milspec/monotile
icon_state = "ms_mono"
/obj/effect/floor_decal/milspec/color/blue
icon_state = "ms_bluefull"
/obj/effect/floor_decal/milspec/color/blue/corner
icon_state = "ms_bluecorner"
/obj/effect/floor_decal/milspec/color/blue/half
icon_state = "ms_blue"
/obj/effect/floor_decal/milspec/color/red
icon_state = "ms_redfull"
/obj/effect/floor_decal/milspec/color/red/corner
icon_state = "ms_redcorner"
/obj/effect/floor_decal/milspec/color/red/half
icon_state = "ms_red"
/obj/effect/floor_decal/milspec/color/purple
icon_state = "ms_purplefull"
/obj/effect/floor_decal/milspec/color/purple/corner
icon_state = "ms_purplecorner"
/obj/effect/floor_decal/milspec/color/purple/half
icon_state = "ms_purple"
/obj/effect/floor_decal/milspec/color/emerald
icon_state = "ms_emeraldfull"
/obj/effect/floor_decal/milspec/color/emerald/corner
icon_state = "ms_emeraldcorner"
/obj/effect/floor_decal/milspec/color/emerald/half
icon_state = "ms_emerald"
/obj/effect/floor_decal/milspec/color/orange
icon_state = "ms_orangefull"
/obj/effect/floor_decal/milspec/color/orange/corner
icon_state = "ms_orangecorner"
/obj/effect/floor_decal/milspec/color/orange/half
icon_state = "ms_orange"
/obj/effect/floor_decal/milspec/color/green
icon_state = "ms_greenfull"
/obj/effect/floor_decal/milspec/color/green/corner
icon_state = "ms_greencorner"
/obj/effect/floor_decal/milspec/color/green/half
icon_state = "ms_green"
/obj/effect/floor_decal/milspec/color/black
icon_state = "ms_blackfull"
/obj/effect/floor_decal/milspec/color/black/corner
icon_state = "ms_blackcorner"
/obj/effect/floor_decal/milspec/color/black/half
icon_state = "ms_black"
/obj/effect/floor_decal/milspec/color/silver
icon_state = "ms_silverfull"
/obj/effect/floor_decal/milspec/color/silver/corner
icon_state = "ms_silvercorner"
/obj/effect/floor_decal/milspec/color/silver/half
icon_state = "ms_silver"
/obj/effect/floor_decal/milspec/color/white
icon_state = "ms_whitefull"
/obj/effect/floor_decal/milspec/color/white/corner
icon_state = "ms_whitecorner"
/obj/effect/floor_decal/milspec/color/white/half
icon_state = "ms_white"
/obj/effect/floor_decal/milspec_sterile/purple
icon_state = "mss_purple"
/obj/effect/floor_decal/milspec_sterile/purple/corner
icon_state = "mss_purple_corner"
/obj/effect/floor_decal/milspec_sterile/purple/half
icon_state = "mss_purple_side"
/obj/effect/floor_decal/milspec_sterile/green
icon_state = "mss_green"
/obj/effect/floor_decal/milspec_sterile/green/corner
icon_state = "mss_green_corner"
/obj/effect/floor_decal/milspec_sterile/green/half
icon_state = "mss_green_side"
@@ -476,3 +476,62 @@
icon = 'icons/turf/concrete.dmi'
icon_state = "concrete"
initial_flooring = /decl/flooring/concrete
/decl/flooring/tiling/milspec
name = "riveted floor"
icon = 'icons/turf/flooring/tiles.dmi'
icon_base = "milspec"
has_damage_range = 2
damage_temperature = T0C+1400
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
build_type = /obj/item/stack/tile/floor/milspec
can_paint = 1
can_engrave = TRUE
/turf/simulated/floor/tiled/milspec
name = "riveted floor"
icon = 'icons/turf/flooring/tiles.dmi'
icon_state = "milspec"
initial_flooring = /decl/flooring/tiling/milspec
/obj/item/stack/tile/floor/milspec
name = "riveted floor tile"
/decl/flooring/tiling/milspec/sterile
name = "sterile welded floor"
icon_base = "dark_sterile"
build_type = /obj/item/stack/tile/floor/milspec/sterile
/turf/simulated/floor/tiled/milspec/sterile
name = "sterile welded floor"
icon_state = "dark_sterile"
initial_flooring = /decl/flooring/tiling/milspec/sterile
/obj/item/stack/tile/floor/milspec/sterile
name = "sterile welded floor tile"
/decl/flooring/tiling/milspec/raised
name = "raised welded floor"
icon_base = "milspec_tcomms"
build_type = /obj/item/stack/tile/floor/milspec/raised
/turf/simulated/floor/tiled/milspec/raised
name = "raised welded floor"
icon_state = "milspec_tcomms"
initial_flooring = /decl/flooring/tiling/milspec/raised
/obj/item/stack/tile/floor/milspec/raised
name = "raised welded floor tile"
/decl/flooring/tiling/milspec/dark
name = "dark welded floor"
icon_base = "milspec_office_tile"
build_type = /obj/item/stack/tile/floor/milspec/dark
/turf/simulated/floor/tiled/milspec/dark
name = "dark welded floor"
icon_state = "milspec_office_tile"
initial_flooring = /decl/flooring/tiling/milspec/dark
/obj/item/stack/tile/floor/milspec/dark
name = "dark welded floor tile"
+270 -1
View File
@@ -300,6 +300,7 @@
// Fake corners for making hulls look pretty
/obj/structure/hull_corner
name = "hull corner"
plane = OBJ_PLANE - 1
icon = 'icons/turf/wall_masks.dmi'
icon_state = "hull_corner"
@@ -325,7 +326,7 @@
var/turf/simulated/wall/T
for(var/direction in get_dirs_to_test())
T = get_step(src, direction)
if(!istype(T))
if(!istype(T) || T.material?.icon_base != "hull")
continue
name = T.name
@@ -358,3 +359,271 @@
/obj/structure/hull_corner/long_horiz/get_dirs_to_test()
return list(dir, turn(dir,90), turn(dir,-90))
/turf/simulated/wall/tgmc
icon = 'icons/turf/wall_masks_tgmc.dmi'
icon_state = "metal0"
var/list/blend_objects = list(/obj/machinery/door)
var/list/noblend_objects = list(/obj/machinery/door/window, /obj/machinery/door/firedoor)
var/wall_base_state = "metal"
var/wall_blend_category = "metal"
var/force_icon
var/list/blend_log = list()
var/strict_blending = FALSE
var/diagonal_blending = FALSE
// *INHALE
/turf/simulated/wall/tgmc/update_icon()
if(!damage_overlays[1]) //list hasn't been populated
generate_overlays()
cut_overlays()
if(force_icon)
icon_state = "[wall_base_state][force_icon]"
else
icon_state = "[wall_base_state][wall_connections]"
if(damage != 0)
var/integrity = material.integrity
if(reinf_material)
integrity += reinf_material.integrity
var/overlay = round(damage / integrity * damage_overlays.len) + 1
if(overlay > damage_overlays.len)
overlay = damage_overlays.len
add_overlay(damage_overlays[overlay])
/turf/simulated/wall/tgmc/update_connections(propagate)
if(!material)
return
var/dirs = 0
var/list_to_use = diagonal_blending ? alldirs : cardinal
main_direction_loop:
for(var/direction in list_to_use)
var/turf/simulated/wall/tgmc/W = get_step(src, direction)
if(strict_blending)
if(istype(W, src))
dirs |= direction
continue main_direction_loop
var/decided_to_blend = FALSE
for(var/obj/O in W)
for(var/b_type in blend_objects)
if(istype(O, b_type))
decided_to_blend = TRUE
for(var/obj/structure/S in W)
if(istype(S, src))
decided_to_blend = FALSE
for(var/nb_type in noblend_objects)
if(istype(O, nb_type))
decided_to_blend = FALSE
if(decided_to_blend)
blend_log += "Blending with [O] at [direction] because special said to"
dirs |= direction
continue main_direction_loop
// Needs to be our type of wall to blend from this point
if(!istype(W))
continue
if(propagate)
W.update_connections()
W.update_icon()
if(W.wall_blend_category == wall_blend_category)
dirs |= direction
blend_log += "Blending with [W] at [get_dir(src, W)] because blend category is the same"
wall_connections = dirs
/turf/simulated/wall/tgmc/rwall
icon_state = "rwall0"
wall_base_state = "rwall"
wall_blend_category = "rwall"
/turf/simulated/wall/tgmc/rwall/Initialize(mapload)
. = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL)
/turf/simulated/wall/tgmc/gray
icon_state = "gray0"
wall_base_state = "gray"
wall_blend_category = "gray"
/turf/simulated/wall/tgmc/gwall/Initialize(mapload)
. = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL)
/turf/simulated/wall/tgmc/darkwall
icon_state = "darkwall0"
wall_base_state = "darkwall"
wall_blend_category = "darkwall"
/turf/simulated/wall/tgmc/darkwall/Initialize(mapload)
. = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL)
/turf/simulated/wall/tgmc/darkwall/deco0
icon_state = "darkwall_deco0"
force_icon = "_deco0"
/turf/simulated/wall/tgmc/darkwall/deco1
icon_state = "darkwall_deco1"
force_icon = "_deco1"
/turf/simulated/wall/tgmc/darkwall/deco2
icon_state = "darkwall_deco2"
force_icon = "_deco2"
/turf/simulated/wall/tgmc/darkwall/deco3
icon_state = "darkwall_deco3"
force_icon = "_deco3"
/turf/simulated/wall/tgmc/whitewall
icon_state = "white0"
wall_base_state = "white"
wall_blend_category = "white"
/turf/simulated/wall/tgmc/whitewall/Initialize(mapload)
. = ..(mapload, MAT_STEEL,MAT_PLASTIC)
/turf/simulated/wall/tgmc/durawall
icon_state = "darkband0"
wall_base_state = "darkband"
wall_blend_category = "darkband"
/turf/simulated/wall/tgmc/durawall/Initialize(mapload)
. = ..(mapload, MAT_DURASTEEL,MAT_DURASTEEL)
/turf/simulated/wall/tgmc/durawall/deco0
icon_state = "darkband_deco0"
force_icon = "_deco0"
/turf/simulated/wall/tgmc/durawall/deco1
icon_state = "darkband_deco1"
force_icon = "_deco1"
/turf/simulated/wall/tgmc/durawall/deco2
icon_state = "darkband_deco2"
force_icon = "_deco2"
/turf/simulated/wall/tgmc/durawall/deco3
icon_state = "darkband_deco3"
force_icon = "_deco3"
/turf/simulated/wall/tgmc/sanitary
icon_state = "whiteband0"
wall_base_state = "whiteband"
wall_blend_category = "whiteband"
/turf/simulated/wall/tgmc/sanitary/Initialize(mapload)
. = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL)
/turf/simulated/wall/tgmc/chigusa
icon_state = "chigusa0"
wall_base_state = "chigusa"
wall_blend_category = "chigusa"
/turf/simulated/wall/tgmc/chigusa/Initialize(mapload)
. = ..(mapload, MAT_CHITIN,MAT_CHITIN)
/turf/simulated/wall/tgmc/chigusa/deco0
icon_state = "chigusa_deco0"
force_icon = "_deco0"
/turf/simulated/wall/tgmc/chigusa/deco1
icon_state = "chigusa_deco1"
force_icon = "_deco1"
/turf/simulated/wall/tgmc/chigusa/deco2
icon_state = "chigusa_deco2"
force_icon = "_deco2"
/turf/simulated/wall/tgmc/redstripe
icon_state = "redstripe0"
wall_base_state = "redstripe"
wall_blend_category = "redstripe"
/turf/simulated/wall/tgmc/redstripe/Initialize(mapload)
. = ..(mapload, MAT_PLASTEELHULL,MAT_PLASTEELHULL)
/turf/simulated/wall/tgmc/redstripe_r
icon_state = "redstriper0"
wall_base_state = "redstriper"
wall_blend_category = "redstriper"
/turf/simulated/wall/tgmc/redstripe_r/Initialize(mapload)
. = ..(mapload, MAT_DURASTEELHULL,MAT_DURASTEELHULL)
/turf/simulated/wall/tgmc/plain_redstripe
icon_state = "predstripe0"
wall_base_state = "predstripe"
wall_blend_category = "predstripe"
/turf/simulated/wall/tgmc/plain_redstripe/Initialize(mapload)
. = ..(mapload, MAT_PLASTEEL,MAT_PLASTEEL)
/turf/simulated/wall/tgmc/plain_redstripe_r
icon_state = "predstriper0"
wall_base_state = "predstriper"
wall_blend_category = "predstriper"
/turf/simulated/wall/tgmc/plain_redstripe_r/Initialize(mapload)
. = ..(mapload, MAT_DURASTEEL,MAT_DURASTEEL)
#define WINDOW_GLASS 0x1
#define WINDOW_RGLASS 0x2
/turf/simulated/wall/tgmc/window
name = "window"
icon = 'icons/turf/wall_masks_tgmc_win.dmi'
icon_state = "metal_window0"
wall_base_state = "metal_window"
wall_blend_category = "metal"
opacity = 0
var/window_types = WINDOW_GLASS
strict_blending = TRUE
diagonal_blending = TRUE
/turf/simulated/wall/tgmc/window/rwall
icon_state = "rwall_window0"
wall_base_state = "rwall_window"
wall_blend_category = "rwall"
window_types = WINDOW_RGLASS
/turf/simulated/wall/tgmc/window/rwall
icon_state = "rwall_rwindow0"
wall_base_state = "rwall_rwindow"
wall_blend_category = "rwall"
window_types = WINDOW_RGLASS
/turf/simulated/wall/tgmc/window/gray
icon_state = "gray_window0"
wall_base_state = "gray_window"
wall_blend_category = "gray"
window_types = WINDOW_GLASS|WINDOW_RGLASS
/turf/simulated/wall/tgmc/window/gray/reinf
icon_state = "gray_rwindow0"
wall_base_state = "gray_rwindow"
/turf/simulated/wall/tgmc/window/white
icon_state = "white_window0"
wall_base_state = "white_window"
wall_blend_category = "white"
window_types = WINDOW_GLASS|WINDOW_RGLASS
diagonal_blending = FALSE
/turf/simulated/wall/tgmc/window/white/reinf
icon_state = "white_rwindow0"
wall_base_state = "white_rwindow"
/turf/simulated/wall/tgmc/window/chigusa
icon_state = "chigusa_rwindow0"
wall_base_state = "chigusa_rwindow"
wall_blend_category = "chigusa"
window_types = WINDOW_RGLASS
diagonal_blending = FALSE
/turf/simulated/wall/tgmc/window/redstripe_r
icon_state = "predstriper_window0"
wall_base_state = "predstriper_window"
wall_blend_category = "predstriper"
window_types = WINDOW_GLASS|WINDOW_RGLASS
/turf/simulated/wall/tgmc/window/redstripe_r/reinf
icon_state = "predstriper_rwindow0"
wall_base_state = "predstriper_rwindow"
wall_blend_category = "predstriper"
/turf/simulated/wall/tgmc/window/darkwall
icon_state = "darkwall_window0"
wall_base_state = "darkwall_window"
wall_blend_category = "darkwall"
window_types = WINDOW_GLASS|WINDOW_RGLASS
diagonal_blending = FALSE
/turf/simulated/wall/tgmc/window/darkwall/reinf
icon_state = "darkwall_rwindow0"
wall_base_state = "darkwall_rwindow"
#undef WINDOW_GLASS
#undef WINDOW_RGLASS
+1
View File
@@ -86,6 +86,7 @@ var/global/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir
41, 43, 36, 38, 37, 39, 44, 46, 45, 47, 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21,
23, 28, 30, 29, 31, 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63
)
var/global/const/SQRT_TWO = 1.41421356237
var/global/datum/configuration/config = null
+12 -1
View File
@@ -357,6 +357,17 @@
corpseid = 1
corpseidjob = "Sif Defense Force Patrolman"
/obj/effect/landmark/corpse/sifcop
name = "SGPD Officer"
corpseuniform = /obj/item/clothing/under/sifcop
corpsebelt = /obj/item/storage/belt/security/tactical
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
corpsehelmet = /obj/item/clothing/head/helmet/riot/sifcop
corpsegloves = /obj/item/clothing/gloves/duty
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
corpseid = 1
corpseidjob = "SifGuard Police Division Officer"
/obj/effect/landmark/corpse/hedberg
name = "Hedberg-Hammarstrom Mercenary"
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
@@ -372,7 +383,7 @@
name = "Hedberg-Hammarstrom Mercenary"
corpsebelt = /obj/item/storage/belt/security/tactical
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
corpsehelmet = /obj/item/clothing/head/helmet/flexitac
corpsehelmet = /obj/item/clothing/head/helmet/space/void/hedberg
corpsegloves = /obj/item/clothing/gloves/combat
corpseshoes = /obj/item/clothing/shoes/boots/tactical
corpseid = 1
+29
View File
@@ -77,3 +77,32 @@
// Runechat messages
var/list/seen_messages
///////////
// INPUT //
///////////
/// Bitfield of modifier keys (Shift, Ctrl, Alt) held currently.
var/mod_keys_held = 0
/// Bitfield of movement keys (WASD/Cursor Keys) held currently.
var/move_keys_held = 0
/// These next two vars are to apply movement for keypresses and releases made while move delayed.
/// Because discarding that input makes the game less responsive.
/// Bitfield of movement dirs that were pressed down *this* cycle (even if not currently held).
/// Note that only dirs that actually are first pressed down during this cycle are included, if it was still held from last cycle it won't be in here.
/// On next move, add this dir to the move that would otherwise be done
var/next_move_dir_add
/// Bitfield of movement dirs that were released *this* cycle (even if currently held).
/// Note that only dirs that were already held at the start of this cycle are included, if it pressed then released it won't be in here.
/// On next move, subtract this dir from the move that would otherwise be done
var/next_move_dir_sub
#ifdef CARDINAL_INPUT_ONLY
/// Movement dir of the most recently pressed movement key. Used in cardinal-only movement mode.
var/last_move_dir_pressed = NONE
#endif
@@ -161,9 +161,12 @@
webbingtype["webbing, brown"] = /obj/item/clothing/accessory/storage/brown_vest
webbingtype["webbing, black"] = /obj/item/clothing/accessory/storage/black_vest
webbingtype["webbing, white"] = /obj/item/clothing/accessory/storage/white_vest
webbingtype["webbing, simple"] = /obj/item/clothing/accessory/storage/webbing
gear_tweaks += new/datum/gear_tweak/path(webbingtype)
/datum/gear/accessory/webbing_simple
display_name = "webbing, simple"
path = /obj/item/clothing/accessory/storage/webbing
/datum/gear/accessory/drop_pouches
display_name = "drop pouches selection (Engineering, Security, Medical)"
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
@@ -62,7 +62,7 @@
glassestype["glasses, thin frame"] = /obj/item/clothing/glasses/thin
gear_tweaks += new/datum/gear_tweak/path(glassestype)
/datum/gear/eyes/glasses/monocle
/datum/gear/eyes/monocle
display_name = "monocle"
path = /obj/item/clothing/glasses/monocle
@@ -130,12 +130,11 @@
display_name = "optical material scanners, prescription (Mining)"
path = /obj/item/clothing/glasses/material/prescription
/datum/gear/eyes/glasses/fakesun
/datum/gear/eyes/fakesun
display_name = "sunglasses, stylish"
path = /obj/item/clothing/glasses/fakesunglasses
/datum/gear/eyes/glasses/fakeaviator
/datum/gear/eyes/fakeaviator
display_name = "sunglasses, stylish aviators"
path = /obj/item/clothing/glasses/fakesunglasses/aviator
@@ -37,7 +37,7 @@
path = /obj/item/clothing/gloves/sterile/nitrile
cost = 2
/datum/gear/gloves/evening
display_name = "gloves, evening"
display_name = "gloves, evening (colorable)"
path = /obj/item/clothing/gloves/evening
cost = 1
@@ -57,7 +57,7 @@
cost = 1
/datum/gear/gloves/fingerless
display_name = "gloves, fingerless"
display_name = "gloves, fingerless (colorable)"
path = /obj/item/clothing/gloves/fingerless
cost = 1
@@ -81,20 +81,20 @@
caps[initial(cap_type.name)] = cap_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(caps))
/datum/gear/head/cap/flat
/datum/gear/head/cap_flat
display_name = "cap, flat brown"
path = /obj/item/clothing/head/flatcap
/datum/gear/head/cap/med
/datum/gear/head/cap_med
display_name = "cap, medical (Medical)"
path = /obj/item/clothing/head/soft/med
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic","Search and Rescue")
/datum/gear/head/cap/white
/datum/gear/head/cap_colorable
display_name = "cap (colorable)"
path = /obj/item/clothing/head/soft/mime
/datum/gear/head/cap/white/New()
/datum/gear/head/cap_colorable/New()
..()
gear_tweaks += gear_tweak_free_color_choice
@@ -298,11 +298,11 @@
welding_helmets[initial(welding_helmet_type.name)] = welding_helmet_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(welding_helmets))
/datum/gear/head/beret/solgov
/datum/gear/head/beret_gov
display_name = "beret, government selection"
path = /obj/item/clothing/head/beret/solgov
/datum/gear/head/beret/solgov/New()
/datum/gear/head/beret_gov/New()
..()
var/list/sols = list()
for(var/sol_style in typesof(/obj/item/clothing/head/beret/solgov))
@@ -368,3 +368,32 @@
/datum/gear/head/plaguedoctor2
display_name = "hat, golden plague doctor"
path = /obj/item/clothing/head/plaguedoctorhat/gold
/datum/gear/head/nonla
display_name = "non la"
path = /obj/item/clothing/head/nonla
/datum/gear/head/buckethat
display_name = "hat, bucket"
path = /obj/item/clothing/head/buckethat
/datum/gear/head/buckethat/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/head/redcoat
display_name = "hat, tricorne"
path =/obj/item/clothing/head/redcoat
/datum/gear/head/tanker
display_name = "tanker cap selection"
path = /obj/item/clothing/head/hardhat
cost = 2
/datum/gear/head/tanker/New()
..()
var/list/tankercaps = list()
for(var/tankercap in typesof(/obj/item/clothing/head/helmet/tank))
var/obj/item/clothing/head/helmet/tank/cap_type = tankercap
tankercaps[initial(cap_type.name)] = cap_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(tankercaps))
@@ -26,7 +26,6 @@
/datum/gear/shoes/workboots/toeless
display_name = "workboots, toe-less"
path = /obj/item/clothing/shoes/boots/workboots/toeless
cost = 2
/datum/gear/shoes/colored
display_name = "shoes, colored selection"
@@ -73,7 +72,7 @@
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hitops))
/datum/gear/shoes/flipflops
display_name = "flip flops"
display_name = "flip flops (colorable)"
path = /obj/item/clothing/shoes/flipflop
/datum/gear/shoes/flipflops/New()
@@ -81,7 +80,7 @@
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/shoes/athletic
display_name = "shoes, athletic"
display_name = "shoes, athletic (colorable)"
path = /obj/item/clothing/shoes/athletic
/datum/gear/shoes/athletic/New()
@@ -89,7 +88,7 @@
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/shoes/skater
display_name = "shoes, skater"
display_name = "shoes, skater (colorable)"
path = /obj/item/clothing/shoes/skater
/datum/gear/shoes/skater/New()
@@ -135,7 +134,7 @@
path = /obj/item/clothing/shoes/dress/white
/datum/gear/shoes/heels
display_name = "high heels"
display_name = "high heels (colorable)"
path = /obj/item/clothing/shoes/heels
/datum/gear/shoes/heels/New()
@@ -146,11 +145,11 @@
display_name = "bunny slippers"
path = /obj/item/clothing/shoes/slippers
/datum/gear/shoes/boots/winter
/datum/gear/shoes/winter_boots
display_name = "boots, winter selection"
path = /obj/item/clothing/shoes/boots/winter
/datum/gear/shoes/boots/winter/New()
/datum/gear/shoes/winter_boots/New()
..()
var/boottype = list()
boottype["winter boots, atmospherics"] = /obj/item/clothing/shoes/boots/winter/atmos
@@ -151,21 +151,21 @@
labcoattype["labcoat, yellow"] = /obj/item/clothing/suit/storage/toggle/labcoat/yellow
gear_tweaks += new/datum/gear_tweak/path(labcoattype)
/datum/gear/suit/labcoat/rd
/datum/gear/suit/labcoat_rd
display_name = "labcoat, research director (RD)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/rd
allowed_roles = list("Research Director")
/datum/gear/suit/labcoat/emt
/datum/gear/suit/labcoat_emt
display_name = "labcoat, EMT (Medical)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/miscellaneous/labcoat
/datum/gear/suit/plague_coat
display_name = "plague doctor's coat"
path = /obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor
/datum/gear/suit/roles/surgical_apron
/datum/gear/suit/surgical_apron
display_name = "apron, surgical"
path = /obj/item/clothing/suit/surgicalapron
allowed_roles = list("Medical Doctor","Chief Medical Officer")
@@ -187,11 +187,11 @@
ponchos[initial(poncho.name)] = poncho
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ponchos))
/datum/gear/suit/roles/poncho/cloak
/datum/gear/suit/cloak
display_name = "cloak, departmental selection"
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
/datum/gear/suit/roles/poncho/cloak/New()
/datum/gear/suit/cloak/New()
..()
var/list/cloaks = list()
for(var/cloak_style in (typesof(/obj/item/clothing/accessory/poncho/roles/cloak)))
@@ -199,7 +199,7 @@
cloaks[initial(cloak.name)] = cloak
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/roles/poncho/cloak/custom //A colorable cloak
/datum/gear/suit/cloak_custom //A colorable cloak
display_name = "cloak (colorable)"
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom
@@ -302,19 +302,19 @@
denim_jackets[initial(denim_jacket.name)] = denim_jacket
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(denim_jackets))
/datum/gear/suit/miscellaneous/kimono
/datum/gear/suit/kimono
display_name = "kimono"
path = /obj/item/clothing/suit/kimono
/datum/gear/suit/miscellaneous/kimono/New()
/datum/gear/suit/kimono/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/miscellaneous/dep_jacket
/datum/gear/suit/dep_jacket
display_name = "jacket, departmental selection"
path = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket
/datum/gear/suit/miscellaneous/dep_jacket/New()
/datum/gear/suit/dep_jacket/New()
..()
var/jackettype = list()
jackettype["department jacket, engineering"] = /obj/item/clothing/suit/storage/toggle/engi_dep_jacket
@@ -324,11 +324,11 @@
jackettype["department jacket, supply"] = /obj/item/clothing/suit/storage/toggle/supply_dep_jacket
gear_tweaks += new/datum/gear_tweak/path(jackettype)
/datum/gear/suit/miscellaneous/light_jacket
/datum/gear/suit/light_jacket
display_name = "jacket, light selection"
path = /obj/item/clothing/suit/storage/toggle/light_jacket
/datum/gear/suit/miscellaneous/light_jacket/New()
/datum/gear/suit/light_jacket/New()
..()
var/list/jacket = list(
"grey light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket,
@@ -336,20 +336,20 @@
)
gear_tweaks += new/datum/gear_tweak/path(jacket)
/datum/gear/suit/miscellaneous/peacoat
display_name = "peacoat"
/datum/gear/suit/peacoat
display_name = "peacoat (colorable)"
path = /obj/item/clothing/suit/storage/toggle/peacoat
/datum/gear/suit/miscellaneous/peacoat/New()
/datum/gear/suit/peacoat/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/miscellaneous/kamishimo
/datum/gear/suit/kamishimo
display_name = "kamishimo"
path = /obj/item/clothing/suit/kamishimo
/datum/gear/suit/insulted
display_name = "insulted jacket selection"
/datum/gear/suit/insulated
display_name = "jacket, insulated selection"
path = /obj/item/clothing/suit/storage/insulated
cost = 2
@@ -361,10 +361,10 @@
insulated_jackets[initial(insulated_jacket.name)] = insulated_jacket
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(insulated_jackets))
/datum/gear/suit/miscellaneous/cardigan
display_name = "cardigan"
/datum/gear/suit/cardigan
display_name = "cardigan (colorable)"
path = /obj/item/clothing/suit/storage/toggle/cardigan
/datum/gear/suit/miscellaneous/cardigan/New()
/datum/gear/suit/cardigan/New()
..()
gear_tweaks += gear_tweak_free_color_choice
@@ -61,6 +61,14 @@
jumpclothes[initial(jumps.name)] = jumps
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes))
/datum/gear/uniform/colorable_jumpsuit
display_name = "jumpsuit, colorable"
path = /obj/item/clothing/under/colorable
/datum/gear/uniform/colorable_jumpsuit/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/uniform/qipao
display_name = "qipao"
path = /obj/item/clothing/under/qipao
@@ -134,21 +142,6 @@
skirttype["skirt, quartermaster"] = /obj/item/clothing/under/rank/cargotech/skirt
gear_tweaks += new/datum/gear_tweak/path(skirttype)
/datum/gear/uniform/job_skirt/warden
display_name = "skirt, warden"
path = /obj/item/clothing/under/rank/warden/skirt
allowed_roles = list("Head of Security", "Warden")
/datum/gear/uniform/job_skirt/security
display_name = "skirt, security"
path = /obj/item/clothing/under/rank/security/skirt
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/uniform/job_skirt/head_of_security
display_name = "skirt, hos"
path = /obj/item/clothing/under/rank/head_of_security/skirt
allowed_roles = list("Head of Security")
/datum/gear/uniform/job_turtle
display_name = "turtleneck, departmental selection"
path = /obj/item/clothing/under/rank/scientist/turtleneck
@@ -182,11 +175,11 @@
path = /obj/item/clothing/under/rank/cargotech/jeans/female
allowed_roles = list("Quartermaster","Cargo Technician")
/datum/gear/uniform/suit/lawyer
/datum/gear/uniform/suit_lawyer
display_name = "suit, one-piece selection"
path = /obj/item/clothing/under/lawyer
/datum/gear/uniform/suit/lawyer/New()
/datum/gear/uniform/suit_lawyer/New()
..()
var/list/lsuits = list()
for(var/lsuit in typesof(/obj/item/clothing/under/lawyer, /obj/item/clothing/under/sl_suit, /obj/item/clothing/under/gentlesuit))
@@ -194,11 +187,11 @@
lsuits[initial(lsuit_type.name)] = lsuit_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lsuits))
/datum/gear/uniform/suit/suit_jacket
/datum/gear/uniform/suit_jacket
display_name = "suit, modular selection"
path = /obj/item/clothing/under/suit_jacket
/datum/gear/uniform/suit/suit_jacket/New()
/datum/gear/uniform/suit_jacket/New()
..()
var/list/msuits = list()
for(var/msuit in typesof(/obj/item/clothing/under/suit_jacket))
@@ -206,22 +199,22 @@
msuits[initial(msuit_type.name)] = msuit_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(msuits))
/datum/gear/uniform/suit/detectiveblack
/datum/gear/uniform/detectiveblack
display_name = "suit, detective black (Detective)"
path = /obj/item/clothing/under/det/black_alt
allowed_roles = list("Detective")
/datum/gear/uniform/suit/detectiveskirt
/datum/gear/uniform/detectiveskirt
display_name = "suit, detective skirt (Detective)"
path = /obj/item/clothing/under/det/skirt
allowed_roles = list("Detective")
/datum/gear/uniform/suit/iaskirt
/datum/gear/uniform/iaskirt
display_name = "suit, Internal Affairs skirt (Internal Affairs)"
path = /obj/item/clothing/under/rank/internalaffairs/skirt
allowed_roles = list("Internal Affairs Agent")
/datum/gear/uniform/suit/bartenderskirt
/datum/gear/uniform/bartenderskirt
display_name = "suit, bartender skirt (Bartender)"
path = /obj/item/clothing/under/rank/bartender/skirt
allowed_roles = list("Bartender")
@@ -278,6 +271,7 @@
secunitype["officer uniform, corporate"] = /obj/item/clothing/under/rank/security/corp
secunitype["officer uniform, navy"] = /obj/item/clothing/under/rank/security/navyblue
secunitype["officer uniform, hedberg-hammarstrom"] = /obj/item/clothing/under/hedberg
secunitype["officer uniform, red skirt"] = /obj/item/clothing/under/rank/security/skirt
secunitype["detective uniform, corporate"] = /obj/item/clothing/under/det/corporate
gear_tweaks += new/datum/gear_tweak/path(secunitype)
@@ -291,6 +285,7 @@
var/warunitype = list()
warunitype["warden uniform, corporate"] = /obj/item/clothing/under/rank/warden/corp
warunitype["warden uniform, navy"] = /obj/item/clothing/under/rank/warden/navyblue
warunitype["warden uniform, red skirt"] = /obj/item/clothing/under/rank/warden/skirt
gear_tweaks += new/datum/gear_tweak/path(warunitype)
/datum/gear/uniform/uniform_hos
@@ -303,6 +298,7 @@
var/hosunitype = list()
hosunitype["HoS uniform, corporate"] = /obj/item/clothing/under/rank/head_of_security/corp
hosunitype["HoS uniform, navy"] = /obj/item/clothing/under/rank/head_of_security/navyblue
hosunitype["HoS Uniform, red skirt"] = /obj/item/clothing/under/rank/head_of_security/skirt
gear_tweaks += new/datum/gear_tweak/path(hosunitype)
/datum/gear/uniform/uniform_hop
@@ -381,6 +377,11 @@
utils[initial(util_type.name)] = util_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(utils))
/datum/gear/uniform/utility/medical
display_name = "utility, medical"
path = /obj/item/clothing/under/rank/medical/utility
allowed_roles = list("Chief Medical Officer", "Paramedic", "Medical Doctor", "Psychiatrist", "Search and Rescue", "Chemist")
/datum/gear/uniform/sweater
display_name = "sweater, grey"
path = /obj/item/clothing/under/rank/psych/turtleneck/sweater
@@ -405,6 +406,9 @@
display_name = "outfit, frontier"
path = /obj/item/clothing/under/frontier
/datum/gear/uniform/retro_outdoors
display_name = "outfit, retro outdoors"
path = /obj/item/clothing/under/retro_outdoors
/datum/gear/uniform/yogapants
display_name = "pants, yoga (colorable)"
path = /obj/item/clothing/under/pants/yogapants
@@ -530,7 +534,7 @@
path = /obj/item/clothing/under/dress/revealingdress
/datum/gear/uniform/rippedpunk
display_name = "jeans, ripped punk"
display_name = "outfit, ripped punk"
path = /obj/item/clothing/under/rippedpunk
/datum/gear/uniform/gothic
@@ -557,6 +561,10 @@
display_name = "outfit, cyberpunk strapped harness"
path = /obj/item/clothing/under/cyberpunkharness
/datum/gear/uniform/cyberpunkpants
display_name = "cyberpunk split-side ensemble"
path = /obj/item/clothing/under/cyberpunkpants
/datum/gear/uniform/whitegown
display_name = "white gown"
path = /obj/item/clothing/under/wedding/whitegown
@@ -608,3 +616,8 @@
/datum/gear/uniform/vampire
display_name = "pants, high-waisted trousers"
path = /obj/item/clothing/under/hightrousers
/datum/gear/uniform/chaplain_stripe
display_name = "jumpsuit, chaplain striped"
path = /obj/item/clothing/under/rank/chaplain/alt
allowed_roles = list("Chaplain")
@@ -162,15 +162,13 @@
cohesionsuits[initial(cohesion_type.name)] = cohesion_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cohesionsuits))
/datum/gear/uniform/dept
/datum/gear/uniform/teshundercoat
display_name = "Teshari undercoat selection"
path = /obj/item/clothing/under/teshari/undercoat/jobs/hop
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/dept/undercoat
display_name = "Teshari undercoat selection"
path = /obj/item/clothing/under/teshari/undercoat/jobs/hop
/datum/gear/uniform/dept/undercoat/New()
/datum/gear/uniform/teshundercoat/New()
..()
var/list/teshundercoats = list()
for(var/teshundercoat_style in typesof(/obj/item/clothing/under/teshari/undercoat/jobs))
@@ -178,12 +176,12 @@
teshundercoats[initial(teshundercoat.name)] = teshundercoat
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(teshundercoats))
/datum/gear/suit/dept/cloak
/datum/gear/suit/teshcloak
display_name = "Teshari cloak selection, jobs"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/dept/cloak/New()
/datum/gear/suit/teshcloak/New()
..()
var/list/teshcloaks = list()
for(var/teshcloak_style in typesof(/obj/item/clothing/suit/storage/teshari/cloak/jobs, /obj/item/clothing/suit/storage/teshari/beltcloak/jobs))
+47 -3
View File
@@ -71,12 +71,18 @@
/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob)
if(src.icon_state == initial(icon_state))
src.icon_state = "[icon_state]up"
to_chat(user, "You raise the visor on the riot helmet.")
to_chat(user, "You raise the visor on the [src].")
else
src.icon_state = initial(icon_state)
to_chat(user, "You lower the visor on the riot helmet.")
to_chat(user, "You lower the visor on the [src].")
update_clothing_icon() //so our mob-overlays update
/obj/item/clothing/head/helmet/riot/sifcop
name = "\improper SifGuard police helmet"
desc = "A visored helmet printed with the livery of the SifGuard Police Division."
icon_state = "sifcop_helmet"
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/head/helmet/laserproof
name = "ablative helmet"
desc = "It's a helmet specifically designed to protect against energy projectiles."
@@ -136,6 +142,44 @@
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.5
/obj/item/clothing/head/helmet/heavy
name = "heavy combat helmet"
desc = "A heavily armoured helmet with built-in faceplate, built to withstand the rigours of modern combat."
description_fluff = "Though a darling of Proxima Centuari Risk Control operatives, this type of high-grade enclosed combat helmet has two key drawbacks: 1. A somewhat limited field of view, which is often compensated for with cybernetics, and 2. It costs more than most mercenaries make in a year."
icon_state = "heavy_combat"
armor = list(melee = 70, bullet = 80, laser = 60, energy = 25, bomb = 40, bio = 0, rad = 0)
siemens_coefficient = 0.5
/obj/item/clothing/head/helmet/heavy/knight
desc = "An enclosed, heavily armoured ablative helmet modeled after a medieval greathelm."
description_fluff = "The early 23rd century saw a surge in popularity for faux-medieval combat fashions, which was soon abandoned due to practical concerns and a growing desire for unified corporate security brand identities."
flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR
icon_state = "knight_grey"
armor = list(melee = 80, bullet = 50, laser = 40, energy = 20, bomb = 30, bio = 0, rad = 0)
/obj/item/clothing/head/helmet/newkyoto
name = "\improper New Kyotan combat helmet"
desc = "An armoured helmet. Pride of New Kyoto lawmen, dread of foreign spies."
description_fluff = "Authentic examples of New Kyotan security gear are rare due to the independent nation's strict export restrictions. Fortunately, ubiquitous replicas are often equally effective."
icon_state = "nkyoto"
armor = list(melee = 50, bullet = 50, laser = 50, energy = 25, bomb = 20, bio = 0, rad = 0)
siemens_coefficient = 0.5
/obj/item/clothing/head/helmet/tank
name = "black tanker cap"
desc = "A padded skullcup for those prone to bumping their heads against hard surfaces."
icon_state = "tank"
color = "#5f5f5f"
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/head/helmet/tank/olive
name = "olive tanker cap"
color = "#727c58"
/obj/item/clothing/head/helmet/tank/tan
name = "tan tanker cap"
color = "#ae9f79"
/obj/item/clothing/head/helmet/alien
name = "alien helmet"
desc = "It's quite larger than your head, but it might still protect it."
@@ -175,7 +219,6 @@
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)
flags_inv = HIDEEARS|BLOCKHAIR
siemens_coefficient = 0.7
@@ -224,3 +267,4 @@
name = "emergency response team medical helmet"
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
icon_state = "erthelmet_med"
+17 -2
View File
@@ -109,10 +109,10 @@
desc = "Columbian Pure."
/obj/item/clothing/head/redcoat
name = "redcoat's hat"
name = "tricorne hat"
icon_state = "redcoat"
item_state_slots = list(slot_r_hand_str = "pirate", slot_l_hand_str = "pirate")
desc = "<i>'I guess it's a redhead.'</i>"
desc = "Stand and deliver!"
body_parts_covered = 0
/obj/item/clothing/head/mailman
@@ -463,6 +463,21 @@
flags_inv = HIDEEYES
body_parts_covered = HEAD|EYES
/obj/item/clothing/head/nonla
name = "non la"
desc = "A conical straw hat, used by those in tropical climates to protect the head from sweltering suns and heavy rains."
icon_state = "nonla"
item_state = "nonla"
/obj/item/clothing/head/buckethat
name = "bucket hat"
desc = "A hat with an all-around visor. Only slightly better than wearing an actual bucket."
icon_state = "buckethat"
icon_state = "buckethat"
sprite_sheets = list(
SPECIES_TAJARAN = 'icons/mob/species/tajaran/helmet.dmi'
)
//Corporate Berets
/obj/item/clothing/head/beret/corp/saare
+7 -5
View File
@@ -147,8 +147,10 @@
/obj/item/clothing/head/ushanka
name = "ushanka"
desc = "Perfect for those cold winter nights."
icon_state = "ushankadown"
icon_state = "ushanka"
flags_inv = HIDEEARS
body_parts_covered = HEAD
cold_protection = HEAD
/obj/item/clothing/head/ushanka/attack_self(mob/user as mob)
if(src.icon_state == initial(icon_state))
@@ -159,17 +161,17 @@
to_chat(user, "You lower the ear flaps on the ushanka.")
/obj/item/clothing/head/ushanka/black
icon_state = "blkushankadown"
icon_state = "blkushanka"
/obj/item/clothing/head/ushanka/soviet
name = "soviet ushanka"
desc = "Perfect for winter in Siberia, da?"
icon_state = "sovushankadown"
icon_state = "sovushanka"
/obj/item/clothing/head/ushanka/hedberg
name = "\improper Hedberg-Hammarstrom fur hat"
desc = "An Hedberg-Hammarstrom private security ushanka."
icon_state = "hedbergushankadown"
icon_state = "hedbergushanka"
/*
* Pumpkin head
@@ -319,4 +321,4 @@
w_class = 2
body_parts_covered = HEAD
attack_verb = list("warned", "cautioned", "smashed")
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+10 -5
View File
@@ -265,6 +265,11 @@
desc = "An Sif Defense Force beret carrying insignia of the Anti-Piracy taskforce. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_patrol"
/obj/item/clothing/head/beret/solgov/sifguard/sifcop
name = "\improper SifGuard Police Division beret"
desc = "An Sif Defense Force beret carrying insignia of the civilian law enforcement division (SGPD). Standard issue."
icon_state = "beret_sifcop"
/*
* Fleet (Berets)
*/
@@ -325,22 +330,22 @@
/obj/item/clothing/head/ushanka/solgov
name = "\improper SifGuard fur hat"
desc = "An Sif Defense Force synthfur-lined hat for operating in cold environments."
icon_state = "sifguardushankadown"
icon_state = "sifguardushanka"
/obj/item/clothing/head/ushanka/solgov/fleet
name = "fleet fur hat"
desc = "An SCG Fleet synthfur-lined hat for operating in cold environments."
icon_state = "flushankadown"
icon_state = "flushanka"
/obj/item/clothing/head/ushanka/solgov/marine
name = "marine fur hat"
desc = "An SCG Marine synthfur-lined hat for operating in cold environments."
icon_state = "mar1ushankadown"
icon_state = "mar1ushanka"
/obj/item/clothing/head/ushanka/solgov/marine/green
name = "green marine fur hat"
desc = "An SCG Marine synthfur-lined hat for operating in cold environments."
icon_state = "mar2ushankadown"
icon_state = "mar2ushanka"
/*
* Almachi
@@ -389,4 +394,4 @@
desc = "An SCG Fleet beret carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech. For personnel that are more inclined towards style than safety."
icon_state = "beret_navy_fifth"
*
*/
*/
+1 -1
View File
@@ -86,4 +86,4 @@
/obj/item/clothing/suit/space/vox/medic
name = "alien armour"
icon_state = "vox-medic"
desc = "An almost organic looking nonhuman pressure suit."
desc = "An almost organic looking nonhuman pressure suit."
@@ -102,3 +102,17 @@
icon_state = "syndicate-orange"
desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate, looks pretty fragile."
slowdown = 2
//civilian recreational spacesuit
/obj/item/clothing/head/helmet/space/sports
name = "performance sports space helmet"
icon_state = "sports_void"
desc = "A sleek space helmet for the civilian extra-vehicular extreme sports market. Please replace after any impact!"
/obj/item/clothing/suit/space/sports
name = "performance sports spacesuit"
desc = "A high-dexterity spacesuit for the civilian extra-vehicular extreme sports market, for when zero-g sports in controlled environments are just too tame."
description_fluff = "Ward-Takahashi zero-gravity performance sportswear does not require an EVA certification to purchase, though user manuals do list it as 'recommended' on condition of a 2550 lawsuit."
icon_state = "sports_void"
slowdown = 0
@@ -147,7 +147,7 @@
//Officer Crewsuit (GOLD, X)
//The best of the bunch - at the time, this would have been almost cutting edge
//Now it's good, but it's badly outclassed by the hot shit that the TSCs and such can get
//Now it's good, but it's badly outclassed by the hot shit that the TSCs and such can get
/obj/item/clothing/head/helmet/space/void/refurb/officer
name = "vintage officer's voidsuit helmet"
desc = "A refurbished early contact era voidsuit helmet of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. The visor has a bad habit of fogging up and collecting condensation, but it beats sucking hard vacuum. This variant appears to be an officer's, and has the best protection of all the old models."
@@ -214,7 +214,7 @@
/obj/item/gps,
/obj/item/radio/beacon,
)
//Scientist Crewsuit (PURPLE, O)
//Baseline values are slightly worse than the gray crewsuit, but it has significantly better Energy protection and is the only other suit with 100% rad immunity besides the engi suit
/obj/item/clothing/head/helmet/space/void/refurb/research
@@ -43,4 +43,4 @@
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs,/obj/item/material/twohanded/fireaxe,/obj/item/flamethrower)
siemens_coefficient = 0.7
breach_threshold = 18 //Super Extra Thicc
slowdown = 1
slowdown = 1
@@ -0,0 +1,104 @@
//Misc voidsuits
//Boarding ops.
/obj/item/clothing/head/helmet/space/void/boarding_ops
name = "boarding operations voidsuit helmet"
desc = "A first generation armoured voidsuit helmet designed for variable-gravity boarding operations where heavier combat suits would leave the user vulnerable once within a pressurized environment."
icon_state = "light_ops"
armor = list(melee = 30, bullet = 35, laser = 35, energy = 5, bomb = 30, bio = 100, rad = 50)
siemens_coefficient = 0.8
/obj/item/clothing/head/helmet/space/void/boarding_ops/mk2
desc = "A second generation armoured voidsuit helmet designed for variable-gravity boarding operations where heavier combat suits would leave the user vulnerable once within a pressurized environment. This one has improved visibility at the cost of some plating."
icon_state = "light_ops_mk2"
armor = list(melee = 20, bullet = 30, laser = 40, energy = 5, bomb = 30, bio = 100, rad = 50)
/obj/item/clothing/suit/space/void/boarding_ops
name = "boarding operations voidsuit"
desc = "A moderately armoured voidsuit designed for variable-gravity boarding operations where heavier combat suits would leave the user vulnerable once within a pressurized environment."
description_fluff = "Originally an Aether Atmospherics design intended for hazardous environment EVA, these lightweight armoured suits were adapted for combat use and for easy re-fabrication, making them a hit with pirates of both varieties."
icon_state = "light_ops"
armor = list(melee = 30, bullet = 35, laser = 35, energy = 5, bomb = 30, bio = 100, rad = 50)
breach_threshold = 14 //These are kinda thicc
resilience = 0.15 //Armored
siemens_coefficient = 0.8
allowed = list(/obj/item/gun,
/obj/item/flashlight,
/obj/item/tank,
/obj/item/suit_cooling_unit,
/obj/item/melee,
/obj/item/grenade,
/obj/item/flash,
/obj/item/gps,
/obj/item/radio/beacon,
/obj/item/handcuffs,
/obj/item/hailer,
/obj/item/holowarrant,
/obj/item/megaphone,
/obj/item/ammo_magazine,
/obj/item/cell
)
//Tajaran Pearlshield Coalition Spacesuit
/obj/item/clothing/head/helmet/space/void/pearlshield
name = "Pearlshield Coalition space helmet"
desc = "A rugged, utilitarian space helmet designed for the Pearlshield Coalition military by PCA."
description_fluff = "Pearlshield Consolidated Armories is a collaborative organization of Tajaran arms manufacturers tasked with producing equipment for the intergovernmental Pearlshield Coalition, the Tajaran representative body on the galactic stage."
icon_state = "pearlshield_void"
armor = list(melee = 30, bullet = 40, laser = 40, energy = 20, bomb = 30, bio = 100, rad = 50)
species_restricted = list(SPECIES_TAJ)
/obj/item/clothing/suit/space/void/pearlshield
name = "Pearlshield Coalition voidsuit"
desc = "A rugged, utilitarian spacesuit designed for the Pearlshield Coalition military by PCA."
description_fluff = "Pearlshield Consolidated Armories is a collaborative organization of Tajaran arms manufacturers tasked with producing equipment for the intergovernmental Pearlshield Coalition, the Tajaran representative body on the galactic stage."
icon_state = "pearlshield_void"
armor = list(melee = 20, bullet = 20, laser = 20, energy = 50, bomb = 50, bio = 100, rad = 50)
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
species_restricted = list(SPECIES_TAJ)
//SCG Fleet Voidsuit(s)
/obj/item/clothing/head/helmet/space/void/scg
name = "Fleet voidsuit helmet"
desc = "A standard issue SCG Marine armoured voidsuit helmet for use in hazardous environment combat scenarios."
icon_state = "scg_void"
armor = list(melee = 50, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 70)
siemens_coefficient = 0.6
/obj/item/clothing/head/helmet/space/void/scg/heavy
name = "heavy Fleet voidsuit helmet"
desc = "A heavier version of the standard issue SCG Marine armoured voidsuit helmet for use in hazardous environment combat scenarios."
icon_state = "scg_voidcombat"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 70)
siemens_coefficient = 0.6
/obj/item/clothing/suit/space/void/scg
name = "Fleet voidsuit"
desc = "A standard issue SCG Marine armoured voidsuit for use in hazardous environment combat scenarios."
icon_state = "scg_void"
w_class = ITEMSIZE_NORMAL
armor = list(melee = 50, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 70)
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
siemens_coefficient = 0.6
breach_threshold = 16 //Extra Thicc
resilience = 0.05 //Military Armor
//Misc Armoured Space helmets
/obj/item/clothing/head/helmet/space/void/grayson
name = "heavy mining helmet"
desc = "An older model heavy-duty atmosphere-controlled mining helmet."
description_fluff = "This armoured mining helmet was one of Grayson's best selling models before the advent rigsuit technology, and due to its relatively simple construction the design has remained in use for well over a century and is often adapted to function with the latest suits."
icon_state = "grayson_helm"
armor = list(melee = 60, bullet = 20, laser = 25, energy = 15, bomb = 55, bio = 100, rad = 50)
siemens_coefficient = 0.8
/obj/item/clothing/head/helmet/space/void/hedberg
name = "Hedberg-Hammarstrom combat helmet"
desc = "A heavily armoured helmet with built-in faceplate, built to withstand the rigours of modern combat and equipped for space use."
description_fluff = "The Hedberg-Hammarstrom company has operated Vir's military forces privately since 2566, but retains many of its unique armour designs exclusively for use in the private sector."
icon_state = "hedberg_helmet"
armor = list(melee = 70, bullet = 80, laser = 60, energy = 25, bomb = 40, bio = 100, rad = 0)
siemens_coefficient = 0.8
no_cycle = TRUE
+21 -44
View File
@@ -1,39 +1,47 @@
/obj/item/clothing/under/color
name = "purple jumpsuit"
desc = "The latest in utilitarian fashion."
icon_state = "purple"
rolled_sleeves = 0
rolled_down = 0
/obj/item/clothing/under/color/black
name = "black jumpsuit"
icon_state = "black"
rolled_sleeves = 0
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
name = "short black jumpsuit"
desc = "It's very smart and in a ladies size!"
icon_state = "black"
icon_state = "blackf"
worn_state = "blackf"
rolled_sleeves = -1
rolled_down = -1
index = 1
/obj/item/clothing/under/color/blackjumpskirt
name = "black jumpskirt"
desc = "A slimming black jumpskirt."
icon_state = "blackjumpskirt"
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
rolled_sleeves = -1
rolled_down = -1
index = 1
/obj/item/clothing/under/color/blue
name = "blue jumpsuit"
icon_state = "blue"
rolled_sleeves = 0
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
rolled_sleeves = 0
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
icon_state = "grey"
rolled_sleeves = 0
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
icon_state = "orange"
rolled_sleeves = 0
/obj/item/clothing/under/color/prison
name = "prison jumpsuit"
@@ -45,22 +53,18 @@
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
icon_state = "pink"
rolled_sleeves = 0
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
rolled_sleeves = 0
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
rolled_sleeves = 0
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
rolled_sleeves = 0
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
@@ -69,75 +73,48 @@
/obj/item/clothing/under/color/lightblue
name = "lightblue jumpsuit"
desc = "A light blue jumpsuit."
icon_state = "lightblue"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = 0
/obj/item/clothing/under/color/aqua
name = "aqua jumpsuit"
desc = "An aqua jumpsuit."
icon_state = "aqua"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = 0
/obj/item/clothing/under/color
name = "purple jumpsuit"
desc = "The latest in space fashion."
icon_state = "purple"
rolled_sleeves = 0
/obj/item/clothing/under/color/lightpurple
name = "lightpurple jumpsuit"
desc = "A light purple jumpsuit."
icon_state = "lightpurple"
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
rolled_sleeves = 0
/obj/item/clothing/under/color/lightgreen
name = "lightgreen jumpsuit"
desc = "A light green jumpsuit."
icon_state = "lightgreen"
item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
rolled_sleeves = 0
/obj/item/clothing/under/color/lightbrown
name = "lightbrown jumpsuit"
desc = "A light brown jumpsuit."
icon_state = "lightbrown"
rolled_sleeves = 0
/obj/item/clothing/under/color/brown
name = "brown jumpsuit"
desc = "A brown jumpsuit."
icon_state = "brown"
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
rolled_sleeves = 0
/obj/item/clothing/under/color/yellowgreen
name = "yellowgreen jumpsuit"
desc = "A... yellow green jumpsuit?"
icon_state = "yellowgreen"
item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow")
rolled_sleeves = 0
/obj/item/clothing/under/color/darkblue
name = "darkblue jumpsuit"
desc = "A dark blue jumpsuit."
icon_state = "darkblue"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = 0
/obj/item/clothing/under/color/lightred
name = "lightred jumpsuit"
desc = "A light red jumpsuit."
icon_state = "lightred"
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
rolled_sleeves = 0
/obj/item/clothing/under/color/darkred
name = "darkred jumpsuit"
desc = "A dark red jumpsuit."
icon_state = "darkred"
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
/obj/item/clothing/under/colorable
name = "plain jumpsuit"
desc = "The latest in utilitarian fashion."
icon_state = "colorable"
rolled_sleeves = 0
rolled_down = 0
+77 -16
View File
@@ -56,12 +56,18 @@
icon_state = "cargojf"
/obj/item/clothing/under/rank/chaplain
desc = "It's a black jumpsuit, often worn by religious folk."
desc = "It's a black jumpsuit, often worn by guidance staff."
name = "chaplain's jumpsuit"
icon_state = "chaplain"
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
rolled_sleeves = 0
/obj/item/clothing/under/rank/chaplain/alt
name = "chaplain's striped jumpsuit"
icon_state = "chaplain_alt"
rolled_sleeves = -1
index = 1
/obj/item/clothing/under/rank/chef
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
name = "chef's uniform"
@@ -116,15 +122,18 @@
rolled_sleeves = 0
/obj/item/clothing/under/lawyer
name = "baby blue suit"
desc = "Slick threads."
name = "lawyer suit"
icon_state = "ress_suit"
item_state_slots = list(slot_r_hand_str = "lightblue", slot_l_hand_str = "lightblue")
/obj/item/clothing/under/lawyer/black
name = "black lawyer suit"
name = "tacky black lawyer suit"
icon_state = "lawyer_black"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
/obj/item/clothing/under/lawyer/black/skirt
name = "black lawyer skirt"
name = "tacky black lawyer skirt"
icon_state = "lawyer_black_skirt"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
@@ -137,32 +146,36 @@
name = "black modern suit"
icon_state = "modern_suit_m"
index = 1
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
/obj/item/clothing/under/lawyer/modern/skirt
name = "black modern skirt"
icon_state = "modern_suit_f"
index = 1
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
/obj/item/clothing/under/lawyer/trimskirt
name = "blue-trim skirt"
icon_state = "trim_skirtsuit"
index = 1
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
/obj/item/clothing/under/lawyer/red
name = "red lawyer suit"
name = "tacky red suit"
icon_state = "lawyer_red"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
/obj/item/clothing/under/lawyer/red/skirt
name = "red lawyer skirt"
name = "tacky red skirt"
icon_state = "lawyer_red_skirt"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
/obj/item/clothing/under/lawyer/blue
name = "blue lawyer suit"
name = "tacky blue suit"
icon_state = "lawyer_blue"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
/obj/item/clothing/under/lawyer/blue/skirt
name = "blue lawyer skirt"
name = "tacky blue skirt"
icon_state = "lawyer_blue_skirt"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
@@ -170,12 +183,13 @@
name = "blue suit"
desc = "A classy suit."
icon_state = "bluesuit"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
starting_accessories = list(/obj/item/clothing/accessory/tie/red)
/obj/item/clothing/under/lawyer/bluesuit/skirt
name = "blue skirt suit"
icon_state = "bluesuit_skirt"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
/obj/item/clothing/under/lawyer/purpsuit
name = "purple suit"
@@ -185,6 +199,7 @@
/obj/item/clothing/under/lawyer/purpsuit/skirt
name = "purple skirt suit"
icon_state = "lawyer_purp_skirt"
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
/obj/item/clothing/under/lawyer/oldman
name = "Old Man's Suit"
@@ -192,18 +207,64 @@
icon_state = "oldman"
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
/obj/item/clothing/under/lawyer/librarian
name = "sensible suit"
desc = "It's very... sensible."
icon_state = "red_suit"
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
/obj/item/clothing/under/lawyer/retro_tan
name = "retro tan suit"
desc = "Just one more thing."
icon_state = "liaison_regular"
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
index = 1
/obj/item/clothing/under/lawyer/retro_white
name = "retro white suit"
desc = "Snappy!"
icon_state = "liaison_formal"
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
index = 1
/obj/item/clothing/under/lawyer/retro_waistcoat
name = "retro waistcoat"
desc = "The spectre of CEOs past."
icon_state = "manager_uniform"
index = 1
/obj/item/clothing/under/lawyer/retro_suspenders
name = "retro suspenders"
desc = "The spectre of CEOs past."
icon_state = "liaison_suspenders"
index = 1
/obj/item/clothing/under/lawyer/retro_clerk
name = "retro clerk's suit"
desc = "The spectre of toadies past."
icon_state = "trainee_uniform"
index = 1
/obj/item/clothing/under/lawyer/powersuit_black
name = "black and gold powersuit"
desc = "Resonates corporate energy."
icon_state = "director_uniform"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
index = 1
/obj/item/clothing/under/lawyer/powersuit_grey
name = "grey powersuit"
desc = "Resonates corporate energy."
icon_state = "stowaway_uniform"
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
index = 1
/obj/item/clothing/under/oldwoman
name = "Old Woman's Attire"
desc = "A typical outfit for the older woman, a lovely cardigan and comfortable skirt."
icon_state = "oldwoman"
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
/obj/item/clothing/under/librarian
name = "sensible suit"
desc = "It's very... sensible."
icon_state = "red_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
/obj/item/clothing/under/mime
name = "mime's outfit"
desc = "It's not very colourful."
@@ -114,6 +114,10 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
rolled_sleeves = 0
/obj/item/clothing/under/rank/medical/utility
name = "medical utility jumpsuit"
desc = "A hard-wearing version of the standard medical uniform, made with the same bioresistant lining. Designed for long term medical postings."
icon_state = "medical_util"
/obj/item/clothing/under/rank/medical/turtleneck
name = "medical turtleneck"
desc = "It's a stylish turtleneck made of bioresistant fiber. Look good, save lives- what more could you want?"
+14 -2
View File
@@ -926,6 +926,12 @@ Uniforms and such
icon_state = "cyberhell"
index = 1
/obj/item/clothing/under/cyberpunkpants
name = "cyberpunk split-side ensemble"
desc = "Cyberpunk styled split-side pants and matching top. Just in time for the dystopian future."
icon_state = "hart_jumpsuit"
index = 1
/obj/item/clothing/under/blackngold
name = "black and gold gown"
desc = "A black and gold gown. You get the impression this is typically worn for religious purposes."
@@ -1190,7 +1196,7 @@ Uniforms and such
rolled_sleeves = 0
/obj/item/clothing/under/sifcop
name = "\improper SifGuard law enforcement uniform"
name = "\improper SifGuard Police Division uniform"
desc = "A sturdy law enforcement uniform typical of Vir's civilian law enforcement officers."
icon_state = "sifcop"
worn_state = "sifcop"
@@ -1211,6 +1217,12 @@ Uniforms and such
icon_state = "retro_sweater"
worn_state = "retro_sweater"
/obj/item/clothing/under/retro_outdoors
name = "retro outsdoorwear"
desc = "A puffer vest over utility pants, for when you're really rustic and want everybody to know it."
icon_state = "liaison_outing"
index = 1
/obj/item/clothing/under/hightrousers
name = "high-waisted trousers"
desc = "A waistline this high is just made for ripping bodices, swashing buckles, or - just occasionally - sucking blood."
@@ -1307,4 +1319,4 @@ Uniforms and such
unicolor = "orange"
/obj/item/clothing/under/ranger/yellow
unicolor = "yellow"
unicolor = "yellow"
+23 -23
View File
@@ -133,7 +133,7 @@
/obj/item/clothing/under/teshari/undercoat
name = "Undercoat"
desc = "A Teshari traditional garb, with a modern twist! Made of micro and nanofibres to make it light and billowy, perfect for going fast and stylishly!"
desc = "Teshari traditional garb, with a modern twist! Made of nanofibres to make it light and billowy, perfect for going fast and stylishly!"
icon = 'icons/mob/species/teshari/teshari_uniform.dmi'
icon_override = 'icons/mob/species/teshari/teshari_uniform.dmi'
icon_state = "tesh_uniform_bo"
@@ -263,126 +263,126 @@
/obj/item/clothing/under/teshari/undercoat/jobs/cap
name = "facility director undercoat"
desc = "A traditional Teshari garb made for the Facility Director"
desc = "Traditional-style Teshari garb made for a Facility Director"
icon_state = "tesh_uniform_cap"
item_state = "tesh_uniform_cap"
/obj/item/clothing/under/teshari/undercoat/jobs/hop
name = "head of personnel undercoat"
desc = "A traditional Teshari garb made for the Head of Personnel"
desc = "Traditional-style Teshari garb made for a Head of Personnel"
icon_state = "tesh_uniform_hop"
item_state = "tesh_uniform_hop"
/obj/item/clothing/under/teshari/undercoat/jobs/ce
name = "cheif engineer undercoat"
desc = "A traditional Teshari garb made for the Chief Engineer"
name = "chief engineer undercoat"
desc = "Traditional-style Teshari garb made for a Chief Engineer"
icon_state = "tesh_uniform_ce"
item_state = "tesh_uniform_ce"
/obj/item/clothing/under/teshari/undercoat/jobs/hos
name = "head of security undercoat"
desc = "A traditional Teshari garb made for the Head of Security"
desc = "Traditional-style Teshari garb made for a Head of Security"
icon_state = "tesh_uniform_hos"
item_state = "tesh_uniform_hos"
/obj/item/clothing/under/teshari/undercoat/jobs/rd
name = "research director undercoat"
desc = "A traditional Teshari garb made for the Research Director"
desc = "Traditional-style Teshari garb made for a Research Director"
icon_state = "tesh_uniform_rd"
item_state = "tesh_uniform_rd"
/obj/item/clothing/under/teshari/undercoat/jobs/engineer
name = "engineering undercoat"
desc = "A traditional Teshari garb made for the Engineering department"
desc = "Traditional-style Teshari garb made for the Engineering department"
icon_state = "tesh_uniform_engie"
item_state = "tesh_uniform_engie"
/obj/item/clothing/under/teshari/undercoat/jobs/atmos
name = "atmospherics undercoat"
desc = "A traditional Teshari garb made for the Atmospheric Technician"
desc = "Traditional-style Teshari garb made for an Atmospheric Technician"
icon_state = "tesh_uniform_atmos"
item_state = "tesh_uniform_atmos"
/obj/item/clothing/under/teshari/undercoat/jobs/cmo
name = "chief medical officer undercoat"
desc = "A traditional Teshari garb made for the Cheif Medical Officer"
desc = "Traditional-style Teshari garb made for a Chief Medical Officer"
icon_state = "tesh_uniform_cmo"
item_state = "tesh_uniform_cmo"
/obj/item/clothing/under/teshari/undercoat/jobs/qm
name = "quartermaster undercoat"
desc = "A traditional Teshari garb made for the Quartermaster"
desc = "Traditional-style Teshari garb made for a Quartermaster"
icon_state = "tesh_uniform_qm"
item_state = "tesh_uniform_qm"
/obj/item/clothing/under/teshari/undercoat/jobs/cargo
name = "cargo undercoat"
desc = "A traditional Teshari garb made for the Cargo department"
desc = "Traditional-style Teshari garb made for the Cargo department"
icon_state = "tesh_uniform_car"
item_state = "tesh_uniform_car"
/obj/item/clothing/under/teshari/undercoat/jobs/mining
name = "mining undercoat"
desc = "A traditional Teshari garb made for Mining"
desc = "Traditional-style Teshari garb made for Mining"
icon_state = "tesh_uniform_mine"
item_state = "tesh_uniform_mine"
/obj/item/clothing/under/teshari/undercoat/jobs/medical
name = "medical undercoat"
desc = "A traditional Teshari garb made for the Medical department"
desc = "Traditional-style Teshari garb made for the Medical department"
icon_state = "tesh_uniform_doc"
item_state = "tesh_uniform_doc"
/obj/item/clothing/under/teshari/undercoat/jobs/chemistry
name = "chemist undercoat"
desc = "A traditional Teshari garb made for the Chemist"
desc = "Traditional-style Teshari garb made for a Chemist"
icon_state = "tesh_uniform_chem"
item_state = "tesh_uniform_chem"
/obj/item/clothing/under/teshari/undercoat/jobs/viro
name = "virologist undercoat"
desc = "A traditional Teshari garb made for the Virologist"
desc = "Traditional-style Teshari garb made for a Virologist"
icon_state = "tesh_uniform_viro"
item_state = "tesh_uniform_viro"
/obj/item/clothing/under/teshari/undercoat/jobs/psych
name = "psychiatrist undercoat"
desc = "A traditional Teshari garb made for the Psychiatrist"
desc = "Traditional-style Teshari garb made for a Psychiatrist"
icon_state = "tesh_uniform_psych"
item_state = "tesh_uniform_psych"
/obj/item/clothing/under/teshari/undercoat/jobs/para
name = "paramedic undercoat"
desc = "A traditional Teshari garb made for the Paramedic"
desc = "Traditional-style Teshari garb made for a Paramedic"
icon_state = "tesh_uniform_para"
item_state = "tesh_uniform_para"
/obj/item/clothing/under/teshari/undercoat/jobs/sci
name = "scientist undercoat"
desc = "A traditional Teshari garb made for the Science department"
desc = "Traditional-style Teshari garb made for the Science department"
icon_state = "tesh_uniform_sci"
item_state = "tesh_uniform_sci"
/obj/item/clothing/under/teshari/undercoat/jobs/robo
name = "roboticist undercoat"
desc = "A traditional Teshari garb made for the Roboticist"
desc = "Traditional-style Teshari garb made for the Roboticist"
icon_state = "tesh_uniform_robo"
item_state = "tesh_uniform_robo"
/obj/item/clothing/under/teshari/undercoat/jobs/sec
name = "security undercoat"
desc = "A traditional Teshari garb made for the Security department"
desc = "Traditional-style Teshari garb made for the Security department"
icon_state = "tesh_uniform_sec"
item_state = "tesh_uniform_sec"
/obj/item/clothing/under/teshari/undercoat/jobs/service
name = "service undercoat"
desc = "A traditional Teshari garb made for the Service department"
desc = "Traditional-style Teshari garb made for the Service department"
icon_state = "tesh_uniform_serv"
item_state = "tesh_uniform_serv"
/obj/item/clothing/under/teshari/undercoat/jobs/iaa
name = "internal affairs undercoat"
desc = "A traditional Teshari garb made for the Internal Affairs Agent"
desc = "Traditional-style Teshari garb made for an Internal Affairs Agent"
icon_state = "tesh_uniform_iaa"
item_state = "tesh_uniform_iaa"
+4 -6
View File
@@ -812,12 +812,10 @@
product = new has_item_product(get_turf(user))
else
product = new /obj/item/reagent_containers/food/snacks/grown(get_turf(user),name)
if(get_trait(TRAIT_PRODUCT_COLOUR))
if(!istype(product, /mob))
product.color = get_trait(TRAIT_PRODUCT_COLOUR)
if(istype(product,/obj/item/reagent_containers/food))
var/obj/item/reagent_containers/food/food = product
food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR)
if (get_trait(TRAIT_PRODUCT_COLOUR))
if (istype(product,/obj/item/reagent_containers/food))
var/obj/item/reagent_containers/food/food = product
food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR)
if(mysterious)
product.name += "?"
+40
View File
@@ -0,0 +1,40 @@
// You might be wondering why this isn't client level. If focus is null, we don't want you to move.
// Only way to do that is to tie the behavior into the focus's keyLoop().
// THE TRADITIONAL STYLE FROM /TG (modified)
/atom/movable/keyLoop(client/user)
var/must_call_move = FALSE
var/movement_dir = MOVEMENT_KEYS_TO_DIR(user.move_keys_held)
if(user.next_move_dir_add)
must_call_move = TRUE // So that next_move_dir_add gets cleared if its time.
movement_dir |= user.next_move_dir_add
if(user.next_move_dir_sub)
DEBUG_INPUT("[(user.next_move_dir_sub & movement_dir) ? "Actually" : "Want to"] subtract [dirs2text(user.next_move_dir_sub)] from [dirs2text(movement_dir)]")
must_call_move = TRUE // So that next_move_dir_sub gets cleared if its time.
movement_dir &= ~user.next_move_dir_sub
// Sanity checks in case you hold left and right and up to make sure you only go up
if((movement_dir & (NORTH|SOUTH)) == (NORTH|SOUTH))
movement_dir &= ~(NORTH|SOUTH)
if((movement_dir & (EAST|WEST)) == (EAST|WEST))
movement_dir &= ~(EAST|WEST)
#ifdef CARDINAL_INPUT_ONLY
if(movement_dir & user.last_move_dir_pressed)
movement_dir = user.last_move_dir_pressed
else if (movement_dir == NORTHEAST || movement_dir == NORTHWEST)
DEBUG_INPUT("overriding to NORTH: movement_dir=[dirs2text(movement_dir)] last=[dirs2text(user.last_move_dir_pressed)]")
movement_dir = NORTH
else if (movement_dir == SOUTHEAST || movement_dir == SOUTHWEST)
DEBUG_INPUT("overriding to SOUTH: movement_dir=[dirs2text(movement_dir)] last=[dirs2text(user.last_move_dir_pressed)]")
movement_dir = SOUTH
#endif
// Compensate for client camera spinning (client.dir) so our movement still makes sense I guess.
if(movement_dir) // Only compensate if non-zero, as byond will auto-fill dir otherwise
movement_dir = turn(movement_dir, -dir2angle(user.dir))
// Move, but only if we actually are planing to move, or we need to clear the next move vars
if(movement_dir || must_call_move)
user.Move(get_step(src, movement_dir), movement_dir)
@@ -0,0 +1,77 @@
// TODO - Optimize this into numerics if this ends up working out
var/global/list/MOVE_KEY_MAPPINGS = list(
"North" = NORTH_KEY,
"South" = SOUTH_KEY,
"East" = EAST_KEY,
"West" = WEST_KEY,
"W" = W_KEY,
"A" = A_KEY,
"S" = S_KEY,
"D" = D_KEY,
"Shift" = SHIFT_KEY,
"Ctrl" = CTRL_KEY,
"Alt" = ALT_KEY,
)
// These verbs are called for all movemen key press and release events
/client/verb/moveKeyDown(movekeyName as text)
set instant = TRUE
set hidden = TRUE
// set name = ".movekeydown"
set name = "KeyDown"
// Map text sent by skin.dmf to our numeric codes. (This can be optimized away once we update skin.dmf)
var/movekey = MOVE_KEY_MAPPINGS[movekeyName]
// Validate input. Must be one (and only one) of the key codes)
if(isnull(movekey) || (movekey & ~0xFFF) || (movekey & (movekey - 1)))
log_debug("Client [ckey] sent an illegal movement key down: [movekeyName] ([movekey])")
return
// Record that we are now holding the key!
move_keys_held |= (movekey & 0x0FF)
mod_keys_held |= (movekey & 0xF00)
// If we were NOT holding at the start of this move cycle and pressed it, remember that.
var/movement = MOVEMENT_KEYS_TO_DIR(movekey)
if(movement && !(next_move_dir_sub & movement) && !(mod_keys_held & CTRL_KEY)) // TODO-LESHANA - Possibly not holding Alt either
DEBUG_INPUT("Saving [dirs2text(movement)] into next_move_dir_ADD")
next_move_dir_add |= movement
#ifdef CARDINAL_INPUT_ONLY
if(movement)
DEBUG_INPUT("set last=[dirs2text(movement)]")
last_move_dir_pressed = movement
#endif
mob.focus?.key_down(movekey, src)
/client/verb/moveKeyUp(movekeyName as text)
set instant = TRUE
set hidden = TRUE
// set name = ".movekeyup"
set name = "KeyUp"
// Map text sent by skin.dmf to our numeric codes. (This can be optimized away once we update skin.dmf)
var/movekey = MOVE_KEY_MAPPINGS[movekeyName]
// Validate input. Must be one (and only one) of the key codes)
if(isnull(movekey) || (movekey & ~0xFFF) || (movekey & (movekey - 1)))
log_debug("Client [ckey] sent an illegal movement key up: [movekeyName] ([movekey])")
return
// Clear bit indicating we were holding the key
move_keys_held &= ~movekey
mod_keys_held &= ~movekey
// If we were holding at the start of this move cycle and now relased it, remember that.
var/movement = MOVEMENT_KEYS_TO_DIR(movekey)
if(movement && !(next_move_dir_add & movement))
DEBUG_INPUT("Saving [dirs2text(movement)] into next_move_dir_SUB")
next_move_dir_sub |= movement
mob.focus?.key_up(movekey, src)
// Called every game tick
/client/keyLoop()
mob.focus?.keyLoop(src)
+42
View File
@@ -0,0 +1,42 @@
# In-code keypress handling system
This whole system is heavily based off of forum_account's keyboard library.
Thanks to forum_account for saving the day, the library can be found
[here](https://secure.byond.com/developer/Forum_account/Keyboard)!
.dmf macros have some very serious shortcomings. For example, they do not allow reusing parts
of one macro in another, so giving cyborgs their own shortcuts to swap active module couldn't
inherit the movement that all mobs should have anyways. The webclient only supports one macro,
so having more than one was problematic. Additionally each keybind has to call an actual
verb, which meant a lot of hidden verbs that just call one other proc. Also our existing
macro was really bad and tied unrelated behavior into `Northeast()`, `Southeast()`, `Northwest()`,
and `Southwest()`.
The basic premise of this system is to not screw with .dmf macro setup at all and handle
pressing those keys in the code instead. We have every key call `client.keyDown()`
or `client.keyUp()` with the pressed key as an argument. Certain keys get processed
directly by the client because they should be doable at any time, then we call
`keyDown()` or `keyUp()` on the client's holder and the client's mob's focus.
By default `mob.focus` is the mob itself, but you can set it to any datum to give control of a
client's keypresses to another object. This would be a good way to handle a menu or driving
a mech. You can also set it to null to disregard input from a certain user.
Movement is handled by having each client call `client.keyLoop()` every game tick.
As above, this calls holder and `focus.keyLoop()`. `atom/movable/keyLoop()` handles movement
Try to keep the calculations in this proc light. It runs every tick for every client after all!
You can also tell which keys are being held down now. Each client a list of keys pressed called
`keys_held`. Each entry is a key as a text string associated with the world.time when it was
pressed.
No client-set keybindings at this time, but it shouldn't be too hard if someone wants.
Notes about certain keys:
* `Tab` has client-sided behavior but acts normally
* `T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away.
* `\` needs to be escaped in the dmf so any usage is `\\`
You cannot `TICK_CHECK` or check `world.tick_usage` inside of procs called by key down and up
events. They happen outside of a byond tick and have no meaning there. Key looping
works correctly since it's part of a subsystem, not direct input.
+49
View File
@@ -0,0 +1,49 @@
// Set a client's focus to an object and override these procs on that object to let it handle keypresses
/// Called when a key is pressed down initially
/datum/proc/key_down(key, client/user)
return
/// Called when a key is released
/datum/proc/key_up(key, client/user)
return
/// Called once every server tick
/datum/proc/keyLoop(client/user)
set waitfor = FALSE
return
/// Set mob's focus. TODO: Decide if required.
/mob/proc/set_focus(datum/new_focus)
if(focus == new_focus)
return
focus = new_focus
/// Turns a keys bitfield into text showing all bits set
/proc/keys2text(keys)
if(!keys)
return ""
var/list/out = list()
if(keys & NORTH_KEY)
out += "NORTH"
if(keys & SOUTH_KEY)
out += "SOUTH"
if(keys & EAST_KEY)
out += "EAST"
if(keys & WEST_KEY)
out += "WEST"
if(keys & W_KEY)
out += "W"
if(keys & A_KEY)
out += "A"
if(keys & S_KEY)
out += "S"
if(keys & D_KEY)
out += "D"
if(keys & CTRL_KEY)
out += "CTRL"
if(keys & SHIFT_KEY)
out += "SHIFT"
if(keys & ALT_KEY)
out += "ALT"
return out.Join(" ")
+9 -3
View File
@@ -249,11 +249,17 @@
++frustration
return
/mob/living/bot/proc/handleFrustrated(var/targ)
obstacle = targ ? target_path[1] : patrol_path[1]
/mob/living/bot/proc/handleFrustrated(has_target)
obstacle = null
if (has_target)
if (length(target_path))
obstacle = target_path[1]
else if (length(patrol_path))
obstacle = patrol_path[1]
target_path = list()
patrol_path = list()
return
/mob/living/bot/proc/lookForTargets()
return
+1 -1
View File
@@ -187,7 +187,7 @@
flick("mulebot-emagged", src)
update_icons()
/mob/living/bot/mulebot/handleFrustrated()
/mob/living/bot/mulebot/handleFrustrated(has_target)
custom_emote(2, "makes a sighing buzz.")
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
..()
@@ -1,6 +1,8 @@
/mob/living
see_invisible = SEE_INVISIBLE_LIVING
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE
//Health and life related vars
var/maxHealth = 100 //Maximum health that should be possible. Avoid adjusting this if you can, and instead use modifiers datums.
var/health = 100 //A mob's health
+11 -1
View File
@@ -1,3 +1,5 @@
/mob/CanPass(atom/movable/mover, turf/target)
if(ismob(mover))
var/mob/moving_mob = mover
@@ -147,7 +149,15 @@ default behaviour is:
now_pushing = 0
return
step(AM, t)
var/turf/T = AM.loc
var/turf/T2 = get_step(AM,t)
if(!T2) // Map edge
now_pushing = 0
return
var/move_time = movement_delay(loc, t) * SQRT_TWO
move_time = DS2NEARESTTICK(move_time)
if(AM.Move(T2, t, move_time))
Move(T, t, move_time)
if(ishuman(AM) && AM:grabbed_by)
for(var/obj/item/grab/G in AM:grabbed_by)
+3 -1
View File
@@ -40,6 +40,7 @@
else
living_mob_list += src
lastarea = get_area(src)
set_focus(src) // Key Handling
update_transform() // Some mobs may start bigger or smaller than normal.
return ..()
@@ -691,6 +692,7 @@
/mob/proc/facedir(var/ndir)
if(!canface() || (client && (client.moving || !checkMoveCooldown())))
DEBUG_INPUT("Denying Facedir for [src] (moving=[client?.moving])")
return 0
set_dir(ndir)
if(buckled && buckled.buckle_movable)
@@ -1192,4 +1194,4 @@
/mob/proc/handle_reagent_transfer(var/datum/reagents/holder, var/amount = 1, var/chem_type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0)
var/datum/reagents/R = new /datum/reagents(amount)
. = holder.trans_to_holder(R, amount, multiplier, copy)
R.touch_mob(src)
R.touch_mob(src)
+1
View File
@@ -223,3 +223,4 @@
var/registered_z
var/in_enclosed_vehicle = 0 //For mechs and fighters ambiance. Can be used in other cases.
var/datum/focus //What receives our keyboard inputs. src by default
+16 -1
View File
@@ -137,25 +137,36 @@
// Used many times below, faster reference.
var/atom/loc = my_mob.loc
// We're controlling an object which is SOMEHOW DIFFERENT FROM AN EYE??
// We're controlling an object which is when admins possess an object.
if(my_mob.control_object)
Move_object(direct)
// Ghosty mob movement
if(my_mob.incorporeal_move && isobserver(my_mob))
Process_Incorpmove(direct)
DEBUG_INPUT("--------")
next_move_dir_add = 0 // This one I *think* exists so you can tap move and it will move even if delay isn't quite up.
next_move_dir_sub = 0 // I'm not really sure why next_move_dir_sub even exists.
return
// We're in the middle of another move we've already decided to do
if(moving)
log_debug("Client [src] attempted to move while moving=[moving]")
return 0
// We're still cooling down from the last move
if(!my_mob.checkMoveCooldown())
return
DEBUG_INPUT("--------")
next_move_dir_add = 0 // This one I *think* exists so you can tap move and it will move even if delay isn't quite up.
next_move_dir_sub = 0 // I'm not really sure why next_move_dir_sub even exists.
if(!n || !direct)
return
// If dead and we try to move in our mob, it leaves our body
if(my_mob.stat == DEAD && isliving(my_mob) && !my_mob.forbid_seeing_deadchat)
my_mob.setMoveCooldown(my_mob.movement_delay(n, direct))
my_mob.ghostize()
return
@@ -284,6 +295,10 @@
else
. = my_mob.SelfMove(n, direct, total_delay)
// If we ended up moving diagonally, increase delay.
if((direct & (direct - 1)) && mob.loc == n)
my_mob.setMoveCooldown(total_delay * 2)
// If we have a grab
var/list/grablist = my_mob.ret_grab()
if(LAZYLEN(grablist))
+12 -10
View File
@@ -208,7 +208,7 @@
if(throwing)
return
if(can_fall())
if(can_fall() && can_fall_to(below))
// We spawn here to let the current move operation complete before we start falling. fall() is normally called from
// Entered() which is part of Move(), by spawn()ing we let that complete. But we want to preserve if we were in client movement
// or normal movement so other move behavior can continue.
@@ -278,6 +278,17 @@
/obj/structure/catwalk/CheckFall(var/atom/movable/falling_atom)
return falling_atom.fall_impact(src)
/atom/movable/proc/can_fall_to(turf/landing)
// Check if there is anything in our turf we are standing on to prevent falling.
for(var/obj/O in loc)
if(!O.CanFallThru(src, landing))
return FALSE
// See if something in turf below prevents us from falling into it.
for(var/atom/A in landing)
if(!A.CanPass(src, src.loc, 1, 0))
return FALSE
return TRUE
/obj/structure/lattice/CanFallThru(atom/movable/mover as mob|obj, turf/target as turf)
if(target.z >= z)
return TRUE // We don't block sideways or upward movement.
@@ -298,15 +309,6 @@
/atom/movable/proc/handle_fall(var/turf/landing)
var/turf/oldloc = loc
// Check if there is anything in our turf we are standing on to prevent falling.
for(var/obj/O in loc)
if(!O.CanFallThru(src, landing))
return FALSE
// See if something in turf below prevents us from falling into it.
for(var/atom/A in landing)
if(!A.CanPass(src, src.loc, 1, 0))
return FALSE
// Now lets move there!
if(!Move(landing))
return 1
+19
View File
@@ -445,6 +445,25 @@ var/global/const/standard_monitor_styles = "blank=ipc_blank;\
parts = list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
modular_bodyparts = MODULAR_BODYPART_PROSTHETIC
/datum/robolimb/wooden/teshari
company = "Morgan Trading Co - Teshari"
icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_teshari.dmi'
species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co")
suggested_species = SPECIES_TESHARI
/datum/robolimb/wooden/sif
company = "Morgan Trading Co - Sif wood"
desc = "A simplistic, metal-banded, wood-panelled prosthetic. This one is covered in Sivian wood!"
icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif.dmi'
/datum/robolimb/wooden/sif/teshari
company = "Morgan Trading Co - Sif wood - Teshari"
icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif_teshari.dmi'
species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co")
suggested_species = SPECIES_TESHARI
/obj/item/disk/limb
name = "Limb Blueprints"
desc = "A disk containing the blueprints for prosthetics."
@@ -244,6 +244,7 @@
/obj/item/crossbowframe
name = "crossbow frame"
desc = "A half-finished crossbow."
icon = 'icons/obj/weapons.dmi'
icon_state = "crossbowframe0"
item_state = "crossbow-solid"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

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