Hard upstream sync (#6951)

* maps - none of our changes included yet i'll get them in after i finish up the rest of the sync

* sync part 1 - underscore folders in code

* controllers folder

* datums folder

* game folder

* cmon, work

* modules - admin to awaymissions

* cargo to events

* fields to lighting

* mapping > ruins

* rest of the code folder

* rest of the folders in the root directory

* DME

* fixes compiling errors. it compiles so it works

* readds map changes

* fixes dogborg module select

* fixes typo in moduleselect_alternate_icon filepath
This commit is contained in:
deathride58
2018-05-31 23:03:18 +00:00
committed by kevinz000
parent b6e608cb4c
commit 2f9e3e403d
395 changed files with 134016 additions and 26287 deletions
+133 -3
View File
@@ -68,6 +68,73 @@
return 1
/datum/action/chameleon_outfit
name = "Select Chameleon Outfit"
button_icon_state = "chameleon_outfit"
var/list/outfit_options //By default, this list is shared between all instances. It is not static because if it were, subtypes would not be able to have their own. If you ever want to edit it, copy it first.
/datum/action/chameleon_outfit/New()
..()
initialize_outfits()
/datum/action/chameleon_outfit/proc/initialize_outfits()
var/static/list/standard_outfit_options
if(!standard_outfit_options)
standard_outfit_options = list()
for(var/path in subtypesof(/datum/outfit/job))
var/datum/outfit/O = path
if(initial(O.can_be_admin_equipped))
standard_outfit_options[initial(O.name)] = path
sortTim(standard_outfit_options, /proc/cmp_text_asc)
outfit_options = standard_outfit_options
/datum/action/chameleon_outfit/Trigger()
return select_outfit(owner)
/datum/action/chameleon_outfit/proc/select_outfit(mob/user)
if(!user || !IsAvailable())
return FALSE
var/selected = input("Select outfit to change into", "Chameleon Outfit") as null|anything in outfit_options
if(!IsAvailable() || QDELETED(src) || QDELETED(user))
return FALSE
var/outfit_type = outfit_options[selected]
if(!outfit_type)
return FALSE
var/datum/outfit/O = new outfit_type()
var/list/outfit_types = O.get_chameleon_disguise_info()
for(var/V in user.chameleon_item_actions)
var/datum/action/item_action/chameleon/change/A = V
var/done = FALSE
for(var/T in outfit_types)
for(var/name in A.chameleon_list)
if(A.chameleon_list[name] == T)
A.update_look(user, T)
outfit_types -= T
done = TRUE
break
if(done)
break
//hardsuit helmets/suit hoods
if(O.toggle_helmet && (ispath(O.suit, /obj/item/clothing/suit/space/hardsuit) || ispath(O.suit, /obj/item/clothing/suit/hooded)) && ishuman(user))
var/mob/living/carbon/human/H = user
//make sure they are actually wearing the suit, not just holding it, and that they have a chameleon hat
if(istype(H.wear_suit, /obj/item/clothing/suit/chameleon) && istype(H.head, /obj/item/clothing/head/chameleon))
var/helmet_type
if(ispath(O.suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/hardsuit = O.suit
helmet_type = initial(hardsuit.helmettype)
else
var/obj/item/clothing/suit/hooded/hooded = O.suit
helmet_type = initial(hooded.hoodtype)
if(helmet_type)
var/obj/item/clothing/head/chameleon/hat = H.head
hat.chameleon_action.update_look(user, helmet_type)
qdel(O)
return TRUE
/datum/action/item_action/chameleon/change
name = "Chameleon Change"
var/list/chameleon_blacklist = list() //This is a typecache
@@ -77,6 +144,24 @@
var/emp_timer
/datum/action/item_action/chameleon/change/Grant(mob/M)
if(M && (owner != M))
if(!M.chameleon_item_actions)
M.chameleon_item_actions = list(src)
var/datum/action/chameleon_outfit/O = new /datum/action/chameleon_outfit()
O.Grant(M)
else
M.chameleon_item_actions |= src
..()
/datum/action/item_action/chameleon/change/Remove(mob/M)
if(M && (M == owner))
LAZYREMOVE(M.chameleon_item_actions, src)
if(!LAZYLEN(M.chameleon_item_actions))
var/datum/action/chameleon_outfit/O = locate(/datum/action/chameleon_outfit) in M.actions
qdel(O)
..()
/datum/action/item_action/chameleon/change/proc/initialize_disguises()
if(button)
button.name = "Change [chameleon_name] Appearance"
@@ -85,9 +170,7 @@
for(var/V in typesof(chameleon_type))
if(ispath(V) && ispath(V, /obj/item))
var/obj/item/I = V
if(chameleon_blacklist[V] || (initial(I.flags_1) & ABSTRACT_1))
continue
if(!initial(I.icon_state) || !initial(I.item_state))
if(chameleon_blacklist[V] || (initial(I.flags_1) & ABSTRACT_1) || !initial(I.icon_state))
continue
var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])"
chameleon_list[chameleon_item_name] = I
@@ -195,6 +278,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/under/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/under/chameleon/broken/Initialize()
@@ -221,6 +307,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/suit/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/suit/chameleon/broken/Initialize()
@@ -246,6 +335,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/glasses/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/glasses/chameleon/broken/Initialize()
@@ -272,6 +364,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/gloves/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/gloves/chameleon/broken/Initialize()
@@ -298,6 +393,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/head/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/head/chameleon/broken/Initialize()
@@ -345,6 +443,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/mask/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/mask/chameleon/broken/Initialize()
@@ -395,6 +496,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/shoes/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/shoes/chameleon/noslip
@@ -420,6 +524,9 @@
chameleon_action.initialize_disguises()
/obj/item/storage/backpack/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/storage/backpack/chameleon/broken/Initialize()
@@ -445,6 +552,9 @@
STR.silent = TRUE
/obj/item/storage/belt/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/storage/belt/chameleon/broken/Initialize()
@@ -463,6 +573,9 @@
chameleon_action.initialize_disguises()
/obj/item/radio/headset/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/radio/headset/chameleon/broken/Initialize()
@@ -482,8 +595,25 @@
chameleon_action.initialize_disguises()
/obj/item/pda/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/pda/chameleon/broken/Initialize()
. = ..()
chameleon_action.emp_randomise(INFINITY)
/obj/item/stamp/chameleon
var/datum/action/item_action/chameleon/change/chameleon_action
/obj/item/stamp/chameleon/Initialize()
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/stamp
chameleon_action.chameleon_name = "Stamp"
chameleon_action.initialize_disguises()
/obj/item/stamp/chameleon/broken/Initialize()
. = ..()
chameleon_action.emp_randomise(INFINITY)
+1 -1
View File
@@ -90,7 +90,7 @@
for(var/variable in user_vars_to_edit)
if(variable in user.vars)
LAZYSET(user_vars_remembered, variable, user.vars[variable])
user.vars[variable] = user_vars_to_edit[variable]
user.vv_edit_var(variable, user_vars_to_edit[variable])
/obj/item/clothing/examine(mob/user)
..()
+6 -2
View File
@@ -286,8 +286,10 @@
glass_colour_type = /datum/client_colour/glass_colour/red
/obj/item/clothing/glasses/thermal/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
thermal_overload()
..()
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
name = "chameleon thermals"
@@ -305,7 +307,9 @@
chameleon_action.initialize_disguises()
/obj/item/clothing/glasses/thermal/syndi/emp_act(severity)
..()
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
/obj/item/clothing/glasses/thermal/monocle
+7 -2
View File
@@ -17,7 +17,8 @@
H.remove_hud_from(user)
/obj/item/clothing/glasses/hud/emp_act(severity)
if(obj_flags & EMAGGED)
. = ..()
if(obj_flags & EMAGGED || . & EMP_PROTECT_SELF)
return
obj_flags |= EMAGGED
desc = "[desc] The display is flickering slightly."
@@ -96,6 +97,8 @@
/obj/item/clothing/glasses/hud/security/chameleon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
chameleon_action.emp_randomise()
@@ -192,5 +195,7 @@
user.update_inv_glasses()
/obj/item/clothing/glasses/hud/toggle/thermal/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
thermal_overload()
..()
-6
View File
@@ -233,12 +233,6 @@
icon_state = "knight_red"
item_state = "knight_red"
/obj/item/clothing/head/helmet/knight/templar
name = "crusader helmet"
desc = "Deus Vult."
icon_state = "knight_templar"
item_state = "knight_templar"
/obj/item/clothing/head/helmet/skull
name = "skull helmet"
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
-18
View File
@@ -55,24 +55,6 @@
flags_inv = HIDEHAIR
flags_cover = HEADCOVERSEYES
/obj/item/clothing/head/cage
name = "cage"
desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is."
alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
icon_state = "cage"
item_state = "cage"
worn_x_dimension = 64
worn_y_dimension = 64
dynamic_hair_suffix = ""
/obj/item/clothing/head/witchunter_hat
name = "witchunter hat"
desc = "This hat saw much use back in the day."
icon_state = "witchhunterhat"
item_state = "witchhunterhat"
flags_cover = HEADCOVERSEYES
//Detective
/obj/item/clothing/head/fedora/det_hat
name = "detective's fedora"
+39
View File
@@ -0,0 +1,39 @@
/datum/outfit/vr
name = "Basic VR"
uniform = /obj/item/clothing/under/color/random
shoes = /obj/item/clothing/shoes/sneakers/black
ears = /obj/item/radio/headset
id = /obj/item/card/id
/datum/outfit/vr/post_equip(mob/living/carbon/human/H)
var/datum/job/captain/J = new/datum/job/captain
var/obj/item/card/id/id = H.wear_id
if (id)
id.access |= J.get_access()
/datum/outfit/vr/syndicate
name = "Syndicate VR Operative - Basic"
uniform = /obj/item/clothing/under/syndicate
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
back = /obj/item/storage/backpack
id = /obj/item/card/id/syndicate
belt = /obj/item/gun/ballistic/automatic/pistol
l_pocket = /obj/item/paper/fluff/vr/fluke_ops
backpack_contents = list(/obj/item/storage/box/syndie=1,\
/obj/item/kitchen/knife/combat/survival)
/datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H)
. = ..()
var/obj/item/radio/uplink/U = new /obj/item/radio/uplink/nuclear_restricted(H, H.key, 80)
H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK)
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H)
W.implant(H)
var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H)
E.implant(H)
H.faction |= ROLE_SYNDICATE
H.update_icons()
/obj/item/paper/fluff/vr/fluke_ops
name = "Where is my uplink?"
info = "Use the radio in your backpack."
@@ -67,6 +67,9 @@
return ..()
/obj/item/clothing/suit/space/chronos/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
var/mob/living/carbon/human/user = src.loc
switch(severity)
if(1)
@@ -189,11 +189,13 @@
. = ..()
/obj/item/flightpack/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
var/damage = severity == 1 ? emp_strong_damage : emp_weak_damage
if(emp_damage <= (emp_disable_threshold * 1.5))
emp_damage += damage
usermessage("WARNING: Class [severity] EMP detected! Circuit damage at [(emp_damage/emp_disable_threshold)*100]%!", "boldwarning")
return ..()
//Proc to change amount of momentum the wearer has, or dampen all momentum by a certain amount.
/obj/item/flightpack/proc/adjust_momentum(amountx, amounty, reduce_amount_total = 0)
@@ -758,7 +760,7 @@
item_state = "flightsuit"
strip_delay = 30
w_class = WEIGHT_CLASS_BULKY
resistance_flags = FIRE_PROOF
resistance_flags = FIRE_PROOF | ACID_PROOF
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/flightsuit
jetpack = null
actions_types = list(/datum/action/item_action/flightsuit/toggle_helmet, /datum/action/item_action/flightsuit/toggle_boots, /datum/action/item_action/flightsuit/toggle_flightpack, /datum/action/item_action/flightsuit/lock_suit)
@@ -1079,12 +1081,12 @@
icon_state = "flighthelmet"
item_state = "flighthelmet"
item_color = "flight"
resistance_flags = FIRE_PROOF
resistance_flags = FIRE_PROOF | ACID_PROOF
brightness_on = 7
light_color = "#30ffff"
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 30, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 100)
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
var/list/datahuds = list(DATA_HUD_SECURITY_BASIC, DATA_HUD_MEDICAL_BASIC, DATA_HUD_DIAGNOSTIC_BASIC) //CITADEL NERF
var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_BASIC)
var/zoom_range = 12
var/zoom = FALSE
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/flightpack/zoom)
+1 -1
View File
@@ -86,7 +86,7 @@
soundloop.last_radiation = rad_record
/obj/item/clothing/head/helmet/space/hardsuit/emp_act(severity)
..()
. = ..()
display_visor_message("[severity > 1 ? "Light" : "Strong"] electromagnetic pulse detected!")
-6
View File
@@ -234,9 +234,3 @@
/obj/item/clothing/suit/armor/riot/knight/red
icon_state = "knight_red"
item_state = "knight_red"
/obj/item/clothing/suit/armor/riot/knight/templar
name = "crusader armour"
desc = "God wills it!"
icon_state = "knight_templar"
item_state = "knight_templar"
-16
View File
@@ -23,22 +23,6 @@
allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
//Chaplain
/obj/item/clothing/suit/hooded/chaplain_hoodie
name = "chaplain hoodie"
desc = "This suit says to you 'hush'!"
icon_state = "chaplain_hoodie"
item_state = "chaplain_hoodie"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood
/obj/item/clothing/head/hooded/chaplain_hood
name = "chaplain hood"
desc = "For protecting your identity when immolating demons."
icon_state = "chaplain_hood"
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
/obj/item/clothing/suit/nun
name = "nun robe"
desc = "Maximum piety in this star system."
+1 -1
View File
@@ -5,7 +5,7 @@
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman,/obj/item/hypospray) //CITADEL ADD, Hyposprays to laboats
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50)
togglename = "buttons"
species_exception = list(/datum/species/golem)
+17 -7
View File
@@ -52,11 +52,13 @@
return
/obj/item/clothing/suit/armor/reactive/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
active = 0
icon_state = "reactiveoff"
item_state = "reactiveoff"
reactivearmor_cooldown = world.time + 200
..()
//When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!)
/obj/item/clothing/suit/armor/reactive/teleport
@@ -152,12 +154,21 @@
siemens_coefficient = -1
var/tesla_power = 25000
var/tesla_range = 20
var/tesla_boom = FALSE
var/tesla_stun = FALSE
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE
/obj/item/clothing/suit/armor/reactive/tesla/dropped(mob/user)
..()
if(istype(user))
user.flags_1 &= ~TESLA_IGNORE_1
/obj/item/clothing/suit/armor/reactive/tesla/equipped(mob/user, slot)
..()
if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item?
user.flags_1 |= TESLA_IGNORE_1
/obj/item/clothing/suit/armor/reactive/tesla/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(!active)
return 0
return FALSE
if(prob(hit_reaction_chance))
if(world.time < reactivearmor_cooldown)
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
@@ -166,10 +177,9 @@
owner.visible_message("<span class='danger'>The tesla capacitors on [owner]'s reactive tesla armor are still recharging! The armor merely emits some sparks.</span>")
return
owner.visible_message("<span class='danger'>[src] blocks [attack_text], sending out arcs of lightning!</span>")
tesla_zap(owner,tesla_range,tesla_power,tesla_boom, tesla_stun)
tesla_zap(owner, tesla_range, tesla_power, tesla_flags)
reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
return 1
return TRUE
//Repulse
@@ -614,7 +614,6 @@
/obj/item/clothing/under/plasmaman
name = "plasma envirosuit"
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
icon = 'icons/obj/device.dmi'
icon_state = "plasmaman"
item_state = "plasmaman"
item_color = "plasmaman"