Merge remote-tracking branch 'upstream/master' into dynamicport
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
ambientsounds = RUINS
|
||||
sound_environment = SOUND_ENVIRONMENT_STONEROOM
|
||||
var/valid_territory = FALSE // hey so what if we did not allow things like cult summons to appear on ruins
|
||||
|
||||
|
||||
/area/ruin/unpowered
|
||||
|
||||
@@ -160,12 +160,14 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo.
|
||||
|
||||
/datum/objective/proc/give_special_equipment(special_equipment)
|
||||
var/datum/mind/receiver = pick(get_owners())
|
||||
. = list()
|
||||
if(receiver && receiver.current)
|
||||
if(ishuman(receiver.current))
|
||||
var/mob/living/carbon/human/H = receiver.current
|
||||
var/list/slots = list("backpack" = SLOT_IN_BACKPACK)
|
||||
for(var/eq_path in special_equipment)
|
||||
var/obj/O = new eq_path
|
||||
. += O
|
||||
H.equip_in_one_of_slots(O, slots, critical = TRUE)
|
||||
|
||||
/datum/objective/assassinate
|
||||
@@ -560,6 +562,7 @@ GLOBAL_LIST_EMPTY(possible_items)
|
||||
name = "steal"
|
||||
var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later.
|
||||
var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums).
|
||||
var/list/special_items_given = list()
|
||||
martyr_compatible = 0
|
||||
|
||||
/datum/objective/steal/get_target()
|
||||
@@ -571,6 +574,11 @@ GLOBAL_LIST_EMPTY(possible_items)
|
||||
for(var/I in subtypesof(/datum/objective_item/steal))
|
||||
new I
|
||||
|
||||
/datum/objective/steal/Destroy(force, ...)
|
||||
if(length(special_items_given))
|
||||
QDEL_LIST(special_items_given)
|
||||
. = ..()
|
||||
|
||||
/datum/objective/steal/find_target(dupe_search_range, blacklist)
|
||||
var/list/datum/mind/owners = get_owners()
|
||||
var/approved_targets = list()
|
||||
@@ -589,7 +597,7 @@ GLOBAL_LIST_EMPTY(possible_items)
|
||||
targetinfo = item
|
||||
steal_target = targetinfo.targetitem
|
||||
explanation_text = "Steal [targetinfo.name]"
|
||||
give_special_equipment(targetinfo.special_equipment)
|
||||
special_items_given = give_special_equipment(targetinfo.special_equipment)
|
||||
return steal_target
|
||||
else
|
||||
explanation_text = "Free objective"
|
||||
@@ -1180,6 +1188,7 @@ GLOBAL_LIST_EMPTY(possible_sabotages)
|
||||
/datum/objective/sabotage
|
||||
name = "sabotage"
|
||||
var/datum/sabotage_objective/targetinfo = null //composition > inheritance.
|
||||
var/list/special_items_given = list()
|
||||
|
||||
/datum/objective/sabotage/get_target()
|
||||
return targetinfo.sabotage_type
|
||||
@@ -1190,6 +1199,11 @@ GLOBAL_LIST_EMPTY(possible_sabotages)
|
||||
for(var/I in subtypesof(/datum/sabotage_objective))
|
||||
new I
|
||||
|
||||
/datum/objective/sabotage/Destroy()
|
||||
if(length(special_items_given))
|
||||
QDEL_LIST(special_items_given)
|
||||
. = ..()
|
||||
|
||||
/datum/objective/sabotage/find_target(dupe_search_range, blacklist)
|
||||
var/list/datum/mind/owners = get_owners()
|
||||
var/approved_targets = list()
|
||||
@@ -1207,7 +1221,7 @@ GLOBAL_LIST_EMPTY(possible_sabotages)
|
||||
if(sabo)
|
||||
targetinfo = sabo
|
||||
explanation_text = "[targetinfo.name]"
|
||||
give_special_equipment(targetinfo.special_equipment)
|
||||
special_items_given = give_special_equipment(targetinfo.special_equipment)
|
||||
return sabo
|
||||
else
|
||||
explanation_text = "Free objective"
|
||||
|
||||
@@ -582,3 +582,14 @@ Class Procs:
|
||||
|
||||
/obj/machinery/rust_heretic_act()
|
||||
take_damage(500, BRUTE, "melee", 1)
|
||||
|
||||
/**
|
||||
* Alerts the AI that a hack is in progress.
|
||||
*
|
||||
* Sends all AIs a message that a hack is occurring. Specifically used for space ninja tampering as this proc was originally in the ninja files.
|
||||
* However, the proc may also be used elsewhere.
|
||||
*/
|
||||
/obj/machinery/proc/AI_notify_hack()
|
||||
var/alertstr = "<span class='userdanger'>Network Alert: Hacking attempt detected[get_area(src)?" in [get_area_name(src, TRUE)]":". Unable to pinpoint location"].</span>"
|
||||
for(var/mob/living/silicon/ai/AI in GLOB.player_list)
|
||||
to_chat(AI, alertstr)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN
|
||||
use_power = NO_POWER_USE
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
icon_state = "sheater-off"
|
||||
name = "space heater"
|
||||
@@ -72,7 +73,7 @@
|
||||
on = FALSE
|
||||
return PROCESS_KILL
|
||||
|
||||
if(cell && cell.charge > 0)
|
||||
if(cell && cell.charge > 1 / efficiency)
|
||||
var/turf/L = loc
|
||||
PerformHeating(L)
|
||||
|
||||
@@ -112,7 +113,9 @@
|
||||
var/requiredPower = abs(env.return_temperature() - targetTemperature) * heat_capacity
|
||||
requiredPower = min(requiredPower, heatingPower)
|
||||
|
||||
if(requiredPower < 1)
|
||||
if(requiredPower < 1 || !cell.use(requiredPower / efficiency))
|
||||
on = FALSE
|
||||
update_icon()
|
||||
return
|
||||
|
||||
var/deltaTemperature = requiredPower / heat_capacity
|
||||
@@ -121,7 +124,6 @@
|
||||
if(deltaTemperature)
|
||||
env.set_temperature(env.return_temperature() + deltaTemperature)
|
||||
air_update_turf()
|
||||
cell.use(requiredPower / efficiency)
|
||||
|
||||
/obj/machinery/space_heater/RefreshParts()
|
||||
var/laser = 2
|
||||
|
||||
@@ -890,8 +890,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
var/user = usr
|
||||
tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE)//timer takes delay in deciseconds, but the pref is in milliseconds. dividing by 100 converts it.
|
||||
var/mob/living/L = usr
|
||||
if(istype(L) && L.incapacitated())
|
||||
apply_outline(COLOR_RED_GRAY)
|
||||
if(istype(L) && (L.incapacitated() || (current_equipped_slot in L.check_obscured_slots()) || !L.canUnEquip(src)))
|
||||
apply_outline(_size = 3)
|
||||
else
|
||||
apply_outline()
|
||||
|
||||
@@ -905,7 +905,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
closeToolTip(usr)
|
||||
remove_outline()
|
||||
|
||||
/obj/item/proc/apply_outline(colour = null)
|
||||
/obj/item/proc/apply_outline(colour = null, _size=1)
|
||||
if(!(item_flags & IN_INVENTORY || item_flags & IN_STORAGE) || QDELETED(src) || isobserver(usr))
|
||||
return
|
||||
if(usr.client)
|
||||
@@ -920,7 +920,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
colour = COLOR_BLUE_GRAY
|
||||
if(outline_filter)
|
||||
filters -= outline_filter
|
||||
outline_filter = filter(type="outline", size=1, color=colour)
|
||||
outline_filter = filter(type="outline", size=_size, color=colour)
|
||||
filters += outline_filter
|
||||
|
||||
/obj/item/proc/remove_outline()
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
/obj/item/dogborg/sleeper/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "dogborg_sleeper", name, 375, 550) //UI DOES NOT EXIST
|
||||
ui = new(user, src, "Sleeper", name)
|
||||
ui.open()
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_data()
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
* Glass sheets
|
||||
*/
|
||||
GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE), \
|
||||
null, \
|
||||
new/datum/stack_recipe_list("glass working bases", list( \
|
||||
new/datum/stack_recipe("chem dish", /obj/item/glasswork/glass_base/dish, 10), \
|
||||
@@ -95,8 +95,8 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
|
||||
|
||||
GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass
|
||||
@@ -147,10 +147,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
* Reinforced glass sheets
|
||||
*/
|
||||
GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 20, on_floor = TRUE, window_checks = TRUE), \
|
||||
null, \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \
|
||||
))
|
||||
|
||||
|
||||
@@ -198,8 +198,8 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
. += GLOB.reinforced_glass_recipes
|
||||
|
||||
GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass
|
||||
@@ -226,7 +226,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
S.efficiency *= 1.2
|
||||
|
||||
GLOBAL_LIST_INIT(titaniumglass_recipes, list(
|
||||
new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE)
|
||||
new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE)
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/titaniumglass
|
||||
@@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
|
||||
S.efficiency *= 1.5
|
||||
|
||||
GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
new/datum/stack_recipe("plastitanium window", /obj/structure/window/plastitanium/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE)
|
||||
new/datum/stack_recipe("plastitanium window", /obj/structure/window/plastitanium/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE)
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/plastitaniumglass
|
||||
|
||||
@@ -259,8 +259,8 @@
|
||||
/obj/item/storage/backpack/satchel/bone
|
||||
name = "bone satchel"
|
||||
desc = "A grotesque satchel made of sinews and bones."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "goliath_saddle"
|
||||
icon_state = "satchel-bone"
|
||||
item_state = "satchel-bone"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
|
||||
/obj/item/storage/backpack/satchel/bone/ComponentInitialize()
|
||||
|
||||
@@ -615,9 +615,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
name = "throwing star"
|
||||
desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts."
|
||||
icon_state = "throwingstar"
|
||||
item_state = "eshield0"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
|
||||
item_state = "throwingstar"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
force = 2
|
||||
throwforce = 10 //10 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 18 damage on hit due to guaranteed embedding
|
||||
throw_speed = 4
|
||||
@@ -630,8 +630,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/throwing_star/stamina
|
||||
name = "shock throwing star"
|
||||
name = "energy throwing star"
|
||||
desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm."
|
||||
icon_state = "energystar"
|
||||
item_state = "energystar"
|
||||
throwforce = 5
|
||||
embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user