Final station goal changes

This commit is contained in:
Markolie
2017-01-25 02:43:58 +01:00
parent 62afefaf2c
commit 14fd8ec3ec
16 changed files with 268 additions and 71 deletions
+6 -4
View File
@@ -206,12 +206,14 @@
"dX" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/centcom/control)
"dY" = (/turf/unsimulated/floor{dir = 1; icon_state = "carpet15-11"},/area/centcom/control)
"dZ" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_y = 5},/obj/item/weapon/pen/multi,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/control)
"ea" = (/obj/machinery/computer/bsa_control,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/centcom/control)
"ea" = (/obj/machinery/computer/bsa_control/admin,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/centcom/control)
"eb" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "carpet15-14"; tag = "icon-carpet (WEST)"},/area/centcom/control)
"ec" = (/turf/unsimulated/floor{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/centcom/control)
"ed" = (/turf/unsimulated/floor{icon_state = "platingdmg1"},/area/prison/solitary)
"ee" = (/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary)
"ef" = (/obj/machinery/bsa/full/admin,/turf/unsimulated/floor{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/centcom/control)
"ef" = (/obj/machinery/bsa/full/admin/east,/turf/unsimulated/floor{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/centcom/control)
"eg" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows"; tag = "icon-fakewindows2 (NORTH)"},/area/centcom/control)
"eh" = (/turf/unsimulated/wall/fakeglass{dir = 7; icon_state = "fakewindows"; tag = "icon-fakewindows2 (NORTH)"},/area/centcom/control)
"ej" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area/space)
"ek" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area/space)
"el" = (/turf/unsimulated/wall{tag = "icon-iron11"; icon_state = "iron11"},/area/space)
@@ -1535,8 +1537,8 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXsXtatbtctdtdtesqsqsqsqsqsEsEmnsMsCmnsEsEsEsEsEsQsQsQsQtfsQsQtgsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititititjtktitititjtltmtntdtdtdsqsrssstsqtosEmnsMtpmnsEsEsEsEsutqsQsQsQtrsQsQtssqsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtdsqswsssssxsEsEsEsEsEsEsEsEsEsEsqsusususususususqsqdWdXsqsqsqsqsqsqsqsqsqsqsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititititvtktitititvtwtmtntdtdtdsqsqsqsqsqsqsqtxsqsqsqsqsEsEtysqtztztztztztztzsudZdYebeasueceVeVeVeVeVefeVeVeVeUfFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtAsqtBtCtDsqtEtFtFtFtFtGsqsEsEtHsqtztztztztztztzsufbfatLfcsufdfEfEfEfEfEfEfEfEfEfsfFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititititvtktitititvtwtmtntdtdtdsqsqsqsqsqsqsqtxsqsqsqsqsEsEtysqtztztztztztztzsudZdYebeaegeceVeVeVeVeVefeVeVeVeUfFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtAsqtBtCtDsqtEtFtFtFtFtGsqsEsEtHsqtztztztztztztzsufbfatLfcehfdfEfEfEfEfEfEfEfEfEfsfFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititititItktitititItJtmtntdtdtdsqtKtLtMtNtFtFtFtFtFtOsqsusxsusqsusususususususqsqfLsqsqsqsqsqsqsqsqsqsqsqsqsqsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtdsqsqsususqsqsqsususususqtQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititititVtktitititVtWtXtYtdtdtdsqtztztztztztztztztztzsqtQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+1 -1
View File
@@ -300,4 +300,4 @@
#define OOC_COOLDOWN 5
// The number of station goals generated each round.
#define STATION_GOAL_BUDGET 3
#define STATION_GOAL_BUDGET 1
+3 -9
View File
@@ -15,7 +15,6 @@
var/static_beam = 0
var/beam_type = /obj/effect/ebeam //must be subtype
/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam)
endtime = world.time+time
origin = beam_origin
@@ -30,7 +29,6 @@
icon_state = beam_icon_state
beam_type = btype
/datum/beam/proc/Start()
Draw()
while(!finished && origin && target && world.time < endtime && get_dist(origin,target)<max_distance && origin.z == target.z)
@@ -45,23 +43,19 @@
qdel(src)
/datum/beam/proc/End()
finished = 1
/datum/beam/proc/Reset()
for(var/obj/effect/ebeam/B in elements)
qdel(B)
/datum/beam/Destroy()
Reset()
target = null
origin = null
return ..()
/datum/beam/proc/Draw()
var/Angle = round(Get_Angle(origin,target))
@@ -115,18 +109,18 @@
X.pixel_x = Pixel_x
X.pixel_y = Pixel_y
/obj/effect/ebeam
mouse_opacity = 0
anchored = 1
var/datum/beam/owner
/obj/effect/ebeam/deadly/Crossed(atom/A)
A.ex_act(1)
/obj/effect/ebeam/Destroy()
owner = null
return ..()
/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam)
var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type)
spawn(0)
+1 -1
View File
@@ -1567,7 +1567,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
cost = 50
special = TRUE
contains = list(
/obj/item/weapon/circuitboard/machine/computer/sat_control
/obj/item/weapon/circuitboard/computer/sat_control
)
containername = "shield control board crate"
@@ -25,7 +25,7 @@
return 1
ui_interact(user)
/obj/machinery/computer/atmoscontrol/emag_act(var/remaining_carges, var/mob/user)
/obj/machinery/computer/atmoscontrol/emag_act(mob/user)
if(!emagged)
user.visible_message("<span class='warning'>\The [user] does something \the [src], causing the screen to flash!</span>",\
"<span class='warning'>You cause the screen to flash as you gain full control.</span>",\
@@ -30,7 +30,12 @@
var/frame_desc = null
var/contain_parts = 1
/obj/item/weapon/circuitboard/computer
board_type = "computer"
/obj/item/weapon/circuitboard/machine
board_type = "machine"
/obj/item/weapon/circuitboard/message_monitor
name = "Circuit board (Message Monitor)"
build_path = /obj/machinery/computer/message_monitor
+27 -19
View File
@@ -53,6 +53,24 @@
to_chat(user, "<span class='warning'>Access denied.</span>")
return COMM_AUTHENTICATION_NONE
/obj/machinery/computer/communications/proc/change_security_level(var/new_level)
tmp_alertlevel = new_level
var/old_level = security_level
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
set_security_level(tmp_alertlevel)
if(security_level != old_level)
//Only notify the admins if an actual change happened
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
switch(security_level)
if(SEC_LEVEL_GREEN)
feedback_inc("alert_comms_green",1)
if(SEC_LEVEL_BLUE)
feedback_inc("alert_comms_blue",1)
tmp_alertlevel = 0
/obj/machinery/computer/communications/Topic(href, href_list)
if(..(href, href_list))
return 1
@@ -100,35 +118,25 @@
if("newalertlevel")
if(isAI(usr) || isrobot(usr))
to_chat(usr, "<span class='warning'>Firewalls prevent you from changing the alert level.</span>")
nanomanager.update_uis(src)
return 1
tmp_alertlevel = text2num(href_list["level"])
else if(usr.can_admin_interact())
change_security_level(text2num(href_list["level"]))
return 1
else if(!ishuman(usr))
to_chat(usr, "<span class='warning'>Security measures prevent you from changing the alert level.</span>")
return 1
var/mob/living/carbon/human/L = usr
var/obj/item/card = L.get_active_hand()
var/obj/item/weapon/card/id/I = (card && card.GetID())||L.wear_id||L.wear_pda
var/obj/item/weapon/card/id/I = (card && card.GetID()) || L.wear_id || L.wear_pda
if(istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
if(I && istype(I))
if(access_captain in I.access)
var/old_level = security_level
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
set_security_level(tmp_alertlevel)
if(security_level != old_level)
//Only notify the admins if an actual change happened
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
switch(security_level)
if(SEC_LEVEL_GREEN)
feedback_inc("alert_comms_green",1)
if(SEC_LEVEL_BLUE)
feedback_inc("alert_comms_blue",1)
tmp_alertlevel = 0
change_security_level(text2num(href_list["level"]))
else
to_chat(usr, "<span class='warning'>You are not authorized to do this.</span>")
tmp_alertlevel = 0
setMenuState(usr,COMM_SCREEN_MAIN)
else
to_chat(usr, "<span class='warning'>You need to swipe your ID.</span>")
+64 -18
View File
@@ -27,7 +27,7 @@
return FALSE
/obj/machinery/bsa
icon = 'icons/obj/machines/particle_accelerator.dmi'
icon = 'icons/obj/machines/particle_accelerator3.dmi'
density = 1
anchored = 1
@@ -125,18 +125,38 @@
name = "Bluespace Artillery"
desc = "Long range bluespace artillery."
icon = 'icons/obj/lavaland/cannon.dmi'
icon_state = "cannon_east"
icon_state = "cannon_west"
var/obj/machinery/computer/bsa_control/controller
var/cannon_direction = WEST
var/static/image/top_layer = null
var/ex_power = 3
var/power_used_per_shot = 2000000 //enough to kil standard apc - todo : make this use wires instead and scale explosion power with it
var/ready
var/last_fire_time = 0 // The time at which the gun was last fired
var/reload_cooldown = 600 // The gun's cooldown
pixel_y = -32
pixel_x = -192
bound_width = 352
bound_x = -192
/obj/machinery/bsa/full/Destroy()
if(controller && controller.cannon == src)
controller.cannon = null
controller = null
return ..()
/obj/machinery/bsa/full/admin
power_used_per_shot = 0
reload_cooldown = 100
/obj/machinery/bsa/full/east
icon_state = "cannon_east"
cannon_direction = EAST
/obj/machinery/bsa/full/admin/east
icon_state = "cannon_east"
cannon_direction = EAST
/obj/machinery/bsa/full/proc/get_front_turf()
switch(dir)
@@ -162,8 +182,12 @@
return locate(world.maxx,y,z)
return get_turf(src)
/obj/machinery/bsa/full/New(loc,cannon_direction = WEST)
/obj/machinery/bsa/full/New(loc, direction)
..()
if(direction)
cannon_direction = direction
switch(cannon_direction)
if(WEST)
dir = WEST
@@ -183,21 +207,19 @@
var/turf/point = get_front_turf()
for(var/turf/T in getline(get_step(point,dir),get_target_turf()))
T.ex_act(1)
point.Beam(get_target_turf(),icon_state="bsa_beam",time=50,maxdistance = world.maxx) //ZZZAP
for(var/atom/A in T)
A.ex_act(1)
point.Beam(get_target_turf(), icon_state = "bsa_beam", time = 50, maxdistance = world.maxx, beam_type = /obj/effect/ebeam/deadly) //ZZZAP
playsound(src, 'sound/machines/bsa_fire.ogg', 70, 1)
message_admins("[key_name_admin(user)] has launched an artillery strike.")
explosion(bullseye,ex_power,ex_power*2,ex_power*4)
reload()
/obj/machinery/bsa/full/proc/reload()
ready = FALSE
use_power(power_used_per_shot)
spawn(600)
ready_cannon()
/obj/machinery/bsa/full/proc/ready_cannon()
ready = TRUE
last_fire_time = world.time / 10
/obj/structure/filler
name = "big machinery part"
@@ -245,12 +267,19 @@
var/target
use_power = 0
circuit = /obj/item/weapon/circuitboard/computer/bsa_control
icon_screen = "accelerator"
icon_keyboard = "accelerator_key"
icon_state = "computer-wires"
icon = 'icons/obj/machines/particle_accelerator3.dmi'
icon_state = "control_boxp"
layer = 3.1
var/area_aim = FALSE //should also show areas for targeting
var/target_all_areas = FALSE //allows all areas (including admin areas) to be targetted
/obj/machinery/computer/bsa_control/Destroy()
if(cannon && cannon.controller == src)
cannon.controller = null
cannon = null
return ..()
/obj/machinery/computer/bsa_control/admin
area_aim = TRUE
target_all_areas = TRUE
@@ -268,11 +297,24 @@
/obj/machinery/computer/bsa_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = physical_state)
var/list/data = list()
data["ready"] = cannon ? cannon.ready : FALSE
data["connected"] = cannon
data["notice"] = notice
if(target)
data["target"] = get_target_name()
if(cannon)
var/reload_cooldown = cannon.reload_cooldown
var/last_fire_time = cannon.last_fire_time
var/time_to_wait = max(0, round(reload_cooldown - ((world.time / 10) - last_fire_time)))
var/minutes = max(0, round(time_to_wait / 60))
var/seconds = max(0, time_to_wait - (60 * minutes))
data["reloadtime_mins"] = minutes
data["reloadtime_secs"] = (seconds < 10) ? "0[seconds]" : seconds
data["ready"] = minutes == 0 && seconds == 0
else
data["ready"] = FALSE
return data
/obj/machinery/computer/bsa_control/Topic(href, href_list)
@@ -316,15 +358,18 @@
return get_turf(target)
/obj/machinery/computer/bsa_control/proc/fire(mob/user)
if(!cannon || !target)
return
if(cannon.stat)
notice = "Cannon unpowered!"
return
notice = null
cannon.fire(user, get_impact_turf())
/obj/machinery/computer/bsa_control/proc/deploy(force=FALSE)
/obj/machinery/computer/bsa_control/proc/deploy()
var/obj/machinery/bsa/full/prebuilt = locate() in range(7) //In case of adminspawn
if(prebuilt)
prebuilt.controller = src
return prebuilt
var/obj/machinery/bsa/middle/centerpiece = locate() in range(7)
@@ -338,7 +383,8 @@
var/datum/effect/system/harmless_smoke_spread/s = new /datum/effect/system/harmless_smoke_spread()
s.set_up(4, 0, get_turf(centerpiece))
s.start()
var/obj/machinery/bsa/full/cannon = new(get_turf(centerpiece),cannon_direction=centerpiece.get_cannon_direction())
var/obj/machinery/bsa/full/cannon = new(get_turf(centerpiece),centerpiece.get_cannon_direction())
cannon.controller = src
qdel(centerpiece.front)
qdel(centerpiece.back)
qdel(centerpiece)
+9 -6
View File
@@ -7,7 +7,7 @@
#define VAULT_XRAY "X-Ray Vision"
#define VAULT_TELEKINESIS "Telekinesis"
#define VAULT_PSYCHIC "Psychic Powers"
#define VAULT_SPEED "Speed"
#define VAULT_SPEED "Speediness"
/datum/station_goal/dna_vault
name = "DNA Vault"
@@ -18,7 +18,7 @@
/datum/station_goal/dna_vault/New()
..()
animal_count = rand(15,20) //might be too few given ~15 roundstart stationside ones
human_count = rand(round(0.75 * ticker.mode.num_players()) , ticker.mode.num_players()) // 75%+ roundstart population.
human_count = rand(round(0.75 * ticker.mode.num_players_started()), ticker.mode.num_players_started()) // 75%+ roundstart population.
var/non_standard_plants = non_standard_plants_count()
plant_count = rand(round(0.5 * non_standard_plants),round(0.7 * non_standard_plants))
@@ -97,7 +97,7 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
if(isanimal(target))
var/mob/living/simple_animal/A = target
if(!A.healable)//simple approximation of being animal not a robot or similar
to_chat(user, "<span class='warning'>No compatibile DNA detected</span>")
to_chat(user, "<span class='warning'>No compatible DNA detected</span>")
return
if(animals[target.type])
to_chat(user, "<span class='notice'>Animal data already present in local storage.<span>")
@@ -183,7 +183,8 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
/obj/machinery/dna_vault/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "dna_vault.tmpl", name, 350, 400)
roll_powers(user)
ui = new(user, src, ui_key, "dna_vault.tmpl", name, 550, 400)
ui.open()
/obj/machinery/dna_vault/proc/roll_powers(mob/user)
@@ -251,14 +252,16 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
/obj/machinery/dna_vault/proc/upgrade(mob/living/carbon/human/H, upgrade_type)
if(!(upgrade_type in power_lottery[H]))
return
if(!completed)
return
if(!H.ignore_gene_stability)
to_chat(H, "<span class='notice'>[src] stabilizes your genes, granting you the ability to have multiple powers.</span>")
H.ignore_gene_stability = 1
switch(upgrade_type)
if(VAULT_SPACEIMMUNE)
to_chat(H, "<span class='notice'>You suddenly don't feel the need to breathe anymore. Your body also feels very warm.</span>")
to_chat(H, "<span class='notice'>You suddenly don't feel the need to breathe anymore. You also don't feel any cold anymore.</span>")
grant_power(H, NOBREATHBLOCK, NO_BREATH)
grant_power(H, COLDBLOCK, RESIST_COLD)
grant_power(H, FIREBLOCK, RESIST_COLD)
if(VAULT_XRAY)
to_chat(H, "<span class='notice'>You can suddenly see through walls.</span>")
grant_power(H, XRAYBLOCK, XRAY)
+18 -11
View File
@@ -29,12 +29,12 @@
/datum/station_goal/proc/get_coverage()
var/list/coverage = list()
for(var/obj/machinery/satellite/meteor_shield/A in machines)
if(!A.active || is_station_level(A.z))
if(!A.active || !is_station_level(A.z))
continue
coverage |= view(A.kill_range, A)
return coverage.len
/obj/item/weapon/circuitboard/machine/computer/sat_control
/obj/item/weapon/circuitboard/computer/sat_control
name = "Satellite Network Control (Computer Board)"
build_path = /obj/machinery/computer/sat_control
origin_tech = "engineering=3"
@@ -42,7 +42,7 @@
/obj/machinery/computer/sat_control
name = "Satellite control"
desc = "Used to control the satellite network."
circuit = /obj/item/weapon/circuitboard/machine/computer/sat_control
circuit = /obj/item/weapon/circuitboard/computer/sat_control
icon_screen = "accelerator"
icon_keyboard = "accelerator_key"
var/notice
@@ -55,7 +55,7 @@
/obj/machinery/computer/sat_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "sat_control.tmpl", name, 400, 305)
ui = new(user, src, ui_key, "sat_control.tmpl", name, 475, 400)
ui.open()
/obj/machinery/computer/sat_control/Topic(href, href_list)
@@ -88,8 +88,9 @@
data["meteor_shield"] = 1
data["meteor_shield_coverage"] = G.get_coverage()
data["meteor_shield_coverage_max"] = G.coverage_goal
data["meteor_shield_coverage_percentage"] = (G.get_coverage() / G.coverage_goal) * 100
return data
/obj/machinery/satellite
name = "Defunct Satellite"
desc = ""
@@ -105,6 +106,11 @@
/obj/machinery/satellite/New()
..()
id = gid++
/obj/machinery/satellite/attack_hand(mob/user)
if(..())
return 1
interact(user)
/obj/machinery/satellite/interact(mob/user)
toggle(user)
@@ -113,7 +119,7 @@
if(!active && !isinspace())
if(user)
to_chat(user, "<span class='warning'>You can only active the [src] in space.</span>")
return FALSE
return TRUE
if(user)
to_chat(user, "<span class='notice'>You [active ? "deactivate": "activate"] the [src]</span>")
active = !active
@@ -153,15 +159,15 @@
for(var/obj/effect/meteor/M in meteor_list)
if(M.z != z)
continue
if(get_dist(M,src) > kill_range)
if(get_dist(M, src) > kill_range)
continue
if(!emagged && space_los(M))
Beam(get_turf(M), icon_state="sat_beam", time=5, maxdistance=kill_range)
Beam(get_turf(M), icon_state = "sat_beam", time = 5, maxdistance = kill_range)
qdel(M)
/obj/machinery/satellite/meteor_shield/toggle(user)
if(!..(user))
return FALSE
if(..(user))
return TRUE
if(emagged)
if(active)
change_meteor_chance(2)
@@ -179,8 +185,9 @@
if(active && emagged)
change_meteor_chance(0.5)
/obj/machinery/satellite/meteor_shield/emag_act()
/obj/machinery/satellite/meteor_shield/emag_act(mob/user)
if(!emagged)
to_chat(user, "<span class='danger'>You override the shield's circuits, causing it to attract meteors instead of destroying them.</span>")
emagged = 1
if(active)
change_meteor_chance(2)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

