diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm
index c111b36b0a..2a83dd5933 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm
@@ -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."
diff --git a/code/__defines/color.dm b/code/__defines/color.dm
index cfa5d6aad9..73db8eef6e 100644
--- a/code/__defines/color.dm
+++ b/code/__defines/color.dm
@@ -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"
diff --git a/code/__defines/dcs/helpers.dm b/code/__defines/dcs/helpers.dm
index c5c7e3c42d..a7925329fd 100644
--- a/code/__defines/dcs/helpers.dm
+++ b/code/__defines/dcs/helpers.dm
@@ -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))
diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 7079362659..9ca46ce7e8 100644
--- a/code/__defines/dcs/signals.dm
+++ b/code/__defines/dcs/signals.dm
@@ -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)
diff --git a/code/__defines/lighting_vr.dm b/code/__defines/lighting_vr.dm
index a7f51e8bbc..aa7cb6994d 100644
--- a/code/__defines/lighting_vr.dm
+++ b/code/__defines/lighting_vr.dm
@@ -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.
\ No newline at end of file
diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm
index b8afc5cb72..f17b037e80 100644
--- a/code/__defines/machinery.dm
+++ b/code/__defines/machinery.dm
@@ -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
\ No newline at end of file
+#define LOGIN_TYPE_ROBOT 3
diff --git a/code/__defines/subsystems_vr.dm b/code/__defines/subsystems_vr.dm
deleted file mode 100644
index 5c028803b9..0000000000
--- a/code/__defines/subsystems_vr.dm
+++ /dev/null
@@ -1 +0,0 @@
-#define INIT_ORDER_HOLOMAPS -5 //VOREStation Add
\ No newline at end of file
diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm
index 028065ec12..cbcc45c1f5 100644
--- a/code/__defines/turfs.dm
+++ b/code/__defines/turfs.dm
@@ -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)
diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm
index d8a0f3b29e..8e4de46935 100644
--- a/code/_helpers/icons.dm
+++ b/code/_helpers/icons.dm
@@ -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
diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm
index 39b1210a0a..6cb875e93c 100644
--- a/code/controllers/autotransfer.dm
+++ b/code/controllers/autotransfer.dm
@@ -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
diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm
index a2393818ff..3839853567 100644
--- a/code/controllers/communications.dm
+++ b/code/controllers/communications.dm
@@ -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)
diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm
index fec8cc1468..f851e3edf2 100644
--- a/code/controllers/subsystems/lighting.dm
+++ b/code/controllers/subsystems/lighting.dm
@@ -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)
diff --git a/code/datums/outfits/jobs/special_vr.dm b/code/datums/outfits/jobs/special_vr.dm
index e16efb7947..20473f0e8e 100644
--- a/code/datums/outfits/jobs/special_vr.dm
+++ b/code/datums/outfits/jobs/special_vr.dm
@@ -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)
diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm
index 01cf2b574e..568eb0f743 100644
--- a/code/defines/procs/announce.dm
+++ b/code/defines/procs/announce.dm
@@ -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("[message_title]: [message]", announcer ? announcer : ANNOUNCER_NAME, channel = "Common", zlevels = zlevels)
@@ -96,13 +95,6 @@
global_announcer.autosay("[message_title]: [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("[message_title]")
- to_world("[message]")
-
-/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)
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 22168e7a12..a241b80256 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -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
diff --git a/code/game/jobs/job/special_vr.dm b/code/game/jobs/job/special_vr.dm
index ac855fb3cb..6e3f1df827 100644
--- a/code/game/jobs/job/special_vr.dm
+++ b/code/game/jobs/job/special_vr.dm
@@ -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"
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index ac006c3dd3..2e45691570 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -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, "Your current species, job or whitelist status does not permit you to spawn with [thing]!")
- 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, "Equipping you with \the [thing]!")
- 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, "Equipping you with \the [thing]!")
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, "Placing \the [thing] in your [B.name]!")
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, "Equipping you with \the [thing]!")
- 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 += "Department account number ([D]): #[department_account.account_number]
"
- remembered_info += "Department account pin ([D]): [department_account.remote_access_pin]
"
- remembered_info += "Department account funds ([D]): $[department_account.money]
"
-
- 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, "Placing \the [thing] in your [B.name]!")
- 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, "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.")
-
- 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, "You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank].")
-
- if(job.supervisors)
- to_chat(H, "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.")
- if(job.has_headset)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
- to_chat(H, "To speak on your department's radio channel use :h. For the use of other channels, examine your headset.")
-
- if(job.req_admin_notify)
- to_chat(H, "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.")
-
- // 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 [EA.login] and the password is [EA.password]. 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, "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.")
@@ -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)
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index c193417572..2790a5ec15 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -305,5 +305,3 @@
build_eff = man_rating
eat_eff = bin_rating
-
-#undef BIOGENITEM
diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
index 8cf5cc7823..83878767b7 100644
--- a/code/game/machinery/doors/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -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()
diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm
index 62c80fd59c..90558cf622 100644
--- a/code/game/machinery/embedded_controller/airlock_program.dm
+++ b/code/game/machinery/embedded_controller/airlock_program.dm
@@ -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
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 5012ec4052..06323a4f06 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -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"
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 0440e32634..aa5226c172 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -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 = "
[src.name]"
- if(screen == 0)
- dat += "Tracking beacons data
"
- for(var/obj/item/mecha_parts/mecha_tracking/TR in world)
- var/answer = TR.get_mecha_info()
- if(answer)
- dat += {"
[answer]
- Send message
- Show exosuit log | (EMP pulse)
"}
-
- if(screen==1)
- dat += "Log contents
"
- dat += "Return
"
- dat += "[stored_data]"
-
- dat += "(Refresh)
"
- dat += ""
-
- 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 = {"Name: [M.name]
- Integrity: [M.health/initial(M.health)*100]%
- Cell charge: [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]
- Airtank: [M.return_pressure()]kPa
- Pilot: [M.occupant||"None"]
- Location: [get_area(M)||"Unknown"]
- Active equipment: [M.selected||"None"]"}
- if(istype(M, /obj/mecha/working/ripley))
- var/obj/mecha/working/ripley/RM = M
- answer += "Used cargo space: [RM.cargo.len/RM.cargo_capacity*100]%
"
-
- 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)
diff --git a/code/game/mecha/micro/mecha_construction_paths_vr.dm b/code/game/mecha/micro/mecha_construction_paths_vr.dm
index 637a5ab36c..7019c64399 100644
--- a/code/game/mecha/micro/mecha_construction_paths_vr.dm
+++ b/code/game/mecha/micro/mecha_construction_paths_vr.dm
@@ -1,768 +1,771 @@
/datum/construction/mecha/polecat_chassis
- steps = list(list("key"=/obj/item/mecha_parts/micro/part/polecat_torso),//1
- list("key"=/obj/item/mecha_parts/micro/part/polecat_left_arm),//2
- list("key"=/obj/item/mecha_parts/micro/part/polecat_right_arm),//3
- list("key"=/obj/item/mecha_parts/micro/part/polecat_left_leg),//4
- list("key"=/obj/item/mecha_parts/micro/part/polecat_right_leg)//5
- )
+ steps = list(
+ list("key"=/obj/item/mecha_parts/micro/part/polecat_torso),//1
+ list("key"=/obj/item/mecha_parts/micro/part/polecat_left_arm),//2
+ list("key"=/obj/item/mecha_parts/micro/part/polecat_right_arm),//3
+ list("key"=/obj/item/mecha_parts/micro/part/polecat_left_leg),//4
+ list("key"=/obj/item/mecha_parts/micro/part/polecat_right_leg)//5
+ )
- custom_action(step, atom/used_atom, mob/user)
- user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
- holder.add_overlay(used_atom.icon_state+"+o")
- qdel(used_atom)
- return 1
+/datum/construction/mecha/polecat_chassis/custom_action(step, atom/used_atom, mob/user)
+ user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
+ holder.add_overlay(used_atom.icon_state+"+o")
+ qdel(used_atom)
+ return 1
- action(atom/used_atom,mob/user as mob)
- return check_all_steps(used_atom,user)
+/datum/construction/mecha/polecat_chassis/action(atom/used_atom,mob/user as mob)
+ return check_all_steps(used_atom,user)
- spawn_result()
- var/obj/item/mecha_parts/chassis/const_holder = holder
- const_holder.construct = new /datum/construction/reversible/mecha/polecat(const_holder)
- const_holder.icon = 'icons/mecha/mech_construction_vr.dmi'
- const_holder.icon_state = "polecat0"
- const_holder.density = 1
- const_holder.overlays.len = 0
- spawn()
- qdel(src)
- return
+/datum/construction/mecha/polecat_chassis/spawn_result()
+ var/obj/item/mecha_parts/chassis/const_holder = holder
+ const_holder.construct = new /datum/construction/reversible/mecha/polecat(const_holder)
+ const_holder.icon = 'icons/mecha/mech_construction_vr.dmi'
+ const_holder.icon_state = "polecat0"
+ const_holder.density = 1
+ const_holder.overlays.len = 0
+ spawn()
+ qdel(src)
+ return
/datum/construction/reversible/mecha/polecat
result = "/obj/mecha/micro/sec/polecat"
steps = list(
- //1
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=IS_WRENCH,
- "desc"="External armor is wrenched."),
- //2
- list("key"=IS_WRENCH,
- "backkey"=IS_CROWBAR,
- "desc"="External armor is installed."),
- //3
- list("key"=/obj/item/mecha_parts/micro/part/polecat_armour,
- "backkey"=/obj/item/weapon/weldingtool,
- "desc"="Internal armor is welded."),
- //4
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=IS_WRENCH,
- "desc"="Internal armor is wrenched"),
- //5
- list("key"=IS_WRENCH,
- "backkey"=IS_CROWBAR,
- "desc"="Internal armor is installed"),
- //6
- list("key"=/obj/item/stack/material/steel,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Advanced capacitor is secured"),
- //7
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Advanced capacitor is installed"),
- //8
- list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Advanced scanner module is secured"),
- //9
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Advanced scanner module is installed"),
- //10
- list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Targeting module is secured"),
- //11
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Targeting module is installed"),
- //12
- list("key"=/obj/item/weapon/circuitboard/mecha/polecat/targeting,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Peripherals control module is secured"),
- //13
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Peripherals control module is installed"),
- //14
- list("key"=/obj/item/weapon/circuitboard/mecha/polecat/peripherals,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Central control module is secured"),
- //15
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Central control module is installed"),
- //16
- list("key"=/obj/item/weapon/circuitboard/mecha/polecat/main,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The wiring is adjusted"),
- //17
- list("key"=IS_WIRECUTTER,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The wiring is added"),
- //18
- list("key"=/obj/item/stack/cable_coil,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The hydraulic systems are active."),
- //19
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_WRENCH,
- "desc"="The hydraulic systems are connected."),
- //20
- list("key"=IS_WRENCH,
- "desc"="The hydraulic systems are disconnected.")
- )
+ //1
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="External armor is wrenched."),
+ //2
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/mecha_parts/micro/part/polecat_armour,
+ "backkey"=/obj/item/weapon/weldingtool,
+ "desc"="Internal armor is welded."),
+ //4
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="Internal armor is wrenched"),
+ //5
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="Internal armor is installed"),
+ //6
+ list("key"=/obj/item/stack/material/steel,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Advanced capacitor is secured"),
+ //7
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Advanced capacitor is installed"),
+ //8
+ list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Advanced scanner module is secured"),
+ //9
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Advanced scanner module is installed"),
+ //10
+ list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Targeting module is secured"),
+ //11
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Targeting module is installed"),
+ //12
+ list("key"=/obj/item/weapon/circuitboard/mecha/polecat/targeting,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Peripherals control module is secured"),
+ //13
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Peripherals control module is installed"),
+ //14
+ list("key"=/obj/item/weapon/circuitboard/mecha/polecat/peripherals,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Central control module is secured"),
+ //15
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Central control module is installed"),
+ //16
+ list("key"=/obj/item/weapon/circuitboard/mecha/polecat/main,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The wiring is adjusted"),
+ //17
+ list("key"=IS_WIRECUTTER,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The wiring is added"),
+ //18
+ list("key"=/obj/item/stack/cable_coil,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The hydraulic systems are active."),
+ //19
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_WRENCH,
+ "desc"="The hydraulic systems are connected."),
+ //20
+ list("key"=IS_WRENCH,
+ "desc"="The hydraulic systems are disconnected.")
+ )
- action(atom/used_atom,mob/user as mob)
- return check_step(used_atom,user)
+/datum/construction/reversible/mecha/polecat/action(atom/used_atom,mob/user as mob)
+ return check_step(used_atom,user)
- custom_action(index, diff, atom/used_atom, mob/user)
- if(!..())
- return 0
- //TODO: better messages.
- switch(index)
- if(20)
- user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+/datum/construction/reversible/mecha/polecat/custom_action(index, diff, atom/used_atom, mob/user)
+ if(!..())
+ return 0
+ //TODO: better messages.
+ switch(index)
+ if(20)
+ user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+ holder.icon_state = "polecat1"
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
+ holder.icon_state = "polecat2"
+ else
+ user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
+ holder.icon_state = "polecat0"
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ holder.icon_state = "polecat3"
+ else
+ user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
holder.icon_state = "polecat1"
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
- holder.icon_state = "polecat2"
- else
- user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
- holder.icon_state = "polecat0"
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
- holder.icon_state = "polecat3"
- else
- user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
- holder.icon_state = "polecat1"
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
- holder.icon_state = "polecat4"
- else
- user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
- var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
- coil.amount = 4
- holder.icon_state = "polecat2"
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- qdel(used_atom)
- holder.icon_state = "polecat5"
- else
- user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
- holder.icon_state = "polecat3"
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- holder.icon_state = "polecat6"
- else
- user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
- new /obj/item/weapon/circuitboard/mecha/polecat/main(get_turf(holder))
- holder.icon_state = "polecat4"
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- qdel(used_atom)
- holder.icon_state = "polecat7"
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- holder.icon_state = "polecat5"
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- holder.icon_state = "polecat8"
- else
- user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
- new /obj/item/weapon/circuitboard/mecha/polecat/peripherals(get_turf(holder))
- holder.icon_state = "polecat6"
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
- qdel(used_atom)
- holder.icon_state = "polecat9"
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- holder.icon_state = "polecat7"
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
- holder.icon_state = "polecat10"
- else
- user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
- new /obj/item/weapon/circuitboard/mecha/polecat/targeting(get_turf(holder))
- holder.icon_state = "polecat8"
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
- qdel(used_atom)
- holder.icon_state = "polecat11"
- else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
- holder.icon_state = "polecat9"
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
- holder.icon_state = "polecat12"
- else
- user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
- new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
- holder.icon_state = "polecat10"
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
- qdel(used_atom)
- holder.icon_state = "polecat13"
- else
- user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
- holder.icon_state = "polecat11"
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
- holder.icon_state = "polecat14"
- else
- user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
- new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
- holder.icon_state = "polecat12"
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
- holder.icon_state = "polecat15"
- else
- user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
- holder.icon_state = "polecat13"
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
- holder.icon_state = "polecat16"
- else
- user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
- var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
- MS.amount = 3
- holder.icon_state = "polecat14"
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
- holder.icon_state = "polecat17"
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- holder.icon_state = "polecat15"
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
- qdel(used_atom)//CHOMPedit upstream port. Fixes polecat not useing it's armor plates up.
- holder.icon_state = "polecat18"
- else
- user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
- holder.icon_state = "polecat16"
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
- holder.icon_state = "polecat19"
- else
- user.visible_message("[user] pries external armor layer from [holder].", "You pry the external armor layer from [holder].") // Rykka does smol grammar fix.
- new /obj/item/mecha_parts/micro/part/polecat_armour(get_turf(holder))// Actually gives you the polecat's armored plates back instead of plasteel.
- holder.icon_state = "polecat17"
- if(1)
- if(diff==FORWARD)
- user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
- else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
- holder.icon_state = "polecat18"
- return 1
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ holder.icon_state = "polecat4"
+ else
+ user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
+ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
+ coil.amount = 4
+ holder.icon_state = "polecat2"
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "polecat5"
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ holder.icon_state = "polecat3"
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ holder.icon_state = "polecat6"
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/polecat/main(get_turf(holder))
+ holder.icon_state = "polecat4"
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "polecat7"
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ holder.icon_state = "polecat5"
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ holder.icon_state = "polecat8"
+ else
+ user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/polecat/peripherals(get_turf(holder))
+ holder.icon_state = "polecat6"
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "polecat9"
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ holder.icon_state = "polecat7"
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ holder.icon_state = "polecat10"
+ else
+ user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/polecat/targeting(get_turf(holder))
+ holder.icon_state = "polecat8"
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
+ qdel(used_atom)
+ holder.icon_state = "polecat11"
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ holder.icon_state = "polecat9"
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
+ holder.icon_state = "polecat12"
+ else
+ user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
+ new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
+ holder.icon_state = "polecat10"
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
+ qdel(used_atom)
+ holder.icon_state = "polecat13"
+ else
+ user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
+ holder.icon_state = "polecat11"
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
+ holder.icon_state = "polecat14"
+ else
+ user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
+ new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
+ holder.icon_state = "polecat12"
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ holder.icon_state = "polecat15"
+ else
+ user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
+ holder.icon_state = "polecat13"
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ holder.icon_state = "polecat16"
+ else
+ user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
+ var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
+ MS.amount = 3
+ holder.icon_state = "polecat14"
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ holder.icon_state = "polecat17"
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ holder.icon_state = "polecat15"
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
+ qdel(used_atom)//CHOMPedit upstream port. Fixes polecat not useing it's armor plates up.
+ holder.icon_state = "polecat18"
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
+ holder.icon_state = "polecat16"
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
+ holder.icon_state = "polecat19"
+ else
+ user.visible_message("[user] pries external armor layer from [holder].", "You pry the external armor layer from [holder].") // Rykka does smol grammar fix.
+ new /obj/item/mecha_parts/micro/part/polecat_armour(get_turf(holder))// Actually gives you the polecat's armored plates back instead of plasteel.
+ holder.icon_state = "polecat17"
+ if(1)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ holder.icon_state = "polecat18"
+ return 1
- spawn_result()
- ..()
- feedback_inc("mecha_polecat_created",1)
- return
+/datum/construction/reversible/mecha/polecat/spawn_result()
+ ..()
+ feedback_inc("mecha_polecat_created",1)
+ return
/datum/construction/mecha/gopher_chassis
- steps = list(list("key"=/obj/item/mecha_parts/micro/part/gopher_torso),//1
- list("key"=/obj/item/mecha_parts/micro/part/gopher_left_arm),//2
- list("key"=/obj/item/mecha_parts/micro/part/gopher_right_arm),//3
- list("key"=/obj/item/mecha_parts/micro/part/gopher_left_leg),//4
- list("key"=/obj/item/mecha_parts/micro/part/gopher_right_leg)//5
- )
+ steps = list(
+ list("key"=/obj/item/mecha_parts/micro/part/gopher_torso),//1
+ list("key"=/obj/item/mecha_parts/micro/part/gopher_left_arm),//2
+ list("key"=/obj/item/mecha_parts/micro/part/gopher_right_arm),//3
+ list("key"=/obj/item/mecha_parts/micro/part/gopher_left_leg),//4
+ list("key"=/obj/item/mecha_parts/micro/part/gopher_right_leg)//5
+ )
- custom_action(step, atom/used_atom, mob/user)
- user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
- holder.add_overlay(used_atom.icon_state+"+o")
- qdel(used_atom)
- return 1
+/datum/construction/mecha/gopher_chassis/custom_action(step, atom/used_atom, mob/user)
+ user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
+ holder.add_overlay(used_atom.icon_state+"+o")
+ qdel(used_atom)
+ return 1
- action(atom/used_atom,mob/user as mob)
- return check_all_steps(used_atom,user)
+/datum/construction/mecha/gopher_chassis/action(atom/used_atom,mob/user as mob)
+ return check_all_steps(used_atom,user)
- spawn_result()
- var/obj/item/mecha_parts/chassis/const_holder = holder
- const_holder.construct = new /datum/construction/reversible/mecha/gopher(const_holder)
- const_holder.icon = 'icons/mecha/mech_construction_vr.dmi'
- const_holder.icon_state = "gopher0"
- const_holder.density = 1
- const_holder.overlays.len = 0
- spawn()
- qdel(src)
- return
+/datum/construction/mecha/gopher_chassis/spawn_result()
+ var/obj/item/mecha_parts/chassis/const_holder = holder
+ const_holder.construct = new /datum/construction/reversible/mecha/gopher(const_holder)
+ const_holder.icon = 'icons/mecha/mech_construction_vr.dmi'
+ const_holder.icon_state = "gopher0"
+ const_holder.density = 1
+ const_holder.overlays.len = 0
+ spawn()
+ qdel(src)
+ return
/datum/construction/reversible/mecha/gopher
result = "/obj/mecha/micro/utility/gopher"
steps = list(
- //1
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=IS_WRENCH,
- "desc"="External armor is wrenched."),
- //2
- list("key"=IS_WRENCH,
- "backkey"=IS_CROWBAR,
- "desc"="External armor is installed."),
- //3
- list("key"=/obj/item/stack/material/plasteel,
- "backkey"=/obj/item/weapon/weldingtool,
- "desc"="Internal armor is welded."),
- //4
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=IS_WRENCH,
- "desc"="Internal armor is wrenched"),
- //5
- list("key"=IS_WRENCH,
- "backkey"=IS_CROWBAR,
- "desc"="Internal armor is installed"),
- //6
- list("key"=/obj/item/stack/material/steel,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Peripherals control module is secured"),
- //7
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Peripherals control module is installed"),
- //8
- list("key"=/obj/item/weapon/circuitboard/mecha/gopher/peripherals,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Central control module is secured"),
- //9
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Central control module is installed"),
- //10
- list("key"=/obj/item/weapon/circuitboard/mecha/gopher/main,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The wiring is adjusted"),
- //11
- list("key"=IS_WIRECUTTER,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The wiring is added"),
- //12
- list("key"=/obj/item/stack/cable_coil,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The hydraulic systems are active."),
- //13
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_WRENCH,
- "desc"="The hydraulic systems are connected."),
- //14
- list("key"=IS_WRENCH,
- "desc"="The hydraulic systems are disconnected.")
- )
+ //1
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="External armor is wrenched."),
+ //2
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/stack/material/plasteel,
+ "backkey"=/obj/item/weapon/weldingtool,
+ "desc"="Internal armor is welded."),
+ //4
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="Internal armor is wrenched"),
+ //5
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="Internal armor is installed"),
+ //6
+ list("key"=/obj/item/stack/material/steel,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Peripherals control module is secured"),
+ //7
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Peripherals control module is installed"),
+ //8
+ list("key"=/obj/item/weapon/circuitboard/mecha/gopher/peripherals,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Central control module is secured"),
+ //9
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Central control module is installed"),
+ //10
+ list("key"=/obj/item/weapon/circuitboard/mecha/gopher/main,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The wiring is adjusted"),
+ //11
+ list("key"=IS_WIRECUTTER,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The wiring is added"),
+ //12
+ list("key"=/obj/item/stack/cable_coil,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The hydraulic systems are active."),
+ //13
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_WRENCH,
+ "desc"="The hydraulic systems are connected."),
+ //14
+ list("key"=IS_WRENCH,
+ "desc"="The hydraulic systems are disconnected.")
+ )
- action(atom/used_atom,mob/user as mob)
- return check_step(used_atom,user)
+/datum/construction/reversible/mecha/gopher/action(atom/used_atom,mob/user as mob)
+ return check_step(used_atom,user)
- custom_action(index, diff, atom/used_atom, mob/user)
- if(!..())
- return 0
+/datum/construction/reversible/mecha/gopher/custom_action(index, diff, atom/used_atom, mob/user)
+ if(!..())
+ return 0
- //TODO: better messages.
- switch(index)
- if(14)
- user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+ //TODO: better messages.
+ switch(index)
+ if(14)
+ user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+ holder.icon_state = "gopher1"
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
+ holder.icon_state = "gopher2"
+ else
+ user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
+ holder.icon_state = "gopher0"
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ holder.icon_state = "gopher3"
+ else
+ user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
holder.icon_state = "gopher1"
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
- holder.icon_state = "gopher2"
- else
- user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
- holder.icon_state = "gopher0"
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
- holder.icon_state = "gopher3"
- else
- user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
- holder.icon_state = "gopher1"
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
- holder.icon_state = "gopher4"
- else
- user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
- var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
- coil.amount = 4
- holder.icon_state = "gopher2"
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- qdel(used_atom)
- holder.icon_state = "gopher5"
- else
- user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
- holder.icon_state = "gopher3"
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- holder.icon_state = "gopher6"
- else
- user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
- new /obj/item/weapon/circuitboard/mecha/gopher/main(get_turf(holder))
- holder.icon_state = "gopher4"
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- qdel(used_atom)
- holder.icon_state = "gopher7"
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- holder.icon_state = "gopher5"
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- holder.icon_state = "gopher8"
- else
- user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
- new /obj/item/weapon/circuitboard/mecha/gopher/peripherals(get_turf(holder))
- holder.icon_state = "gopher6"
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
- holder.icon_state = "gopher9"
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- holder.icon_state = "gopher7"
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
- holder.icon_state = "gopher10"
- else
- user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
- var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
- MS.amount = 3
- holder.icon_state = "gopher8"
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
- holder.icon_state = "gopher11"
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- holder.icon_state = "gopher9"
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
- holder.icon_state = "gopher12"
- else
- user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
- holder.icon_state = "gopher10"
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
- holder.icon_state = "gopher13"
- else
- user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].")
- var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
- MS.amount = 2
- holder.icon_state = "gopher11"
- if(1)
- if(diff==FORWARD)
- user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
- else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
- holder.icon_state = "gopher12"
- return 1
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ holder.icon_state = "gopher4"
+ else
+ user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
+ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
+ coil.amount = 4
+ holder.icon_state = "gopher2"
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "gopher5"
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ holder.icon_state = "gopher3"
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ holder.icon_state = "gopher6"
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/gopher/main(get_turf(holder))
+ holder.icon_state = "gopher4"
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "gopher7"
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ holder.icon_state = "gopher5"
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ holder.icon_state = "gopher8"
+ else
+ user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/gopher/peripherals(get_turf(holder))
+ holder.icon_state = "gopher6"
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ holder.icon_state = "gopher9"
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ holder.icon_state = "gopher7"
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ holder.icon_state = "gopher10"
+ else
+ user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
+ var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
+ MS.amount = 3
+ holder.icon_state = "gopher8"
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ holder.icon_state = "gopher11"
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ holder.icon_state = "gopher9"
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
+ holder.icon_state = "gopher12"
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
+ holder.icon_state = "gopher10"
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
+ holder.icon_state = "gopher13"
+ else
+ user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].")
+ var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
+ MS.amount = 2
+ holder.icon_state = "gopher11"
+ if(1)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ holder.icon_state = "gopher12"
+ return 1
- spawn_result()
- ..()
- feedback_inc("mecha_gopher_created",1)
- return
+/datum/construction/reversible/mecha/gopher/spawn_result()
+ ..()
+ feedback_inc("mecha_gopher_created",1)
+ return
/datum/construction/mecha/weasel_chassis
- steps = list(list("key"=/obj/item/mecha_parts/micro/part/weasel_torso),//1
- list("key"=/obj/item/mecha_parts/micro/part/weasel_head),//2
- list("key"=/obj/item/mecha_parts/micro/part/weasel_left_arm),//3
- list("key"=/obj/item/mecha_parts/micro/part/weasel_right_arm),//4
- list("key"=/obj/item/mecha_parts/micro/part/weasel_tri_leg),//5
- )
+ steps = list(
+ list("key"=/obj/item/mecha_parts/micro/part/weasel_torso),//1
+ list("key"=/obj/item/mecha_parts/micro/part/weasel_head),//2
+ list("key"=/obj/item/mecha_parts/micro/part/weasel_left_arm),//3
+ list("key"=/obj/item/mecha_parts/micro/part/weasel_right_arm),//4
+ list("key"=/obj/item/mecha_parts/micro/part/weasel_tri_leg),//5
+ )
- custom_action(step, atom/used_atom, mob/user)
- user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
- holder.add_overlay(used_atom.icon_state+"+o")
- qdel(used_atom)
- return 1
+/datum/construction/mecha/weasel_chassis/custom_action(step, atom/used_atom, mob/user)
+ user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
+ holder.add_overlay(used_atom.icon_state+"+o")
+ qdel(used_atom)
+ return 1
- action(atom/used_atom,mob/user as mob)
- return check_all_steps(used_atom,user)
+/datum/construction/mecha/weasel_chassis/action(atom/used_atom,mob/user as mob)
+ return check_all_steps(used_atom,user)
- spawn_result()
- var/obj/item/mecha_parts/chassis/const_holder = holder
- const_holder.construct = new /datum/construction/reversible/mecha/weasel(const_holder)
- const_holder.icon = 'icons/mecha/mech_construction_vr.dmi'
- const_holder.icon_state = "weasel0"
- const_holder.density = 1
- const_holder.overlays.len = 0
- spawn()
- qdel(src)
- return
+/datum/construction/mecha/weasel_chassis/spawn_result()
+ var/obj/item/mecha_parts/chassis/const_holder = holder
+ const_holder.construct = new /datum/construction/reversible/mecha/weasel(const_holder)
+ const_holder.icon = 'icons/mecha/mech_construction_vr.dmi'
+ const_holder.icon_state = "weasel0"
+ const_holder.density = 1
+ const_holder.overlays.len = 0
+ spawn()
+ qdel(src)
+ return
/datum/construction/reversible/mecha/weasel
result = "/obj/mecha/micro/sec/weasel"
steps = list(
- //1
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=IS_WRENCH,
- "desc"="External armor is wrenched."),
- //2
- list("key"=IS_WRENCH,
- "backkey"=IS_CROWBAR,
- "desc"="External armor is installed."),
- //3
- list("key"=/obj/item/stack/material/plasteel,
- "backkey"=/obj/item/weapon/weldingtool,
- "desc"="Internal armor is welded."),
- //4
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=IS_WRENCH,
- "desc"="Internal armor is wrenched"),
- //5
- list("key"=IS_WRENCH,
- "backkey"=IS_CROWBAR,
- "desc"="Internal armor is installed"),
- //6
- list("key"=/obj/item/stack/material/steel,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Advanced capacitor is secured"),
- //7
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Advanced capacitor is installed"),
- //8
- list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Advanced scanner module is secured"),
- //9
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Advanced scanner module is installed"),
- //10
- list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Targeting module is secured"),
- //11
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Targeting module is installed"),
- //12
- list("key"=/obj/item/weapon/circuitboard/mecha/weasel/targeting,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Peripherals control module is secured"),
- //13
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Peripherals control module is installed"),
- //14
- list("key"=/obj/item/weapon/circuitboard/mecha/weasel/peripherals,
- "backkey"=IS_SCREWDRIVER,
- "desc"="Central control module is secured"),
- //15
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_CROWBAR,
- "desc"="Central control module is installed"),
- //16
- list("key"=/obj/item/weapon/circuitboard/mecha/weasel/main,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The wiring is adjusted"),
- //17
- list("key"=IS_WIRECUTTER,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The wiring is added"),
- //18
- list("key"=/obj/item/stack/cable_coil,
- "backkey"=IS_SCREWDRIVER,
- "desc"="The hydraulic systems are active."),
- //19
- list("key"=IS_SCREWDRIVER,
- "backkey"=IS_WRENCH,
- "desc"="The hydraulic systems are connected."),
- //20
- list("key"=IS_WRENCH,
- "desc"="The hydraulic systems are disconnected.")
- )
+ //1
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="External armor is wrenched."),
+ //2
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/stack/material/plasteel,
+ "backkey"=/obj/item/weapon/weldingtool,
+ "desc"="Internal armor is welded."),
+ //4
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="Internal armor is wrenched"),
+ //5
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="Internal armor is installed"),
+ //6
+ list("key"=/obj/item/stack/material/steel,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Advanced capacitor is secured"),
+ //7
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Advanced capacitor is installed"),
+ //8
+ list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Advanced scanner module is secured"),
+ //9
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Advanced scanner module is installed"),
+ //10
+ list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Targeting module is secured"),
+ //11
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Targeting module is installed"),
+ //12
+ list("key"=/obj/item/weapon/circuitboard/mecha/weasel/targeting,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Peripherals control module is secured"),
+ //13
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Peripherals control module is installed"),
+ //14
+ list("key"=/obj/item/weapon/circuitboard/mecha/weasel/peripherals,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="Central control module is secured"),
+ //15
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="Central control module is installed"),
+ //16
+ list("key"=/obj/item/weapon/circuitboard/mecha/weasel/main,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The wiring is adjusted"),
+ //17
+ list("key"=IS_WIRECUTTER,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The wiring is added"),
+ //18
+ list("key"=/obj/item/stack/cable_coil,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The hydraulic systems are active."),
+ //19
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_WRENCH,
+ "desc"="The hydraulic systems are connected."),
+ //20
+ list("key"=IS_WRENCH,
+ "desc"="The hydraulic systems are disconnected.")
+ )
- action(atom/used_atom,mob/user as mob)
- return check_step(used_atom,user)
+/datum/construction/reversible/mecha/weasel/action(atom/used_atom,mob/user as mob)
+ return check_step(used_atom,user)
- custom_action(index, diff, atom/used_atom, mob/user)
- if(!..())
- return 0
- //TODO: better messages.
- switch(index)
- if(20)
- user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+/datum/construction/reversible/mecha/weasel/custom_action(index, diff, atom/used_atom, mob/user)
+ if(!..())
+ return 0
+ //TODO: better messages.
+ switch(index)
+ if(20)
+ user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+ holder.icon_state = "weasel1"
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
+ holder.icon_state = "weasel2"
+ else
+ user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
+ holder.icon_state = "weasel0"
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ holder.icon_state = "weasel3"
+ else
+ user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
holder.icon_state = "weasel1"
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
- holder.icon_state = "weasel2"
- else
- user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
- holder.icon_state = "weasel0"
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
- holder.icon_state = "weasel3"
- else
- user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
- holder.icon_state = "weasel1"
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
- holder.icon_state = "weasel4"
- else
- user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
- var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
- coil.amount = 4
- holder.icon_state = "weasel2"
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- qdel(used_atom)
- holder.icon_state = "weasel5"
- else
- user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
- holder.icon_state = "weasel3"
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- holder.icon_state = "weasel6"
- else
- user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
- new /obj/item/weapon/circuitboard/mecha/weasel/main(get_turf(holder))
- holder.icon_state = "weasel4"
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- qdel(used_atom)
- holder.icon_state = "weasel7"
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- holder.icon_state = "weasel5"
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- holder.icon_state = "weasel8"
- else
- user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
- new /obj/item/weapon/circuitboard/mecha/weasel/peripherals(get_turf(holder))
- holder.icon_state = "weasel6"
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
- qdel(used_atom)
- holder.icon_state = "weasel9"
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- holder.icon_state = "weasel7"
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
- holder.icon_state = "weasel10"
- else
- user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
- new /obj/item/weapon/circuitboard/mecha/weasel/targeting(get_turf(holder))
- holder.icon_state = "weasel8"
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
- qdel(used_atom)
- holder.icon_state = "weasel11"
- else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
- holder.icon_state = "weasel9"
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
- holder.icon_state = "weasel12"
- else
- user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
- new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
- holder.icon_state = "weasel10"
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
- qdel(used_atom)
- holder.icon_state = "weasel13"
- else
- user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
- holder.icon_state = "weasel11"
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
- holder.icon_state = "weasel14"
- else
- user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
- new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
- holder.icon_state = "weasel12"
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
- holder.icon_state = "weasel15"
- else
- user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
- holder.icon_state = "weasel13"
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
- holder.icon_state = "weasel16"
- else
- user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
- var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
- MS.amount = 3
- holder.icon_state = "weasel14"
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
- holder.icon_state = "weasel17"
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- holder.icon_state = "weasel15"
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
- holder.icon_state = "weasel18"
- else
- user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
- holder.icon_state = "weasel16"
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
- holder.icon_state = "weasel19"
- else
- user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].")
- var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
- MS.amount = 3
- holder.icon_state = "weasel17"
- if(1)
- if(diff==FORWARD)
- user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
- else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
- holder.icon_state = "weasel18"
- return 1
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ holder.icon_state = "weasel4"
+ else
+ user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
+ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
+ coil.amount = 4
+ holder.icon_state = "weasel2"
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "weasel5"
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ holder.icon_state = "weasel3"
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ holder.icon_state = "weasel6"
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/weasel/main(get_turf(holder))
+ holder.icon_state = "weasel4"
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "weasel7"
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ holder.icon_state = "weasel5"
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ holder.icon_state = "weasel8"
+ else
+ user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/weasel/peripherals(get_turf(holder))
+ holder.icon_state = "weasel6"
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
+ qdel(used_atom)
+ holder.icon_state = "weasel9"
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ holder.icon_state = "weasel7"
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ holder.icon_state = "weasel10"
+ else
+ user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
+ new /obj/item/weapon/circuitboard/mecha/weasel/targeting(get_turf(holder))
+ holder.icon_state = "weasel8"
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
+ qdel(used_atom)
+ holder.icon_state = "weasel11"
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ holder.icon_state = "weasel9"
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
+ holder.icon_state = "weasel12"
+ else
+ user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
+ new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
+ holder.icon_state = "weasel10"
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
+ qdel(used_atom)
+ holder.icon_state = "weasel13"
+ else
+ user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
+ holder.icon_state = "weasel11"
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
+ holder.icon_state = "weasel14"
+ else
+ user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
+ new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
+ holder.icon_state = "weasel12"
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ holder.icon_state = "weasel15"
+ else
+ user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
+ holder.icon_state = "weasel13"
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ holder.icon_state = "weasel16"
+ else
+ user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
+ var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
+ MS.amount = 3
+ holder.icon_state = "weasel14"
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ holder.icon_state = "weasel17"
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ holder.icon_state = "weasel15"
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
+ holder.icon_state = "weasel18"
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
+ holder.icon_state = "weasel16"
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
+ holder.icon_state = "weasel19"
+ else
+ user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].")
+ var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
+ MS.amount = 3
+ holder.icon_state = "weasel17"
+ if(1)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ holder.icon_state = "weasel18"
+ return 1
- spawn_result()
- ..()
- feedback_inc("mecha_weasel_created",1)
- return
+/datum/construction/reversible/mecha/weasel/spawn_result()
+ ..()
+ feedback_inc("mecha_weasel_created",1)
+ return
diff --git a/code/game/mecha/micro/mecha_parts_vr.dm b/code/game/mecha/micro/mecha_parts_vr.dm
index 59f6714351..fa07c8d8c4 100644
--- a/code/game/mecha/micro/mecha_parts_vr.dm
+++ b/code/game/mecha/micro/mecha_parts_vr.dm
@@ -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"
diff --git a/code/game/mecha/micro/micro_equipment.dm b/code/game/mecha/micro/micro_equipment.dm
index d36f9fa0a3..127f5b9323 100644
--- a/code/game/mecha/micro/micro_equipment.dm
+++ b/code/game/mecha/micro/micro_equipment.dm
@@ -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 "[..()] \[BS|BB|S\]"
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/microshotgun/get_equip_info()
+ return "[..()] \[BS|BB|S\]"
/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("[chassis] starts to drill [target]", "You hear the drill.")
- occupant_message("You start to drill [target]")
- 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("[target] is too durable to drill through.")
- 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("The ore compartment is full.")
- 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("[chassis] starts to drill [target]", "You hear the drill.")
+ occupant_message("You start to drill [target]")
+ 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("[target] is too durable to drill through.")
+ 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("The ore compartment is full.")
+ 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("[chassis] sweeps around with its ore scoop.")
- occupant_message("You sweep around the area with the scoop.")
- 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("The ore compartment is full.")
- 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("[chassis] sweeps around with its ore scoop.")
+ occupant_message("You sweep around the area with the scoop.")
+ 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("The ore compartment is full.")
+ 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 "[..()]
Empty ore compartment"
+/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/get_equip_info()
+ return "[..()]
Empty ore compartment"
/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"
diff --git a/code/game/objects/effects/confetti_vr.dm b/code/game/objects/effects/confetti_vr.dm
index a54733c126..92e5e5bdeb 100644
--- a/code/game/objects/effects/confetti_vr.dm
+++ b/code/game/objects/effects/confetti_vr.dm
@@ -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 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 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>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"
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 133cdb5f22..559157af29 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -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)
\ No newline at end of file
diff --git a/code/game/objects/items/devices/communicator/UI_tgui.dm b/code/game/objects/items/devices/communicator/UI_tgui.dm
index 4745a02488..989d68078e 100644
--- a/code/game/objects/items/devices/communicator/UI_tgui.dm
+++ b/code/game/objects/items/devices/communicator/UI_tgui.dm
@@ -436,5 +436,3 @@
if("newsfeed")
newsfeed_channel = text2num(params["newsfeed"])
-
-#undef DEFAULT_MAP_SIZE
\ No newline at end of file
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index a406247400..00fa10f137 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -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)
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 36e20414f9..d31ed74dcf 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -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
diff --git a/code/game/objects/items/weapons/storage/backpack_vr.dm b/code/game/objects/items/weapons/storage/backpack_vr.dm
index eda37941a1..59505d3f71 100644
--- a/code/game/objects/items/weapons/storage/backpack_vr.dm
+++ b/code/game/objects/items/weapons/storage/backpack_vr.dm
@@ -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, "[no_message]")
- 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, "[no_message]")
+ 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
diff --git a/code/game/objects/random/mob_vr.dm b/code/game/objects/random/mob_vr.dm
index fdb41ada59..2f8c874d8f 100644
--- a/code/game/objects/random/mob_vr.dm
+++ b/code/game/objects/random/mob_vr.dm
@@ -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"
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index 51f4e858e2..fea781da8b 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -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()
diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm
index b63077c0c6..ace9c8d6a9 100644
--- a/code/modules/client/preference_setup/general/01_basic.dm
+++ b/code/modules/client/preference_setup/general/01_basic.dm
@@ -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
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index b5ec162af7..8c272cac22 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,4 +1,3 @@
-<<<<<<< HEAD
/obj/item/clothing
name = "clothing"
siemens_coefficient = 0.9
@@ -783,13 +782,13 @@
/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
if(ishuman(user))
var/mob/living/carbon/human/H = user
- if((taurized && !isTaurTail(H.tail_style)) || (!taurized && isTaurTail(H.tail_style)))
+ if((taurized && !istaurtail(H.tail_style)) || (!taurized && istaurtail(H.tail_style)))
taurize(user)
return ..()
/obj/item/clothing/suit/proc/taurize(var/mob/living/carbon/human/Taur)
- if(isTaurTail(Taur.tail_style))
+ if(istaurtail(Taur.tail_style))
var/datum/sprite_accessory/tail/taur/taurtail = Taur.tail_style
if(taurtail.suit_sprites && (get_worn_icon_state(slot_wear_suit_str) in cached_icon_states(taurtail.suit_sprites)))
icon_override = taurtail.suit_sprites
@@ -1093,1048 +1092,3 @@
/obj/item/clothing/under/rank/New()
sensor_mode = pick(0,1,2,3)
..()
-=======
-/obj/item/clothing
- name = "clothing"
- siemens_coefficient = 0.9
- drop_sound = 'sound/items/drop/clothing.ogg'
- pickup_sound = 'sound/items/pickup/clothing.ogg'
- var/list/species_restricted = null //Only these species can wear this kit.
- var/gunshot_residue //Used by forensics.
-
- var/list/accessories
- var/list/valid_accessory_slots
- var/list/restricted_accessory_slots
- var/list/starting_accessories
-
- var/flash_protection = FLASH_PROTECTION_NONE
- var/tint = TINT_NONE
- var/list/enables_planes //Enables these planes in the wearing mob's plane_holder
- var/list/plane_slots //But only if it's equipped into this specific slot
-
- /*
- Sprites used when the clothing item is refit. This is done by setting icon_override.
- For best results, if this is set then sprite_sheets should be null and vice versa, but that is by no means necessary.
- Ideally, sprite_sheets_refit should be used for "hard" clothing items that can't change shape very well to fit the wearer (e.g. helmets, hardsuits),
- while sprite_sheets should be used for "flexible" clothing items that do not need to be refitted (e.g. aliens wearing jumpsuits).
- */
- var/list/sprite_sheets_refit = null
- var/ear_protection = 0
- var/blood_sprite_state
-
- var/index //null by default, if set, will change which dmi it uses
-
- var/update_icon_define = null // Only needed if you've got multiple files for the same type of clothing
-
-
-//Updates the icons of the mob wearing the clothing item, if any.
-/obj/item/clothing/proc/update_clothing_icon()
- return
-
-// Aurora forensics port.
-/obj/item/clothing/clean_blood()
- . = ..()
- gunshot_residue = null
-
-
-/obj/item/clothing/New()
- ..()
- if(starting_accessories)
- for(var/T in starting_accessories)
- var/obj/item/clothing/accessory/tie = new T(src)
- src.attach_accessory(null, tie)
- set_clothing_index()
-
-/obj/item/clothing/update_icon()
- overlays.Cut() //This removes all the overlays on the sprite and then goes down a checklist adding them as required.
- if(blood_DNA)
- add_blood()
- . = ..()
-
-/obj/item/clothing/equipped(var/mob/user,var/slot)
- ..()
- if(enables_planes)
- user.recalculate_vis()
-
-/obj/item/clothing/dropped(var/mob/user)
- ..()
- if(enables_planes)
- user.recalculate_vis()
-
-//BS12: Species-restricted clothing check.
-/obj/item/clothing/mob_can_equip(M as mob, slot, disable_warning = FALSE)
-
- //if we can't equip the item anyway, don't bother with species_restricted (cuts down on spam)
- if (!..())
- return 0
-
- if(LAZYLEN(species_restricted) && istype(M,/mob/living/carbon/human))
- var/exclusive = null
- var/wearable = null
- var/mob/living/carbon/human/H = M
-
- if("exclude" in species_restricted)
- exclusive = 1
-
- if(H.species)
- if(exclusive)
- if(!(H.species.get_bodytype(H) in species_restricted))
- wearable = 1
- else
- if(H.species.get_bodytype(H) in species_restricted)
- wearable = 1
-
- if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store)))
- to_chat(H, "Your species cannot wear [src].")
- return 0
- return 1
-
-/obj/item/clothing/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
- . = ..()
- if((. == 0) && LAZYLEN(accessories))
- for(var/obj/item/I in accessories)
- var/check = I.handle_shield(user, damage, damage_source, attacker, def_zone, attack_text)
-
- if(check != 0) // Projectiles sometimes use negatives IIRC, 0 is only returned if something is not blocked.
- . = check
- break
-
-// For now, these two temp procs only return TRUE or FALSE if they can provide resistance to a given temperature.
-/obj/item/clothing/proc/handle_low_temperature(var/tempcheck = T20C)
- . = FALSE
- if(LAZYLEN(accessories))
- for(var/obj/item/clothing/C in accessories)
- if(C.handle_low_temperature(tempcheck))
- . = TRUE
-
- if(min_cold_protection_temperature && min_cold_protection_temperature <= tempcheck)
- . = TRUE
-
-/obj/item/clothing/proc/handle_high_temperature(var/tempcheck = T20C)
- . = FALSE
- if(LAZYLEN(accessories))
- for(var/obj/item/clothing/C in accessories)
- if(C.handle_high_temperature(tempcheck))
- . = TRUE
-
- if(max_heat_protection_temperature && max_heat_protection_temperature >= tempcheck)
- . = TRUE
-
-// Returns the relative flag-vars for covered protection.
-/obj/item/clothing/proc/get_cold_protection_flags()
- . = cold_protection
-
- if(LAZYLEN(accessories))
- for(var/obj/item/clothing/C in accessories)
- . |= C.get_cold_protection_flags()
-
-/obj/item/clothing/proc/get_heat_protection_flags()
- . = heat_protection
-
- if(LAZYLEN(accessories))
- for(var/obj/item/clothing/C in accessories)
- . |= C.get_heat_protection_flags()
-
-/obj/item/clothing/proc/refit_for_species(var/target_species)
- if(!species_restricted)
- return //this item doesn't use the species_restricted system
-
- //Set species_restricted list
- switch(target_species)
- if(SPECIES_HUMAN, SPECIES_SKRELL) //humanoid bodytypes
- species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell/humans can wear each other's suits
- else
- species_restricted = list(target_species)
-
- //Set icon
- if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
- sprite_sheets[target_species] = sprite_sheets_refit[target_species]
-
- if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
- icon = sprite_sheets_obj[target_species]
- else
- icon = initial(icon)
-
-/obj/item/clothing/head/helmet/refit_for_species(var/target_species)
- if(!species_restricted)
- return //this item doesn't use the species_restricted system
-
- //Set species_restricted list
- switch(target_species)
- if(SPECIES_SKRELL)
- species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell helmets fit humans too
-
- else
- species_restricted = list(target_species)
-
- //Set icon
- if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
- sprite_sheets[target_species] = sprite_sheets_refit[target_species]
-
- if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
- icon = sprite_sheets_obj[target_species]
- else
- icon = initial(icon)
-
-///////////////////////////////////////////////////////////////////////
-// Ears: headsets, earmuffs and tiny objects
-/obj/item/clothing/ears
- name = "ears"
- w_class = ITEMSIZE_TINY
- throwforce = 2
- slot_flags = SLOT_EARS
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/ears.dmi')
-
-/obj/item/clothing/ears/attack_hand(mob/user as mob)
- if (!user) return
-
- if (src.loc != user || !istype(user,/mob/living/carbon/human))
- ..()
- return
-
- var/mob/living/carbon/human/H = user
- if(H.l_ear != src && H.r_ear != src)
- ..()
- return
-
- if(!canremove)
- return
-
- var/obj/item/clothing/ears/O
- if(slot_flags & SLOT_TWOEARS )
- O = (H.l_ear == src ? H.r_ear : H.l_ear)
- user.u_equip(O)
- if(!istype(src,/obj/item/clothing/ears/offear))
- qdel(O)
- O = src
- else
- O = src
-
- user.unEquip(src)
-
- if (O)
- user.put_in_hands(O)
- O.add_fingerprint(user)
-
- if(istype(src,/obj/item/clothing/ears/offear))
- qdel(src)
-
-/obj/item/clothing/ears/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_ears()
-
-/obj/item/clothing/ears/MouseDrop(var/obj/over_object)
- if(ishuman(usr))
- var/mob/living/carbon/human/H = usr
- // If this covers both ears, we want to return the result of unequipping the primary object, and kill the off-ear one
- if(slot_flags & SLOT_TWOEARS)
- var/obj/item/clothing/ears/O = (H.l_ear == src ? H.r_ear : H.l_ear)
- if(istype(src, /obj/item/clothing/ears/offear))
- . = O.MouseDrop(over_object)
- H.drop_from_inventory(src)
- qdel(src)
- else
- . = ..()
- H.drop_from_inventory(O)
- qdel(O)
- else
- . = ..()
-
-
-/obj/item/clothing/ears/offear
- name = "Other ear"
- w_class = ITEMSIZE_HUGE
- icon = 'icons/mob/screen1_Midnight.dmi'
- icon_state = "block"
- slot_flags = SLOT_EARS | SLOT_TWOEARS
-
-/obj/item/clothing/ears/offear/New(var/obj/O)
- name = O.name
- desc = O.desc
- icon = O.icon
- icon_state = O.icon_state
- set_dir(O.dir)
-
-////////////////////////////////////////////////////////////////////////////////////////
-//Gloves
-/obj/item/clothing/gloves
- name = "gloves"
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
- )
- gender = PLURAL //Carn: for grammarically correct text-parsing
- w_class = ITEMSIZE_SMALL
- icon = 'icons/obj/clothing/gloves.dmi'
- siemens_coefficient = 0.9
- blood_sprite_state = "bloodyhands"
- var/wired = 0
- var/obj/item/weapon/cell/cell = 0
- var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
- var/obj/item/clothing/gloves/ring = null //Covered ring
- var/mob/living/carbon/human/wearer = null //Used for covered rings when dropping
- var/glove_level = 2 //What "layer" the glove is on
- var/overgloves = 0 //Used by gauntlets and arm_guards
- var/punch_force = 0 //How much damage do these gloves add to a punch?
- var/punch_damtype = BRUTE //What type of damage does this make fists be?
- body_parts_covered = HANDS
- slot_flags = SLOT_GLOVES
- attack_verb = list("challenged")
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/gloves.dmi',
- SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
- )
- drop_sound = 'sound/items/drop/gloves.ogg'
- pickup_sound = 'sound/items/pickup/gloves.ogg'
-
-/obj/item/clothing/proc/set_clothing_index()
- return
-
-/obj/item/clothing/gloves/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_gloves()
-
-/obj/item/clothing/gloves/emp_act(severity)
- if(cell)
- cell.emp_act(severity)
- if(ring)
- ring.emp_act(severity)
- ..()
-
-// Called just before an attack_hand(), in mob/UnarmedAttack()
-/obj/item/clothing/gloves/proc/Touch(var/atom/A, var/proximity)
- return 0 // return 1 to cancel attack_hand()
-
-/*/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user)
- if(W.is_wirecutter() || istype(W, /obj/item/weapon/scalpel))
- if (clipped)
- to_chat(user, "The [src] have already been clipped!")
- update_icon()
- return
-
- playsound(src, W.usesound, 50, 1)
- user.visible_message("[user] cuts the fingertips off of the [src].","You cut the fingertips off of the [src].")
-
- clipped = 1
- name = "modified [name]"
- desc = "[desc]
They have had the fingertips cut off of them."
- if("exclude" in species_restricted)
- species_restricted -= SPECIES_UNATHI
- species_restricted -= SPECIES_TAJ
- return
-*/
-
-/obj/item/clothing/gloves/clean_blood()
- . = ..()
- transfer_blood = 0
- update_icon()
-
-/obj/item/clothing/gloves/mob_can_equip(mob/user, slot, disable_warning = FALSE)
- var/mob/living/carbon/human/H = user
-
- if(slot && slot == slot_gloves)
- var/obj/item/clothing/gloves/G = H.gloves
- if(istype(G))
- ring = H.gloves
- if(ring.glove_level >= src.glove_level)
- to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
- ring = null
- return 0
- else
- H.drop_from_inventory(ring) //Remove the ring (or other under-glove item in the hand slot?) so you can put on the gloves.
- ring.forceMove(src)
- to_chat(user, "You slip \the [src] on over \the [src.ring].")
- if(!(flags & THICKMATERIAL))
- punch_force += ring.punch_force
- else
- ring = null
-
- if(!..())
- if(ring) //Put the ring back on if the check fails.
- if(H.equip_to_slot_if_possible(ring, slot_gloves))
- src.ring = null
- punch_force = initial(punch_force)
- return 0
-
- wearer = H //TODO clean this when magboots are cleaned
- return 1
-
-/obj/item/clothing/gloves/dropped()
- ..()
-
- if(!wearer)
- return
-
- var/mob/living/carbon/human/H = wearer
- if(ring && istype(H))
- if(!H.equip_to_slot_if_possible(ring, slot_gloves))
- ring.forceMove(get_turf(src))
- src.ring = null
- punch_force = initial(punch_force)
- wearer = null
-
-/obj/item/clothing/gloves
- var/datum/unarmed_attack/special_attack = null //do the gloves have a special unarmed attack?
- var/special_attack_type = null
-
-/obj/item/clothing/gloves/New()
- ..()
- if(special_attack_type && ispath(special_attack_type))
- special_attack = new special_attack_type
-
-
-
-/////////////////////////////////////////////////////////////////////
-//Rings
-
-/obj/item/clothing/gloves/ring
- name = "ring"
- w_class = ITEMSIZE_TINY
- icon = 'icons/obj/clothing/rings.dmi'
- gender = NEUTER
- species_restricted = list("exclude", SPECIES_DIONA)
- siemens_coefficient = 1
- glove_level = 1
- fingerprint_chance = 100
- punch_force = 2
- body_parts_covered = 0
- drop_sound = 'sound/items/drop/ring.ogg'
- pickup_sound = 'sound/items/pickup/ring.ogg'
-
-///////////////////////////////////////////////////////////////////////
-//Head
-/obj/item/clothing/head
- name = "head"
- icon = 'icons/obj/clothing/hats.dmi'
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_hats.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_hats.dmi',
- )
- body_parts_covered = HEAD
- slot_flags = SLOT_HEAD
- w_class = ITEMSIZE_SMALL
- blood_sprite_state = "helmetblood"
-
- var/light_overlay = "helmet_light"
- var/light_applied
- var/brightness_on
- var/on = 0
- var/image/helmet_light
-
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/head.dmi',
- SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
- )
- drop_sound = 'sound/items/drop/hat.ogg'
- pickup_sound = 'sound/items/pickup/hat.ogg'
-
-/obj/item/clothing/head/attack_self(mob/user)
- if(brightness_on)
- if(!isturf(user.loc))
- to_chat(user, "You cannot turn the light on while in this [user.loc]")
- return
- on = !on
- to_chat(user, "You [on ? "enable" : "disable"] the helmet light.")
- update_flashlight(user)
- else
- return ..(user)
-
-/obj/item/clothing/head/proc/update_flashlight(var/mob/user = null)
- if(on && !light_applied)
- set_light(brightness_on)
- light_applied = 1
- else if(!on && light_applied)
- set_light(0)
- light_applied = 0
- update_icon(user)
- user.update_action_buttons()
-
-/obj/item/clothing/head/attack_ai(var/mob/user)
- if(!mob_wear_hat(user))
- return ..()
-
-/obj/item/clothing/head/attack_generic(var/mob/user)
- if(!mob_wear_hat(user))
- return ..()
-
-/obj/item/clothing/head/proc/mob_wear_hat(var/mob/user)
- if(!Adjacent(user))
- return 0
- var/success
- if(istype(user, /mob/living/silicon/robot/drone))
- var/mob/living/silicon/robot/drone/D = user
- if(D.hat)
- success = 2
- else
- D.wear_hat(src)
- success = 1
- else if(istype(user, /mob/living/carbon/alien/diona))
- var/mob/living/carbon/alien/diona/D = user
- if(D.hat)
- success = 2
- else
- D.wear_hat(src)
- success = 1
-
- if(!success)
- return 0
- else if(success == 2)
- to_chat(user, "You are already wearing a hat.")
- else if(success == 1)
- to_chat(user, "You crawl under \the [src].")
- return 1
-
-/obj/item/clothing/head/update_icon(var/mob/user)
- var/mob/living/carbon/human/H
- if(ishuman(user))
- H = user
-
- if(on)
- // Generate object icon.
- if(!light_overlay_cache["[light_overlay]_icon"])
- light_overlay_cache["[light_overlay]_icon"] = image(icon = 'icons/obj/light_overlays.dmi', icon_state = "[light_overlay]")
- helmet_light = light_overlay_cache["[light_overlay]_icon"]
- add_overlay(helmet_light)
-
- // Generate and cache the on-mob icon, which is used in update_inv_head().
- var/body_type = (H && H.species.get_bodytype(H))
- var/cache_key = "[light_overlay][body_type && sprite_sheets[body_type] ? "_[body_type]" : ""]"
- if(!light_overlay_cache[cache_key])
- var/use_icon = LAZYACCESS(sprite_sheets,body_type) || 'icons/mob/light_overlays.dmi'
- light_overlay_cache[cache_key] = image(icon = use_icon, icon_state = "[light_overlay]")
-
- else if(helmet_light)
- cut_overlay(helmet_light)
- helmet_light = null
-
- user.update_inv_head() //Will redraw the helmet with the light on the mob
-
-/obj/item/clothing/head/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_head()
-
-///////////////////////////////////////////////////////////////////////
-//Mask
-/obj/item/clothing/mask
- name = "mask"
- icon = 'icons/obj/clothing/masks.dmi'
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_masks.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_masks.dmi',
- )
- body_parts_covered = HEAD
- slot_flags = SLOT_MASK
- body_parts_covered = FACE|EYES
- blood_sprite_state = "maskblood"
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/masks.dmi',
- SPECIES_VOX = 'icons/mob/species/vox/masks.dmi',
- SPECIES_TAJ = 'icons/mob/species/tajaran/mask.dmi',
- SPECIES_UNATHI = 'icons/mob/species/unathi/mask.dmi'
- )
-
- var/voicechange = 0
- var/list/say_messages
- var/list/say_verbs
-
- drop_sound = "generic_drop"
- pickup_sound = "generic_pickup"
-
-/obj/item/clothing/mask/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_wear_mask()
-
-/obj/item/clothing/mask/proc/filter_air(datum/gas_mixture/air)
- return
-
-///////////////////////////////////////////////////////////////////////
-//Shoes
-/obj/item/clothing/shoes
- name = "shoes"
- icon = 'icons/obj/clothing/shoes.dmi'
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_shoes.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_shoes.dmi',
- )
- desc = "Comfortable-looking shoes."
- gender = PLURAL //Carn: for grammarically correct text-parsing
- siemens_coefficient = 0.9
- body_parts_covered = FEET
- slot_flags = SLOT_FEET
- blood_sprite_state = "shoeblood"
-
- var/can_hold_knife = 0
- var/obj/item/holding
-
- var/shoes_under_pants = 0
-
- var/water_speed = 0 //Speed boost/decrease in water, lower/negative values mean more speed
- var/snow_speed = 0 //Speed boost/decrease on snow, lower/negative values mean more speed
- var/rock_climbing = FALSE // If true, allows climbing cliffs with clickdrag.
-
- var/step_volume_mod = 1 //How quiet or loud footsteps in this shoe are
-
- permeability_coefficient = 0.50
- slowdown = SHOES_SLOWDOWN
- force = 2
- var/overshoes = 0
- species_restricted = list("exclude",SPECIES_TESHARI, SPECIES_VOX)
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/shoes.dmi',
- SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
- )
- drop_sound = 'sound/items/drop/shoes.ogg'
- pickup_sound = 'sound/items/pickup/shoes.ogg'
-
-/obj/item/clothing/shoes/proc/draw_knife()
- set name = "Draw Boot Knife"
- set desc = "Pull out your boot knife."
- set category = "IC"
- set src in usr
-
- if(usr.stat || usr.restrained() || usr.incapacitated())
- return
-
- holding.forceMove(get_turf(usr))
-
- if(usr.put_in_hands(holding))
- usr.visible_message("\The [usr] pulls a knife out of their boot!")
- playsound(src, 'sound/weapons/holster/sheathout.ogg', 25)
- holding = null
- overlays -= image(icon, "[icon_state]_knife")
- else
- to_chat(usr, "Your need an empty, unbroken hand to do that.")
- holding.forceMove(src)
-
- if(!holding)
- verbs -= /obj/item/clothing/shoes/proc/draw_knife
-
- update_icon()
- return
-
-/obj/item/clothing/shoes/attack_hand(var/mob/living/M)
- if(can_hold_knife == 1 && holding && src.loc == M)
- draw_knife()
- return
- ..()
-
-/obj/item/clothing/shoes/attackby(var/obj/item/I, var/mob/user)
- if((can_hold_knife == 1) && (istype(I, /obj/item/weapon/material/shard) || \
- istype(I, /obj/item/weapon/material/butterfly) || \
- istype(I, /obj/item/weapon/material/kitchen/utensil) || \
- istype(I, /obj/item/weapon/material/knife/tacknife)))
- if(holding)
- to_chat(user, "\The [src] is already holding \a [holding].")
- return
- user.unEquip(I)
- I.forceMove(src)
- holding = I
- user.visible_message("\The [user] shoves \the [I] into \the [src].")
- verbs |= /obj/item/clothing/shoes/proc/draw_knife
- update_icon()
- else
- return ..()
-
-/obj/item/clothing/shoes/verb/toggle_layer()
- set name = "Switch Shoe Layer"
- set category = "Object"
-
- if(shoes_under_pants == -1)
- to_chat(usr, "\The [src] cannot be worn above your suit!")
- return
- shoes_under_pants = !shoes_under_pants
- update_icon()
-
-/obj/item/clothing/shoes/update_icon()
- . = ..()
- if(holding)
- overlays += image(icon, "[icon_state]_knife")
- if(ismob(usr))
- var/mob/M = usr
- M.update_inv_shoes()
-
-/obj/item/clothing/shoes/clean_blood()
- update_icon()
- return ..()
-
-/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running)
- return
-
-/obj/item/clothing/shoes/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_shoes()
-
-
-///////////////////////////////////////////////////////////////////////
-//Suit
-/obj/item/clothing/suit
- icon = 'icons/obj/clothing/suits.dmi'
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_suits.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_suits.dmi',
- )
- name = "suit"
- var/fire_resist = T0C+100
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
- allowed = list(/obj/item/weapon/tank/emergency/oxygen)
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- slot_flags = SLOT_OCLOTHING
- var/blood_overlay_type = "suit"
- blood_sprite_state = "suitblood" //Defaults to the suit's blood overlay, so that some blood renders instead of no blood.
-
- var/taurized = FALSE
- siemens_coefficient = 0.9
- w_class = ITEMSIZE_NORMAL
- preserve_item = 1
- equip_sound = 'sound/items/jumpsuit_equip.ogg'
-
-
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/suit.dmi',
- SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
- )
-
- valid_accessory_slots = (ACCESSORY_SLOT_OVER | ACCESSORY_SLOT_ARMBAND)
- restricted_accessory_slots = (ACCESSORY_SLOT_ARMBAND)
-
-/obj/item/clothing/suit/set_clothing_index()
- ..()
-
- if(index && !icon_override)
- icon = new /icon("icons/obj/clothing/suits_[index].dmi")
- item_icons = list(
- slot_l_hand_str = new /icon("icons/mob/items/lefthand_suits_[index].dmi"),
- slot_r_hand_str = new /icon("icons/mob/items/righthand_suits_[index].dmi"),
- )
-
- return 1
-
- return 0
-
-/obj/item/clothing/suit/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_wear_suit()
-
- set_clothing_index()
-
-/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if((taurized && !istaurtail(H.tail_style)) || (!taurized && istaurtail(H.tail_style)))
- taurize(user)
-
- return ..()
-
-/obj/item/clothing/suit/proc/taurize(var/mob/living/carbon/human/Taur)
- if(istaurtail(Taur.tail_style))
- var/datum/sprite_accessory/tail/taur/taurtail = Taur.tail_style
- if(taurtail.suit_sprites && (get_worn_icon_state(slot_wear_suit_str) in cached_icon_states(taurtail.suit_sprites)))
- icon_override = taurtail.suit_sprites
- taurized = TRUE
-
- if(!taurized)
- icon_override = initial(icon_override)
- taurized = FALSE
-
-// Taur suits need to be shifted so its centered on their taur half.
-/obj/item/clothing/suit/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0,var/icon/clip_mask)
- var/image/standing = ..()
- if(taurized) //Special snowflake var on suits
- standing.pixel_x = -16
- standing.layer = BODY_LAYER + 15 // 15 is above tail layer, so will not be covered by taurbody.
- return standing
-
-/obj/item/clothing/suit/apply_accessories(var/image/standing)
- if(LAZYLEN(accessories) && taurized)
- for(var/obj/item/clothing/accessory/A in accessories)
- var/image/I = new(A.get_mob_overlay())
- I.pixel_x = 16 //Opposite of the pixel_x on the suit (-16) from taurization to cancel it out and puts the accessory in the correct place on the body.
- standing.add_overlay(I)
- else
- return ..()
-
-
-///////////////////////////////////////////////////////////////////////
-//Under clothing
-/obj/item/clothing/under
- icon = 'icons/obj/clothing/uniforms.dmi'
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_uniforms.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_uniforms.dmi',
- )
- name = "under"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- permeability_coefficient = 0.90
- slot_flags = SLOT_ICLOTHING
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- equip_sound = 'sound/items/jumpsuit_equip.ogg'
- w_class = ITEMSIZE_NORMAL
- show_messages = 1
- blood_sprite_state = "uniformblood"
-
- var/has_sensor = 1 //For the crew computer 2 = unable to change mode
- var/sensor_mode = 0
- /*
- 1 = Report living/dead
- 2 = Report detailed damages
- 3 = Report location
- */
- var/displays_id = 1
- var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
- var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
- sprite_sheets = list(
- SPECIES_TESHARI = 'icons/mob/species/teshari/uniform.dmi',
- SPECIES_VOX = 'icons/mob/species/vox/uniform.dmi'
- )
-
- //convenience var for defining the icon state for the overlay used when the clothing is worn.
- //Also used by rolling/unrolling.
- var/worn_state = null
- valid_accessory_slots = (\
- ACCESSORY_SLOT_UTILITY\
- |ACCESSORY_SLOT_WEAPON\
- |ACCESSORY_SLOT_ARMBAND\
- |ACCESSORY_SLOT_DECOR\
- |ACCESSORY_SLOT_MEDAL\
- |ACCESSORY_SLOT_INSIGNIA\
- |ACCESSORY_SLOT_TIE\
- |ACCESSORY_SLOT_RANK\
- |ACCESSORY_SLOT_DEPT\
- |ACCESSORY_SLOT_OVER)
- restricted_accessory_slots = (\
- ACCESSORY_SLOT_UTILITY\
- |ACCESSORY_SLOT_WEAPON\
- |ACCESSORY_SLOT_ARMBAND\
- |ACCESSORY_SLOT_TIE\
- |ACCESSORY_SLOT_RANK\
- |ACCESSORY_SLOT_DEPT\
- |ACCESSORY_SLOT_OVER)
-
- var/icon/rolled_down_icon = 'icons/mob/uniform_rolled_down.dmi'
- var/icon/rolled_down_sleeves_icon = 'icons/mob/uniform_sleeves_rolled.dmi'
-
-/obj/item/clothing/under/attack_hand(var/mob/user)
- if(LAZYLEN(accessories))
- ..()
- if ((ishuman(usr) || issmall(usr)) && src.loc == user)
- return
- ..()
-
-/obj/item/clothing/under/New()
- ..()
- if(worn_state)
- if(!item_state_slots)
- item_state_slots = list()
- item_state_slots[slot_w_uniform_str] = worn_state
- else
- worn_state = icon_state
-
- //autodetect rollability
- if(rolled_down < 0)
- if(("[worn_state]_d_s" in cached_icon_states(icon)) || ("[worn_state]_s" in cached_icon_states(rolled_down_icon)) || ("[worn_state]_d_s" in cached_icon_states(icon_override)))
- rolled_down = 0
-
- if(rolled_down == -1)
- verbs -= /obj/item/clothing/under/verb/rollsuit
- if(rolled_sleeves == -1)
- verbs -= /obj/item/clothing/under/verb/rollsleeves
-
-/obj/item/clothing/under/set_clothing_index()
- ..()
-
- if(index && !icon_override)
- icon = new /icon("icons/obj/clothing/uniforms_[index].dmi")
-
- item_icons = list(
- slot_l_hand_str = new /icon("icons/mob/items/lefthand_uniforms_[index].dmi"),
- slot_r_hand_str = new /icon("icons/mob/items/righthand_uniforms_[index].dmi"),
- )
-
- rolled_down_icon = new /icon("icons/mob/uniform_rolled_down_[index].dmi")
- rolled_down_sleeves_icon = new /icon("icons/mob/uniform_sleeves_rolled_[index].dmi")
- return 1
-
- return 0
-
-/obj/item/clothing/under/proc/update_rolldown_status()
- var/mob/living/carbon/human/H
- if(istype(src.loc, /mob/living/carbon/human))
- H = src.loc
-
- var/icon/under_icon
- if(icon_override)
- under_icon = icon_override
- else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)])
- under_icon = sprite_sheets[H.species.get_bodytype(H)]
- else if(item_icons && item_icons[slot_w_uniform_str])
- under_icon = item_icons[slot_w_uniform_str]
- else if ("[worn_state]_s" in cached_icon_states(rolled_down_icon))
- under_icon = rolled_down_icon
-
- // The _s is because the icon update procs append it.
- if((under_icon == rolled_down_icon && ("[worn_state]_s" in cached_icon_states(under_icon))) || ("[worn_state]_d_s" in cached_icon_states(under_icon)))
- if(rolled_down != 1)
- rolled_down = 0
- else
- rolled_down = -1
- if(H) update_clothing_icon()
-
-/obj/item/clothing/under/proc/update_rollsleeves_status()
- var/mob/living/carbon/human/H
- if(istype(src.loc, /mob/living/carbon/human))
- H = src.loc
-
- var/icon/under_icon
- if(icon_override)
- under_icon = icon_override
- else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)])
- under_icon = sprite_sheets[H.species.get_bodytype(H)]
- else if(item_icons && item_icons[slot_w_uniform_str])
- under_icon = item_icons[slot_w_uniform_str]
- else if ("[worn_state]_s" in cached_icon_states(rolled_down_sleeves_icon))
- under_icon = rolled_down_sleeves_icon
- else if(index)
- under_icon = new /icon("[INV_W_UNIFORM_DEF_ICON]_[index].dmi")
-
- // The _s is because the icon update procs append it.
- if((under_icon == rolled_down_sleeves_icon && ("[worn_state]_s" in cached_icon_states(under_icon))) || ("[worn_state]_r_s" in cached_icon_states(under_icon)))
- if(rolled_sleeves != 1)
- rolled_sleeves = 0
- else
- rolled_sleeves = -1
- if(H) update_clothing_icon()
-
-/obj/item/clothing/under/update_clothing_icon()
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_w_uniform()
-
- set_clothing_index()
-
-
-/obj/item/clothing/under/examine(mob/user)
- . = ..()
- switch(src.sensor_mode)
- if(0)
- . += "Its sensors appear to be disabled."
- if(1)
- . += "Its binary life sensors appear to be enabled."
- if(2)
- . += "Its vital tracker appears to be enabled."
- if(3)
- . += "Its vital tracker and tracking beacon appear to be enabled."
-
-/obj/item/clothing/under/proc/set_sensors(mob/usr as mob)
- var/mob/M = usr
- if (istype(M, /mob/observer)) return
- if (usr.stat || usr.restrained()) return
- if(has_sensor >= 2)
- to_chat(usr, "The controls are locked.")
- return 0
- if(has_sensor <= 0)
- to_chat(usr, "This suit does not have any sensors.")
- return 0
-
- var/list/modes = list("Off", "Binary sensors", "Vitals tracker", "Tracking beacon")
- var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes
- if(get_dist(usr, src) > 1)
- to_chat(usr, "You have moved too far away.")
- return
- sensor_mode = modes.Find(switchMode) - 1
-
- if (src.loc == usr)
- switch(sensor_mode)
- if(0)
- usr.visible_message("[usr] adjusts their sensors.", "You disable your suit's remote sensing equipment.")
- if(1)
- usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report whether you are live or dead.")
- if(2)
- usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report your vital lifesigns.")
- if(3)
- usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report your vital lifesigns as well as your coordinate position.")
-
- else if (istype(src.loc, /mob))
- usr.visible_message("[usr] adjusts [src.loc]'s sensors.", "You adjust [src.loc]'s sensors.")
-
-/obj/item/clothing/under/verb/toggle()
- set name = "Toggle Suit Sensors"
- set category = "Object"
- set src in usr
- set_sensors(usr)
-
-/obj/item/clothing/under/verb/rollsuit()
- set name = "Roll Down Jumpsuit"
- set category = "Object"
- set src in usr
- if(!istype(usr, /mob/living)) return
- if(usr.stat) return
-
- update_rolldown_status()
- if(rolled_down == -1)
- to_chat(usr, "You cannot roll down [src]!")
- return
- if((rolled_sleeves == 1) && !(rolled_down))
- rolled_sleeves = 0
-
- rolled_down = !rolled_down
- if(rolled_down)
- body_parts_covered = initial(body_parts_covered)
- body_parts_covered &= ~(UPPER_TORSO|ARMS)
- if("[worn_state]_s" in cached_icon_states(rolled_down_icon))
- icon_override = rolled_down_icon
- item_state_slots[slot_w_uniform_str] = "[worn_state]"
- else
- item_state_slots[slot_w_uniform_str] = "[worn_state]_d"
-
- to_chat(usr, "You roll down your [src].")
- else
- body_parts_covered = initial(body_parts_covered)
- if(icon_override == rolled_down_icon)
- icon_override = initial(icon_override)
- item_state_slots[slot_w_uniform_str] = "[worn_state]"
- to_chat(usr, "You roll up your [src].")
- update_clothing_icon()
-
-/obj/item/clothing/under/verb/rollsleeves()
- set name = "Roll Up Sleeves"
- set category = "Object"
- set src in usr
- if(!istype(usr, /mob/living)) return
- if(usr.stat) return
-
- update_rollsleeves_status()
- if(rolled_sleeves == -1)
- to_chat(usr, "You cannot roll up your [src]'s sleeves!")
- return
- if(rolled_down == 1)
- to_chat(usr, "You must roll up your [src] first!")
- return
-
- rolled_sleeves = !rolled_sleeves
- if(rolled_sleeves)
- body_parts_covered &= ~(ARMS)
- if("[worn_state]_s" in cached_icon_states(rolled_down_sleeves_icon))
- icon_override = rolled_down_sleeves_icon
- item_state_slots[slot_w_uniform_str] = "[worn_state]"
- else
- item_state_slots[slot_w_uniform_str] = "[worn_state]_r"
- to_chat(usr, "You roll up your [src]'s sleeves.")
- else
- body_parts_covered = initial(body_parts_covered)
- if(icon_override == rolled_down_sleeves_icon)
- icon_override = initial(icon_override)
- item_state_slots[slot_w_uniform_str] = "[worn_state]"
- to_chat(usr, "You roll down your [src]'s sleeves.")
- update_clothing_icon()
-
-/obj/item/clothing/under/rank/New()
- sensor_mode = pick(0,1,2,3)
- ..()
->>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150)
diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm
index 3487d0999c..a6cee840b6 100644
--- a/code/modules/clothing/glasses/hud_vr.dm
+++ b/code/modules/clothing/glasses/hud_vr.dm
@@ -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"
diff --git a/code/modules/clothing/head/misc_vr.dm b/code/modules/clothing/head/misc_vr.dm
index fc8bf9a69d..be84af47a6 100644
--- a/code/modules/clothing/head/misc_vr.dm
+++ b/code/modules/clothing/head/misc_vr.dm
@@ -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'
diff --git a/code/modules/clothing/suits/armor_vr.dm b/code/modules/clothing/suits/armor_vr.dm
index d380562a70..ba986f56fc 100644
--- a/code/modules/clothing/suits/armor_vr.dm
+++ b/code/modules/clothing/suits/armor_vr.dm
@@ -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,"You need to have a wolf-taur half to wear this.")
- 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,"You need to have a wolf-taur half to wear this.")
+ return 0
// HoS armor improved by Vorestation to be slightly better than normal security stuff.
/obj/item/clothing/suit/storage/vest/hoscoat
diff --git a/code/modules/food/food/drinks/drinkingglass.dm b/code/modules/food/food/drinks/drinkingglass.dm
index 0e8e5d9483..b818663d86 100644
--- a/code/modules/food/food/drinks/drinkingglass.dm
+++ b/code/modules/food/food/drinks/drinkingglass.dm
@@ -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"
diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm
index 4f863bf34a..df60dc7ca8 100644
--- a/code/modules/lighting/lighting_source.dm
+++ b/code/modules/lighting/lighting_source.dm
@@ -371,5 +371,4 @@
#undef LUM_FALLOFF
#undef REMOVE_CORNER
#undef APPLY_CORNER
-#undef REMOVE_CORNER_SIMPLE
#undef APPLY_CORNER_SIMPLE
\ No newline at end of file
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 049a443d08..f42a4f3be0 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -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>[ADMIN_FULLMONTY(src)]"
-
-/*
-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]" : ""]. (JMP)",usr)
- else if(special_role)
- log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",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, "You have no body.")
- return
- if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients
- to_chat(usr, "Another consciousness is in your body... it is resisting you.")
- 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, "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.")
- 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, "Medical HUD [medHUD ? "Enabled" : "Disabled"]")
-
-/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, "Security HUD [secHUD ? "Enabled" : "Disabled"]")
-
-/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, "Admins have disabled this for this round.")
- return
- if(jobban_isbanned(src, "AntagHUD"))
- to_chat(src, "You have been banned from using this feature")
- 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, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]")
-
-/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, "You cannot follow a mob standing on holy grounds!")
- 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, "Now following [target]")
- 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, "You are dead! You have no mind to store memory!")
-
-/mob/observer/dead/add_memory()
- set hidden = 1
- to_chat(src, "You are dead! You have no mind to store memory!")
-
-/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, "Results:")
- if(abs(pressure - ONE_ATMOSPHERE) < 10)
- to_chat(src, "Pressure: [round(pressure,0.1)] kPa")
- else
- to_chat(src, "Pressure: [round(pressure,0.1)] kPa")
- if(total_moles)
- for(var/g in environment.gas)
- to_chat(src, "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)")
- to_chat(src, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)")
- to_chat(src, "Heat Capacity: [round(environment.heat_capacity(),0.1)]")
-
-/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, "Radiation level: [rads ? rads : "0"] Bq.")
-
-
-/mob/observer/dead/verb/become_mouse()
- set name = "Become mouse"
- set category = "Ghost"
-
- if(config.disable_player_mice)
- to_chat(src, "Spawning as a mouse is currently disabled.")
- return
-
- if(!MayRespawn(1))
- return
-
- var/turf/T = get_turf(src)
- if(!T || (T.z in using_map.admin_levels))
- to_chat(src, "You may not spawn as a mouse on this Z-level.")
- 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, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.")
- 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, "Unable to find any unwelded vents to spawn mice at.")
-
- 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, "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.")
-
-/mob/observer/dead/verb/view_manfiest()
- set name = "Show Crew Manifest"
- set category = "Ghost"
-
- var/dat
- dat += "Crew Manifest
"
- 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, "That verb is not currently permitted.")
- 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, "The veil is not thin enough for you to do that.")
- 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, "There is no blood to use nearby.")
- 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, "You cannot doodle there.")
- 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, "There is no space to write on!")
- 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, "You ran out of blood to write with!")
-
- 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("Invisible fingers crudely paint something in blood on [T]...")
-
-/mob/observer/dead/pointed(atom/A as mob|obj|turf in view())
- if(!..())
- return 0
- usr.visible_message("[src] points to [A]")
- 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, "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.")
- if(plane != PLANE_WORLD)
- user.visible_message( \
- "\The [user] drags ghost, [src], to our plane of reality!", \
- "You drag [src] to our plane of reality!" \
- )
- toggle_visibility(TRUE)
- else
- var/datum/gender/T = gender_datums[user.get_visible_gender()]
- user.visible_message ( \
- "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \
- "You get the feeling that the ghost can't become any more visible." \
- )
-
-/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("It fades from sight...", "You are now invisible.")
- else
- to_chat(src, "You are now visible!")
-
- 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, "Your key won't be shown when you speak in dead chat.")
- else
- to_chat(src, "Your key will be publicly visible again.")
-
-/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, "Your non-dead body prevent you from respawning.")
- return 0
- if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
- if(feedback)
- to_chat(src, "antagHUD restrictions prevent you from respawning.")
- return 0
- return 1
-
-/atom/proc/extra_ghost_link()
- return
-
-/mob/extra_ghost_link(var/atom/ghost)
- if(client && eyeobj)
- return "|eye"
-
-/mob/observer/dead/extra_ghost_link(var/atom/ghost)
- if(mind && mind.current)
- return "|body"
-
-/proc/ghost_follow_link(var/atom/target, var/atom/ghost)
- if((!target) || (!ghost)) return
- . = "follow"
- . += 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, " You hear a strange, unidentifiable voice in your head... [msg]")
- to_chat(src, " You said: '[msg]' to [M].")
- else
- return
- return 1
- else
- to_chat(src, "You have not been pulled past the veil!")
-
-/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,"Flashing the displays of [count] unoccupied PAIs.")
- else
- to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.")
-
-/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, "[message]")
- if(source)
- throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source)
- to_chat(src, "(Click to re-enter)")
- 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)
diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
index 240e557fa9..a7f55d937a 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
@@ -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'
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm
index fa822196b1..18894986e2 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm
@@ -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"
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
index b94e26ad1f..ccf4d9614f 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
@@ -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"
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
index 8e97b78748..5e472605f6 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
@@ -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"
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm
index 9c841429d0..d01d016b2c 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm
@@ -1,6 +1,3 @@
-#define ORGANICS 1
-#define SYNTHETICS 2
-
/datum/trait
var/name
var/desc = "Contact a developer if you see this trait."
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 8ce9754a37..7f8d44a742 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -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)
diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm
index a55e884ee0..d894ad3e1c 100644
--- a/code/modules/mob/living/silicon/robot/robot_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_vr.dm
@@ -235,7 +235,7 @@
var/mob/living/carbon/human/H = M
- if(isTaurTail(H.tail_style))
+ if(istaurtail(H.tail_style))
to_chat(src, "Too many legs. TOO MANY LEGS!!")
return FALSE
if(M.loc != src.loc)
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/_defines.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/_defines.dm
deleted file mode 100644
index 1567134c4d..0000000000
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/_defines.dm
+++ /dev/null
@@ -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
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/~defines.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/~defines.dm
deleted file mode 100644
index 28ce75c50b..0000000000
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/~defines.dm
+++ /dev/null
@@ -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
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 2540101e20..dba586b741 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1038,7 +1038,7 @@
pixel_x--
is_shifted = TRUE
-mob/verb/shifteast()
+/mob/verb/shifteast()
set hidden = TRUE
if(!canface())
return FALSE
diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm
index 5b7f3ebe58..7a3997e22a 100644
--- a/code/modules/mob/new_player/sprite_accessories_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_vr.dm
@@ -8,600 +8,599 @@
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the default hairstyles.
- astolfo
- name = "Astolfo"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "hair_astolfo"
+/datum/sprite_accessory/hair/astolfo
+ name = "Astolfo"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "hair_astolfo"
- awoohair
- name = "Shoulder-length Messy"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "momijihair"
+/datum/sprite_accessory/hair/awoohair
+ name = "Shoulder-length Messy"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "momijihair"
- citheronia
- name = "Citheronia Hair (Kira72)"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "citheronia_hair"
- ckeys_allowed = list("Kira72")
- do_colouration = 0
+/datum/sprite_accessory/hair/citheronia
+ name = "Citheronia Hair (Kira72)"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "citheronia_hair"
+ ckeys_allowed = list("Kira72")
+ do_colouration = 0
- taramaw
- name = "Hairmaw (Liquidfirefly)"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "maw_hair"
- ckeys_allowed = list("liquidfirefly")
- do_colouration = 0
+/datum/sprite_accessory/hair/taramaw
+ name = "Hairmaw (Liquidfirefly)"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "maw_hair"
+ ckeys_allowed = list("liquidfirefly")
+ do_colouration = 0
- citheronia_colorable
- name = "Citheronia Hair"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "citheronia_hair_c"
- do_colouration = 1
+/datum/sprite_accessory/hair/citheronia_colorable
+ name = "Citheronia Hair"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "citheronia_hair_c"
+ do_colouration = 1
- sergal_plain
- name = "Sergal Plain"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "serg_plain"
- species_allowed = list(SPECIES_SERGAL)
+/datum/sprite_accessory/hair/sergal_plain
+ name = "Sergal Plain"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "serg_plain"
+ species_allowed = list(SPECIES_SERGAL)
- sergal_medicore
- name = "Sergal Medicore"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "serg_medicore"
- species_allowed = list(SPECIES_SERGAL)
+/datum/sprite_accessory/hair/sergal_medicore
+ name = "Sergal Medicore"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "serg_medicore"
+ species_allowed = list(SPECIES_SERGAL)
- sergal_tapered
- name = "Sergal Tapered"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "serg_tapered"
- species_allowed = list(SPECIES_SERGAL)
+/datum/sprite_accessory/hair/sergal_tapered
+ name = "Sergal Tapered"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "serg_tapered"
+ species_allowed = list(SPECIES_SERGAL)
- sergal_fairytail
- name = "Sergal Fairytail"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "serg_fairytail"
- species_allowed = list(SPECIES_SERGAL)
+/datum/sprite_accessory/hair/sergal_fairytail
+ name = "Sergal Fairytail"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "serg_fairytail"
+ species_allowed = list(SPECIES_SERGAL)
- braid
- name = "Floorlength Braid"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "hair_braid"
+/datum/sprite_accessory/hair/braid
+ name = "Floorlength Braid"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "hair_braid"
- twindrills
- name = "Twin Drills"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "hair_twincurl"
+/datum/sprite_accessory/hair/twindrills
+ name = "Twin Drills"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "hair_twincurl"
- crescent_moon
- name = "Crescent-Moon"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "crescent_moon"
+/datum/sprite_accessory/hair/crescent_moon
+ name = "Crescent-Moon"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "crescent_moon"
- bald
- name = "Bald"
- icon_state = "bald"
- gender = MALE
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //Lets all the races be bald if they want.
+/datum/sprite_accessory/hair/bald
+ name = "Bald"
+ icon_state = "bald"
+ gender = MALE
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //Lets all the races be bald if they want.
- ponytail6_fixed //Eggnerd's done with waiting for upstream fixes lmao.
- name = "Ponytail 6 but fixed"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "hair_ponytail6"
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA,SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
+/datum/sprite_accessory/hair/ponytail6_fixed
+ name = "Ponytail 6 but fixed"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "hair_ponytail6"
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA,SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
- una_hood
- name = "Cobra Hood"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "soghun_hood"
+/datum/sprite_accessory/hair/una_hood
+ name = "Cobra Hood"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "soghun_hood"
- una_spines_long
- name = "Long Unathi Spines"
- icon_state = "soghun_longspines"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) //Xenochimera get most hairstyles since they're abominations.
+/datum/sprite_accessory/hair/una_spines_long
+ name = "Long Unathi Spines"
+ icon_state = "soghun_longspines"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) //Xenochimera get most hairstyles since they're abominations.
- una_spines_short
- name = "Short Unathi Spines"
- icon_state = "soghun_shortspines"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_spines_short
+ name = "Short Unathi Spines"
+ icon_state = "soghun_shortspines"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_frills_long
+ name = "Long Unathi Frills"
+ icon_state = "soghun_longfrills"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_frills_long
- name = "Long Unathi Frills"
- icon_state = "soghun_longfrills"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_frills_short
+ name = "Short Unathi Frills"
+ icon_state = "soghun_shortfrills"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_frills_short
- name = "Short Unathi Frills"
- icon_state = "soghun_shortfrills"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_horns
+ name = "Unathi Horns"
+ icon_state = "soghun_horns"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_horns
- name = "Unathi Horns"
- icon_state = "soghun_horns"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_bighorns
+ name = "Unathi Big Horns"
+ icon_state = "unathi_bighorn"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_bighorns
- name = "Unathi Big Horns"
- icon_state = "unathi_bighorn"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_smallhorns
+ name = "Unathi Small Horns"
+ icon_state = "unathi_smallhorn"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_smallhorns
- name = "Unathi Small Horns"
- icon_state = "unathi_smallhorn"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_ramhorns
+ name = "Unathi Ram Horns"
+ icon_state = "unathi_ramhorn"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_ramhorns
- name = "Unathi Ram Horns"
- icon_state = "unathi_ramhorn"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_sidefrills
+ name = "Unathi Side Frills"
+ icon_state = "unathi_sidefrills"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_sidefrills
- name = "Unathi Side Frills"
- icon_state = "unathi_sidefrills"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/una_doublehorns
+ name = "Double Unathi Horns"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "soghun_dubhorns"
+ species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- una_doublehorns
- name = "Double Unathi Horns"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "soghun_dubhorns"
- species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears
+ name = "Tajaran Ears"
+ icon_state = "ears_plain"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears
- name = "Tajaran Ears"
- icon_state = "ears_plain"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_clean
+ name = "Tajara Clean"
+ icon_state = "hair_clean"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_clean
- name = "Tajara Clean"
- icon_state = "hair_clean"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_bangs
+ name = "Tajara Bangs"
+ icon_state = "hair_bangs"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_bangs
- name = "Tajara Bangs"
- icon_state = "hair_bangs"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_braid
+ name = "Tajara Braid"
+ icon_state = "hair_tbraid"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_braid
- name = "Tajara Braid"
- icon_state = "hair_tbraid"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_shaggy
+ name = "Tajara Shaggy"
+ icon_state = "hair_shaggy"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_shaggy
- name = "Tajara Shaggy"
- icon_state = "hair_shaggy"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_mohawk
+ name = "Tajaran Mohawk"
+ icon_state = "hair_mohawk"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_mohawk
- name = "Tajaran Mohawk"
- icon_state = "hair_mohawk"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_plait
+ name = "Tajara Plait"
+ icon_state = "hair_plait"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_plait
- name = "Tajara Plait"
- icon_state = "hair_plait"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_straight
+ name = "Tajara Straight"
+ icon_state = "hair_straight"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_straight
- name = "Tajara Straight"
- icon_state = "hair_straight"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_long
+ name = "Tajara Long"
+ icon_state = "hair_long"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_long
- name = "Tajara Long"
- icon_state = "hair_long"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_rattail
+ name = "Tajara Rat Tail"
+ icon_state = "hair_rattail"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_rattail
- name = "Tajara Rat Tail"
- icon_state = "hair_rattail"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_spiky
+ name = "Tajara Spiky"
+ icon_state = "hair_tajspiky"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_spiky
- name = "Tajara Spiky"
- icon_state = "hair_tajspiky"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_messy
+ name = "Tajara Messy"
+ icon_state = "hair_messy"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_messy
- name = "Tajara Messy"
- icon_state = "hair_messy"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_curls
+ name = "Tajaran Curly"
+ icon_state = "hair_curly"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_curls
- name = "Tajaran Curly"
- icon_state = "hair_curly"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_wife
+ name = "Tajaran Housewife"
+ icon_state = "hair_wife"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_wife
- name = "Tajaran Housewife"
- icon_state = "hair_wife"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_victory
+ name = "Tajaran Victory Curls"
+ icon_state = "hair_victory"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_victory
- name = "Tajaran Victory Curls"
- icon_state = "hair_victory"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_bob
+ name = "Tajaran Bob"
+ icon_state = "hair_tbob"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- taj_ears_bob
- name = "Tajaran Bob"
- icon_state = "hair_tbob"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
-
- taj_ears_fingercurl
- name = "Tajaran Finger Curls"
- icon_state = "hair_fingerwave"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/taj_ears_fingercurl
+ name = "Tajaran Finger Curls"
+ icon_state = "hair_fingerwave"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
//Teshari things
- teshari
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_altdefault
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_altdefault
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_tight
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_tight
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_excited
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_excited
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_spike
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_spike
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_long
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_long
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_burst
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_burst
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_shortburst
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_shortburst
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_mohawk
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_mohawk
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_pointy
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_pointy
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_upright
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_upright
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_mane
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_mane
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_droopy
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_droopy
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_mushroom
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_mushroom
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_twies
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_twies
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_backstrafe
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_backstrafe
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_longway
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_longway
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_tree
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_tree
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
- teshari_fluffymohawk
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
+/datum/sprite_accessory/hair/teshari_fluffymohawk
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
//Skrell 'hairstyles' - these were requested for a chimera and screw it, if one wants to eat seafood, go nuts
- skr_tentacle_veryshort
- name = "Skrell Very Short Tentacles"
- icon_state = "skrell_hair_veryshort"
- species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- gender = MALE
+/datum/sprite_accessory/hair/skr_tentacle_veryshort
+ name = "Skrell Very Short Tentacles"
+ icon_state = "skrell_hair_veryshort"
+ species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+ gender = MALE
- skr_tentacle_short
- name = "Skrell Short Tentacles"
- icon_state = "skrell_hair_short"
- species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/skr_tentacle_short
+ name = "Skrell Short Tentacles"
+ icon_state = "skrell_hair_short"
+ species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- skr_tentacle_average
- name = "Skrell Average Tentacles"
- icon_state = "skrell_hair_average"
- species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+/datum/sprite_accessory/hair/skr_tentacle_average
+ name = "Skrell Average Tentacles"
+ icon_state = "skrell_hair_average"
+ species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- skr_tentacle_verylong
- name = "Skrell Long Tentacles"
- icon_state = "skrell_hair_verylong"
- species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
- gender = FEMALE
+/datum/sprite_accessory/hair/skr_tentacle_verylong
+ name = "Skrell Long Tentacles"
+ icon_state = "skrell_hair_verylong"
+ species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN)
+ gender = FEMALE
// Vulpa stuffs
- vulp_hair_none
- name = "None"
- icon_state = "bald"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_none
+ name = "None"
+ icon_state = "bald"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_hair_kajam
- name = "Kajam"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "kajam"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_kajam
+ name = "Kajam"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "kajam"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_keid
- name = "Keid"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "keid"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_keid
+ name = "Keid"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "keid"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_adhara
- name = "Adhara"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "adhara"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_adhara
+ name = "Adhara"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "adhara"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_kleeia
- name = "Kleeia"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "kleeia"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_kleeia
+ name = "Kleeia"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "kleeia"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_mizar
- name = "Mizar"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "mizar"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_mizar
+ name = "Mizar"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "mizar"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_apollo
- name = "Apollo"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "apollo"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_apollo
+ name = "Apollo"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "apollo"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_belle
- name = "Belle"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "belle"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_belle
+ name = "Belle"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "belle"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_bun
- name = "Vulp Bun"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "bun"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_bun
+ name = "Vulp Bun"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "bun"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_jagged
- name = "Jagged"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "jagged"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_jagged
+ name = "Jagged"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "jagged"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_curl
- name = "Curl"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "curl"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_curl
+ name = "Curl"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "curl"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_hawk
- name = "Hawk"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "hawk"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_hawk
+ name = "Hawk"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "hawk"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_anita
- name = "Anita"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "anita"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_anita
+ name = "Anita"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "anita"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_short
- name = "Short"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "short"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_short
+ name = "Short"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "short"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
- vulp_hair_spike
- name = "Spike"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "spike"
- species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
- gender = NEUTER
+/datum/sprite_accessory/hair/vulp_hair_spike
+ name = "Spike"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "spike"
+ species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
+ gender = NEUTER
//xeno stuffs
- xeno_head_drone_color
- name = "Drone dome"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "cxeno_drone"
- species_allowed = list(SPECIES_XENOHYBRID)
- gender = NEUTER
+/datum/sprite_accessory/hair/xeno_head_drone_color
+ name = "Drone dome"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "cxeno_drone"
+ species_allowed = list(SPECIES_XENOHYBRID)
+ gender = NEUTER
// figure this one out for better coloring
- xeno_head_sentinel_color
- name = "Sentinal dome"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "cxeno_sentinel"
- species_allowed = list(SPECIES_XENOHYBRID)
- gender = NEUTER
+/datum/sprite_accessory/hair/xeno_head_sentinel_color
+ name = "Sentinal dome"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "cxeno_sentinel"
+ species_allowed = list(SPECIES_XENOHYBRID)
+ gender = NEUTER
- xeno_head_queen_color
- name = "Queen dome"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "cxeno_queen"
- species_allowed = list(SPECIES_XENOHYBRID)
- gender = NEUTER
+/datum/sprite_accessory/hair/xeno_head_queen_color
+ name = "Queen dome"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "cxeno_queen"
+ species_allowed = list(SPECIES_XENOHYBRID)
+ gender = NEUTER
- xeno_head_hunter_color
- name = "Hunter dome"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "cxeno_hunter"
- species_allowed = list(SPECIES_XENOHYBRID)
- gender = NEUTER
+/datum/sprite_accessory/hair/xeno_head_hunter_color
+ name = "Hunter dome"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "cxeno_hunter"
+ species_allowed = list(SPECIES_XENOHYBRID)
+ gender = NEUTER
- xeno_head_praetorian_color
- name = "Praetorian dome"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "cxeno_praetorian"
- species_allowed = list(SPECIES_XENOHYBRID)
- gender = NEUTER
+/datum/sprite_accessory/hair/xeno_head_praetorian_color
+ name = "Praetorian dome"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "cxeno_praetorian"
+ species_allowed = list(SPECIES_XENOHYBRID)
+ gender = NEUTER
// Shadekin stuffs
- shadekin_hair_short
- name = "Shadekin Short Hair"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "shadekin_short"
- species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
- gender = NEUTER
+/datum/sprite_accessory/hair/shadekin_hair_short
+ name = "Shadekin Short Hair"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "shadekin_short"
+ species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
+ gender = NEUTER
- shadekin_hair_poofy
- name = "Shadekin Poofy Hair"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "shadekin_poofy"
- species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
- gender = NEUTER
+/datum/sprite_accessory/hair/shadekin_hair_poofy
+ name = "Shadekin Poofy Hair"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "shadekin_poofy"
+ species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
+ gender = NEUTER
- shadekin_hair_long
- name = "Shadekin Long Hair"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "shadekin_long"
- species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
- gender = NEUTER
+/datum/sprite_accessory/hair/shadekin_hair_long
+ name = "Shadekin Long Hair"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "shadekin_long"
+ species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
+ gender = NEUTER
- shadekin_hair_rivyr
- name = "Rivyr Hair"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_add = 'icons/mob/human_face_vr_add.dmi'
- icon_state = "shadekin_rivyr"
- ckeys_allowed = list("verysoft")
- species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
- gender = NEUTER
+/datum/sprite_accessory/hair/shadekin_hair_rivyr
+ name = "Rivyr Hair"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_add = 'icons/mob/human_face_vr_add.dmi'
+ icon_state = "shadekin_rivyr"
+ ckeys_allowed = list("verysoft")
+ species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
+ gender = NEUTER
/datum/sprite_accessory/facial_hair
icon = 'icons/mob/human_face_or_vr.dmi'
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This lets all races use the facial hair styles.
- shaved
- name = "Shaved"
- icon_state = "bald"
- gender = NEUTER
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This needed to be manually defined, apparantly.
+/datum/sprite_accessory/facial_hair/shaved
+ name = "Shaved"
+ icon_state = "bald"
+ gender = NEUTER
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This needed to be manually defined, apparantly.
- neck_fluff
- name = "Neck Fluff"
- icon = 'icons/mob/human_face_or_vr.dmi'
- icon_state = "facial_neckfluff"
- gender = NEUTER
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
+/datum/sprite_accessory/facial_hair/neck_fluff
+ name = "Neck Fluff"
+ icon = 'icons/mob/human_face_or_vr.dmi'
+ icon_state = "facial_neckfluff"
+ gender = NEUTER
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
- vulp_none
- name = "None"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "none"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_none
+ name = "None"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "none"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_blaze
- name = "Blaze"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_blaze"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_blaze
+ name = "Blaze"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_blaze"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_vulpine
- name = "Vulpine"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_vulpine"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_vulpine
+ name = "Vulpine"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_vulpine"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_earfluff
- name = "Earfluff"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_earfluff"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_earfluff
+ name = "Earfluff"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_earfluff"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_mask
- name = "Mask"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_mask"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_mask
+ name = "Mask"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_mask"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_patch
- name = "Patch"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_patch"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_patch
+ name = "Patch"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_patch"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_ruff
- name = "Ruff"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_ruff"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_ruff
+ name = "Ruff"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_ruff"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_kita
- name = "Kita"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_kita"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_kita
+ name = "Kita"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_kita"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
- vulp_swift
- name = "Swift"
- icon = 'icons/mob/human_face_vr.dmi'
- icon_state = "vulp_facial_swift"
- species_allowed = list(SPECIES_VULPKANIN)
- gender = NEUTER
+/datum/sprite_accessory/facial_hair/vulp_swift
+ name = "Swift"
+ icon = 'icons/mob/human_face_vr.dmi'
+ icon_state = "vulp_facial_swift"
+ species_allowed = list(SPECIES_VULPKANIN)
+ gender = NEUTER
/*
////////////////////////////
diff --git a/code/modules/overmap/disperser/disperser_console.dm b/code/modules/overmap/disperser/disperser_console.dm
index 5f97785341..cb2a8cea32 100644
--- a/code/modules/overmap/disperser/disperser_console.dm
+++ b/code/modules/overmap/disperser/disperser_console.dm
@@ -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)
diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm
deleted file mode 100644
index 32f213f95f..0000000000
--- a/code/modules/power/generator_type2.dm
+++ /dev/null
@@ -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 = "Thermo-Electric Generator
"
-
- t += "Output : [round(lastgen)] W
"
-
- t += "Cold loop
"
- t += "Temperature: [round(input1.air_contents.temperature, 0.1)] K
"
- t += "Pressure: [round(input1.air_contents.return_pressure(), 0.1)] kPa
"
-
- t += "Hot loop
"
- t += "Temperature: [round(input2.air_contents.temperature, 0.1)] K
"
- t += "Pressure: [round(input2.air_contents.return_pressure(), 0.1)] kPa
"
-
- t += "
Close"
-
- t += "
"
- 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()
\ No newline at end of file
diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm
index 22f6ea9511..31e5fb7bc2 100644
--- a/code/modules/reagents/reactions/instant/instant_vr.dm
+++ b/code/modules/reagents/reactions/instant/instant_vr.dm
@@ -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("The solution begins to vibrate violently!"), 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("The reaction begins to rapidly sizzle and swell outwards!"), 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("The slime core fizzles disappointingly."), 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("The solution begins to vibrate violently!"), 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("The reaction begins to rapidly sizzle and swell outwards!"), 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("The slime core fizzles disappointingly."), 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(" The contents of the slime core harden and begin to emit a warm, bright light."), 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(" The contents of the slime core harden and begin to emit a warm, bright light."), 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("The slime extract begins to vibrate violently!"), 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, " You suddenly feel a chill!")
-
-
+/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("The slime extract begins to vibrate violently!"), 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, " You suddenly feel a chill!")
/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("The slime extract begins to vibrate violently!"), 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("The slime extract begins to vibrate violently!"), 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, "A wave of energy suddenly invigorates you.")
- 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, "A wave of energy suddenly invigorates you.")
+ 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"
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index c3e2ea92f1..05f7f28a0d 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -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 = "TagMaster 2.3
"
-
- dat += ""
- for(var/i = 1, i <= GLOB.tagger_locations.len, i++)
- dat += "| [GLOB.tagger_locations[i]] | "
-
- if (i%4==0)
- dat += "
"
-
- dat += "
Current Selection: [currTag ? currTag : "None"]"
-
- 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)
diff --git a/code/modules/resleeving/infomorph_software.dm b/code/modules/resleeving/infomorph_software.dm
index 67a2bd47f9..34f9c4ddd4 100644
--- a/code/modules/resleeving/infomorph_software.dm
+++ b/code/modules/resleeving/infomorph_software.dm
@@ -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
diff --git a/code/modules/rogueminer_vr/asteroid.dm b/code/modules/rogueminer_vr/asteroid.dm
index d1e046cfb1..c056eae02f 100644
--- a/code/modules/rogueminer_vr/asteroid.dm
+++ b/code/modules/rogueminer_vr/asteroid.dm
@@ -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.
diff --git a/code/modules/rogueminer_vr/zone_console.dm b/code/modules/rogueminer_vr/zone_console.dm
index 56544479a3..4854227561 100644
--- a/code/modules/rogueminer_vr/zone_console.dm
+++ b/code/modules/rogueminer_vr/zone_console.dm
@@ -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 = {"Getting Started
diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm
index 1d3fbda3e7..40efd55ba1 100644
--- a/code/modules/scripting/Implementations/Telecomms.dm
+++ b/code/modules/scripting/Implementations/Telecomms.dm
@@ -224,31 +224,6 @@
return S.memory[address]
else
-<<<<<<< HEAD
- newsign.data["name"] = "[html_encode(uppertext(source))]"
- 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)
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index cfefd5ce5c..3f5d113289 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -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(
diff --git a/code/modules/virus2/effect_vr.dm b/code/modules/virus2/effect_vr.dm
index 39155ea0fa..eee9d2da8a 100644
--- a/code/modules/virus2/effect_vr.dm
+++ b/code/modules/virus2/effect_vr.dm
@@ -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),"[mob.name] struggles violently against their restraints!")
- else
- to_chat(viewers(mob),"[mob.name] spins around violently!")
- 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),"[mob.name] struggles violently against their restraints!")
+ else
+ to_chat(viewers(mob),"[mob.name] spins around violently!")
+ 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),"[mob.name] suddenly changes size!")
+/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),"[mob.name] suddenly changes size!")
/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),"[mob.name] does a backflip!")
- 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),"[mob.name] does a backflip!")
+ mob.SpinAnimation(7,1)
diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm
index b718453f2e..3c20b5dd6a 100644
--- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm
@@ -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
diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
index bdacd1e728..ff97eb7cd8 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
@@ -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, "...The faceplate is clearly not made for your anatomy, thus, does not fit.")
- 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, "...The faceplate is clearly not made for your anatomy, thus, does not fit.")
+ 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, "This suit is not designed for you.")
- 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, "This suit is not designed for you.")
+ return 0
//Zigfe:Zaoozaoo Xrimxuqmqixzix
/obj/item/clothing/head/fluff/zao
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index 8ba4a14b3a..cf351754da 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -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"
diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm
index 8dc575ce20..3c7e5b7089 100644
--- a/code/modules/vore/resizing/resize_vr.dm
+++ b/code/modules/vore/resizing/resize_vr.dm
@@ -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)
diff --git a/maps/tether/tether_areas.dm b/maps/tether/tether_areas.dm
index 14b9011658..b1e2b53c35 100644
--- a/maps/tether/tether_areas.dm
+++ b/maps/tether/tether_areas.dm
@@ -1490,7 +1490,7 @@
name = "\improper Mining Outpost Shuttle - Station"
ambience = AMBIENCE_HANGAR
sound_env = LARGE_ENCLOSED
-area/shuttle/mining_outpost/shuttle
+/area/shuttle/mining_outpost/shuttle
name = "\improper Mining Outpost Shuttle"
icon_state = "shuttle2"
// Elevator area //
diff --git a/maps/tether/tether_phoronlock.dm b/maps/tether/tether_phoronlock.dm
index 3afc89ebce..88a4191f8a 100644
--- a/maps/tether/tether_phoronlock.dm
+++ b/maps/tether/tether_phoronlock.dm
@@ -13,13 +13,13 @@
// Pumps: (obj/machinery/atmospherics/unary/vent_pump/high_volume), frequency = 1379 id_tag = "[base]_pump"
//
-obj/machinery/airlock_sensor/phoron
+/obj/machinery/airlock_sensor/phoron
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_sensor_off"
name = "phoronlock sensor"
var/previousPhoron
-obj/machinery/airlock_sensor/phoron/process()
+/obj/machinery/airlock_sensor/phoron/process()
if(on)
var/datum/gas_mixture/air_sample = return_air()
var/pressure = round(air_sample.return_pressure(), 0.1)
@@ -38,10 +38,10 @@ obj/machinery/airlock_sensor/phoron/process()
alert = (pressure < ONE_ATMOSPHERE*0.8) || (phoron > 0.5)
update_icon()
-obj/machinery/airlock_sensor/phoron/airlock_interior
+/obj/machinery/airlock_sensor/phoron/airlock_interior
command = "cycle_interior"
-obj/machinery/airlock_sensor/phoron/airlock_exterior
+/obj/machinery/airlock_sensor/phoron/airlock_exterior
command = "cycle_exterior"
@@ -121,7 +121,7 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
/obj/machinery/embedded_controller/radio/airlock/phoron/Initialize()
. = ..()
- program = new/datum/computer/file/embedded_program/airlock/phoron(src)
+ program = new/datum/embedded_program/airlock/phoron(src)
//Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks
/obj/machinery/embedded_controller/radio/airlock/phoron
@@ -143,7 +143,7 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
//
//Handles the control of airlocks
-
+// Airlocks
#define STATE_IDLE 0
#define STATE_PREPARE 1
#define STATE_CLEAN 16
@@ -153,10 +153,10 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
#define TARGET_INOPEN -1
#define TARGET_OUTOPEN -2
-/datum/computer/file/embedded_program/airlock/phoron
+/datum/embedded_program/airlock/phoron
var/tag_scrubber
-/datum/computer/file/embedded_program/airlock/phoron/New(var/obj/machinery/embedded_controller/M)
+/datum/embedded_program/airlock/phoron/New(var/obj/machinery/embedded_controller/M)
..(M)
memory["chamber_sensor_phoron"] = 0
memory["external_sensor_pressure"] = VIRGO3B_ONE_ATMOSPHERE
@@ -170,7 +170,7 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
var/obj/machinery/embedded_controller/radio/airlock/phoron/controller = M
tag_scrubber = controller.tag_scrubber ? controller.tag_scrubber : "[id_tag]_scrubber"
-/datum/computer/file/embedded_program/airlock/phoron/receive_signal(datum/signal/signal, receive_method, receive_param)
+/datum/embedded_program/airlock/phoron/receive_signal(datum/signal/signal, receive_method, receive_param)
var/receive_tag = signal.data["tag"]
if(!receive_tag) return
if(..()) return 1
@@ -194,7 +194,7 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
// Note: This code doesn't wait for pumps and scrubbers to be offline like other code does
// The idea is to make the doors open and close faster, since there isn't much harm really.
// But lets evaluate how it actually works in the game.
-/datum/computer/file/embedded_program/airlock/phoron/process()
+/datum/embedded_program/airlock/phoron/process()
switch(state)
if(STATE_IDLE)
if(target_state == TARGET_INOPEN)
@@ -257,13 +257,13 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
memory["processing"] = (state != target_state)
return 1
-/datum/computer/file/embedded_program/airlock/phoron/stop_cycling()
+/datum/embedded_program/airlock/phoron/stop_cycling()
state = STATE_IDLE
target_state = TARGET_NONE
signalPump(tag_airpump, 0)
signalScrubber(tag_scrubber, 0)
-/datum/computer/file/embedded_program/airlock/phoron/proc/signalScrubber(var/tag, var/power)
+/datum/embedded_program/airlock/phoron/proc/signalScrubber(var/tag, var/power)
var/datum/signal/signal = new
signal.data = list(
"tag" = tag,
@@ -271,13 +271,3 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior
"power" = "[power]",
)
post_signal(signal)
-
-
-#undef STATE_IDLE
-#undef STATE_PREPARE
-#undef STATE_CLEAN
-#undef STATE_PRESSURIZE
-
-#undef TARGET_NONE
-#undef TARGET_INOPEN
-#undef TARGET_OUTOPEN
diff --git a/vorestation.dme b/vorestation.dme
index a3ceb1519f..d101420c68 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -87,7 +87,6 @@
#include "code\__defines\sqlite_defines.dm"
#include "code\__defines\stat_tracking.dm"
#include "code\__defines\subsystems.dm"
-#include "code\__defines\subsystems_vr.dm"
#include "code\__defines\supply.dm"
#include "code\__defines\targeting.dm"
#include "code\__defines\tgs.config.dm"
@@ -206,11 +205,8 @@
#include "code\ATMOSPHERICS\components\binary_devices\circulator.dm"
#include "code\ATMOSPHERICS\components\binary_devices\dp_vent_pump.dm"
#include "code\ATMOSPHERICS\components\binary_devices\passive_gate.dm"
-<<<<<<< HEAD:vorestation.dme
#include "code\ATMOSPHERICS\components\binary_devices\passive_gate_vr.dm"
#include "code\ATMOSPHERICS\components\binary_devices\pipeturbine.dm"
-=======
->>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150):polaris.dme
#include "code\ATMOSPHERICS\components\binary_devices\pump.dm"
#include "code\ATMOSPHERICS\components\binary_devices\volume_pump.dm"
#include "code\ATMOSPHERICS\components\omni_devices\_omni_extras.dm"
@@ -1742,10 +1738,7 @@
#include "code\modules\ai\interfaces.dm"
#include "code\modules\ai\say_list.dm"
#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm"
-<<<<<<< HEAD:vorestation.dme
#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai_vr.dm"
-=======
->>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150):polaris.dme
#include "code\modules\ai\ai_holder_subtypes\slime_xenobio_ai.dm"
#include "code\modules\alarm\alarm.dm"
#include "code\modules\alarm\alarm_handler.dm"
@@ -3096,7 +3089,6 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\mobs_monsters\clowns\honkelemental.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\mobs_monsters\clowns\regularclowns.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\morph\morph.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\_defines.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_objects.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_procs.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\shadekin.dm"
@@ -3362,12 +3354,7 @@
#include "code\modules\power\cell.dm"
#include "code\modules\power\debug_items.dm"
#include "code\modules\power\generator.dm"
-<<<<<<< HEAD:vorestation.dme
-#include "code\modules\power\generator_type2.dm"
#include "code\modules\power\gravitygenerator_vr.dm"
-=======
-#include "code\modules\power\gravitygenerator.dm"
->>>>>>> 593246b... Linter diagnostics + bans non-var relative pathing (#8150):polaris.dme
#include "code\modules\power\grid_checker.dm"
#include "code\modules\power\lighting.dm"
#include "code\modules\power\lighting_vr.dm"