mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 12:04:48 +01:00
Final station goal changes
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 |
@@ -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}}
|
||||
@@ -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}}
|
||||
@@ -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.
Reference in New Issue
Block a user