mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-18 14:12:20 +00:00
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into smallchanges
Conflicts: code/modules/research/designs.dm
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -4,9 +4,3 @@
|
|||||||
*.rsc
|
*.rsc
|
||||||
*.dmb
|
*.dmb
|
||||||
*.lk
|
*.lk
|
||||||
|
|
||||||
#ignore any files in config/, except those in subdirectories.
|
|
||||||
/config/*
|
|
||||||
!/config/*/*
|
|
||||||
|
|
||||||
/baystation12.int
|
|
||||||
|
|||||||
@@ -75,6 +75,7 @@
|
|||||||
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
|
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
|
||||||
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
|
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
|
||||||
#include "code\controllers\_DynamicAreaLighting_TG.dm"
|
#include "code\controllers\_DynamicAreaLighting_TG.dm"
|
||||||
|
#include "code\controllers\autotransfer.dm"
|
||||||
#include "code\controllers\configuration.dm"
|
#include "code\controllers\configuration.dm"
|
||||||
#include "code\controllers\failsafe.dm"
|
#include "code\controllers\failsafe.dm"
|
||||||
#include "code\controllers\lighting_controller.dm"
|
#include "code\controllers\lighting_controller.dm"
|
||||||
@@ -1242,6 +1243,7 @@
|
|||||||
#include "code\modules\surgery\ribcage.dm"
|
#include "code\modules\surgery\ribcage.dm"
|
||||||
#include "code\modules\surgery\robolimbs.dm"
|
#include "code\modules\surgery\robolimbs.dm"
|
||||||
#include "code\modules\surgery\surgery.dm"
|
#include "code\modules\surgery\surgery.dm"
|
||||||
|
#include "code\modules\telesci\bscrystal.dm"
|
||||||
#include "code\modules\telesci\gps.dm"
|
#include "code\modules\telesci\gps.dm"
|
||||||
#include "code\modules\telesci\telepad.dm"
|
#include "code\modules\telesci\telepad.dm"
|
||||||
#include "code\modules\telesci\telesci_computer.dm"
|
#include "code\modules\telesci\telesci_computer.dm"
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
// BEGIN_INTERNALS
|
// BEGIN_INTERNALS
|
||||||
/*
|
/*
|
||||||
MAP_ICON_TYPE: 0
|
MAP_ICON_TYPE: 0
|
||||||
|
WINDOW: code\modules\research\designs.dm;code\game\objects\items\devices\PDA\PDA.dm;code\game\objects\items\weapons\implants\implantfreedom.dm;code\modules\clothing\under\chameleon.dm;code\modules\mining\abandonedcrates.dm;code\modules\mining\mine_turfs.dm
|
||||||
|
LAST_COMPILE_VERSION: 501.1217
|
||||||
|
DIR: code code\ATMOSPHERICS code\game code\game\objects code\game\objects\closets code\game\objects\items code\game\objects\items\devices code\game\objects\items\devices\PDA code\game\objects\items\devices\radio code\game\objects\items\weapons code\game\objects\items\weapons\implants code\modules code\modules\clothing code\modules\clothing\spacesuits code\modules\clothing\under code\modules\mining code\modules\reagents code\modules\reagents\reagent_containers code\modules\research
|
||||||
|
FILE: code\modules\mining\abandonedcrates.dm
|
||||||
|
LAST_COMPILE_TIME: 1384930775
|
||||||
AUTO_FILE_DIR: OFF
|
AUTO_FILE_DIR: OFF
|
||||||
*/
|
*/
|
||||||
// END_INTERNALS
|
// END_INTERNALS
|
||||||
|
|||||||
@@ -327,3 +327,41 @@ proc/isInSight(var/atom/A, var/atom/B)
|
|||||||
spawn(delay)
|
spawn(delay)
|
||||||
for(var/client/C in group)
|
for(var/client/C in group)
|
||||||
C.screen -= O
|
C.screen -= O
|
||||||
|
|
||||||
|
datum/projectile_data
|
||||||
|
var/src_x
|
||||||
|
var/src_y
|
||||||
|
var/time
|
||||||
|
var/distance
|
||||||
|
var/power_x
|
||||||
|
var/power_y
|
||||||
|
var/dest_x
|
||||||
|
var/dest_y
|
||||||
|
|
||||||
|
/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \
|
||||||
|
var/power_x, var/power_y, var/dest_x, var/dest_y)
|
||||||
|
src.src_x = src_x
|
||||||
|
src.src_y = src_y
|
||||||
|
src.time = time
|
||||||
|
src.distance = distance
|
||||||
|
src.power_x = power_x
|
||||||
|
src.power_y = power_y
|
||||||
|
src.dest_x = dest_x
|
||||||
|
src.dest_y = dest_y
|
||||||
|
|
||||||
|
/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power)
|
||||||
|
|
||||||
|
// returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle],
|
||||||
|
// rotated at [rotation] and with the power of [power]
|
||||||
|
// Thanks to VistaPOWA for this function
|
||||||
|
|
||||||
|
var/power_x = power * cos(angle)
|
||||||
|
var/power_y = power * sin(angle)
|
||||||
|
var/time = 2* power_y / 10 //10 = g
|
||||||
|
|
||||||
|
var/distance = time * power_x
|
||||||
|
|
||||||
|
var/dest_x = src_x + distance*sin(rotation);
|
||||||
|
var/dest_y = src_y + distance*cos(rotation);
|
||||||
|
|
||||||
|
return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y)
|
||||||
|
|||||||
13
code/controllers/autotransfer.dm
Normal file
13
code/controllers/autotransfer.dm
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
var/datum/controller/transfer_controller = new /transfer_controller()
|
||||||
|
var/timerbuffer = 0 //buffer for time check
|
||||||
|
/transfer_controller/New()
|
||||||
|
timerbuffer = config.vote_autotransfer_initial
|
||||||
|
processing_objects += src
|
||||||
|
|
||||||
|
/transfer_controller/Del()
|
||||||
|
processing_objects -= src
|
||||||
|
|
||||||
|
/transfer_controller/proc/process()
|
||||||
|
if (world.time >= timerbuffer - 600)
|
||||||
|
vote.autotransfer()
|
||||||
|
timerbuffer = timerbuffer + config.vote_autotransfer_interval
|
||||||
@@ -50,7 +50,6 @@ datum/controller/vote
|
|||||||
initiate_vote("crew_transfer","the server")
|
initiate_vote("crew_transfer","the server")
|
||||||
log_debug("The server has called an Autotransfer")
|
log_debug("The server has called an Autotransfer")
|
||||||
|
|
||||||
|
|
||||||
proc/reset()
|
proc/reset()
|
||||||
initiator = null
|
initiator = null
|
||||||
time_remaining = 0
|
time_remaining = 0
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
|
|
||||||
var/triai = 0//Global holder for Triumvirate
|
var/triai = 0//Global holder for Triumvirate
|
||||||
|
|
||||||
var/initialtpass = 0 //holder for inital autotransfer vote timer
|
|
||||||
|
|
||||||
/datum/controller/gameticker/proc/pregame()
|
/datum/controller/gameticker/proc/pregame()
|
||||||
login_music = pick(\
|
login_music = pick(\
|
||||||
/*'sound/music/halloween/skeletons.ogg',\
|
/*'sound/music/halloween/skeletons.ogg',\
|
||||||
@@ -63,17 +61,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
current_state = GAME_STATE_SETTING_UP
|
current_state = GAME_STATE_SETTING_UP
|
||||||
while (!setup())
|
while (!setup())
|
||||||
|
|
||||||
/datum/controller/gameticker/proc/votetimer()
|
|
||||||
var/timerbuffer = 0
|
|
||||||
if (initialtpass == 0)
|
|
||||||
timerbuffer = config.vote_autotransfer_initial
|
|
||||||
else
|
|
||||||
timerbuffer = config.vote_autotransfer_interval
|
|
||||||
spawn(timerbuffer)
|
|
||||||
vote.autotransfer()
|
|
||||||
initialtpass = 1
|
|
||||||
votetimer()
|
|
||||||
|
|
||||||
|
|
||||||
/datum/controller/gameticker/proc/setup()
|
/datum/controller/gameticker/proc/setup()
|
||||||
//Create and announce mode
|
//Create and announce mode
|
||||||
@@ -166,7 +153,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
spawn(3000)
|
spawn(3000)
|
||||||
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
|
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
|
||||||
|
|
||||||
votetimer()
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/controller/gameticker
|
/datum/controller/gameticker
|
||||||
|
|||||||
@@ -139,10 +139,8 @@ var/global/vox_kills = 0 //Used to check the Inviolate.
|
|||||||
|
|
||||||
/datum/game_mode/heist/proc/forge_vox_objectives()
|
/datum/game_mode/heist/proc/forge_vox_objectives()
|
||||||
|
|
||||||
|
var/i = 1
|
||||||
//Commented out for testing.
|
var/max_objectives = pick(2,2,2,2,3,3,3,4)
|
||||||
/* var/i = 1
|
|
||||||
var/max_objectives = pick(2,2,2,3,3)
|
|
||||||
var/list/objs = list()
|
var/list/objs = list()
|
||||||
while(i<= max_objectives)
|
while(i<= max_objectives)
|
||||||
var/list/goals = list("kidnap","loot","salvage")
|
var/list/goals = list("kidnap","loot","salvage")
|
||||||
@@ -163,13 +161,7 @@ var/global/vox_kills = 0 //Used to check the Inviolate.
|
|||||||
|
|
||||||
//-All- vox raids have these two objectives. Failing them loses the game.
|
//-All- vox raids have these two objectives. Failing them loses the game.
|
||||||
objs += new /datum/objective/heist/inviolate_crew
|
objs += new /datum/objective/heist/inviolate_crew
|
||||||
objs += new /datum/objective/heist/inviolate_death */
|
objs += new /datum/objective/heist/inviolate_death
|
||||||
|
|
||||||
raid_objectives += new /datum/objective/heist/kidnap
|
|
||||||
raid_objectives += new /datum/objective/heist/loot
|
|
||||||
raid_objectives += new /datum/objective/heist/salvage
|
|
||||||
raid_objectives += new /datum/objective/heist/inviolate_crew
|
|
||||||
raid_objectives += new /datum/objective/heist/inviolate_death
|
|
||||||
|
|
||||||
for(var/datum/objective/heist/O in raid_objectives)
|
for(var/datum/objective/heist/O in raid_objectives)
|
||||||
O.choose_target()
|
O.choose_target()
|
||||||
@@ -181,6 +173,7 @@ var/global/vox_kills = 0 //Used to check the Inviolate.
|
|||||||
raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to Tau Ceti and much of the unexplored galaxy. You and the crew have come to the Exodus for plunder, trade or both."
|
raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to Tau Ceti and much of the unexplored galaxy. You and the crew have come to the Exodus for plunder, trade or both."
|
||||||
raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious."
|
raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious."
|
||||||
raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!"
|
raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!"
|
||||||
|
raider.current << "\red IF YOU HAVE NOT PLAYED A VOX BEFORE, REVIEW THIS THREAD: http://baystation12.net/forums/viewtopic.php?f=6&t=8657."
|
||||||
var/obj_count = 1
|
var/obj_count = 1
|
||||||
for(var/datum/objective/objective in raider.objectives)
|
for(var/datum/objective/objective in raider.objectives)
|
||||||
raider.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
raider.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||||
@@ -252,6 +245,28 @@ var/global/vox_kills = 0 //Used to check the Inviolate.
|
|||||||
feedback_add_details("traitor_objective","[objective.type]|FAIL")
|
feedback_add_details("traitor_objective","[objective.type]|FAIL")
|
||||||
count++
|
count++
|
||||||
|
|
||||||
|
var/text = "<FONT size = 2><B>The vox raiders were:</B></FONT>"
|
||||||
|
|
||||||
|
for(var/datum/mind/vox in raiders)
|
||||||
|
text += "<br>[vox.key] was [vox.name] ("
|
||||||
|
var/obj/stack = raiders[vox]
|
||||||
|
if(get_area(stack) != locate(/area/shuttle/vox/station))
|
||||||
|
text += "left behind)"
|
||||||
|
continue
|
||||||
|
else if(vox.current)
|
||||||
|
if(vox.current.stat == DEAD)
|
||||||
|
text += "died"
|
||||||
|
else
|
||||||
|
text += "survived"
|
||||||
|
if(vox.current.real_name != vox.name)
|
||||||
|
text += " as [vox.current.real_name]"
|
||||||
|
else
|
||||||
|
text += "body destroyed"
|
||||||
|
text += ")"
|
||||||
|
|
||||||
|
world << text
|
||||||
|
return 1
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
datum/game_mode/proc/auto_declare_completion_heist()
|
datum/game_mode/proc/auto_declare_completion_heist()
|
||||||
|
|||||||
@@ -115,6 +115,7 @@
|
|||||||
cell = C
|
cell = C
|
||||||
return
|
return
|
||||||
cell = new(src)
|
cell = new(src)
|
||||||
|
cell.name = "high-capacity power cell"
|
||||||
cell.charge = 15000
|
cell.charge = 15000
|
||||||
cell.maxcharge = 15000
|
cell.maxcharge = 15000
|
||||||
|
|
||||||
|
|||||||
@@ -290,15 +290,19 @@ Ccomp's first proc.
|
|||||||
var/action=""
|
var/action=""
|
||||||
if(config.antag_hud_allowed)
|
if(config.antag_hud_allowed)
|
||||||
for(var/mob/dead/observer/g in get_ghosts())
|
for(var/mob/dead/observer/g in get_ghosts())
|
||||||
|
if(!g.client.holder) //Remove the verb from non-admin ghosts
|
||||||
|
g.verbs -= /mob/dead/observer/verb/toggle_antagHUD
|
||||||
if(g.antagHUD)
|
if(g.antagHUD)
|
||||||
g.antagHUD = 0 // Disable it on those that have it enabled
|
g.antagHUD = 0 // Disable it on those that have it enabled
|
||||||
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
|
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
|
||||||
g << "\red <B>The Administrator has disabled AntagHUD </B>"
|
g << "\red <B>The Administrator has disabled AntagHUD </B>"
|
||||||
config.antag_hud_allowed = 0
|
config.antag_hud_allowed = 0
|
||||||
src << "\red <B>AntagHUD usage has been disabled</B>"
|
src << "\red <B>AntagHUD usage has been disabled</B>"
|
||||||
action = "disabled"
|
action = "disabled"
|
||||||
else
|
else
|
||||||
for(var/mob/dead/observer/g in get_ghosts())
|
for(var/mob/dead/observer/g in get_ghosts())
|
||||||
|
if(!g.client.holder) // Add the verb back for all non-admin ghosts
|
||||||
|
g.verbs += /mob/dead/observer/verb/toggle_antagHUD
|
||||||
g << "\blue <B>The Administrator has enabled AntagHUD </B>" // Notify all observers they can now use AntagHUD
|
g << "\blue <B>The Administrator has enabled AntagHUD </B>" // Notify all observers they can now use AntagHUD
|
||||||
config.antag_hud_allowed = 1
|
config.antag_hud_allowed = 1
|
||||||
action = "enabled"
|
action = "enabled"
|
||||||
|
|||||||
@@ -97,8 +97,6 @@ log transactions
|
|||||||
user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
|
user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
|
||||||
return
|
return
|
||||||
if(get_dist(src,user) <= 1)
|
if(get_dist(src,user) <= 1)
|
||||||
//check to see if the user has low security enabled
|
|
||||||
scan_user(user)
|
|
||||||
|
|
||||||
//js replicated from obj/machinery/computer/card
|
//js replicated from obj/machinery/computer/card
|
||||||
var/dat = "<h1>NanoTrasen Automatic Teller Machine</h1>"
|
var/dat = "<h1>NanoTrasen Automatic Teller Machine</h1>"
|
||||||
@@ -223,7 +221,11 @@ log transactions
|
|||||||
var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0)
|
var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0)
|
||||||
authenticated_account.security_level = new_sec_level
|
authenticated_account.security_level = new_sec_level
|
||||||
if("attempt_auth")
|
if("attempt_auth")
|
||||||
if(!ticks_left_locked_down)
|
|
||||||
|
// check if they have low security enabled
|
||||||
|
scan_user(usr)
|
||||||
|
|
||||||
|
if(!ticks_left_locked_down && held_card)
|
||||||
var/tried_account_num = text2num(href_list["account_num"])
|
var/tried_account_num = text2num(href_list["account_num"])
|
||||||
if(!tried_account_num)
|
if(!tried_account_num)
|
||||||
tried_account_num = held_card.associated_account_number
|
tried_account_num = held_card.associated_account_number
|
||||||
@@ -363,3 +365,5 @@ log transactions
|
|||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = worldtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
|
|
||||||
|
view_screen = NO_SCREEN
|
||||||
@@ -44,39 +44,39 @@ var/list/event_last_fired = list()
|
|||||||
//see:
|
//see:
|
||||||
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm
|
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm
|
||||||
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm
|
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm
|
||||||
possibleEvents[/datum/event/economic_event] = 200
|
possibleEvents[/datum/event/economic_event] = 300
|
||||||
possibleEvents[/datum/event/trivial_news] = 300
|
possibleEvents[/datum/event/trivial_news] = 400
|
||||||
possibleEvents[/datum/event/mundane_news] = 200
|
possibleEvents[/datum/event/mundane_news] = 300
|
||||||
|
|
||||||
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
||||||
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
||||||
if(account_hack_attempted)
|
if(account_hack_attempted)
|
||||||
possibleEvents[/datum/event/money_hacker] = max(min(25, player_list.len) * 4, 200)
|
possibleEvents[/datum/event/money_hacker] = max(min(25, player_list.len) * 4, 200)
|
||||||
|
|
||||||
possibleEvents[/datum/event/carp_migration] = 50 + 50 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/carp_migration] = 20 + 10 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/brand_intelligence] = 50 + 25 * active_with_role["Janitor"]
|
possibleEvents[/datum/event/brand_intelligence] = 20 + 25 * active_with_role["Janitor"]
|
||||||
|
|
||||||
possibleEvents[/datum/event/rogue_drone] = 25 + 25 * active_with_role["Engineer"] + 25 * active_with_role["Security"]
|
possibleEvents[/datum/event/rogue_drone] = 5 + 25 * active_with_role["Engineer"] + 25 * active_with_role["Security"]
|
||||||
possibleEvents[/datum/event/infestation] = 50 + 25 * active_with_role["Janitor"]
|
possibleEvents[/datum/event/infestation] = 100 + 100 * active_with_role["Janitor"]
|
||||||
|
|
||||||
possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25
|
possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25
|
||||||
possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5
|
possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5
|
||||||
possibleEvents[/datum/event/grid_check] = 25 + 20 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/grid_check] = 25 + 10 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/electrical_storm] = 10 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/electrical_storm] = 15 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/wallrot] = 30 * active_with_role["Engineer"] + 50 * active_with_role["Botanist"]
|
possibleEvents[/datum/event/wallrot] = 30 * active_with_role["Engineer"] + 50 * active_with_role["Botanist"]
|
||||||
|
|
||||||
if(!spacevines_spawned)
|
if(!spacevines_spawned)
|
||||||
possibleEvents[/datum/event/spacevine] = 5 + 5 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/spacevine] = 10 + 5 * active_with_role["Engineer"]
|
||||||
if(minutes_passed >= 30) // Give engineers time to set up engine
|
if(minutes_passed >= 30) // Give engineers time to set up engine
|
||||||
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/meteor_shower] = 40 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/meteor_shower] = 20 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/blob] = 20 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/blob] = 20 * active_with_role["Engineer"]
|
||||||
|
|
||||||
possibleEvents[/datum/event/viral_infection] = 25 + active_with_role["Medical"] * 100
|
possibleEvents[/datum/event/viral_infection] = 25 + active_with_role["Medical"] * 15
|
||||||
if(active_with_role["Medical"] > 0)
|
if(active_with_role["Medical"] > 0)
|
||||||
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 50
|
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 10
|
||||||
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 150
|
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 10
|
||||||
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 10
|
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 20
|
||||||
possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
|
possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
|
||||||
|
|
||||||
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
|
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ var/list/allEvents = typesof(/datum/event) - /datum/event
|
|||||||
var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event
|
var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event
|
||||||
//var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event - /datum/event/spider_infestation - /datum/event/alien_infestation
|
//var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event - /datum/event/spider_infestation - /datum/event/alien_infestation
|
||||||
|
|
||||||
var/eventTimeLower = 9000 //15 minutes
|
var/eventTimeLower = 12000 //20 minutes
|
||||||
var/eventTimeUpper = 15000 //25 minutes
|
var/eventTimeUpper = 24000 //40 minutes
|
||||||
var/scheduledEvent = null
|
var/scheduledEvent = null
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
see_invisible = SEE_INVISIBLE_OBSERVER
|
see_invisible = SEE_INVISIBLE_OBSERVER
|
||||||
see_in_dark = 100
|
see_in_dark = 100
|
||||||
verbs += /mob/dead/observer/proc/dead_tele
|
verbs += /mob/dead/observer/proc/dead_tele
|
||||||
|
|
||||||
stat = DEAD
|
stat = DEAD
|
||||||
|
|
||||||
var/turf/T
|
var/turf/T
|
||||||
@@ -65,6 +66,23 @@
|
|||||||
real_name = name
|
real_name = name
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/mob/dead/attackby(obj/item/W, mob/user)
|
||||||
|
if(istype(W,/obj/item/weapon/tome))
|
||||||
|
var/mob/dead/M = src
|
||||||
|
if(src.invisibility != 0)
|
||||||
|
M.invisibility = 0
|
||||||
|
user.visible_message( \
|
||||||
|
"\red [user] drags ghost, [M], to our plan of reality!", \
|
||||||
|
"\red You drag [M] to our plan of reality!" \
|
||||||
|
)
|
||||||
|
else
|
||||||
|
user.visible_message ( \
|
||||||
|
"\red [user] just tried to smash his book into that ghost! It's not very effective", \
|
||||||
|
"\red You get the feeling that the ghost can't become any more visible." \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||||
return 1
|
return 1
|
||||||
/*
|
/*
|
||||||
@@ -132,6 +150,8 @@ Works together with spawning an observer, noted above.
|
|||||||
ghost.can_reenter_corpse = can_reenter_corpse
|
ghost.can_reenter_corpse = can_reenter_corpse
|
||||||
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
|
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
|
||||||
ghost.key = key
|
ghost.key = key
|
||||||
|
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||||
|
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
|
||||||
return ghost
|
return ghost
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -242,7 +242,7 @@
|
|||||||
var/rads = radiation/25
|
var/rads = radiation/25
|
||||||
radiation -= rads
|
radiation -= rads
|
||||||
nutrition += rads
|
nutrition += rads
|
||||||
heal_overall_damage(rads,rads)
|
adjustBruteLoss(-(rads))
|
||||||
adjustOxyLoss(-(rads))
|
adjustOxyLoss(-(rads))
|
||||||
adjustToxLoss(-(rads))
|
adjustToxLoss(-(rads))
|
||||||
updatehealth()
|
updatehealth()
|
||||||
@@ -887,8 +887,8 @@
|
|||||||
|
|
||||||
if(nutrition > 500)
|
if(nutrition > 500)
|
||||||
nutrition = 500
|
nutrition = 500
|
||||||
if(light_amount > 2) //if there's enough light, heal
|
if(light_amount > 5) //if there's enough light, heal
|
||||||
heal_overall_damage(1,1)
|
adjustBruteLoss(-1)
|
||||||
adjustToxLoss(-1)
|
adjustToxLoss(-1)
|
||||||
adjustOxyLoss(-1)
|
adjustOxyLoss(-1)
|
||||||
if(dna && dna.mutantrace == "shadow")
|
if(dna && dna.mutantrace == "shadow")
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
src << "You are not yet ready for your growth..."
|
src << "You are not yet ready for your growth..."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(reagents.get_reagent_amount("nutriment") < 5)
|
if(nutrition < 400)
|
||||||
src << "You have not yet consumed enough to grow..."
|
src << "You have not yet consumed enough to grow..."
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,7 @@
|
|||||||
spawning = 1
|
spawning = 1
|
||||||
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
|
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
|
||||||
|
|
||||||
|
|
||||||
observer.started_as_observer = 1
|
observer.started_as_observer = 1
|
||||||
close_spawn_windows()
|
close_spawn_windows()
|
||||||
var/obj/O = locate("landmark*Observer-Start")
|
var/obj/O = locate("landmark*Observer-Start")
|
||||||
@@ -129,8 +130,11 @@
|
|||||||
client.prefs.real_name = random_name(client.prefs.gender)
|
client.prefs.real_name = random_name(client.prefs.gender)
|
||||||
observer.real_name = client.prefs.real_name
|
observer.real_name = client.prefs.real_name
|
||||||
observer.name = observer.real_name
|
observer.name = observer.real_name
|
||||||
|
if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||||
|
observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
|
||||||
observer.key = key
|
observer.key = key
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if(href_list["late_join"])
|
if(href_list["late_join"])
|
||||||
|
|||||||
@@ -1681,7 +1681,7 @@ datum
|
|||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
if(H.dna)
|
if(H.dna)
|
||||||
if(H.species.flags & IS_PLANT) //plantmen take a LOT of damage
|
if(H.species.flags & IS_PLANT) //plantmen take a LOT of damage
|
||||||
H.adjustToxLoss(10)
|
H.adjustToxLoss(50)
|
||||||
|
|
||||||
toxin/stoxin
|
toxin/stoxin
|
||||||
name = "Sleep Toxin"
|
name = "Sleep Toxin"
|
||||||
@@ -2177,12 +2177,13 @@ datum
|
|||||||
|
|
||||||
on_mob_life(var/mob/living/M as mob)
|
on_mob_life(var/mob/living/M as mob)
|
||||||
M.nutrition += nutriment_factor
|
M.nutrition += nutriment_factor
|
||||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
|
/*if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
|
||||||
if(!M) M = holder.my_atom
|
if(!M) M = holder.my_atom
|
||||||
M.heal_organ_damage(1,1)
|
M.heal_organ_damage(1,1)
|
||||||
M.nutrition += nutriment_factor
|
M.nutrition += nutriment_factor
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
*/
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/* //removed because of meta bullshit. this is why we can't have nice things.
|
/* //removed because of meta bullshit. this is why we can't have nice things.
|
||||||
|
|||||||
@@ -1611,6 +1611,16 @@ datum/design/bag_holding
|
|||||||
reliability_base = 80
|
reliability_base = 80
|
||||||
build_path = "/obj/item/weapon/storage/backpack/holding"
|
build_path = "/obj/item/weapon/storage/backpack/holding"
|
||||||
|
|
||||||
|
datum/design/bluespace_crystal
|
||||||
|
name = "Artificial Bluespace Crystal"
|
||||||
|
desc = "A small blue crystal with mystical properties."
|
||||||
|
id = "bluespace_crystal"
|
||||||
|
req_tech = list("bluespace" = 5, "materials" = 7)
|
||||||
|
build_type = PROTOLATHE
|
||||||
|
materials = list("$gold" = 1500, "$diamond" = 3000, "$plasma" = 1500)
|
||||||
|
reliability_base = 100
|
||||||
|
build_path = "/obj/item/bluespace_crystal/artificial"
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
/////////////////HUDs////////////////////
|
/////////////////HUDs////////////////////
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
@@ -1849,4 +1859,8 @@ datum/design/cart_traitor
|
|||||||
req_tech = list("syndicate" = 2, "powerstorage" = 3)
|
req_tech = list("syndicate" = 2, "powerstorage" = 3)
|
||||||
build_type = PROTOLATHE
|
build_type = PROTOLATHE
|
||||||
materials = list("$metal" = 50, "$glass" = 50)
|
materials = list("$metal" = 50, "$glass" = 50)
|
||||||
|
<<<<<<< HEAD
|
||||||
build_path = "/obj/item/weapon/cartridge/syndicate"
|
build_path = "/obj/item/weapon/cartridge/syndicate"
|
||||||
|
=======
|
||||||
|
build_path = "/obj/item/weapon/cartridge/syndicate"
|
||||||
|
>>>>>>> 60f644c4014e7ae0ca8267e271c8985574039f2b
|
||||||
|
|||||||
38
code/modules/telesci/bscrystal.dm
Normal file
38
code/modules/telesci/bscrystal.dm
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
|
||||||
|
|
||||||
|
/obj/item/bluespace_crystal
|
||||||
|
name = "bluespace crystal"
|
||||||
|
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
|
||||||
|
icon = 'icons/obj/telescience.dmi'
|
||||||
|
icon_state = "bluespace_crystal"
|
||||||
|
w_class = 1
|
||||||
|
origin_tech = "bluespace=4;materials=3"
|
||||||
|
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
|
||||||
|
|
||||||
|
/obj/item/bluespace_crystal/New()
|
||||||
|
..()
|
||||||
|
pixel_x = rand(-5, 5)
|
||||||
|
pixel_y = rand(-5, 5)
|
||||||
|
|
||||||
|
/obj/item/bluespace_crystal/attack_self(var/mob/user)
|
||||||
|
blink_mob(user)
|
||||||
|
user.drop_item()
|
||||||
|
user.visible_message("<span class='notice'>[user] crushes the [src]!</span>")
|
||||||
|
del(src)
|
||||||
|
|
||||||
|
/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L)
|
||||||
|
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
|
||||||
|
|
||||||
|
/obj/item/bluespace_crystal/throw_impact(atom/hit_atom)
|
||||||
|
..()
|
||||||
|
if(isliving(hit_atom))
|
||||||
|
blink_mob(hit_atom)
|
||||||
|
del(src)
|
||||||
|
|
||||||
|
// Artifical bluespace crystal, doesn't give you much research.
|
||||||
|
|
||||||
|
/obj/item/bluespace_crystal/artificial
|
||||||
|
name = "artificial bluespace crystal"
|
||||||
|
desc = "An artificially made bluespace crystal, it looks delicate."
|
||||||
|
origin_tech = "bluespace=2"
|
||||||
|
blink_range = 4 // Not as good as the organic stuff!
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
|
var/list/GPS_list = list()
|
||||||
/obj/item/device/gps
|
/obj/item/device/gps
|
||||||
name = "Global Positioning System"
|
name = "global positioning system"
|
||||||
desc = "Helping lost spacemen find their way through the planets since 2016."
|
desc = "Helping lost spacemen find their way through the planets since 2016."
|
||||||
icon = 'icons/obj/telescience.dmi'
|
icon = 'icons/obj/telescience.dmi'
|
||||||
icon_state = "gps-c"
|
icon_state = "gps-c"
|
||||||
@@ -11,9 +12,15 @@
|
|||||||
var/emped = 0
|
var/emped = 0
|
||||||
|
|
||||||
/obj/item/device/gps/New()
|
/obj/item/device/gps/New()
|
||||||
name = "Global Positioning System ([gpstag])"
|
..()
|
||||||
|
GPS_list.Add(src)
|
||||||
|
name = "global positioning system ([gpstag])"
|
||||||
overlays += "working"
|
overlays += "working"
|
||||||
|
|
||||||
|
/obj/item/device/gps/Del()
|
||||||
|
GPS_list.Remove(src)
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/item/device/gps/emp_act(severity)
|
/obj/item/device/gps/emp_act(severity)
|
||||||
emped = 1
|
emped = 1
|
||||||
overlays -= "working"
|
overlays -= "working"
|
||||||
@@ -24,6 +31,7 @@
|
|||||||
overlays += "working"
|
overlays += "working"
|
||||||
|
|
||||||
/obj/item/device/gps/attack_self(mob/user as mob)
|
/obj/item/device/gps/attack_self(mob/user as mob)
|
||||||
|
|
||||||
var/obj/item/device/gps/t = ""
|
var/obj/item/device/gps/t = ""
|
||||||
if(emped)
|
if(emped)
|
||||||
t += "ERROR"
|
t += "ERROR"
|
||||||
@@ -31,7 +39,7 @@
|
|||||||
t += "<BR><A href='?src=\ref[src];tag=1'>Set Tag</A> "
|
t += "<BR><A href='?src=\ref[src];tag=1'>Set Tag</A> "
|
||||||
t += "<BR>Tag: [gpstag]"
|
t += "<BR>Tag: [gpstag]"
|
||||||
|
|
||||||
for(var/obj/item/device/gps/G in world)
|
for(var/obj/item/device/gps/G in GPS_list)
|
||||||
var/turf/pos = get_turf(G)
|
var/turf/pos = get_turf(G)
|
||||||
var/area/gps_area = get_area(G)
|
var/area/gps_area = get_area(G)
|
||||||
var/tracked_gpstag = G.gpstag
|
var/tracked_gpstag = G.gpstag
|
||||||
@@ -46,16 +54,14 @@
|
|||||||
popup.open()
|
popup.open()
|
||||||
|
|
||||||
/obj/item/device/gps/Topic(href, href_list)
|
/obj/item/device/gps/Topic(href, href_list)
|
||||||
|
..()
|
||||||
if(href_list["tag"] )
|
if(href_list["tag"] )
|
||||||
var/a = input("Please enter desired tag.", name, gpstag) as text
|
var/a = input("Please enter desired tag.", name, gpstag) as text
|
||||||
a = copytext(sanitize(a), 1, 20)
|
a = uppertext(copytext(sanitize(a), 1, 5))
|
||||||
if(length(a) != 4)
|
if(src.loc == usr)
|
||||||
usr << "\blue The tag must be four letters long!"
|
|
||||||
return
|
|
||||||
else
|
|
||||||
gpstag = a
|
gpstag = a
|
||||||
name = "Global Positioning System ([gpstag])"
|
name = "global positioning system ([gpstag])"
|
||||||
return
|
attack_self(usr)
|
||||||
|
|
||||||
/obj/item/device/gps/science
|
/obj/item/device/gps/science
|
||||||
icon_state = "gps-s"
|
icon_state = "gps-s"
|
||||||
|
|||||||
@@ -8,10 +8,6 @@
|
|||||||
use_power = 1
|
use_power = 1
|
||||||
idle_power_usage = 200
|
idle_power_usage = 200
|
||||||
active_power_usage = 5000
|
active_power_usage = 5000
|
||||||
/obj/machinery/telepad/New()
|
|
||||||
..()
|
|
||||||
/obj/machinery/telepad/Del()
|
|
||||||
..()
|
|
||||||
//CARGO TELEPAD//
|
//CARGO TELEPAD//
|
||||||
/obj/machinery/telepad_cargo
|
/obj/machinery/telepad_cargo
|
||||||
name = "cargo telepad"
|
name = "cargo telepad"
|
||||||
@@ -23,39 +19,35 @@
|
|||||||
idle_power_usage = 20
|
idle_power_usage = 20
|
||||||
active_power_usage = 500
|
active_power_usage = 500
|
||||||
var/stage = 0
|
var/stage = 0
|
||||||
/obj/machinery/telepad_cargo/New()
|
|
||||||
..()
|
|
||||||
/obj/machinery/telepad_cargo/Del()
|
|
||||||
..()
|
|
||||||
/obj/machinery/telepad_cargo/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/machinery/telepad_cargo/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
if(istype(W, /obj/item/weapon/wrench))
|
if(istype(W, /obj/item/weapon/wrench))
|
||||||
anchored = 0
|
anchored = 0
|
||||||
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
|
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
|
||||||
if(anchored)
|
if(anchored)
|
||||||
anchored = 0
|
anchored = 0
|
||||||
user << "\blue The [src] can now be moved."
|
user << "<span class = 'caution'> The [src] can now be moved.</span>"
|
||||||
else if(!anchored)
|
else if(!anchored)
|
||||||
anchored = 1
|
anchored = 1
|
||||||
user << "\blue The [src] is now secured."
|
user << "<span class = 'caution'> The [src] is now secured.</span>"
|
||||||
if(istype(W, /obj/item/weapon/screwdriver))
|
if(istype(W, /obj/item/weapon/screwdriver))
|
||||||
if(stage == 0)
|
if(stage == 0)
|
||||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
user << "\blue You unscrew the telepad's tracking beacon."
|
user << "<span class = 'caution'> You unscrew the telepad's tracking beacon.</span>"
|
||||||
stage = 1
|
stage = 1
|
||||||
else if(stage == 1)
|
else if(stage == 1)
|
||||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
user << "\blue You screw in the telepad's tracking beacon."
|
user << "<span class = 'caution'> You screw in the telepad's tracking beacon.</span>"
|
||||||
stage = 0
|
stage = 0
|
||||||
if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
|
if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
|
||||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||||
user << "\blue You disassemble the telepad."
|
user << "<span class = 'caution'> You disassemble the telepad.</span>"
|
||||||
new /obj/item/stack/sheet/metal(get_turf(src))
|
new /obj/item/stack/sheet/metal(get_turf(src))
|
||||||
new /obj/item/stack/sheet/glass(get_turf(src))
|
new /obj/item/stack/sheet/glass(get_turf(src))
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
///TELEPAD CALLER///
|
///TELEPAD CALLER///
|
||||||
/obj/item/device/telepad_beacon
|
/obj/item/device/telepad_beacon
|
||||||
name = "Telepad Beacon"
|
name = "telepad beacon"
|
||||||
desc = "Use to warp in a cargo telepad."
|
desc = "Use to warp in a cargo telepad."
|
||||||
icon = 'icons/obj/radio.dmi'
|
icon = 'icons/obj/radio.dmi'
|
||||||
icon_state = "beacon"
|
icon_state = "beacon"
|
||||||
@@ -64,7 +56,7 @@
|
|||||||
|
|
||||||
/obj/item/device/telepad_beacon/attack_self(mob/user as mob)
|
/obj/item/device/telepad_beacon/attack_self(mob/user as mob)
|
||||||
if(user)
|
if(user)
|
||||||
user << "\blue Locked In"
|
user << "<span class = 'caution'> Locked In</span>"
|
||||||
new /obj/machinery/telepad_cargo(user.loc)
|
new /obj/machinery/telepad_cargo(user.loc)
|
||||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
||||||
del(src)
|
del(src)
|
||||||
@@ -76,9 +68,6 @@
|
|||||||
desc = "Use this to send crates and closets to cargo telepads."
|
desc = "Use this to send crates and closets to cargo telepads."
|
||||||
icon = 'icons/obj/telescience.dmi'
|
icon = 'icons/obj/telescience.dmi'
|
||||||
icon_state = "rcs"
|
icon_state = "rcs"
|
||||||
opacity = 0
|
|
||||||
density = 0
|
|
||||||
anchored = 0.0
|
|
||||||
flags = FPRINT | TABLEPASS| CONDUCT
|
flags = FPRINT | TABLEPASS| CONDUCT
|
||||||
force = 10.0
|
force = 10.0
|
||||||
throwforce = 10.0
|
throwforce = 10.0
|
||||||
@@ -94,18 +83,20 @@
|
|||||||
var/teleporting = 0
|
var/teleporting = 0
|
||||||
|
|
||||||
/obj/item/weapon/rcs/New()
|
/obj/item/weapon/rcs/New()
|
||||||
|
..()
|
||||||
processing_objects.Add(src)
|
processing_objects.Add(src)
|
||||||
|
/obj/item/weapon/rcs/examine()
|
||||||
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
|
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/rcs/Del()
|
/obj/item/weapon/rcs/Del()
|
||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
|
..()
|
||||||
/obj/item/weapon/rcs/process()
|
/obj/item/weapon/rcs/process()
|
||||||
if(rcharges > 10)
|
if(rcharges > 10)
|
||||||
rcharges = 10
|
rcharges = 10
|
||||||
if(last_charge == 0)
|
if(last_charge == 0)
|
||||||
rcharges++
|
rcharges++
|
||||||
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
|
|
||||||
last_charge = 30
|
last_charge = 30
|
||||||
else
|
else
|
||||||
last_charge--
|
last_charge--
|
||||||
@@ -115,11 +106,11 @@
|
|||||||
if(mode == 0)
|
if(mode == 0)
|
||||||
mode = 1
|
mode = 1
|
||||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||||
user << "\red The telepad locator has become uncalibrated."
|
user << "<span class = 'caution'> The telepad locator has become uncalibrated.</span>"
|
||||||
else
|
else
|
||||||
mode = 0
|
mode = 0
|
||||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||||
user << "\blue You calibrate the telepad locator."
|
user << "<span class = 'caution'> You calibrate the telepad locator.</span>"
|
||||||
|
|
||||||
/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
|
/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
|
||||||
if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
|
if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
|
||||||
@@ -127,5 +118,5 @@
|
|||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
s.set_up(5, 1, src)
|
s.set_up(5, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
user << "\red You emag the RCS. Click on it to toggle between modes."
|
user << "<span class = 'caution'> You emag the RCS. Click on it to toggle between modes.</span>"
|
||||||
return
|
return
|
||||||
@@ -1,20 +1,52 @@
|
|||||||
/obj/machinery/computer/telescience
|
/obj/machinery/computer/telescience
|
||||||
name = "Telepad Control Console"
|
name = "\improper Telepad Control Console"
|
||||||
desc = "Used to teleport objects to and from the telescience telepad."
|
desc = "Used to teleport objects to and from the telescience telepad."
|
||||||
icon_state = "teleport"
|
icon_state = "teleport"
|
||||||
|
var/sending = 1
|
||||||
|
var/obj/machinery/telepad/telepad = null
|
||||||
|
var/temp_msg = "Telescience control console initialized.<BR>Welcome."
|
||||||
|
|
||||||
// VARIABLES //
|
// VARIABLES //
|
||||||
var/teles_left // How many teleports left until it becomes uncalibrated
|
var/teles_left // How many teleports left until it becomes uncalibrated
|
||||||
var/x_off // X offset
|
var/datum/projectile_data/last_tele_data = null
|
||||||
var/y_off // Y offset
|
var/z_co = 1
|
||||||
var/x_co // X coordinate
|
var/power_off
|
||||||
var/y_co // Y coordinate
|
var/rotation_off
|
||||||
var/z_co // Z coordinate
|
var/angle_off
|
||||||
|
|
||||||
|
var/rotation = 0
|
||||||
|
var/angle = 45
|
||||||
|
var/power
|
||||||
|
|
||||||
|
// Based on the power used
|
||||||
|
var/teleport_cooldown = 0
|
||||||
|
var/list/power_options = list(5, 10, 20, 25, 30, 40, 50, 80, 100) // every index requires a bluespace crystal
|
||||||
|
var/teleporting = 0
|
||||||
|
var/starting_crystals = 3
|
||||||
|
var/list/crystals = list()
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/New()
|
/obj/machinery/computer/telescience/New()
|
||||||
teles_left = rand(8,12)
|
..()
|
||||||
x_off = rand(-10,10)
|
link_telepad()
|
||||||
y_off = rand(-10,10)
|
recalibrate()
|
||||||
|
|
||||||
|
/obj/machinery/computer/telescience/Del()
|
||||||
|
eject()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/machinery/computer/telescience/examine()
|
||||||
|
..()
|
||||||
|
usr << "There are [crystals.len] bluespace crystals in the crystal ports."
|
||||||
|
|
||||||
|
/obj/machinery/computer/telescience/initialize()
|
||||||
|
..()
|
||||||
|
link_telepad()
|
||||||
|
for(var/i = 1; i <= starting_crystals; i++)
|
||||||
|
crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals
|
||||||
|
power = power_options[1]
|
||||||
|
|
||||||
|
/obj/machinery/computer/telescience/proc/link_telepad()
|
||||||
|
telepad = locate() in range(src, 7)
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/update_icon()
|
/obj/machinery/computer/telescience/update_icon()
|
||||||
if(stat & BROKEN)
|
if(stat & BROKEN)
|
||||||
@@ -28,267 +60,250 @@
|
|||||||
stat &= ~NOPOWER
|
stat &= ~NOPOWER
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attack_paw(mob/user)
|
/obj/machinery/computer/telescience/attack_paw(mob/user)
|
||||||
usr << "You are too primitive to use this computer."
|
user << "You are too primitive to use this computer."
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user)
|
||||||
|
if(istype(W, /obj/item/bluespace_crystal))
|
||||||
|
if(crystals.len >= power_options.len)
|
||||||
|
user << "<span class='warning'>There are not enough crystal ports.</span>"
|
||||||
|
return
|
||||||
|
user.drop_item()
|
||||||
|
crystals += W
|
||||||
|
W.loc = null
|
||||||
|
user.visible_message("<span class='notice'>[user] inserts a [W] into the [src]'s crystal port.</span>")
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attack_ai(mob/user)
|
/obj/machinery/computer/telescience/attack_ai(mob/user)
|
||||||
src.attack_hand()
|
src.attack_hand(user)
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attack_hand(mob/user)
|
/obj/machinery/computer/telescience/attack_hand(mob/user)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
if(stat & (NOPOWER|BROKEN))
|
interact(user)
|
||||||
return
|
|
||||||
var/t = ""
|
/obj/machinery/computer/telescience/interact(mob/user)
|
||||||
t += "<A href='?src=\ref[src];setx=1'>Set X</A>"
|
|
||||||
t += "<A href='?src=\ref[src];sety=1'>Set Y</A>"
|
var/t = "<div class='statusDisplay'>[temp_msg]</div><BR>"
|
||||||
t += "<A href='?src=\ref[src];setz=1'>Set Z</A>"
|
t += "<A href='?src=\ref[src];setrotation=1'>Set Bearing</A>"
|
||||||
t += "<BR><BR>Current set coordinates:"
|
t += "<div class='statusDisplay'>[rotation]<5D></div>"
|
||||||
t += "([x_co], [y_co], [z_co])"
|
t += "<A href='?src=\ref[src];setangle=1'>Set Elevation</A>"
|
||||||
t += "<BR><BR><A href='?src=\ref[src];send=1'>Send</A>"
|
t += "<div class='statusDisplay'>[angle]<5D></div>"
|
||||||
|
t += "<span class='linkOn'>Set Power</span>"
|
||||||
|
t += "<div class='statusDisplay'>"
|
||||||
|
|
||||||
|
for(var/i = 1; i <= power_options.len; i++)
|
||||||
|
if(crystals.len < i)
|
||||||
|
t += "<span class='linkOff'>[power_options[i]]</span>"
|
||||||
|
continue
|
||||||
|
if(power == power_options[i])
|
||||||
|
t += "<span class='linkOn'>[power_options[i]]</span>"
|
||||||
|
continue
|
||||||
|
t += "<A href='?src=\ref[src];setpower=[i]'>[power_options[i]]</A>"
|
||||||
|
|
||||||
|
t += "</div>"
|
||||||
|
t += "<A href='?src=\ref[src];setz=1'>Set Sector</A>"
|
||||||
|
t += "<div class='statusDisplay'>[z_co ? z_co : "NULL"]</div>"
|
||||||
|
|
||||||
|
t += "<BR><A href='?src=\ref[src];send=1'>Send</A>"
|
||||||
t += " <A href='?src=\ref[src];receive=1'>Receive</A>"
|
t += " <A href='?src=\ref[src];receive=1'>Receive</A>"
|
||||||
t += "<BR><BR><A href='?src=\ref[src];recal=1'>Recalibrate</A>"
|
t += "<BR><A href='?src=\ref[src];recal=1'>Recalibrate Crystals</A> <A href='?src=\ref[src];eject=1'>Eject Crystals</A>"
|
||||||
var/datum/browser/popup = new(user, "telesci", name, 640, 480)
|
|
||||||
|
// Information about the last teleport
|
||||||
|
t += "<BR><div class='statusDisplay'>"
|
||||||
|
if(!last_tele_data)
|
||||||
|
t += "No teleport data found."
|
||||||
|
else
|
||||||
|
t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])<BR>"
|
||||||
|
//t += "Distance: [round(last_tele_data.distance, 0.1)]m<BR>"
|
||||||
|
t += "Time: [round(last_tele_data.time, 0.1)] secs<BR>"
|
||||||
|
t += "</div>"
|
||||||
|
|
||||||
|
var/datum/browser/popup = new(user, "telesci", name, 300, 500)
|
||||||
popup.set_content(t)
|
popup.set_content(t)
|
||||||
popup.open()
|
popup.open()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/sparks()
|
/obj/machinery/computer/telescience/proc/sparks()
|
||||||
for(var/obj/machinery/telepad/E in machines)
|
if(telepad)
|
||||||
var/L = get_turf(E)
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
s.set_up(5, 1, L)
|
s.set_up(5, 1, get_turf(telepad))
|
||||||
s.start()
|
s.start()
|
||||||
|
else
|
||||||
|
return
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/telefail()
|
/obj/machinery/computer/telescience/proc/telefail()
|
||||||
if(prob(95))
|
sparks()
|
||||||
sparks()
|
visible_message("<span class='warning'>The telepad weakly fizzles.</span>")
|
||||||
for(var/mob/O in hearers(src, null))
|
return
|
||||||
O.show_message("\red The telepad weakly fizzles.", 2)
|
|
||||||
|
/obj/machinery/computer/telescience/proc/doteleport(mob/user)
|
||||||
|
|
||||||
|
if(teleport_cooldown > world.time)
|
||||||
|
temp_msg = "Telepad is recharging power.<BR>Please wait [round((teleport_cooldown - world.time) / 10)] seconds."
|
||||||
return
|
return
|
||||||
if(prob(5))
|
|
||||||
// Irradiate everyone in telescience!
|
if(teleporting)
|
||||||
for(var/obj/machinery/telepad/E in machines)
|
temp_msg = "Telepad is in use.<BR>Please wait."
|
||||||
var/L = get_turf(E)
|
|
||||||
sparks()
|
|
||||||
for(var/mob/living/carbon/human/M in viewers(L, null))
|
|
||||||
M.apply_effect((rand(10, 20)), IRRADIATE, 0)
|
|
||||||
M << "\red You feel strange."
|
|
||||||
return
|
return
|
||||||
if(prob(1))
|
|
||||||
// AI CALL SHUTTLE I SAW RUNE, SUPER LOW CHANCE, CAN HARDLY HAPPEN
|
if(telepad)
|
||||||
for(var/mob/living/carbon/O in viewers(src, null))
|
|
||||||
var/datum/game_mode/cult/temp = new
|
var/truePower = Clamp(power + power_off, 1, 1000)
|
||||||
O.show_message("\red The telepad flashes with a strange light, and you have a sudden surge of allegiance toward the true dark one!", 2)
|
var/trueRotation = rotation + rotation_off
|
||||||
O.mind.make_Cultist()
|
var/trueAngle = Clamp(angle + angle_off, 1, 90)
|
||||||
temp.grant_runeword(O)
|
|
||||||
sparks()
|
var/datum/projectile_data/proj_data = projectile_trajectory(telepad.x, telepad.y, trueRotation, trueAngle, truePower)
|
||||||
return
|
last_tele_data = proj_data
|
||||||
if(prob(1))
|
|
||||||
// VIVA LA FUCKING REVOLUTION BITCHES, SUPER LOW CHANCE, CAN HARDLY HAPPEN
|
var/trueX = Clamp(round(proj_data.dest_x, 1), 1, world.maxx)
|
||||||
for(var/mob/living/carbon/O in viewers(src, null))
|
var/trueY = Clamp(round(proj_data.dest_y, 1), 1, world.maxy)
|
||||||
O.show_message("\red The telepad flashes with a strange light, and you see all kind of images flash through your mind, of murderous things Nanotrasen has done, and you decide to rebel!", 2)
|
var/spawn_time = round(proj_data.time) * 10
|
||||||
O.mind.make_Rev()
|
|
||||||
sparks()
|
var/turf/target = locate(trueX, trueY, z_co)
|
||||||
return
|
var/area/A = get_area(target)
|
||||||
if(prob(1))
|
flick("pad-beam", telepad)
|
||||||
// The OH SHIT FUCK GOD DAMN IT LYNCH THE SCIENTISTS event.
|
|
||||||
for(var/mob/living/carbon/O in viewers(src, null))
|
if(spawn_time > 15) // 1.5 seconds
|
||||||
O.show_message("\red The telepad changes colors rapidly, and opens a portal, and you see what your mind seems to think is the very threads that hold the pattern of the universe together, and a eerie sense of paranoia creeps into you.", 2)
|
playsound(telepad.loc, 'sound/weapons/flash.ogg', 25, 1)
|
||||||
spacevine_infestation()
|
// Wait depending on the time the projectile took to get there
|
||||||
sparks()
|
teleporting = 1
|
||||||
return
|
temp_msg = "Powering up bluespace crystals.<BR>Please wait."
|
||||||
if(prob(5))
|
|
||||||
// HOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONK
|
|
||||||
for(var/mob/living/carbon/M in hearers(src, null))
|
spawn(round(proj_data.time) * 10) // in seconds
|
||||||
M << sound('sound/items/AirHorn.ogg')
|
if(!telepad)
|
||||||
if(istype(M, /mob/living/carbon/human))
|
return
|
||||||
var/mob/living/carbon/human/H = M
|
if(telepad.stat & NOPOWER)
|
||||||
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
|
return
|
||||||
continue
|
teleporting = 0
|
||||||
M << "<font color='red' size='7'>HONK</font>"
|
teleport_cooldown = world.time + (power * 2)
|
||||||
M.sleeping = 0
|
teles_left -= 1
|
||||||
M.stuttering += 20
|
|
||||||
M.ear_deaf += 30
|
// use a lot of power
|
||||||
M.Weaken(3)
|
use_power(power * 10)
|
||||||
if(prob(30))
|
|
||||||
M.Stun(10)
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
M.Paralyse(4)
|
s.set_up(5, 1, get_turf(telepad))
|
||||||
|
s.start()
|
||||||
|
|
||||||
|
temp_msg = "Teleport successful.<BR>"
|
||||||
|
if(teles_left < 10)
|
||||||
|
temp_msg += "<BR>Calibration required soon."
|
||||||
else
|
else
|
||||||
M.make_jittery(500)
|
temp_msg += "Data printed below."
|
||||||
sparks()
|
investigate_log("[key_name(usr)]/[user] has teleported with Telescience at [trueX],[trueY],[z_co], in [A ? A.name : "null area"].","telesci")
|
||||||
return
|
|
||||||
if(prob(1))
|
|
||||||
// They did the mash! (They did the monster mash!) The monster mash! (It was a graveyard smash!)
|
|
||||||
sparks()
|
|
||||||
for(var/obj/machinery/telepad/E in machines)
|
|
||||||
var/L = get_turf(E)
|
|
||||||
var/blocked = list(/mob/living/simple_animal/hostile,
|
|
||||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
|
||||||
/mob/living/simple_animal/hostile/retaliate,
|
|
||||||
/mob/living/simple_animal/hostile/retaliate/clown,
|
|
||||||
/mob/living/simple_animal/hostile/giant_spider/nurse)
|
|
||||||
var/list/hostiles = typesof(/mob/living/simple_animal/hostile) - blocked
|
|
||||||
playsound(L, 'sound/effects/phasein.ogg', 100, 1)
|
|
||||||
for(var/mob/living/carbon/human/M in viewers(L, null))
|
|
||||||
flick("e_flash", M.flash)
|
|
||||||
var/chosen = pick(hostiles)
|
|
||||||
var/mob/living/simple_animal/hostile/H = new chosen
|
|
||||||
H.loc = L
|
|
||||||
return
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/dosend()
|
var/sparks = get_turf(target)
|
||||||
var/trueX = (x_co + x_off)
|
var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
|
||||||
var/trueY = (y_co + y_off)
|
y.set_up(5, 1, sparks)
|
||||||
for(var/obj/machinery/telepad/E in machines)
|
y.start()
|
||||||
var/L = get_turf(E)
|
|
||||||
var/target = locate(trueX, trueY, z_co)
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
||||||
s.set_up(5, 1, L)
|
|
||||||
s.start()
|
|
||||||
flick("pad-beam", E)
|
|
||||||
usr << "\blue Teleport successful."
|
|
||||||
var/sparks = get_turf(target)
|
|
||||||
var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
|
|
||||||
y.set_up(5, 1, sparks)
|
|
||||||
y.start()
|
|
||||||
for(var/obj/item/OI in L)
|
|
||||||
do_teleport(OI, target, 0)
|
|
||||||
for(var/obj/structure/closet/OC in L)
|
|
||||||
do_teleport(OC, target, 0)
|
|
||||||
for(var/mob/living/carbon/MO in L)
|
|
||||||
do_teleport(MO, target, 0)
|
|
||||||
for(var/mob/living/simple_animal/SA in L)
|
|
||||||
do_teleport(SA, target, 0)
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/doreceive()
|
var/turf/source = target
|
||||||
var/trueX = (x_co + x_off)
|
var/turf/dest = get_turf(telepad)
|
||||||
var/trueY = (y_co + y_off)
|
if(sending)
|
||||||
for(var/obj/machinery/telepad/E in machines)
|
source = dest
|
||||||
var/L = get_turf(E)
|
dest = target
|
||||||
var/T = locate(trueX, trueY, z_co)
|
|
||||||
var/G = get_turf(T)
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
||||||
s.set_up(5, 1, L)
|
|
||||||
s.start()
|
|
||||||
flick("pad-beam", E)
|
|
||||||
usr << "\blue Teleport successful."
|
|
||||||
var/sparks = get_turf(T)
|
|
||||||
var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
|
|
||||||
y.set_up(5, 1, sparks)
|
|
||||||
y.start()
|
|
||||||
for(var/obj/item/ROI in G)
|
|
||||||
do_teleport(ROI, E, 0)
|
|
||||||
for(var/obj/structure/closet/ROC in G)
|
|
||||||
do_teleport(ROC, E, 0)
|
|
||||||
for(var/mob/living/carbon/RMO in G)
|
|
||||||
do_teleport(RMO, E, 0)
|
|
||||||
for(var/mob/living/simple_animal/RSA in G)
|
|
||||||
do_teleport(RSA, E, 0)
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/telesend()
|
flick("pad-beam", telepad)
|
||||||
if(x_co == "")
|
playsound(telepad.loc, 'sound/weapons/emitter2.ogg', 25, 1)
|
||||||
usr << "\red Error: set coordinates."
|
for(var/atom/movable/ROI in source)
|
||||||
|
// if is anchored, don't let through
|
||||||
|
if(ROI.anchored)
|
||||||
|
if(isliving(ROI))
|
||||||
|
var/mob/living/L = ROI
|
||||||
|
if(L.buckled)
|
||||||
|
// TP people on office chairs
|
||||||
|
if(L.buckled.anchored)
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
else if(!isobserver(ROI))
|
||||||
|
continue
|
||||||
|
do_teleport(ROI, dest)
|
||||||
|
updateDialog()
|
||||||
|
|
||||||
|
/obj/machinery/computer/telescience/proc/teleport(mob/user)
|
||||||
|
if(rotation == null || angle == null || z_co == null)
|
||||||
|
temp_msg = "ERROR!<BR>Set a angle, rotation and sector."
|
||||||
return
|
return
|
||||||
if(y_co == "")
|
if(power <= 0)
|
||||||
usr << "\red Error: set coordinates."
|
|
||||||
return
|
|
||||||
if(z_co == "")
|
|
||||||
usr << "\red Error: set coordinates."
|
|
||||||
return
|
|
||||||
if(x_co < 1 || x_co > 255)
|
|
||||||
telefail()
|
telefail()
|
||||||
usr << "\red Error: X is less than 11 or greater than 245."
|
temp_msg = "ERROR!<BR>No power selected!"
|
||||||
return
|
return
|
||||||
if(y_co < 1 || y_co > 255)
|
if(angle < 1 || angle > 90)
|
||||||
telefail()
|
telefail()
|
||||||
usr << "\red Error: Y is less than 11 or greater than 245."
|
temp_msg = "ERROR!<BR>Elevation is less than 1 or greater than 90."
|
||||||
return
|
return
|
||||||
if(z_co == 2 || z_co < 1 || z_co > 6)
|
if(z_co == 2 || z_co < 1 || z_co > 6)
|
||||||
telefail()
|
telefail()
|
||||||
usr << "\red Error: Z is less than 1, greater than 6, or equal to 2."
|
temp_msg = "ERROR! Sector is less than 1, <BR>greater than 6, or equal to 2."
|
||||||
return
|
return
|
||||||
if(teles_left > 0)
|
if(teles_left > 0)
|
||||||
teles_left -= 1
|
doteleport(user)
|
||||||
dosend()
|
|
||||||
else
|
else
|
||||||
dosend()
|
telefail()
|
||||||
|
temp_msg = "ERROR!<BR>Calibration required."
|
||||||
return
|
return
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/telereceive()
|
/obj/machinery/computer/telescience/proc/eject()
|
||||||
// basically the same thing
|
for(var/obj/item/I in crystals)
|
||||||
if(x_co == "")
|
I.loc = src.loc
|
||||||
usr << "\red Error: set coordinates."
|
crystals -= I
|
||||||
return
|
power = 0
|
||||||
if(y_co == "")
|
|
||||||
usr << "\red Error: set coordinates."
|
|
||||||
return
|
|
||||||
if(z_co == "")
|
|
||||||
usr << "\red Error: set coordinates."
|
|
||||||
return
|
|
||||||
if(x_co < 1 || x_co > 255)
|
|
||||||
telefail()
|
|
||||||
usr << "\red Error: X is less than 11 or greater than 200."
|
|
||||||
return
|
|
||||||
if(y_co < 1 || y_co > 255)
|
|
||||||
telefail()
|
|
||||||
usr << "\red Error: Y is less than 11 or greater than 200."
|
|
||||||
return
|
|
||||||
if(z_co == 2 || z_co < 1 || z_co > 6)
|
|
||||||
telefail()
|
|
||||||
usr << "\red Error: Z is less than 1, greater than 6, or equal to 2."
|
|
||||||
return
|
|
||||||
if(teles_left > 0)
|
|
||||||
teles_left -= 1
|
|
||||||
doreceive()
|
|
||||||
else
|
|
||||||
if(prob(35))
|
|
||||||
doreceive()
|
|
||||||
else
|
|
||||||
telefail()
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/Topic(href, href_list)
|
/obj/machinery/computer/telescience/Topic(href, href_list)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
if(href_list["setx"])
|
if(href_list["setrotation"])
|
||||||
var/a = input("Please input desired X coordinate.", name, x_co) as num
|
var/new_rot = input("Please input desired bearing in degrees.", name, rotation) as num
|
||||||
a = copytext(sanitize(a), 1, 20)
|
if(..()) // Check after we input a value, as they could've moved after they entered something
|
||||||
x_co = a
|
return
|
||||||
x_co = text2num(x_co)
|
rotation = Clamp(new_rot, -900, 900)
|
||||||
return
|
rotation = round(rotation, 0.01)
|
||||||
if(href_list["sety"])
|
|
||||||
var/b = input("Please input desired Y coordinate.", name, y_co) as num
|
if(href_list["setangle"])
|
||||||
b = copytext(sanitize(b), 1, 20)
|
var/new_angle = input("Please input desired elevation in degrees.", name, angle) as num
|
||||||
y_co = b
|
if(..())
|
||||||
y_co = text2num(y_co)
|
return
|
||||||
return
|
angle = Clamp(round(new_angle, 0.1), 1, 9999)
|
||||||
|
|
||||||
|
if(href_list["setpower"])
|
||||||
|
var/index = href_list["setpower"]
|
||||||
|
index = text2num(index)
|
||||||
|
if(index != null && power_options[index])
|
||||||
|
if(crystals.len >= index)
|
||||||
|
power = power_options[index]
|
||||||
|
|
||||||
if(href_list["setz"])
|
if(href_list["setz"])
|
||||||
var/c = input("Please input desired Z coordinate.", name, z_co) as num
|
var/new_z = input("Please input desired sector.", name, z_co) as num
|
||||||
c = copytext(sanitize(c), 1, 20)
|
if(..())
|
||||||
z_co = c
|
return
|
||||||
z_co = text2num(z_co)
|
z_co = Clamp(round(new_z), 1, 10)
|
||||||
return
|
|
||||||
if(href_list["send"])
|
if(href_list["send"])
|
||||||
telesend()
|
sending = 1
|
||||||
return
|
teleport(usr)
|
||||||
|
|
||||||
if(href_list["receive"])
|
if(href_list["receive"])
|
||||||
telereceive()
|
sending = 0
|
||||||
return
|
teleport(usr)
|
||||||
|
|
||||||
if(href_list["recal"])
|
if(href_list["recal"])
|
||||||
teles_left = rand(9,12)
|
recalibrate()
|
||||||
x_off = rand(-10,10)
|
sparks()
|
||||||
y_off = rand(-10,10)
|
temp_msg = "NOTICE:<BR>Calibration successful."
|
||||||
for(var/obj/machinery/telepad/E in machines)
|
|
||||||
var/L = get_turf(E)
|
if(href_list["eject"])
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
eject()
|
||||||
s.set_up(5, 1, L)
|
temp_msg = "NOTICE:<BR>Bluespace crystals ejected."
|
||||||
s.start()
|
|
||||||
usr << "\blue Calibration successful."
|
updateDialog()
|
||||||
return
|
|
||||||
|
/obj/machinery/computer/telescience/proc/recalibrate()
|
||||||
|
teles_left = rand(30, 40)
|
||||||
|
angle_off = rand(-25, 25)
|
||||||
|
power_off = rand(-4, 0)
|
||||||
|
rotation_off = rand(-10, 10)
|
||||||
3
config/.gitignore
vendored
Normal file
3
config/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#ignore everything here, except subdirectories.
|
||||||
|
*
|
||||||
|
!*/
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.1 KiB |
Reference in New Issue
Block a user