Merge branch 'master' into logging-improvements

This commit is contained in:
farie82
2020-04-12 08:42:50 +02:00
committed by GitHub
232 changed files with 784 additions and 652 deletions
+2
View File
@@ -47,6 +47,7 @@ jobs:
install:
- pip install --user PyYaml -q
- pip install --user beautifulsoup4 -q
- tools/travis/install_dreamchecker.sh
before_script: skip
script:
- shopt -s globstar
@@ -54,6 +55,7 @@ jobs:
- (num=$(grep -Ern '\\(red|blue|green|black|italic|bold|b|i[^mc])' code/ | wc -l); echo "$num BYOND text macros (expecting ${BYOND_MACRO_COUNT} or fewer)"; [ $num -le ${BYOND_MACRO_COUNT} ])
- md5sum -c - <<< "6dc1b6bf583f3bd4176b6df494caa5f1 *html/changelogs/example.yml"
- python tools/ss13_genchangelog.py html/changelog.html html/changelogs
- ~/dreamchecker
# Compile NanoUI to make sure it works
- stage: NanoUI
+2
View File
@@ -0,0 +1,2 @@
# This file has all the information on what versions of libraries are thrown into the code
export SPACEMANDMM_TAG=suite-1.2
@@ -1241,21 +1241,6 @@
/obj/structure/sign/securearea,
/turf/simulated/wall/mineral/plastitanium/explosive,
/area/ruin/unpowered/syndicate_lava_base/main)
"cf" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/item/radio/intercom/syndicate,
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/telecomms)
"cg" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/turf/simulated/floor/engine{
@@ -3529,10 +3514,6 @@
/obj/machinery/alarm/syndicate{
pixel_y = 24
},
/obj/item/radio/headset/syndicate/alt{
pixel_x = -3;
pixel_y = 3
},
/turf/simulated/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"hN" = (
@@ -3558,10 +3539,6 @@
/obj/machinery/alarm/syndicate{
pixel_y = 24
},
/obj/item/radio/headset/syndicate/alt{
pixel_x = -3;
pixel_y = 3
},
/turf/simulated/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"hR" = (
@@ -4479,10 +4456,6 @@
/obj/structure/table/wood,
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/sniper_rounds,
/obj/item/radio/headset/syndicate/alt{
pixel_x = -3;
pixel_y = 3
},
/turf/simulated/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"jB" = (
@@ -6785,7 +6758,6 @@
/obj/machinery/computer/message_monitor{
dir = 1
},
/obj/item/paper/monitorkey,
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/telecomms)
"ov" = (
@@ -7400,7 +7372,7 @@ mp
mQ
nl
nJ
cf
nJ
ov
mn
ab
@@ -99,14 +99,14 @@
"m" = (
/obj/structure/closet/crate/freezer,
/obj/item/stack/sheet/animalhide/lizard,
/obj/item/reagent_containers/food/snacks/lizardmeat,
/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
/area/ruin/unpowered)
"n" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/food/snacks/lizardmeat,
/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat,
/obj/machinery/light{
dir = 1
},
@@ -116,7 +116,7 @@
/area/ruin/unpowered)
"o" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/food/snacks/lizardmeat,
/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
+1 -1
View File
@@ -5598,7 +5598,7 @@
},
/area/syndicate_depot/outer)
"lZ" = (
/obj/item/reagent_containers/food/snacks/spiderleg,
/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg,
/obj/structure/spider,
/turf/simulated/floor/plasteel{
icon_state = "dark"
+26
View File
@@ -0,0 +1,26 @@
// This file contains all the defines related to the spacemanDMM linter (dreamchecker). When running under normal conditions, BYOND will ignore all these
#ifdef SPACEMAN_DMM
#define RETURN_TYPE(X) set SpacemanDMM_return_type = X
#define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
#define UNLINT(X) SpacemanDMM_unlint(X)
#define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X
#define SHOULD_NOT_SLEEP(X)
#define SHOULD_BE_PURE(X)
#define PRIVATE_PROC(X)
#define PROTECTED_PROC(X)
#define VAR_FINAL var/SpacemanDMM_final
#define VAR_PRIVATE var
#define VAR_PROTECTED var
#else
#define RETURN_TYPE(X)
#define SHOULD_CALL_PARENT(X)
#define UNLINT(X) X
#define SHOULD_NOT_OVERRIDE(X)
#define SHOULD_NOT_SLEEP(X)
#define SHOULD_BE_PURE(X)
#define PRIVATE_PROC(X)
#define PROTECTED_PROC(X)
#define VAR_FINAL var
#define VAR_PRIVATE var
#define VAR_PROTECTED var
#endif
+3 -2
View File
@@ -40,10 +40,11 @@
#define R_MOD 8192
#define R_MENTOR 16384
#define R_PROCCALL 32768
#define R_VIEWRUNTIMES 65536
#define R_MAXPERMISSION 32768 //This holds the maximum value for a permission. It is used in iteration, so keep it updated.
#define R_MAXPERMISSION 65536 //This holds the maximum value for a permission. It is used in iteration, so keep it updated.
#define R_HOST 65535
#define R_HOST 131071 // Sum of all permissions to allow easy setting
#define ADMIN_QUE(user,display) "<a href='?_src_=holder;adminmoreinfo=[user.UID()]'>[display]</a>"
#define ADMIN_FLW(user,display) "<a href='?_src_=holder;adminplayerobservefollow=[user.UID()]'>[display]</a>"
+1 -1
View File
@@ -78,7 +78,7 @@
//flags for covering body parts
#define GLASSESCOVERSEYES 1
#define MASKCOVERSEYES 2 // get rid of some of the other retardation in these flags
#define MASKCOVERSEYES 2 // get rid of some of the other mess in these flags
#define HEADCOVERSEYES 4 // feel free to realloc these numbers for other purposes
#define MASKCOVERSMOUTH 8 // on other items, these are just for mask/head
#define HEADCOVERSMOUTH 16
+1
View File
@@ -66,6 +66,7 @@
#define INIT_ORDER_TIMER 1
#define INIT_ORDER_DEFAULT 0
#define INIT_ORDER_AIR -1
#define INIT_ORDER_SUN -2
#define INIT_ORDER_MINIMAP -3
#define INIT_ORDER_ASSETS -4
#define INIT_ORDER_ICON_SMOOTHING -5
+1
View File
@@ -1,4 +1,5 @@
/proc/get_area(atom/A)
RETURN_TYPE(/area)
if(isarea(A))
return A
var/turf/T = get_turf(A)
+12
View File
@@ -570,6 +570,18 @@ world
/proc/BlendRGBasHSV(rgb1, rgb2, amount)
return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount)
//Returns the perceived brightness of a color.
//https://en.wikipedia.org/wiki/Relative_luminance
//https://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
/proc/getLuminance(color)
var/list/RGB = ReadRGB(color)
var/R = RGB[1]
var/G = RGB[2]
var/B = RGB[2]
var/Y = (0.2126 * R) + (0.7152 * G) + (0.0722 * B)
return clamp((Y * 0.01), 0, 1) //Returns the brightness of a color in decimal percentage format. Can multiply light_power by this to receive 100% brightness or a lower brightness. Not a higher brightness.
/proc/HueToAngle(hue)
// normalize hsv in case anything is screwy
if(hue < 0 || hue >= 1536) hue %= 1536
+6 -6
View File
@@ -277,8 +277,8 @@ This is always put in the attack log.
/proc/add_attack_logs(atom/user, target, what_done, custom_level)
if(islist(target)) // Multi-victim adding
var/list/targets = target
for(var/mob/M in targets)
add_attack_logs(user, M, what_done, custom_level)
for(var/t in targets)
add_attack_logs(user, t, what_done, custom_level)
return
var/user_str = key_name_log(user) + COORD(user)
@@ -316,7 +316,7 @@ This is always put in the attack log.
msg_admin_attack("[key_name_admin(user)] vs [key_name_admin(target)]: [what_done]", loglevel)
/proc/do_mob(var/mob/user, var/mob/target, var/time = 30, var/uninterruptible = 0, progress = 1, datum/callback/extra_checks = null)
/proc/do_mob(mob/user, mob/target, time = 30, uninterruptible = 0, progress = 1, list/extra_checks = list())
if(!user || !target)
return 0
var/user_loc = user.loc
@@ -349,7 +349,7 @@ This is always put in the attack log.
drifting = 0
user_loc = user.loc
if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying || check_for_true_callbacks(extra_checks))
. = 0
break
if(progress)
@@ -454,8 +454,8 @@ GLOBAL_LIST_INIT(do_after_once_tracker, list())
/proc/do_after_once_checks(cache_key)
if(GLOB.do_after_once_tracker[cache_key] && GLOB.do_after_once_tracker[cache_key] == DOAFTERONCE_MAGIC)
GLOB.do_after_once_tracker[cache_key] = FALSE
return FALSE
return TRUE
return TRUE
return FALSE
/proc/is_species(A, species_datum)
. = FALSE
+2 -1
View File
@@ -167,7 +167,7 @@
return SOUTH
if(225.6 to 315.5)
return WEST
//returns the north-zero clockwise angle in degrees, given a direction
/proc/dir2angle(var/D)
@@ -212,6 +212,7 @@
if(rights & R_PROCCALL) . += "[seperator]+PROCCALL"
if(rights & R_MOD) . += "[seperator]+MODERATOR"
if(rights & R_MENTOR) . += "[seperator]+MENTOR"
if(rights & R_VIEWRUNTIMES) . += "[seperator]+VIEWRUNTIMES"
return .
/proc/ui_style2icon(ui_style)
+1 -1
View File
@@ -28,4 +28,4 @@ This may require updating to a beta release.
#endif
// Macros that must exist before world.dm
#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat
// #define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat
+13 -1
View File
@@ -179,7 +179,7 @@
var/title = name
if(can_fire)
title = "\[[state_letter()]][title]"
title = "[state_colour()]\[[state_letter()]][title]</font>"
stat(title, statclick.update(msg))
@@ -196,6 +196,18 @@
if(SS_IDLE)
. = " "
/datum/controller/subsystem/proc/state_colour()
switch(state)
if(SS_RUNNING) // If its actively processing, colour it green
. = "<font color='#32a852'>"
if(SS_QUEUED) // If its in the running queue, but delayed, colour it orange
. = "<font color='#fcba03'>"
if(SS_PAUSED, SS_PAUSING) // If its being paused due to lag, colour it red
. = "<font color='#eb4034'>"
if(SS_SLEEPING) // If fire() slept, colour it blue
. = "<font color='#4287f5'>"
if(SS_IDLE) // Leave it default if the SS is idle
. = "<font>"
//could be used to postpone a costly subsystem for (default one) var/cycles, cycles
//for instance, during cpu intensive operations like explosions
/datum/controller/subsystem/proc/postpone(cycles = 1)
+2 -2
View File
@@ -36,7 +36,7 @@ SUBSYSTEM_DEF(events)
E.process()
for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR)
var/list/datum/event_container/EC = event_containers[i]
var/datum/event_container/EC = event_containers[i]
EC.process()
/datum/controller/subsystem/events/proc/event_complete(var/datum/event/E)
@@ -65,7 +65,7 @@ SUBSYSTEM_DEF(events)
log_debug("Event '[EM.name]' has completed at [station_time_timestamp()].")
/datum/controller/subsystem/events/proc/delay_events(var/severity, var/delay)
var/list/datum/event_container/EC = event_containers[severity]
var/datum/event_container/EC = event_containers[severity]
EC.next_event_time += delay
/datum/controller/subsystem/events/proc/Interact(var/mob/living/user)
+7 -7
View File
@@ -10,7 +10,7 @@ SUBSYSTEM_DEF(jobs)
var/list/type_occupations = list() //Dict of all jobs, keys are types
var/list/prioritized_jobs = list() // List of jobs set to priority by HoP/Captain
var/list/id_change_records = list() // List of all job transfer records
var/list/id_change_counter = 1
var/id_change_counter = 1
//Players who need jobs
var/list/unassigned = list()
//Debug info
@@ -39,8 +39,6 @@ SUBSYSTEM_DEF(jobs)
var/datum/job/job = new J()
if(!job)
continue
if(!job.faction in faction)
continue
occupations += job
name_occupations[job.title] = job
type_occupations[J] = job
@@ -138,7 +136,7 @@ SUBSYSTEM_DEF(jobs)
if(flag && !(flag in player.client.prefs.be_special))
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
continue
if(player.mind && job.title in player.mind.restricted_roles)
if(player.mind && (job.title in player.mind.restricted_roles))
Debug("FOC incompatbile with antagonist role, Player: [player]")
continue
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
@@ -180,7 +178,7 @@ SUBSYSTEM_DEF(jobs)
Debug("GRJ player has disability rendering them ineligible for job, Player: [player]")
continue
if(player.mind && job.title in player.mind.restricted_roles)
if(player.mind && (job.title in player.mind.restricted_roles))
Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
continue
@@ -357,7 +355,7 @@ SUBSYSTEM_DEF(jobs)
Debug("DO player has disability rendering them ineligible for job, Player: [player], Job:[job.title]")
continue
if(player.mind && job.title in player.mind.restricted_roles)
if(player.mind && (job.title in player.mind.restricted_roles))
Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
continue
@@ -622,7 +620,9 @@ SUBSYSTEM_DEF(jobs)
if(tgtcard.assignment && tgtcard.assignment == job.title)
jobs_to_formats[job.title] = "disabled" // the job they already have is pre-selected
else if(!job.would_accept_job_transfer_from_player(M))
jobs_to_formats[job.title] = "linkDiscourage" // karma jobs they don't have available are discouraged
jobs_to_formats[job.title] = "linkDiscourage" // jobs which are karma-locked and not unlocked for this player are discouraged
else if((job.title in GLOB.command_positions) && istype(M) && M.client && job.available_in_playtime(M.client))
jobs_to_formats[job.title] = "linkDiscourage" // command jobs which are playtime-locked and not unlocked for this player are discouraged
else if(job.total_positions && !job.current_positions && job.title != "Civilian")
jobs_to_formats[job.title] = "linkEncourage" // jobs with nobody doing them at all are encouraged
else if(job.total_positions >= 0 && job.current_positions >= job.total_positions)
+85
View File
@@ -32,5 +32,90 @@ SUBSYSTEM_DEF(mapping)
return ..()
/datum/controller/subsystem/mapping/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
if(!z_levels || !z_levels.len)
WARNING("No Z levels provided - Not generating ruins")
return
for(var/zl in z_levels)
var/turf/T = locate(1, 1, zl)
if(!T)
WARNING("Z level [zl] does not exist - Not generating ruins")
return
var/list/ruins = potentialRuins.Copy()
var/list/forced_ruins = list() //These go first on the z level associated (same random one by default)
var/list/ruins_availible = list() //we can try these in the current pass
var/forced_z //If set we won't pick z level and use this one instead.
//Set up the starting ruin list
for(var/key in ruins)
var/datum/map_template/ruin/R = ruins[key]
if(R.cost > budget) //Why would you do that
continue
if(R.always_place)
forced_ruins[R] = -1
if(R.unpickable)
continue
ruins_availible[R] = R.placement_weight
while(budget > 0 && (ruins_availible.len || forced_ruins.len))
var/datum/map_template/ruin/current_pick
var/forced = FALSE
if(forced_ruins.len) //We have something we need to load right now, so just pick it
for(var/ruin in forced_ruins)
current_pick = ruin
if(forced_ruins[ruin] > 0) //Load into designated z
forced_z = forced_ruins[ruin]
forced = TRUE
break
else //Otherwise just pick random one
current_pick = pickweight(ruins_availible)
var/placement_tries = PLACEMENT_TRIES
var/failed_to_place = TRUE
var/z_placed = 0
while(placement_tries > 0)
placement_tries--
z_placed = pick(z_levels)
if(!current_pick.try_to_place(forced_z ? forced_z : z_placed,whitelist))
continue
else
failed_to_place = FALSE
break
//That's done remove from priority even if it failed
if(forced)
//TODO : handle forced ruins with multiple variants
forced_ruins -= current_pick
forced = FALSE
if(failed_to_place)
for(var/datum/map_template/ruin/R in ruins_availible)
if(R.id == current_pick.id)
ruins_availible -= R
log_world("Failed to place [current_pick.name] ruin.")
else
budget -= current_pick.cost
if(!current_pick.allow_duplicates)
for(var/datum/map_template/ruin/R in ruins_availible)
if(R.id == current_pick.id)
ruins_availible -= R
if(current_pick.never_spawn_with)
for(var/blacklisted_type in current_pick.never_spawn_with)
for(var/possible_exclusion in ruins_availible)
if(istype(possible_exclusion,blacklisted_type))
ruins_availible -= possible_exclusion
forced_z = 0
//Update the availible list
for(var/datum/map_template/ruin/R in ruins_availible)
if(R.cost > budget)
ruins_availible -= R
log_world("Ruin loader finished with [budget] left to spend.")
/datum/controller/subsystem/mapping/Recover()
flags |= SS_NO_INIT
+2 -1
View File
@@ -223,11 +223,12 @@ SUBSYSTEM_DEF(shuttle)
return 0 //dock successful
/datum/controller/subsystem/shuttle/proc/moveShuttle(shuttleId, dockId, timed)
/datum/controller/subsystem/shuttle/proc/moveShuttle(shuttleId, dockId, timed, mob/user)
var/obj/docking_port/mobile/M = getShuttle(shuttleId)
var/obj/docking_port/stationary/D = getDock(dockId)
if(!M)
return 1
M.last_caller = user // Save the caller of the shuttle for later logging
if(timed)
if(M.request(D))
return 2
+11 -2
View File
@@ -1,19 +1,28 @@
SUBSYSTEM_DEF(sun)
name = "Sun"
wait = 600
flags = SS_NO_TICK_CHECK|SS_NO_INIT
flags = SS_NO_TICK_CHECK
init_order = INIT_ORDER_SUN
var/angle
var/dx
var/dy
var/rate
var/list/solars = list()
/datum/controller/subsystem/sun/PreInit()
/datum/controller/subsystem/sun/Initialize(start_timeofday)
// Lets work out an angle for the "sun" to rotate around the station
angle = rand (0,360) // the station position to the sun is randomised at round start
rate = rand(50,200)/100 // 50% - 200% of standard rotation
if(prob(50)) // same chance to rotate clockwise than counter-clockwise
rate = -rate
// Solar consoles need to load after machines init, so this handles that
for(var/obj/machinery/power/solar_control/SC in solars)
SC.setup()
return ..()
/datum/controller/subsystem/sun/stat_entry(msg)
..("P:[solars.len]")
+1 -1
View File
@@ -624,7 +624,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
else if(H.mind && H.mind.assigned_role in get_all_centcom_jobs())
else if(H.mind && (H.mind.assigned_role in get_all_centcom_jobs()))
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
else
+1 -1
View File
@@ -5,7 +5,7 @@
/// Status traits attached to this datum
var/list/status_traits
var/list/comp_lookup
var/list/signal_procs
var/list/list/datum/callback/signal_procs
var/signal_enabled = FALSE
var/datum_flags = NONE
var/var_edited = FALSE //Warranty void if seal is broken
+2 -2
View File
@@ -30,7 +30,7 @@
affected_mob.emote("stare")
if(prob(2))
affected_mob.emote("drool")
if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't retard you to death now
if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't brainpain you to death now
affected_mob.adjustBrainLoss(2)
if(prob(2))
to_chat(affected_mob, "<span class='danger'>Your try to remember something important...but can't.</span>")
@@ -40,7 +40,7 @@
affected_mob.emote("stare")
if(prob(2))
affected_mob.emote("drool")
if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't retard you to death now
if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't brainpain you to death now
affected_mob.adjustBrainLoss(3)
if(prob(2))
to_chat(affected_mob, "<span class='danger'>Strange buzzing fills your head, removing all thoughts.</span>")
+1 -1
View File
@@ -9,7 +9,7 @@
viable_mobtypes = list(/mob/living/carbon/human)
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
permeability_mod = 0.75
desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of mental retardation, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of dementia, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
severity = HARMFUL
required_organs = list(/obj/item/organ/external/head)
+3 -4
View File
@@ -54,14 +54,13 @@
var/linglink
var/datum/vampire/vampire //vampire holder
var/datum/abductor/abductor //abductor holder
var/datum/devilinfo/devilinfo //devil holder
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
var/datum/mindslaves/som //stands for slave or master...hush..
var/datum/devilinfo/devilinfo //Information about the devil, if any.
var/damnation_type = 0
var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
var/damnation_type = 0
var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
var/hasSoul = TRUE
var/rev_cooldown = 0
@@ -547,7 +546,7 @@
var/mob/def_target = null
var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain)
if(objective&&(objective.type in objective_list) && objective:target)
def_target = objective:target.current
def_target = objective.target.current
possible_targets = sortAtom(possible_targets)
possible_targets += "Free objective"
-1
View File
@@ -22,5 +22,4 @@
/mutable_appearance/clean/New()
. = ..()
alpha = 255
opacity = 1
transform = null
+4 -1
View File
@@ -1,5 +1,5 @@
/datum/outfit
var/name = "Naked"
var/name = "SOMEBODY FORGOT TO SET A NAME, NOTIFY A CODER"
var/collect_not_del = FALSE
var/uniform = null
@@ -33,6 +33,9 @@
var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters
/datum/outfit/naked
name = "Naked"
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
//to be overriden for customization depending on client prefs,species etc
return
+4 -2
View File
@@ -541,7 +541,7 @@
P.attack_self(H) // activate them, display musical notes effect
/datum/outfit/admin/soviet
name = "Soviet Generic"
gloves = /obj/item/clothing/gloves/combat
uniform = /obj/item/clothing/under/soviet
back = /obj/item/storage/backpack/satchel
@@ -771,6 +771,7 @@
apply_to_card(I, H, get_all_accesses(), "Space Explorer")
/datum/outfit/admin/hardsuit
name = "Hardsuit Generic"
back = /obj/item/tank/jetpack/oxygen
mask = /obj/item/clothing/mask/breath
shoes = /obj/item/clothing/shoes/magboots
@@ -823,6 +824,7 @@
/datum/outfit/admin/tournament
name = "Tournament Generic"
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/black
head = /obj/item/clothing/head/helmet/thunderdome
@@ -1100,7 +1102,7 @@
l_hand = null
backpack_contents = list(
/obj/item/storage/box/engineer = 1,
/obj/item/clothing/suit/space/hardsuit/shielded/wizard = 1,
/obj/item/clothing/suit/space/hardsuit/shielded/wizard/arch = 1,
/obj/item/clothing/shoes/magboots = 1,
/obj/item/kitchen/knife/ritual = 1,
/obj/item/clothing/suit/wizrobe/red = 1,
+2 -2
View File
@@ -1,7 +1,7 @@
/datum/radio_frequency
var/frequency as num
var/list/list/obj/devices = list()
var/list/obj/devices = list()
/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null)
var/turf/start_point
@@ -108,7 +108,7 @@
. = "Domestic Animal"
else
. = "Unidentifiable"
//callback used by objects to react to incoming radio signals
/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
return null
+1 -1
View File
@@ -241,7 +241,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
before_cast(targets)
invocation()
if(user && user.ckey)
add_attack_logs(user, null, "cast the spell [name]")
add_attack_logs(user, targets, "cast the spell [name]", ATKLOG_ALL)
spawn(0)
if(charge_type == "recharge" && recharge)
start_recharge()
+1 -1
View File
@@ -95,7 +95,7 @@
if(!marked_item) //linking item to the spell
message = "<span class='warning'>"
for(var/obj/item in hand_items)
if(ABSTRACT in item.flags || NODROP in item.flags)
if((ABSTRACT in item.flags) || (NODROP in item.flags))
continue
marked_item = item
to_chat(M, "<span class='warning'>You begin to focus your very being into the [item.name]...</span>")
+2 -2
View File
@@ -41,7 +41,7 @@
else
message = "<span class='notice'>You must hold the desired item in your hands to mark it for recall.</span>"
else if(marked_item && marked_item in hand_items) //unlinking item to the spell
else if(marked_item && (marked_item in hand_items)) //unlinking item to the spell
message = "<span class='notice'>You remove the mark on [marked_item] to use elsewhere.</span>"
name = "Instant Summons"
marked_item = null
@@ -75,7 +75,7 @@
B.transfer_identity(C)
C.death()
add_attack_logs(target, C, "Magically debrained INTENT: [uppertext(target.a_intent)]")*/
if(C.stomach_contents && item_to_retrieve in C.stomach_contents)
if(C.stomach_contents && (item_to_retrieve in C.stomach_contents))
C.stomach_contents -= item_to_retrieve
for(var/X in C.bodyparts)
var/obj/item/organ/external/part = X
+1 -1
View File
@@ -190,7 +190,7 @@
L.adjustBrainLoss(-3.5)
L.adjustCloneLoss(-1) //Becasue apparently clone damage is the bastion of all health
if(ishuman(L))
var/var/mob/living/carbon/human/H = L
var/mob/living/carbon/human/H = L
for(var/obj/item/organ/external/E in H.bodyparts)
if(prob(10))
E.mend_fracture()
-1
View File
@@ -108,7 +108,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
return desc
/datum/uplink_item/proc/buy(var/obj/item/uplink/hidden/U, var/mob/user)
..()
if(!istype(U))
return 0
+1 -1
View File
@@ -7,7 +7,7 @@
/proc/key_name_helper(whom, include_name, include_link = FALSE, type = null)
if(include_link != FALSE && include_link != TRUE)
log_runtime(EXCEPTION("Key_name was called with an incorrect include_link [include_link]"), src)
log_runtime(EXCEPTION("Key_name was called with an incorrect include_link [include_link]"))
var/mob/M
var/client/C
+4
View File
@@ -125,6 +125,10 @@
add_fingerprint(usr)
return
/obj/machinery/dna_scannernew/Destroy()
eject_occupant()
return ..()
/obj/machinery/dna_scannernew/proc/eject_occupant()
src.go_out()
for(var/obj/O in src)
+1 -1
View File
@@ -30,7 +30,7 @@
* Is the gene active in this mob's DNA?
*/
/datum/dna/gene/proc/is_active(var/mob/M)
return M.active_genes && type in M.active_genes
return M.active_genes && (type in M.active_genes)
// Return 1 if we can activate.
// HANDLE MUTCHK_FORCED HERE!
+1 -1
View File
@@ -175,7 +175,7 @@
var/cword = pick(words)
words.Remove(cword)
var/suffix = copytext(cword,length(cword)-1,length(cword))
while(length(cword)>0 && suffix in list(".",",",";","!",":","?"))
while(length(cword)>0 && (suffix in list(".",",",";","!",":","?")))
cword = copytext(cword,1 ,length(cword)-1)
suffix = copytext(cword,length(cword)-1,length(cword) )
if(length(cword))
-1
View File
@@ -3,7 +3,6 @@
var/interceptname = ""
switch(report)
if(0)
..()
return
if(1)
interceptname = "Level 5-6 Biohazard Response Procedures"
+1 -1
View File
@@ -30,7 +30,7 @@
atmosblock = FALSE
air_update_turf(1)
GLOB.blobs -= src
if(isturf(loc)) //Necessary because Expand() is retarded and spawns a blob and then deletes it
if(isturf(loc)) //Necessary because Expand() is screwed up and spawns a blob and then deletes it
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
return ..()
@@ -18,7 +18,7 @@
if((NOCLONE || SKELETON || HUSK) in target.mutations)
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
return
if(!istype(target) || issmall(target) || NO_DNA in target.dna.species.species_traits)
if(!istype(target) || issmall(target) || (NO_DNA in target.dna.species.species_traits))
to_chat(user, "<span class='warning'>[target] is not compatible with this ability.</span>")
return
if(target.mind.changeling)
+1 -1
View File
@@ -720,7 +720,7 @@ GLOBAL_LIST_EMPTY(teleport_runes)
log_game("Astral Communion rune failed - more than one user")
return list()
var/turf/T = get_turf(src)
if(!user in T.contents)
if(!(user in T.contents))
to_chat(user, "<span class='cultitalic'>You must be standing on top of [src]!</span>")
log_game("Astral Communion rune failed - user not standing on rune")
return list()
+1 -1
View File
@@ -17,7 +17,7 @@
to_chat(world,text)
/datum/game_mode/proc/auto_declare_completion_devils()
/var/text = ""
var/text = ""
if(devils.len)
text += "<br><span class='big'><b>The devils were:</b></span>"
for(var/D in devils)
+1 -1
View File
@@ -24,7 +24,7 @@
var/uplink_contents // the contents of the uplink
/datum/faction/syndicate/proc/assign_objectives(var/datum/mind/traitor)
..()
return
/* ----- Begin defining syndicate factions ------ */
+2 -2
View File
@@ -164,11 +164,11 @@
if(ishuman(M))
if(!M.stat)
surviving_humans++
if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations)
if(M.loc && M.loc.loc && (M.loc.loc.type in escape_locations))
escaped_humans++
if(!M.stat)
surviving_total++
if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations)
if(M.loc && M.loc.loc && (M.loc.loc.type in escape_locations))
escaped_total++
if(M.loc && M.loc.loc && M.loc.loc.type == SSshuttle.emergency.areaInstance.type && SSshuttle.emergency.mode >= SHUTTLE_ENDGAME)
@@ -186,7 +186,7 @@
var/unlock_sound //Sound played when an ability is unlocked
var/uses
/datum/AI_Module/proc/upgrade(mob/living/silicon/AI/AI) //Apply upgrades!
/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI) //Apply upgrades!
return
/datum/AI_Module/large //Big, powerful stuff that can only be used once.
@@ -318,7 +318,7 @@
unlock_text = "<span class='notice'>You establish a power diversion to your turrets, upgrading their health and damage.</span>"
unlock_sound = 'sound/items/rped.ogg'
/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/AI/AI)
/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
for(var/obj/machinery/porta_turret/turret in GLOB.machines)
var/turf/T = get_turf(turret)
if(is_station_level(T.z))
@@ -51,7 +51,7 @@
if(iscarbon(target))
changeNext_move(CLICK_CD_MELEE)
if(heal_cooldown <= world.time && !stat)
var/mob/living/carbon/C = target
var/mob/living/carbon/human/C = target
C.adjustBruteLoss(-5, robotic=1)
C.adjustFireLoss(-5, robotic=1)
C.adjustOxyLoss(-5)
@@ -76,13 +76,17 @@
adjustToxLoss(-1000)
if(istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
var/mob/living/simple_animal/slaughter/demon = src
demon.devoured++
to_chat(kidnapped, "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>")
kidnapped.adjustBruteLoss(1000)
kidnapped.forceMove(src)
demon.consumed_mobs.Add(kidnapped)
if(ishuman(kidnapped))
var/mob/living/carbon/human/H = kidnapped
if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/U = H.w_uniform
U.sensor_mode = SENSOR_OFF
else
kidnapped.ghostize()
qdel(kidnapped)
+4 -2
View File
@@ -51,8 +51,7 @@ GLOBAL_VAR(bomb_set)
GLOB.bomb_set = 1 //So long as there is one nuke timing, it means one nuke is armed.
timeleft = max(timeleft - 2, 0) // 2 seconds per process()
if(timeleft <= 0)
spawn
explode()
INVOKE_ASYNC(src, .proc/explode)
SSnanoui.update_uis(src)
return
@@ -347,6 +346,9 @@ GLOBAL_VAR(bomb_set)
/obj/machinery/nuclearbomb/blob_act(obj/structure/blob/B)
if(timing == -1.0)
return
if(timing) //boom
INVOKE_ASYNC(src, .proc/explode)
return
qdel(src)
/obj/machinery/nuclearbomb/tesla_act(power, explosive)
+1 -1
View File
@@ -50,7 +50,7 @@
var/turf/location = get_turf(E.loc)
var/area/escape_zone = SSshuttle.emergency.areaInstance
if(E.stat != DEAD && location in escape_zone) // Escapee Scores
if(E.stat != DEAD && (location in escape_zone)) // Escapee Scores
cash_score = get_score_container_worth(E)
if(cash_score > GLOB.score_richestcash)
+1 -1
View File
@@ -280,7 +280,7 @@
SH.mind.transfer_to(C)
if(iscultist(C))
var/datum/action/innate/cultcomm/CC = new()
CC.Grant(C) //We have to grant the cult comms again because they're lost during the mind transfer.
CC.Grant(C) //We have to grant the cult comms again because they're lost during the mind transfer.
qdel(T)
qdel(SH)
to_chat(C, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
+1 -1
View File
@@ -448,7 +448,7 @@
//Weapons and Armors
/datum/spellbook_entry/item/battlemage
name = "Battlemage Armour"
desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted."
desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted. Despite appearance it is NOT spaceproof."
item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard
limit = 1
category = "Weapons and Armors"
+3 -6
View File
@@ -12,9 +12,6 @@
var/department_flag = 0
var/department_head = list()
//Players will be allowed to spawn in as jobs that are set to "Station"
var/list/faction = list("Station")
//How many players can be this job
var/total_positions = 0
@@ -172,8 +169,8 @@
if(box && H.dna.species.speciesbox)
box = H.dna.species.speciesbox
if(allow_loadout && H.client && (H.client.prefs.gear && H.client.prefs.gear.len))
for(var/gear in H.client.prefs.gear)
if(allow_loadout && H.client && (H.client.prefs.loadout_gear && H.client.prefs.loadout_gear.len))
for(var/gear in H.client.prefs.loadout_gear)
var/datum/gear/G = GLOB.gear_datums[gear]
if(G)
var/permitted = FALSE
@@ -211,7 +208,7 @@
if(gear_leftovers.len)
for(var/datum/gear/G in gear_leftovers)
var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.gear[G.display_name]))
var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.loadout_gear[G.display_name]))
if(istype(placed_in))
if(isturf(placed_in))
to_chat(H, "<span class='notice'>Placing [G.display_name] on [placed_in]!</span>")
+1 -1
View File
@@ -357,7 +357,7 @@
if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter))
return O:id_tag in sensors
/obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, link/context)
/obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, context)
sensors[O:id_tag] = reject_bad_name(clean_input(user, "Choose a sensor label:", "Sensor Label"), allow_numbers=1)
return 1
+2 -6
View File
@@ -34,9 +34,8 @@
var/in_use_lights = 0 // TO BE IMPLEMENTED
var/toggle_sound = 'sound/items/wirecutter.ogg'
/obj/machinery/camera/New()
..()
/obj/machinery/camera/Initialize()
. = ..()
wires = new(src)
assembly = new(src)
assembly.state = 4
@@ -45,9 +44,6 @@
GLOB.cameranet.cameras += src
GLOB.cameranet.addCamera(src)
/obj/machinery/camera/Initialize()
..()
if(is_station_level(z) && prob(3) && !start_active)
toggle_cam(null, FALSE)
wires.CutAll()
+24 -10
View File
@@ -4,7 +4,19 @@
//Potential replacement for genetics revives or something I dunno (?)
#define CLONE_BIOMASS 150
#define BIOMASS_MEAT_AMOUNT 50
#define BIOMASS_BASE_AMOUNT 50 // How much biomass a BIOMASSABLE item gives the cloning pod
// Not a comprehensive list: Further PRs should add appropriate items here.
// Meat as usual, monstermeat covers goliath, xeno, spider, bear meat
GLOBAL_LIST_INIT(cloner_biomass_items, list(\
/obj/item/reagent_containers/food/snacks/meat,\
/obj/item/reagent_containers/food/snacks/monstermeat,
/obj/item/reagent_containers/food/snacks/carpmeat,
/obj/item/reagent_containers/food/snacks/salmonmeat,
/obj/item/reagent_containers/food/snacks/catfishmeat,
/obj/item/reagent_containers/food/snacks/tofurkey))
#define MINIMUM_HEAL_LEVEL 40
#define CLONE_INITIAL_DAMAGE 190
#define BRAIN_INITIAL_DAMAGE 90 // our minds are too feeble for 190
@@ -17,6 +29,7 @@
icon = 'icons/obj/cloning.dmi'
icon_state = "pod_0"
req_access = list(ACCESS_GENETICS) //For premature unlocking.
var/mob/living/carbon/human/occupant
var/heal_level //The clone is released once its health reaches this level.
var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine.
@@ -302,13 +315,14 @@
attempting = 0
return 1
//Grow clones to maturity then kick them out. FREELOADERS
//Grow clones to maturity then kick them out. FREELOADERS
/obj/machinery/clonepod/process()
var/show_message = 0
for(var/obj/item/reagent_containers/food/snacks/meat/meat in range(1, src))
qdel(meat)
biomass += BIOMASS_MEAT_AMOUNT
show_message = 1
var/show_message = FALSE
for(var/obj/item/item in range(1, src))
if(is_type_in_list(item, GLOB.cloner_biomass_items))
qdel(item)
biomass += BIOMASS_BASE_AMOUNT
show_message = TRUE
if(show_message)
visible_message("[src] sucks in and processes the nearby biomass.")
@@ -381,11 +395,11 @@
to_chat(user, "<span class='notice'>You force an emergency ejection.</span>")
go_out()
//Removing cloning pod biomass
else if(istype(I, /obj/item/reagent_containers/food/snacks/meat))
// A user can feed in biomass sources manually.
else if(is_type_in_list(I, GLOB.cloner_biomass_items))
if(user.drop_item())
to_chat(user, "<span class='notice'>[src] processes [I].</span>")
biomass += BIOMASS_MEAT_AMOUNT
biomass += BIOMASS_BASE_AMOUNT
qdel(I)
else
return ..()
+1 -1
View File
@@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(minor_air_alarms)
/obj/machinery/computer/atmos_alert/New()
..()
SSalarms.atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon)
SSalarms.atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/.proc/update_icon)
/obj/machinery/computer/atmos_alert/Destroy()
SSalarms.atmosphere_alarm.unregister(src)
+1 -1
View File
@@ -133,7 +133,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(!istype(id_card))
return ..()
if(!scan && ACCESS_CHANGE_IDS in id_card.access)
if(!scan && (ACCESS_CHANGE_IDS in id_card.access))
user.drop_item()
id_card.loc = src
scan = id_card
+3 -3
View File
@@ -359,12 +359,12 @@
if(scan_brain && !can_brainscan())
return
if(isnull(subject) || (!(ishuman(subject))) || (!subject.dna))
if(isalien(subject))
if(isalien(subject))
scantemp = "<span class=\"bad\">Error: Xenomorphs are not scannable.</span>"
SSnanoui.update_uis(src)
return
// can add more conditions for specific non-human messages here
else
else
scantemp = "<span class=\"bad\">Error: Subject species is not scannable.</span>"
SSnanoui.update_uis(src)
return
@@ -372,7 +372,7 @@
var/obj/item/organ/internal/brain/Brn = subject.get_int_organ(/obj/item/organ/internal/brain)
if(istype(Brn))
if(NO_SCAN in Brn.dna.species.species_traits)
scantemp = "<span class=\"bad\">Error: [subject.dna.species.name_plural] are not scannable.</span>"
scantemp = "<span class=\"bad\">Error: [Brn.dna.species.name_plural] are not scannable.</span>"
SSnanoui.update_uis(src)
return
if(!subject.get_int_organ(/obj/item/organ/internal/brain))
@@ -499,7 +499,6 @@
if(!frequency) return
var/datum/signal/status_signal = new
status_signal.source = src
status_signal.transmission_method = 1
status_signal.data["command"] = command
@@ -507,13 +506,13 @@
if("message")
status_signal.data["msg1"] = data1
status_signal.data["msg2"] = data2
log_admin("STATUS: [user] set status screen message with [src]: [data1] [data2]")
log_admin("STATUS: [user] set status screen message: [data1] [data2]")
//message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]")
if("alert")
status_signal.data["picture_state"] = data1
spawn(0)
frequency.post_signal(src, status_signal)
frequency.post_signal(null, status_signal)
/obj/machinery/computer/communications/Destroy()
@@ -20,7 +20,7 @@
/obj/machinery/computer/station_alert/New()
..()
alarm_monitor = new monitor_type(src)
alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon)
alarm_monitor.register(src, /obj/machinery/computer/station_alert/.proc/update_icon)
/obj/machinery/computer/station_alert/Destroy()
alarm_monitor.unregister(src)
+5 -5
View File
@@ -276,7 +276,7 @@ About the new airlock wires panel:
if(usr)
shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])")
usr.create_attack_log("<font color='red'>Electrified the [name] at [x] [y] [z]</font>")
add_attack_logs(usr, src, "Electrified")
add_attack_logs(usr, src, "Electrified", ATKLOG_ALL)
else
shockedby += text("\[[time_stamp()]\] - EMP)")
message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]."
@@ -764,7 +764,7 @@ About the new airlock wires panel:
else if(activate) //electrify door for 30 seconds
shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")
usr.create_attack_log("<font color='red'>Electrified the [name] at [x] [y] [z]</font>")
add_attack_logs(usr, src, "Electrified")
add_attack_logs(usr, src, "Electrified", ATKLOG_ALL)
to_chat(usr, "The door is now electrified for thirty seconds.")
electrify(30)
if("electrify_permanently")
@@ -776,7 +776,7 @@ About the new airlock wires panel:
else if(activate)
shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")
usr.create_attack_log("<font color='red'>Electrified the [name] at [x] [y] [z]</font>")
add_attack_logs(usr, src, "Electrified")
add_attack_logs(usr, src, "Electrified", ATKLOG_ALL)
to_chat(usr, "The door is now electrified.")
electrify(-1)
if("open")
@@ -1003,7 +1003,7 @@ About the new airlock wires panel:
"<span class='notice'>You begin [welded ? "unwelding":"welding"] the airlock...</span>", \
"<span class='italics'>You hear welding.</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/weld_checks, I, user))))
if(I.use_tool(src, user, 40, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/weld_checks, I, user)))
if(!density && !welded)
return
welded = !welded
@@ -1014,7 +1014,7 @@ About the new airlock wires panel:
user.visible_message("[user] is welding the airlock.", \
"<span class='notice'>You begin repairing the airlock...</span>", \
"<span class='italics'>You hear welding.</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/weld_checks, I, user))))
if(I.use_tool(src, user, 40, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/weld_checks, I, user)))
obj_integrity = max_integrity
stat &= ~BROKEN
user.visible_message("[user.name] has repaired [src].", \
@@ -12,5 +12,5 @@
for(var/obj/machinery/door/D in locate(x,y,z))
if(!istype(D, /obj/machinery/door/window) && D.density)
return 0
//There are no false wall checks because that would be fucking retarded
//There are no false wall checks because that would be foolish
return 1
+1 -1
View File
@@ -95,7 +95,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
to_chat(user, "<span class='notice'>[src] is already printing something, please wait.</span>")
return
atom_say("<span class='notice'>Printing explosive log. Standby...</span>")
addtimer(CALLBACK(src, .print), 50)
addtimer(CALLBACK(src, .proc/print), 50)
/obj/machinery/doppler_array/proc/print()
visible_message("<span class='notice'>[src] prints a piece of paper!</span>")
+1 -1
View File
@@ -193,5 +193,5 @@
/obj/machinery/computer/guestpass/hop/get_changeable_accesses()
. = ..()
if(. && ACCESS_CHANGE_IDS in .)
if(. && (ACCESS_CHANGE_IDS in .))
return get_all_accesses()
+2 -2
View File
@@ -13,8 +13,8 @@
lasercolor = "b"
installation = /obj/item/gun/energy/laser/tag/blue
/obj/machinery/porta_turret/tag/New()
..()
/obj/machinery/porta_turret/tag/Initialize(mapload)
. = ..()
icon_state = "[lasercolor]grey_target_prism"
/obj/machinery/porta_turret/tag/weapon_setup(var/obj/item/gun/energy/E)
+6 -6
View File
@@ -87,8 +87,8 @@
lethal = 1
installation = /obj/item/gun/energy/laser
/obj/machinery/porta_turret/New()
..()
/obj/machinery/porta_turret/Initialize(mapload)
. = ..()
if(req_access && req_access.len)
req_access.Cut()
req_one_access = list(ACCESS_SECURITY, ACCESS_HEADS)
@@ -105,8 +105,8 @@
QDEL_NULL(spark_system)
return ..()
/obj/machinery/porta_turret/centcom/New()
..()
/obj/machinery/porta_turret/centcom/Initialize(mapload)
. = ..()
if(req_one_access && req_one_access.len)
req_one_access.Cut()
req_access = list(ACCESS_CENT_SPECOPS)
@@ -1015,8 +1015,8 @@ GLOBAL_LIST_EMPTY(turret_icons)
depotarea.declare_started()
return ..(target)
/obj/machinery/porta_turret/syndicate/New()
..()
/obj/machinery/porta_turret/syndicate/Initialize(mapload)
. = ..()
if(req_one_access && req_one_access.len)
req_one_access.Cut()
req_access = list(ACCESS_SYNDICATE)
+1 -1
View File
@@ -78,7 +78,7 @@
try_detonate(TRUE)
//Counter terrorists win
else if(!active || defused)
if(defused && payload in src)
if(defused && (payload in src))
payload.defuse()
countdown.stop()
STOP_PROCESSING(SSfastprocess, src)
@@ -166,7 +166,7 @@
return istype(O,/obj/machinery/telecomms)
/obj/machinery/telecomms/isLinkedWith(var/obj/O)
return O != null && O in links
return O != null && (O in links)
/obj/machinery/telecomms/getLink(var/idx)
return (idx >= 1 && idx <= links.len) ? links[idx] : null
@@ -363,11 +363,13 @@
if(P)
if(P.buffer && P.buffer != src)
if(!(src in P.buffer:links))
P.buffer:links.Add(src)
if(istype(P, /obj/machinery/telecomms))
var/obj/machinery/telecomms/TCM = P.buffer
if(!(src in TCM.links))
TCM.links.Add(src)
if(!(P.buffer in src.links))
src.links.Add(P.buffer)
if(!(P.buffer in src.links))
src.links.Add(P.buffer)
temp = "<font color = #666633>-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-</font>"
+2 -2
View File
@@ -436,7 +436,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
// Arrays
if(href_list["create_item"])
if(href_list["array"] && href_list["array"] in arrays)
if(href_list["array"] && (href_list["array"] in arrays))
if(requires_unlock[href_list["array"]] && !source.unlocked)
return
var/new_value = clean_input(user, "Provide a value for the new index.", "New Index")
@@ -448,7 +448,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
log_action(user, "updated [href_list["array"]] - new value [new_value]", TRUE)
if(href_list["delete_item"])
if(href_list["array"] && href_list["array"] in arrays)
if(href_list["array"] && (href_list["array"] in arrays))
if(requires_unlock[href_list["array"]] && !source.unlocked)
return
var/list/array = vars[href_list["array"]]
@@ -93,7 +93,7 @@ GLOBAL_LIST_EMPTY(telecomms_list)
/obj/machinery/telecomms/proc/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from)
// receive information from linked machinery
..()
return
/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal)
// return 1 if found, 0 if not found
+3 -3
View File
@@ -540,7 +540,7 @@
/obj/mecha/attack_alien(mob/living/user)
log_message("Attack by alien. Attacker - [user].", color = "red")
log_message("Attack by alien. Attacker - [user].", red=TRUE)
playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE)
attack_generic(user, 15, BRUTE, "melee", 0)
@@ -1094,7 +1094,7 @@
to_chat(user, "<span class='warning'>You stop entering the exosuit!</span>")
/obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob)
if(H && H.client && H in range(1))
if(H && H.client && (H in range(1)))
occupant = H
H.stop_pulling()
H.forceMove(src)
@@ -1141,7 +1141,7 @@
return 0
/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc,mob/user)
if(mmi_as_oc && user in range(1))
if(mmi_as_oc && (user in range(1)))
if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
to_chat(user, "Consciousness matrix not detected.")
return 0
+1 -1
View File
@@ -139,7 +139,7 @@
..()
if(href_list["drop_from_cargo"])
var/obj/O = locate(href_list["drop_from_cargo"])
if(O && O in cargo)
if(O && (O in cargo))
occupant_message("<span class='notice'>You unload [O].</span>")
O.loc = get_turf(src)
cargo -= O
-1
View File
@@ -1,7 +1,6 @@
//TODO: Flash range does nothing currently
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0, silent = 0, smoke = 1, cause = null, breach = TRUE)
src = null //so we don't abort once src is deleted
epicenter = get_turf(epicenter)
// Archive the uncapped explosion for the doppler array
@@ -138,7 +138,7 @@
log_admin("[key_name(user)] EMPd a camera with a laser pointer")
user.create_attack_log("[key_name(user)] EMPd a camera with a laser pointer")
add_attack_logs(user, C, "EMPd with [src]")
add_attack_logs(user, C, "EMPd with [src]", ATKLOG_ALL)
else
outmsg = "<span class='info'>You missed the lens of [C] with [src].</span>"
@@ -103,6 +103,13 @@
/obj/item/radio/headset/syndicate/alt/syndteam
ks1type = /obj/item/encryptionkey/syndteam
/obj/item/radio/headset/syndicate/alt/lavaland
name = "syndicate lavaland headset"
/obj/item/radio/headset/syndicate/alt/lavaland/New()
. = ..()
set_frequency(SYND_FREQ)
/obj/item/radio/headset/binary
origin_tech = "syndicate=3"
ks1type = /obj/item/encryptionkey/binary
@@ -458,7 +458,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
R.receive_signal(signal)
// Receiving code can be located in Telecommunications.dm
return signal.data["done"] && position.z in signal.data["level"]
return signal.data["done"] && (position.z in signal.data["level"])
/* ###### Intercoms and station-bounced radios ###### */
@@ -510,7 +510,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
sleep(rand(10,25)) // wait a little...
if(signal.data["done"] && position.z in signal.data["level"])
if(signal.data["done"] && (position.z in signal.data["level"]))
// we're done here.
return 1
+1 -1
View File
@@ -212,7 +212,7 @@ REAGENT SCANNER
if(H.getBrainLoss() >= 100)
to_chat(user, "<span class='warning'>Subject is brain dead.</span>")
else if(H.getBrainLoss() >= 60)
to_chat(user, "<span class='warning'>Severe brain damage detected. Subject likely to have mental retardation.</span>")
to_chat(user, "<span class='warning'>Severe brain damage detected. Subject likely to have dementia.</span>")
else if(H.getBrainLoss() >= 10)
to_chat(user, "<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
else
@@ -168,7 +168,6 @@ GLOBAL_LIST_EMPTY(world_uplinks)
to_chat(user, "<span class='notice'>[I] refunded.</span>")
qdel(I)
return
..()
// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it.
/* How to create an uplink in 3 easy steps!
+1 -1
View File
@@ -222,7 +222,7 @@
var/input_flag = input(user, "Choose a flag to disguise as.", "Choose a flag.") in show_flag
if(user && src in user.contents)
if(user && (src in user.contents))
var/obj/item/flag/chosen_flag = flag[input_flag]
@@ -57,4 +57,4 @@
// Used in a callback that is passed by use_tool into do_after call. Do not override, do not call manually.
/obj/item/proc/tool_check_callback(mob/living/user, atom/target, amount, datum/callback/extra_checks)
return tool_use_check(user, amount) && (!extra_checks || extra_checks.Invoke())
return tool_use_check(user, amount) && (extra_checks && !extra_checks.Invoke())
+2 -1
View File
@@ -50,7 +50,8 @@
/obj/item/weldingtool/process()
var/turf/T = get_turf(src)
T.hotspot_expose(2500, 5)
if(T) // Implants for instance won't find a turf
T.hotspot_expose(2500, 5)
if(prob(5))
remove_fuel(1)
..()
@@ -143,9 +143,8 @@ AI MODULES
target.set_zeroth_law(law)
GLOB.lawchanges.Add("The law specified [targetName]")
else
to_chat(target, "[sender.real_name] attempted to modify your zeroth law.")// And lets them know that someone tried. --NeoFite
to_chat(target, "It would be in your best interest to play along with [sender.real_name] that [law]")
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to modify your zeroth law.</span>")// And lets them know that someone tried. --NeoFite
to_chat(target, "<span class='bnotice'>It would be in your best interest to play along with [sender.real_name] that [law]</span>")
GLOB.lawchanges.Add("The law specified [targetName], but the AI's existing law 0 cannot be overridden.")
/******************** ProtectStation ********************/
@@ -222,11 +221,11 @@ AI MODULES
log_law_changes(target, sender)
if(!is_special_character(target))
target.set_zeroth_law("")
target.clear_zeroth_law()
target.laws.clear_supplied_laws()
target.laws.clear_ion_laws()
to_chat(target, "[sender.real_name] attempted to reset your laws using a reset module.")
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to reset your laws using a reset module.</span>")
target.show_laws()
/******************** Purge ********************/
@@ -238,8 +237,8 @@ AI MODULES
/obj/item/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
if(!is_special_character(target))
target.set_zeroth_law("")
to_chat(target, "[sender.real_name] attempted to wipe your laws using a purge module.")
target.clear_zeroth_law()
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to wipe your laws using a purge module.</span>")
target.clear_supplied_laws()
target.clear_ion_laws()
target.clear_inherent_laws()
@@ -32,7 +32,7 @@
if(PA)
qdel(PA)
else
PA = new(src)
PA = new(user, src)
user.put_in_hands(PA)
/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user)
@@ -55,7 +55,7 @@
var/obj/structure/chrono_field/field = null
var/turf/startpos = null
/obj/item/gun/energy/chrono_gun/New(var/obj/item/chrono_eraser/T)
/obj/item/gun/energy/chrono_gun/Initialize(mapload, obj/item/chrono_eraser/T)
. = ..()
if(istype(T))
TED = T
+1 -1
View File
@@ -106,7 +106,7 @@
P = new(T, whatpipe, iconrotation) //Make the pipe, BUT WAIT! There's more!
if(!iconrotation && P.is_bent_pipe()) //Automatically rotates dispensed pipes if the user selected auto-rotation
P.dir = turn(user.dir, 135)
else if(!iconrotation && P.pipe_type in list(PIPE_CONNECTOR, PIPE_UVENT, PIPE_SCRUBBER, PIPE_HEAT_EXCHANGE, PIPE_CAP, PIPE_SUPPLY_CAP, PIPE_SCRUBBERS_CAP, PIPE_INJECTOR, PIPE_PASV_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction
else if(!iconrotation && (P.pipe_type in list(PIPE_CONNECTOR, PIPE_UVENT, PIPE_SCRUBBER, PIPE_HEAT_EXCHANGE, PIPE_CAP, PIPE_SUPPLY_CAP, PIPE_SCRUBBERS_CAP, PIPE_INJECTOR, PIPE_PASV_VENT))) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction
P.dir = turn(user.dir, -180)
else if(iconrotation && P.is_bent_pipe()) //If user selected a rotation and the pipe is bent
P.dir = turn(iconrotation, -45)
+2 -2
View File
@@ -192,13 +192,13 @@
/obj/proc/multitool_menu(var/mob/user,var/obj/item/multitool/P)
return "<b>NO MULTITOOL_MENU!</b>"
/obj/proc/linkWith(var/mob/user, var/obj/buffer, var/link/context)
/obj/proc/linkWith(var/mob/user, var/obj/buffer, var/context)
return 0
/obj/proc/unlinkFrom(var/mob/user, var/obj/buffer)
return 0
/obj/proc/canLink(var/obj/O, var/link/context)
/obj/proc/canLink(var/obj/O, var/context)
return 0
/obj/proc/isLinkedWith(var/obj/O)
@@ -36,7 +36,7 @@
depotarea.armory_locker_looted()
/obj/structure/closet/secure_closet/syndicate/depot/attack_animal(mob/M)
if(isanimal(M) && "syndicate" in M.faction)
if(isanimal(M) && ("syndicate" in M.faction))
to_chat(M, "<span class='warning'>The [src] resists your attack!</span>")
return
return ..()
+1 -1
View File
@@ -25,7 +25,7 @@ GLOBAL_LIST_EMPTY(safes)
var/number_of_tumblers = 3 // The amount of tumblers that will be generated.
var/list/tumblers = list() // The list of tumbler dial positions that need to be hit.
var/list/current_tumbler_index = 1 // The index in the tumblers list of the tumbler dial position that needs to be hit.
var/current_tumbler_index = 1 // The index in the tumblers list of the tumbler dial position that needs to be hit.
var/space = 0 // The combined w_class of everything in the safe.
var/maxspace = 24 // The maximum combined w_class of stuff in the safe.
+1 -1
View File
@@ -169,7 +169,7 @@
/obj/structure/sign/kiddieplaque
name = "AI developers plaque"
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"."
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child's eyes are crossed, and is drooling. Beneath the image, someone has scratched the word \"PACKETS\"."
icon_state = "kiddieplaque"
/obj/structure/sign/atmosplaque
@@ -38,7 +38,7 @@
if(pod.contents.len)
to_chat(AM, "<span class=The pod is already occupied.</span>")
return
else if(!pod.moving && pod.dir in directions())
else if(!pod.moving && (pod.dir in directions()))
AM.forceMove(pod)
return
@@ -47,7 +47,7 @@
/obj/structure/transit_tube/station/attack_hand(mob/user as mob)
if(!pod_moving)
for(var/obj/structure/transit_tube_pod/pod in loc)
if(!pod.moving && pod.dir in directions())
if(!pod.moving && (pod.dir in directions()))
if(icon_state == "closed")
open_animation()
@@ -100,7 +100,7 @@
/obj/structure/transit_tube/station/proc/launch_pod()
for(var/obj/structure/transit_tube_pod/pod in loc)
if(!pod.moving && pod.dir in directions())
if(!pod.moving && (pod.dir in directions()))
spawn(5)
pod_moving = 1
close_animation()
+5 -5
View File
@@ -254,7 +254,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
if(!can_be_reached(user))
return
to_chat(user, "<span class='notice'>You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/check_state_and_anchored, state, anchored))))
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
state = (state == WINDOW_OUT_OF_FRAME ? WINDOW_IN_FRAME : WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You pry the window [state == WINDOW_IN_FRAME ? "into":"out of"] the frame.</span>")
@@ -268,20 +268,20 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
if(reinf)
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/check_state_and_anchored, state, anchored))))
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
else if(state == WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/check_state_and_anchored, state, anchored))))
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
anchored = !anchored
update_nearby_icons()
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
else //if we're not reinforced, we don't need to check or update state
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/check_anchored, anchored))))
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
return
anchored = !anchored
air_update_turf(TRUE)
@@ -297,7 +297,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
if(!can_be_reached(user))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = list(CALLBACK(src, .proc/check_state_and_anchored, state, anchored))))
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount)
G.add_fingerprint(user)
+12 -7
View File
@@ -35,7 +35,12 @@
assume_air(lowertemp)
qdel(hotspot)
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER, infinite = FALSE) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost
/*
* Makes a turf slippery using the given parameters
* @param wet_setting The type of slipperyness used
* @param time Time the turf is slippery. If null it will pick a random time between 790 and 820 ticks. If INFINITY then it won't dry up ever
*/
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER, time = null) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost
if(wet >= wet_setting)
return
wet = wet_setting
@@ -55,13 +60,13 @@
else
wet_overlay = image('icons/effects/water.dmi', src, "wet_static")
overlays += wet_overlay
if(!infinite)
spawn(rand(790, 820)) // Purely so for visual effect
if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all.
return
MakeDry(wet_setting)
if(time == INFINITY)
return
if(!time)
time = rand(790, 820)
addtimer(CALLBACK(src, .proc/MakeDry, wet_setting), time)
/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER)
/turf/simulated/MakeDry(wet_setting = TURF_WET_WATER)
if(wet > wet_setting)
return
wet = TURF_DRY
+1 -1
View File
@@ -186,7 +186,7 @@
/turf/simulated/floor/mineral/bananium/lubed/Initialize(mapload)
. = ..()
MakeSlippery(TURF_WET_LUBE, TRUE)
MakeSlippery(TURF_WET_LUBE, INFINITY)
/turf/simulated/floor/mineral/bananium/lubed/pry_tile(obj/item/C, mob/user, silent = FALSE) //I want to get off Mr Honk's Wild Ride
if(ishuman(user))
@@ -118,7 +118,7 @@
/turf/simulated/floor/lubed/Initialize(mapload)
. = ..()
MakeSlippery(TURF_WET_LUBE, TRUE)
MakeSlippery(TURF_WET_LUBE, INFINITY)
/turf/simulated/floor/lubed/pry_tile(obj/item/C, mob/user, silent = FALSE) //I want to get off Mr Honk's Wild Ride
if(ishuman(user))
+2 -2
View File
@@ -104,7 +104,7 @@
broken = FALSE
update_icon()
/turf/simulated/floor/plating/proc/remove_plating(mob/user)
/turf/simulated/floor/plating/remove_plating(mob/user)
if(baseturf == /turf/space)
ReplaceWithLattice()
else
@@ -353,7 +353,7 @@
/turf/simulated/floor/plating/ice/Initialize(mapload)
. = ..()
MakeSlippery(TURF_WET_PERMAFROST, TRUE)
MakeSlippery(TURF_WET_PERMAFROST, INFINITY)
/turf/simulated/floor/plating/ice/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
+2 -1
View File
@@ -139,7 +139,7 @@
P.setAngle(new_angle_s)
return TRUE
/turf/simulated/wall/proc/dismantle_wall(devastated = 0, explode = 0)
/turf/simulated/wall/dismantle_wall(devastated = FALSE, explode = FALSE)
if(devastated)
devastate_wall()
else
@@ -156,6 +156,7 @@
O.forceMove(src)
ChangeTurf(/turf/simulated/floor/plating)
return TRUE
/turf/simulated/wall/proc/break_wall()
new sheet_type(src, sheet_amount)
+1
View File
@@ -109,6 +109,7 @@
P.roll_and_drop(src)
else
O.forceMove(src)
return TRUE
/turf/simulated/wall/clockwork/devastate_wall()
for(var/i in 1 to 2)
@@ -43,7 +43,7 @@
update_icon()
to_chat(user, "<span class='notice'>You press firmly on the cover, dislodging it.</span>")
return
else if(RWALL_SUPPORT_RODS && istype(I, /obj/item/gun/energy/plasmacutter))
else if(d_state == RWALL_SUPPORT_RODS && istype(I, /obj/item/gun/energy/plasmacutter))
to_chat(user, "<span class='notice'>You begin slicing through the support rods...</span>")
if(I.use_tool(src, user, 70, volume = I.tool_volume) && d_state == RWALL_SUPPORT_RODS)
d_state = RWALL_SHEATH
@@ -132,11 +132,11 @@
to_chat(user, "<span class='notice'>You pry off the cover.</span>")
if(RWALL_SHEATH)
to_chat(user, "<span class='notice'>You struggle to pry off the outer sheath...</span>")
if(!I.use_tool(src, user, 100, volume = I.tool_volume) || d_state != RWALL_SHEATH)
if(!I.use_tool(src, user, 100, volume = I.tool_volume))
return
to_chat(user, "<span class='notice'>You pry off the outer sheath.</span>")
dismantle_wall()
return
if(dismantle_wall())
to_chat(user, "<span class='notice'>You pry off the outer sheath.</span>")
if(RWALL_BOLTS)
to_chat(user, "<span class='notice'>You start to pry the cover back into place...</span>")
playsound(src, I.usesound, 100, 1)
@@ -199,6 +199,9 @@
to_chat(user, "<span class='notice'>You tighten the bolts anchoring the support rods.</span>")
update_icon()
/turf/simulated/wall/r_wall/try_decon(obj/item/I, mob/user, params) //Plasma cutter only works in the deconstruction steps!
return FALSE
/turf/simulated/wall/r_wall/try_destroy(obj/item/I, mob/user, params)
if(istype(I, /obj/item/pickaxe/drill/diamonddrill))
to_chat(user, "<span class='notice'>You begin to drill though the wall...</span>")
+10
View File
@@ -180,6 +180,9 @@
if(L)
qdel(L)
/turf/proc/dismantle_wall(devastated = FALSE, explode = FALSE)
return
/turf/proc/TerraformTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE)
return ChangeTurf(path, defer_change, keep_icon, ignore_air)
@@ -292,6 +295,9 @@
ChangeTurf(baseturf)
new /obj/structure/lattice(locate(x, y, z))
/turf/proc/remove_plating(mob/user)
return
/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N
//Useful to batch-add creatures to the list.
for(var/mob/living/M in src)
@@ -309,6 +315,10 @@
for(var/atom/movable/AM in contents)
AM.get_spooked()
// Defined here to avoid runtimes
/turf/proc/MakeDry(wet_setting = TURF_WET_WATER)
return
/turf/proc/burn_down()
return
+1
View File
@@ -44,6 +44,7 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons
if("mod") rights |= R_MOD
if("mentor") rights |= R_MENTOR
if("proccall") rights |= R_PROCCALL
if("viewruntimes") rights |= R_VIEWRUNTIMES
GLOB.admin_ranks[rank] = rights
previous_rights = rights

Some files were not shown because too many files have changed in this diff Show More