mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 12:37:26 +01:00
Merge remote-tracking branch 'upstream/master' into gc-ss-port
# Conflicts: # paradise.dme
This commit is contained in:
@@ -70,6 +70,7 @@
|
||||
#define INIT_ORDER_STICKY_BAN -10
|
||||
#define INIT_ORDER_LIGHTING -20
|
||||
#define INIT_ORDER_SHUTTLE -21
|
||||
#define INIT_ORDER_NIGHTSHIFT -22
|
||||
#define INIT_ORDER_SQUEAK -40
|
||||
#define INIT_ORDER_PATH -50
|
||||
#define INIT_ORDER_PERSISTENCE -100
|
||||
@@ -77,6 +78,7 @@
|
||||
// Subsystem fire priority, from lowest to highest priority
|
||||
// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child)
|
||||
|
||||
#define FIRE_PRIORITY_NIGHTSHIFT 10
|
||||
#define FIRE_PRIORITY_IDLE_NPC 10
|
||||
#define FIRE_PRIORITY_SERVER_MAINT 10
|
||||
#define FIRE_PRIORITY_RESEARCH 10
|
||||
|
||||
@@ -505,7 +505,7 @@ proc/checkhtml(var/t)
|
||||
text = replacetext(text, "\[row\]", "</td><tr>")
|
||||
text = replacetext(text, "\[cell\]", "<td>")
|
||||
text = replacetext(text, "\[logo\]", "<img src = ntlogo.png>")
|
||||
text = replacetext(text, "\[time\]", "[gameTimestamp()]") // TO DO
|
||||
text = replacetext(text, "\[time\]", "[station_time_timestamp()]") // TO DO
|
||||
if(P)
|
||||
text = "<font face=\"[deffont]\" color=[P ? P.colour : "black"]>[text]</font>"
|
||||
else
|
||||
|
||||
+19
-7
@@ -31,15 +31,27 @@
|
||||
return wtime + (time_offset + wusage) * world.tick_lag
|
||||
|
||||
//Returns the world time in english
|
||||
/proc/worldtime2text(time = world.time)
|
||||
time = (round_start_time ? (time - round_start_time) : (time - world.time))
|
||||
return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]"
|
||||
/proc/worldtime2text()
|
||||
return gameTimestamp("hh:mm:ss", world.time)
|
||||
|
||||
/proc/time_stamp()
|
||||
return time2text(world.timeofday, "hh:mm:ss")
|
||||
/proc/time_stamp(format = "hh:mm:ss", show_ds)
|
||||
var/time_string = time2text(world.timeofday, format)
|
||||
return show_ds ? "[time_string]:[world.timeofday % 10]" : time_string
|
||||
|
||||
/proc/gameTimestamp(format = "hh:mm:ss") // Get the game time in text
|
||||
return time2text(world.time - timezoneOffset + 432000, format)
|
||||
/proc/gameTimestamp(format = "hh:mm:ss", wtime=null)
|
||||
if(!wtime)
|
||||
wtime = world.time
|
||||
return time2text(wtime - GLOB.timezoneOffset, format)
|
||||
|
||||
/* This is used for displaying the "station time" equivelent of a world.time value
|
||||
Calling it with no args will give you the current time, but you can specify a world.time-based value as an argument
|
||||
- You can use this, for example, to do "This will expire at [station_time_at(world.time + 500)]" to display a "station time" expiration date
|
||||
which is much more useful for a player)*/
|
||||
/proc/station_time(time=world.time, display_only=FALSE)
|
||||
return ((((time - round_start_time)) + GLOB.gametime_offset) % 864000) - (display_only ? GLOB.timezoneOffset : 0)
|
||||
|
||||
/proc/station_time_timestamp(format = "hh:mm:ss", time=world.time)
|
||||
return time2text(station_time(time, TRUE), format)
|
||||
|
||||
/* Returns 1 if it is the selected month and day */
|
||||
proc/isDay(var/month, var/day)
|
||||
|
||||
@@ -72,8 +72,10 @@ var/score_dmgestkey = null
|
||||
|
||||
var/TAB = " "
|
||||
|
||||
var/timezoneOffset = 0 // The difference betwen midnight (of the host computer) and 0 world.ticks.
|
||||
GLOBAL_VAR_INIT(timezoneOffset, 0) // The difference betwen midnight (of the host computer) and 0 world.ticks.
|
||||
|
||||
// For FTP requests. (i.e. downloading runtime logs.)
|
||||
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
|
||||
var/fileaccess_timer = 0
|
||||
var/fileaccess_timer = 0
|
||||
|
||||
GLOBAL_VAR_INIT(gametime_offset, 432000) // 12:00 in seconds
|
||||
@@ -13,6 +13,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
var/emergencyCallTime = 6000 //time taken for emergency shuttle to reach the station when called (in deciseconds)
|
||||
var/emergencyDockTime = 1800 //time taken for emergency shuttle to leave again once it has docked (in deciseconds)
|
||||
var/emergencyEscapeTime = 1200 //time taken for emergency shuttle to reach a safe distance after leaving station (in deciseconds)
|
||||
var/emergency_sec_level_time = 0 // time sec level was last raised to red or higher
|
||||
var/area/emergencyLastCallLoc
|
||||
var/emergencyNoEscape
|
||||
|
||||
@@ -134,7 +135,11 @@ DECLARE_GLOBAL_CONTROLLER(shuttle, shuttle_master)
|
||||
var/area/signal_origin = get_area(user)
|
||||
var/emergency_reason = "\nNature of emergency:\n\n[call_reason]"
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes.
|
||||
emergency.request(null, 0.5, signal_origin, html_decode(emergency_reason), 1)
|
||||
var/extra_minutes = 0
|
||||
var/priority_time = emergencyCallTime * 0.5
|
||||
if(world.time - emergency_sec_level_time < priority_time)
|
||||
extra_minutes = 5
|
||||
emergency.request(null, 0.5 + extra_minutes / (emergencyCallTime / 600), signal_origin, html_decode(emergency_reason), 1)
|
||||
else
|
||||
emergency.request(null, 1, signal_origin, html_decode(emergency_reason), 0)
|
||||
|
||||
|
||||
@@ -199,6 +199,10 @@
|
||||
var/high_pop_mc_mode_amount = 65
|
||||
var/disable_high_pop_mc_mode_amount = 60
|
||||
|
||||
// Nightshift
|
||||
var/randomize_shift_time = FALSE
|
||||
var/enable_night_shifts = FALSE
|
||||
|
||||
/datum/configuration/New()
|
||||
for(var/T in subtypesof(/datum/game_mode))
|
||||
var/datum/game_mode/M = T
|
||||
@@ -601,19 +605,18 @@
|
||||
shutdown_shell_command = value
|
||||
|
||||
if("disable_karma")
|
||||
disable_karma = 1
|
||||
config.disable_karma = 1
|
||||
|
||||
if("tick_limit_mc_init")
|
||||
tick_limit_mc_init = text2num(value)
|
||||
config.tick_limit_mc_init = text2num(value)
|
||||
if("base_mc_tick_rate")
|
||||
base_mc_tick_rate = text2num(value)
|
||||
config.base_mc_tick_rate = text2num(value)
|
||||
if("high_pop_mc_tick_rate")
|
||||
high_pop_mc_tick_rate = text2num(value)
|
||||
config.high_pop_mc_tick_rate = text2num(value)
|
||||
if("high_pop_mc_mode_amount")
|
||||
high_pop_mc_mode_amount = text2num(value)
|
||||
config.high_pop_mc_mode_amount = text2num(value)
|
||||
if("disable_high_pop_mc_mode_amount")
|
||||
disable_high_pop_mc_mode_amount = text2num(value)
|
||||
|
||||
config.disable_high_pop_mc_mode_amount = text2num(value)
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
@@ -676,6 +679,10 @@
|
||||
MAX_EX_FLAME_RANGE = BombCap
|
||||
if("default_laws")
|
||||
config.default_laws = text2num(value)
|
||||
if("randomize_shift_time")
|
||||
config.randomize_shift_time = TRUE
|
||||
if("enable_night_shifts")
|
||||
config.enable_night_shifts = TRUE
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
SUBSYSTEM_DEF(nightshift)
|
||||
name = "Night Shift"
|
||||
init_order = INIT_ORDER_NIGHTSHIFT
|
||||
priority = FIRE_PRIORITY_NIGHTSHIFT
|
||||
wait = 600
|
||||
flags = SS_NO_TICK_CHECK
|
||||
|
||||
var/nightshift_active = FALSE
|
||||
var/nightshift_start_time = 702000 //7:30 PM, station time
|
||||
var/nightshift_end_time = 270000 //7:30 AM, station time
|
||||
var/nightshift_first_check = 30 SECONDS
|
||||
|
||||
var/high_security_mode = FALSE
|
||||
|
||||
/datum/controller/subsystem/nightshift/Initialize()
|
||||
if(!config.enable_night_shifts)
|
||||
can_fire = FALSE
|
||||
if(config.randomize_shift_time)
|
||||
GLOB.gametime_offset = rand(0, 23) HOURS
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/nightshift/fire(resumed = FALSE)
|
||||
if(world.time - round_start_time < nightshift_first_check)
|
||||
return
|
||||
check_nightshift()
|
||||
|
||||
/datum/controller/subsystem/nightshift/proc/announce(message)
|
||||
priority_announcement.Announce(message, new_sound = 'sound/misc/notice2.ogg', new_title = "Automated Lighting System Announcement")
|
||||
|
||||
/datum/controller/subsystem/nightshift/proc/check_nightshift()
|
||||
var/emergency = security_level >= SEC_LEVEL_RED
|
||||
var/announcing = TRUE
|
||||
var/time = station_time()
|
||||
var/night_time = (time < nightshift_end_time) || (time > nightshift_start_time)
|
||||
if(high_security_mode != emergency)
|
||||
high_security_mode = emergency
|
||||
if(night_time)
|
||||
announcing = FALSE
|
||||
if(!emergency)
|
||||
announce("Restoring night lighting configuration to normal operation.")
|
||||
else
|
||||
announce("Disabling night lighting: Station is in a state of emergency.")
|
||||
if(emergency)
|
||||
night_time = FALSE
|
||||
if(nightshift_active != night_time)
|
||||
update_nightshift(night_time, announcing)
|
||||
|
||||
/datum/controller/subsystem/nightshift/proc/update_nightshift(active, announce = TRUE)
|
||||
nightshift_active = active
|
||||
if(announce)
|
||||
if(active)
|
||||
announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.")
|
||||
else
|
||||
announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.")
|
||||
for(var/A in apcs)
|
||||
var/obj/machinery/power/apc/APC = A
|
||||
if(is_station_level(APC.z))
|
||||
APC.set_nightshift(active)
|
||||
CHECK_TICK
|
||||
@@ -0,0 +1,95 @@
|
||||
/datum/disease/kingstons
|
||||
name = "Kingstons Syndrome"
|
||||
max_stages = 4
|
||||
spread_text = "Airborne"
|
||||
cure_text = "Milk"
|
||||
cures = list("milk")
|
||||
cure_chance = 50
|
||||
agent = "Nya Virus"
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
permeability_mod = 0.75
|
||||
desc = "If left untreated the subject will turn into a feline. In felines it has... OTHER... effects."
|
||||
severity = DANGEROUS
|
||||
|
||||
/datum/disease/kingstons/stage_act()
|
||||
..()
|
||||
switch(stage)
|
||||
if(1)
|
||||
if(prob(10))
|
||||
if(affected_mob.get_species() == "Tajaran")
|
||||
to_chat(affected_mob, "<span class='notice'>You feel good.</span>")
|
||||
else
|
||||
to_chat(affected_mob, "<span class='notice'>You feel like playing with string.</span>")
|
||||
if(2)
|
||||
if(prob(10))
|
||||
if(affected_mob.get_species() == "Tajaran")
|
||||
to_chat(affected_mob, "<span class='danger'>Something in your throat itches.</span>")
|
||||
else
|
||||
to_chat(affected_mob, "<span class='danger'>You NEED to find a mouse.</span>")
|
||||
if(3)
|
||||
if(prob(10))
|
||||
if(affected_mob.get_species() == "Tajaran")
|
||||
to_chat(affected_mob, "<span class='danger'>You feel something in your throat!</span>")
|
||||
affected_mob.emote("cough")
|
||||
else
|
||||
affected_mob.say(pick(list("Mew", "Meow!", "Nya!~")))
|
||||
if(4)
|
||||
if(prob(5))
|
||||
if(affected_mob.get_species() == "Tajaran")
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a hairball!</span>", \
|
||||
"<span class='userdanger'>You cough up a hairball!</span>")
|
||||
affected_mob.Stun(5)
|
||||
else
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob]'s form contorts into something more feline!</span>", \
|
||||
"<span class='userdanger'>YOU TURN INTO A TAJARAN!</span>")
|
||||
var/mob/living/carbon/human/catface = affected_mob
|
||||
catface.set_species("Tajaran")
|
||||
|
||||
|
||||
/datum/disease/kingstons/advanced
|
||||
name = "Advanced Kingstons Syndrome"
|
||||
spread_text = "Airborne"
|
||||
cure_text = "Plasma"
|
||||
cures = list("plasma")
|
||||
cure_chance = 50
|
||||
agent = "AMB45DR Bacteria"
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
permeability_mod = 0.75
|
||||
desc = "If left untreated the subject will mutate to a different species."
|
||||
severity = BIOHAZARD
|
||||
var/list/virspecies = list("Human", "Tajaran", "Unathi", "Skrell", "Vulpkanin")//no karma races sorrys.
|
||||
var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay")
|
||||
var/chosentype
|
||||
var/chosensuff
|
||||
|
||||
/datum/disease/kingstons/advanced/New()
|
||||
chosentype = pick(virspecies)
|
||||
chosensuff = pick(virsuffix)
|
||||
|
||||
name = "[chosentype] [chosensuff]"
|
||||
|
||||
/datum/disease/kingstons/advanced/stage_act()
|
||||
..()
|
||||
switch(stage)
|
||||
if(1)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='notice'>You feel awkward.</span>")
|
||||
if(2)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>You itch.</span>")
|
||||
if(3)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>Your skin starts to flake!</span>")
|
||||
|
||||
if(4)
|
||||
if(prob(5))
|
||||
if(affected_mob.get_species() != chosentype)
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob]'s skin splits and form contorts!</span>", \
|
||||
"<span class='userdanger'>Your body mutates into a [chosentype]!</span>")
|
||||
var/mob/living/carbon/human/twisted = affected_mob
|
||||
twisted.set_species(chosentype)
|
||||
else
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] scratches at thier skin!</span>", \
|
||||
"<span class='userdanger'>You scratch your skin to try not to itch!</span>")
|
||||
affected_mob.adjustBruteLoss(-5)
|
||||
affected_mob.adjustStaminaLoss(5)
|
||||
@@ -0,0 +1,45 @@
|
||||
/datum/disease/lycan
|
||||
name = "Lycancoughy"
|
||||
form = "Infection"
|
||||
max_stages = 4
|
||||
spread_text = "On contact"
|
||||
spread_flags = CONTACT_GENERAL
|
||||
cure_text = "Ethanol"
|
||||
cures = list("ethanol")
|
||||
agent = "Excess Snuggles"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
|
||||
desc = "If left untreated subject will regurgitate... puppies."
|
||||
severity = MEDIUM
|
||||
|
||||
/datum/disease/lycan/stage_act()
|
||||
..()
|
||||
switch(stage)
|
||||
if(2) //also changes say, see say.dm
|
||||
if(prob(5))
|
||||
to_chat(affected_mob, "<span class='notice'>You itch.</span>")
|
||||
affected_mob.emote("cough")
|
||||
if(3)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='notice'>You hear faint barking.</span>")
|
||||
if(prob(5))
|
||||
to_chat(affected_mob, "<span class='notice'>You crave meat.</span>")
|
||||
affected_mob.emote("cough")
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='danger'>Your stomach growls!</span>")
|
||||
if(4)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>Your stomach barks?!</span>")
|
||||
if(prob(5))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] howls!</span>", \
|
||||
"<span class='userdanger'>You howl!</span>")
|
||||
affected_mob.AdjustConfused(rand(6, 8))
|
||||
if(prob(3))
|
||||
var/list/puppytype = list(/mob/living/simple_animal/pet/corgi/puppy, /mob/living/simple_animal/pet/pug, /mob/living/simple_animal/pet/fox)
|
||||
var/mob/living/puppypicked = pick(puppytype)
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up [initial(puppypicked.name)]!</span>", \
|
||||
"<span class='userdanger'>You cough up [initial(puppypicked.name)]?!</span>")
|
||||
affected_mob.emote("cough")
|
||||
affected_mob.adjustBruteLoss(5)
|
||||
new puppypicked(affected_mob.loc)
|
||||
new puppypicked(affected_mob.loc)
|
||||
return
|
||||
@@ -26,3 +26,38 @@
|
||||
if(4)
|
||||
if(prob(5))
|
||||
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
|
||||
|
||||
|
||||
/datum/disease/pierrot_throat/advanced
|
||||
name = "Advanced Pierrot's Throat"
|
||||
spread_text = "Airborne"
|
||||
cure_text = "Banana products, especially banana bread."
|
||||
cures = list("banana")
|
||||
cure_chance = 75
|
||||
agent = "H0NI<42.B4n4 Virus"
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
permeability_mod = 0.75
|
||||
desc = "If left untreated the subject will probably drive others to insanity and go insane themselves."
|
||||
severity = DANGEROUS
|
||||
|
||||
/datum/disease/pierrot_throat/advanced/stage_act()
|
||||
..()
|
||||
switch(stage)
|
||||
if(1)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel very silly.</span>")
|
||||
if(prob(5))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel like making a joke.</span>")
|
||||
if(2)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>You don't just start seeing rainbows... YOU ARE RAINBOWS!</span>")
|
||||
if(3)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
|
||||
affected_mob << 'sound/items/AirHorn.ogg'
|
||||
if(4)
|
||||
if(prob(5))
|
||||
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
|
||||
|
||||
if(!istype(affected_mob.wear_mask, /obj/item/clothing/mask/gas/virusclown_hat))
|
||||
affected_mob.equip_to_slot(new /obj/item/clothing/mask/gas/virusclown_hat(src), slot_wear_mask)
|
||||
@@ -388,6 +388,15 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
containertype = /obj/structure/closet/crate/secure/plasma
|
||||
containername = "energy gun crate"
|
||||
|
||||
/datum/supply_packs/security/armory/epistol // costs 3/5ths of the normal e-guns for 3/4ths the total ammo, making it cheaper to arm more people, but less convient for any one person
|
||||
name = "Energy Pistol Crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/gun/mini,
|
||||
/obj/item/weapon/gun/energy/gun/mini,
|
||||
/obj/item/weapon/gun/energy/gun/mini)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure/plasma
|
||||
containername = "energy gun crate"
|
||||
|
||||
/datum/supply_packs/security/armory/eweapons
|
||||
name = "Incendiary Weapons Crate"
|
||||
contains = list(/obj/item/weapon/flamethrower/full,
|
||||
|
||||
@@ -53,15 +53,15 @@
|
||||
return cameras
|
||||
|
||||
|
||||
/area/proc/atmosalert(danger_level, var/alarm_source)
|
||||
/area/proc/atmosalert(danger_level, var/alarm_source, var/force = FALSE)
|
||||
if(danger_level == ATMOS_ALARM_NONE)
|
||||
atmosphere_alarm.clearAlarm(src, alarm_source)
|
||||
else
|
||||
atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
|
||||
|
||||
//Check all the alarms before lowering atmosalm. Raising is perfectly fine.
|
||||
//Check all the alarms before lowering atmosalm. Raising is perfectly fine. If force = 1 we don't care.
|
||||
for(var/obj/machinery/alarm/AA in src)
|
||||
if(!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level)
|
||||
if(!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level && !force)
|
||||
danger_level = max(danger_level, AA.danger_level)
|
||||
|
||||
if(danger_level != atmosalm)
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
T.purpose = "Payment"
|
||||
T.amount = pay
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
|
||||
M.mind.initial_account.transaction_log.Add(T)
|
||||
msg += "You have been sent the $[pay], as agreed."
|
||||
@@ -280,10 +280,11 @@
|
||||
|
||||
// Get a list of all the people who want to be the antagonist for this round, except those with incompatible species
|
||||
for(var/mob/new_player/player in players)
|
||||
if((role in player.client.prefs.be_special) && !(player.client.prefs.species in protected_species))
|
||||
player_draft_log += "[player.key] had [roletext] enabled, so we are drafting them."
|
||||
candidates += player.mind
|
||||
players -= player
|
||||
if(!player.skip_antag)
|
||||
if((role in player.client.prefs.be_special) && !(player.client.prefs.species in protected_species))
|
||||
player_draft_log += "[player.key] had [roletext] enabled, so we are drafting them."
|
||||
candidates += player.mind
|
||||
players -= player
|
||||
|
||||
// If we don't have enough antags, draft people who voted for the round.
|
||||
if(candidates.len < recommended_enemies)
|
||||
|
||||
@@ -37,7 +37,8 @@ var/round_start_time = 0
|
||||
|
||||
var/obj/screen/cinematic = null //used for station explosion cinematic
|
||||
|
||||
var/round_end_announced = 0 // Spam Prevention. Announce round end only once.
|
||||
var/round_end_announced = 0 // Spam Prevention. Announce round end only once.\
|
||||
|
||||
|
||||
/datum/controller/gameticker/proc/pregame()
|
||||
login_music = pick(\
|
||||
|
||||
@@ -474,7 +474,7 @@
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
||||
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
|
||||
P.info = "<CENTER><B>Body Scan - [href_list["name"]]</B></CENTER><BR>"
|
||||
P.info += "<b>Time of scan:</b> [worldtime2text(world.time)]<br><br>"
|
||||
P.info += "<b>Time of scan:</b> [station_time_timestamp()]<br><br>"
|
||||
P.info += "[printing_text]"
|
||||
P.info += "<br><br><b>Notes:</b><br>"
|
||||
P.name = "Body Scan - [href_list["name"]]"
|
||||
|
||||
@@ -922,7 +922,7 @@
|
||||
return 1
|
||||
|
||||
if(href_list["atmos_reset"])
|
||||
if(alarm_area.atmosalert(ATMOS_ALARM_NONE, src))
|
||||
if(alarm_area.atmosalert(ATMOS_ALARM_NONE, src, TRUE))
|
||||
apply_danger_level(ATMOS_ALARM_NONE)
|
||||
alarmActivated = 0
|
||||
update_icon()
|
||||
|
||||
@@ -429,7 +429,7 @@ var/time_last_changed_position = 0
|
||||
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
if(mode == 2)
|
||||
P.name = text("crew manifest ([])", worldtime2text())
|
||||
P.name = "crew manifest ([station_time_timestamp()])"
|
||||
P.info = {"<h4>Crew Manifest</h4>
|
||||
<br>
|
||||
[data_core ? data_core.get_manifest(0) : ""]
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
SSnanoui.update_uis(src)
|
||||
return
|
||||
Centcomm_announce(input, usr)
|
||||
print_centcom_report(input, worldtime2text() +" Captain's Message")
|
||||
print_centcom_report(input, station_time_timestamp() + " Captain's Message")
|
||||
to_chat(usr, "Message transmitted.")
|
||||
log_say("[key_name(usr)] has made a Centcomm announcement: [input]")
|
||||
centcomm_message_cooldown = 1
|
||||
|
||||
@@ -453,7 +453,7 @@
|
||||
var/t1 = copytext(trim(sanitize(input("Add Comment:", "Med. records", null, null) as message)), 1, MAX_MESSAGE_LEN)
|
||||
if(!t1 || ..() || active2 != a2)
|
||||
return 1
|
||||
active2.fields["comments"] += "Made by [authenticated] ([rank]) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
active2.fields["comments"] += "Made by [authenticated] ([rank]) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
|
||||
if(href_list["del_c"])
|
||||
var/index = min(max(text2num(href_list["del_c"]) + 1, 1), length(active2.fields["comments"]))
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
active2.fields["criminal"] = "Released"
|
||||
var/newstatus = active2.fields["criminal"]
|
||||
log_admin("[key_name_admin(usr)] set secstatus of [their_rank] [their_name] to [newstatus], comment: [t1]")
|
||||
active2.fields["comments"] += "Set to [newstatus] by [usr.name] ([rank]) on [current_date_string] [worldtime2text()], comment: [t1]"
|
||||
active2.fields["comments"] += "Set to [newstatus] by [usr.name] ([rank]) on [current_date_string] [station_time_timestamp()], comment: [t1]"
|
||||
update_all_mob_security_hud()
|
||||
if("rank")
|
||||
if(active1)
|
||||
@@ -404,7 +404,7 @@
|
||||
var/t1 = copytext(trim(sanitize(input("Add Comment:", "Secure. records", null, null) as message)), 1, MAX_MESSAGE_LEN)
|
||||
if(!t1 || ..() || active2 != a2)
|
||||
return 1
|
||||
active2.fields["comments"] += "Made by [authenticated] ([rank]) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
active2.fields["comments"] += "Made by [authenticated] ([rank]) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
|
||||
else if(href_list["del_c"])
|
||||
var/index = min(max(text2num(href_list["del_c"]) + 1, 1), length(active2.fields["comments"]))
|
||||
|
||||
@@ -137,7 +137,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
|
||||
var/list/transferlog = list()
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/proc/logTransfer(var/logmessage)
|
||||
transferlog += ("<b>[worldtime2text()]</b> [logmessage]")
|
||||
transferlog += ("<b>[station_time_timestamp()]</b> [logmessage]")
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/proc/scanUplinkers()
|
||||
for(var/obj/machinery/computer/telecrystals/uplinker/A in range(scanrange, src.loc))
|
||||
|
||||
@@ -40,11 +40,11 @@
|
||||
|
||||
for(var/obj/machinery/computer/prisoner/C in prisoncomputer_list)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc)
|
||||
P.name = "[id] log - [logname] [worldtime2text()]"
|
||||
P.name = "[id] log - [logname] [station_time_timestamp()]"
|
||||
P.info = "<center><b>[id] - Brig record</b></center><br><hr><br>"
|
||||
P.info += {"<center>[station_name()] - Security Department</center><br>
|
||||
<center><small><b>Admission data:</b></small></center><br>
|
||||
<small><b>Log generated at:</b> [worldtime2text()]<br>
|
||||
<small><b>Log generated at:</b> [station_time_timestamp()]<br>
|
||||
<b>Detainee:</b> [logname]<br>
|
||||
<b>Duration:</b> [seconds_to_time(timetoset / 10)]<br>
|
||||
<b>Charge(s):</b> [logcharges]<br>
|
||||
@@ -68,7 +68,7 @@
|
||||
rank = I.assignment
|
||||
if(!R.fields["comments"] || !islist(R.fields["comments"])) //copied from security computer code because apparently these need to be initialized
|
||||
R.fields["comments"] = list()
|
||||
R.fields["comments"] += "Autogenerated by [name] on [current_date_string] [worldtime2text()]<BR>Sentenced to [timetoset/10] seconds for the charges of \"[logcharges]\" by [rank] [usr.name]."
|
||||
R.fields["comments"] += "Autogenerated by [name] on [current_date_string] [station_time_timestamp()]<BR>Sentenced to [timetoset/10] seconds for the charges of \"[logcharges]\" by [rank] [usr.name]."
|
||||
update_all_mob_security_hud()
|
||||
|
||||
return 1
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
/obj/item/weapon/card/id/guest/examine(mob/user)
|
||||
..(user)
|
||||
if(world.time < expiration_time)
|
||||
to_chat(user, "<span class='notice'>This pass expires at [worldtime2text(expiration_time)].</span>")
|
||||
to_chat(user, "<span class='notice'>This pass expires at [station_time_timestamp("hh:mm:ss", expiration_time)].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It expired at [worldtime2text(expiration_time)].</span>")
|
||||
to_chat(user, "<span class='warning'>It expired at [station_time_timestamp("hh:mm:ss", expiration_time)].</span>")
|
||||
to_chat(user, "<span class='notice'>It grants access to following areas:</span>")
|
||||
for(var/A in temp_access)
|
||||
to_chat(user, "<span class='notice'>[get_access_desc(A)].</span>")
|
||||
@@ -166,13 +166,13 @@
|
||||
if("issue")
|
||||
if(giver)
|
||||
var/number = add_zero("[rand(0,9999)]", 4)
|
||||
var/entry = "\[[worldtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
||||
var/entry = "\[[station_time()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
||||
for(var/i=1 to accesses.len)
|
||||
var/A = accesses[i]
|
||||
if(A)
|
||||
var/area = get_access_desc(A)
|
||||
entry += "[i > 1 ? ", [area]" : "[area]"]"
|
||||
entry += ". Expires at [worldtime2text(world.time + duration*10*60)]."
|
||||
entry += ". Expires at [station_time(world.time + duration*10*60)]."
|
||||
internal_log.Add(entry)
|
||||
|
||||
var/obj/item/weapon/card/id/guest/pass = new(src.loc)
|
||||
|
||||
@@ -100,7 +100,10 @@
|
||||
if(drownee.losebreath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control.
|
||||
return
|
||||
|
||||
add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
|
||||
if(isLivingSSD(drownee))
|
||||
add_logs(src, drownee, "drowned", null, null, 0, 1) // Notify admins, since the person is SSD
|
||||
else
|
||||
add_logs(src, drownee, "drowned", null, null, 0, 0) // Do not notify admins.
|
||||
if(drownee.stat) //Mob is in critical.
|
||||
drownee.AdjustLoseBreath(3, bound_lower = 0, bound_upper = 20)
|
||||
drownee.visible_message("<span class='danger'>\The [drownee] appears to be drowning!</span>","<span class='userdanger'>You're quickly drowning!</span>") //inform them that they are fucked.
|
||||
|
||||
@@ -221,7 +221,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
radiochannel = "AI Private"
|
||||
if(recipient == "Cargo Bay")
|
||||
radiochannel = "Supply"
|
||||
message_log += "<B>Message sent to [recipient] at [worldtime2text()]</B><BR>[message]"
|
||||
message_log += "<B>Message sent to [recipient] at [station_time_timestamp()]</B><BR>[message]"
|
||||
Radio.autosay("Alert; a new requests console message received for [recipient] from [department]", null, "[radiochannel]")
|
||||
else
|
||||
audible_message(text("[bicon(src)] *The Requests Console beeps: '<b>NOTICE:</b> No server detected!'"),,4)
|
||||
|
||||
@@ -113,5 +113,5 @@
|
||||
T.purpose = "Slot Winnings"
|
||||
T.amount = "[amt]"
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
account.transaction_log.Add(T)
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
message2 = "Error!"
|
||||
else
|
||||
message1 = "TIME"
|
||||
message2 = worldtime2text()
|
||||
message2 = station_time_timestamp("hh:mm")
|
||||
update_display(message1, message2, use_warn)
|
||||
return 1
|
||||
if(STATUS_DISPLAY_MESSAGE) //custom messages
|
||||
@@ -126,7 +126,7 @@
|
||||
return 1
|
||||
if(STATUS_DISPLAY_TIME)
|
||||
message1 = "TIME"
|
||||
message2 = worldtime2text()
|
||||
message2 = station_time_timestamp("hh:mm")
|
||||
update_display(message1, message2)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
message2 = "Docked"
|
||||
else
|
||||
message1 = "TIME"
|
||||
message2 = worldtime2text()
|
||||
message2 = station_time_timestamp("hh:mm")
|
||||
else
|
||||
message1 = "CARGO"
|
||||
message2 = shuttle_master.supply.getTimerStr()
|
||||
|
||||
@@ -430,7 +430,7 @@
|
||||
T.amount = "[currently_vending.price]"
|
||||
T.source_terminal = src.name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
vendor_account.transaction_log.Add(T)
|
||||
|
||||
/obj/machinery/vending/attack_ai(mob/user)
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
var/scan_data = ""
|
||||
|
||||
if(timeofdeath)
|
||||
scan_data += "<b>Time of death:</b> [worldtime2text(timeofdeath)]<br><br>"
|
||||
scan_data += "<b>Time of death:</b> [station_time_timestamp("hh:mm:ss", timeofdeath)]<br><br>"
|
||||
|
||||
var/n = 1
|
||||
for(var/wdata_idx in wdata)
|
||||
@@ -146,7 +146,7 @@
|
||||
if(damaging_weapon)
|
||||
scan_data += "Severity: [damage_desc]<br>"
|
||||
scan_data += "Hits by weapon: [total_hits]<br>"
|
||||
scan_data += "Approximate time of wound infliction: [worldtime2text(age)]<br>"
|
||||
scan_data += "Approximate time of wound infliction: [station_time(age)]<br>"
|
||||
scan_data += "Affected limbs: [D.organ_names]<br>"
|
||||
scan_data += "Possible weapons:<br>"
|
||||
for(var/weapon_name in weapon_chances)
|
||||
|
||||
@@ -160,7 +160,7 @@ REAGENT SCANNER
|
||||
user.show_message("\t Damage Specifics: <font color='blue'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font>")
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
user.show_message("<span class='notice'>Time of Death: [worldtime2text(M.timeofdeath)]</span>")
|
||||
user.show_message("<span class='notice'>Time of Death: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]</span>")
|
||||
if(istype(M, /mob/living/carbon/human) && mode == 1)
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
@@ -432,7 +432,7 @@ REAGENT SCANNER
|
||||
sleep(50)
|
||||
|
||||
var/obj/item/weapon/paper/P = new(get_turf(src))
|
||||
P.name = "Mass Spectrometer Scanner Report: [worldtime2text()]"
|
||||
P.name = "Mass Spectrometer Scanner Report: [station_time_timestamp()]"
|
||||
P.info = "<center><b>Mass Spectrometer</b></center><br><center>Data Analysis:</center><br><hr><br><b>Trace chemicals detected:</b><br>[datatoprint]<br><hr>"
|
||||
|
||||
if(ismob(loc))
|
||||
@@ -502,7 +502,7 @@ REAGENT SCANNER
|
||||
sleep(50)
|
||||
|
||||
var/obj/item/weapon/paper/P = new(get_turf(src))
|
||||
P.name = "Reagent Scanner Report: [worldtime2text()]"
|
||||
P.name = "Reagent Scanner Report: [station_time_timestamp()]"
|
||||
P.info = "<center><b>Reagent Scanner</b></center><br><center>Data Analysis:</center><br><hr><br><b>Chemical agents detected:</b><br> [datatoprint]<br><hr>"
|
||||
|
||||
if(ismob(loc))
|
||||
|
||||
@@ -187,16 +187,16 @@ RCD
|
||||
if(!proximity) return
|
||||
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
|
||||
return 0
|
||||
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window)))
|
||||
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window) || istype(A, /obj/structure/lattice)))
|
||||
return 0
|
||||
|
||||
switch(mode)
|
||||
if(1)
|
||||
if(istype(A, /turf/space))
|
||||
if(istype(A, /turf/space) || istype(A, /obj/structure/lattice))
|
||||
if(useResource(1, user))
|
||||
to_chat(user, "Building Floor...")
|
||||
activate()
|
||||
var/turf/AT = A
|
||||
var/turf/AT = get_turf(A)
|
||||
AT.ChangeTurf(/turf/simulated/floor/plating)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -123,9 +123,9 @@
|
||||
if(guest_pass)
|
||||
to_chat(user, "<span class='notice'>There is a guest pass attached to this ID card</span>")
|
||||
if(world.time < guest_pass.expiration_time)
|
||||
to_chat(user, "<span class='notice'>It expires at [worldtime2text(guest_pass.expiration_time)].</span>")
|
||||
to_chat(user, "<span class='notice'>It expires at [station_time_timestamp("hh:mm:ss", guest_pass.expiration_time)].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It expired at [worldtime2text(guest_pass.expiration_time)].</span>")
|
||||
to_chat(user, "<span class='warning'>It expired at [station_time_timestamp("hh:mm:ss", guest_pass.expiration_time)].</span>")
|
||||
to_chat(user, "<span class='notice'>It grants access to following areas:</span>")
|
||||
for(var/A in guest_pass.temp_access)
|
||||
to_chat(user, "<span class='notice'>[get_access_desc(A)].</span>")
|
||||
|
||||
@@ -111,23 +111,23 @@
|
||||
payload_name = "lubricant"
|
||||
stage = 2
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
B1.reagents.add_reagent("lube",50)
|
||||
beakers += B1
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/remote
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/prox
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/tripwire
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra)
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
B1.reagents.add_reagent("lube",50)
|
||||
beakers += B1
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/remote/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/prox/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/lube/tripwire/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra)
|
||||
|
||||
|
||||
// Basic explosion grenade
|
||||
@@ -135,32 +135,68 @@
|
||||
payload_name = "conventional"
|
||||
stage = 2
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
B1.reagents.add_reagent("glycerol",30) // todo: someone says NG is overpowered, test.
|
||||
B1.reagents.add_reagent("sacid",15)
|
||||
B2.reagents.add_reagent("sacid",15)
|
||||
B2.reagents.add_reagent("facid",30)
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
B1.reagents.add_reagent("glycerol",30) // todo: someone says NG is overpowered, test.
|
||||
B1.reagents.add_reagent("sacid",15)
|
||||
B2.reagents.add_reagent("sacid",15)
|
||||
B2.reagents.add_reagent("facid",30)
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
|
||||
// Assembly Variants
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/remote
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/remote/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/prox/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/mine/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
|
||||
|
||||
|
||||
// Water + Potassium = Boom
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium
|
||||
payload_name = "chem explosive"
|
||||
stage = 2
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium/New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
|
||||
B1.reagents.add_reagent("water",100)
|
||||
B2.reagents.add_reagent("potassium",100)
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium/remote/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium/prox/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium/tripwire/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium/tripwire_armed/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra/armed)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/waterpotassium/tripwire_armed_stealth/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/infra/armed/stealth)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/prox
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/explosion/mine
|
||||
New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
|
||||
|
||||
// Basic EMP grenade
|
||||
/obj/item/weapon/grenade/chem_grenade/emp
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
new /obj/item/weapon/storage/box/ids(src)
|
||||
new /obj/item/weapon/storage/box/PDAs(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/energy/gun/mini(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/accessory/petcollar(src)
|
||||
new /obj/item/weapon/door_remote/civillian(src)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
hub = "Exadv1.spacestation13"
|
||||
hub_password = "kMZy3U5jJHSiBQjr"
|
||||
name = "Space Station 13"
|
||||
/var/hub_password_base = "kMZy3U5jJHSiBQjr"
|
||||
/* This is for any host that would like their server to appear on the main SS13 hub.
|
||||
To use it, simply replace the password above, with the password found below, and it should work.
|
||||
If not, let us know on the main tgstation IRC channel of irc.rizon.net #tgstation13 we can help you there.
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<A href='?src=[UID()];secretsadmin=showgm'>Show Game Mode</A>
|
||||
<A href='?src=[UID()];secretsadmin=manifest'>Show Crew Manifest</A><br>
|
||||
<A href='?src=[UID()];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
|
||||
<a href='?src=[UID()];secretsadmin=night_shift_set'>Set Night Shift Mode</a><br>
|
||||
<B>Bombs</b><br>
|
||||
<A href='?src=[UID()];secretsadmin=list_bombers'>Bombing List</A>
|
||||
<A href='?src=[UID()];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A>
|
||||
|
||||
@@ -3023,6 +3023,24 @@
|
||||
dat += "<tr><td>[H]</td><td>H.dna = null</td></tr>"
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=fingerprints;size=440x410")
|
||||
if("night_shift_set")
|
||||
var/val = alert(usr, "What do you want to set night shift to? This will override the automatic system until set to automatic again.", "Night Shift", "On", "Off", "Automatic")
|
||||
switch(val)
|
||||
if("Automatic")
|
||||
if(config.enable_night_shifts)
|
||||
SSnightshift.can_fire = TRUE
|
||||
SSnightshift.fire()
|
||||
else
|
||||
SSnightshift.update_nightshift(FALSE, TRUE)
|
||||
to_chat(usr, "<span class='notice'>Night shift set to automatic.</span>")
|
||||
if("On")
|
||||
SSnightshift.can_fire = FALSE
|
||||
SSnightshift.update_nightshift(TRUE, FALSE)
|
||||
to_chat(usr, "<span class='notice'>Night shift forced on.</span>")
|
||||
if("Off")
|
||||
SSnightshift.can_fire = FALSE
|
||||
SSnightshift.update_nightshift(FALSE, FALSE)
|
||||
to_chat(usr, "<span class='notice'>Night shift forced off.</span>")
|
||||
else
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] used secret [href_list["secretsadmin"]]")
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
T.amount = "[token_price]"
|
||||
T.source_terminal = src.name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
customer_account.transaction_log.Add(T)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -7,12 +7,16 @@
|
||||
|
||||
bomb_name = "tripwire mine"
|
||||
|
||||
secured = 0 // toggle_secure()'ed in New() for correct adding to processing_objects, won't work otherwise
|
||||
dir = EAST
|
||||
var/on = 0
|
||||
var/visible = 0
|
||||
var/visible = 1
|
||||
var/obj/effect/beam/i_beam/first = null
|
||||
var/obj/effect/beam/i_beam/last = null
|
||||
var/max_nesting_level = 10
|
||||
var/turf/fire_location
|
||||
var/emission_cycles = 0
|
||||
var/emission_cap = 20
|
||||
|
||||
/obj/item/device/assembly/infra/Destroy()
|
||||
if(first)
|
||||
@@ -22,7 +26,11 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/infra/describe()
|
||||
return "The infrared trigger is [on?"on":"off"]."
|
||||
return "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]."
|
||||
|
||||
/obj/item/device/assembly/infra/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, describe())
|
||||
|
||||
/obj/item/device/assembly/infra/activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
@@ -36,11 +44,22 @@
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
on = 0
|
||||
if(first) qdel(first)
|
||||
if(first)
|
||||
qdel(first)
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
/obj/item/device/assembly/infra/New()
|
||||
..()
|
||||
if(!secured)
|
||||
toggle_secure()
|
||||
|
||||
/obj/item/device/assembly/infra/proc/arm() // Forces the device to arm no matter its current state.
|
||||
if(!secured) // Checked because arm() might be called sometime after the object is spawned.
|
||||
toggle_secure()
|
||||
on = 1
|
||||
|
||||
/obj/item/device/assembly/infra/update_icon()
|
||||
overlays.Cut()
|
||||
attached_overlays = list()
|
||||
@@ -51,38 +70,22 @@
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
|
||||
/obj/item/device/assembly/infra/proc/get_valid_loc(atom/A, atom/prev, level = 0)
|
||||
if(!A)
|
||||
A = loc
|
||||
if(!prev)
|
||||
prev = src
|
||||
if(level > max_nesting_level)
|
||||
return null
|
||||
else if(isturf(A))
|
||||
return A
|
||||
else if(isobj(A))
|
||||
var/obj/O = A
|
||||
if(isassembly(A) || O.IsAssemblyHolder() || istype(A, /obj/item/device/onetankbomb))
|
||||
return .(A.loc, A, level + 1)
|
||||
else if(ismob(A))
|
||||
var/mob/user = A
|
||||
if(user.get_active_hand() == prev || user.get_inactive_hand() == prev)
|
||||
return .(A.loc, A, level + 1)
|
||||
return null
|
||||
|
||||
/obj/item/device/assembly/infra/process()
|
||||
if(!on || fire_location != get_turf(loc))
|
||||
if(first)
|
||||
qdel(first)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
if(first && (!on || !fire_location || fire_location != T || emission_cycles >= emission_cap))
|
||||
qdel(first)
|
||||
return
|
||||
if(!on)
|
||||
return
|
||||
if(!secured)
|
||||
return
|
||||
if(first && last)
|
||||
last.process()
|
||||
emission_cycles++
|
||||
return
|
||||
var/turf/T = get_valid_loc()
|
||||
if(T)
|
||||
fire_location = T
|
||||
emission_cycles = 0
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
|
||||
I.master = src
|
||||
I.density = 1
|
||||
@@ -124,6 +127,8 @@
|
||||
return 0
|
||||
pulse(0)
|
||||
audible_message("[bicon(src)] *beep* *beep*", null, 3)
|
||||
if(first)
|
||||
qdel(first)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
@@ -177,6 +182,21 @@
|
||||
if(usr.machine == src)
|
||||
interact(usr)
|
||||
|
||||
if(first)
|
||||
qdel(first)
|
||||
|
||||
|
||||
|
||||
/obj/item/device/assembly/infra/armed/New()
|
||||
..()
|
||||
spawn(3)
|
||||
if(holder)
|
||||
if(holder.master)
|
||||
dir = holder.master.dir
|
||||
arm()
|
||||
|
||||
/obj/item/device/assembly/infra/armed/stealth
|
||||
visible = 0
|
||||
|
||||
|
||||
/***************************IBeam*********************************/
|
||||
@@ -191,6 +211,8 @@
|
||||
var/limit = null
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
var/life_cycles = 0
|
||||
var/life_cap = 20
|
||||
anchored = 1.0
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
|
||||
@@ -209,7 +231,8 @@
|
||||
transform = turn(matrix(), dir2angle(dir))
|
||||
|
||||
/obj/effect/beam/i_beam/process()
|
||||
if((loc.density || !(master)))
|
||||
life_cycles++
|
||||
if(loc.density || !master || life_cycles >= life_cap)
|
||||
qdel(src)
|
||||
return
|
||||
if(left > 0)
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
|
||||
icon_state = "clown"
|
||||
item_state = "clown_hat"
|
||||
flags = NODROP
|
||||
|
||||
/obj/item/clothing/mask/gas/sexyclown
|
||||
name = "sexy-clown wig and mask"
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
spawn(0)
|
||||
|
||||
var/found_something = 0
|
||||
add_log("<B>[worldtime2text()][get_timestamp()] - [target_name]</B>", 0)
|
||||
add_log("<B>[station_time_timestamp()][get_timestamp()] - [target_name]</B>", 0)
|
||||
|
||||
// Fingerprints
|
||||
if(fingerprints && fingerprints.len)
|
||||
|
||||
@@ -107,7 +107,7 @@ log transactions
|
||||
T.amount = C.amount
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
authenticated_account.transaction_log.Add(T)
|
||||
|
||||
to_chat(user, "<span class='info'>You insert [C] into [src].</span>")
|
||||
@@ -183,7 +183,7 @@ log transactions
|
||||
T.purpose = transfer_purpose
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.amount = "([transfer_amount])"
|
||||
authenticated_account.transaction_log.Add(T)
|
||||
else
|
||||
@@ -225,7 +225,7 @@ log transactions
|
||||
T.purpose = "Unauthorised login attempt"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
failed_account.transaction_log.Add(T)
|
||||
else
|
||||
to_chat(usr, "[bicon(src)]<span class='warning'>Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.</span>")
|
||||
@@ -245,7 +245,7 @@ log transactions
|
||||
T.purpose = "Remote terminal access"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
authenticated_account.transaction_log.Add(T)
|
||||
to_chat(usr, "[bicon(src)]<span class='notice'>Access granted. Welcome user '[authenticated_account.owner_name].'</span>")
|
||||
previous_account_number = tried_account_num
|
||||
@@ -271,7 +271,7 @@ log transactions
|
||||
T.amount = "([amount])"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
authenticated_account.transaction_log.Add(T)
|
||||
else
|
||||
to_chat(usr, "[bicon(src)]<span class='warning'>You don't have enough funds to do that!</span>")
|
||||
@@ -288,7 +288,7 @@ log transactions
|
||||
<i>Account holder:</i> [authenticated_account.owner_name]<br>
|
||||
<i>Account number:</i> [authenticated_account.account_number]<br>
|
||||
<i>Balance:</i> $[authenticated_account.money]<br>
|
||||
<i>Date and time:</i> [worldtime2text()], [current_date_string]<br><br>
|
||||
<i>Date and time:</i> [station_time_timestamp()], [current_date_string]<br><br>
|
||||
<i>Service terminal ID:</i> [machine_id]<br>"}
|
||||
|
||||
//stamp the paper
|
||||
@@ -345,7 +345,7 @@ log transactions
|
||||
T.purpose = "Remote terminal access"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
authenticated_account.transaction_log.Add(T)
|
||||
|
||||
view_screen = NO_SCREEN
|
||||
|
||||
@@ -54,8 +54,8 @@ var/global/list/all_money_accounts = list()
|
||||
|
||||
department_accounts[department] = department_account
|
||||
|
||||
//the current ingame time (hh:mm) can be obtained by calling:
|
||||
//worldtime2text()
|
||||
//the current ingame time (hh:mm:ss) can be obtained by calling:
|
||||
//station_time_timestamp("hh:mm:ss")
|
||||
|
||||
/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/obj/machinery/computer/account_database/source_db)
|
||||
|
||||
@@ -79,7 +79,7 @@ var/global/list/all_money_accounts = list()
|
||||
M.account_number = rand(111111, 999999)
|
||||
else
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.source_terminal = source_db.machine_id
|
||||
|
||||
M.account_number = next_account_number
|
||||
@@ -101,7 +101,7 @@ var/global/list/all_money_accounts = list()
|
||||
<i>Account number:</i> [M.account_number]<br>
|
||||
<i>Account pin:</i> [M.remote_access_pin]<br>
|
||||
<i>Starting balance:</i> $[M.money]<br>
|
||||
<i>Date and time:</i> [worldtime2text()], [current_date_string]<br><br>
|
||||
<i>Date and time:</i> [station_time_timestamp()], [current_date_string]<br><br>
|
||||
<i>Creation terminal ID:</i> [source_db.machine_id]<br>
|
||||
<i>Authorised NT officer overseeing creation:</i> [overseer]<br>"}
|
||||
// END AUTOFIX
|
||||
@@ -302,7 +302,7 @@ var/global/list/all_money_accounts = list()
|
||||
T.purpose = "New account funds initialisation"
|
||||
T.amount = "([starting_funds])"
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.source_terminal = machine_id
|
||||
station_account.transaction_log.Add(T)
|
||||
|
||||
@@ -354,7 +354,7 @@ var/global/list/all_money_accounts = list()
|
||||
else
|
||||
T.amount = "[amount]"
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.source_terminal = terminal_id
|
||||
D.transaction_log.Add(T)
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
T.purpose = reason
|
||||
T.amount = amount
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.source_terminal = machine_id
|
||||
return T
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
T.amount = "[transaction_amount]"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
D.transaction_log.Add(T)
|
||||
//
|
||||
T = new()
|
||||
@@ -212,7 +212,7 @@
|
||||
T.amount = "[transaction_amount]"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
linked_account.transaction_log.Add(T)
|
||||
else
|
||||
to_chat(user, "[bicon(src)]<span class='warning'>You don't have that much money!</span>")
|
||||
|
||||
@@ -173,7 +173,7 @@ var/const/POS_HEADER = {"<html>
|
||||
receipt += myArea.name
|
||||
receipt += "</div>"
|
||||
receipt += {"<br />
|
||||
<div>[worldtime2text()], [current_date_string]</div>
|
||||
<div>[station_time_timestamp()], [current_date_string]</div>
|
||||
<table>
|
||||
<tr class=\"first\">
|
||||
<th class=\"first\">Item</th>
|
||||
@@ -369,7 +369,7 @@ var/const/POS_HEADER = {"<html>
|
||||
logindata={"<a href="?src=[UID()];logout=1">[logged_in.name]</a>"}
|
||||
var/dat = POS_HEADER + {"
|
||||
<div class="navbar">
|
||||
[worldtime2text()], [current_date_string]<br />
|
||||
[station_time_timestamp()], [current_date_string]<br />
|
||||
[logindata]
|
||||
<a href="?src=[UID()];screen=[POS_SCREEN_ORDER]">Order</a> |
|
||||
<a href="?src=[UID()];screen=[POS_SCREEN_PRODUCTS]">Products</a> |
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
if(terminal_id)
|
||||
T.source_terminal = terminal_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
dest.transaction_log.Add(T)
|
||||
//
|
||||
T = new()
|
||||
@@ -84,7 +84,7 @@
|
||||
if(terminal_id)
|
||||
T.source_terminal = terminal_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
transaction_log.Add(T)
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
var/datum/event_meta/EM = E.event_meta
|
||||
EC.available_events += EM
|
||||
|
||||
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
|
||||
log_debug("Event '[EM.name]' has completed at [station_time_timestamp()].")
|
||||
|
||||
/datum/event_manager/proc/delay_events(var/severity, var/delay)
|
||||
var/list/datum/event_container/EC = event_containers[severity]
|
||||
@@ -78,12 +78,12 @@
|
||||
var/datum/event_meta/EM = E.event_meta
|
||||
if(EM.name == "Nothing")
|
||||
continue
|
||||
var/message = "'[EM.name]' began at [worldtime2text(E.startedAt)] "
|
||||
var/message = "'[EM.name]' began at [station_time_timestamp("hh:mm:ss", E.startedAt)] "
|
||||
if(E.isRunning)
|
||||
message += "and is still running."
|
||||
else
|
||||
if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes
|
||||
message += "and ended at [worldtime2text(E.endedAt)]."
|
||||
message += "and ended at [station_time_timestamp("hh:mm:ss", E.endedAt)]."
|
||||
else
|
||||
message += "and ran to completion."
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
var/next_event_at = max(0, EC.next_event_time - world.time)
|
||||
html += "<tr>"
|
||||
html += "<td>[severity_to_string[severity]]</td>"
|
||||
html += "<td>[worldtime2text(max(EC.next_event_time, world.time))]</td>"
|
||||
html += "<td>[station_time_timestamp("hh:mm:ss", max(EC.next_event_time, world.time))]</td>"
|
||||
html += "<td>[round(next_event_at / 600, 0.1)]</td>"
|
||||
html += "<td>"
|
||||
html += "<A align='right' href='?src=[UID()];dec_timer=2;event=\ref[EC]'>--</A>"
|
||||
@@ -188,7 +188,7 @@
|
||||
html += "<tr>"
|
||||
html += "<td>[severity_to_string[EM.severity]]</td>"
|
||||
html += "<td>[EM.name]</td>"
|
||||
html += "<td>[no_end ? "N/A" : worldtime2text(ends_at)]</td>"
|
||||
html += "<td>[no_end ? "N/A" : station_time_timestamp("hh:mm:ss", ends_at)]</td>"
|
||||
html += "<td>[no_end ? "N/A" : ends_in]</td>"
|
||||
html += "<td><A align='right' href='?src=[UID()];stop=\ref[E]'>Stop</A></td>"
|
||||
html += "</tr>"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
kill()
|
||||
|
||||
/datum/event/money_hacker/announce()
|
||||
var/message = "A brute force hack has been detected (in progress since [worldtime2text()]). The target of the attack is: Financial account #[affected_account.account_number], \
|
||||
var/message = "A brute force hack has been detected (in progress since [station_time_timestamp()]). The target of the attack is: Financial account #[affected_account.account_number], \
|
||||
without intervention this attack will succeed in approximately 10 minutes. Required intervention: temporary suspension of affected accounts until the attack has ceased. \
|
||||
Notifications will be sent as updates occur.<br>"
|
||||
var/my_department = "[station_name()] firewall subroutines"
|
||||
@@ -50,7 +50,7 @@
|
||||
T.date = pick("", current_date_string, date1, date2)
|
||||
var/time1 = rand(0, 99999999)
|
||||
var/time2 = "[round(time1 / 36000)+12]:[(time1 / 600 % 60) < 10 ? add_zero(time1 / 600 % 60, 1) : time1 / 600 % 60]"
|
||||
T.time = pick("", worldtime2text(), time2)
|
||||
T.time = pick("", station_time_timestamp(), time2)
|
||||
T.source_terminal = pick("","[pick("Biesel","New Gibson")] GalaxyNet Terminal #[rand(111,999)]","your mums place","nantrasen high CommanD")
|
||||
|
||||
affected_account.transaction_log.Add(T)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
if(areas && areas.len > 0)
|
||||
var/my_department = "[station_name()] firewall subroutines"
|
||||
var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [worldtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.<br>"
|
||||
var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [station_time_timestamp()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.<br>"
|
||||
for(var/obj/machinery/message_server/MS in world)
|
||||
MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2)
|
||||
for(var/mob/living/silicon/ai/A in player_list)
|
||||
|
||||
@@ -319,9 +319,9 @@
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder)
|
||||
if(holder.energy)
|
||||
holder.density = 1
|
||||
holder.maxhealth = 100
|
||||
holder.health = holder.maxhealth
|
||||
holder.density = TRUE
|
||||
holder.max_integrity = 100
|
||||
holder.obj_integrity = holder.max_integrity
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(!is_sharp(I))
|
||||
@@ -408,13 +408,12 @@
|
||||
desc = "An extremely expansionistic species of vine."
|
||||
icon = 'icons/effects/spacevines.dmi'
|
||||
icon_state = "Light1"
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = MOB_LAYER + 0.8
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
layer = SPACEVINE_LAYER
|
||||
mouse_opacity = 2 //Clicking anywhere on the turf is good enough
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
var/health = 50
|
||||
var/maxhealth = 50
|
||||
max_integrity = 50
|
||||
var/energy = 0
|
||||
var/obj/structure/spacevine_controller/master = null
|
||||
var/list/mutations = list()
|
||||
@@ -488,7 +487,7 @@
|
||||
if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
|
||||
damage_dealt *= 4
|
||||
for(var/obj/structure/spacevine/B in range(1,src))
|
||||
if(B.health > damage_dealt) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
|
||||
if(B.obj_integrity > damage_dealt) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
|
||||
B.take_damage(damage_dealt, I.damtype, "melee", 1)
|
||||
else
|
||||
B.wither()
|
||||
|
||||
@@ -49,17 +49,8 @@
|
||||
description_holders["icon"] = "[bicon(A)]"
|
||||
description_holders["desc"] = A.desc
|
||||
|
||||
// Byond seemingly calls stat, each tick.
|
||||
// Calling things each tick can get expensive real quick.
|
||||
// So we slow this down a little.
|
||||
// See: http://www.byond.com/docs/ref/info.html#/client/proc/Stat
|
||||
/client/Stat()
|
||||
. = ..()
|
||||
if(holder)
|
||||
sleep(1)
|
||||
else
|
||||
sleep(5)
|
||||
stoplag()
|
||||
if(usr && statpanel("Examine"))
|
||||
stat(null,"[description_holders["icon"]] <font size='5'>[description_holders["name"]]</font>") //The name, written in big letters.
|
||||
stat(null,"[description_holders["desc"]]") //the default examine text.
|
||||
|
||||
@@ -313,14 +313,17 @@
|
||||
egg_list.Cut() //Destroy any excess eggs, clearing the egg_list
|
||||
|
||||
/obj/machinery/fishtank/proc/harvest_fish(var/mob/user)
|
||||
if(!fish_count) //Can't catch non-existant fish!
|
||||
if(fish_count <= 0) //Can't catch non-existant fish!
|
||||
to_chat(usr, "There are no fish in \the [src] to catch!")
|
||||
return
|
||||
var/list/fish_names_list = list()
|
||||
for(var/datum/fish/fish_type in fish_list)
|
||||
fish_names_list += list("[fish_type.fish_name]" = fish_type)
|
||||
var/caught_fish = input("Select a fish to catch.", "Fishing") as null|anything in fish_names_list //Select a fish from the tank
|
||||
if(caught_fish)
|
||||
if(fish_count <= 0)
|
||||
to_chat(usr, "There are no fish in \the [src] to catch!")
|
||||
return
|
||||
else if(caught_fish)
|
||||
user.visible_message("[user.name] harvests \a [caught_fish] from \the [src].", "You scoop \a [caught_fish] out of \the [src].")
|
||||
var/datum/fish/fish_type = fish_names_list[caught_fish]
|
||||
var/fish_item = fish_type.fish_item
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
stack_list[processed_sheet] = s
|
||||
// Not including tg's ignoring of metal, glass being stocked because if cargo's not telling science when ores are there, they probably won't
|
||||
// help with restocking metal/glass either
|
||||
var/msg = "\[[worldtime2text()]\]: [capitalize(s.name)] sheets have been stocked in the ore reclaimer."
|
||||
var/msg = "\[[station_time_timestamp()]\]: [capitalize(s.name)] sheets have been stocked in the ore reclaimer."
|
||||
for(var/obj/machinery/requests_console/D in allConsoles)
|
||||
if(D.department in src.supply_consoles)
|
||||
if(supply_consoles[D.department] == null || (s.name in supply_consoles[D.department]))
|
||||
|
||||
@@ -562,7 +562,7 @@
|
||||
|
||||
log_robot("[key_name(speaker)] : [message]")
|
||||
var/message_start = "<i><span class='game say'>[name], <span class='name'>[speaker.name]</span>"
|
||||
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i> <span class='ibm'>\"[message]\"</span></span></span>"
|
||||
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i><span class='robot'>\"[message]\"</span></span></span>"
|
||||
|
||||
for(var/mob/M in dead_mob_list)
|
||||
if(!isnewplayer(M) && !isbrain(M))
|
||||
|
||||
@@ -55,6 +55,6 @@
|
||||
update_icons()
|
||||
|
||||
timeofdeath = world.time
|
||||
if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
|
||||
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
update_canmove()
|
||||
|
||||
timeofdeath = world.time
|
||||
if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
|
||||
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
|
||||
living_mob_list -= src
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
|
||||
timeofdeath = world.time
|
||||
if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0) //mind. ?
|
||||
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0) //mind. ?
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
timeofdeath = world.time
|
||||
med_hud_set_health()
|
||||
med_hud_set_status()
|
||||
if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
|
||||
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
|
||||
if(ticker && ticker.mode)
|
||||
// log_to_dd("k")
|
||||
sql_report_death(src)
|
||||
|
||||
@@ -835,13 +835,13 @@
|
||||
else
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/U = usr
|
||||
R.fields["comments"] += "Set to [setcriminal] by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [worldtime2text()] with comment: [t1]<BR>"
|
||||
R.fields["comments"] += "Set to [setcriminal] by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [station_time_timestamp()] with comment: [t1]<BR>"
|
||||
if(isrobot(usr))
|
||||
var/mob/living/silicon/robot/U = usr
|
||||
R.fields["comments"] += "Set to [setcriminal] by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [worldtime2text()] with comment: [t1]<BR>"
|
||||
R.fields["comments"] += "Set to [setcriminal] by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [station_time_timestamp()] with comment: [t1]<BR>"
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/U = usr
|
||||
R.fields["comments"] += "Set to [setcriminal] by [U.name] (artificial intelligence) on [current_date_string] [worldtime2text()] with comment: [t1]<BR>"
|
||||
R.fields["comments"] += "Set to [setcriminal] by [U.name] (artificial intelligence) on [current_date_string] [station_time_timestamp()] with comment: [t1]<BR>"
|
||||
|
||||
R.fields["criminal"] = setcriminal
|
||||
log_admin("[key_name_admin(usr)] set secstatus of [their_rank] [their_name] to [setcriminal], comment: [t1]")
|
||||
@@ -931,13 +931,13 @@
|
||||
return
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/U = usr
|
||||
R.fields["comments"] += "Made by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
R.fields["comments"] += "Made by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
if(isrobot(usr))
|
||||
var/mob/living/silicon/robot/U = usr
|
||||
R.fields["comments"] += "Made by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
R.fields["comments"] += "Made by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/U = usr
|
||||
R.fields["comments"] += "Made by [U.name] (artificial intelligence) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
R.fields["comments"] += "Made by [U.name] (artificial intelligence) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
|
||||
if(href_list["medical"])
|
||||
if(hasHUD(usr,"medical"))
|
||||
@@ -1053,10 +1053,10 @@
|
||||
return
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/U = usr
|
||||
R.fields["comments"] += "Made by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
R.fields["comments"] += "Made by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
if(isrobot(usr))
|
||||
var/mob/living/silicon/robot/U = usr
|
||||
R.fields["comments"] += "Made by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [worldtime2text()]<BR>[t1]"
|
||||
R.fields["comments"] += "Made by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [station_time_timestamp()]<BR>[t1]"
|
||||
|
||||
if(href_list["lookitem"])
|
||||
var/obj/item/I = locate(href_list["lookitem"])
|
||||
|
||||
@@ -44,6 +44,6 @@
|
||||
loc.icon_state = "aicard-404"
|
||||
|
||||
timeofdeath = world.time
|
||||
if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
|
||||
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
to_chat(user, "\t Key: <font color='#FFA500'>Electronics</font>/<font color='red'>Brute</font>")
|
||||
to_chat(user, "\t Damage Specifics: <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font>")
|
||||
if(M.timeofdeath && M.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>Time of Disable: [worldtime2text(M.timeofdeath)]</span>")
|
||||
to_chat(user, "<span class='notice'>Time of Disable: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]</span>")
|
||||
var/mob/living/silicon/robot/H = M
|
||||
var/list/damaged = H.get_damaged_components(1,1,1)
|
||||
to_chat(user, "<span class='notice'>Localized Damage:</span>")
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
update_icons()
|
||||
timeofdeath = world.time
|
||||
if(mind) mind.store_memory("Time of death: [worldtime2text(timeofdeath)]", 0)
|
||||
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
|
||||
|
||||
sql_report_cyborg_death(src)
|
||||
|
||||
|
||||
@@ -166,6 +166,9 @@
|
||||
set category = "Robot Commands"
|
||||
set name = "Power Warning"
|
||||
|
||||
if(handle_emote_CD(50))
|
||||
return
|
||||
|
||||
if(!is_component_functioning("power cell") || !cell || !cell.charge)
|
||||
visible_message("The power warning light on <span class='name'>[src]</span> flashes urgently.",\
|
||||
"You announce you are operating in low power mode.")
|
||||
|
||||
@@ -49,6 +49,8 @@ var/list/robot_verbs_default = list(
|
||||
var/datum/wires/robot/wires = null
|
||||
|
||||
var/opened = 0
|
||||
var/custom_panel = null
|
||||
var/list/custom_panel_names = list("Cricket")
|
||||
var/emagged = 0
|
||||
|
||||
var/list/force_modules = list()
|
||||
@@ -314,6 +316,7 @@ var/list/robot_verbs_default = list(
|
||||
module_sprites["Default"] = "Service2"
|
||||
module_sprites["Standard"] = "robotServ"
|
||||
module_sprites["Noble-SRV"] = "Noble-SRV"
|
||||
module_sprites["Cricket"] = "Cricket-SERV"
|
||||
|
||||
if("Miner")
|
||||
module = new /obj/item/weapon/robot_module/miner(src)
|
||||
@@ -325,6 +328,7 @@ var/list/robot_verbs_default = list(
|
||||
module_sprites["Treadhead"] = "Miner"
|
||||
module_sprites["Standard"] = "robotMine"
|
||||
module_sprites["Noble-DIG"] = "Noble-DIG"
|
||||
module_sprites["Cricket"] = "Cricket-MINE"
|
||||
|
||||
if("Medical")
|
||||
module = new /obj/item/weapon/robot_module/medical(src)
|
||||
@@ -337,6 +341,7 @@ var/list/robot_verbs_default = list(
|
||||
module_sprites["Needles"] = "medicalrobot"
|
||||
module_sprites["Standard"] = "robotMedi"
|
||||
module_sprites["Noble-MED"] = "Noble-MED"
|
||||
module_sprites["Cricket"] = "Cricket-MEDI"
|
||||
status_flags &= ~CANPUSH
|
||||
|
||||
if("Security")
|
||||
@@ -348,6 +353,7 @@ var/list/robot_verbs_default = list(
|
||||
module_sprites["Bloodhound"] = "bloodhound"
|
||||
module_sprites["Standard"] = "robotSecy"
|
||||
module_sprites["Noble-SEC"] = "Noble-SEC"
|
||||
module_sprites["Cricket"] = "Cricket-SEC"
|
||||
status_flags &= ~CANPUSH
|
||||
|
||||
if("Engineering")
|
||||
@@ -360,6 +366,7 @@ var/list/robot_verbs_default = list(
|
||||
module_sprites["Landmate"] = "landmate"
|
||||
module_sprites["Standard"] = "robotEngi"
|
||||
module_sprites["Noble-ENG"] = "Noble-ENG"
|
||||
module_sprites["Cricket"] = "Cricket-ENGI"
|
||||
magpulse = 1
|
||||
|
||||
if("Janitor")
|
||||
@@ -370,6 +377,7 @@ var/list/robot_verbs_default = list(
|
||||
module_sprites["Mop Gear Rex"] = "mopgearrex"
|
||||
module_sprites["Standard"] = "robotJani"
|
||||
module_sprites["Noble-CLN"] = "Noble-CLN"
|
||||
module_sprites["Cricket"] = "Cricket-JANI"
|
||||
|
||||
if("Combat")
|
||||
module = new /obj/item/weapon/robot_module/combat(src)
|
||||
@@ -968,6 +976,9 @@ var/list/robot_verbs_default = list(
|
||||
if(custom_sprite) //Custom borgs also have custom panels, heh
|
||||
panelprefix = "[ckey]"
|
||||
|
||||
if(custom_panel in custom_panel_names) //For default borgs with different panels
|
||||
panelprefix = custom_panel
|
||||
|
||||
if(wiresexposed)
|
||||
overlays += "[panelprefix]-openpanel +w"
|
||||
else if(cell)
|
||||
@@ -1289,6 +1300,8 @@ var/list/robot_verbs_default = list(
|
||||
module.module_type = "Brobot"
|
||||
update_module_icon()
|
||||
lockcharge = null
|
||||
var/list/names = splittext(icontype, "-")
|
||||
custom_panel = trim(names[1])
|
||||
else
|
||||
to_chat(src, "Something is badly wrong with the sprite selection. Harass a coder.")
|
||||
icon_state = module_sprites[1]
|
||||
|
||||
@@ -175,3 +175,5 @@
|
||||
eats_mice = 0
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
@@ -37,4 +37,6 @@
|
||||
faction = list("syndicate")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
minbodytemp = 0
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 20
|
||||
@@ -17,8 +17,8 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
melee_damage_lower = 18
|
||||
melee_damage_upper = 18
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
speed = 2
|
||||
@@ -28,4 +28,4 @@
|
||||
/mob/living/simple_animal/pet/sloth/paperwork
|
||||
name = "Paperwork"
|
||||
desc = "Cargo's pet sloth. About as useful as the rest of the techs."
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
@@ -687,7 +687,15 @@
|
||||
"STOP HOT-WIRING THE ENGINE, FUCKING CHRIST!",
|
||||
"Wire the solars, you lazy bums!",
|
||||
"WHO TOOK THE DAMN HARDSUITS?",
|
||||
"OH GOD ITS FREE CALL THE SHUTTLE")
|
||||
"OH GOD ITS FREE CALL THE SHUTTLE",
|
||||
"Why are there so many atmos alerts?",
|
||||
"OH GOD WHY WOULD YOU TURN ON THE PA BEFORE CONTAINMENT IS UP?",
|
||||
"Remember to lock the emitters!",
|
||||
"Stop goofing off and repair the goddam station!",
|
||||
"The singularity is not your friend!",
|
||||
"What were the wires again?",
|
||||
"Goddam emaggers!"
|
||||
)
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/New()
|
||||
|
||||
@@ -970,7 +970,8 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
// this function displays the station time in the status panel
|
||||
/mob/proc/show_stat_station_time()
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
stat(null, "Round Time: [worldtime2text()]")
|
||||
stat(null, "Station Time: [station_time_timestamp()]")
|
||||
|
||||
// this function displays the shuttles ETA in the status panel if the shuttle has been called
|
||||
/mob/proc/show_stat_emergency_shuttle_eta()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/new_player
|
||||
var/ready = 0
|
||||
var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
|
||||
var/skip_antag = 0 //For declining an antag roll this round.
|
||||
var/spawning = 0 //Referenced when you want to delete the new_player later on in the code.
|
||||
var/totalPlayers = 0 //Player counts for the Lobby tab
|
||||
var/totalPlayersReady = 0
|
||||
universal_speak = 1
|
||||
@@ -31,6 +32,11 @@
|
||||
if(!ready) output += "<p><a href='byond://?src=[UID()];ready=1'>Declare Ready</A></p>"
|
||||
else output += "<p><b>You are ready</b> (<a href='byond://?src=[UID()];ready=2'>Cancel</A>)</p>"
|
||||
|
||||
var/list/antags = client.prefs.be_special
|
||||
if(antags && antags.len)
|
||||
if(!skip_antag) output += "<p><a href='byond://?src=[UID()];skip_antag=1'>Global Antag Candidancy</A>"
|
||||
else output += "<p><a href='byond://?src=[UID()];skip_antag=2'>Global Antag Candidancy</A>"
|
||||
output += "<br /><small>You are <b>[skip_antag ? "ineligable" : "eligable"]</b> for all antag roles.</small></p>"
|
||||
else
|
||||
output += "<p><a href='byond://?src=[UID()];manifest=1'>View the Crew Manifest</A></p>"
|
||||
output += "<p><a href='byond://?src=[UID()];late_join=1'>Join Game!</A></p>"
|
||||
@@ -97,8 +103,7 @@
|
||||
|
||||
statpanel("Status")
|
||||
if(client.statpanel == "Status" && ticker)
|
||||
if(ticker.current_state != GAME_STATE_PREGAME)
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
show_stat_station_time()
|
||||
|
||||
|
||||
/mob/new_player/Topic(href, href_list[])
|
||||
@@ -112,6 +117,10 @@
|
||||
ready = !ready
|
||||
new_player_panel_proc()
|
||||
|
||||
if(href_list["skip_antag"])
|
||||
skip_antag = !skip_antag
|
||||
new_player_panel_proc()
|
||||
|
||||
if(href_list["refresh"])
|
||||
src << browse(null, "window=playersetup") //closes the player setup window
|
||||
new_player_panel_proc()
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
if(!MP)
|
||||
return 0
|
||||
|
||||
if(!GAMEMODE_IS_NUCLEAR)
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/cat/Syndi))
|
||||
return 0
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/cat))
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/corgi))
|
||||
@@ -288,6 +291,9 @@
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/pony))
|
||||
return 1
|
||||
if(!GAMEMODE_IS_NUCLEAR)
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/fox/Syndifox))
|
||||
return 0
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/fox))
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/chick))
|
||||
|
||||
@@ -21,12 +21,12 @@ var/global/static/ntnrc_uid = 0
|
||||
return ..()
|
||||
|
||||
/datum/ntnet_conversation/proc/add_message(message, username)
|
||||
message = "[worldtime2text()] [username]: [message]"
|
||||
message = "[station_time_timestamp()] [username]: [message]"
|
||||
messages.Add(message)
|
||||
trim_message_list()
|
||||
|
||||
/datum/ntnet_conversation/proc/add_status_message(message)
|
||||
messages.Add("[worldtime2text()] -!- [message]")
|
||||
messages.Add("[station_time_timestamp()] -!- [message]")
|
||||
trim_message_list()
|
||||
|
||||
/datum/ntnet_conversation/proc/trim_message_list()
|
||||
|
||||
@@ -36,7 +36,7 @@ var/global/datum/ntnet/ntnet_global = new()
|
||||
|
||||
// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional.
|
||||
/datum/ntnet/proc/add_log(log_string, obj/item/weapon/computer_hardware/network_card/source = null)
|
||||
var/log_text = "[worldtime2text()] - "
|
||||
var/log_text = "[station_time_timestamp()] - "
|
||||
if(source)
|
||||
log_text += "[source.get_network_tag()] - "
|
||||
else
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
data["PC_programheaders"] = program_headers
|
||||
|
||||
data["PC_stationtime"] = worldtime2text()
|
||||
data["PC_stationtime"] = station_time_timestamp()
|
||||
data["PC_showexitprogram"] = active_program ? 1 : 0 // Hides "Exit Program" button on mainscreen
|
||||
return data
|
||||
|
||||
|
||||
@@ -259,7 +259,7 @@
|
||||
var/title
|
||||
var/content
|
||||
if(mode == 2)
|
||||
title = "crew manifest ([worldtime2text()])"
|
||||
title = "crew manifest ([station_time_timestamp()])"
|
||||
content = "<h4>Crew Manifest</h4><br>[data_core ? data_core.get_manifest(0) : ""]"
|
||||
else if(modify && !mode)
|
||||
title = "access report"
|
||||
|
||||
@@ -296,7 +296,7 @@ obj/machinery/lapvend/attackby(obj/item/I, mob/user)
|
||||
T.amount = "[total_price]"
|
||||
T.source_terminal = name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
vendor_account.transaction_log.Add(T)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
dat += "<h2 ALIGN=CENTER>SpiderOS v.1.337</h2>"
|
||||
dat += "Welcome, <b>[U.real_name]</b>.<br>"
|
||||
dat += "<br>"
|
||||
dat += "<img src=sos_10.png> Current Time: [worldtime2text()]<br>"
|
||||
dat += "<img src=sos_10.png> Current Time: [station_time_timestamp()]<br>"
|
||||
dat += "<img src=sos_9.png> Battery Life: [round(cell.charge/100)]%<br>"
|
||||
dat += "<img src=sos_11.png> Smoke Bombs: \Roman [s_bombs]<br>"
|
||||
dat += "<br><br>"
|
||||
|
||||
@@ -42,7 +42,7 @@ var/list/adminfaxes = list()
|
||||
html += "<td>[A.name]</td>"
|
||||
html += "<td>[A.from_department]</td>"
|
||||
html += "<td>[A.to_department]</td>"
|
||||
html += "<td>[worldtime2text(A.sent_at)]</td>"
|
||||
html += "<td>[station_time_timestamp("hh:mm:ss", A.sent_at)]</td>"
|
||||
if(A.sent_by)
|
||||
var/mob/living/S = A.sent_by
|
||||
html += "<td><A HREF='?_src_=holder;adminplayeropts=\ref[A.sent_by]'>[S.name]</A></td>"
|
||||
@@ -71,7 +71,7 @@ var/list/adminfaxes = list()
|
||||
html += "<td>[F.name]</td>"
|
||||
html += "<td>[F.from_department]</td>"
|
||||
html += "<td>[F.to_department]</td>"
|
||||
html += "<td>[worldtime2text(F.sent_at)]</td>"
|
||||
html += "<td>[station_time_timestamp("hh:mm:ss", F.sent_at)]</td>"
|
||||
if(F.sent_by)
|
||||
var/mob/living/S = F.sent_by
|
||||
html += "<td><A HREF='?_src_=holder;adminplayeropts=\ref[F.sent_by]'>[S.name]</A></td>"
|
||||
|
||||
@@ -169,7 +169,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
data["useRetro"] = retro_mode
|
||||
|
||||
data["cartridge_name"] = cartridge ? cartridge.name : ""
|
||||
data["stationTime"] = worldtime2text()
|
||||
data["stationTime"] = station_time_timestamp()
|
||||
|
||||
data["app"] = list()
|
||||
current_app.update_ui(user, data)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
user.show_message("<span class=notice>\t Key: Suffocation/Toxin/Burns/Brute</span>", 1)
|
||||
user.show_message("<span class=notice>\t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
if(C.timeofdeath && (C.stat == DEAD || (C.status_flags & FAKEDEATH)))
|
||||
user.show_message("<span class=notice>\t Time of Death: [worldtime2text(C.timeofdeath)]</span>")
|
||||
user.show_message("<span class=notice>\t Time of Death: [station_time_timestamp("hh:mm:ss", C.timeofdeath)]</span>")
|
||||
if(istype(C, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = C
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
|
||||
@@ -104,6 +104,10 @@
|
||||
|
||||
var/shock_proof = 0 //if set to 1, this APC will not arc bolts of electricity if it's overloaded.
|
||||
|
||||
// Nightshift
|
||||
var/nightshift_lights = FALSE
|
||||
var/last_nightshift_switch = 0
|
||||
|
||||
/obj/machinery/power/apc/worn_out
|
||||
name = "\improper Worn out APC"
|
||||
keep_preset_name = 1
|
||||
@@ -773,6 +777,7 @@
|
||||
data["siliconUser"] = istype(user, /mob/living/silicon)
|
||||
data["siliconLock"] = locked
|
||||
data["malfStatus"] = get_malf_status(user)
|
||||
data["nightshiftLights"] = nightshift_lights
|
||||
|
||||
var/powerChannels[0]
|
||||
powerChannels[++powerChannels.len] = list(
|
||||
@@ -904,6 +909,16 @@
|
||||
|
||||
toggle_breaker()
|
||||
|
||||
else if(href_list["toggle_nightshift"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
if(last_nightshift_switch > world.time + 100) // don't spam...
|
||||
to_chat(usr, "<span class='warning'>[src]'s night lighting circuit breaker is still cycling!</span>")
|
||||
return
|
||||
last_nightshift_switch = world.time
|
||||
set_nightshift(!nightshift_lights)
|
||||
|
||||
else if(href_list["cmode"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
@@ -1353,4 +1368,13 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/machinery/power/apc/proc/set_nightshift(on)
|
||||
set waitfor = FALSE
|
||||
nightshift_lights = on
|
||||
for(var/obj/machinery/light/L in area)
|
||||
if(L.nightshift_allowed)
|
||||
L.nightshift_enabled = nightshift_lights
|
||||
L.update(FALSE)
|
||||
CHECK_TICK
|
||||
|
||||
#undef APC_UPDATE_ICON_COOLDOWN
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
var/static_power_used = 0
|
||||
var/brightness_range = 8 // luminosity when on, also used in power calculation
|
||||
var/brightness_power = 1
|
||||
var/brightness_color = null
|
||||
var/brightness_color = "#FFFFFF"
|
||||
var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
|
||||
var/flickering = 0
|
||||
var/light_type = /obj/item/weapon/light/tube // the type of light item
|
||||
@@ -153,6 +153,13 @@
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/lightmaterials = list(MAT_GLASS=100) //stores the materials the light is made of to stop infinite glass exploit
|
||||
|
||||
var/nightshift_enabled = FALSE //Currently in night shift mode?
|
||||
var/nightshift_allowed = TRUE //Set to FALSE to never let this light get switched to night mode.
|
||||
var/nightshift_light_range = 8
|
||||
var/nightshift_light_power = 0.45
|
||||
var/nightshift_light_color = "#FFDDCC"
|
||||
|
||||
|
||||
// the smaller bulb light fixture
|
||||
|
||||
/obj/machinery/light/small
|
||||
@@ -161,6 +168,7 @@
|
||||
fitting = "bulb"
|
||||
brightness_range = 4
|
||||
brightness_color = "#a0a080"
|
||||
nightshift_light_range = 4
|
||||
desc = "A small lighting fixture."
|
||||
light_type = /obj/item/weapon/light/bulb
|
||||
|
||||
@@ -226,18 +234,24 @@
|
||||
return
|
||||
|
||||
// update the icon_state and luminosity of the light depending on its state
|
||||
/obj/machinery/light/proc/update(var/trigger = 1)
|
||||
|
||||
/obj/machinery/light/proc/update(var/trigger = TRUE)
|
||||
switch(status)
|
||||
if(LIGHT_BROKEN, LIGHT_BURNED, LIGHT_EMPTY)
|
||||
on = FALSE
|
||||
update_icon()
|
||||
if(on)
|
||||
if(light_range != brightness_range || light_power != brightness_power || light_color != brightness_color)
|
||||
var/BR = nightshift_enabled ? nightshift_light_range : brightness_range
|
||||
var/PO = nightshift_enabled ? nightshift_light_power : brightness_power
|
||||
var/CO = nightshift_enabled ? nightshift_light_color : brightness_color
|
||||
var/matching = light_range == BR && light_power == PO && light_color == CO
|
||||
if(!matching)
|
||||
switchcount++
|
||||
if(rigged)
|
||||
if(status == LIGHT_OK && trigger)
|
||||
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
|
||||
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
|
||||
explode()
|
||||
else if( prob( min(60, switchcount*switchcount*0.01) ) )
|
||||
else if(prob(min(60, switchcount * switchcount * 0.01)))
|
||||
if(status == LIGHT_OK && trigger)
|
||||
status = LIGHT_BURNED
|
||||
icon_state = "[base_state]-burned"
|
||||
@@ -245,7 +259,7 @@
|
||||
set_light(0)
|
||||
else
|
||||
use_power = 2
|
||||
set_light(brightness_range, brightness_power, brightness_color)
|
||||
set_light(BR, PO, CO)
|
||||
else
|
||||
use_power = 1
|
||||
set_light(0)
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
name = "miniature energy gun"
|
||||
desc = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: stun and kill."
|
||||
icon_state = "mini"
|
||||
item_state = "gun"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
ammo_x_offset = 2
|
||||
charge_sections = 3
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
||||
P.info = "<CENTER><B>Chemical Analysis</B></CENTER><BR>"
|
||||
P.info += "<b>Time of analysis:</b> [worldtime2text(world.time)]<br><br>"
|
||||
P.info += "<b>Time of analysis:</b> [station_time_timestamp()]<br><br>"
|
||||
P.info += "<b>Chemical name:</b> [href_list["name"]]<br>"
|
||||
if(href_list["name"] == "Blood")
|
||||
var/datum/reagents/R = beaker.reagents
|
||||
|
||||
@@ -896,7 +896,7 @@
|
||||
/datum/design/mech_disabler
|
||||
name = "Exosuit Weapon (CH-PD Disabler)"
|
||||
desc = "Allows for the construction of CH-PD Disabler."
|
||||
id = "mech_laser"
|
||||
id = "mech_disabler"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
|
||||
// Time
|
||||
interpreter.SetProc("time", /proc/time)
|
||||
interpreter.SetProc("timestamp", /proc/timestamp)
|
||||
interpreter.SetProc("timestamp", /proc/gameTimestamp)
|
||||
|
||||
// Run the compiled code
|
||||
interpreter.Run()
|
||||
|
||||
@@ -155,10 +155,6 @@
|
||||
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/time() called tick#: [world.time]")
|
||||
return world.time + (12 HOURS)
|
||||
|
||||
/proc/timestamp(var/format = "hh:mm:ss") // Get the game time in text
|
||||
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/timestamp() called tick#: [world.time]")
|
||||
return time2text(world.time + (10 HOURS), format) // Yes, 10, not 12 hours, for some reason time2text() is being moronic (T-thanks BYOND), and it's adding 2 hours to this, I don't even know either.
|
||||
|
||||
proc/string_explode(var/string, var/separator = "")
|
||||
//writepanic("[__FILE__].[__LINE__] \\/proc/string_explode() called tick#: [world.time]")
|
||||
if(istext(string) && (istext(separator) || isnull(separator)))
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
to_chat(usr, "<span class='warning'>All Emergency Response Teams are dispatched and can not be called at this time.</span>")
|
||||
return
|
||||
to_chat(usr, "<span class = 'notice'>ERT request transmitted.</span>")
|
||||
print_centcom_report(ert_reason, worldtime2text() +" ERT Request")
|
||||
print_centcom_report(ert_reason, station_time_timestamp() + " ERT Request")
|
||||
|
||||
var/fullmin_count = 0
|
||||
for(var/client/C in admins)
|
||||
|
||||
@@ -27,6 +27,10 @@
|
||||
|
||||
//Will not be announced if you try to set to the same level as it already is
|
||||
if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level)
|
||||
if(level >= SEC_LEVEL_RED && security_level < SEC_LEVEL_RED)
|
||||
// Mark down this time to prevent shuttle cheese
|
||||
shuttle_master.emergency_sec_level_time = world.time
|
||||
|
||||
switch(level)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
security_announcement_down.Announce("All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.","Attention! Security level lowered to green.")
|
||||
@@ -123,6 +127,7 @@
|
||||
atc.reroute_traffic(yes = TRUE) // Tell them fuck off we're busy.
|
||||
else
|
||||
atc.reroute_traffic(yes = FALSE)
|
||||
SSnightshift.check_nightshift()
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
@@ -41,7 +41,7 @@ var/global/datum/store/centcomm_store=new
|
||||
T.purpose = "Purchase of [item.name]"
|
||||
T.amount = -amount
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
|
||||
mind.initial_account.transaction_log.Add(T)
|
||||
return 1
|
||||
|
||||
+20
-4
@@ -32,7 +32,7 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG
|
||||
// dumb and hardcoded but I don't care~
|
||||
config.server_name += " #[(world.port % 1000) / 100]"
|
||||
|
||||
timezoneOffset = text2num(time2text(0,"hh")) * 36000
|
||||
GLOB.timezoneOffset = text2num(time2text(0, "hh")) * 36000
|
||||
|
||||
|
||||
callHook("startup")
|
||||
@@ -60,8 +60,8 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG
|
||||
map_name = "[using_map.name]"
|
||||
else
|
||||
map_name = "Unknown"
|
||||
|
||||
|
||||
|
||||
|
||||
if(config && config.server_name)
|
||||
name = "[config.server_name]: [station_name()]"
|
||||
else
|
||||
@@ -116,7 +116,11 @@ var/world_topic_spam_protect_time = world.timeofday
|
||||
s["ai"] = config.allow_ai
|
||||
s["host"] = host ? host : null
|
||||
s["players"] = list()
|
||||
s["stationtime"] = worldtime2text()
|
||||
s["roundtime"] = worldtime2text()
|
||||
s["stationtime"] = station_time_timestamp()
|
||||
s["listed"] = "Public"
|
||||
if(!hub_password)
|
||||
s["listed"] = "Invisible"
|
||||
var/player_count = 0
|
||||
var/admin_count = 0
|
||||
|
||||
@@ -269,6 +273,18 @@ var/world_topic_spam_protect_time = world.timeofday
|
||||
|
||||
return "Logs set to current date"
|
||||
|
||||
else if("setlist" in input)
|
||||
if(!key_valid)
|
||||
return keySpamProtect(addr)
|
||||
if(input["req"] == "public")
|
||||
hub_password = hub_password_base
|
||||
update_status()
|
||||
return "Set listed status to public."
|
||||
else
|
||||
hub_password = ""
|
||||
update_status()
|
||||
return "Set listed status to invisible."
|
||||
|
||||
/proc/keySpamProtect(var/addr)
|
||||
if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50)
|
||||
spawn(50)
|
||||
|
||||
@@ -370,4 +370,4 @@ HIGH_POP_MC_TICK_RATE 1.1
|
||||
HIGH_POP_MC_MODE_AMOUNT 65
|
||||
|
||||
##Disengage high pop mode if player count drops below this
|
||||
DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
|
||||
DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
|
||||
|
||||
@@ -65,4 +65,10 @@ BOMBCAP 20
|
||||
## Set to 0/commented for "off", silicons will just start with Crewsimov.
|
||||
## Set to 1 for "random", silicons will start with a random lawset picked from (at the time of writing): Nanotrasen Default, P.A.L.A.D.I.N., Corporate, Robop and Crewsimov. More can be added by changing the law datum "default" variable in ai_laws.dm.
|
||||
|
||||
DEFAULT_LAWS 1
|
||||
DEFAULT_LAWS 1
|
||||
|
||||
## Randomize roundstart time (anywhere from 00:00 to 23:00 instead of always starting at 12:00)
|
||||
RANDOMIZE_SHIFT_TIME
|
||||
|
||||
## Enable Nightshift - Causes the station to go into "night mode" from 19:30 to 07:30. Best used with RANDOMIZED_SHIFT_TIME.
|
||||
ENABLE_NIGHT_SHIFTS
|
||||
@@ -322,7 +322,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.rose {color: #ff5050;}
|
||||
.sans {font-family: 'Comic Sans MS', cursive, sans-serif;}
|
||||
.wingdings {font-family: Wingdings, Webdings;}
|
||||
.ibm {font-family: 'PxPlus IBM MDA';}
|
||||
.robot {font-family: 'PxPlus IBM MDA'; font-size: 1.15em;}
|
||||
.ancient {color: #008B8B; font-stye: italic;}
|
||||
.newscaster {color: #800000;}
|
||||
.mod {color: #735638; font-weight: bold;}
|
||||
|
||||
@@ -56,6 +56,64 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">02 April 2018</h2>
|
||||
<h3 class="author">Desolate updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">New Cricket Borg module selection.</li>
|
||||
</ul>
|
||||
<h3 class="author">EldritchSigma updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Mech mounted Disablers are now printable with consistency.</li>
|
||||
</ul>
|
||||
<h3 class="author">Fethas updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Viruses Lycancoughy, Adv. Pierrots throat and Kingstons added.</li>
|
||||
</ul>
|
||||
<h3 class="author">IK3I updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">You can now opt out of the syndicate recruitment semminar prior to boarding the station.</li>
|
||||
</ul>
|
||||
<h3 class="author">Kyep updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Syndifox and Syndicat can now do melee damage. Paperwork (cargo sloth pet) no longer can.</li>
|
||||
<li class="tweak">Syndifox and Syndicat are no longer controllable by players by default.</li>
|
||||
<li class="tweak">Poly (parrot in Engineering) now knows more phrases.</li>
|
||||
</ul>
|
||||
<h3 class="author">Shazbot updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds E-pistol crates to the cargo manifest Change: changes the HoP's E-gun to an E-pistol</li>
|
||||
</ul>
|
||||
<h3 class="author">Tayyyyyyy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Borg power warning is on a 2 second cooldown</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">01 April 2018</h2>
|
||||
<h3 class="author">Tayyyyyyy, LP Spartan updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Once you up to red, it takes 5 minutes before the shuttle transit time is reduced to 5 minutes.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">30 March 2018</h2>
|
||||
<h3 class="author">matt81093 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fish duplication when pulling out multiple fish at once</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">28 March 2018</h2>
|
||||
<h3 class="author">Birdtalon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Enforces size limits for placing items inside slicable food</li>
|
||||
</ul>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Nano UI will update a bit faster</li>
|
||||
</ul>
|
||||
<h3 class="author">MarsM0nd updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Record printouts now automatically get labled with the name of the person.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">25 March 2018</h2>
|
||||
<h3 class="author">Alffd updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -6193,3 +6193,37 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
Alffd:
|
||||
- rscadd: Logic checks to lessen death from flying objects due to atmospheric breaches.
|
||||
- rscdel: Removes atmospheric stunning while thrown.
|
||||
2018-03-28:
|
||||
Birdtalon:
|
||||
- bugfix: Enforces size limits for placing items inside slicable food
|
||||
Fox McCloud:
|
||||
- tweak: Nano UI will update a bit faster
|
||||
MarsM0nd:
|
||||
- rscadd: Record printouts now automatically get labled with the name of the person.
|
||||
2018-03-30:
|
||||
matt81093:
|
||||
- bugfix: fish duplication when pulling out multiple fish at once
|
||||
2018-04-01:
|
||||
Tayyyyyyy, LP Spartan:
|
||||
- tweak: Once you up to red, it takes 5 minutes before the shuttle transit time
|
||||
is reduced to 5 minutes.
|
||||
2018-04-02:
|
||||
Desolate:
|
||||
- rscadd: New Cricket Borg module selection.
|
||||
EldritchSigma:
|
||||
- bugfix: Mech mounted Disablers are now printable with consistency.
|
||||
Fethas:
|
||||
- rscadd: Viruses Lycancoughy, Adv. Pierrots throat and Kingstons added.
|
||||
IK3I:
|
||||
- rscadd: You can now opt out of the syndicate recruitment semminar prior to boarding
|
||||
the station.
|
||||
Kyep:
|
||||
- tweak: Syndifox and Syndicat can now do melee damage. Paperwork (cargo sloth pet)
|
||||
no longer can.
|
||||
- tweak: Syndifox and Syndicat are no longer controllable by players by default.
|
||||
- tweak: Poly (parrot in Engineering) now knows more phrases.
|
||||
Shazbot:
|
||||
- rscadd: 'Adds E-pistol crates to the cargo manifest Change: changes the HoP''s
|
||||
E-gun to an E-pistol'
|
||||
Tayyyyyyy:
|
||||
- tweak: Borg power warning is on a 2 second cooldown
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "MarsM0nd"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Record printouts now automatically get labled with the name of the person."
|
||||
@@ -0,0 +1,7 @@
|
||||
author: "& Deathride58 & Tigercat2000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- experiment: "Station time is now randomized [if enabled in game_options configuration]."
|
||||
- rscadd: "A separate round time has been added to status panel. This will start at 00:00:00."
|
||||
- rscadd: "Night shift lighting [if enabled in the same configuration] will activate between station time 7:30 PM and 7:30 AM. This will dim all lights affected, but they will still have the same range."
|
||||
- rscadd: "APCs now have an option to set night lighting mode on or off, regardless of time."
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user