WIP fix of this PR

This commit is contained in:
Aronai Sieyes
2021-06-21 19:29:43 -04:00
parent 385fa640af
commit 85c31e9fda
70 changed files with 1878 additions and 4962 deletions
@@ -1,5 +1,3 @@
#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
/obj/machinery/atmospherics/pipeturbine
name = "turbine"
desc = "A gas turbine. Converting pressure into energy since 1884."
+1 -2
View File
@@ -7,7 +7,7 @@
#define COLOR_MAROON "#800000"
#define COLOR_PURPLE "#800080"
#define COLOR_VIOLET "#9933ff"
#define COLOR_OLIVE "#808000"
#define COLOR_OLIVE "#52613b" // VOREStation Edit
#define COLOR_BROWN_ORANGE "#824b28"
#define COLOR_DARK_ORANGE "#b95a00"
#define COLOR_GRAY40 "#666666"
@@ -91,7 +91,6 @@
#define COLOR_DARK_TEAL "#2db5b5"
#define COLOR_LIGHT_VIOLET "#e7bfff"
#define COLOR_SAN_MARINO_BLUE "#4b75ab"
#define COLOR_OLIVE "#52613b" //VOREStation Addition
#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A"
#define PIPE_COLOR_GREY "#808080"
+2 -1
View File
@@ -8,7 +8,8 @@
/// Signifies that this proc is used to handle signals.
/// Every proc you pass to RegisterSignal must have this.
#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE)
//#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE)
#define SIGNAL_HANDLER // Sigh
/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments
#define AddElement(arguments...) _AddElement(list(##arguments))
-2
View File
@@ -121,8 +121,6 @@
///from obj/machinery/bsa/full/proc/fire(): ()
#define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass"
#define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0)
///from base of atom/set_light(): (l_range, l_power, l_color)
#define COMSIG_ATOM_SET_LIGHT "atom_set_light"
///from base of atom/setDir(): (old_dir, new_dir)
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change"
///from base of atom/handle_atom_del(): (atom/deleted)
+4
View File
@@ -1,4 +1,8 @@
#undef LIGHT_COLOR_INCANDESCENT_TUBE
#define LIGHT_COLOR_INCANDESCENT_TUBE "#E0EFF0"
#undef LIGHT_COLOR_INCANDESCENT_BULB
#define LIGHT_COLOR_INCANDESCENT_BULB "#FFFEB8"
//Fake ambient occlusion filter
#undef AMBIENT_OCCLUSION
#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-1, size=2, offset=2, color="#04080F55") //VOREStation Edit for prettier visuals.
+1 -1
View File
@@ -167,4 +167,4 @@ if (!(DATUM.datum_flags & DF_ISPROCESSING)) {\
// Computer login types
#define LOGIN_TYPE_NORMAL 1
#define LOGIN_TYPE_AI 2
#define LOGIN_TYPE_ROBOT 3
#define LOGIN_TYPE_ROBOT 3
-1
View File
@@ -1 +0,0 @@
#define INIT_ORDER_HOLOMAPS -5 //VOREStation Add
-3
View File
@@ -19,8 +19,5 @@
#define isCardinal(x) (x == NORTH || x == SOUTH || x == EAST || x == WEST)
#define isDiagonal(x) (x == NORTHEAST || x == SOUTHEAST || x == NORTHWEST || x == SOUTHWEST)
<<<<<<< HEAD
#define IS_OPAQUE_TURF(turf) (turf.directional_opacity == ALL_CARDINALS)
=======
#define FOOTSTEP_SPRITE_AMT 2
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
+1 -5
View File
@@ -366,18 +366,14 @@ world
. = list(r, g, b)
if(usealpha) . += alpha
<<<<<<< HEAD
proc/RGBdec2hex(var/list/values)
/proc/RGBdec2hex(var/list/values)
var/string = ""
while(values.len)
string = "[num2text(values[values.len], 2, 16)][string]"
values.len--
return "#[string]"
proc/ReadHSV(hsv)
=======
/proc/ReadHSV(hsv)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(!hsv) return
// interpret the HSV or HSVA value
-4
View File
@@ -3,13 +3,9 @@ var/datum/controller/transfer_controller/transfer_controller
/datum/controller/transfer_controller
var/timerbuffer = 0 //buffer for time check
var/currenttick = 0
<<<<<<< HEAD
var/shift_hard_end = 0 //VOREStation Edit
var/shift_last_vote = 0 //VOREStation Edit
datum/controller/transfer_controller/New()
=======
/datum/controller/transfer_controller/New()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
timerbuffer = config.vote_autotransfer_initial
shift_hard_end = config.vote_autotransfer_initial + (config.vote_autotransfer_interval * 0) //VOREStation Edit //Change this "1" to how many extend votes you want there to be.
shift_last_vote = shift_hard_end - config.vote_autotransfer_interval //VOREStation Edit
-6
View File
@@ -192,14 +192,8 @@ var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ)
//Department channels, arranged lexically
var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ)
<<<<<<< HEAD
var/list/OFFMAP_FREQS = list(TALON_FREQ) //VOREStation Add
#define TRANSMISSION_WIRE 0
#define TRANSMISSION_RADIO 1
=======
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/proc/frequency_span_class(var/frequency)
// Antags!
if (frequency in ANTAG_FREQS)
-23
View File
@@ -86,29 +86,6 @@ SUBSYSTEM_DEF(lighting)
queue.Cut(1, i+1)
<<<<<<< HEAD
/datum/controller/subsystem/lighting/Recover()
subsystem_initialized = SSlighting.subsystem_initialized
..()
=======
DUAL_TICK_CHECK
/datum/controller/subsystem/lighting/stat_entry(msg_prefix)
var/list/msg = list(msg_prefix)
msg += "T:{"
msg += "S [total_lighting_sources] | "
msg += "C [total_lighting_corners] | "
msg += "O [total_lighting_overlays]"
msg += "}"
msg += "C:{"
msg += "S [round(cost_lights, 1)] | "
msg += "C [round(cost_corners, 1)] | "
msg += "O [round(cost_overlays, 1)]"
msg += "}"
..(msg.Join())
#undef DUAL_TICK_CHECK
#undef SSLIGHTING_STAGE_LIGHTS
#undef SSLIGHTING_STAGE_CORNERS
#undef SSLIGHTING_STAGE_OVERLAYS
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
+7 -7
View File
@@ -22,9 +22,9 @@
pda_type = /obj/item/device/pda/centcom
flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
post_equip(var/mob/living/carbon/human/H)
..()
ert.add_antagonist(H.mind)
/decl/hierarchy/outfit/job/emergency_responder/post_equip(var/mob/living/carbon/human/H)
..()
ert.add_antagonist(H.mind)
/decl/hierarchy/outfit/job/clown
name = OUTFIT_JOB_NAME("Clown")
@@ -47,7 +47,7 @@
id_type = /obj/item/weapon/card/id/civilian/mime
pda_type = /obj/item/device/pda/mime
post_equip(var/mob/living/carbon/human/H)
..()
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand)
/decl/hierarchy/outfit/job/mime/post_equip(var/mob/living/carbon/human/H)
..()
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand)
-26
View File
@@ -85,7 +85,6 @@
if(!istype(M,/mob/new_player) && !isdeaf(M))
to_chat(M, command)
<<<<<<< HEAD
/datum/announcement/priority/Message(var/message as text, var/message_title as text, var/list/zlevels)
global_announcer.autosay("<span class='alert'>[message_title]:</span> [message]", announcer ? announcer : ANNOUNCER_NAME, channel = "Common", zlevels = zlevels)
@@ -96,13 +95,6 @@
global_announcer.autosay("<span class='alert'>[message_title]:</span> [message]", ANNOUNCER_NAME, channel = "Common", zlevels = zlevels)
/datum/announcement/proc/NewsCast(var/message as text, var/message_title as text)
=======
/datum/announcement/priority/security/Message(message as text, message_title as text)
to_world("<font size=4 color='red'>[message_title]</font>")
to_world("<font color='red'>[message]</font>")
/datum/announcement/proc/NewsCast(message as text, message_title as text)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(!newscast)
return
@@ -115,19 +107,12 @@
announce_newscaster_news(news)
/datum/announcement/proc/PlaySound(var/message_sound, var/list/zlevels)
<<<<<<< HEAD
=======
if(!message_sound)
return
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
for(var/mob/M in player_list)
if(zlevels && !(M.z in zlevels))
continue
if(!istype(M,/mob/new_player) && !isdeaf(M))
M << 'sound/AI/preamble.ogg'
<<<<<<< HEAD
if(!message_sound)
return
@@ -140,17 +125,6 @@
/datum/announcement/proc/Sound(var/message_sound, var/list/zlevels)
PlaySound(message_sound, zlevels)
=======
/datum/announcement/proc/Sound(var/message_sound, var/list/zlevels)
PlaySound(message_sound, zlevels)
/datum/announcement/priority/Sound(var/message_sound)
if(message_sound)
world << message_sound
/datum/announcement/priority/command/Sound(var/message_sound)
PlaySound(message_sound)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/datum/announcement/proc/Log(message as text, message_title as text)
if(log)
+1 -37
View File
@@ -123,41 +123,6 @@ var/global/list/all_objectives = list()
return 0
return 0
<<<<<<< HEAD
datum/objective/anti_revolution/demote
find_target()
..()
if(target && target.current)
var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant."
else
explanation_text = "Free Objective"
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant."
else
explanation_text = "Free Objective"
return target
check_completion()
if(target && target.current && istype(target,/mob/living/carbon/human))
var/obj/item/weapon/card/id/I = target.current:wear_id
if(istype(I, /obj/item/device/pda))
var/obj/item/device/pda/P = I
I = P.id
if(!istype(I)) return 1
if(I.assignment == USELESS_JOB) //VOREStation Edit - Visitor not Assistant
return 1
else
return 0
return 1
=======
/datum/objective/anti_revolution/demote/find_target()
..()
if(target && target.current)
@@ -166,7 +131,6 @@ datum/objective/anti_revolution/demote
else
explanation_text = "Free Objective"
return target
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/datum/objective/anti_revolution/demote/find_target_by_role(role, role_type=0)
..(role, role_type)
@@ -186,7 +150,7 @@ datum/objective/anti_revolution/demote
if(!istype(I)) return 1
if(I.assignment == "Assistant")
if(I.assignment == USELESS_JOB) //VOREStation Edit - Visitor not Assistant
return 1
else
return 0
+4 -4
View File
@@ -21,8 +21,8 @@
pto_type = PTO_CIVILIAN
get_access()
return get_all_accesses().Copy()
/datum/job/centcom_officer/get_access()
return get_all_accesses().Copy()
/datum/job/emergency_responder //For staff managing/leading ERTs
title = "Emergency Responder"
@@ -47,8 +47,8 @@
pto_type = PTO_CIVILIAN
get_access()
return get_all_accesses().Copy()
/datum/job/emergency_responder/get_access()
return get_all_accesses().Copy()
/datum/job/clown
title = "Clown"
+39 -347
View File
@@ -45,88 +45,13 @@ var/global/datum/controller/occupations/job_master
if(J.title == rank) return J
return null
<<<<<<< HEAD
proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
if(player && player.mind && rank)
var/datum/job/job = GetJob(rank)
if(!job)
return 0
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
return 0
if(jobban_isbanned(player, rank))
return 0
if(!job.player_old_enough(player.client))
return 0
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
return 0
if(!is_job_whitelisted(player, rank))
return 0
//VOREStation Add End
var/position_limit = job.total_positions
if(!latejoin)
position_limit = job.spawn_positions
if((job.current_positions < position_limit) || position_limit == -1)
Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]")
player.mind.assigned_role = rank
player.mind.role_alt_title = GetPlayerAltTitle(player, rank)
unassigned -= player
job.current_positions++
return 1
Debug("AR has failed, Player: [player], Rank: [rank]")
return 0
=======
/datum/controller/occupations/proc/GetPlayerAltTitle(mob/new_player/player, rank)
return player.client.prefs.GetPlayerAltTitle(GetJob(rank))
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/datum/controller/occupations/proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
if(player && player.mind && rank)
var/datum/job/job = GetJob(rank)
<<<<<<< HEAD
if(job && job.total_positions != -1)
job.total_positions++
return 1
return 0
proc/FindOccupationCandidates(datum/job/job, level, flag)
Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]")
var/list/candidates = list()
for(var/mob/new_player/player in unassigned)
if(jobban_isbanned(player, job.title))
Debug("FOC isbanned failed, Player: [player]")
continue
if(!job.player_old_enough(player.client))
Debug("FOC player not old enough, Player: [player]")
continue
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
Debug("FOC character not old enough, Player: [player]")
continue
//VOREStation Code Start
if(!job.player_has_enough_playtime(player.client))
Debug("FOC character not enough playtime, Player: [player]")
continue
if(!is_job_whitelisted(player, job.title))
Debug("FOC is_job_whitelisted failed, Player: [player]")
continue
//VOREStation Code End
if(flag && !(player.client.prefs.be_special & flag))
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
continue
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
Debug("FOC pass, Player: [player], Level:[level]")
candidates += player
return candidates
proc/GiveRandomJob(var/mob/new_player/player)
Debug("GRJ Giving random job, Player: [player]")
for(var/datum/job/job in shuffle(occupations))
if(!job)
continue
=======
if(!job)
return 0
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
@@ -135,7 +60,12 @@ var/global/datum/controller/occupations/job_master
return 0
if(!job.player_old_enough(player.client))
return 0
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
return 0
if(!is_job_whitelisted(player, rank))
return 0
//VOREStation Add End
var/position_limit = job.total_positions
if(!latejoin)
@@ -150,10 +80,6 @@ var/global/datum/controller/occupations/job_master
Debug("AR has failed, Player: [player], Rank: [rank]")
return 0
<<<<<<< HEAD
if(istype(job, GetJob(USELESS_JOB))) // We don't want to give him assistant, that's boring! //VOREStation Edit - Visitor not Assistant
continue
=======
/datum/controller/occupations/proc/FreeRole(var/rank) //making additional slot on the fly
var/datum/job/job = GetJob(rank)
if(job && job.total_positions != -1)
@@ -174,6 +100,14 @@ var/global/datum/controller/occupations/job_master
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
Debug("FOC character not old enough, Player: [player]")
continue
//VOREStation Code Start
if(!job.player_has_enough_playtime(player.client))
Debug("FOC character not enough playtime, Player: [player]")
continue
if(!is_job_whitelisted(player, job.title))
Debug("FOC is_job_whitelisted failed, Player: [player]")
continue
//VOREStation Code End
if(flag && !(player.client.prefs.be_special & flag))
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
continue
@@ -191,7 +125,7 @@ var/global/datum/controller/occupations/job_master
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
continue
if(istype(job, GetJob("Assistant"))) // We don't want to give him assistant, that's boring!
if(istype(job, GetJob(USELESS_JOB))) // We don't want to give him assistant, that's boring! //VOREStation Edit - Visitor not Assistant
continue
if(SSjob.is_job_in_department(job.title, DEPARTMENT_COMMAND)) //If you want a command position, select it!
@@ -205,6 +139,15 @@ var/global/datum/controller/occupations/job_master
Debug("GRJ player not old enough, Player: [player]")
continue
//VOREStation Code Start
if(!job.player_has_enough_playtime(player.client))
Debug("GRJ player not enough playtime, Player: [player]")
continue
if(!is_job_whitelisted(player, job.title))
Debug("GRJ player not whitelisted for this job, Player: [player], Job: [job.title]")
continue
//VOREStation Code End
if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
Debug("GRJ Random job given, Player: [player], Job: [job]")
AssignRole(player, job.title)
@@ -229,7 +172,6 @@ var/global/datum/controller/occupations/job_master
if(!job) continue
var/list/candidates = FindOccupationCandidates(job, level)
if(!candidates.len) continue
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
// Build a weighted list, weight by age.
var/list/weightedCandidates = list()
@@ -256,23 +198,6 @@ var/global/datum/controller/occupations/job_master
// If there's ABSOLUTELY NOBODY ELSE
if(candidates.len == 1) weightedCandidates[V] = 1
<<<<<<< HEAD
//VOREStation Code Start
if(!job.player_has_enough_playtime(player.client))
Debug("GRJ player not enough playtime, Player: [player]")
continue
if(!is_job_whitelisted(player, job.title))
Debug("GRJ player not whitelisted for this job, Player: [player], Job: [job.title]")
continue
//VOREStation Code End
if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
Debug("GRJ Random job given, Player: [player], Job: [job]")
AssignRole(player, job.title)
unassigned -= player
break
=======
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
var/mob/new_player/candidate = pickweight(weightedCandidates)
if(AssignRole(candidate, command_position))
@@ -319,20 +244,7 @@ var/global/datum/controller/occupations/job_master
//Shuffle players and jobs
unassigned = shuffle(unassigned)
<<<<<<< HEAD
//People who wants to be assistants, sure, go on.
Debug("DO, Running Assistant Check 1")
var/datum/job/assist = new DEFAULT_JOB_TYPE ()
var/list/assistant_candidates = FindOccupationCandidates(assist, 3)
Debug("AC1, Candidates: [assistant_candidates.len]")
for(var/mob/new_player/player in assistant_candidates)
Debug("AC1 pass, Player: [player]")
AssignRole(player, USELESS_JOB) //VOREStation Edit - Visitor not Assistant
assistant_candidates -= player
Debug("DO, AC1 end")
=======
HandleFeedbackGathering()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
//People who wants to be assistants, sure, go on.
Debug("DO, Running Assistant Check 1")
@@ -341,7 +253,7 @@ var/global/datum/controller/occupations/job_master
Debug("AC1, Candidates: [assistant_candidates.len]")
for(var/mob/new_player/player in assistant_candidates)
Debug("AC1 pass, Player: [player]")
AssignRole(player, "Assistant")
AssignRole(player, USELESS_JOB) //VOREStation Edit - Visitor not Assistant
assistant_candidates -= player
Debug("DO, AC1 end")
@@ -377,20 +289,15 @@ var/global/datum/controller/occupations/job_master
Debug("DO isbanned failed, Player: [player], Job:[job.title]")
continue
<<<<<<< HEAD
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
Debug("DO player not enough playtime, Player: [player]")
continue
//VOREStation Add End
// If the player wants that job on this level, then try give it to him.
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
=======
if(!job.player_old_enough(player.client))
Debug("DO player not old enough, Player: [player], Job:[job.title]")
continue
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
Debug("DO player not enough playtime, Player: [player]")
continue
//VOREStation Add End
// If the player wants that job on this level, then try give it to him.
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
@@ -433,15 +340,8 @@ var/global/datum/controller/occupations/job_master
for(var/mob/new_player/player in unassigned)
if(player.client.prefs.alternate_option == BE_ASSISTANT)
Debug("AC2 Assistant located, Player: [player]")
AssignRole(player, "Assistant")
AssignRole(player, USELESS_JOB) //VOREStation Edit - Visitor not Assistant
<<<<<<< HEAD
// For those who wanted to be assistant if their preferences were filled, here you go.
for(var/mob/new_player/player in unassigned)
if(player.client.prefs.alternate_option == BE_ASSISTANT)
Debug("AC2 Assistant located, Player: [player]")
AssignRole(player, USELESS_JOB) //VOREStation Edit - Visitor not Assistant
=======
//For ones returning to lobby
for(var/mob/new_player/player in unassigned)
if(player.client.prefs.alternate_option == RETURN_TO_LOBBY)
@@ -478,7 +378,6 @@ var/global/datum/controller/occupations/job_master
return
else
H.forceMove(T)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
// Moving wheelchair if they have one
if(H.buckled && istype(H.buckled, /obj/structure/bed/chair/wheelchair))
@@ -488,7 +387,7 @@ var/global/datum/controller/occupations/job_master
if(job)
//Equip custom gear loadout.
var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage.
var/list/custom_equip_slots = list()
var/list/custom_equip_leftovers = list()
if(H.client.prefs.gear && H.client.prefs.gear.len && !(job.mob_type & JOB_SILICON))
for(var/thing in H.client.prefs.gear)
@@ -521,53 +420,6 @@ var/global/datum/controller/occupations/job_master
I.implant_loadout(H)
continue
<<<<<<< HEAD
//Equip custom gear loadout.
var/list/custom_equip_slots = list()
var/list/custom_equip_leftovers = list()
if(H.client.prefs.gear && H.client.prefs.gear.len && !(job.mob_type & JOB_SILICON))
for(var/thing in H.client.prefs.gear)
var/datum/gear/G = gear_datums[thing]
if(!G) //Not a real gear datum (maybe removed, as this is loaded from their savefile)
continue
var/permitted
// Check if it is restricted to certain roles
if(G.allowed_roles)
for(var/job_name in G.allowed_roles)
if(job.title == job_name)
permitted = 1
else
permitted = 1
// Check if they're whitelisted for this gear (in alien whitelist? seriously?)
if(G.whitelisted && !is_alien_whitelisted(H, GLOB.all_species[G.whitelisted]))
permitted = 0
// If they aren't, tell them
if(!permitted)
to_chat(H, "<span class='warning'>Your current species, job or whitelist status does not permit you to spawn with [thing]!</span>")
continue
// Implants get special treatment
if(G.slot == "implant")
var/obj/item/weapon/implant/I = G.spawn_item(H, H.client.prefs.gear[G.display_name])
I.invisibility = 100
I.implant_loadout(H)
continue
// Try desperately (and sorta poorly) to equip the item. Now with increased desperation!
if(G.slot && !(G.slot in custom_equip_slots))
var/metadata = H.client.prefs.gear[G.display_name]
if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
custom_equip_leftovers += thing
else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
to_chat(H, "<span class='notice'>Equipping you with \the [thing]!</span>")
if(G.slot != slot_tie)
custom_equip_slots.Add(G.slot)
else
custom_equip_leftovers.Add(thing)
=======
// Try desperately (and sorta poorly) to equip the item. Now with increased desperation!
if(G.slot && !(G.slot in custom_equip_slots))
var/metadata = H.client.prefs.gear[G.display_name]
@@ -577,7 +429,6 @@ var/global/datum/controller/occupations/job_master
to_chat(H, "<span class='notice'>Equipping you with \the [thing]!</span>")
if(G.slot != slot_tie)
custom_equip_slots.Add(G.slot)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
else
custom_equip_leftovers.Add(thing)
else
@@ -613,6 +464,7 @@ var/global/datum/controller/occupations/job_master
H.job = rank
log_game("JOINED [key_name(H)] as \"[rank]\"")
log_game("SPECIES [key_name(H)] is a: \"[H.species.name]\"") //VOREStation Add
// If they're head, give them the account info for their department
if(H.mind && job.department_accounts)
@@ -654,133 +506,6 @@ var/global/datum/controller/occupations/job_master
to_chat(H, "<span class='notice'>Placing \the [thing] in your [B.name]!</span>")
var/datum/gear/G = gear_datums[thing]
var/metadata = H.client.prefs.gear[G.display_name]
<<<<<<< HEAD
if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
to_chat(H, "<span class='notice'>Equipping you with \the [thing]!</span>")
custom_equip_slots.Add(G.slot)
else
spawn_in_storage += thing
else
to_chat(H, "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator.")
H.job = rank
log_game("JOINED [key_name(H)] as \"[rank]\"")
log_game("SPECIES [key_name(H)] is a: \"[H.species.name]\"") //VOREStation Add
// If they're head, give them the account info for their department
if(H.mind && job.department_accounts)
var/remembered_info = ""
for(var/D in job.department_accounts)
var/datum/money_account/department_account = department_accounts[D]
if(department_account)
remembered_info += "<b>Department account number ([D]):</b> #[department_account.account_number]<br>"
remembered_info += "<b>Department account pin ([D]):</b> [department_account.remote_access_pin]<br>"
remembered_info += "<b>Department account funds ([D]):</b> $[department_account.money]<br>"
H.mind.store_memory(remembered_info)
var/alt_title = null
if(H.mind)
H.mind.assigned_role = rank
alt_title = H.mind.role_alt_title
// If we're a silicon, we may be done at this point
if(job.mob_type & JOB_SILICON_ROBOT)
return H.Robotize()
if(job.mob_type & JOB_SILICON_AI)
return H
// TWEET PEEP
if(rank == "Site Manager")
var/sound/announce_sound = (ticker.current_state <= GAME_STATE_SETTING_UP) ? null : sound('sound/misc/boatswain.ogg', volume=20)
captain_announcement.Announce("All hands, [alt_title ? alt_title : "Site Manager"] [H.real_name] on deck!", new_sound = announce_sound, zlevel = H.z)
//Deferred item spawning.
if(spawn_in_storage && spawn_in_storage.len)
var/obj/item/weapon/storage/B
for(var/obj/item/weapon/storage/S in H.contents)
B = S
break
if(!isnull(B))
for(var/thing in spawn_in_storage)
to_chat(H, "<span class='notice'>Placing \the [thing] in your [B.name]!</span>")
var/datum/gear/G = gear_datums[thing]
var/metadata = H.client.prefs.gear[G.display_name]
G.spawn_item(B, metadata)
else
to_chat(H, "<span class='danger'>Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.</span>")
if(istype(H)) //give humans wheelchairs, if they need them.
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/obj/item/weapon/storage/S = locate() in H.contents
var/obj/item/wheelchair/R
if(S)
R = locate() in S.contents
if(!l_foot || !r_foot || R)
var/wheelchair_type = R?.unfolded_type || /obj/structure/bed/chair/wheelchair
var/obj/structure/bed/chair/wheelchair/W = new wheelchair_type(H.loc)
W.buckle_mob(H)
H.update_canmove()
W.set_dir(H.dir)
W.add_fingerprint(H)
if(R)
W.color = R.color
qdel(R)
to_chat(H, "<B>You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank].</B>")
if(job.supervisors)
to_chat(H, "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>")
if(job.has_headset)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
to_chat(H, "<b>To speak on your department's radio channel use :h. For the use of other channels, examine your headset.</b>")
if(job.req_admin_notify)
to_chat(H, "<b>You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.</b>")
// EMAIL GENERATION
// Email addresses will be created under this domain name. Mostly for the looks.
var/domain = "freemail.nt"
if(using_map && LAZYLEN(using_map.usable_email_tlds))
domain = using_map.usable_email_tlds[1]
var/sanitized_name = sanitize(replacetext(replacetext(lowertext(H.real_name), " ", "."), "'", ""))
var/complete_login = "[sanitized_name]@[domain]"
// It is VERY unlikely that we'll have two players, in the same round, with the same name and branch, but still, this is here.
// If such conflict is encountered, a random number will be appended to the email address. If this fails too, no email account will be created.
if(ntnet_global.does_email_exist(complete_login))
complete_login = "[sanitized_name][random_id(/datum/computer_file/data/email_account/, 100, 999)]@[domain]"
// If even fallback login generation failed, just don't give them an email. The chance of this happening is astronomically low.
if(ntnet_global.does_email_exist(complete_login))
to_chat(H, "You were not assigned an email address.")
H.mind.store_memory("You were not assigned an email address.")
else
var/datum/computer_file/data/email_account/EA = new/datum/computer_file/data/email_account()
EA.password = GenerateKey()
EA.login = complete_login
to_chat(H, "Your email account address is <b>[EA.login]</b> and the password is <b>[EA.password]</b>. This information has also been placed into your notes.")
H.mind.store_memory("Your email account address is [EA.login] and the password is [EA.password].")
// END EMAIL GENERATION
//Gives glasses to the vision impaired
if(H.disabilities & NEARSIGHTED)
var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses)
if(equipped != 1)
var/obj/item/clothing/glasses/G = H.glasses
G.prescription = 1
BITSET(H.hud_updateflag, ID_HUD)
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
BITSET(H.hud_updateflag, SPECIALROLE_HUD)
return H
proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
if(!config.load_jobs_from_txt)
return 0
=======
G.spawn_item(B, metadata)
else
to_chat(H, "<span class='danger'>Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.</span>")
@@ -854,7 +579,6 @@ var/global/datum/controller/occupations/job_master
/datum/controller/occupations/proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
if(!config.load_jobs_from_txt)
return 0
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
var/list/jobEntries = file2list(jobsfile)
@@ -887,42 +611,6 @@ var/global/datum/controller/occupations/job_master
return 1
<<<<<<< HEAD
proc/HandleFeedbackGathering()
for(var/datum/job/job in occupations)
var/tmp_str = "|[job.title]|"
var/level1 = 0 //high
var/level2 = 0 //medium
var/level3 = 0 //low
var/level4 = 0 //never
var/level5 = 0 //banned
var/level6 = 0 //account too young
for(var/mob/new_player/player in player_list)
if(!(player.ready && player.mind && !player.mind.assigned_role))
continue //This player is not ready
if(jobban_isbanned(player, job.title))
level5++
continue
if(!job.player_old_enough(player.client))
level6++
continue
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
level6++
continue
//VOREStation Add End
if(player.client.prefs.GetJobDepartment(job, 1) & job.flag)
level1++
else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag)
level2++
else if(player.client.prefs.GetJobDepartment(job, 3) & job.flag)
level3++
else level4++ //not selected
tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|YOUNG=[level6]|-"
feedback_add_details("job_preferences",tmp_str)
=======
/datum/controller/occupations/proc/HandleFeedbackGathering()
for(var/datum/job/job in occupations)
var/tmp_str = "|[job.title]|"
@@ -942,6 +630,11 @@ var/global/datum/controller/occupations/job_master
if(!job.player_old_enough(player.client))
level6++
continue
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
level6++
continue
//VOREStation Add End
if(player.client.prefs.GetJobDepartment(job, 1) & job.flag)
level1++
else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag)
@@ -952,7 +645,6 @@ var/global/datum/controller/occupations/job_master
tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|YOUNG=[level6]|-"
feedback_add_details("job_preferences",tmp_str)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/datum/controller/occupations/proc/LateSpawn(var/client/C, var/rank)
-2
View File
@@ -305,5 +305,3 @@
build_eff = man_rating
eat_eff = bin_rating
#undef BIOGENITEM
+1 -6
View File
@@ -8,14 +8,9 @@
var/datum/radio_frequency/radio_connection
var/cur_command = null //the command the door is currently attempting to complete
<<<<<<< HEAD
obj/machinery/door/airlock/process()
/obj/machinery/door/airlock/process()
if (..() == PROCESS_KILL && !cur_command)
. = PROCESS_KILL
=======
/obj/machinery/door/airlock/process()
..()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if (arePowerSystemsOn())
execute_current_command()
@@ -1,5 +1,4 @@
//Handles the control of airlocks
#define STATE_IDLE 0
#define STATE_PREPARE 1
#define STATE_DEPRESSURIZE 2
@@ -416,8 +415,10 @@ send an additional command to open the door again.
signalDoor(doorTag, doorCommand)
#undef SKIPCYCLE_MARGIN
#undef MIN_TARGET_PRESSURE
#undef STATE_IDLE
#undef STATE_PREPARE
#undef STATE_DEPRESSURIZE
#undef STATE_PRESSURIZE
-10
View File
@@ -1,4 +1,3 @@
<<<<<<< HEAD
//
// Media Player Jukebox
// Rewritten by Leshana from existing Polaris code, merging in D2K5 and N3X15 work
@@ -8,15 +7,6 @@
#define JUKEMODE_RANDOM 2 // Not shuffle, randomly picks next each time.
#define JUKEMODE_REPEAT_SONG 3 // Play the same song over and over
#define JUKEMODE_PLAY_ONCE 4 // Play, then stop.
=======
/datum/track
var/title
var/sound
/datum/track/New(var/title_name, var/audio)
title = title_name
sound = audio
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/machinery/media/jukebox
name = "space jukebox"
-101
View File
@@ -8,63 +8,7 @@
circuit = /obj/item/weapon/circuitboard/mecha_control
var/list/located = list()
var/screen = 0
<<<<<<< HEAD
var/list/stored_data
=======
var/stored_data
/obj/machinery/computer/mecha/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
/obj/machinery/computer/mecha/attack_hand(var/mob/user as mob)
if(..())
return
user.set_machine(src)
var/dat = "<html><head><title>[src.name]</title><style>h3 {margin: 0px; padding: 0px;}</style></head><body>"
if(screen == 0)
dat += "<h3>Tracking beacons data</h3>"
for(var/obj/item/mecha_parts/mecha_tracking/TR in world)
var/answer = TR.get_mecha_info()
if(answer)
dat += {"<hr>[answer]<br/>
<a href='?src=\ref[src];send_message=\ref[TR]'>Send message</a><br/>
<a href='?src=\ref[src];get_log=\ref[TR]'>Show exosuit log</a> | <a style='color: #f00;' href='?src=\ref[src];shock=\ref[TR]'>(EMP pulse)</a><br>"}
if(screen==1)
dat += "<h3>Log contents</h3>"
dat += "<a href='?src=\ref[src];return=1'>Return</a><hr>"
dat += "[stored_data]"
dat += "<A href='?src=\ref[src];refresh=1'>(Refresh)</A><BR>"
dat += "</body></html>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/mecha/Topic(href, href_list)
if(..())
return
var/datum/topic_input/top_filter = new /datum/topic_input(href,href_list)
if(href_list["send_message"])
var/obj/item/mecha_parts/mecha_tracking/MT = top_filter.getObj("send_message")
var/message = sanitize(input(usr,"Input message","Transmit message") as text)
var/obj/mecha/M = MT.in_mecha()
if(message && M)
M.occupant_message(message)
return
if(href_list["shock"])
var/obj/item/mecha_parts/mecha_tracking/MT = top_filter.getObj("shock")
MT.shock()
if(href_list["get_log"])
var/obj/item/mecha_parts/mecha_tracking/MT = top_filter.getObj("get_log")
stored_data = MT.get_mecha_log()
screen = 1
if(href_list["return"])
screen = 0
src.updateUsrDialog()
return
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/machinery/computer/mecha/attack_ai(mob/user)
return attack_hand(user)
@@ -133,7 +77,6 @@
icon_state = "motion2"
origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
<<<<<<< HEAD
/obj/item/mecha_parts/mecha_tracking/tgui_data(mob/user)
var/list/data = ..()
if(!in_mecha())
@@ -159,25 +102,6 @@
data["cargoMax"] = RM.cargo_capacity
return data
=======
/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_info()
if(!in_mecha())
return 0
var/obj/mecha/M = src.loc
var/cell_charge = M.get_charge()
var/answer = {"<b>Name:</b> [M.name]<br>
<b>Integrity:</b> [M.health/initial(M.health)*100]%<br>
<b>Cell charge:</b> [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]<br>
<b>Airtank:</b> [M.return_pressure()]kPa<br>
<b>Pilot:</b> [M.occupant||"None"]<br>
<b>Location:</b> [get_area(M)||"Unknown"]<br>
<b>Active equipment:</b> [M.selected||"None"]"}
if(istype(M, /obj/mecha/working/ripley))
var/obj/mecha/working/ripley/RM = M
answer += "<b>Used cargo space:</b> [RM.cargo.len/RM.cargo_capacity*100]%<br>"
return answer
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/item/mecha_parts/mecha_tracking/emp_act()
qdel(src)
@@ -188,13 +112,8 @@
return
/obj/item/mecha_parts/mecha_tracking/proc/in_mecha()
<<<<<<< HEAD
if(istype(loc, /obj/mecha))
return loc
=======
if(istype(src.loc, /obj/mecha))
return src.loc
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
return 0
/obj/item/mecha_parts/mecha_tracking/proc/shock()
@@ -204,32 +123,12 @@
qdel(src)
/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_log()
<<<<<<< HEAD
if(!in_mecha())
return list()
var/obj/mecha/M = loc
return M.get_log_tgui()
=======
if(!src.in_mecha())
return 0
var/obj/mecha/M = src.loc
return M.get_log_html()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/item/weapon/storage/box/mechabeacons
name = "Exosuit Tracking Beacons"
<<<<<<< HEAD
/obj/item/weapon/storage/box/mechabeacons/New()
..()
new /obj/item/mecha_parts/mecha_tracking(src)
new /obj/item/mecha_parts/mecha_tracking(src)
new /obj/item/mecha_parts/mecha_tracking(src)
new /obj/item/mecha_parts/mecha_tracking(src)
new /obj/item/mecha_parts/mecha_tracking(src)
new /obj/item/mecha_parts/mecha_tracking(src)
new /obj/item/mecha_parts/mecha_tracking(src)
=======
starts_with = list(/obj/item/mecha_parts/mecha_tracking = 7)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
File diff suppressed because it is too large Load Diff
+19 -16
View File
@@ -7,26 +7,27 @@
w_class = ITEMSIZE_NORMAL
/obj/item/mecha_parts/micro/chassis/
/obj/item/mecha_parts/micro/chassis
name="Mecha Chassis"
icon_state = "backbone"
var/datum/construction/construct
attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
..()
return
/obj/item/mecha_parts/micro/chassis/attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
..()
return
/obj/item/mecha_parts/micro/chassis/attack_hand()
return
attack_hand()
return
//Gopher
/obj/item/mecha_parts/micro/chassis/gopher
name = "Gopher Chassis"
icon_state = "gopher-chassis"
New()
..()
construct = new /datum/construction/mecha/gopher_chassis(src)
/obj/item/mecha_parts/micro/chassis/gopher/New()
..()
construct = new /datum/construction/mecha/gopher_chassis(src)
/obj/item/mecha_parts/micro/part/gopher_torso
name="Gopher Torso"
@@ -62,9 +63,10 @@
/obj/item/mecha_parts/micro/chassis/polecat
name = "Polecat Chassis"
icon_state = "polecat-chassis"
New()
..()
construct = new /datum/construction/mecha/polecat_chassis(src)
/obj/item/mecha_parts/micro/chassis/polecat/New()
..()
construct = new /datum/construction/mecha/polecat_chassis(src)
/obj/item/mecha_parts/micro/part/polecat_torso
name="Polecat Torso"
@@ -100,9 +102,10 @@
/obj/item/mecha_parts/micro/chassis/weasel
name = "Weasel Chassis"
icon_state = "weasel-chassis"
New()
..()
construct = new /datum/construction/mecha/weasel_chassis(src)
/obj/item/mecha_parts/micro/chassis/weasel/New()
..()
construct = new /datum/construction/mecha/weasel_chassis(src)
/obj/item/mecha_parts/micro/part/weasel_torso
name="Weasel Torso"
+83 -83
View File
@@ -61,25 +61,25 @@
equip_type = EQUIP_MICRO_WEAPON
required_type = list(/obj/mecha/micro/sec)
Topic(href,href_list)
..()
if(href_list["mode"])
mode = text2num(href_list["mode"])
switch(mode)
if(0)
occupant_message("Now firing buckshot.")
projectile = /obj/item/projectile/bullet/pellet/shotgun
if(1)
occupant_message("Now firing beanbags.")
projectile = /obj/item/projectile/bullet/shotgun/beanbag
if(2)
occupant_message("Now firing slugs.")
projectile = /obj/item/projectile/bullet/shotgun
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/microshotgun/Topic(href,href_list)
..()
if(href_list["mode"])
mode = text2num(href_list["mode"])
switch(mode)
if(0)
occupant_message("Now firing buckshot.")
projectile = /obj/item/projectile/bullet/pellet/shotgun
if(1)
occupant_message("Now firing beanbags.")
projectile = /obj/item/projectile/bullet/shotgun/beanbag
if(2)
occupant_message("Now firing slugs.")
projectile = /obj/item/projectile/bullet/shotgun
return
return
get_equip_info()
return "[..()] \[<a href='?src=\ref[src];mode=0'>BS</a>|<a href='?src=\ref[src];mode=1'>BB</a>|<a href='?src=\ref[src];mode=2'>S</a>\]"
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/microshotgun/get_equip_info()
return "[..()] \[<a href='?src=\ref[src];mode=0'>BS</a>|<a href='?src=\ref[src];mode=1'>BB</a>|<a href='?src=\ref[src];mode=2'>S</a>\]"
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/microflashbang
@@ -113,44 +113,44 @@
equip_type = EQUIP_MICRO_UTILITY
required_type = list(/obj/mecha/micro/utility)
action(atom/target)
if(!action_checks(target)) return
if(isobj(target))
var/obj/target_obj = target
if(!target_obj.vars.Find("unacidable") || target_obj.unacidable) return
set_ready_state(0)
chassis.use_power(energy_drain)
chassis.visible_message("<span class='danger'>[chassis] starts to drill [target]</span>", "<span class='warning'>You hear the drill.</span>")
occupant_message("<span class='danger'>You start to drill [target]</span>")
var/T = chassis.loc
var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
if(istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
if(W.reinf_material)
occupant_message("<span class='warning'>[target] is too durable to drill through.</span>")
else
log_message("Drilled through [target]")
target.ex_act(2)
else if(istype(target, /turf/simulated/mineral))
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()
log_message("Drilled through [target]")
var/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/ore_box = (locate(/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop) in chassis.equipment)
if(ore_box)
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
if (ore_box.contents.len >= ore_box.orecapacity)
occupant_message("<span class='warning'>The ore compartment is full.</span>")
return 1
else
ore.forceMove(ore_box)
else if(target.loc == C)
/obj/item/mecha_parts/mecha_equipment/tool/drill/micro/action(atom/target)
if(!action_checks(target)) return
if(isobj(target))
var/obj/target_obj = target
if(!target_obj.vars.Find("unacidable") || target_obj.unacidable) return
set_ready_state(0)
chassis.use_power(energy_drain)
chassis.visible_message("<span class='danger'>[chassis] starts to drill [target]</span>", "<span class='warning'>You hear the drill.</span>")
occupant_message("<span class='danger'>You start to drill [target]</span>")
var/T = chassis.loc
var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
if(istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
if(W.reinf_material)
occupant_message("<span class='warning'>[target] is too durable to drill through.</span>")
else
log_message("Drilled through [target]")
target.ex_act(2)
return 1
else if(istype(target, /turf/simulated/mineral))
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()
log_message("Drilled through [target]")
var/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/ore_box = (locate(/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop) in chassis.equipment)
if(ore_box)
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
if (ore_box.contents.len >= ore_box.orecapacity)
occupant_message("<span class='warning'>The ore compartment is full.</span>")
return 1
else
ore.forceMove(ore_box)
else if(target.loc == C)
log_message("Drilled through [target]")
target.ex_act(2)
return 1
/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop
@@ -165,38 +165,38 @@
required_type = list(/obj/mecha/micro/utility)
var/orecapacity = 500
action(atom/target)
if(!action_checks(target)) return
set_ready_state(0)
chassis.use_power(energy_drain)
chassis.visible_message("<span class='info'>[chassis] sweeps around with its ore scoop.</span>")
occupant_message("<span class='info'>You sweep around the area with the scoop.</span>")
var/T = chassis.loc
//var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
if (contents.len >= orecapacity)
occupant_message("<span class='warning'>The ore compartment is full.</span>")
return 1
else
ore.Move(src)
return 1
/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/action(atom/target)
if(!action_checks(target)) return
set_ready_state(0)
chassis.use_power(energy_drain)
chassis.visible_message("<span class='info'>[chassis] sweeps around with its ore scoop.</span>")
occupant_message("<span class='info'>You sweep around the area with the scoop.</span>")
var/T = chassis.loc
//var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
if (contents.len >= orecapacity)
occupant_message("<span class='warning'>The ore compartment is full.</span>")
return 1
else
ore.Move(src)
return 1
Topic(href,href_list)
..()
if (href_list["empty_box"])
if(contents.len < 1)
occupant_message("The ore compartment is empty.")
return
for (var/obj/item/weapon/ore/O in contents)
contents -= O
O.loc = chassis.loc
occupant_message("Ore compartment emptied.")
/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/Topic(href,href_list)
..()
if (href_list["empty_box"])
if(contents.len < 1)
occupant_message("The ore compartment is empty.")
return
for (var/obj/item/weapon/ore/O in contents)
contents -= O
O.loc = chassis.loc
occupant_message("Ore compartment emptied.")
get_equip_info()
return "[..()] <br /><a href='?src=\ref[src];empty_box=1'>Empty ore compartment</a>"
/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/get_equip_info()
return "[..()] <br /><a href='?src=\ref[src];empty_box=1'>Empty ore compartment</a>"
/obj/item/mecha_parts/mecha_equipment/tool/orescoop/verb/empty_box() //so you can still get the ore out if someone detaches it from the mech
set name = "Empty Ore compartment"
+29 -29
View File
@@ -10,33 +10,33 @@
/datum/effect/effect/system/confetti_spread
var/total_sparks = 0 // To stop it being spammed and lagging!
set_up(n = 3, c = 0, loca)
if(n > 10)
n = 10
number = n
cardinals = c
if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
/datum/effect/effect/system/confetti_spread/set_up(n = 3, c = 0, loca)
if(n > 10)
n = 10
number = n
cardinals = c
if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
start()
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_sparks > 20)
return
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/sparks/confetti = new /obj/effect/effect/sparks/confetti(src.location)
src.total_sparks++
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(confetti,direction)
spawn(20)
src.total_sparks--
/datum/effect/effect/system/confetti_spread/start()
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_sparks > 20)
return
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/sparks/confetti = new /obj/effect/effect/sparks/confetti(src.location)
src.total_sparks++
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(confetti,direction)
spawn(20)
src.total_sparks--
@@ -72,88 +72,6 @@ var/global/list/image/fluidtrack_cache=list()
* @param goingdir Direction tracks are going to (or 0).
* @param bloodcolor Color of the blood when wet.
*/
<<<<<<< HEAD
proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor="#A10808")
var/updated=0
// Shift our goingdir 4 spaces to the left so it's in the GOING bitblock.
var/realgoing=goingdir<<4
// Current bit
var/b=0
// When tracks will start to dry out
var/t=world.time + TRACKS_CRUSTIFY_TIME
var/datum/fluidtrack/track
// Process 4 bits
for(var/bi=0;bi<4;bi++)
b=1<<bi
// COMING BIT
// If setting
if(comingdir&b)
// If not wet or not set
if(dirs&b)
var/sid=setdirs["[b]"]
track=stack[sid]
if(track.wet==t && track.basecolor==bloodcolor)
continue
// Remove existing stack entry
stack.Remove(track)
track=new /datum/fluidtrack(b,bloodcolor,t)
stack.Add(track)
setdirs["[b]"]=stack.Find(track)
updatedtracks |= b
updated=1
// GOING BIT (shift up 4)
b=b<<4
if(realgoing&b)
// If not wet or not set
if(dirs&b)
var/sid=setdirs["[b]"]
track=stack[sid]
if(track.wet==t && track.basecolor==bloodcolor)
continue
// Remove existing stack entry
stack.Remove(track)
track=new /datum/fluidtrack(b,bloodcolor,t)
stack.Add(track)
setdirs["[b]"]=stack.Find(track)
updatedtracks |= b
updated=1
dirs |= comingdir|realgoing
if(islist(blood_DNA))
blood_DNA |= DNA.Copy()
if(updated)
update_icon()
update_icon()
cut_overlays()
color = "#FFFFFF"
var/truedir=0
// Update ONLY the overlays that have changed.
for(var/datum/fluidtrack/track in stack)
var/stack_idx=setdirs["[track.direction]"]
var/state=coming_state
truedir=track.direction
if(truedir&240) // Check if we're in the GOING block
state=going_state
truedir=truedir>>4
if(track.overlay)
track.overlay=null
var/image/I = image(icon, icon_state=state, dir=num2dir(truedir))
I.color = track.basecolor
track.fresh=0
track.overlay=I
stack[stack_idx]=track
add_overlay(I)
updatedtracks=0 // Clear our memory of updated tracks.
=======
/obj/effect/decal/cleanable/blood/tracks/proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor="#A10808")
var/updated=0
// Shift our goingdir 4 spaces to the left so it's in the GOING bitblock.
@@ -211,7 +129,7 @@ var/global/list/image/fluidtrack_cache=list()
update_icon()
/obj/effect/decal/cleanable/blood/tracks/update_icon()
overlays.Cut()
cut_overlays()
color = "#FFFFFF"
var/truedir=0
@@ -232,9 +150,8 @@ var/global/list/image/fluidtrack_cache=list()
track.fresh=0
track.overlay=I
stack[stack_idx]=track
overlays += I
add_overlay(I)
updatedtracks=0 // Clear our memory of updated tracks.
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/effect/decal/cleanable/blood/tracks/footprints
name = "wet footprints"
+2 -7
View File
@@ -24,12 +24,7 @@
mainOverlay.Blend(main,ICON_ADD)
shadeOverlay.Blend(shade,ICON_ADD)
<<<<<<< HEAD
add_overlay(mainOverlay)
add_overlay(shadeOverlay)
=======
overlays += mainOverlay
overlays += shadeOverlay
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
add_overlay(mainOverlay)
add_overlay(shadeOverlay)
add_hiddenprint(usr)
@@ -436,5 +436,3 @@
if("newsfeed")
newsfeed_channel = text2num(params["newsfeed"])
#undef DEFAULT_MAP_SIZE
+1 -57
View File
@@ -9,61 +9,6 @@
var/icon/virtualIcon
var/list/bulletholes = list()
<<<<<<< HEAD
Destroy()
// if a target is deleted and associated with a stake, force stake to forget
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
T.pinned_target = null
T.density = 1
break
..() // delete target
Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
// After target moves, check for nearby stakes. If associated, move to target
for(var/obj/structure/target_stake/M in view(3,src))
if(M.density == 0 && M.pinned_target == src)
M.forceMove(loc)
// This may seem a little counter-intuitive but I assure you that's for a purpose.
// Stakes are the ones that carry targets, yes, but in the stake code we set
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
// the stake now, we have to push the target.
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
cut_overlays()
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
return
attack_hand(mob/user as mob)
// taking pinned targets off!
var/obj/structure/target_stake/stake
for(var/obj/structure/target_stake/T in view(3,src))
if(T.pinned_target == src)
stake = T
break
if(stake)
if(stake.pinned_target)
stake.density = 1
density = 0
layer = OBJ_LAYER
loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(src)
to_chat(user, "You take the target out of the stake.")
else
src.loc = get_turf(user)
=======
/obj/item/target/Destroy()
// if a target is deleted and associated with a stake, force stake to forget
for(var/obj/structure/target_stake/T in view(3,src))
@@ -91,7 +36,7 @@
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
overlays.Cut()
cut_overlays()
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
return
@@ -114,7 +59,6 @@
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(src)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
to_chat(user, "You take the target out of the stake.")
else
src.loc = get_turf(user)
+3 -3
View File
@@ -430,6 +430,6 @@
/datum/stack_recipe_list
var/title = "ERROR"
var/list/recipes = null
New(title, recipes)
src.title = title
src.recipes = recipes
/datum/stack_recipe_list/New(title, recipes)
src.title = title
src.recipes = recipes
@@ -10,13 +10,13 @@
var/taurtype = /datum/sprite_accessory/tail/taur/horse //Acceptable taur type to be wearing this
var/no_message = "You aren't the appropriate taur type to wear this!"
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(istype(H) && istype(H.tail_style, taurtype))
return 1
else
to_chat(H, "<span class='warning'>[no_message]</span>")
return 0
/obj/item/weapon/storage/backpack/saddlebag/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(istype(H) && istype(H.tail_style, taurtype))
return 1
else
to_chat(H, "<span class='warning'>[no_message]</span>")
return 0
/* If anyone wants to make some... this is how you would.
/obj/item/weapon/storage/backpack/saddlebag/spider
@@ -38,15 +38,15 @@
slowdown = 1 //And are slower, too...
var/no_message = "You aren't the appropriate taur type to wear this!"
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(!istype(H))//Error, non HUMAN.
log_runtime("[H] was not a valid human!")
return
/obj/item/weapon/storage/backpack/saddlebag_common/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(!istype(H))//Error, non HUMAN.
log_runtime("[H] was not a valid human!")
return
var/datum/sprite_accessory/tail/taur/TT = H.tail_style
item_state = "[icon_base]_[TT.icon_sprite_tag]" //icon_sprite_tag is something like "deer"
return 1
var/datum/sprite_accessory/tail/taur/TT = H.tail_style
item_state = "[icon_base]_[TT.icon_sprite_tag]" //icon_sprite_tag is something like "deer"
return 1
+121 -121
View File
@@ -4,88 +4,88 @@
icon = 'icons/obj/gun.dmi'
icon_state = "p08"
spawn_nothing_percentage = 50
item_to_spawn()
return pick(prob(11);/obj/random/ammo_all,\
prob(11);/obj/item/weapon/gun/energy/laser,\
prob(11);/obj/item/weapon/gun/projectile/pirate,\
prob(10);/obj/item/weapon/material/twohanded/spear,\
prob(10);/obj/item/weapon/gun/energy/stunrevolver,\
prob(10);/obj/item/weapon/gun/energy/taser,\
prob(10);/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet,\
prob(10);/obj/item/weapon/material/knife,\
prob(10);/obj/item/weapon/gun/projectile/luger,\
/* prob(10);/obj/item/weapon/gun/projectile/pipegun,\ */
prob(10);/obj/item/weapon/gun/projectile/revolver/detective,\
prob(10);/obj/item/weapon/gun/projectile/revolver/judge,\
prob(10);/obj/item/weapon/gun/projectile/colt,\
prob(10);/obj/item/weapon/gun/projectile/shotgun/pump,\
prob(10);/obj/item/weapon/gun/projectile/shotgun/pump/rifle,\
prob(10);/obj/item/weapon/melee/baton,\
prob(10);/obj/item/weapon/melee/telebaton,\
prob(10);/obj/item/weapon/melee/classic_baton,\
prob(9);/obj/item/weapon/gun/projectile/automatic/wt550/lethal,\
prob(9);/obj/item/weapon/gun/projectile/automatic/pdw,\
prob(9);/obj/item/weapon/gun/projectile/automatic/sol, \
prob(9);/obj/item/weapon/gun/energy/crossbow/largecrossbow,\
prob(9);/obj/item/weapon/gun/projectile/pistol,\
prob(9);/obj/item/weapon/gun/projectile/shotgun/pump,\
prob(9);/obj/item/weapon/cane/concealed,\
prob(9);/obj/item/weapon/gun/energy/gun,\
prob(8);/obj/item/weapon/gun/energy/retro,\
prob(8);/obj/item/weapon/gun/energy/gun/eluger,\
prob(8);/obj/item/weapon/gun/energy/xray,\
prob(8);/obj/item/weapon/gun/projectile/automatic/c20r,\
prob(8);/obj/item/weapon/melee/energy/sword,\
prob(8);/obj/item/weapon/gun/projectile/derringer,\
prob(8);/obj/item/weapon/gun/projectile/revolver/lemat,\
/* prob(8);/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin,\ */
/* prob(8);/obj/item/weapon/gun/projectile/automatic/m41a,\ */
prob(7);/obj/item/weapon/material/butterfly,\
prob(7);/obj/item/weapon/material/butterfly/switchblade,\
prob(7);/obj/item/weapon/gun/projectile/giskard,\
prob(7);/obj/item/weapon/gun/projectile/automatic/p90,\
prob(7);/obj/item/weapon/gun/projectile/automatic/sts35,\
prob(7);/obj/item/weapon/gun/projectile/shotgun/pump/combat,\
prob(6);/obj/item/weapon/gun/energy/sniperrifle,\
prob(6);/obj/item/weapon/gun/projectile/automatic/z8,\
prob(6);/obj/item/weapon/gun/energy/captain,\
prob(6);/obj/item/weapon/material/knife/tacknife,\
prob(5);/obj/item/weapon/gun/projectile/shotgun/pump/USDF,\
prob(5);/obj/item/weapon/gun/projectile/giskard/olivaw,\
prob(5);/obj/item/weapon/gun/projectile/revolver/consul,\
prob(5);/obj/item/weapon/gun/projectile/revolver/mateba,\
prob(5);/obj/item/weapon/gun/projectile/revolver,\
prob(4);/obj/item/weapon/gun/projectile/deagle,\
prob(4);/obj/item/weapon/material/knife/tacknife/combatknife,\
prob(4);/obj/item/weapon/melee/energy/sword,\
prob(4);/obj/item/weapon/gun/projectile/automatic/mini_uzi,\
prob(4);/obj/item/weapon/gun/projectile/contender,\
prob(4);/obj/item/weapon/gun/projectile/contender/tacticool,\
prob(3);/obj/item/weapon/gun/projectile/SVD,\
prob(3);/obj/item/weapon/gun/energy/lasercannon,\
prob(3);/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever,\
prob(3);/obj/item/weapon/gun/projectile/automatic/bullpup,\
prob(2);/obj/item/weapon/gun/energy/pulse_rifle,\
prob(2);/obj/item/weapon/gun/energy/gun/nuclear,\
prob(2);/obj/item/weapon/gun/projectile/automatic/l6_saw,\
prob(2);/obj/item/weapon/gun/energy/gun/burst,\
prob(2);/obj/item/weapon/storage/box/frags,\
prob(2);/obj/item/weapon/twohanded/fireaxe,\
prob(2);/obj/item/weapon/gun/projectile/luger/brown,\
prob(2);/obj/item/weapon/gun/launcher/crossbow,\
/* prob(1);/obj/item/weapon/gun/projectile/automatic/battlerifle,\ */ // Too OP
prob(1);/obj/item/weapon/gun/projectile/deagle/gold,\
prob(1);/obj/item/weapon/gun/energy/imperial,\
prob(1);/obj/item/weapon/gun/projectile/automatic/as24,\
prob(1);/obj/item/weapon/gun/launcher/rocket,\
prob(1);/obj/item/weapon/gun/launcher/grenade,\
prob(1);/obj/item/weapon/gun/projectile/gyropistol,\
prob(1);/obj/item/weapon/gun/projectile/heavysniper,\
prob(1);/obj/item/weapon/plastique,\
prob(1);/obj/item/weapon/gun/energy/ionrifle,\
prob(1);/obj/item/weapon/material/sword,\
prob(1);/obj/item/weapon/cane/concealed,\
prob(1);/obj/item/weapon/material/sword/katana)
/obj/random/weapon/item_to_spawn()
return pick(prob(11);/obj/random/ammo_all,\
prob(11);/obj/item/weapon/gun/energy/laser,\
prob(11);/obj/item/weapon/gun/projectile/pirate,\
prob(10);/obj/item/weapon/material/twohanded/spear,\
prob(10);/obj/item/weapon/gun/energy/stunrevolver,\
prob(10);/obj/item/weapon/gun/energy/taser,\
prob(10);/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet,\
prob(10);/obj/item/weapon/material/knife,\
prob(10);/obj/item/weapon/gun/projectile/luger,\
/* prob(10);/obj/item/weapon/gun/projectile/pipegun,\ */
prob(10);/obj/item/weapon/gun/projectile/revolver/detective,\
prob(10);/obj/item/weapon/gun/projectile/revolver/judge,\
prob(10);/obj/item/weapon/gun/projectile/colt,\
prob(10);/obj/item/weapon/gun/projectile/shotgun/pump,\
prob(10);/obj/item/weapon/gun/projectile/shotgun/pump/rifle,\
prob(10);/obj/item/weapon/melee/baton,\
prob(10);/obj/item/weapon/melee/telebaton,\
prob(10);/obj/item/weapon/melee/classic_baton,\
prob(9);/obj/item/weapon/gun/projectile/automatic/wt550/lethal,\
prob(9);/obj/item/weapon/gun/projectile/automatic/pdw,\
prob(9);/obj/item/weapon/gun/projectile/automatic/sol, \
prob(9);/obj/item/weapon/gun/energy/crossbow/largecrossbow,\
prob(9);/obj/item/weapon/gun/projectile/pistol,\
prob(9);/obj/item/weapon/gun/projectile/shotgun/pump,\
prob(9);/obj/item/weapon/cane/concealed,\
prob(9);/obj/item/weapon/gun/energy/gun,\
prob(8);/obj/item/weapon/gun/energy/retro,\
prob(8);/obj/item/weapon/gun/energy/gun/eluger,\
prob(8);/obj/item/weapon/gun/energy/xray,\
prob(8);/obj/item/weapon/gun/projectile/automatic/c20r,\
prob(8);/obj/item/weapon/melee/energy/sword,\
prob(8);/obj/item/weapon/gun/projectile/derringer,\
prob(8);/obj/item/weapon/gun/projectile/revolver/lemat,\
/* prob(8);/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin,\ */
/* prob(8);/obj/item/weapon/gun/projectile/automatic/m41a,\ */
prob(7);/obj/item/weapon/material/butterfly,\
prob(7);/obj/item/weapon/material/butterfly/switchblade,\
prob(7);/obj/item/weapon/gun/projectile/giskard,\
prob(7);/obj/item/weapon/gun/projectile/automatic/p90,\
prob(7);/obj/item/weapon/gun/projectile/automatic/sts35,\
prob(7);/obj/item/weapon/gun/projectile/shotgun/pump/combat,\
prob(6);/obj/item/weapon/gun/energy/sniperrifle,\
prob(6);/obj/item/weapon/gun/projectile/automatic/z8,\
prob(6);/obj/item/weapon/gun/energy/captain,\
prob(6);/obj/item/weapon/material/knife/tacknife,\
prob(5);/obj/item/weapon/gun/projectile/shotgun/pump/USDF,\
prob(5);/obj/item/weapon/gun/projectile/giskard/olivaw,\
prob(5);/obj/item/weapon/gun/projectile/revolver/consul,\
prob(5);/obj/item/weapon/gun/projectile/revolver/mateba,\
prob(5);/obj/item/weapon/gun/projectile/revolver,\
prob(4);/obj/item/weapon/gun/projectile/deagle,\
prob(4);/obj/item/weapon/material/knife/tacknife/combatknife,\
prob(4);/obj/item/weapon/melee/energy/sword,\
prob(4);/obj/item/weapon/gun/projectile/automatic/mini_uzi,\
prob(4);/obj/item/weapon/gun/projectile/contender,\
prob(4);/obj/item/weapon/gun/projectile/contender/tacticool,\
prob(3);/obj/item/weapon/gun/projectile/SVD,\
prob(3);/obj/item/weapon/gun/energy/lasercannon,\
prob(3);/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever,\
prob(3);/obj/item/weapon/gun/projectile/automatic/bullpup,\
prob(2);/obj/item/weapon/gun/energy/pulse_rifle,\
prob(2);/obj/item/weapon/gun/energy/gun/nuclear,\
prob(2);/obj/item/weapon/gun/projectile/automatic/l6_saw,\
prob(2);/obj/item/weapon/gun/energy/gun/burst,\
prob(2);/obj/item/weapon/storage/box/frags,\
prob(2);/obj/item/weapon/twohanded/fireaxe,\
prob(2);/obj/item/weapon/gun/projectile/luger/brown,\
prob(2);/obj/item/weapon/gun/launcher/crossbow,\
/* prob(1);/obj/item/weapon/gun/projectile/automatic/battlerifle,\ */ // Too OP
prob(1);/obj/item/weapon/gun/projectile/deagle/gold,\
prob(1);/obj/item/weapon/gun/energy/imperial,\
prob(1);/obj/item/weapon/gun/projectile/automatic/as24,\
prob(1);/obj/item/weapon/gun/launcher/rocket,\
prob(1);/obj/item/weapon/gun/launcher/grenade,\
prob(1);/obj/item/weapon/gun/projectile/gyropistol,\
prob(1);/obj/item/weapon/gun/projectile/heavysniper,\
prob(1);/obj/item/weapon/plastique,\
prob(1);/obj/item/weapon/gun/energy/ionrifle,\
prob(1);/obj/item/weapon/material/sword,\
prob(1);/obj/item/weapon/cane/concealed,\
prob(1);/obj/item/weapon/material/sword/katana)
/obj/random/weapon/guarenteed
spawn_nothing_percentage = 0
@@ -95,45 +95,45 @@
desc = "This is random ammunition. Spawns all ammo types."
icon = 'icons/obj/ammo.dmi'
icon_state = "666"
item_to_spawn()
return pick(prob(5);/obj/item/weapon/storage/box/shotgunammo,\
prob(5);/obj/item/weapon/storage/box/shotgunshells,\
prob(5);/obj/item/ammo_magazine/clip/c762,\
prob(5);/obj/item/ammo_magazine/m380,\
prob(5);/obj/item/ammo_magazine/m45,\
prob(5);/obj/item/ammo_magazine/m9mm,\
prob(5);/obj/item/ammo_magazine/s38,\
prob(4);/obj/item/ammo_magazine/clip/c45,\
prob(4);/obj/item/ammo_magazine/clip/c9mm,\
prob(4);/obj/item/ammo_magazine/m45uzi,\
prob(4);/obj/item/ammo_magazine/m9mml,\
prob(4);/obj/item/ammo_magazine/m9mmt,\
prob(4);/obj/item/ammo_magazine/m9mmp90,\
prob(4);/obj/item/ammo_magazine/m10mm,\
prob(4);/obj/item/ammo_magazine/m545/small,\
prob(3);/obj/item/ammo_magazine/clip/c10mm,\
prob(3);/obj/item/ammo_magazine/clip/c44,\
prob(3);/obj/item/ammo_magazine/s44,\
prob(3);/obj/item/ammo_magazine/m762,\
prob(3);/obj/item/ammo_magazine/m545,\
prob(3);/obj/item/weapon/cell/device/weapon,\
prob(2);/obj/item/ammo_magazine/m44,\
prob(2);/obj/item/ammo_magazine/s357,\
prob(2);/obj/item/ammo_magazine/m762m,\
prob(2);/obj/item/ammo_magazine/clip/c12g,
prob(2);/obj/item/ammo_magazine/clip/c12g/pellet,\
prob(1);/obj/item/ammo_magazine/m45tommy,\
/* prob(1);/obj/item/ammo_magazine/m95,\ */
prob(1);/obj/item/ammo_casing/rocket,\
prob(1);/obj/item/weapon/storage/box/sniperammo,\
prob(1);/obj/item/weapon/storage/box/flashshells,\
prob(1);/obj/item/weapon/storage/box/beanbags,\
prob(1);/obj/item/weapon/storage/box/stunshells,\
prob(1);/obj/item/ammo_magazine/mtg,\
prob(1);/obj/item/ammo_magazine/m12gdrum,\
prob(1);/obj/item/ammo_magazine/m12gdrum/pellet,\
prob(1);/obj/item/ammo_magazine/m45tommydrum
)
/obj/random/ammo_all/item_to_spawn()
return pick(prob(5);/obj/item/weapon/storage/box/shotgunammo,\
prob(5);/obj/item/weapon/storage/box/shotgunshells,\
prob(5);/obj/item/ammo_magazine/clip/c762,\
prob(5);/obj/item/ammo_magazine/m380,\
prob(5);/obj/item/ammo_magazine/m45,\
prob(5);/obj/item/ammo_magazine/m9mm,\
prob(5);/obj/item/ammo_magazine/s38,\
prob(4);/obj/item/ammo_magazine/clip/c45,\
prob(4);/obj/item/ammo_magazine/clip/c9mm,\
prob(4);/obj/item/ammo_magazine/m45uzi,\
prob(4);/obj/item/ammo_magazine/m9mml,\
prob(4);/obj/item/ammo_magazine/m9mmt,\
prob(4);/obj/item/ammo_magazine/m9mmp90,\
prob(4);/obj/item/ammo_magazine/m10mm,\
prob(4);/obj/item/ammo_magazine/m545/small,\
prob(3);/obj/item/ammo_magazine/clip/c10mm,\
prob(3);/obj/item/ammo_magazine/clip/c44,\
prob(3);/obj/item/ammo_magazine/s44,\
prob(3);/obj/item/ammo_magazine/m762,\
prob(3);/obj/item/ammo_magazine/m545,\
prob(3);/obj/item/weapon/cell/device/weapon,\
prob(2);/obj/item/ammo_magazine/m44,\
prob(2);/obj/item/ammo_magazine/s357,\
prob(2);/obj/item/ammo_magazine/m762m,\
prob(2);/obj/item/ammo_magazine/clip/c12g,
prob(2);/obj/item/ammo_magazine/clip/c12g/pellet,\
prob(1);/obj/item/ammo_magazine/m45tommy,\
/* prob(1);/obj/item/ammo_magazine/m95,\ */
prob(1);/obj/item/ammo_casing/rocket,\
prob(1);/obj/item/weapon/storage/box/sniperammo,\
prob(1);/obj/item/weapon/storage/box/flashshells,\
prob(1);/obj/item/weapon/storage/box/beanbags,\
prob(1);/obj/item/weapon/storage/box/stunshells,\
prob(1);/obj/item/ammo_magazine/mtg,\
prob(1);/obj/item/ammo_magazine/m12gdrum,\
prob(1);/obj/item/ammo_magazine/m12gdrum/pellet,\
prob(1);/obj/item/ammo_magazine/m45tommydrum
)
/obj/random/cargopod
name = "Random Cargo Item"
+1 -6
View File
@@ -1,10 +1,5 @@
<<<<<<< HEAD
proc/createRandomZlevel()
if(awaydestinations.len || UNIT_TEST) //crude, but it saves another var! //VOREStation Edit - No loading away missions during CI testing
=======
/proc/createRandomZlevel()
if(awaydestinations.len) //crude, but it saves another var!
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(awaydestinations.len || UNIT_TEST) //crude, but it saves another var! //VOREStation Edit - No loading away missions during CI testing
return
var/list/potentialRandomZlevels = list()
@@ -140,11 +140,7 @@
return TOPIC_REFRESH
else if(href_list["metadata"])
<<<<<<< HEAD
var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata)) as message, extra = 0) //VOREStation Edit
=======
var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , pref.metadata) as message|null)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata)) as message|null, extra = 0) //VOREStation Edit
if(new_metadata && CanUseTopic(user))
pref.metadata = new_metadata
return TOPIC_REFRESH
File diff suppressed because it is too large Load Diff
+16 -16
View File
@@ -135,10 +135,10 @@
tgarscreen_path = /datum/tgui_module/crew_monitor/glasses
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED)
ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/med/ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/sec
name = "\improper AR-S glasses"
@@ -151,10 +151,10 @@
tgarscreen_path = /datum/tgui_module/alarm_monitor/security/glasses
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_WANTED,VIS_AUGMENTED)
ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/sec/ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/eng
name = "\improper AR-E glasses"
@@ -166,10 +166,10 @@
action_button_name = "AR Console (Station Alerts)"
tgarscreen_path = /datum/tgui_module/alarm_monitor/engineering/glasses
ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/eng/ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/rnd
name = "\improper AR-R glasses"
@@ -226,10 +226,10 @@
action_button_name = "AR Console (All Alerts)"
tgarscreen_path = /datum/tgui_module/alarm_monitor/all/glasses
ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/omnihud/all/ar_interact(var/mob/living/carbon/human/user)
if(tgarscreen)
tgarscreen.tgui_interact(user)
return 1
/obj/item/clothing/glasses/hud/security/eyepatch
name = "Security Hudpatch"
+2 -2
View File
@@ -114,7 +114,7 @@
icon_state = "talon_captain_cap"
item_state = "taloncaptaincap"
obj/item/clothing/head/beret/talon
/obj/item/clothing/head/beret/talon
name = "ITV beret"
desc = "It's a basic baret colored to match ITV's uniforms."
icon = 'icons/obj/clothing/hats_vr.dmi'
@@ -122,7 +122,7 @@ obj/item/clothing/head/beret/talon
icon_state = "beret_talon"
item_state = "baret_talon"
obj/item/clothing/head/beret/talon/command
/obj/item/clothing/head/beret/talon/command
name = "ITV officer beret"
desc = "It's a basic baret colored to match ITV's uniforms with a badge pinned on the front. Perfect for commanders."
icon = 'icons/obj/clothing/hats_vr.dmi'
+7 -7
View File
@@ -19,13 +19,13 @@
icon = 'icons/mob/taursuits_wolf_vr.dmi'
icon_state = "wolf_item"
item_state = "heavy_wolf_armor"
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
return ..()
else
to_chat(H,"<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
return 0
/obj/item/clothing/suit/armor/vest/wolftaur/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
return ..()
else
to_chat(H,"<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
return 0
// HoS armor improved by Vorestation to be slightly better than normal security stuff.
/obj/item/clothing/suit/storage/vest/hoscoat
+1 -13
View File
@@ -104,12 +104,8 @@
matter = list("glass" = 175)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
<<<<<<< HEAD
cut_overlays()
=======
overlays.Cut()
name = "shot glass"
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(!reagents.total_volume)
return
@@ -120,17 +116,9 @@
if(4 to 7) filling.icon_state = "[icon_state]5"
if(8 to INFINITY) filling.icon_state = "[icon_state]12"
<<<<<<< HEAD
filling.color += reagents.get_color()
add_overlay(filling)
name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
else
name = "shot glass"
=======
filling.color += reagents.get_color()
overlays += filling
add_overlay(filling)
name += " of [reagents.get_master_reagent_name()]" //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask
name = "fitness shaker"
-1
View File
@@ -371,5 +371,4 @@
#undef LUM_FALLOFF
#undef REMOVE_CORNER
#undef APPLY_CORNER
#undef REMOVE_CORNER_SIMPLE
#undef APPLY_CORNER_SIMPLE
+1 -964
View File
@@ -1,4 +1,3 @@
<<<<<<< HEAD
/mob/observer
name = "observer"
desc = "This shouldn't appear"
@@ -838,7 +837,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) //Inversion, because "not seeing" the darkness is "seeing" the lighting plane master.
plane_holder.set_vis(VIS_GHOSTS, ghostvision)
mob/observer/dead/MayRespawn(var/feedback = 0)
/mob/observer/dead/MayRespawn(var/feedback = 0)
if(!client)
return 0
if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse)
@@ -968,965 +967,3 @@ mob/observer/dead/MayRespawn(var/feedback = 0)
set name = "Respawn"
set category = "Ghost"
src.abandon_mob()
=======
/mob/observer
name = "observer"
desc = "This shouldn't appear"
density = 0
/mob/observer/dead
name = "ghost"
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
icon = 'icons/mob/ghost.dmi'
icon_state = "ghost"
stat = DEAD
canmove = 0
blinded = 0
anchored = 1 // don't get pushed around
var/can_reenter_corpse
var/datum/hud/living/carbon/hud = null // hud
var/bootime = 0
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
//If you died in the game and are a ghsot - this will remain as null.
//Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
var/has_enabled_antagHUD = 0
var/medHUD = 0
var/secHUD = 0
var/antagHUD = 0
universal_speak = 1
var/atom/movable/following = null
var/admin_ghosted = 0
var/anonsay = 0
var/ghostvision = 1 //is the ghost able to see things humans can't?
incorporeal_move = 1
var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil.
var/ghost_sprite = null
var/global/list/possible_ghost_sprites = list(
"Clear" = "blank",
"Green Blob" = "otherthing",
"Bland" = "ghost",
"Robed-B" = "ghost1",
"Robed-BAlt" = "ghost2",
"King" = "ghostking",
"Shade" = "shade",
"Hecate" = "ghost-narsie",
"Glowing Statue" = "armour",
"Artificer" = "artificer",
"Behemoth" = "behemoth",
"Harvester" = "harvester",
"Wraith" = "wraith",
"Viscerator" = "viscerator",
"Corgi" = "corgi",
"Tamaskan" = "tamaskan",
"Black Cat" = "blackcat",
"Lizard" = "lizard",
"Goat" = "goat",
"Space Bear" = "bear",
"Bats" = "bat",
"Chicken" = "chicken_white",
"Parrot"= "parrot_fly",
"Goose" = "goose",
"Penguin" = "penguin",
"Brown Crab" = "crab",
"Gray Crab" = "evilcrab",
"Trout" = "trout-swim",
"Salmon" = "salmon-swim",
"Pike" = "pike-swim",
"Koi" = "koi-swim",
"Carp" = "carp",
"Red Robes" = "robe_red",
"Faithless" = "faithless",
"Shadowform" = "forgotten",
"Dark Ethereal" = "bloodguardian",
"Holy Ethereal" = "lightguardian",
"Red Elemental" = "magicRed",
"Blue Elemental" = "magicBlue",
"Pink Elemental" = "magicPink",
"Orange Elemental" = "magicOrange",
"Green Elemental" = "magicGreen",
"Daemon" = "daemon",
"Guard Spider" = "guard",
"Hunter Spider" = "hunter",
"Nurse Spider" = "nurse",
"Rogue Drone" = "drone",
"ED-209" = "ed209",
"Beepsky" = "secbot"
)
var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners.
var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns
/mob/observer/dead/New(mob/body)
appearance = body
invisibility = INVISIBILITY_OBSERVER
layer = BELOW_MOB_LAYER
plane = PLANE_GHOSTS
alpha = 127
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
see_invisible = SEE_INVISIBLE_OBSERVER
see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but...
verbs += /mob/observer/dead/proc/dead_tele
var/turf/T
if(ismob(body))
T = get_turf(body) //Where is the body located?
attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
gender = body.gender
if(body.mind && body.mind.name)
name = body.mind.name
else
if(body.real_name)
name = body.real_name
else
if(gender == MALE)
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
else
name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
mind = body.mind //we don't transfer the mind but we keep a reference to it.
// Fix for naked ghosts.
// Unclear why this isn't being grabbed by appearance.
if(ishuman(body))
var/mob/living/carbon/human/H = body
add_overlay(H.overlays_standing)
if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position
forceMove(T)
if(!name) //To prevent nameless ghosts
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
real_name = name
animate(src, pixel_y = 2, time = 10, loop = -1)
..()
/mob/observer/dead/Topic(href, href_list)
if (href_list["track"])
var/mob/target = locate(href_list["track"]) in mob_list
if(target)
ManualFollow(target)
if(href_list["reenter"])
reenter_corpse()
return
/mob/observer/dead/attackby(obj/item/W, mob/user)
if(istype(W,/obj/item/weapon/book/tome))
var/mob/observer/dead/M = src
M.manifest(user)
/mob/observer/dead/CanPass(atom/movable/mover, turf/target)
return TRUE
/mob/observer/dead/set_stat(var/new_stat)
if(new_stat != DEAD)
CRASH("It is best if observers stay dead, thank you.")
/mob/observer/dead/examine_icon()
var/icon/I = get_cached_examine_icon(src)
if(!I)
I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE)
set_cached_examine_icon(src, I, 200 SECONDS)
return I
/mob/observer/dead/examine(mob/user)
. = ..()
if(is_admin(user))
. += "\t><span class='admin'>[ADMIN_FULLMONTY(src)]</span>"
/*
Transfer_mind is there to check if mob is being deleted/not going to have a body.
Works together with spawning an observer, noted above.
*/
/mob/observer/dead/Life()
..()
if(!loc) return
if(!client) return 0
handle_regular_hud_updates()
handle_vision()
/mob/proc/ghostize(var/can_reenter_corpse = 1)
if(key)
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.vr_holder && !can_reenter_corpse)
H.exit_vr()
return 0
var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc.
ghost.can_reenter_corpse = can_reenter_corpse
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
ghost.key = key
if(istype(loc, /obj/structure/morgue))
var/obj/structure/morgue/M = loc
M.update()
else if(istype(loc, /obj/structure/closet/body_bag))
var/obj/structure/closet/body_bag/B = loc
B.update()
if(ghost.client)
ghost.client.time_died_as_mouse = ghost.timeofdeath
if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
return ghost
/*
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
*/
/mob/living/verb/ghost()
set category = "OOC"
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
if(stat == DEAD && !forbid_seeing_deadchat)
announce_ghost_joinleave(ghostize(1))
else
var/response
if(src.client && src.client.holder)
response = alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", "Ghost", "Admin Ghost", "Stay in body")
if(response == "Admin Ghost")
if(!src.client)
return
src.client.admin_ghost()
else
response = alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. If you ghost, you won't be able to play this round until you respawn as a new character! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body")
if(response != "Ghost")
return
resting = 1
var/turf/location = get_turf(src)
var/special_role = check_special_role()
if(!istype(loc,/obj/machinery/cryopod))
log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)",usr)
else if(special_role)
log_and_message_admins("has ghosted in cryo as [special_role]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)",usr)
var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
if(ghost)
ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly.
ghost.set_respawn_timer()
announce_ghost_joinleave(ghost)
/mob/observer/dead/can_use_hands() return 0
/mob/observer/dead/is_active() return 0
/mob/observer/dead/Stat()
..()
if(statpanel("Status"))
if(emergency_shuttle)
var/eta_status = emergency_shuttle.get_status_panel_eta()
if(eta_status)
stat(null, eta_status)
/mob/observer/dead/verb/reenter_corpse()
set category = "Ghost"
set name = "Re-enter Corpse"
if(!client) return
if(!(mind && mind.current && can_reenter_corpse))
to_chat(src, "<span class='warning'>You have no body.</span>")
return
if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients
to_chat(usr, "<span class='warning'>Another consciousness is in your body... it is resisting you.</span>")
return
if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune).
var/found_rune
for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune
if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune.
found_rune = 1
break
if(!found_rune)
to_chat(usr, "<span class='warning'>The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.</span>")
return
mind.current.ajourn=0
mind.current.key = key
mind.current.teleop = null
if(istype(mind.current.loc, /obj/structure/morgue))
var/obj/structure/morgue/M = mind.current.loc
M.update(1)
else if(istype(mind.current.loc, /obj/structure/closet/body_bag))
var/obj/structure/closet/body_bag/B = mind.current.loc
B.update(1)
if(!admin_ghosted)
announce_ghost_joinleave(mind, 0, "They now occupy their body again.")
return 1
/mob/observer/dead/verb/toggle_medHUD()
set category = "Ghost"
set name = "Toggle MedicHUD"
set desc = "Toggles Medical HUD allowing you to see how everyone is doing"
medHUD = !medHUD
plane_holder.set_vis(VIS_CH_HEALTH, medHUD)
plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD)
to_chat(src, "<font color='blue'><B>Medical HUD [medHUD ? "Enabled" : "Disabled"]</B></font>")
/mob/observer/dead/verb/toggle_secHUD()
set category = "Ghost"
set name = "Toggle Security HUD"
set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc"
secHUD = !secHUD
plane_holder.set_vis(VIS_CH_ID, secHUD)
plane_holder.set_vis(VIS_CH_WANTED, secHUD)
plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD)
plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD)
plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD)
to_chat(src, "<font color='blue'><B>Security HUD [secHUD ? "Enabled" : "Disabled"]</B></font>")
/mob/observer/dead/verb/toggle_antagHUD()
set category = "Ghost"
set name = "Toggle AntagHUD"
set desc = "Toggles AntagHUD allowing you to see who is the antagonist"
if(!config.antag_hud_allowed && !client.holder)
to_chat(src, "<font color='red'>Admins have disabled this for this round.</font>")
return
if(jobban_isbanned(src, "AntagHUD"))
to_chat(src, "<font color='red'><B>You have been banned from using this feature</B></font>")
return
if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder)
var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No")
if(response == "No") return
can_reenter_corpse = FALSE
set_respawn_timer(-1) // Foreeeever
if(!has_enabled_antagHUD && !client.holder)
has_enabled_antagHUD = TRUE
antagHUD = !antagHUD
plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD)
to_chat(src, "<font color='blue'><B>AntagHUD [antagHUD ? "Enabled" : "Disabled"]</B></font>")
/mob/observer/dead/proc/jumpable_areas()
var/list/areas = return_sorted_areas()
if(client?.holder)
return areas
for(var/area/A as anything in areas)
if(A.z in using_map?.secret_levels)
areas -= A
return areas
/mob/observer/dead/proc/jumpable_mobs()
var/list/mobs = getmobs()
if(client?.holder)
return mobs
for(var/key in mobs)
var/mobz = get_z(mobs[key])
if(mobz in using_map?.secret_levels)
mobs -= key
return mobs
/mob/observer/dead/proc/dead_tele(var/area/A in jumpable_areas())
set category = "Ghost"
set name = "Teleport"
set desc = "Teleport to a location"
if(!istype(usr, /mob/observer/dead))
to_chat(usr, "Not when you're not dead!")
return
if(!A)
A = input(usr, "Select an area:", "Ghost Teleport") as null|anything in jumpable_areas()
if(!A)
return
usr.forceMove(pick(get_area_turfs(A)))
usr.on_mob_jump()
/mob/observer/dead/verb/follow(input in jumpable_mobs())
set category = "Ghost"
set name = "Follow" // "Haunt"
set desc = "Follow and haunt a mob."
if(!input)
input = input(usr, "Select a mob:", "Ghost Follow") as null|anything in jumpable_mobs()
if(!input)
return
var/target = jumpable_mobs()[input]
if(!target) return
ManualFollow(target)
/mob/observer/dead/forceMove(atom/destination)
if(client?.holder)
return ..()
if(get_z(destination) in using_map?.secret_levels)
to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
if(following)
stop_following()
return
return ..()
/mob/observer/dead/Move(atom/newloc, direct = 0, movetime)
if(client?.holder)
return ..()
if(get_z(newloc) in using_map?.secret_levels)
to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
if(following)
stop_following()
return
return ..()
// This is the ghost's follow verb with an argument
/mob/observer/dead/proc/ManualFollow(var/atom/movable/target)
if(!target)
return
var/turf/targetloc = get_turf(target)
if(check_holy(targetloc))
to_chat(usr, "<span class='warning'>You cannot follow a mob standing on holy grounds!</span>")
return
if(get_z(target) in using_map?.secret_levels)
to_chat(src, SPAN_WARNING("Sorry, that target is in an area that ghosts aren't allowed to go."))
return
if(target != src)
if(following && following == target)
return
following = target
to_chat(src, "<span class='notice'>Now following [target]</span>")
if(ismob(target))
forceMove(get_turf(target))
var/mob/M = target
M.following_mobs += src
else
spawn(0)
while(target && following == target && client)
var/turf/T = get_turf(target)
if(!T)
break
// To stop the ghost flickering.
if(loc != T)
forceMove(T)
sleep(15)
var/icon/I = icon(target.icon,target.icon_state,target.dir)
var/orbitsize = (I.Width()+I.Height())*0.5
orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
var/rot_seg
/* We don't have this pref yet
switch(ghost_orbit)
if(GHOST_ORBIT_TRIANGLE)
rot_seg = 3
if(GHOST_ORBIT_SQUARE)
rot_seg = 4
if(GHOST_ORBIT_PENTAGON)
rot_seg = 5
if(GHOST_ORBIT_HEXAGON)
rot_seg = 6
else //Circular
rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle
*/
orbit(target, orbitsize, FALSE, 20, rot_seg)
/mob/observer/dead/orbit()
set_dir(2) //reset dir so the right directional sprites show up
return ..()
/mob/observer/dead/stop_orbit()
. = ..()
//restart our floating animation after orbit is done.
pixel_y = 0
pixel_x = 0
transform = null
animate(src, pixel_y = 2, time = 10, loop = -1)
/mob/observer/dead/proc/stop_following()
following = null
stop_orbit()
/mob/proc/update_following()
. = get_turf(src)
for(var/mob/observer/dead/M in following_mobs)
if(M.following != src)
following_mobs -= M
else
if(M.loc != .)
M.forceMove(.)
/mob
var/list/following_mobs = list()
/mob/Destroy()
for(var/mob/observer/dead/M in following_mobs)
M.stop_following()
following_mobs = null
return ..()
/mob/observer/dead/Destroy()
if(ismob(following))
var/mob/M = following
M.following_mobs -= src
stop_following()
return ..()
/mob/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
update_following()
/mob/Life()
// to catch teleports etc which directly set loc
update_following()
return ..()
/mob/proc/check_holy(var/turf/T)
return 0
/mob/observer/dead/check_holy(var/turf/T)
if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src))
return 0
return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists))
/mob/observer/dead/verb/jumptomob(input in jumpable_mobs()) //Moves the ghost instead of just changing the ghosts's eye -Nodrak
set category = "Ghost"
set name = "Jump to Mob"
set desc = "Teleport to a mob"
set popup_menu = FALSE
if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer!
return
if(!input)
input = input(usr, "Select a mob:", "Ghost Jump") as null|anything in jumpable_mobs()
if(!input)
return
var/target = jumpable_mobs()[input]
if (!target)//Make sure we actually have a target
return
else
var/mob/M = target //Destination mob
var/turf/T = get_turf(M) //Turf of the destination mob
if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination.
forceMove(T)
stop_following()
else
to_chat(src, "This mob is not located in the game world.")
/mob/observer/dead/memory()
set hidden = 1
to_chat(src, "<font color='red'>You are dead! You have no mind to store memory!</font>")
/mob/observer/dead/add_memory()
set hidden = 1
to_chat(src, "<font color='red'>You are dead! You have no mind to store memory!</font>")
/mob/observer/dead/Post_Incorpmove()
stop_following()
/mob/observer/dead/verb/analyze_air()
set name = "Analyze Air"
set category = "Ghost"
if(!istype(usr, /mob/observer/dead)) return
// Shamelessly copied from the Gas Analyzers
if (!( istype(usr.loc, /turf) ))
return
var/datum/gas_mixture/environment = usr.loc.return_air()
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles
to_chat(src, "<font color='blue'><B>Results:</B></font>")
if(abs(pressure - ONE_ATMOSPHERE) < 10)
to_chat(src, "<font color='blue'>Pressure: [round(pressure,0.1)] kPa</font>")
else
to_chat(src, "<font color='red'>Pressure: [round(pressure,0.1)] kPa</font>")
if(total_moles)
for(var/g in environment.gas)
to_chat(src, "<font color='blue'>[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)</font>")
to_chat(src, "<font color='blue'>Temperature: [round(environment.temperature-T0C,0.1)]&deg;C ([round(environment.temperature,0.1)]K)</font>")
to_chat(src, "<font color='blue'>Heat Capacity: [round(environment.heat_capacity(),0.1)]</font>")
/mob/observer/dead/verb/check_radiation()
set name = "Check Radiation"
set category = "Ghost"
var/turf/t = get_turf(src)
if(t)
var/rads = SSradiation.get_rads_at_turf(t)
to_chat(src, "<span class='notice'>Radiation level: [rads ? rads : "0"] Bq.</span>")
/mob/observer/dead/verb/become_mouse()
set name = "Become mouse"
set category = "Ghost"
if(config.disable_player_mice)
to_chat(src, "<span class='warning'>Spawning as a mouse is currently disabled.</span>")
return
if(!MayRespawn(1))
return
var/turf/T = get_turf(src)
if(!T || (T.z in using_map.admin_levels))
to_chat(src, "<span class='warning'>You may not spawn as a mouse on this Z-level.</span>")
return
var/timedifference = world.time - client.time_died_as_mouse
if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
var/timedifference_text
timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss")
to_chat(src, "<span class='warning'>You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.</span>")
return
var/response = alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?","Squeek!","Nope!")
if(response != "Squeek!") return //Hit the wrong key...again.
//find a viable mouse candidate
var/mob/living/simple_mob/animal/passive/mouse/host
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
var/list/found_vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines)
if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20)
found_vents.Add(v)
if(found_vents.len)
vent_found = pick(found_vents)
host = new /mob/living/simple_mob/animal/passive/mouse(vent_found)
else
to_chat(src, "<span class='warning'>Unable to find any unwelded vents to spawn mice at.</span>")
if(host)
if(config.uneducated_mice)
host.universal_understand = 0
announce_ghost_joinleave(src, 0, "They are now a mouse.")
host.ckey = src.ckey
host.add_ventcrawl(vent_found)
to_chat(host, "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>")
/mob/observer/dead/verb/view_manfiest()
set name = "Show Crew Manifest"
set category = "Ghost"
var/dat
dat += "<h4>Crew Manifest</h4>"
dat += data_core.get_manifest()
src << browse(dat, "window=manifest;size=370x420;can_close=1")
//This is called when a ghost is drag clicked to something.
/mob/observer/dead/MouseDrop(atom/over)
if(!usr || !over) return
if (isobserver(usr) && usr.client && usr.client.holder && isliving(over))
if (usr.client.holder.cmd_ghost_drag(src,over))
return
return ..()
//Used for drawing on walls with blood puddles as a spooky ghost.
/mob/observer/dead/verb/bloody_doodle()
set category = "Ghost"
set name = "Write in blood"
set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC."
if(!(config.cult_ghostwriter))
to_chat(src, "<font color='red'>That verb is not currently permitted.</font>")
return
if (!src.stat)
return
if (usr != src)
return 0 //something is terribly wrong
var/ghosts_can_write
if(ticker.mode.name == "cult")
if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists)
ghosts_can_write = 1
if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such.
to_chat(src, "<font color='red'>The veil is not thin enough for you to do that.</font>")
return
var/list/choices = list()
for(var/obj/effect/decal/cleanable/blood/B in view(1,src))
if(B.amount > 0)
choices += B
if(!choices.len)
to_chat(src, "<span class = 'warning'>There is no blood to use nearby.</span>")
return
var/obj/effect/decal/cleanable/blood/choice = input(src,"What blood would you like to use?") in null|choices
var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West")
var/turf/simulated/T = src.loc
if (direction != "Here")
T = get_step(T,text2dir(direction))
if (!istype(T))
to_chat(src, "<span class='warning'>You cannot doodle there.</span>")
return
if(!choice || choice.amount == 0 || !(src.Adjacent(choice)))
return
var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808"
var/num_doodles = 0
for (var/obj/effect/decal/cleanable/blood/writing/W in T)
num_doodles++
if (num_doodles > 4)
to_chat(src, "<span class='warning'>There is no space to write on!</span>")
return
var/max_length = 50
var/message = sanitize(input("Write a message. It cannot be longer than [max_length] characters.","Blood writing", ""))
if (message)
if (length(message) > max_length)
message += "-"
to_chat(src, "<span class='warning'>You ran out of blood to write with!</span>")
var/obj/effect/decal/cleanable/blood/writing/W = new(T)
W.basecolor = doodle_color
W.update_icon()
W.message = message
W.add_hiddenprint(src)
W.visible_message("<font color='red'>Invisible fingers crudely paint something in blood on [T]...</font>")
/mob/observer/dead/pointed(atom/A as mob|obj|turf in view())
if(!..())
return 0
usr.visible_message("<span class='deadsay'><b>[src]</b> points to [A]</span>")
return 1
/mob/observer/dead/proc/manifest(mob/user)
is_manifest = TRUE
verbs |= /mob/observer/dead/proc/toggle_visibility
verbs |= /mob/observer/dead/proc/ghost_whisper
to_chat(src, "<font color='purple'>As you are now in the realm of the living, you can whisper to the living with the <b>Spectral Whisper</b> verb, inside the IC tab.</font>")
if(plane != PLANE_WORLD)
user.visible_message( \
"<span class='warning'>\The [user] drags ghost, [src], to our plane of reality!</span>", \
"<span class='warning'>You drag [src] to our plane of reality!</span>" \
)
toggle_visibility(TRUE)
else
var/datum/gender/T = gender_datums[user.get_visible_gender()]
user.visible_message ( \
"<span class='warning'>\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.</span>", \
"<span class='warning'>You get the feeling that the ghost can't become any more visible.</span>" \
)
/mob/observer/dead/proc/toggle_icon(var/icon)
if(!client)
return
var/iconRemoved = 0
for(var/image/I in client.images)
if(I.icon_state == icon)
iconRemoved = 1
qdel(I)
if(!iconRemoved)
var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon)
client.images += J
/mob/observer/dead/proc/toggle_visibility(var/forced = 0)
set category = "Ghost"
set name = "Toggle Visibility"
set desc = "Allows you to turn (in)visible (almost) at will."
var/toggled_invisible
if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600)
to_chat(src, "You must gather strength before you can turn visible again...")
return
if(plane == PLANE_WORLD)
toggled_invisible = world.time
visible_message("<span class='emote'>It fades from sight...</span>", "<span class='info'>You are now invisible.</span>")
else
to_chat(src, "<span class='info'>You are now visible!</span>")
plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS
invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER
// Give the ghost a cult icon which should be visible only to itself
toggle_icon("cult")
/mob/observer/dead/verb/toggle_anonsay()
set category = "Ghost"
set name = "Toggle Anonymous Chat"
set desc = "Toggles showing your key in dead chat."
src.anonsay = !src.anonsay
if(anonsay)
to_chat(src, "<span class='info'>Your key won't be shown when you speak in dead chat.</span>")
else
to_chat(src, "<span class='info'>Your key will be publicly visible again.</span>")
/mob/observer/dead/canface()
return 1
/mob/observer/dead/proc/can_admin_interact()
return check_rights(R_ADMIN|R_EVENT, 0, src)
/mob/observer/dead/verb/toggle_ghostsee()
set name = "Toggle Ghost Vision"
set desc = "Toggles your ability to see things only ghosts can see, like other ghosts"
set category = "Ghost"
ghostvision = !ghostvision
updateghostsight()
to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.")
/mob/observer/dead/verb/toggle_darkness()
set name = "Toggle Darkness"
set desc = "Toggles your ability to see lighting overlays, and the darkness they create."
set category = "Ghost"
seedarkness = !seedarkness
updateghostsight()
to_chat(src, "You [seedarkness ? "now" : "no longer"] see darkness.")
/mob/observer/dead/proc/updateghostsight()
plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) //Inversion, because "not seeing" the darkness is "seeing" the lighting plane master.
plane_holder.set_vis(VIS_GHOSTS, ghostvision)
/mob/observer/dead/MayRespawn(var/feedback = 0)
if(!client)
return 0
if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse)
if(feedback)
to_chat(src, "<span class='warning'>Your non-dead body prevent you from respawning.</span>")
return 0
if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
if(feedback)
to_chat(src, "<span class='warning'>antagHUD restrictions prevent you from respawning.</span>")
return 0
return 1
/atom/proc/extra_ghost_link()
return
/mob/extra_ghost_link(var/atom/ghost)
if(client && eyeobj)
return "|<a href='byond://?src=\ref[ghost];track=\ref[eyeobj]'>eye</a>"
/mob/observer/dead/extra_ghost_link(var/atom/ghost)
if(mind && mind.current)
return "|<a href='byond://?src=\ref[ghost];track=\ref[mind.current]'>body</a>"
/proc/ghost_follow_link(var/atom/target, var/atom/ghost)
if((!target) || (!ghost)) return
. = "<a href='byond://?src=\ref[ghost];track=\ref[target]'>follow</a>"
. += target.extra_ghost_link(ghost)
//Culted Ghosts
/mob/observer/dead/proc/ghost_whisper()
set name = "Spectral Whisper"
set category = "IC"
if(is_manifest) //Only able to whisper if it's hit with a tome.
var/list/options = list()
for(var/mob/living/Ms in view(src))
options += Ms
var/mob/living/M = input(src, "Select who to whisper to:", "Whisper to?", null) as null|mob in options
if(!M)
return 0
var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null)
if(msg)
log_say("(SPECWHISP to [key_name(M)]): [msg]", src)
to_chat(M, "<span class='warning'> You hear a strange, unidentifiable voice in your head... <font color='purple'>[msg]</font></span>")
to_chat(src, "<span class='warning'> You said: '[msg]' to [M].</span>")
else
return
return 1
else
to_chat(src, "<span class='danger'>You have not been pulled past the veil!</span>")
/mob/observer/dead/verb/choose_ghost_sprite()
set category = "Ghost"
set name = "Choose Sprite"
var/choice
var/previous_state
var/finalized = "No"
while(finalized == "No" && src.client)
choice = input(usr,"What would you like to use for your ghost sprite?") as null|anything in possible_ghost_sprites
if(!choice)
return
if(choice)
icon = 'icons/mob/ghost.dmi'
overlays.Cut()
if(icon_state && icon)
previous_state = icon_state
icon_state = possible_ghost_sprites[choice]
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
ghost_sprite = possible_ghost_sprites[choice]
if(finalized == "No")
icon_state = previous_state
/mob/observer/dead/is_blind()
return FALSE
/mob/observer/dead/is_deaf()
return FALSE
/mob/observer/dead/verb/paialert()
set category = "Ghost"
set name = "Blank pAI alert"
set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
if(usr.client.prefs?.be_special & BE_PAI)
var/count = 0
for(var/obj/item/device/paicard/p in all_pai_cards)
var/obj/item/device/paicard/PP = p
if(PP.pai == null)
count++
PP.overlays += "pai-ghostalert"
spawn(54)
PP.overlays.Cut()
to_chat(usr,"<span class='notice'>Flashing the displays of [count] unoccupied PAIs.</span>")
else
to_chat(usr,"<span class='warning'>You have 'Be pAI' disabled in your character prefs, so we can't help you.</span>")
/mob/observer/dead/speech_bubble_appearance()
return "ghost"
// Lets a ghost know someone's trying to bring them back, and for them to get into their body.
// Mostly the same as TG's sans the hud element, since we don't have TG huds.
/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source)
if((last_revive_notification + 2 MINUTES) > world.time)
return
last_revive_notification = world.time
if(flashwindow)
window_flash(client)
if(message)
to_chat(src, "<span class='ghostalert'><font size=4>[message]</font></span>")
if(source)
throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source)
to_chat(src, "<span class='ghostalert'><a href=?src=[REF(src)];reenter=1>(Click to re-enter)</a></span>")
if(sound)
SEND_SOUND(src, sound(sound))
/mob/observer/dead/verb/respawn()
set name = "Respawn"
set category = "Ghost"
src.abandon_mob()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
@@ -336,7 +336,7 @@
)
wikilink="https://wiki.vore-station.net/Vox"
datum/species/harpy
/datum/species/harpy
name = SPECIES_RAPALA
name_plural = "Rapalans"
icobase = 'icons/mob/human_races/r_harpy_vr.dmi'
@@ -1,6 +1,3 @@
#define ORGANICS 1
#define SYNTHETICS 2
/datum/trait/negative
category = -1
@@ -34,9 +31,9 @@
cost = -2
var_changes = list("total_health" = 75)
apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/negative/endurance_low/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/negative/endurance_very_low
name = "Extremely Low Endurance"
@@ -44,9 +41,9 @@
cost = -3 //Teshari HP. This makes the person a lot more suseptable to getting stunned, killed, etc.
var_changes = list("total_health" = 50)
apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/negative/endurance_very_low/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/negative/minor_brute_weak
name = "Minor Brute Weakness"
@@ -1,6 +1,3 @@
#define ORGANICS 1
#define SYNTHETICS 2
/datum/trait/neutral
/datum/trait/neutral/metabolism_up
@@ -174,7 +171,7 @@
desc = "You're highly allergic to gluten proteins, which are found in most common grains."
cost = 0
custom_only = FALSE
var/allergen = GRAINS
var/allergen = ALLERGEN_GRAINS
/datum/trait/neutral/allergy/apply(var/datum/species/S,var/mob/living/carbon/human/H)
S.allergens |= allergen
@@ -185,63 +182,63 @@
desc = "You're highly allergic to just about any form of meat. You're probably better off just sticking to vegetables. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = MEAT
allergen = ALLERGEN_MEAT
/datum/trait/neutral/allergy/fish
name = "Allergy: Fish"
desc = "You're highly allergic to fish. It's probably best to avoid seafood in general. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = FISH
allergen = ALLERGEN_FISH
/datum/trait/neutral/allergy/fruit
name = "Allergy: Fruit"
desc = "You're highly allergic to fruit. Vegetables are fine, but you should probably read up on how to tell the difference. Remember, tomatoes are a fruit. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = FRUIT
allergen = ALLERGEN_FRUIT
/datum/trait/neutral/allergy/vegetable
name = "Allergy: Vegetable"
desc = "You're highly allergic to vegetables. Fruit are fine, but you should probably read up on how to tell the difference. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = VEGETABLE
allergen = ALLERGEN_VEGETABLE
/datum/trait/neutral/allergy/nuts
name = "Allergy: Nuts"
desc = "You're highly allergic to hard-shell seeds, such as peanuts. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = SEEDS
allergen = ALLERGEN_SEEDS
/datum/trait/neutral/allergy/soy
name = "Allergy: Soy"
desc = "You're highly allergic to soybeans, and some other kinds of bean. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = BEANS
allergen = ALLERGEN_BEANS
/datum/trait/neutral/allergy/dairy
name = "Allergy: Lactose"
desc = "You're highly allergic to lactose, and consequently, just about all forms of dairy. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = DAIRY
allergen = ALLERGEN_DAIRY
/datum/trait/neutral/allergy/fungi
name = "Allergy: Fungi"
desc = "You're highly allergic to fungi such as mushrooms. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = FUNGI
allergen = ALLERGEN_FUNGI
/datum/trait/neutral/allergy/coffee
name = "Allergy: Coffee"
desc = "You're highly allergic to coffee in specific. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = COFFEE
allergen = ALLERGEN_COFFEE
/datum/trait/neutral/allergen_reduced_effect
name = "Reduced Allergen Reaction"
@@ -1,6 +1,3 @@
#define ORGANICS 1
#define SYNTHETICS 2
/datum/trait/positive
category = 1
@@ -28,9 +25,9 @@
cost = 4
var_changes = list("total_health" = 125)
apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/positive/endurance_high/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/positive/nonconductive
name = "Non-Conductive"
@@ -1,6 +1,3 @@
#define ORGANICS 1
#define SYNTHETICS 2
/datum/trait
var/name
var/desc = "Contact a developer if you see this trait."
@@ -79,7 +79,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
#define SUIT_STORE_LAYER 17 //Suit storage-slot item
#define BACK_LAYER 18 //Back-slot item
#define HAIR_LAYER 19 //The human's hair
<<<<<<< HEAD
#define HAIR_ACCESSORY_LAYER 20 //VOREStation edit. Simply move this up a number if things are added.
#define EARS_LAYER 21 //Both ear-slot items (combined image)
#define EYES_LAYER 22 //Mob's eyes (used for glowing eyes)
@@ -93,26 +92,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
#define TAIL_LAYER_ALT 30 //Modified tail-sprite layer. Tend to be larger.
#define MODIFIER_EFFECTS_LAYER 31 //Effects drawn by modifiers
#define FIRE_LAYER 32 //'Mob on fire' overlay layer
#define WATER_LAYER 33 //'Mob submerged' overlay layer
#define MOB_WATER_LAYER 33 //'Mob submerged' overlay layer
#define TARGETED_LAYER 34 //'Aimed at' overlay layer
#define TOTAL_LAYERS 34 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
=======
#define EARS_LAYER 20 //Both ear-slot items (combined image)
#define EYES_LAYER 21 //Mob's eyes (used for glowing eyes)
#define FACEMASK_LAYER 22 //Mask-slot item
#define HEAD_LAYER 23 //Head-slot item
#define HANDCUFF_LAYER 24 //Handcuffs, if the human is handcuffed, in a secret inv slot
#define LEGCUFF_LAYER 25 //Same as handcuffs, for legcuffs
#define L_HAND_LAYER 26 //Left-hand item
#define R_HAND_LAYER 27 //Right-hand item
#define WING_LAYER 28 //Wings or protrusions over the suit.
#define TAIL_LAYER_ALT 29 //Modified tail-sprite layer. Tend to be larger.
#define MODIFIER_EFFECTS_LAYER 30 //Effects drawn by modifiers
#define FIRE_LAYER 31 //'Mob on fire' overlay layer
#define MOB_WATER_LAYER 32 //'Mob submerged' overlay layer
#define TARGETED_LAYER 33 //'Aimed at' overlay layer
#define TOTAL_LAYERS 33//<---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
//////////////////////////////////
/mob/living/carbon/human
@@ -1239,15 +1221,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
<<<<<<< HEAD
var/image/working = image(tail_s)
if(tail_style.em_block)
working.overlays += em_block_image_generic(working) // Leaving this as overlays +=
if(isTaurTail(tail_style))
=======
if(istaurtail(tail_style))
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
working.pixel_x = -16
if(taurtype.can_ride && !riding_datum)
@@ -235,7 +235,7 @@
var/mob/living/carbon/human/H = M
if(isTaurTail(H.tail_style))
if(istaurtail(H.tail_style))
to_chat(src, "<span class='warning'>Too many legs. TOO MANY LEGS!!</span>")
return FALSE
if(M.loc != src.loc)
@@ -1,13 +0,0 @@
#define NOT_WHILE_SHIFTED 1
#define ONLY_WHILE_SHIFTED 2
#define SHIFTED_OR_NOT 3
#define BLUE_EYES 1
#define RED_EYES 2
#define PURPLE_EYES 3
#define YELLOW_EYES 4
#define GREEN_EYES 5
#define ORANGE_EYES 6
#define AB_PHASE_SHIFTED 0x1
#define AB_SHADE_REGEN 0x2
@@ -1,11 +0,0 @@
#undef NOT_WHILE_SHIFTED
#undef ONLY_WHILE_SHIFTED
#undef SHIFTED_OR_NOT
#undef BLUE_EYES
#undef RED_EYES
#undef PURPLE_EYES
#undef YELLOW_EYES
#undef AB_PHASE_SHIFTED
#undef AB_SHADE_REGEN
+1 -1
View File
@@ -1038,7 +1038,7 @@
pixel_x--
is_shifted = TRUE
mob/verb/shifteast()
/mob/verb/shifteast()
set hidden = TRUE
if(!canface())
return FALSE
File diff suppressed because it is too large Load Diff
@@ -61,7 +61,7 @@
return TRUE
return FALSE
obj/machinery/computer/ship/disperser/proc/is_valid_setup()
/obj/machinery/computer/ship/disperser/proc/is_valid_setup()
if(front && middle && back)
var/everything_in_range = (get_dist(src, front) < link_range) && (get_dist(src, middle) < link_range) && (get_dist(src, back) < link_range)
var/everything_in_order = (middle.Adjacent(front) && middle.Adjacent(back)) && (front.dir == middle.dir && middle.dir == back.dir)
-141
View File
@@ -1,141 +0,0 @@
/obj/machinery/power/generator_type2
name = "thermoelectric generator"
desc = "It's a high efficiency thermoelectric generator."
icon_state = "teg"
anchored = 1
density = 1
use_power = USE_POWER_OFF
var/obj/machinery/atmospherics/unary/generator_input/input1
var/obj/machinery/atmospherics/unary/generator_input/input2
var/lastgen = 0
var/lastgenlev = -1
/obj/machinery/power/generator_type2/Initialize()
. = ..()
input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90))
input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90))
if(!input1 || !input2)
stat |= BROKEN
updateicon()
/obj/machinery/power/generator_type2/proc/updateicon()
if(stat & (NOPOWER|BROKEN))
cut_overlays()
else
cut_overlays()
if(lastgenlev != 0)
add_overlay("teg-op[lastgenlev]")
#define GENRATE 800 // generator output coefficient from Q
/obj/machinery/power/generator_type2/process()
if(!input1 || !input2)
return
var/datum/gas_mixture/air1 = input1.return_exchange_air()
var/datum/gas_mixture/air2 = input2.return_exchange_air()
lastgen = 0
if(air1 && air2)
var/datum/gas_mixture/hot_air = air1
var/datum/gas_mixture/cold_air = air2
if(hot_air.temperature < cold_air.temperature)
hot_air = air2
cold_air = air1
var/hot_air_heat_capacity = hot_air.heat_capacity()
var/cold_air_heat_capacity = cold_air.heat_capacity()
var/delta_temperature = hot_air.temperature - cold_air.temperature
if(delta_temperature > 1 && cold_air_heat_capacity > 0.01 && hot_air_heat_capacity > 0.01)
var/efficiency = (1 - cold_air.temperature/hot_air.temperature)*0.65 //65% of Carnot efficiency
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
var/heat = energy_transfer*(1-efficiency)
lastgen = energy_transfer*efficiency
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
//to_world("POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]")
if(input1.network)
input1.network.update = 1
if(input2.network)
input2.network.update = 1
add_avail(lastgen)
// update icon overlays only if displayed level has changed
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
if(genlev != lastgenlev)
lastgenlev = genlev
updateicon()
src.updateDialog()
/obj/machinery/power/generator_type2/attack_ai(mob/user)
if(stat & (BROKEN|NOPOWER)) return
interact(user)
/obj/machinery/power/generator_type2/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER)) return
interact(user)
/obj/machinery/power/generator_type2/interact(mob/user)
if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
user.unset_machine()
user << browse(null, "window=teg")
return
user.set_machine(src)
var/t = "<PRE><B>Thermo-Electric Generator</B><HR>"
t += "Output : [round(lastgen)] W<BR><BR>"
t += "<B>Cold loop</B><BR>"
t += "Temperature: [round(input1.air_contents.temperature, 0.1)] K<BR>"
t += "Pressure: [round(input1.air_contents.return_pressure(), 0.1)] kPa<BR>"
t += "<B>Hot loop</B><BR>"
t += "Temperature: [round(input2.air_contents.temperature, 0.1)] K<BR>"
t += "Pressure: [round(input2.air_contents.return_pressure(), 0.1)] kPa<BR>"
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A>"
t += "</PRE>"
user << browse(t, "window=teg;size=460x300")
onclose(user, "teg")
return 1
/obj/machinery/power/generator_type2/Topic(href, href_list)
..()
if( href_list["close"] )
usr << browse(null, "window=teg")
usr.unset_machine()
return 0
return 1
/obj/machinery/power/generator_type2/power_change()
..()
updateicon()
@@ -200,36 +200,26 @@
///////////////////////////////
//SLIME CORES BELOW HERE///////
///////////////////////////////
/decl/chemical_reaction/instant/slime_food
name = "Slime Bork"
id = "m_tele2"
result = null
required_reagents = list("phoron" = 10, "slimejelly" = 5, "nutriment" = 20)
result_amount = 1
on_reaction(var/datum/reagents/holder)
var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks // BORK BORK BORK
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
/* Removed at some point, unsure what to replace with
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
*/
for(var/i = 1, i <= 4 + rand(1,2), i++)
var/chosen = pick(borks)
var/obj/B = new chosen
if(B)
B.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(B, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/slime_food/on_reaction(var/datum/reagents/holder)
var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks // BORK BORK BORK
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
for(var/i = 1, i <= 4 + rand(1,2), i++)
var/chosen = pick(borks)
var/obj/B = new chosen
if(B)
B.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(B, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/materials
name = "Slime materials"
@@ -237,56 +227,52 @@
result = null
required_reagents = list("phoron" = 20, "slimejelly" = 40, "aluminum" = 20) //Woah there! You have the possibility of making diamonds! 8 ground up slimes required for one of these, and you still have a 10% chance for it to fail.
result_amount = 1
on_reaction(var/datum/reagents/holder)
var/fail_chance = rand(1,1000)
if(fail_chance == 1) // 0.1% chance of exploding, so scientists don't exclusively abuse this to obtain materials.
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The solution begins to vibrate violently!</span>"), 1) // It was at this moment, the Xenobiologist knew... he fucked up.
sleep(30)
playsound(holder.my_atom, 'sound/items/Welder2.ogg', 100, 1)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The reaction begins to rapidly sizzle and swell outwards!</span>"), 1)
sleep(20)
explosion(get_turf(holder.my_atom), 0 ,4, 8) //Enough to cause severe damage in the area, but not so much that it'll instantly gib the person.
empulse(get_turf(holder.my_atom), 3, 7) //Uh oh, it produced some uranium, too! EMP blast!
return
if(fail_chance < 101) // 10% chance of it not working at all.
playsound(holder.my_atom, 'sound/items/Welder.ogg', 100, 1)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime core fizzles disappointingly.</span>"), 1)
return
/decl/chemical_reaction/instant/materials/on_reaction(var/datum/reagents/holder)
var/fail_chance = rand(1,1000)
if(fail_chance == 1) // 0.1% chance of exploding, so scientists don't exclusively abuse this to obtain materials.
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The solution begins to vibrate violently!</span>"), 1) // It was at this moment, the Xenobiologist knew... he fucked up.
sleep(30)
playsound(holder.my_atom, 'sound/items/Welder2.ogg', 100, 1)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The reaction begins to rapidly sizzle and swell outwards!</span>"), 1)
sleep(20)
explosion(get_turf(holder.my_atom), 0 ,4, 8) //Enough to cause severe damage in the area, but not so much that it'll instantly gib the person.
empulse(get_turf(holder.my_atom), 3, 7) //Uh oh, it produced some uranium, too! EMP blast!
return
var/blocked = list(
/obj/item/stack/material, //Technical stacks
/obj/item/stack/hairlesshide, //Useless leather production steps
/obj/item/stack/wetleather,
/obj/item/stack/material/algae/ten) //Why is this one even a separate thing
blocked += typesof(/obj/item/stack/material/cyborg) //Borg matter synths, should only exist in borgs
blocked += typesof(/obj/item/stack/animalhide) //Hides which are only used for leather production anyway
if(fail_chance < 101) // 10% chance of it not working at all.
playsound(holder.my_atom, 'sound/items/Welder.ogg', 100, 1)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime core fizzles disappointingly.</span>"), 1)
return
var/rare_types = list(
/obj/item/stack/material/morphium, //Complex materials requiring Particle Smasher to create
/obj/item/stack/material/morphium/hull,
/obj/item/stack/material/valhollide,
/obj/item/stack/material/supermatter)
var/blocked = list(
/obj/item/stack/material, //Technical stacks
/obj/item/stack/hairlesshide, //Useless leather production steps
/obj/item/stack/wetleather,
/obj/item/stack/material/algae/ten) //Why is this one even a separate thing
blocked += typesof(/obj/item/stack/material/cyborg) //Borg matter synths, should only exist in borgs
blocked += typesof(/obj/item/stack/animalhide) //Hides which are only used for leather production anyway
var/list/material = typesof(/obj/item/stack/material) - blocked
var/rare_types = list(
/obj/item/stack/material/morphium, //Complex materials requiring Particle Smasher to create
/obj/item/stack/material/morphium/hull,
/obj/item/stack/material/valhollide,
/obj/item/stack/material/supermatter)
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
/* Removed at some point, unsure what to replace with
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
*/
var/spawn_amount = rand(1,50)
var/chosen = pick(material)
if(chosen in rare_types)
spawn_amount = rand(1,15)
var/obj/item/stack/material/C = new chosen
C.amount = spawn_amount
C.loc = get_turf(holder.my_atom)
var/list/material = typesof(/obj/item/stack/material) - blocked
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
var/spawn_amount = rand(1,50)
var/chosen = pick(material)
if(chosen in rare_types)
spawn_amount = rand(1,15)
var/obj/item/stack/material/C = new chosen
C.amount = spawn_amount
C.loc = get_turf(holder.my_atom)
/decl/chemical_reaction/instant/slimelight
name = "Slime Glow"
@@ -294,11 +280,12 @@
result = null
required_reagents = list("phoron" = 5, "slimejelly" = 5, "water" = 10) //Takes 10 water so it doesn't mess with the frost oil.
result_amount = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'> The contents of the slime core harden and begin to emit a warm, bright light.</span>"), 1)
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
F.loc = get_turf(holder.my_atom)
/decl/chemical_reaction/instant/slimelight/on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'> The contents of the slime core harden and begin to emit a warm, bright light.</span>"), 1)
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
F.loc = get_turf(holder.my_atom)
/decl/chemical_reaction/instant/slimephoron
@@ -307,10 +294,11 @@
result = null
required_reagents = list("phoron" = 20, "uranium" = 20, "slimejelly" = 20)
result_amount = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/stack/material/phoron/P = new /obj/item/stack/material/phoron
P.amount = 10
P.loc = get_turf(holder.my_atom)
/decl/chemical_reaction/instant/slimephoron/on_reaction(var/datum/reagents/holder)
var/obj/item/stack/material/phoron/P = new /obj/item/stack/material/phoron
P.amount = 10
P.loc = get_turf(holder.my_atom)
/decl/chemical_reaction/instant/slimefreeze
name = "Slime Freeze"
@@ -318,17 +306,15 @@
result = null
required_reagents = list("phoron" = 10, "coolant" = 10, "slimejelly" = 10)
result_amount = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime extract begins to vibrate violently!</span>"), 1)
sleep(50)
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
M.bodytemperature -= 140
to_chat(M, "<span class='notice'> You suddenly feel a chill!</span>")
/decl/chemical_reaction/instant/slimefreeze/on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime extract begins to vibrate violently!</span>"), 1)
sleep(50)
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
M.bodytemperature -= 140
to_chat(M, "<span class='notice'> You suddenly feel a chill!</span>")
/decl/chemical_reaction/instant/slimefrost
name = "Slime Frost Oil"
@@ -337,24 +323,21 @@
required_reagents = list("phoron" = 5, "slimejelly" = 5, "water" = 5, "coolant" = 5)
result_amount = 10
/decl/chemical_reaction/instant/slimefire
name = "Slime fire"
id = "m_fire"
result = null
required_reagents = list("phoron" = 60, "slimejelly" = 30, "potassium" = 30)
result_amount = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime extract begins to vibrate violently!</span>"), 1)
sleep(50)
var/turf/location = get_turf(holder.my_atom.loc)
for(var/turf/simulated/floor/target_tile in range(0,location))
target_tile.assume_gas("phoron", 25, 1400)
spawn (0) target_tile.hotspot_expose(700, 400)
/decl/chemical_reaction/instant/slimefire/on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime extract begins to vibrate violently!</span>"), 1)
sleep(50)
var/turf/location = get_turf(holder.my_atom.loc)
for(var/turf/simulated/floor/target_tile in range(0,location))
target_tile.assume_gas("phoron", 25, 1400)
spawn (0) target_tile.hotspot_expose(700, 400)
/decl/chemical_reaction/instant/slimeify
name = "Advanced Mutation Toxin"
@@ -363,25 +346,22 @@
required_reagents = list("phoron" = 15, "slimejelly" = 15, "mutationtoxin" = 15) //In case a xenobiologist wants to become a fully fledged slime person.
result_amount = 1
/decl/chemical_reaction/instant/slimeheal //A slime healing mixture. Why not.
name = "Slime Health"
id = "slimeheal"
result = "null"
required_reagents = list("phoron" = 10, "bicaridine" = 10, "kelotane" = 10, "inaprovaline" = 10, "slimejelly" = 10)
on_reaction(var/datum/reagents/holder, var/created_volume)
for (var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
to_chat(C, "<span class='notice'>A wave of energy suddenly invigorates you.</span>")
C.adjustBruteLoss(-25)
C.adjustFireLoss(-25)
C.adjustToxLoss(-25)
C.adjustOxyLoss(-25)
C.adjustBrainLoss(-25)
C.adjustCloneLoss(-25)
C.updatehealth()
/decl/chemical_reaction/instant/slimeheal/on_reaction(var/datum/reagents/holder, var/created_volume)
for (var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
to_chat(C, "<span class='notice'>A wave of energy suddenly invigorates you.</span>")
C.adjustBruteLoss(-25)
C.adjustFireLoss(-25)
C.adjustToxLoss(-25)
C.adjustOxyLoss(-25)
C.adjustBrainLoss(-25)
C.adjustCloneLoss(-25)
C.updatehealth()
/decl/chemical_reaction/instant/slimejelly
name = "Slime Jam"
@@ -396,62 +376,58 @@
result = null
required_reagents = list("phoron" = 20, "nutriment" = 20, "sugar" = 20, "mutationtoxin" = 20) //Can't do slime jelly as it'll conflict with another, but mutation toxin will do.
result_amount = 1
on_reaction(var/datum/reagents/holder)
var/mob_path = /mob/living/simple_mob
var/blocked = list( //List of things we do NOT want to spawn
/mob/living/simple_mob, //Technical parent mobs
/mob/living/simple_mob/animal,
/mob/living/simple_mob/animal/passive,
/mob/living/simple_mob/animal/space,
/mob/living/simple_mob/blob,
/mob/living/simple_mob/mechanical,
/mob/living/simple_mob/mechanical/mecha,
/mob/living/simple_mob/slime,
/mob/living/simple_mob/vore,
/mob/living/simple_mob/vore/aggressive,
/mob/living/simple_mob/illusion, //Other technical mobs
/mob/living/simple_mob/animal/passive/crab/Coffee, //Unique pets/named mobs
/mob/living/simple_mob/animal/passive/cat/runtime,
/mob/living/simple_mob/animal/passive/cat/bones,
/mob/living/simple_mob/animal/passive/cat/tabiranth,
/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar,
/mob/living/simple_mob/animal/passive/dog/corgi/Ian,
/mob/living/simple_mob/animal/passive/dog/corgi/Lisa,
/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice,
/mob/living/simple_mob/animal/passive/fox/renault,
/mob/living/simple_mob/animal/passive/bird/azure_tit/tweeter,
/mob/living/simple_mob/animal/passive/bird/parrot/poly,
/mob/living/simple_mob/animal/sif/fluffy,
/mob/living/simple_mob/animal/sif/fluffy/silky,
/mob/living/simple_mob/animal/passive/snake/noodle,
/mob/living/simple_mob/slime/xenobio/rainbow/kendrick,
/mob/living/simple_mob/animal/space/space_worm, //Space Worm parts that aren't proper heads
/mob/living/simple_mob/animal/space/space_worm/head/severed,
/mob/living/simple_mob/animal/borer, //Event/player-control-only mobs
/mob/living/simple_mob/vore/hostile/morph
)//exclusion list for things you don't want the reaction to create.
blocked += typesof(/mob/living/simple_mob/mechanical/ward) //Wards that should be created with ward items, are mobs mostly on technicalities
blocked += typesof(/mob/living/simple_mob/construct) //Should only exist
blocked += typesof(/mob/living/simple_mob/vore/demon) //as player-controlled
blocked += typesof(/mob/living/simple_mob/shadekin) //and/or event things
blocked += typesof(/mob/living/simple_mob/horror)
var/list/voremobs = typesof(mob_path) - blocked // list of possible hostile mobs
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
/* Removed at some point, unsure what to replace with
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
*/
var/spawn_count = rand(1,3)
for(var/i = 1, i <= spawn_count, i++)
var/chosen = pick(voremobs)
var/mob/living/simple_mob/C = new chosen
C.faction = "slimesummon"
C.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/slimevore/on_reaction(var/datum/reagents/holder)
var/mob_path = /mob/living/simple_mob
var/blocked = list( //List of things we do NOT want to spawn
/mob/living/simple_mob, //Technical parent mobs
/mob/living/simple_mob/animal,
/mob/living/simple_mob/animal/passive,
/mob/living/simple_mob/animal/space,
/mob/living/simple_mob/blob,
/mob/living/simple_mob/mechanical,
/mob/living/simple_mob/mechanical/mecha,
/mob/living/simple_mob/slime,
/mob/living/simple_mob/vore,
/mob/living/simple_mob/vore/aggressive,
/mob/living/simple_mob/illusion, //Other technical mobs
/mob/living/simple_mob/animal/passive/crab/Coffee, //Unique pets/named mobs
/mob/living/simple_mob/animal/passive/cat/runtime,
/mob/living/simple_mob/animal/passive/cat/bones,
/mob/living/simple_mob/animal/passive/cat/tabiranth,
/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar,
/mob/living/simple_mob/animal/passive/dog/corgi/Ian,
/mob/living/simple_mob/animal/passive/dog/corgi/Lisa,
/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice,
/mob/living/simple_mob/animal/passive/fox/renault,
/mob/living/simple_mob/animal/passive/bird/azure_tit/tweeter,
/mob/living/simple_mob/animal/passive/bird/parrot/poly,
/mob/living/simple_mob/animal/sif/fluffy,
/mob/living/simple_mob/animal/sif/fluffy/silky,
/mob/living/simple_mob/animal/passive/snake/noodle,
/mob/living/simple_mob/slime/xenobio/rainbow/kendrick,
/mob/living/simple_mob/animal/space/space_worm, //Space Worm parts that aren't proper heads
/mob/living/simple_mob/animal/space/space_worm/head/severed,
/mob/living/simple_mob/animal/borer, //Event/player-control-only mobs
/mob/living/simple_mob/vore/hostile/morph
)//exclusion list for things you don't want the reaction to create.
blocked += typesof(/mob/living/simple_mob/mechanical/ward) //Wards that should be created with ward items, are mobs mostly on technicalities
blocked += typesof(/mob/living/simple_mob/construct) //Should only exist
blocked += typesof(/mob/living/simple_mob/vore/demon) //as player-controlled
blocked += typesof(/mob/living/simple_mob/shadekin) //and/or event things
blocked += typesof(/mob/living/simple_mob/horror)
var/list/voremobs = typesof(mob_path) - blocked // list of possible hostile mobs
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
var/spawn_count = rand(1,3)
for(var/i = 1, i <= spawn_count, i++)
var/chosen = pick(voremobs)
var/mob/living/simple_mob/C = new chosen
C.faction = "slimesummon"
C.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/slime/sapphire_mutation
name = "Slime Mutation Toxins"
@@ -73,11 +73,7 @@
return
/obj/structure/bigDelivery/update_icon()
<<<<<<< HEAD
cut_overlays()
=======
overlays = new()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(nameset || examtext)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
if(icon_state == "deliverycloset")
@@ -90,11 +86,7 @@
label_x = rand(-8, 6)
I.pixel_x = label_x
I.pixel_y = -3
<<<<<<< HEAD
add_overlay(I)
=======
overlays += I
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(src.sortTag)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
if(icon_state == "deliverycloset")
@@ -107,11 +99,7 @@
tag_x = rand(-8, 6)
I.pixel_x = tag_x
I.pixel_y = -3
<<<<<<< HEAD
add_overlay(I)
=======
overlays += I
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/structure/bigDelivery/examine(mob/user)
. = ..()
@@ -197,20 +185,12 @@
return
/obj/item/smallDelivery/update_icon()
<<<<<<< HEAD
cut_overlays()
=======
overlays = new()
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if((nameset || examtext) && icon_state != "deliverycrate1")
var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
if(icon_state == "deliverycrate5")
I.pixel_y = -1
<<<<<<< HEAD
add_overlay(I)
=======
overlays += I
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
if(src.sortTag)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
switch(icon_state)
@@ -227,11 +207,7 @@
I.pixel_y = 3
if("deliverycrate5")
I.pixel_y = -3
<<<<<<< HEAD
add_overlay(I)
=======
overlays += I
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/item/smallDelivery/examine(mob/user)
. = ..()
@@ -363,7 +339,6 @@
item_state = "electronic"
slot_flags = SLOT_BELT
<<<<<<< HEAD
/obj/item/device/destTagger/tgui_state(mob/user)
return GLOB.tgui_inventory_state
@@ -395,32 +370,6 @@
return FALSE
currTag = new_tag
. = TRUE
=======
/obj/item/device/destTagger/proc/openwindow(mob/user as mob)
var/dat = "<tt><center><h1><b>TagMaster 2.3</b></h1></center>"
dat += "<table style='width:100%; padding:4px;'><tr>"
for(var/i = 1, i <= GLOB.tagger_locations.len, i++)
dat += "<td><a href='?src=\ref[src];nextTag=[GLOB.tagger_locations[i]]'>[GLOB.tagger_locations[i]]</a></td>"
if (i%4==0)
dat += "</tr><tr>"
dat += "</tr></table><br>Current Selection: [currTag ? currTag : "None"]</tt>"
user << browse(dat, "window=destTagScreen;size=450x350")
onclose(user, "destTagScreen")
/obj/item/device/destTagger/attack_self(mob/user as mob)
openwindow(user)
return
/obj/item/device/destTagger/Topic(href, href_list)
src.add_fingerprint(usr)
if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations))
src.currTag = href_list["nextTag"]
openwindow(usr)
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/machinery/disposal/deliveryChute
name = "Delivery chute"
@@ -430,20 +379,11 @@
var/c_mode = 0
<<<<<<< HEAD
/obj/machinery/disposal/deliveryChute/New()
..()
spawn(5)
trunk = locate() in src.loc
if(trunk)
trunk.linked = src // link the pipe trunk to self
=======
/obj/machinery/disposal/deliveryChute/Initialize()
. = ..()
trunk = locate() in src.loc
if(trunk)
trunk.linked = src // link the pipe trunk to self
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/machinery/disposal/deliveryChute/interact()
return
@@ -498,36 +438,6 @@
return
if(I.is_screwdriver())
<<<<<<< HEAD
if(c_mode==0)
c_mode=1
playsound(src, I.usesound, 50, 1)
to_chat(user, "You remove the screws around the power connection.")
return
else if(c_mode==1)
c_mode=0
playsound(src, I.usesound, 50, 1)
to_chat(user, "You attach the screws around the power connection.")
return
else if(istype(I, /obj/item/weapon/weldingtool) && c_mode==1)
var/obj/item/weapon/weldingtool/W = I
if(W.remove_fuel(0,user))
playsound(src, W.usesound, 50, 1)
to_chat(user, "You start slicing the floorweld off the delivery chute.")
if(do_after(user,20 * W.toolspeed))
if(!src || !W.isOn()) return
to_chat(user, "You sliced the floorweld off the delivery chute.")
var/obj/structure/disposalconstruct/C = new (src.loc)
C.ptype = 8 // 8 = Delivery chute
C.update()
C.anchored = 1
C.density = 1
qdel(src)
return
else
to_chat(user, "You need more welding fuel to complete this task.")
return
=======
c_mode = !c_mode
playsound(src, I.usesound, 50, 1)
to_chat(user, "You [c_mode ? "remove" : "attach"] the screws around the power connection.")
@@ -549,7 +459,6 @@
C.density = 1
qdel(src)
return
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
/obj/machinery/disposal/deliveryChute/Destroy()
if(trunk)
+11 -11
View File
@@ -301,25 +301,25 @@
ram_cost = 15
id = "ar_hud"
toggle(mob/living/silicon/infomorph/user)
user.arHUD = !user.arHUD
if(user.plane_holder)
user.plane_holder.set_vis(VIS_CH_ID,user.arHUD)
user.plane_holder.set_vis(VIS_CH_HEALTH_VR,user.arHUD)
/datum/infomorph_software/ar_hud/toggle(mob/living/silicon/infomorph/user)
user.arHUD = !user.arHUD
if(user.plane_holder)
user.plane_holder.set_vis(VIS_CH_ID,user.arHUD)
user.plane_holder.set_vis(VIS_CH_HEALTH_VR,user.arHUD)
is_active(mob/living/silicon/infomorph/user)
return user.arHUD
/datum/infomorph_software/ar_hud/is_active(mob/living/silicon/infomorph/user)
return user.arHUD
/datum/infomorph_software/translator
name = "Universal Translator"
ram_cost = 15
id = "translator"
toggle(mob/living/silicon/infomorph/user)
user.translator.attack_self(user)
/datum/infomorph_software/translator/toggle(mob/living/silicon/infomorph/user)
user.translator.attack_self(user)
is_active(mob/living/silicon/infomorph/user)
return user.translator.listening
/datum/infomorph_software/translator/is_active(mob/living/silicon/infomorph/user)
return user.translator.listening
/datum/infomorph_software/signaller
+38 -38
View File
@@ -92,28 +92,28 @@
type_wall = /turf/simulated/wall
type_under = /turf/simulated/floor/plating
New()
..()
spot_add(1,1,type_wall) //Bottom left corner
spot_add(1,2,type_wall)
spot_add(1,3,type_wall)
spot_add(2,1,type_wall)
spot_add(2,2,type_under) //Center floor
spot_add(2,2,/obj/random/roguemineloot) //Loot!
spot_add(2,3,type_wall)
spot_add(3,1,type_wall)
spot_add(3,2,type_wall)
spot_add(3,3,type_wall) //Bottom right corner
/datum/rogue/asteroid/predef/cargo/New()
..()
spot_add(1,1,type_wall) //Bottom left corner
spot_add(1,2,type_wall)
spot_add(1,3,type_wall)
spot_add(2,1,type_wall)
spot_add(2,2,type_under) //Center floor
spot_add(2,2,/obj/random/roguemineloot) //Loot!
spot_add(2,3,type_wall)
spot_add(3,1,type_wall)
spot_add(3,2,type_wall)
spot_add(3,3,type_wall) //Bottom right corner
//Abandoned 1-tile hollow cargo box (ANGRY).
/datum/rogue/asteroid/predef/cargo/angry
type_wall = /turf/simulated/wall
type_under = /turf/simulated/floor/plating
New()
..()
spot_add(2,2,/obj/random/roguemineloot) //EXTRA loot!
spot_add(2,2,/mob/living/simple_mob/animal/space/alien) //GRRR
/datum/rogue/asteroid/predef/cargo/angry/New()
..()
spot_add(2,2,/obj/random/roguemineloot) //EXTRA loot!
spot_add(2,2,/mob/living/simple_mob/animal/space/alien) //GRRR
//Longer cargo container for higher difficulties
/datum/rogue/asteroid/predef/cargo_large
@@ -121,30 +121,30 @@
type_wall = /turf/simulated/wall
type_under = /turf/simulated/floor/plating
New()
..()
spot_add(1,2,type_wall) //--
spot_add(1,3,type_wall) //Left end of cargo container
spot_add(1,4,type_wall) //--
/datum/rogue/asteroid/predef/cargo_large/New()
..()
spot_add(1,2,type_wall) //--
spot_add(1,3,type_wall) //Left end of cargo container
spot_add(1,4,type_wall) //--
spot_add(5,2,type_wall) //--
spot_add(5,3,type_wall) //Right end of cargo container
spot_add(5,4,type_wall) //--
spot_add(5,2,type_wall) //--
spot_add(5,3,type_wall) //Right end of cargo container
spot_add(5,4,type_wall) //--
spot_add(2,4,type_wall) //--
spot_add(3,4,type_wall) //Top and
spot_add(4,4,type_wall) //bottom of
spot_add(2,2,type_wall) //cargo
spot_add(3,2,type_wall) //container
spot_add(4,2,type_wall) //--
spot_add(2,4,type_wall) //--
spot_add(3,4,type_wall) //Top and
spot_add(4,4,type_wall) //bottom of
spot_add(2,2,type_wall) //cargo
spot_add(3,2,type_wall) //container
spot_add(4,2,type_wall) //--
spot_add(2,3,type_under) //Left floor
spot_add(3,3,type_under) //Mid floor
spot_add(4,3,type_under) //Right floor
spot_add(2,3,type_under) //Left floor
spot_add(3,3,type_under) //Mid floor
spot_add(4,3,type_under) //Right floor
spot_add(2,3,/obj/random/roguemineloot) //Left loot
spot_add(3,3,/obj/random/roguemineloot) //Mid loot
spot_add(4,3,/obj/random/roguemineloot) //Right loot
spot_add(2,3,/obj/random/roguemineloot) //Left loot
spot_add(3,3,/obj/random/roguemineloot) //Mid loot
spot_add(4,3,/obj/random/roguemineloot) //Right loot
if(prob(30))
spot_add(3,3,/mob/living/simple_mob/animal/space/alien/sentinel/praetorian) //And maybe a big friend for big loot.
if(prob(30))
spot_add(3,3,/mob/living/simple_mob/animal/space/alien/sentinel/praetorian) //And maybe a big friend for big loot.
@@ -148,11 +148,6 @@
build_path = /obj/machinery/computer/roguezones
origin_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 1)
// Undefine our constants to not pollute namespace
#undef OUTPOST_Z
#undef TRANSIT_Z
#undef BELT_Z
/obj/item/weapon/paper/rogueminer
name = "R-38 Scanner Console Guide"
info = {"<h4>Getting Started</h4>
@@ -224,31 +224,6 @@
return S.memory[address]
else
<<<<<<< HEAD
newsign.data["name"] = "<i>[html_encode(uppertext(source))]</i>"
newsign.data["realname"] = newsign.data["name"]
newsign.data["job"] = job
newsign.data["compression"] = 0
newsign.data["message"] = message_to_multilingual(message)
newsign.data["type"] = 2 // artificial broadcast
if(!isnum(freq))
freq = text2num(freq)
newsign.frequency = freq
var/datum/radio_frequency/connection = radio_controller.return_frequency(freq)
newsign.data["connection"] = connection
newsign.data["radio"] = hradio
newsign.data["vmessage"] = message_to_multilingual(message)
newsign.data["vname"] = source
newsign.data["vmask"] = 0
newsign.data["level"] = list()
var/pass = S.relay_information(newsign, "/obj/machinery/telecomms/hub")
if(!pass)
S.relay_information(newsign, "/obj/machinery/telecomms/broadcaster") // send this simple message to broadcasters
=======
S.memory[address] = value
@@ -303,5 +278,4 @@
var/pass = S.relay_information(newsign, "/obj/machinery/telecomms/hub")
if(!pass)
S.relay_information(newsign, "/obj/machinery/telecomms/broadcaster") // send this simple message to broadcasters
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
+2 -20
View File
@@ -48,14 +48,8 @@
var/datum/shuttle/autodock/ferry/escape_pod/pod
valid_actions = list("toggle_override", "force_door")
<<<<<<< HEAD
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/tgui_data(mob/user)
var/datum/computer/file/embedded_program/docking/simple/docking_program = program // Cast to proper type
=======
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
var/datum/embedded_program/docking/simple/docking_program = program // Cast to proper type
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
. = list(
"docking_status" = docking_program.get_docking_status(),
@@ -85,27 +79,15 @@
//This controller is for the escape pod berth (station side)
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth
name = "escape pod berth controller"
<<<<<<< HEAD
program = /datum/computer/file/embedded_program/docking/simple/escape_pod_berth
program = /datum/embedded_program/docking/simple/escape_pod_berth
valid_actions = list("toggle_override", "force_door")
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/tgui_data(mob/user)
var/datum/computer/file/embedded_program/docking/simple/docking_program = program // Cast to proper type
var/armed = null
if(istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth))
var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/P = docking_program
=======
program = /datum/embedded_program/docking/simple/escape_pod_berth
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
var/datum/embedded_program/docking/simple/docking_program = program // Cast to proper type
var/armed = null
if (istype(docking_program, /datum/embedded_program/docking/simple/escape_pod_berth))
if(istype(docking_program, /datum/embedded_program/docking/simple/escape_pod_berth))
var/datum/embedded_program/docking/simple/escape_pod_berth/P = docking_program
>>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
armed = P.armed
. = list(
+26 -25
View File
@@ -5,24 +5,25 @@
name = "Mlemington's Syndrome"
stage = 1
chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("[pick("Mlem.","MLEM!","Mlem?")]")
/datum/disease2/effect/mlem/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("[pick("Mlem.","MLEM!","Mlem?")]")
/datum/disease2/effect/spin
name = "Spyndrome"
stage = 1
chance_maxm = 7
var/list/directions = list(2,4,1,8,2,4,1,8,2,4,1,8,2,4,1,8,2,4,1,8)
activate(var/mob/living/carbon/mob,var/multiplier)
if(mob.buckled())
to_chat(viewers(mob),"<span class='warning'>[mob.name] struggles violently against their restraints!</span>")
else
to_chat(viewers(mob),"<span class='warning'>[mob.name] spins around violently!</span>")
for(var/D in directions)
mob.dir = D
sleep(1)
mob.dir = pick(2,4,1,8) //For that added annoyance
/datum/disease2/effect/spin/activate(var/mob/living/carbon/mob,var/multiplier)
if(mob.buckled())
to_chat(viewers(mob),"<span class='warning'>[mob.name] struggles violently against their restraints!</span>")
else
to_chat(viewers(mob),"<span class='warning'>[mob.name] spins around violently!</span>")
for(var/D in directions)
mob.dir = D
sleep(1)
mob.dir = pick(2,4,1,8) //For that added annoyance
///////////////////////////////////////////////
/////////////////// Stage 2 ///////////////////
@@ -32,8 +33,8 @@
stage = 2
chance_maxm = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.set_default_language(pick(mob.languages))
/datum/disease2/effect/lang/activate(var/mob/living/carbon/mob,var/multiplier)
mob.set_default_language(pick(mob.languages))
///////////////////////////////////////////////
/////////////////// Stage 3 ///////////////////
@@ -43,20 +44,20 @@
stage = 3
chance_maxm = 1
activate(var/mob/living/carbon/mob,var/multiplier)
var/newsize = rand (25, 200)
mob.resize(newsize/100)
to_chat(viewers(mob),"<span class='warning'>[mob.name] suddenly changes size!</span>")
/datum/disease2/effect/size/activate(var/mob/living/carbon/mob,var/multiplier)
var/newsize = rand (25, 200)
mob.resize(newsize/100)
to_chat(viewers(mob),"<span class='warning'>[mob.name] suddenly changes size!</span>")
/datum/disease2/effect/flip
name = "Flipponov's Disease"
stage = 3
chance_maxm = 5
activate(var/mob/living/carbon/mob,var/multiplier) //Remind me why mob is carbon...?
if(ishuman(mob))
var/mob/living/carbon/human/H = mob
H.emote("flip")
else
to_chat(viewers(mob),"<span class='warning'>[mob.name] does a backflip!</span>")
mob.SpinAnimation(7,1)
/datum/disease2/effect/flip/activate(var/mob/living/carbon/mob,var/multiplier) //Remind me why mob is carbon...?
if(ishuman(mob))
var/mob/living/carbon/human/H = mob
H.emote("flip")
else
to_chat(viewers(mob),"<span class='warning'>[mob.name] does a backflip!</span>")
mob.SpinAnimation(7,1)
+25 -25
View File
@@ -100,13 +100,13 @@
name = "Ivy's Courier"
desc = "A bag resembling something used by college students. Contains items for ''MooMoo''."
New()
..()
new /obj/item/clothing/head/beretg(src)
new /obj/item/device/fluff/id_kit_ivy(src)
new /obj/item/weapon/storage/fancy/cigarettes/dromedaryco(src)
new /obj/item/weapon/storage/box/matches(src)
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake(src)
/obj/item/weapon/storage/backpack/messenger/sec/fluff/ivymoomoo/New()
..()
new /obj/item/clothing/head/beretg(src)
new /obj/item/device/fluff/id_kit_ivy(src)
new /obj/item/weapon/storage/fancy/cigarettes/dromedaryco(src)
new /obj/item/weapon/storage/box/matches(src)
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake(src)
// jemli:Cirra Mayhem
/obj/item/weapon/storage/box/fluff/cirra
@@ -139,16 +139,16 @@
item_state = "duffle_med"
slowdown = 0
New()
..()
new /obj/item/clothing/accessory/holster/hip(src)
new /obj/item/clothing/suit/storage/fluff/modernfedcoat(src)
new /obj/item/clothing/head/caphat/formal/fedcover(src)
new /obj/item/clothing/suit/armor/det_suit(src)
new /obj/item/weapon/flame/lighter/zippo/fluff/joan(src)
new /obj/item/clothing/under/rank/internalaffairs/fluff/joan(src)
new /obj/item/clothing/head/helmet/space/fluff/joan(src)
new /obj/item/clothing/suit/space/fluff/joan(src)
/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/joanrisu/New()
..()
new /obj/item/clothing/accessory/holster/hip(src)
new /obj/item/clothing/suit/storage/fluff/modernfedcoat(src)
new /obj/item/clothing/head/caphat/formal/fedcover(src)
new /obj/item/clothing/suit/armor/det_suit(src)
new /obj/item/weapon/flame/lighter/zippo/fluff/joan(src)
new /obj/item/clothing/under/rank/internalaffairs/fluff/joan(src)
new /obj/item/clothing/head/helmet/space/fluff/joan(src)
new /obj/item/clothing/suit/space/fluff/joan(src)
//joanrisu:Katarina Eine
/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/katarina
@@ -156,14 +156,14 @@
desc = "A duffle bag Katarina uses to carry her tools."
slowdown = 0
New()
..()
new /obj/item/clothing/accessory/holster/hip(src)
new /obj/item/clothing/suit/storage/fluff/fedcoat(src)
new /obj/item/clothing/suit/armor/det_suit(src)
new /obj/item/clothing/accessory/storage/black_vest(src)
new /obj/item/weapon/material/knife/tacknife/combatknife/fluff/katarina(src)
new /obj/item/clothing/under/rank/internalaffairs/fluff/joan(src)
/obj/item/weapon/storage/backpack/dufflebag/sec/fluff/katarina/New()
..()
new /obj/item/clothing/accessory/holster/hip(src)
new /obj/item/clothing/suit/storage/fluff/fedcoat(src)
new /obj/item/clothing/suit/armor/det_suit(src)
new /obj/item/clothing/accessory/storage/black_vest(src)
new /obj/item/weapon/material/knife/tacknife/combatknife/fluff/katarina(src)
new /obj/item/clothing/under/rank/internalaffairs/fluff/joan(src)
//Razerwing:Archer Maximus
/obj/item/weapon/storage/box/fluff/archermaximus
@@ -1761,13 +1761,13 @@ Departamental Swimsuits, for general use
item_state = "hasd_helm"
species_restricted = null
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(H.ckey != "silencedmp5a5")
to_chat(H, "<span class='warning'>...The faceplate is clearly not made for your anatomy, thus, does not fit.</span>")
return 0
else
return 1
/obj/item/clothing/head/helmet/space/void/security/hasd/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(H.ckey != "silencedmp5a5")
to_chat(H, "<span class='warning'>...The faceplate is clearly not made for your anatomy, thus, does not fit.</span>")
return 0
else
return 1
/obj/item/clothing/suit/space/void/security/hasd
name = "HASD EVA bodyplates"
@@ -1779,12 +1779,12 @@ Departamental Swimsuits, for general use
item_state = "hasd_suit"
pixel_x = -16
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..() && istype(H) && H.ckey == "silencedmp5a5")
return 1
else
to_chat(H, "<span class='warning'>This suit is not designed for you.</span>")
return 0
/obj/item/clothing/suit/space/void/security/hasd/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..() && istype(H) && H.ckey == "silencedmp5a5")
return 1
else
to_chat(H, "<span class='warning'>This suit is not designed for you.</span>")
return 0
//Zigfe:Zaoozaoo Xrimxuqmqixzix
/obj/item/clothing/head/fluff/zao
@@ -773,11 +773,12 @@
icon_state = "dragor_dot"
w_class = ITEMSIZE_SMALL
attack_self(mob/user as mob)
if(user.ckey == "pontifexminimus")
user.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_gender
else
return
/obj/item/weapon/fluff/dragor_dot/attack_self(mob/user as mob)
if(user.ckey == "pontifexminimus")
user.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_gender
else
return
//LuminescentRing: Briana Moore
/obj/item/weapon/storage/backpack/messenger/black/fluff/briana
name = "2561 graduation bag"
+3 -3
View File
@@ -213,7 +213,7 @@
var/mob/living/carbon/human/H = src
if(H.flying)
return TRUE //Silently pass without a message.
if(isTaurTail(H.tail_style))
if(istaurtail(H.tail_style))
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
src_message = tail.msg_owner_help_run
tmob_message = tail.msg_prey_help_run
@@ -223,7 +223,7 @@
src_message = "You run between [tmob]'s legs."
tmob_message = "[src] runs between your legs."
var/mob/living/carbon/human/H = tmob
if(isTaurTail(H.tail_style))
if(istaurtail(H.tail_style))
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
src_message = tail.msg_prey_stepunder
tmob_message = tail.msg_owner_stepunder
@@ -304,7 +304,7 @@
var/message_pred = null
var/message_prey = null
var/datum/sprite_accessory/tail/taur/tail = null
if(isTaurTail(pred.tail_style))
if(istaurtail(pred.tail_style))
tail = pred.tail_style
if(a_intent == I_GRAB)