+51
View File
@@ -0,0 +1,51 @@
<!--
Title: Bluespace Artillery UI
Used In File(s): \code\modules\station_goals\bsa.dm
-->
{{if data.notice}}
<div class="notice">{{:data.notice}}</div>
{{/if}}
<h3>Bluespace Artillery Control</h3>
<div class="item">
<div class="itemLabel">
Target:
</div>
<div class="itemContent">
{{:helper.link(data.target ? data.target : "None", 'crosshairs', {'recalibrate' : 1})}}
</div>
</div>
<div class="item">
<div class="itemLabel">
Reload Cooldown:
</div>
<div class="itemContent">
{{if data.ready}}
<span class='good'>Ready</span>
{{else data.reloadtime_mins || data.reloadtime_secs}}
<span class='bad'>{{:data.reloadtime_mins}}:{{:data.reloadtime_secs}}</span>
{{else}}
<span class='bad'>No cannon connected!</span>
{{/if}}
</div>
</div>
<div class="item">
<div class="itemLabel">
Controls:
</div>
<div class="itemContent">
{{:helper.link('FIRE!', 'warning', {'fire' : 1}, data.ready && data.target ? null : 'disabled')}}
</div>
</div>
{{if !data.connected}}
<div class="item">
<div class="itemLabel">
Maintenance:
</div>
<div class="itemContent">
{{:helper.link('Complete Deployment', 'wrench', {'build' : 1})}}
</div>
</div>
{{else}}
<hr>
<b>Deployment of weapon authorized by Nanotrasen Naval Command. Remember, friendly fire is grounds for termination of your contract and life.</b>
{{/if}}
+49
View File
@@ -0,0 +1,49 @@
<!--
Title: DNA Vault UI
Used In File(s): \code\modules\station_goals\dna_vault.dm
-->
<h3>DNA Vault Database</h3>
<div class="item">
<div class="itemLabel">
Human DNA:
</div>
<div class="itemContent">
{{:helper.displayBar(data.dna, 0, data.dna_max, data.dna >= data.dna_max ? 'good' : 'average')}}
<div class="statusValue">
{{:data.dna}}/{{:data.dna_max}} Samples
</div>
</div>
</div>
<div class="item">
<div class="itemLabel">
Plant Data:
</div>
<div class="itemContent">
{{:helper.displayBar(data.plants, 0, data.plants_max, data.plants >= data.plants_max ? 'good' : 'average')}}
<div class="statusValue">
{{:data.plants}}/{{:data.plants_max}} Samples
</div>
</div>
</div>
<div class="item">
<div class="itemLabel">
Animal Data:
</div>
<div class="itemContent">
{{:helper.displayBar(data.animals, 0, data.animals_max, data.animals >= data.animals_max ? 'good' : 'average')}}
<div class="statusValue">
{{:data.animals}}/{{:data.animals_max}} Samples
</div>
</div>
</div>
{{if data.completed && !data.used}}
<div class="item">
<div class="itemLabel">
Applicable gene therapy treatments:
</div>
<div class="itemContent">
{{:helper.link(data.choiceA, null, {'gene' : 1, 'choice' : data.choiceA})}}
{{:helper.link(data.choiceB, null, {'gene' : 1, 'choice' : data.choiceB})}}
</div>
</div>
{{/if}}
+32
View File
@@ -0,0 +1,32 @@
<!--
Title: Satellite Control UI
Used In File(s): \code\modules\station_goals\shield.dm
-->
{{if data.notice}}
<div class="notice">{{:data.notice}}</div>
{{/if}}
<h3>Satellite Network Control</h3>
{{for data.satellites}}
<div class="item">
<div class="itemLabel">
#{{:value.id}} - {{:value.mode}}
</div>
<div class="itemContent">
{{:helper.link(value.active ? 'Deactivate' : 'Activate', null, {'toggle' : 1, 'id' : value.id})}}
</div>
</div>
{{/for}}
{{if data.meteor_shield}}
<div class="item">
<div class="itemLabel">
Station Shield Coverage:
</div>
<div class="itemContent">
{{:helper.displayBar(data.meteor_shield_coverage, 0, data.meteor_shield_coverage_max, data.meteor_shield_coverage_percentage >= 100 ? 'good' : 'average')}}
<div class="statusValue">
{{:data.meteor_shield_coverage_percentage}}%
</div>
</div>
</div>
{{/if}}
Binary file not shown.