Merge remote-tracking branch 'upstream/master' into diagonal-movement

This commit is contained in:
Couls
2019-06-22 03:54:43 -04:00
72 changed files with 858 additions and 699 deletions
@@ -161,7 +161,7 @@ var/sc_safecode5 = "[rand(0,9)]"
desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible."
move_self = 0 //Contianed narsie does not move!
grav_pull = 0 //Contained narsie does not pull stuff in!
var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_object, /mob/living/simple_animal/hostile/construct)
var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct)
//Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment
/obj/singularity/narsie/sc_Narsie/admin_investigate_setup()
@@ -173,14 +173,16 @@ var/sc_safecode5 = "[rand(0,9)]"
mezzer()
/obj/singularity/narsie/sc_Narsie/consume(var/atom/A)
if(!A.simulated)
return FALSE
if(is_type_in_list(A, uneatable))
return 0
return FALSE
if(istype(A,/mob/living))
var/mob/living/L = A
L.gib()
else if(istype(A,/obj/))
var/obj/O = A
O.ex_act(1.0)
O.ex_act(1)
if(O) qdel(O)
else if(isturf(A))
var/turf/T = A
+19 -17
View File
@@ -34,7 +34,6 @@
qdel(O)
wormholes.Cut()
/obj/effect/portal/wormhole
name = "wormhole"
desc = "It looks highly unstable; It could close at any moment."
@@ -42,23 +41,26 @@
icon_state = "anom"
failchance = 0
/obj/effect/portal/wormhole/attack_hand(mob/user)
teleport(user)
/obj/effect/portal/wormhole/can_teleport(atom/movable/M)
. = ..()
/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params)
teleport(user)
if(istype(M, /obj/singularity))
. = FALSE
/obj/effect/portal/wormhole/teleport(atom/movable/M)
if(istype(M, /obj/effect)) //sparks don't teleport
return
if(M.anchored && istype(M, /obj/mecha))
return
if(!can_teleport(M))
return FALSE
if(istype(M, /atom/movable))
var/turf/target
if(GLOB.portals.len)
var/obj/effect/portal/P = pick(GLOB.portals)
if(P && isturf(P.loc))
target = P.loc
if(!target) return
do_teleport(M, target, 1, 1, 0, 0) ///You will appear adjacent to the beacon
var/turf/target
if(GLOB.portals.len)
var/obj/effect/portal/P = pick(GLOB.portals)
if(P && isturf(P.loc))
target = P.loc
if(!target)
return FALSE
if(!do_teleport(M, target, 1, TRUE)) ///You will appear adjacent to the beacon
return FALSE
return TRUE
@@ -129,7 +129,7 @@
name = "goliath meat"
desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava."
icon_state = "goliathmeat"
list_reagents = list("nutriment" = 3, "toxin" = 5)
list_reagents = list("protein" = 3, "toxin" = 5)
/obj/item/reagent_containers/food/snacks/goliath/burn()
visible_message("[src] finishes cooking!")
@@ -222,6 +222,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF
icon_state = "goliathsteak"
trash = null
list_reagents = list("protein" = 6, "vitamin" = 2)
//////////////////////
// Cubes //
@@ -157,6 +157,9 @@
pass_flags = PASSTABLE
visible_contents = FALSE
/obj/machinery/smartfridge/disks/accept_check(obj/item/O)
return istype(O, /obj/item/disk)
// ----------------------------
// Virology Medical Smartfridge
// ----------------------------
+26 -28
View File
@@ -699,7 +699,7 @@
/obj/item/wormhole_jaunter
name = "wormhole jaunter"
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least."
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms."
icon = 'icons/obj/items.dmi'
icon_state = "Jaunter"
item_state = "electronic"
@@ -708,15 +708,16 @@
throw_speed = 3
throw_range = 5
origin_tech = "bluespace=2"
slot_flags = SLOT_BELT
/obj/item/wormhole_jaunter/attack_self(mob/user)
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
user.visible_message("<span class='notice'>[user.name] activates the [name]!</span>")
activate(user, TRUE)
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf || !is_teleport_allowed(device_turf.z))
to_chat(user, "<span class='notice'>You're having difficulties getting the [src.name] to work.</span>")
to_chat(user, "<span class='notice'>You're having difficulties getting the [name] to work.</span>")
return FALSE
return TRUE
@@ -736,49 +737,42 @@
var/list/L = get_destinations(user)
if(!L.len)
to_chat(user, "<span class='notice'>The [src.name] found no beacons in the world to anchor a wormhole to.</span>")
to_chat(user, "<span class='notice'>The [name] found no beacons in the world to anchor a wormhole to.</span>")
return
var/chosen_beacon = pick(L)
var/obj/effect/portal/wormhole/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon))
var/obj/effect/portal/jaunt_tunnel/J = new(get_turf(src), get_turf(chosen_beacon), src, 100)
if(adjacent)
try_move_adjacent(J)
else
J.teleport(user)
playsound(src,'sound/effects/sparks4.ogg',50,1)
qdel(src)
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
if(user.get_item_by_slot(SLOT_BELT) == src)
if(user.get_item_by_slot(slot_belt) == src)
to_chat(user, "Your [name] activates, saving you from the chasm!</span>")
activate(user, FALSE)
else
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
/obj/effect/portal/wormhole/jaunt_tunnel
/obj/effect/portal/jaunt_tunnel
name = "jaunt tunnel"
icon = 'icons/effects/effects.dmi'
icon_state = "bhole3"
desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
failchance = 0
/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M)
if(istype(M, /obj/effect))
return
if(istype(M, /atom/movable))
if(do_teleport(M, target, 6))
if(isliving(M))
var/mob/living/L = M
L.Weaken(3)
if(ishuman(L))
shake_camera(L, 20, 1)
var/mob/living/carbon/human/H = L
spawn(20)
if(H && H.check_has_mouth())
H.visible_message("<span class='danger'>[L.name] vomits from travelling through the [src.name]!</span>", "<span class='userdanger'>You throw up from travelling through the [src.name]!</span>")
H.nutrition -= 20
H.adjustToxLoss(-3)
var/turf/T = get_turf(H)
T.add_vomit_floor()
else
visible_message("<span class='warning'>[src] flickers and fails, due to bluespace interference!</span>")
qdel(src)
/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M)
. = ..()
if(.)
// KERPLUNK
playsound(M,'sound/weapons/resonator_blast.ogg', 50, 1)
if(iscarbon(M))
var/mob/living/carbon/L = M
L.Weaken(6)
if(ishuman(L))
shake_camera(L, 20, 1)
addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20)
/**********************Resonator**********************/
@@ -911,6 +905,7 @@
throw_range = 5
var/loaded = 1
var/malfunctioning = 0
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
/obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
if(!loaded)
@@ -918,6 +913,9 @@
if(istype(target, /mob/living) && proximity_flag)
if(istype(target, /mob/living/simple_animal))
var/mob/living/simple_animal/M = target
if(M.sentience_type != revive_type)
to_chat(user, "<span class='info'>[src] does not work on this sort of creature.</span>")
return
if(M.stat == DEAD)
M.faction = list("neutral")
M.revive()
+1 -11
View File
@@ -4,6 +4,7 @@
icon_state = "l_mushroom"
name = "large mushrooms"
desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores."
anchored = TRUE
var/harvested_name = "shortened mushrooms"
var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large."
var/needs_sharp_harvest = TRUE
@@ -26,17 +27,6 @@
if(prob(15))
harvest(null, TRUE)
/obj/structure/flora/ash/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(80))
qdel(src)
if(3)
if(prob(50))
qdel(src)
/obj/structure/flora/ash/proc/harvest(user, no_drop)
if(harvested)
return 0
@@ -72,7 +72,7 @@
var/mob/dead/observer/current_spirits = list()
for(var/mob/dead/observer/O in GLOB.player_list)
if(is_type_in_list(O.following, contents))
if((O.following in contents))
ghost_counter++
O.invisibility = 0
current_spirits |= O
@@ -198,7 +198,7 @@
user.visible_message("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>).")
log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).")
T.TerraformTurf(turf_type)
T.TerraformTurf(turf_type, keep_icon = FALSE)
timer = world.time + create_cooldown
qdel(L)
else
@@ -207,7 +207,7 @@
return
else
user.visible_message("<span class='danger'>[user] turns \the [T] into [reset_string]!</span>")
T.TerraformTurf(reset_turf_type)
T.TerraformTurf(reset_turf_type, keep_icon = FALSE)
timer = world.time + reset_cooldown
playsound(T,'sound/magic/fireball.ogg', 200, 1)
@@ -30,7 +30,6 @@
if(6)
new /obj/item/pickaxe/diamond(src)
if(7)
new /obj/item/clothing/head/culthood(src)
new /obj/item/clothing/suit/hooded/cultrobes(src)
new /obj/item/bedsheet/cult(src)
if(8)
+19 -12
View File
@@ -20,18 +20,27 @@
anchored = TRUE
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
speed_process = TRUE
/obj/machinery/mineral/processing_unit_console/New()
..()
/obj/machinery/mineral/processing_unit_console/Initialize(mapload)
. = ..()
machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
if(machine)
machine.CONSOLE = src
else
qdel(src)
return INITIALIZE_HINT_QDEL
/obj/machinery/mineral/processing_unit_console/attack_ghost(mob/user)
return ui_interact(user)
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
if(..())
return
return TRUE
return ui_interact(user)
/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user)
. = ..()
if(!machine)
return
@@ -43,7 +52,8 @@
/obj/machinery/mineral/processing_unit_console/Topic(href, href_list)
if(..())
return
return TRUE
usr.set_machine(src)
add_fingerprint(usr)
@@ -59,15 +69,14 @@
machine.on = (href_list["set_on"] == "on")
updateUsrDialog()
return TRUE
/obj/machinery/mineral/processing_unit_console/Destroy()
machine = null
return ..()
/**********************Mineral processing unit**************************/
/obj/machinery/mineral/processing_unit
name = "furnace"
icon = 'icons/obj/machines/mining_machines.dmi'
@@ -81,8 +90,8 @@
var/datum/research/files
speed_process = TRUE
/obj/machinery/mineral/processing_unit/New()
..()
/obj/machinery/mineral/processing_unit/Initialize(mapload)
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack)
files = new /datum/research/smelter(src)
@@ -99,6 +108,7 @@
for(var/obj/item/stack/ore/O in T)
process_ore(O)
CHECK_TICK
if(on)
if(selected_material)
smelt_ore()
@@ -106,11 +116,9 @@
else if(selected_alloy)
smelt_alloy()
if(CONSOLE)
CONSOLE.updateUsrDialog()
/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O)
GET_COMPONENT(materials, /datum/component/material_container)
var/material_amount = materials.get_item_material_amount(O)
@@ -167,7 +175,6 @@
var/out = get_step(src, output_dir)
materials.retrieve_sheets(sheets_to_remove, selected_material, out)
/obj/machinery/mineral/processing_unit/proc/smelt_alloy()
var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design
if(!alloy)
+4
View File
@@ -253,6 +253,10 @@
/mob/proc/get_item_by_slot(slot_id)
switch(slot_id)
if(slot_wear_mask)
return wear_mask
if(slot_back)
return back
if(slot_l_hand)
return l_hand
if(slot_r_hand)
+6 -5
View File
@@ -712,17 +712,18 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
return back
if(slot_wear_mask)
return wear_mask
if(slot_handcuffed)
return handcuffed
if(slot_legcuffed)
return legcuffed
if(slot_wear_suit)
return wear_suit
if(slot_l_hand)
return l_hand
if(slot_r_hand)
return r_hand
if(slot_handcuffed)
return handcuffed
if(slot_legcuffed)
return legcuffed
return null
//generates realistic-ish pulse output based on preset levels
/mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate
var/temp = 0 //see setup.dm:694
+2 -2
View File
@@ -3,9 +3,9 @@
set background = BACKGROUND_ENABLED
if(notransform)
return 0
return FALSE
if(!loc)
return 0
return FALSE
var/datum/gas_mixture/environment = loc.return_air()
if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything
@@ -594,7 +594,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm
qdel(src)
/obj/item/honkbot_arm_assembly
name = "incomplete honkbot assembly."
name = "incomplete honkbot assembly"
desc = "A clown box with a robot arm permanently grafted to it."
icon = 'icons/obj/aibots.dmi'
icon_state = "honkbot_arm"
@@ -625,8 +625,8 @@ var/robot_arm = /obj/item/robot_parts/l_arm
if(istype(W, /obj/item/instrument/trombone))
if(!user.unEquip(W))
return
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk! </span>")
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk!</span>")
qdel(W)
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T)
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(get_turf(src))
A.robot_arm = robot_arm
qdel(src)
@@ -37,7 +37,7 @@
. = ..()
update_icon()
auto_patrol = TRUE
var/datum/job/clown/J = new/datum/job/clown
var/datum/job/clown/J = new /datum/job/clown()
access_card.access += J.get_access()
prev_access = access_card.access
@@ -16,8 +16,8 @@
turns_per_move = 5
see_in_dark = 6
mob_size = MOB_SIZE_SMALL
simplespecies = /mob/living/simple_animal/pet/cat
childtype = /mob/living/simple_animal/pet/cat/kitten
animal_species = /mob/living/simple_animal/pet/cat
childtype = list(/mob/living/simple_animal/pet/cat/kitten)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3)
response_help = "pets"
response_disarm = "gently pushes aside"
@@ -22,8 +22,8 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
childtype = /mob/living/simple_animal/pet/corgi/puppy
simplespecies = /mob/living/simple_animal/pet/corgi
childtype = list(/mob/living/simple_animal/pet/corgi)
animal_species = /mob/living/simple_animal/pet/corgi
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
var/shaved = 0
var/obj/item/inventory_head
@@ -67,7 +67,7 @@
. = ..()
if(!.)
walk(src, 0)
return 0
return FALSE
/mob/living/simple_animal/hostile/handle_automated_action()
if(AIStatus == AI_OFF)
@@ -10,7 +10,7 @@
attack_sound = 'sound/weapons/punch4.ogg'
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 40
ranged = 1
ranged = TRUE
ranged_cooldown = 2 //By default, start the Goliath with his cooldown off so that people can run away quickly on first sight
ranged_cooldown_time = 120
friendly = "wails at"
@@ -31,12 +31,12 @@
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_VERY_STRONG
pull_force = MOVE_FORCE_VERY_STRONG
var/pre_attack = 0
var/pre_attack = FALSE
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
..()
. = ..()
handle_preattack()
/mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack()
@@ -59,8 +59,7 @@
new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src)
ranged_cooldown = world.time + ranged_cooldown_time
icon_state = icon_aggro
pre_attack = 0
return
pre_attack = FALSE
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage)
ranged_cooldown--
@@ -72,7 +71,6 @@
handle_preattack()
if(icon_state != icon_aggro)
icon_state = icon_aggro
return
// Lavaland Goliath
/mob/living/simple_animal/hostile/asteroid/goliath/beast
@@ -87,8 +85,8 @@
pre_attack_icon = "goliath2"
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = 1
robust_searching = 1
stat_attack = TRUE
robust_searching = TRUE
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
. = ..()
@@ -136,7 +134,7 @@
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
fromtendril = TRUE
//tentacles
// Tentacles
/obj/effect/temp_visual/goliath_tentacle
name = "goliath tentacle"
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
@@ -35,7 +35,7 @@
loot = list(/obj/effect/decal/cleanable/blood/gibs)
deathmessage = "is pulped into bugmash."
simplespecies = /mob/living/simple_animal/hostile/asteroid/gutlunch
animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch
childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55)
wanted_objects = list(/obj/effect/decal/cleanable/blood/gibs)
@@ -64,7 +64,7 @@
..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/AttackingTarget()
if(is_type_in_list(target, wanted_objects)) //we eats
if(is_type_in_typecache(target, wanted_objects)) //we eats
udder.generateMilk()
regenerate_icons()
visible_message("<span class='notice'>[src] slurps up [target].</span>")
@@ -62,10 +62,9 @@
var/can_collar = 0 // can add collar to mob or not
//Hot simple_animal baby making vars
var/childtype = null
var/scan_ready = 1
var/simplespecies //Sorry, no spider+corgi buttbabies.
var/list/childtype = null
var/next_scan_time = 0
var/animal_species //Sorry, no spider+corgi buttbabies.
var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
@@ -446,27 +445,32 @@
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies)
return
scan_ready = 0
spawn(400)
scan_ready = 1
var/alone = 1
if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress())
return FALSE
next_scan_time = world.time + 400
var/alone = TRUE
var/mob/living/simple_animal/partner
var/children = 0
for(var/mob/M in oview(7, src))
if(istype(M, childtype)) //Check for children FIRST.
if(M.stat != CONSCIOUS) //Check if it's conscious FIRST.
continue
else if(istype(M, childtype)) //Check for children SECOND.
children++
else if(istype(M, simplespecies))
if(M.client)
else if(istype(M, animal_species))
if(M.ckey)
continue
else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_;
partner = M
else if(istype(M, /mob/))
alone = 0
continue
else if(isliving(M) && !faction_check_mob(M)) //shyness check. we're not shy in front of things that share a faction with us.
return //we never mate when not alone, so just abort early
if(alone && partner && children < 3)
return new childtype(loc)
var/childspawn = pickweight(childtype)
var/turf/target = get_turf(loc)
if(target)
return new childspawn(target)
/mob/living/simple_animal/say_quote(var/message)
var/verb = "says"
+1 -1
View File
@@ -1012,7 +1012,7 @@ var/list/slot_equipment_priority = list( \
var/atom/A = foo
if(A.invisibility > see_invisible)
continue
if(is_type_in_list(A, shouldnt_see))
if(is_type_in_list(A, shouldnt_see) || !A.simulated)
continue
statpanel_things += A
statpanel(listed_turf.name, null, statpanel_things)
+1 -1
View File
@@ -176,7 +176,7 @@
var/player_ghosted = 0
var/turf/listed_turf = null //the current turf being examined in the stat panel
var/list/shouldnt_see = list(/atom/movable/lighting_object) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/kills = 0
+8 -8
View File
@@ -99,7 +99,7 @@
var/indestructible = 0 // If set, prevents aliens from destroying it
var/keep_preset_name = 0
var/report_power_alarm = 1
var/report_power_alarm = TRUE
var/shock_proof = 0 //if set to 1, this APC will not arc bolts of electricity if it's overloaded.
@@ -117,11 +117,11 @@
operating = 0
/obj/machinery/power/apc/noalarm
report_power_alarm = 0
report_power_alarm = FALSE
/obj/machinery/power/apc/syndicate //general syndicate access
req_access = list(access_syndicate)
report_power_alarm = 0
report_power_alarm = FALSE
/obj/item/apc_electronics
name = "power control module"
@@ -1171,14 +1171,14 @@
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
autoflag = 3
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.clearAlarm(loc, src)
else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment
if(autoflag != 2)
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 2
else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment
@@ -1186,7 +1186,7 @@
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 2)
environ = autoset(environ, 1)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 1
else if(cell.charge <= 0) // zero charge, turn all off
@@ -1194,7 +1194,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
@@ -1250,7 +1250,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
@@ -57,7 +57,7 @@
if(!(istype(B) && B.off_floor))
qdel(O)
else
if(!istype(O, /atom/movable/lighting_object))
if(O.simulated)
O.color = initial(O.color)
O.clean_blood()
@@ -74,7 +74,7 @@
/datum/outfit/lavaland_syndicate/comms
name = "Lavaland Syndicate Comms Agent"
r_hand = /obj/item/melee/energy/sword/saber
mask = /obj/item/clothing/mask/chameleon
mask = /obj/item/clothing/mask/chameleon/gps
suit = /obj/item/clothing/suit/armor/vest
/obj/item/clothing/mask/chameleon/gps/New()
+2 -4
View File
@@ -58,12 +58,10 @@
var/contcount
for(var/atom/A in T.contents)
if(istype(A,/atom/movable/lighting_object))
continue
if(istype(A,/obj/machinery/light))
continue //hacky but whatever, shuttles need three spots each for this shit
if(!A.simulated)
continue
if(istype(A, /obj/machinery/light))
continue //hacky but whatever, shuttles need three spots each for this shit
contcount++
if(contcount)
+4 -6
View File
@@ -82,11 +82,10 @@
var/heal_burn = 0
var/heal_oxy = 0
/obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target)
if(H == user && istype(H))
if(NO_BLOOD in H.dna.species.species_traits)
to_chat(H, "<span class = 'userdanger'>\The [src] is not compatible with your form!</span>")
to_chat(H, "<span class='userdanger'>[src] is not compatible with your form!</span>")
return
playsound(user,'sound/effects/singlebeat.ogg', 40, 1)
user.drop_item()
@@ -111,17 +110,16 @@
if(owner)
to_chat(owner, "<span class='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
/datum/action/item_action/organ_action/cursed_heart
name = "pump your blood"
//You are now brea- pumping blood manually
/datum/action/item_action/organ_action/cursed_heart/Trigger()
. = ..()
if(. && istype(target,/obj/item/organ/internal/heart/cursed))
if(. && istype(target, /obj/item/organ/internal/heart/cursed))
var/obj/item/organ/internal/heart/cursed/cursed_heart = target
if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam
if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay - 10))) //no spam
to_chat(owner, "<span class='userdanger'>Too soon!</span>")
return
@@ -132,7 +130,7 @@
var/mob/living/carbon/human/H = owner
if(istype(H))
if(!(NO_BLOOD in H.dna.species.species_traits))
H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_NORMAL)
H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_NORMAL)
if(owner.client)
owner.client.color = ""
+13 -7
View File
@@ -22,7 +22,7 @@
var/delay_timer = null
var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_object)
var/list/blacklist = list(/obj/tram/rail)
var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/chair, /obj/structure/grille, /obj/structure/window)
/obj/tram/tram_controller/New()
@@ -135,14 +135,20 @@
tram += src
/obj/tram/tram_controller/proc/check_validity(var/atom/movable/AM)
if(!AM) return 0
if(is_type_in_list(AM, blacklist)) return 0
if(!AM.simulated) return 0
if(!AM)
return FALSE
if(!AM.simulated)
return FALSE
if(is_type_in_list(AM, blacklist))
return FALSE
if(AM.anchored)
if(is_type_in_list(AM, ancwhitelist))
return 1
return 0
return 1
return TRUE
return FALSE
return TRUE
/obj/tram/tram_controller/proc/init_controllers()
for(var/obj/tram/controlpad/CCP in tram)