[ailment.name] | "
var/list/ailment_cures = list()
diff --git a/code/modules/organs/ailments/ailments_medical.dm b/code/modules/organs/ailments/ailments_medical.dm
index 4cf930ac0f9..c9d3dad9751 100644
--- a/code/modules/organs/ailments/ailments_medical.dm
+++ b/code/modules/organs/ailments/ailments_medical.dm
@@ -1,5 +1,5 @@
/datum/ailment/head
- category = /datum/ailment/head
+ abstract_type = /datum/ailment/head
applies_to_organ = list(BP_HEAD)
/datum/ailment/head/headache
diff --git a/code/modules/organs/ailments/faults/_fault.dm b/code/modules/organs/ailments/faults/_fault.dm
index 8219540a8dc..52a9b747a84 100644
--- a/code/modules/organs/ailments/faults/_fault.dm
+++ b/code/modules/organs/ailments/faults/_fault.dm
@@ -1,7 +1,7 @@
/datum/ailment/fault
applies_to_robotics = TRUE
applies_to_prosthetics = TRUE
- category = /datum/ailment/fault
+ abstract_type = /datum/ailment/fault
treated_by_item_type = list(
/obj/item/stack/nanopaste,
/obj/item/stack/tape_roll/duct_tape
diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm
index 57bf6892044..35f3e0bbe61 100644
--- a/code/modules/organs/external/_external.dm
+++ b/code/modules/organs/external/_external.dm
@@ -62,7 +62,7 @@
var/artery_name = "artery" // Flavour text for cartoid artery, aorta, etc.
var/arterial_bleed_severity = 1 // Multiplier for bleeding in a limb.
var/tendon_name = "tendon" // Flavour text for Achilles tendon, etc.
- var/cavity_name = "cavity"
+ var/cavity_name = "intramuscular cavity"
// Surgery vars.
var/cavity_max_w_class = ITEM_SIZE_TINY //this is increased if bigger organs spawn by default inside
@@ -70,8 +70,6 @@
var/stage = 0
var/cavity = 0
- var/list/unarmed_attacks
-
var/atom/movable/applied_pressure
var/atom/movable/splinted
@@ -141,10 +139,6 @@
_icon_cache_key = null
. = ..()
skin_blend = bodytype.limb_blend
- for(var/attack_type in species.unarmed_attacks)
- var/decl/natural_attack/attack = GET_DECL(attack_type)
- if(istype(attack) && (organ_tag in attack.usable_with_limbs))
- LAZYADD(unarmed_attacks, attack_type)
update_icon()
/obj/item/organ/external/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE)
@@ -259,7 +253,7 @@
if(connecting_limb.organ_tag == parent_organ)
if(length(connecting_limb.children))
- to_chat(usr, SPAN_WARNING("You cannot connect additional limbs to \the [connecting_limb]."))
+ to_chat(user, SPAN_WARNING("You cannot connect additional limbs to \the [connecting_limb]."))
return TRUE
var/mob/holder = loc
@@ -282,7 +276,7 @@
else if(connecting_limb.parent_organ == organ_tag)
if(LAZYLEN(children))
- to_chat(usr, SPAN_WARNING("You cannot connect additional limbs to \the [src]."))
+ to_chat(user, SPAN_WARNING("You cannot connect additional limbs to \the [src]."))
return TRUE
if(!user.try_unequip(connecting_limb, src))
@@ -318,7 +312,7 @@
//Handles removing internal organs/implants/items still in the detached limb.
/obj/item/organ/external/proc/try_remove_internal_item(var/obj/item/used_item, var/mob/user)
- if(stage == 0 && used_item.sharp)
+ if(stage == 0 && used_item.is_sharp())
user.visible_message(SPAN_NOTICE("\The [user] cuts \the [src] open with \the [used_item]."))
stage++
return TRUE
@@ -328,7 +322,7 @@
stage++
return TRUE
- if(stage == 2 && (used_item.sharp || IS_HEMOSTAT(used_item) || IS_WIRECUTTER(used_item)))
+ if(stage == 2 && (used_item.is_sharp() || IS_HEMOSTAT(used_item) || IS_WIRECUTTER(used_item)))
var/list/radial_buttons = make_item_radial_menu_choices(get_contents_recursive())
if(LAZYLEN(radial_buttons))
var/obj/item/removing = show_radial_menu(user, src, radial_buttons, radius = 42, require_near = TRUE, use_labels = RADIAL_LABELS_OFFSET, check_locs = list(src))
@@ -1588,14 +1582,13 @@ Note that amputating the affected organ does in fact remove the infection from t
butchery_decl.place_products(owner, butchery_decl.bone_material, 1, butchery_decl.bone_type)
return ..()
-// This likely seems excessive, but refer to organ explosion_act() to see how it should be handled before reaching this point.
/obj/item/organ/external/physically_destroyed(skip_qdel)
if(!owner)
return ..()
if(limb_flags & ORGAN_FLAG_CAN_AMPUTATE)
- dismember(FALSE, DISMEMBER_METHOD_BLUNT)
+ dismember(FALSE, DISMEMBER_METHOD_BLUNT) // This will also destroy the mob if it removes the last non-core limb.
else
- owner.gib()
+ owner.physically_destroyed() // Previously gib(), but that caused blood and guts to fly everywhere.
/obj/item/organ/external/is_vital_to_owner()
if(isnull(vital_to_owner))
diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm
index d1c38e68b5b..0d185bbe9ae 100644
--- a/code/modules/organs/external/_external_damage.dm
+++ b/code/modules/organs/external/_external_damage.dm
@@ -89,7 +89,7 @@
if(laser)
created_wound = createwound(LASER, burn)
if(prob(40))
- owner.IgniteMob()
+ owner.ignite_fire()
else
created_wound = createwound(BURN, burn)
diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm
index ed9e9140734..8f9b601a8c5 100644
--- a/code/modules/organs/external/_external_icons.dm
+++ b/code/modules/organs/external/_external_icons.dm
@@ -21,19 +21,20 @@ var/global/list/limb_icon_cache = list()
/obj/item/organ/external/proc/get_surgery_overlay_icon()
if(limb_flags & ORGAN_FLAG_SKELETAL)
return null
- if(BP_IS_PROSTHETIC(src))
- return null
- return species?.get_surgery_overlay_icon(owner)
+ return bodytype?.get_surgery_overlay_icon(owner)
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/human/human)
_icon_cache_key = null
skin_tone = null
skin_colour = null
+ var/decl/bodytype/icon_bodytype = get_organ_appearance_bodytype()
+ if(!icon_bodytype)
+ return
// This used to do a bodytype set but that was *really really bad.* Things that need that should do it themselves.
- skin_blend = bodytype.limb_blend
- if(!isnull(human.skin_tone) && bodytype?.appearance_flags & HAS_A_SKIN_TONE)
+ skin_blend = icon_bodytype.limb_blend
+ if(!isnull(human.skin_tone) && (icon_bodytype.appearance_flags & HAS_A_SKIN_TONE))
skin_tone = human.skin_tone
- if(bodytype.appearance_flags & HAS_SKIN_COLOR)
+ if(icon_bodytype.appearance_flags & HAS_SKIN_COLOR)
skin_colour = human.get_skin_colour()
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/human/human)
@@ -48,21 +49,34 @@ var/global/list/limb_icon_cache = list()
addtimer(CALLBACK(last_owner, TYPE_PROC_REF(/mob, update_hair)), 1, TIMER_UNIQUE)
return ..()
+/obj/item/organ/external/set_organ_appearance_bodytype(decl/bodytype/new_bodytype, update_sprite_accessories = TRUE, skip_owner_update = FALSE)
+ . = ..()
+ if(.)
+ if(update_sprite_accessories)
+ sanitize_sprite_accessories(skip_update = TRUE)
+ _icon_cache_key = null
+ get_icon_for_bodytype()
+ update_icon()
+ if(owner && !skip_owner_update)
+ owner.update_body()
+
/obj/item/organ/external/proc/update_limb_icon_file()
- if(!bodytype) // This should not happen.
+ var/decl/bodytype/icon_bodytype = get_organ_appearance_bodytype()
+ if(!icon_bodytype) // This should not happen.
icon = initial(icon)
else if(limb_flags & ORGAN_FLAG_SKELETAL)
- icon = bodytype.get_skeletal_icon(owner)
+ icon = icon_bodytype.get_skeletal_icon(owner)
else if(!BP_IS_PROSTHETIC(src) && (status & ORGAN_MUTATED))
- icon = bodytype.get_base_icon(owner, get_deform = TRUE)
+ icon = icon_bodytype.get_base_icon(owner, get_deform = TRUE)
else
- icon = bodytype.get_base_icon(owner)
+ icon = icon_bodytype.get_base_icon(owner)
var/global/list/organ_icon_cache = list()
/obj/item/organ/external/proc/generate_mob_icon()
// Generate base icon with colour and tone.
- var/icon/ret = bodytype.apply_limb_colouration(src, new /icon(icon, icon_state))
+ var/decl/bodytype/icon_bodytype = get_organ_appearance_bodytype()
+ var/icon/ret = icon_bodytype.apply_limb_colouration(src, new /icon(icon, icon_state))
if(limb_flags & ORGAN_FLAG_SKELETAL)
global.organ_icon_cache[_icon_cache_key] = ret
return ret
@@ -77,7 +91,7 @@ var/global/list/organ_icon_cache = list()
else
ret.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT)
- if((bodytype.appearance_flags & HAS_SKIN_COLOR) && skin_colour)
+ if((icon_bodytype.appearance_flags & HAS_SKIN_COLOR) && skin_colour)
ret.Blend(skin_colour, skin_blend)
// Body markings, hair, lips, etc.
@@ -113,7 +127,7 @@ var/global/list/organ_icon_cache = list()
/obj/item/organ/external/proc/get_icon_cache_key_components()
- . = list("[icon_state]_[species.name]_[bodytype?.name || "BAD_BODYTYPE"]_[render_alpha]_[icon]")
+ . = list("[icon_state]_[species.name]_[get_organ_appearance_bodytype()?.uid || "BAD_BODYTYPE"]_[render_alpha]_[icon]")
// Skeletons don't care about most icon appearance stuff.
if(limb_flags & ORGAN_FLAG_SKELETAL)
@@ -193,7 +207,7 @@ var/global/list/organ_icon_cache = list()
var/list/refresh_accessories
if(accessory_metadata)
- if(!accessory_decl.accessory_is_available(owner, species, bodytype, (owner ? owner.get_traits() : FALSE)))
+ if(!accessory_decl.accessory_is_available(owner, species, get_organ_appearance_bodytype(), (owner ? owner.get_traits() : FALSE)))
return FALSE
var/list/existing_metadata = LAZYACCESS(accessories, accessory_type)
if(same_entries(existing_metadata, accessory_metadata))
@@ -326,9 +340,10 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888"
var/image/temp = image(limb_icon_cache[cache_key])
if(species)
// Calculate the required colour matrix.
- var/r = 0.30 * bodytype.health_hud_intensity
- var/g = 0.59 * bodytype.health_hud_intensity
- var/b = 0.11 * bodytype.health_hud_intensity
+ var/hud_intensity = get_organ_appearance_bodytype()?.health_hud_intensity || 1
+ var/r = 0.30 * hud_intensity
+ var/g = 0.59 * hud_intensity
+ var/b = 0.11 * hud_intensity
temp.color = list(r, r, r, g, g, g, b, b, b)
temp.pixel_x = owner.default_pixel_x
temp.pixel_y = owner.default_pixel_y
@@ -363,7 +378,7 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888"
if(ispath(accessory_style))
accessory_style = GET_DECL(accessory_style)
// Check if this style is permitted for this species, period.
- if(!istype(accessory_style) || !accessory_style?.accessory_is_available(owner, species, bodytype, (owner ? owner.get_traits() : FALSE)))
+ if(!istype(accessory_style) || !accessory_style?.accessory_is_available(owner, species, get_organ_appearance_bodytype(), (owner ? owner.get_traits() : FALSE)))
return null
// Check if we are concealed (long hair under a hat for example).
if(accessory_style.is_hidden(src))
@@ -374,7 +389,7 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888"
for(var/acc_cat in _sprite_accessories)
for(var/accessory in _sprite_accessories[acc_cat])
var/decl/sprite_accessory/accessory_style = GET_DECL(accessory)
- if(!istype(accessory_style) || !accessory_style?.accessory_is_available(owner, species, bodytype, (owner ? owner.get_traits() : FALSE)))
+ if(!istype(accessory_style) || !accessory_style?.accessory_is_available(owner, species, get_organ_appearance_bodytype(), (owner ? owner.get_traits() : FALSE)))
_sprite_accessories[acc_cat] -= accessory
. = TRUE
if(.)
diff --git a/code/modules/organs/external/diagnostics.dm b/code/modules/organs/external/diagnostics.dm
index 2bc96bfa3fc..973c506b9fc 100644
--- a/code/modules/organs/external/diagnostics.dm
+++ b/code/modules/organs/external/diagnostics.dm
@@ -110,6 +110,9 @@
for(var/obj/item/organ/internal/augment/aug in internal_organs)
if(istype(aug) && aug.known)
. += "[capitalize(aug.name)] implanted"
+ var/obj/item/organ/internal/lungs/L = locate() in src
+ if( L && L.is_bruised())
+ . += "Lung ruptured"
/obj/item/organ/external/proc/inspect(mob/user)
diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm
index 1d6b432822c..b16d8919e29 100644
--- a/code/modules/organs/external/head.dm
+++ b/code/modules/organs/external/head.dm
@@ -12,7 +12,7 @@
amputation_point = "neck"
encased = "skull"
artery_name = "carotid artery"
- cavity_name = "cranial"
+ cavity_name = "cranial cavity"
limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE
var/glowing_eyes = FALSE
@@ -20,6 +20,24 @@
var/forehead_graffiti
var/graffiti_style
+/obj/item/organ/external/head/get_natural_attacks()
+ if(!can_intake_reagents)
+ return null
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/bite)
+ return unarmed_attack
+
+/obj/item/organ/external/head/sharp_bite/get_natural_attacks()
+ if(!can_intake_reagents)
+ return null
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/bite/sharp)
+ return unarmed_attack
+
+/obj/item/organ/external/head/strong_bite/get_natural_attacks()
+ if(!can_intake_reagents)
+ return null
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/bite/strong)
+ return unarmed_attack
+
/obj/item/organ/external/head/proc/get_organ_eyes_overlay()
if(!glowing_eyes && !owner?.has_chemical_effect(CE_GLOWINGEYES, 1))
return
diff --git a/code/modules/organs/external/standard.dm b/code/modules/organs/external/standard.dm
index d3ec8d68e7f..3dfa745cdec 100644
--- a/code/modules/organs/external/standard.dm
+++ b/code/modules/organs/external/standard.dm
@@ -17,18 +17,12 @@
parent_organ = null
encased = "ribcage"
artery_name = "aorta"
- cavity_name = "thoracic"
+ cavity_name = "thoracic cavity"
limb_flags = ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/chest/proc/get_current_skin()
return
-/obj/item/organ/external/get_scan_results()
- . = ..()
- var/obj/item/organ/internal/lungs/L = locate() in src
- if( L && L.is_bruised())
- . += "Lung ruptured"
-
/obj/item/organ/external/chest/die()
//Special handling for synthetics
if(BP_IS_PROSTHETIC(src) || BP_IS_CRYSTAL(src))
@@ -47,7 +41,7 @@
amputation_point = "lumbar"
joint = "hip"
artery_name = "iliac artery"
- cavity_name = "abdominal"
+ cavity_name = "abdominal cavity"
limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/groin/die()
@@ -119,6 +113,13 @@
limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_HAS_TENDON | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE
organ_category = ORGAN_CATEGORY_STANCE
+/obj/item/organ/external/foot/get_natural_attacks()
+ var/static/list/unarmed_attacks = list(
+ GET_DECL(/decl/natural_attack/stomp),
+ GET_DECL(/decl/natural_attack/kick)
+ )
+ return unarmed_attacks
+
/obj/item/organ/external/foot/right
organ_tag = BP_R_FOOT
name = "right foot"
@@ -128,6 +129,14 @@
joint = "right ankle"
amputation_point = "right ankle"
+/obj/item/organ/external/foot/avian/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/stomp/weak)
+ return unarmed_attack
+
+/obj/item/organ/external/foot/right/avian/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/stomp/weak)
+ return unarmed_attack
+
/obj/item/organ/external/hand
organ_tag = BP_L_HAND
name = "left hand"
@@ -145,6 +154,10 @@
is_washable = TRUE
var/gripper_type = /datum/inventory_slot/gripper/left_hand
+/obj/item/organ/external/hand/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/punch)
+ return unarmed_attack
+
/obj/item/organ/external/hand/do_install(mob/living/human/target, affected, in_place, update_icon, detached)
. = ..()
if(. && owner && gripper_type)
@@ -164,3 +177,11 @@
joint = "right wrist"
amputation_point = "right wrist"
gripper_type = /datum/inventory_slot/gripper/right_hand
+
+/obj/item/organ/external/hand/clawed/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/claws)
+ return unarmed_attack
+
+/obj/item/organ/external/hand/right/clawed/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/claws)
+ return unarmed_attack
diff --git a/code/modules/organs/external/wounds/wound.dm b/code/modules/organs/external/wounds/wound.dm
index 2c2746cd154..60219be1f1a 100644
--- a/code/modules/organs/external/wounds/wound.dm
+++ b/code/modules/organs/external/wounds/wound.dm
@@ -79,7 +79,7 @@
return 0
return (wound_damage() <= autoheal_cutoff) ? 1 : is_treated()
-// checks whether the wound has been appropriately treated
+/// checks whether the wound has been appropriately treated
/datum/wound/proc/is_treated()
if(!LAZYLEN(embedded_objects))
switch(damage_type)
@@ -88,7 +88,7 @@
if(BURN)
return salved
- // Checks whether other other can be merged into src.
+/// Checks whether other can be merged into src.
/datum/wound/proc/can_merge_wounds(var/datum/wound/other)
if (other.type != src.type) return 0
if (other.current_stage != src.current_stage) return 0
diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm
index ac00fcf30e5..a3ac98d48e2 100644
--- a/code/modules/organs/internal/_internal.dm
+++ b/code/modules/organs/internal/_internal.dm
@@ -56,6 +56,12 @@
affected.cavity_max_w_class = max(affected.cavity_max_w_class, w_class)
affected.update_internal_organs_cost()
+ // This might need revisiting to stop people successfully implanting brains in groins and transferring minds.
+ if(transfer_brainmob_with_organ && istype(owner))
+ var/mob/living/brainmob = get_brainmob(create_if_missing = FALSE)
+ if(brainmob?.key)
+ transfer_key_from_mob_to_mob(brainmob, owner)
+
/obj/item/organ/internal/do_uninstall(in_place, detach, ignore_children, update_icon)
var/mob/living/victim = owner // cleared in parent proc
@@ -171,7 +177,7 @@
// We clamp/round here so that we don't accidentally heal past the threshold and
// cheat our way into a full second threshold of healing.
- damage = clamp(damage-get_organ_heal_amount(), min_heal_val, absolute_max_damage)
+ damage = clamp(damage - max(0, get_organ_heal_amount()), min_heal_val, absolute_max_damage)
// If we're within 1 damage of the nearest threshold (such as 0), round us down.
// This should be removed when float-aware modulo comes in in 515, but for now is needed
@@ -289,11 +295,3 @@
/obj/item/organ/internal/preserve_in_cryopod(var/obj/machinery/cryopod/pod)
var/mob/living/brainmob = get_brainmob()
return brainmob?.key
-
-// This might need revisiting to stop people successfully implanting brains in groins and transferring minds.
-/obj/item/organ/internal/do_install(mob/living/human/target, obj/item/organ/external/affected, in_place, update_icon, detached)
- . = ..()
- if(transfer_brainmob_with_organ && istype(owner))
- var/mob/living/brainmob = get_brainmob(create_if_missing = FALSE)
- if(brainmob?.key)
- transfer_key_from_mob_to_mob(brainmob, owner)
diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm
index 32a4b6e1c2d..c4980c3a303 100644
--- a/code/modules/organs/internal/brain.dm
+++ b/code/modules/organs/internal/brain.dm
@@ -99,13 +99,15 @@
alert(owner, "You have taken massive brain damage! You will not be able to remember the events leading up to your injury.", "Brain Damaged")
/obj/item/organ/internal/brain/organ_can_heal()
- return (damage && owner && GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN)) || ..()
+ return (damage && owner && GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN) > 0) || ..()
/obj/item/organ/internal/brain/has_limited_healing()
- return (!owner || !GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN)) && ..()
+ return (!owner || GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN) <= 0) && ..()
/obj/item/organ/internal/brain/get_organ_heal_amount()
- return 1
+ if(!has_limited_healing())
+ . = 1 // We have full healing, so we always heal at least 1 unit of damage.
+ . += (owner ? GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN) : 0)
/obj/item/organ/internal/brain/Process()
if(owner)
diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm
index f193afaa4da..7dbc75053e6 100644
--- a/code/modules/organs/internal/eyes.dm
+++ b/code/modules/organs/internal/eyes.dm
@@ -36,19 +36,25 @@
verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow
+/obj/item/organ/external/eyes/set_organ_appearance_bodytype(decl/bodytype/new_bodytype, update_sprite_accessories = TRUE, skip_owner_update = FALSE)
+ . = ..()
+ if(. && owner && !skip_owner_update)
+ owner.update_eyes()
+
/obj/item/organ/internal/eyes/proc/get_onhead_icon()
+ var/decl/bodytype/icon_bodytype = get_organ_appearance_bodytype()
var/modifier = owner?.get_overlay_state_modifier()
var/eye_state = modifier ? "eyes[modifier]" : "eyes"
last_cached_eye_colour = eye_colour
- last_eye_cache_key = "[type]-[bodytype.eye_icon]-[last_cached_eye_colour]-[bodytype.eye_offset]-[eye_state]"
- if(!bodytype.eye_icon)
+ last_eye_cache_key = "[type]-[icon_bodytype.eye_icon]-[last_cached_eye_colour]-[icon_bodytype.eye_offset]-[eye_state]"
+ if(!icon_bodytype.eye_icon)
return
if(!global.eye_icon_cache[last_eye_cache_key])
- var/icon/eyes_icon = icon(icon = bodytype.eye_icon, icon_state = eye_state)
- if(bodytype.eye_offset)
- eyes_icon.Shift(NORTH, bodytype.eye_offset)
- if(bodytype.apply_eye_colour)
- eyes_icon.Blend(last_cached_eye_colour, bodytype.eye_blend)
+ var/icon/eyes_icon = icon(icon = icon_bodytype.eye_icon, icon_state = eye_state)
+ if(icon_bodytype.eye_offset)
+ eyes_icon.Shift(NORTH, icon_bodytype.eye_offset)
+ if(icon_bodytype.apply_eye_colour)
+ eyes_icon.Blend(last_cached_eye_colour, icon_bodytype.eye_blend)
global.eye_icon_cache[last_eye_cache_key] = eyes_icon
return global.eye_icon_cache[last_eye_cache_key]
diff --git a/code/modules/organs/internal/species/golem.dm b/code/modules/organs/internal/species/golem.dm
index 93e368c2e64..cbf569bebab 100644
--- a/code/modules/organs/internal/species/golem.dm
+++ b/code/modules/organs/internal/species/golem.dm
@@ -1,8 +1,9 @@
/obj/item/organ/internal/brain/golem
name = "chem"
desc = "A tightly furled roll of paper, covered with indecipherable runes."
- icon = 'icons/obj/wizard.dmi'
+ icon = 'icons/obj/items/paperwork/scroll.dmi'
icon_state = "scroll"
+ color = COLOR_BEIGE
/obj/item/organ/internal/brain/golem/can_recover()
- return 0
+ return FALSE
diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm
index cdc7df2fe4f..cf870f3b64b 100644
--- a/code/modules/organs/internal/stomach.dm
+++ b/code/modules/organs/internal/stomach.dm
@@ -115,7 +115,8 @@
next_cramp = world.time + rand(200,800)
owner.custom_pain("Your stomach cramps agonizingly!",1)
- var/alcohol_volume = REAGENT_VOLUME(ingested, /decl/material/liquid/ethanol)
+ // TODO: check if this even works - it won't be picking up alcohol subtypes.
+ var/alcohol_volume = REAGENT_VOLUME(ingested, /decl/material/liquid/alcohol/ethanol)
var/alcohol_threshold_met = alcohol_volume > STOMACH_VOLUME / 2
if(alcohol_threshold_met && owner.has_genetic_condition(GENE_COND_EPILEPSY) && prob(20))
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index dc2f2b105a1..36d6a3ac531 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -22,6 +22,7 @@
var/mob/living/human/owner // Current mob owning the organ.
var/decl/species/species // Original species.
var/decl/bodytype/bodytype // Original bodytype.
+ var/decl/bodytype/appearance_bodytype // A bodytype used only for icons, marking validation and equipment offsets.
var/list/ailments // Current active ailments if any.
var/meat_name // Taken from first owner.
@@ -37,6 +38,9 @@
/// Set to true if this organ should return info to Stat(). See get_stat_info().
var/has_stat_info
+/obj/item/organ/proc/reset_matter()
+ matter = null
+
/obj/item/organ/Destroy()
if(owner)
owner.remove_organ(src, FALSE, FALSE, TRUE, TRUE, FALSE) //Tell our parent we're unisntalling in place
@@ -141,9 +145,16 @@
max_damage *= bodytype.hardiness
min_broken_damage *= bodytype.hardiness
bodytype.resize_organ(src)
- set_material(override_material || bodytype.material)
- matter = bodytype.matter?.Copy()
+
+ reset_matter()
+ set_material(override_material || bodytype.organ_material)
+ for(var/mat in bodytype.matter)
+ if(mat in matter)
+ matter[mat] += bodytype.matter[mat]
+ else
+ LAZYSET(matter, mat, bodytype.matter[mat])
create_matter()
+
// maybe this should be a generalized repopulate_reagents helper??
if(reagents)
reagents.clear_reagents()
@@ -362,11 +373,11 @@
if (germ_level < INFECTION_LEVEL_ONE)
germ_level = 0 //cure instantly
else if (germ_level < INFECTION_LEVEL_TWO)
- germ_level -= 5 //at germ_level == 500, this should cure the infection in 5 minutes
+ germ_level -= round(5 * antibiotics) //at germ_level == 500, this should cure the infection in 5 minutes
else
- germ_level -= 3 //at germ_level == 1000, this will cure the infection in 10 minutes
+ germ_level -= round(3 * antibiotics) //at germ_level == 1000, this will cure the infection in 10 minutes
if(owner && owner.current_posture.prone)
- germ_level -= 2
+ germ_level -= round(2 * antibiotics)
germ_level = max(0, germ_level)
/obj/item/organ/proc/take_general_damage(var/amount, var/silent = FALSE)
@@ -379,7 +390,7 @@
owner.update_health()
/obj/item/organ/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
- if(BP_IS_PROSTHETIC(src) || !istype(target) || !istype(user) || (user != target && user.a_intent == I_HELP))
+ if(BP_IS_PROSTHETIC(src) || !istype(target) || !istype(user) || (user != target && user.check_intent(I_FLAG_HELP)))
return ..()
if(alert("Do you really want to use this organ as food? It will be useless for anything else afterwards.",,"Ew, no.","Bon appetit!") == "Ew, no.")
@@ -471,9 +482,11 @@
return
var/global/list/ailment_reference_cache = list()
-/proc/get_ailment_reference(var/ailment_type)
+/proc/get_ailment_reference(var/datum/ailment/ailment_type)
if(!ispath(ailment_type, /datum/ailment))
return
+ if(TYPE_IS_ABSTRACT(ailment_type))
+ return
if(!global.ailment_reference_cache[ailment_type])
global.ailment_reference_cache[ailment_type] = new ailment_type
return global.ailment_reference_cache[ailment_type]
@@ -484,7 +497,7 @@ var/global/list/ailment_reference_cache = list()
return .
for(var/ailment_type in subtypesof(/datum/ailment))
var/datum/ailment/ailment = ailment_type
- if(initial(ailment.category) == ailment_type)
+ if(TYPE_IS_ABSTRACT(ailment))
continue
ailment = get_ailment_reference(ailment_type)
if(ailment.can_apply_to(src))
@@ -664,3 +677,16 @@ var/global/list/ailment_reference_cache = list()
new /obj/effect/decal/cleanable/ash(loc)
if(!QDELETED(src))
qdel(src)
+
+// For overriding on shapeshifters/changelings in the future.
+/obj/item/organ/proc/set_organ_appearance_bodytype(decl/bodytype/new_bodytype, update_sprite_accessories = TRUE, skip_owner_update = FALSE)
+ if(ispath(new_bodytype, /decl/bodytype))
+ new_bodytype = GET_DECL(new_bodytype)
+ if((new_bodytype && !istype(new_bodytype)) || appearance_bodytype == new_bodytype || bodytype == new_bodytype)
+ return FALSE
+ appearance_bodytype = new_bodytype
+ return TRUE
+
+/obj/item/organ/proc/get_organ_appearance_bodytype()
+ RETURN_TYPE(/decl/bodytype)
+ return appearance_bodytype || bodytype
diff --git a/code/modules/organs/prosthetics/_prosthetics.dm b/code/modules/organs/organ_prosthetics.dm
similarity index 98%
rename from code/modules/organs/prosthetics/_prosthetics.dm
rename to code/modules/organs/organ_prosthetics.dm
index 03d8abee4ae..a107c79e810 100644
--- a/code/modules/organs/prosthetics/_prosthetics.dm
+++ b/code/modules/organs/organ_prosthetics.dm
@@ -9,7 +9,7 @@
// External organ procs:
// Does this bodypart count as a modular limb, and if so, what kind?
/obj/item/organ/external/proc/get_modular_limb_category()
- return isnull(bodytype.modular_limb_tier) ? MODULAR_BODYPART_INVALID : bodytype.modular_limb_tier
+ return isnull(bodytype?.modular_limb_tier) ? MODULAR_BODYPART_INVALID : bodytype.modular_limb_tier
// Checks if a limb could theoretically be removed.
// Note that this does not currently bother checking if a child or internal organ is vital.
diff --git a/code/modules/overmap/contacts/_contacts.dm b/code/modules/overmap/contacts/_contacts.dm
index e4cab812e76..bde9a41d171 100644
--- a/code/modules/overmap/contacts/_contacts.dm
+++ b/code/modules/overmap/contacts/_contacts.dm
@@ -29,7 +29,6 @@
radar = image(loc = effect, icon = 'icons/obj/overmap.dmi', icon_state = "sensor_range")
radar.color = source.color
- radar.tag = "radar"
radar.add_filter("blur", 1, list(type = "blur", size = 1))
radar.appearance_flags |= RESET_TRANSFORM | KEEP_APART
radar.appearance_flags &= ~PIXEL_SCALE
diff --git a/code/modules/overmap/contacts/contact_sensors.dm b/code/modules/overmap/contacts/contact_sensors.dm
index f6dee900ce4..fcdd349fb07 100644
--- a/code/modules/overmap/contacts/contact_sensors.dm
+++ b/code/modules/overmap/contacts/contact_sensors.dm
@@ -16,6 +16,9 @@
var/obj/effect/overmap/overmap_location = loc
if(overmap_location.requires_contact)
new /datum/overmap_contact(src, overmap_location)
+ if(!contact_datums[linked])
+ var/datum/overmap_contact/record = new(src, linked)
+ record.marker.alpha = 255
/obj/machinery/computer/ship/sensors/Destroy()
objects_in_view.Cut()
@@ -23,12 +26,6 @@
trackers.Cut()
. = ..()
-/obj/machinery/computer/ship/sensors/attempt_hook_up(obj/effect/overmap/visitable/ship/sector)
- . = ..()
- if(. && linked && !contact_datums[linked])
- var/datum/overmap_contact/record = new(src, linked)
- record.marker.alpha = 255
-
/obj/machinery/computer/ship/sensors/proc/reveal_contacts(var/mob/user)
if(user && user.client)
for(var/key in contact_datums)
diff --git a/code/modules/overmap/disperser/disperser_charge.dm b/code/modules/overmap/disperser/disperser_charge.dm
index 895e2955dc0..4ab02455666 100644
--- a/code/modules/overmap/disperser/disperser_charge.dm
+++ b/code/modules/overmap/disperser/disperser_charge.dm
@@ -7,7 +7,7 @@
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/copper = MATTER_AMOUNT_SECONDARY,
- /decl/material/solid/supermatter = MATTER_AMOUNT_TRACE
+ /decl/material/solid/exotic_matter = MATTER_AMOUNT_TRACE
)
var/chargetype
var/chargedesc
diff --git a/code/modules/overmap/internet/internet_uplink.dm b/code/modules/overmap/internet/internet_uplink.dm
index 337e9b07589..cd38e4509fe 100644
--- a/code/modules/overmap/internet/internet_uplink.dm
+++ b/code/modules/overmap/internet/internet_uplink.dm
@@ -181,7 +181,7 @@ var/global/list/internet_uplinks = list()
return ..()
-/obj/machinery/computer/internet_uplink/interface_interact(user)
+/obj/machinery/computer/internet_uplink/interface_interact(mob/user)
var/datum/extension/local_network_member/uplink_comp = get_extension(src, /datum/extension/local_network_member)
var/datum/local_network/lan = uplink_comp.get_local_network()
@@ -193,5 +193,5 @@ var/global/list/internet_uplinks = list()
return FALSE
var/datum/topic_state/remote/R = new(src, linked)
- linked.ui_interact(usr, state = R)
+ linked.ui_interact(user, state = R)
return TRUE
\ No newline at end of file
diff --git a/code/modules/overmap/overmap_shuttle.dm b/code/modules/overmap/overmap_shuttle.dm
index 408db04970a..2a7e5b3fb64 100644
--- a/code/modules/overmap/overmap_shuttle.dm
+++ b/code/modules/overmap/overmap_shuttle.dm
@@ -7,7 +7,7 @@
var/fuel_consumption = 0 //Amount of moles of gas consumed per trip; If zero, then shuttle is magic and does not need fuel
var/list/obj/structure/fuel_port/fuel_ports //the fuel ports of the shuttle (but usually just one)
- category = /datum/shuttle/autodock/overmap
+ abstract_type = /datum/shuttle/autodock/overmap
var/skill_needed = SKILL_BASIC
var/landing_skill_needed = SKILL_EXPERT
var/operator_skill = SKILL_MIN
diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm
index a62b7258705..f7f37fcb346 100644
--- a/code/modules/overmap/ships/computers/engine_control.dm
+++ b/code/modules/overmap/ships/computers/engine_control.dm
@@ -6,6 +6,21 @@
icon_screen = "engines"
var/display_state = "status"
+/// A stub used for modpacks to modify per-ship readout information.
+/// This mutates the UI data list, so it can be used to mask or remove features
+/// as well as to add entirely new ones.
+/// It does not return a value.
+/// While it can access per-engine data, it should be dispreferred for that compared to modify_engine_ui_data().
+/obj/machinery/computer/ship/engines/proc/modify_ship_ui_data(list/ui_data)
+ return
+
+/// A stub used for modpacks to modify per-engine readout information.
+/// This mutates the engine's data list, so it can be used to mask or remove features
+/// as well as to add entirely new ones.
+/// It does not return a value.
+/obj/machinery/computer/ship/engines/proc/modify_engine_ui_data(datum/extension/ship_engine/engine, list/engine_data)
+ return
+
/obj/machinery/computer/ship/engines/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!linked)
display_reconnect_dialog(user, "ship control systems")
@@ -29,17 +44,13 @@
var/thrust = E.get_exhaust_velocity()
total_thrust += thrust
rdata["eng_thrust"] = "[thrust] m/s"
+ modify_engine_ui_data(E, rdata)
enginfo.Add(list(rdata))
data["engines_info"] = enginfo
data["total_thrust"] = "[total_thrust] m/s"
- var/damping_strength = 0
- for(var/datum/ship_inertial_damper/I in linked.inertial_dampers)
- var/obj/machinery/inertial_damper/ID = I.holder
- damping_strength += ID.get_damping_strength(FALSE)
- data["damping_strength"] = damping_strength
- data["needs_dampers"] = linked.needs_dampers
+ modify_ship_ui_data(data)
ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm
index ce08d9c7b59..6543aebddfc 100644
--- a/code/modules/overmap/ships/computers/shuttle.dm
+++ b/code/modules/overmap/ships/computers/shuttle.dm
@@ -42,8 +42,8 @@
if(length(port_choices))
port = input("Choose shuttle docking port:", "Shuttle Docking Port") as null|anything in port_choices
else
- to_chat(usr, SPAN_WARNING("No functional docking ports, defaulting to center-of-mass landing."))
- if(CanInteract(usr, global.default_topic_state) && (port in port_choices))
+ to_chat(user, SPAN_WARNING("No functional docking ports, defaulting to center-of-mass landing."))
+ if(CanInteract(user, global.default_topic_state) && (port in port_choices))
shuttle.set_port(port_choices[port])
if(href_list["pick"])
var/list/possible_d = shuttle.get_possible_destinations()
@@ -51,9 +51,9 @@
if(possible_d.len)
D = input("Choose shuttle destination", "Shuttle Destination") as null|anything in possible_d
else
- to_chat(usr, SPAN_WARNING("No valid landing sites in range."))
+ to_chat(user, SPAN_WARNING("No valid landing sites in range."))
possible_d = shuttle.get_possible_destinations()
- if(CanInteract(usr, global.default_topic_state) && (D in possible_d))
+ if(CanInteract(user, global.default_topic_state) && (D in possible_d))
shuttle.set_destination(possible_d[D])
return TOPIC_REFRESH
if(href_list["manual_landing"])
@@ -68,7 +68,7 @@
else
start_landing(user, shuttle)
return TOPIC_REFRESH
- to_chat(usr, SPAN_WARNING("The manual controls look hopelessly complex to you!"))
+ to_chat(user, SPAN_WARNING("The manual controls look hopelessly complex to you!"))
/obj/machinery/computer/shuttle_control/explore/proc/start_landing(var/mob/user, var/datum/shuttle/autodock/overmap/shuttle)
var/obj/effect/overmap/visitable/current_sector = global.overmap_sectors[num2text(z)]
diff --git a/code/modules/overmap/ships/landable.dm b/code/modules/overmap/ships/landable.dm
index b3cd0154d42..eaeabd18e3a 100644
--- a/code/modules/overmap/ships/landable.dm
+++ b/code/modules/overmap/ships/landable.dm
@@ -231,14 +231,14 @@
if(SHIP_STATUS_LANDED)
var/obj/effect/overmap/visitable/location = loc
if(istype(loc, /obj/effect/overmap/visitable/sector))
- return "Landed on \the [location.name]. Use secondary thrust to get clear before activating primary engines."
+ return "Landed on \the [location]. Use secondary thrust to get clear before activating primary engines."
if(istype(loc, /obj/effect/overmap/visitable/ship))
- return "Docked with \the [location.name]. Use secondary thrust to get clear before activating primary engines."
+ return "Docked with \the [location]. Use secondary thrust to get clear before activating primary engines."
return "Docked with an unknown object."
if(SHIP_STATUS_ENCOUNTER)
var/datum/shuttle/autodock/overmap/child_shuttle = SSshuttle.shuttles[shuttle]
var/obj/effect/overmap/visitable/location = global.overmap_sectors[num2text(child_shuttle.current_location.z)]
- return "Maneuvering nearby \the [location.name]."
+ return "Maneuvering nearby \the [location]."
if(SHIP_STATUS_TRANSIT)
return "Maneuvering under secondary thrust."
if(SHIP_STATUS_OVERMAP)
@@ -324,7 +324,7 @@
port_tag = new_port_tag
. = ..()
-/obj/abstract/local_dock/automatic/modify_mapped_vars(map_hash)
+/obj/abstract/local_dock/modify_mapped_vars(map_hash)
. = ..()
ADJUST_TAG_VAR(port_tag, map_hash)
ADJUST_TAG_VAR(dock_target, map_hash)
diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm
index f4f1a734c88..133c506ffa6 100644
--- a/code/modules/overmap/ships/ship.dm
+++ b/code/modules/overmap/ships/ship.dm
@@ -19,9 +19,6 @@ var/global/const/OVERMAP_SPEED_CONSTANT = (1 SECOND)
var/skill_needed = SKILL_ADEPT //piloting skill needed to steer it without going in random dir
var/operator_skill
- var/needs_dampers = FALSE
- var/list/inertial_dampers = list()
- var/damping_strength = null
var/vessel_size = SHIP_SIZE_LARGE // arbitrary number, affects how likely are we to evade meteors
var/list/navigation_viewers // list of weakrefs to people viewing the overmap via this ship
@@ -85,15 +82,6 @@ var/global/const/OVERMAP_SPEED_CONSTANT = (1 SECOND)
/obj/effect/overmap/visitable/ship/adjust_speed(n_x, n_y)
. = ..()
- var/magnitude = norm(n_x, n_y)
- var/inertia_dir = magnitude >= 0 ? turn(fore_dir, 180) : fore_dir
- var/inertia_strength = magnitude * 1e3
- if(needs_dampers && damping_strength < inertia_strength)
- var/list/areas_by_name = area_repository.get_areas_by_z_level()
- for(var/area_name in areas_by_name)
- var/area/A = areas_by_name[area_name]
- if(area_belongs_to_zlevels(A, map_z))
- A.throw_unbuckled_occupants(inertia_strength+2, inertia_strength, inertia_dir)
for(var/zz in map_z)
if(is_still())
toggle_move_stars(zz)
@@ -119,10 +107,6 @@ var/global/const/OVERMAP_SPEED_CONSTANT = (1 SECOND)
return round(num_burns / burns_per_grid)
/obj/effect/overmap/visitable/ship/Process(wait, tick)
- damping_strength = 0
- for(var/datum/ship_inertial_damper/I in inertial_dampers)
- var/obj/machinery/inertial_damper/ID = I.holder
- damping_strength += ID.get_damping_strength(TRUE)
sensor_visibility = min(round(base_sensor_visibility + get_speed_sensor_increase(), 1), 100)
/obj/effect/overmap/visitable/ship/on_update_icon()
@@ -181,9 +165,6 @@ var/global/const/OVERMAP_SPEED_CONSTANT = (1 SECOND)
for(var/datum/extension/ship_engine/E in global.ship_engines)
if(check_ownership(E.holder))
engines |= E
- for(var/datum/ship_inertial_damper/I in global.ship_inertial_dampers)
- if(check_ownership(I.holder))
- inertial_dampers |= I
var/v_mass = recalculate_vessel_mass()
if(v_mass)
vessel_mass = v_mass
diff --git a/code/modules/overmap/ships/ship_physics.dm b/code/modules/overmap/ships/ship_physics.dm
index 66e85a3f0b9..28e71cf1f5b 100644
--- a/code/modules/overmap/ships/ship_physics.dm
+++ b/code/modules/overmap/ships/ship_physics.dm
@@ -36,31 +36,43 @@
/obj/effect/overmap/visitable/ship/proc/recalculate_vessel_mass()
var/list/zones = list()
+ // for(var/turf/tile in area) is an implied in-world loop
+ // an in-world loop per area is very bad, so instead
+ // we do one in-world loop and check area
+ var/list/areas = list()
+ // create an associative list of area -> TRUE so that lookup is faster
for(var/area/A in get_areas())
-
- // Do not include space please
- if(istype(A, world.area))
+ if(istype(A, world.area)) // exclude the base area
continue
+ areas[A] = TRUE
+ var/start_z = min(map_z)
+ var/end_z = max(map_z)
+ if(!start_z || !end_z)
+ return initial(vessel_mass) // This shouldn't happen ideally so just go with the initial vessel mass
+ for(var/z_level in start_z to end_z)
+ var/datum/level_data/z_data = SSmapping.levels_by_z[z_level]
+ for(var/turf/tile in block(z_data.level_inner_min_x, z_data.level_inner_min_y, z_level, z_data.level_inner_max_x, z_data.level_inner_max_y))
+ var/area/tile_area = tile.loc
+ if(!tile_area || !areas[tile_area])
+ continue
- for(var/turf/T in A)
-
- if(!T.simulated || T.is_open())
+ if(!tile.simulated || tile.is_open())
continue
. += DEFAULT_TURF_MASS
- if(istype(T, /turf/wall))
- var/turf/wall/W = T
- if(W.material)
- . += W.material.weight * 5
- if(W.reinf_material)
- . += W.reinf_material.weight * 5
- if(W.girder_material)
- . += W.girder_material.weight * 5
+ if(istype(tile, /turf/wall))
+ var/turf/wall/wall_tile = tile
+ if(wall_tile.material)
+ . += wall_tile.material.weight * 5
+ if(wall_tile.reinf_material)
+ . += wall_tile.reinf_material.weight * 5
+ if(wall_tile.girder_material)
+ . += wall_tile.girder_material.weight * 5
- if(T.zone)
- zones |= T.zone
+ if(tile.zone)
+ zones[tile.zone] = TRUE // assoc list for fast deduplication
- for(var/atom/movable/C in T)
+ for(var/atom/movable/C as anything in tile) // as anything is safe here since only movables can be in turf contents
if(!C.simulated)
continue
. += C.get_mass()
@@ -69,8 +81,9 @@
continue
. += C2.get_mass()
- for(var/zone/Z in zones)
- . += Z.air.get_mass()
+ // loop over keys of all zones in the list
+ for(var/zone/zone as anything in zones)
+ . += zone.air.get_mass()
// Convert kilograms to metric tonnes.
. = . / 1000
\ No newline at end of file
diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm
index 72eb84cc491..5991f75c6c4 100644
--- a/code/modules/paperwork/carbonpaper.dm
+++ b/code/modules/paperwork/carbonpaper.dm
@@ -54,8 +54,9 @@
// Carbon Paper Alt Interactions
/////////////////////////////////////////////////
/decl/interaction_handler/carbon_paper_remove
- name = "remove carbon-copy"
+ name = "Remove Carbon-Copy"
expected_target_type = /obj/item/paper/carbon
+ examine_desc = "remove the carbon-copy"
/decl/interaction_handler/carbon_paper_remove/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/paper/carbon/paper = target
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 19b2df3bfbe..cd40acd76d9 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -9,7 +9,7 @@
throw_range = 10
slot_flags = SLOT_LOWER_BODY
material_alteration = MAT_FLAG_ALTERATION_COLOR
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
drop_sound = 'sound/foley/tooldrop5.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
@@ -111,7 +111,7 @@
user.set_machine(src)
show_browser(user, dat, "window=[initial(name)]")
onclose(user, initial(name))
- add_fingerprint(usr)
+ add_fingerprint(user)
return
/obj/item/clipboard/proc/add_pen(var/obj/item/I, var/mob/user)
@@ -198,6 +198,7 @@
/decl/interaction_handler/clipboard_remove_pen
name = "Remove Pen"
expected_target_type = /obj/item/clipboard
+ examine_desc = "remove the pen"
/decl/interaction_handler/clipboard_remove_pen/is_possible(atom/target, mob/user, obj/item/prop)
. = ..()
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 1a5bbeb9e74..7aad7aace23 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -716,21 +716,3 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
for(var/uri in global.using_map.map_admin_faxes)
var/list/contact_info = global.using_map.map_admin_faxes[uri]
add_quick_dial_contact(contact_info["name"], uri)
-
-/obj/machinery/faxmachine/get_alt_interactions(mob/user)
- . = ..()
- LAZYADD(., /decl/interaction_handler/fax_remove_card)
-
-/decl/interaction_handler/fax_remove_card
- name = "Remove ID Card"
- expected_target_type = /obj/machinery/faxmachine
-
-/decl/interaction_handler/fax_remove_card/is_possible(atom/target, mob/user, obj/item/prop)
- . = ..()
- if(.)
- var/obj/machinery/faxmachine/fax = target
- return !!(fax.card_reader?.get_inserted())
-
-/decl/interaction_handler/fax_remove_card/invoked(atom/target, mob/user, obj/item/prop)
- var/obj/machinery/faxmachine/fax = target
- fax.eject_card(user)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index e6014e8f4f7..07771782936 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -120,11 +120,11 @@
. += "Details: [record.get_medical_record()]"
return jointext(., " ")
-/obj/structure/filing_cabinet/records/medical
+/obj/structure/filing_cabinet/records/employment
name = "employment record archive"
archive_name = "employment record"
-/obj/structure/filing_cabinet/records/medical/collate_data(var/datum/computer_file/report/crew_record/record)
+/obj/structure/filing_cabinet/records/employment/collate_data(var/datum/computer_file/report/crew_record/record)
. = list()
. += "Name: [record.get_name()]"
. += "Gender: [record.get_gender()]"
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index cdcbe7b3444..a5008f8e225 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -44,7 +44,7 @@
else if(IS_PEN(W))
updateUsrDialog()
- var/n_name = sanitize_safe(input(usr, "What would you like to label the folder?", "Folder Labelling", null) as text, MAX_NAME_LEN)
+ var/n_name = sanitize_safe(input(user, "What would you like to label the folder?", "Folder Labelling", null) as text, MAX_NAME_LEN)
if(!CanPhysicallyInteractWith(user, src))
to_chat(user, SPAN_WARNING("You must stay close to \the [src]."))
return TRUE
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 1de729a2deb..02428e20f70 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -131,7 +131,7 @@
return TRUE
/obj/item/paper/attack_self(mob/user)
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
if(is_crumpled)
user.show_message(SPAN_WARNING("\The [src] is already crumpled."))
return
@@ -332,7 +332,7 @@
var/pen_flags = I.get_tool_property(TOOL_PEN, TOOL_PROP_PEN_FLAG)
var/decl/tool_archetype/pen/parch = GET_DECL(TOOL_PEN)
if(!(pen_flags & PEN_FLAG_ACTIVE))
- parch.toggle_active(usr, I)
+ parch.toggle_active(user, I)
var/iscrayon = pen_flags & PEN_FLAG_CRAYON
var/isfancy = pen_flags & PEN_FLAG_FANCY
@@ -636,6 +636,8 @@ var/global/datum/topic_state/default/paper_state/paper_topic_state = new
/decl/interaction_handler/scroll/furl
name = "Furl Scroll"
+ examine_desc = "furl $TARGET_THEM$"
/decl/interaction_handler/scroll/unfurl
name = "Unfurl Scroll"
+ examine_desc = "unfurl $TARGET_THEM$"
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index bf75bc60846..16a2f1f7ab9 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -40,7 +40,7 @@
// merging bundles
else if(istype(W, /obj/item/paper_bundle) && merge(W, user, cur_page))
- to_chat(user, SPAN_NOTICE("You add \the [W.name] to \the [name]."))
+ to_chat(user, SPAN_NOTICE("You add \the [W] to \the [name]."))
return TRUE
// burning
@@ -517,6 +517,7 @@
/decl/interaction_handler/rename/paper_bundle
name = "Rename Bundle"
expected_target_type = /obj/item/paper_bundle
+ examine_desc = "rename $TARGET_THEM$"
/decl/interaction_handler/rename/paper_bundle/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/paper_bundle/bundle = target
diff --git a/code/modules/paperwork/paper_plane.dm b/code/modules/paperwork/paper_plane.dm
index a5b211bcd54..2e183472066 100644
--- a/code/modules/paperwork/paper_plane.dm
+++ b/code/modules/paperwork/paper_plane.dm
@@ -51,7 +51,7 @@
take_damage(TT.speed * w_class)
/obj/item/paper_plane/attack_self(mob/user)
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
return crumple(user)
return unfold(user)
@@ -77,6 +77,7 @@
/decl/interaction_handler/make_paper_plane
name = "Fold Into Paper Plane"
expected_target_type = /obj/item/paper
+ examine_desc = "make a paper plane"
/decl/interaction_handler/make_paper_plane/is_possible(obj/item/paper/target, mob/user, obj/item/prop)
return ..() && !target.is_crumpled
@@ -91,4 +92,4 @@
/obj/item/paper/get_alt_interactions(mob/user)
. = ..()
- LAZYDISTINCTADD(., /decl/interaction_handler/make_paper_plane)
\ No newline at end of file
+ LAZYADD(., /decl/interaction_handler/make_paper_plane)
\ No newline at end of file
diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm
index de9f83e3fdf..7c7e69565c3 100644
--- a/code/modules/paperwork/paper_sticky.dm
+++ b/code/modules/paperwork/paper_sticky.dm
@@ -60,7 +60,7 @@
. = ..()
/obj/item/sticky_pad/attack_hand(var/mob/user)
- if(user.a_intent == I_GRAB)
+ if(user.check_intent(I_FLAG_GRAB))
return ..()
if(!top)
return TRUE
@@ -84,7 +84,7 @@
/obj/item/sticky_pad/random/Initialize()
. = ..()
- color = pick(COLOR_YELLOW, COLOR_LIME, COLOR_CYAN, COLOR_ORANGE, COLOR_PINK)
+ set_color(pick(COLOR_YELLOW, COLOR_LIME, COLOR_CYAN, COLOR_ORANGE, COLOR_PINK))
////////////////////////////////////////////////
// Sticky Note Sheet
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index e84ba856232..3622d047f5c 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -32,7 +32,7 @@
if(!CanPhysicallyInteract(user))
return FALSE
- if(user.a_intent == I_HURT || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE))
+ if(user.check_intent(I_FLAG_HARM) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE))
return ..()
if(LAZYLEN(papers) < 1 && amount < 1)
@@ -129,7 +129,7 @@
//Dump all stored papers too
for(var/i=1 to amount)
var/obj/item/paper/P = new /obj/item/paper(forced_loc)
- P.merge_with_existing(forced_loc, usr)
+ P.merge_with_existing(forced_loc, user)
LAZYCLEARLIST(papers)
/obj/item/paper_bin/proc/add_paper(var/obj/item/paper/P)
@@ -155,6 +155,7 @@
/decl/interaction_handler/paper_bin_dump_contents
name = "Dump Contents"
expected_target_type = /obj/item/paper_bin
+ examine_desc = "empty $TARGET_THEM$"
/decl/interaction_handler/paper_bin_dump_contents/is_possible(var/obj/item/paper_bin/target, mob/user, obj/item/prop)
return ..() && target.amount > 0
diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm
index ce214205569..a5b56cf128f 100644
--- a/code/modules/paperwork/papershredder.dm
+++ b/code/modules/paperwork/papershredder.dm
@@ -89,7 +89,7 @@
/obj/machinery/papershredder/proc/is_bin_empty()
return !(length(shredder_bin) > 0 && cached_total_matter)
-/obj/machinery/papershredder/proc/can_shred(var/obj/item/I, var/mob/user = null)
+/obj/machinery/papershredder/proc/can_shred_document(var/obj/item/I, var/mob/user = null)
if(!istype(I))
if(user)
to_chat(user, SPAN_WARNING("\The [I] cannot be shredded by \the [src]!"))
@@ -115,12 +115,12 @@
/obj/machinery/papershredder/attackby(var/obj/item/used_item, var/mob/user)
//Silently skip tools, and things we don't have the dexterity to use
if(!has_extension(used_item, /datum/extension/tool) && used_item.user_can_attack_with(user, silent = TRUE))
- var/trying_to_smack = !(used_item.item_flags & ITEM_FLAG_NO_BLUDGEON) && user && user.a_intent == I_HURT
+ var/trying_to_smack = !(used_item.item_flags & ITEM_FLAG_NO_BLUDGEON) && user && user.check_intent(I_FLAG_HARM)
if(used_item.storage)
empty_bin(user, used_item)
return TRUE
- else if(!trying_to_smack && can_shred(used_item))
+ else if(!trying_to_smack && can_shred_document(used_item))
shred(used_item, user)
return TRUE
return ..()
@@ -193,6 +193,7 @@
/decl/interaction_handler/empty/paper_shredder
name = "Empty Bin"
expected_target_type = /obj/machinery/papershredder
+ examine_desc = "empty $TARGET_THEM$"
/decl/interaction_handler/empty/paper_shredder/is_possible(obj/machinery/papershredder/target, mob/user, obj/item/prop)
return ..() && !target.is_bin_empty()
@@ -245,7 +246,7 @@
user.visible_message( \
SPAN_DANGER("\The [user] burns right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap."), \
SPAN_DANGER("You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap."))
- fire_act()
+ fire_act(return_air(), P.get_heat(), 500)
/obj/item/shreddedp/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
SHOULD_CALL_PARENT(FALSE)
diff --git a/code/modules/paperwork/pen/crayon.dm b/code/modules/paperwork/pen/crayon.dm
index b4bfb68c3a9..f06419b8711 100644
--- a/code/modules/paperwork/pen/crayon.dm
+++ b/code/modules/paperwork/pen/crayon.dm
@@ -18,7 +18,7 @@
/obj/item/pen/crayon/Initialize()
. = ..()
if(use_stroke_color)
- color = stroke_color
+ set_color(stroke_color)
/obj/item/pen/crayon/make_pen_description()
desc = "A colourful [stroke_color_name] [istype(material)?"[material.name] ":null][medium_name]. Please refrain from eating it or putting it in your nose."
@@ -33,24 +33,31 @@
return
if(istype(target) && target.is_floor())
- var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter","arrow")
+ var/static/list/drawtypes = list(CRAYON_DRAW_GRAFFITI, CRAYON_DRAW_RUNE, CRAYON_DRAW_LETTER, CRAYON_DRAW_ARROW)
+ var/drawtype = input(user, "Choose what you'd like to draw.", "Crayon scribbles") as null|anything in drawtypes
var/draw_message = "drawing"
switch(drawtype)
- if("letter")
- drawtype = input("Choose the letter.", "Crayon scribbles") in list(global.alphabet)
+ if(CRAYON_DRAW_LETTER)
+ drawtype = input(user, "Choose a letter.", "Crayon scribbles") as null|anything in global.alphabet
draw_message = "drawing a letter"
- if("graffiti")
+ if(CRAYON_DRAW_GRAFFITI)
draw_message = "drawing graffiti"
- if("rune")
+ if(CRAYON_DRAW_RUNE)
draw_message = "drawing a rune"
- if("arrow")
- drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down")
+ if(CRAYON_DRAW_ARROW)
+ var/static/list/arrow_dirs = list("left", "right", "up", "down")
+ drawtype = input(user, "Choose an arrow.", "Crayon scribbles") as null|anything in arrow_dirs
draw_message = "drawing an arrow"
+ if(!drawtype || QDELETED(src) || QDELETED(target) || QDELETED(user) || user.get_active_held_item() != src || !CanPhysicallyInteractWith(user, target))
+ return TRUE
+
if(do_tool_interaction(TOOL_PEN, user, target, 5 SECONDS, draw_message, "drawing on", fuel_expenditure = 1))
- new /obj/effect/decal/cleanable/crayon(target, stroke_color, shade_color, drawtype)
+ var/obj/effect/decal/cleanable/crayon/graffiti = new(target, stroke_color, shade_color, drawtype)
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
- return
+ graffiti.add_fingerprint(user)
+
+ return TRUE
/obj/item/pen/crayon/red
stroke_color = "#da0000"
diff --git a/code/modules/paperwork/pen/fancy.dm b/code/modules/paperwork/pen/fancy.dm
index 9c7e149a7be..098033965e6 100644
--- a/code/modules/paperwork/pen/fancy.dm
+++ b/code/modules/paperwork/pen/fancy.dm
@@ -1,7 +1,7 @@
/obj/item/pen/fancy
name = "fountain pen"
icon = 'icons/obj/items/pens/pen_fancy.dmi'
- sharp = 1 //pointy
+ sharp = TRUE
stroke_color = "#1c1713" //dark ashy brownish
stroke_color_name = "dark ashy brownish"
material = /decl/material/solid/metal/steel
diff --git a/code/modules/paperwork/pen/pen.dm b/code/modules/paperwork/pen/pen.dm
index 6fe193aed26..b11689c5b70 100644
--- a/code/modules/paperwork/pen/pen.dm
+++ b/code/modules/paperwork/pen/pen.dm
@@ -36,7 +36,7 @@
/obj/item/pen/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
- if(user.a_intent == I_HELP && user.get_target_zone() == BP_HEAD)
+ if(user.check_intent(I_FLAG_HELP) && user.get_target_zone() == BP_HEAD)
var/obj/item/organ/external/head/head = target.get_organ(BP_HEAD, /obj/item/organ/external/head)
if(istype(head))
head.write_on(user, "[stroke_color_name] [medium_name]")
diff --git a/code/modules/paperwork/pen/quill_and_ink.dm b/code/modules/paperwork/pen/quill_and_ink.dm
index c9cdf1af927..f643b9d1247 100644
--- a/code/modules/paperwork/pen/quill_and_ink.dm
+++ b/code/modules/paperwork/pen/quill_and_ink.dm
@@ -1,7 +1,7 @@
/obj/item/pen/fancy/quill
name = "quill pen"
icon = 'icons/obj/items/pens/pen_quill.dmi'
- sharp = 0
+ sharp = FALSE
material = /decl/material/solid/organic/skin/feathers
pen_quality = TOOL_QUALITY_DEFAULT
max_uses = 5 // gotta re-ink it often!
@@ -62,6 +62,12 @@
/// The maximum amount of ink in the inkwell when populating reagents.
var/starting_volume_high = 30
+/obj/item/chems/glass/inkwell/get_edible_material_amount(mob/eater)
+ return 0
+
+/obj/item/chems/glass/inkwell/get_utensil_food_type()
+ return null
+
/obj/item/chems/glass/inkwell/can_lid()
return FALSE
diff --git a/code/modules/paperwork/pen/reagent_pen.dm b/code/modules/paperwork/pen/reagent_pen.dm
index 225b070e617..7334323851a 100644
--- a/code/modules/paperwork/pen/reagent_pen.dm
+++ b/code/modules/paperwork/pen/reagent_pen.dm
@@ -1,7 +1,7 @@
/obj/item/pen/reagent
atom_flags = ATOM_FLAG_OPEN_CONTAINER
origin_tech = @'{"materials":2,"esoteric":5}'
- sharp = 1
+ sharp = TRUE
pen_quality = TOOL_QUALITY_MEDIOCRE
/obj/item/pen/reagent/Initialize()
@@ -15,7 +15,7 @@
/obj/item/pen/reagent/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
var/allow = target.can_inject(user, user.get_target_zone())
- if(allow && user.a_intent == I_HELP)
+ if(allow && user.check_intent(I_FLAG_HELP))
if (allow == INJECTION_PORT)
if(target != user)
to_chat(user, SPAN_WARNING("You begin hunting for an injection port on \the [target]'s suit!"))
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 8120330ed10..5d816b92448 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -46,7 +46,7 @@
/obj/machinery/photocopier/Initialize(mapload, d=0, populate_parts = TRUE)
. = ..()
- if(.!= INITIALIZE_HINT_QDEL && populate_parts && printer)
+ if(. != INITIALIZE_HINT_QDEL && populate_parts && printer)
//Mapped photocopiers shall spawn with ink and paper
printer.make_full()
@@ -268,6 +268,7 @@
/decl/interaction_handler/empty/photocopier_paper_bin
name = "Empty Paper Bin"
expected_target_type = /obj/machinery/photocopier
+ examine_desc = "empty $TARGET_THEM$"
/decl/interaction_handler/empty/photocopier_paper_bin/is_possible(obj/machinery/photocopier/target, mob/user, obj/item/prop)
return (target.printer?.get_amount_paper() > 0) && ..()
@@ -288,6 +289,7 @@
/decl/interaction_handler/remove/photocopier_scanner_item
name = "Remove Item From Scanner"
expected_target_type = /obj/machinery/photocopier
+ examine_desc = "remove a loaded item"
/decl/interaction_handler/remove/photocopier_scanner_item/is_possible(obj/machinery/photocopier/target, mob/user, obj/item/prop)
return target.scanner_item && ..()
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index af80b04dadd..eb9bbb76a03 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -128,10 +128,10 @@
/obj/item/photo/interact(mob/user)
send_rsc(user, img, "tmp_photo_[id].png")
+ // todo: remove -ms-interpolation-mode once 516 is required
var/photo_html = {"
[name]
- // todo: remove -ms-interpolation-mode once 516 is required
[scribble ? " Written on the back: [scribble]" : ""]
@@ -398,6 +398,7 @@
icon = 'icons/screen/radial.dmi'
icon_state = "radial_eject"
expected_target_type = /obj/item/camera
+ examine_desc = "eject the film"
/decl/interaction_handler/camera_eject_film/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/camera/camera = target
diff --git a/code/modules/paperwork/printer.dm b/code/modules/paperwork/printer.dm
index 3c7bda42989..0f91439ab58 100644
--- a/code/modules/paperwork/printer.dm
+++ b/code/modules/paperwork/printer.dm
@@ -63,15 +63,13 @@
if(toner)
to_chat(user, SPAN_WARNING("There is already \a [W] in \the [src]!"))
return TRUE
- else
- return insert_toner(W, user)
+ return insert_toner(W, user)
else if(istype(W, /obj/item/paper) || istype(W, /obj/item/paper_bundle))
if(paper_left >= paper_max)
to_chat(user, SPAN_WARNING("There is no more room for paper in \the [src]!"))
return TRUE
- else
- return insert_paper(W, user)
+ return insert_paper(W, user)
. = ..()
/obj/item/stock_parts/printer/attack_hand(mob/user)
@@ -425,6 +423,7 @@
/decl/interaction_handler/empty/stock_parts_printer
name = "Empty Paper Bin"
expected_target_type = /obj/item/stock_parts/printer
+ examine_desc = "empty $TARGET_THEM$"
/decl/interaction_handler/empty/stock_parts_printer/is_possible(obj/item/stock_parts/printer/target, mob/user, obj/item/prop)
return (target.get_amount_paper() > 0) && ..()
diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm
index ed62d878dfc..0bd85389b6f 100644
--- a/code/modules/persistence/graffiti.dm
+++ b/code/modules/persistence/graffiti.dm
@@ -14,10 +14,10 @@
var/author = "unknown"
/obj/effect/decal/writing/Initialize(mapload, var/_age, var/_message, var/_author)
- var/list/random_icon_states = icon_states(icon)
+ var/list/random_icon_states = get_states_in_icon(icon)
for(var/obj/effect/decal/writing/W in loc)
- random_icon_states.Remove(W.icon_state)
- if(random_icon_states.len)
+ random_icon_states -= W.icon_state
+ if(length(random_icon_states))
icon_state = pick(random_icon_states)
SSpersistence.track_value(src, /decl/persistence_handler/graffiti)
. = ..(mapload)
@@ -43,7 +43,7 @@
user.visible_message(SPAN_NOTICE("\The [user] clears away some graffiti."))
qdel(src)
return TRUE
- else if(thing.sharp && user.a_intent != I_HELP) //Check intent so you don't go insane trying to unscrew a light fixture over a graffiti
+ else if(thing.is_sharp() && !user.check_intent(I_FLAG_HELP)) //Check intent so you don't go insane trying to unscrew a light fixture over a graffiti
if(jobban_isbanned(user, "Graffiti"))
to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds."))
return TRUE
diff --git a/code/modules/persistence/noticeboards.dm b/code/modules/persistence/noticeboards.dm
index 2d0a65a2801..d0b5af670da 100644
--- a/code/modules/persistence/noticeboards.dm
+++ b/code/modules/persistence/noticeboards.dm
@@ -9,7 +9,7 @@
tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
directional_offset = @'{"SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}'
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
var/tmp/max_notices = 5
var/list/notices
@@ -82,7 +82,7 @@
return TRUE
/obj/structure/noticeboard/attack_hand(var/mob/user)
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
return ..()
interact(user)
return TRUE
diff --git a/code/modules/persistence/persistence_datum.dm b/code/modules/persistence/persistence_datum.dm
index fc2a819e8b2..027081f7949 100644
--- a/code/modules/persistence/persistence_datum.dm
+++ b/code/modules/persistence/persistence_datum.dm
@@ -12,10 +12,6 @@
var/ignore_area_flags = FALSE // Set to TRUE to skip area flag checks such as nonpersistent areas.
var/ignore_invalid_loc = FALSE // Set to TRUE to skip checking for a non-null station turf for the entry.
-/decl/persistence_handler/Initialize()
- SetFilename()
- . = ..()
-
/decl/persistence_handler/proc/SetFilename()
if(name)
filename = "data/persistent/[ckey(global.using_map.name)]-[ckey(name)].json"
@@ -30,14 +26,16 @@
return TRUE
/decl/persistence_handler/proc/CheckTokenSanity(var/list/tokens)
- return ( \
- islist(tokens) && \
- !isnull(tokens["x"]) && \
- !isnull(tokens["y"]) && \
- !isnull(tokens["z"]) && \
- !isnull(tokens["age"]) && \
- tokens["age"] <= entries_expire_at \
- )
+ if(!islist(tokens))
+ return FALSE
+ if(isnull(tokens["x"]) || isnull(tokens["y"]) || isnull(tokens["z"]))
+ return FALSE
+ if(!isnull(entries_expire_at))
+ if(isnull(tokens["age"]))
+ return FALSE
+ if(tokens["age"] > entries_expire_at)
+ return FALSE
+ return TRUE
/decl/persistence_handler/proc/CreateEntryInstance(var/turf/creating, var/list/tokens)
return
@@ -65,7 +63,7 @@
. = GetValidTurf(locate(tokens["x"], tokens["y"], tokens["z"]), tokens)
if(.)
- CreateEntryInstance(., tokens)
+ . = CreateEntryInstance(., tokens)
/decl/persistence_handler/proc/IsValidEntry(var/atom/entry)
if(!istype(entry))
@@ -92,10 +90,12 @@
.["age"] = GetEntryAge(entry)
/decl/persistence_handler/proc/FinalizeTokens(var/list/tokens)
- . = tokens
+ . = tokens || list()
/decl/persistence_handler/Initialize()
+ SetFilename()
+
. = ..()
if(!fexists(filename))
diff --git a/code/modules/persistence/persistence_datum_book.dm b/code/modules/persistence/persistence_datum_book.dm
index e55a5cc9427..cf33c5df07d 100644
--- a/code/modules/persistence/persistence_datum_book.dm
+++ b/code/modules/persistence/persistence_datum_book.dm
@@ -5,7 +5,14 @@
ignore_invalid_loc = TRUE
/decl/persistence_handler/book/CreateEntryInstance(var/turf/creating, var/list/tokens)
- var/obj/item/book/book = new(creating)
+
+ var/book_type = tokens["book_type"]
+ if(book_type)
+ book_type = text2path(book_type)
+ if(!ispath(book_type))
+ book_type = /obj/item/book
+
+ var/obj/item/book/book = new book_type(creating)
book.dat = tokens["message"]
book.title = tokens["title"]
book.author = tokens["writer"]
@@ -17,7 +24,7 @@
if(case)
book.forceMove(case)
case.update_icon()
- . = book
+ return book
/decl/persistence_handler/book/IsValidEntry(var/atom/entry)
. = ..()
@@ -29,11 +36,12 @@
. = ..()
var/obj/item/book/book = entry
- .["author"] = book.last_modified_ckey || ""
- .["message"] = book.dat || "dat"
- .["title"] = book.title || "Untitled"
- .["writer"] = book.author || "unknown"
+ .["author"] = book.last_modified_ckey || ""
+ .["message"] = book.dat || "dat"
+ .["title"] = book.title || "Untitled"
+ .["writer"] = book.author || "unknown"
.["icon_state"] = book.icon_state || "book"
+ .["book_type"] = "[book.type]"
var/turf/T = get_turf(entry)
if(!T || !isStationLevel(T.z))
@@ -62,7 +70,7 @@
else
T = get_random_spawn_turf(SPAWN_FLAG_PERSISTENCE_CAN_SPAWN)
- . = ..(T, tokens)
+ . = ..()
/decl/persistence_handler/book/GetEntryAge(var/atom/entry)
. = -1
diff --git a/code/modules/persistence/persistence_datum_filth.dm b/code/modules/persistence/persistence_datum_filth.dm
index 53c8ac5307d..9f877efeab0 100644
--- a/code/modules/persistence/persistence_datum_filth.dm
+++ b/code/modules/persistence/persistence_datum_filth.dm
@@ -15,11 +15,16 @@
. = ..()
if(.["path"] && !ispath(.["path"]))
.["path"] = text2path(.["path"])
- . = tokens
+ if(isnull(.["filthiness"]))
+ .["filthiness"] = 0
/decl/persistence_handler/filth/CreateEntryInstance(var/turf/creating, var/list/tokens)
var/_path = tokens["path"]
- new _path(creating, tokens["age"]+1)
+ var/obj/effect/decal/cleanable/dirt/dirt = new _path(creating, tokens["age"]+1)
+ if(istype(dirt))
+ dirt.dirt_amount = tokens["filthiness"]
+ dirt.update_icon()
+ return dirt
/decl/persistence_handler/filth/GetEntryAge(var/atom/entry)
var/obj/effect/decal/cleanable/filth = entry
@@ -32,3 +37,8 @@
/decl/persistence_handler/filth/CompileEntry(var/atom/entry)
. = ..()
.["path"] = "[GetEntryPath(entry)]"
+ if(istype(entry, /obj/effect/decal/cleanable/dirt))
+ var/obj/effect/decal/cleanable/dirt/dirt = entry
+ .["filthiness"] = dirt.dirt_amount
+ else
+ .["filthiness"] = 0
diff --git a/code/modules/persistence/persistence_datum_graffiti.dm b/code/modules/persistence/persistence_datum_graffiti.dm
index de71177f2fc..83861418d67 100644
--- a/code/modules/persistence/persistence_datum_graffiti.dm
+++ b/code/modules/persistence/persistence_datum_graffiti.dm
@@ -17,7 +17,7 @@
return TRUE
/decl/persistence_handler/graffiti/CreateEntryInstance(var/turf/creating, var/list/tokens)
- new /obj/effect/decal/writing(creating, tokens["age"]+1, tokens["message"], tokens["author"])
+ return new /obj/effect/decal/writing(creating, tokens["age"]+1, tokens["message"], tokens["author"])
/decl/persistence_handler/graffiti/IsValidEntry(var/atom/entry)
. = ..()
diff --git a/code/modules/supermatter/setup_supermatter.dm b/code/modules/power/admin_setup_engine.dm
similarity index 51%
rename from code/modules/supermatter/setup_supermatter.dm
rename to code/modules/power/admin_setup_engine.dm
index 1fb598744b2..d7d59c8f9e5 100644
--- a/code/modules/supermatter/setup_supermatter.dm
+++ b/code/modules/power/admin_setup_engine.dm
@@ -1,108 +1,7 @@
-#define SETUP_OK 1 // All good
-#define SETUP_WARNING 2 // Something that shouldn't happen happened, but it's not critical so we will continue
-#define SETUP_ERROR 3 // Something bad happened, and it's important so we won't continue setup.
-#define SETUP_DELAYED 4 // Wait for other things first.
-
-#define ENERGY_NITROGEN 115 // Roughly 8 emitter shots.
-#define ENERGY_CARBONDIOXIDE 150 // Roughly 10 emitter shots.
-#define ENERGY_HYDROGEN 300 // Roughly 20 emitter shots.
-#define ENERGY_PHORON 500 // Roughly 40 emitter shots.
-
-/datum/admins/proc/setup_supermatter()
- set category = "Debug"
- set name = "Setup Supermatter"
- set desc = "Allows you to start the Supermatter engine."
-
- if (!istype(src,/datum/admins))
- src = usr.client.holder
- if (!istype(src,/datum/admins))
- to_chat(usr, "Error: you are not an admin!")
- return
-
- var/response = input(usr, "Are you sure? This will start up the engine with selected gas as coolant.", "Engine setup") as null|anything in list("N2", "CO2", "PH", "H2", "Abort")
- if(!response || response == "Abort")
- return
-
- var/errors = 0
- var/warnings = 0
- var/success = 0
-
- log_and_message_admins("## SUPERMATTER SETUP - Setup initiated by [usr] using coolant type [response].")
-
- // CONFIGURATION PHASE
- // Coolant canisters, set types according to response.
- for(var/obj/effect/engine_setup/coolant_canister/C in global.engine_setup_markers)
- switch(response)
- if("N2")
- C.canister_type = /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/
- continue
- if("CO2")
- C.canister_type = /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/
- continue
- if("PH")
- C.canister_type = /obj/machinery/portable_atmospherics/canister/phoron/engine_setup/
- continue
- if("H2")
- C.canister_type = /obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup/
- continue
-
- for(var/obj/effect/engine_setup/core/C in global.engine_setup_markers)
- switch(response)
- if("N2")
- C.energy_setting = ENERGY_NITROGEN
- continue
- if("CO2")
- C.energy_setting = ENERGY_CARBONDIOXIDE
- continue
- if("PH")
- C.energy_setting = ENERGY_PHORON
- continue
- if("H2")
- C.energy_setting = ENERGY_HYDROGEN
- continue
-
- for(var/obj/effect/engine_setup/filter/F in global.engine_setup_markers)
- F.coolant = response
-
- var/list/delayed_objects = list()
- // SETUP PHASE
- for(var/obj/effect/engine_setup/S in global.engine_setup_markers)
- var/result = S.activate(0)
- switch(result)
- if(SETUP_OK)
- success++
- continue
- if(SETUP_WARNING)
- warnings++
- continue
- if(SETUP_ERROR)
- errors++
- log_and_message_admins("## SUPERMATTER SETUP - Error encountered! Aborting.")
- break
- if(SETUP_DELAYED)
- delayed_objects.Add(S)
- continue
-
- if(!errors)
- for(var/obj/effect/engine_setup/S in delayed_objects)
- var/result = S.activate(1)
- switch(result)
- if(SETUP_OK)
- success++
- continue
- if(SETUP_WARNING)
- warnings++
- continue
- if(SETUP_ERROR)
- errors++
- log_and_message_admins("## SUPERMATTER SETUP - Error encountered! Aborting.")
- break
-
- log_and_message_admins("## SUPERMATTER SETUP - Setup completed with [errors] errors, [warnings] warnings and [success] successful steps.")
-
- return
-
-
+#define ENGINE_SETUP_OK 1 // All good
+#define ENGINE_SETUP_WARNING 2 // Something that shouldn't happen happened, but it's not critical so we will continue
+#define ENGINE_SETUP_ERROR 3 // Something bad happened, and it's important so we won't continue setup.
+#define ENGINE_SETUP_DELAYED 4 // Wait for other things first.
var/global/list/engine_setup_markers = list()
@@ -129,7 +28,7 @@ var/global/list/engine_setup_markers = list()
// Tries to locate a pump, enables it, and sets it to MAX. Triggers warning if unable to locate a pump.
-/obj/effect/engine_setup/pump_max/
+/obj/effect/engine_setup/pump_max
name = "Pump Setup Marker"
/obj/effect/engine_setup/pump_max/activate()
@@ -137,15 +36,15 @@ var/global/list/engine_setup_markers = list()
var/obj/machinery/atmospherics/binary/pump/P = locate() in get_turf(src)
if(!P)
log_and_message_admins("## WARNING: Unable to locate pump at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
P.target_pressure = P.max_pressure_setting
P.update_use_power(POWER_USE_IDLE)
- return SETUP_OK
+ return ENGINE_SETUP_OK
// Spawns an empty canister on this turf, if it has a connector port. Triggers warning if unable to find a connector port
-/obj/effect/engine_setup/empty_canister/
+/obj/effect/engine_setup/empty_canister
name = "Empty Canister Marker"
/obj/effect/engine_setup/empty_canister/activate()
@@ -153,16 +52,16 @@ var/global/list/engine_setup_markers = list()
var/obj/machinery/atmospherics/portables_connector/P = locate() in get_turf(src)
if(!P)
log_and_message_admins("## WARNING: Unable to locate connector port at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
new/obj/machinery/portable_atmospherics/canister(get_turf(src)) // Canisters automatically connect to connectors in New()
- return SETUP_OK
+ return ENGINE_SETUP_OK
// Spawns a coolant canister on this turf, if it has a connector port.
// Triggers error when unable to locate connector port or when coolant canister type is unset.
-/obj/effect/engine_setup/coolant_canister/
+/obj/effect/engine_setup/coolant_canister
name = "Coolant Canister Marker"
var/canister_type = null
@@ -171,33 +70,12 @@ var/global/list/engine_setup_markers = list()
var/obj/machinery/atmospherics/portables_connector/P = locate() in get_turf(src)
if(!P)
log_and_message_admins("## ERROR: Unable to locate coolant connector port at [x] [y] [z]!")
- return SETUP_ERROR
+ return ENGINE_SETUP_ERROR
if(!canister_type)
log_and_message_admins("## ERROR: Canister type unset at [x] [y] [z]!")
- return SETUP_ERROR
+ return ENGINE_SETUP_ERROR
new canister_type(get_turf(src))
- return SETUP_OK
-
-
-
-// Energises the supermatter. Errors when unable to locate supermatter.
-/obj/effect/engine_setup/core/
- name = "Supermatter Core Marker"
- var/energy_setting = 0
-
-/obj/effect/engine_setup/core/activate(var/last = 0)
- if(!last)
- return SETUP_DELAYED
- ..()
- var/obj/machinery/power/supermatter/SM = locate() in get_turf(src)
- if(!SM)
- log_and_message_admins("## ERROR: Unable to locate supermatter core at [x] [y] [z]!")
- return SETUP_ERROR
- if(!energy_setting)
- log_and_message_admins("## ERROR: Energy setting unset at [x] [y] [z]!")
- return SETUP_ERROR
- SM.power = energy_setting
- return SETUP_OK
+ return ENGINE_SETUP_OK
@@ -218,13 +96,13 @@ var/global/list/engine_setup_markers = list()
var/obj/machinery/power/smes/S = locate() in get_turf(src)
if(!S)
log_and_message_admins("## WARNING: Unable to locate SMES unit at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
S.input_attempt = 1
S.input_level = min(target_input_level, S.input_level_max)
S.output_attempt = 1
S.output_level = min(target_output_level, S.output_level_max)
S.update_icon()
- return SETUP_OK
+ return ENGINE_SETUP_OK
// Sets up filters. This assumes filters are set to filter out CO2 back to the core loop by default!
/obj/effect/engine_setup/filter
@@ -236,10 +114,10 @@ var/global/list/engine_setup_markers = list()
var/obj/machinery/atmospherics/omni/filter/F = locate() in get_turf(src)
if(!F)
log_and_message_admins("## WARNING: Unable to locate omni filter at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
if(!coolant)
log_and_message_admins("## WARNING: No coolant type set at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
// Non-co2 coolant, adjust the filter's config first.
if(coolant != "CO2")
@@ -257,11 +135,11 @@ var/global/list/engine_setup_markers = list()
break
else
log_and_message_admins("## WARNING: Inapropriate filter coolant type set at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
F.rebuild_filtering_list()
F.update_use_power(POWER_USE_IDLE)
- return SETUP_OK
+ return ENGINE_SETUP_OK
// Closes the monitoring room shutters so the first Engi to show up doesn't get microwaved
/obj/effect/engine_setup/shutters
@@ -272,7 +150,7 @@ var/global/list/engine_setup_markers = list()
/obj/effect/engine_setup/shutters/activate()
if(!target_button)
log_and_message_admins("## WARNING: No button type set at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
var/obj/machinery/button/blast_door/found = null
var/turf/T = get_turf(src)
for(var/obj/machinery/button/blast_door/B in T.contents)
@@ -281,16 +159,7 @@ var/global/list/engine_setup_markers = list()
break
if(!found)
log_and_message_admins("## WARNING: Unable to locate button at [x] [y] [z]!")
- return SETUP_WARNING
+ return ENGINE_SETUP_WARNING
found.activate()
found.update_icon()
- return SETUP_OK
-
-#undef SETUP_OK
-#undef SETUP_WARNING
-#undef SETUP_ERROR
-#undef SETUP_DELAYED
-#undef ENERGY_NITROGEN
-#undef ENERGY_CARBONDIOXIDE
-#undef ENERGY_HYDROGEN
-#undef ENERGY_PHORON
\ No newline at end of file
+ return ENGINE_SETUP_OK
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 053432007e6..6e2b63b82fa 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -445,7 +445,7 @@ var/global/list/all_apcs = list()
return ..()
/obj/machinery/power/apc/bash(obj/item/used_item, mob/user)
- if (!(user.a_intent == I_HURT) || (used_item.item_flags & ITEM_FLAG_NO_BLUDGEON))
+ if (!(user.check_intent(I_FLAG_HARM)) || (used_item.item_flags & ITEM_FLAG_NO_BLUDGEON))
return FALSE
if(!used_item.user_can_attack_with(user))
@@ -491,21 +491,20 @@ var/global/list/all_apcs = list()
/obj/machinery/power/apc/physical_attack_hand(mob/user)
//Human mob special interaction goes here.
- if(ishuman(user))
- var/mob/living/human/H = user
-
- if(H.species.can_shred(H))
- user.visible_message("\The [user] slashes at \the [src]!", "You slash at \the [src]!")
- playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
-
- var/allcut = wires.IsAllCut()
- if(beenhit >= pick(3, 4) && allcut == 0)
- wires.CutAll()
- src.update_icon()
- src.visible_message("\The [src]'s wires are shredded!")
- else
- beenhit += 1
- return TRUE
+ if(user.can_shred())
+ user.visible_message(
+ SPAN_DANGER("\The [user] slashes at \the [src]!"),
+ SPAN_DANGER("You slash at \the [src]!")
+ )
+ playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
+ var/allcut = wires.IsAllCut()
+ if(beenhit >= pick(3, 4) && allcut == 0)
+ wires.CutAll()
+ update_icon()
+ visible_message(SPAN_DANGER("\The [src]'s wires are shredded!"))
+ else
+ beenhit += 1
+ return TRUE
return FALSE
/obj/machinery/power/apc/interface_interact(mob/user)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 4cc7b4d0751..655e2766497 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -26,9 +26,10 @@ By design, d1 is the smallest direction and d2 is the highest
name = "power cable"
desc = "A flexible superconducting cable for heavy-duty power transfer."
icon = 'icons/obj/power_cond_white.dmi'
- icon_state = "0-1"
- layer = EXPOSED_WIRE_LAYER
- color = COLOR_MAROON
+ icon_state = "0-1"
+ layer = EXPOSED_WIRE_LAYER
+ color = COLOR_MAROON
+ paint_color = COLOR_MAROON
anchored = TRUE
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
level = LEVEL_BELOW_PLATING
@@ -55,24 +56,31 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/structure/cable/yellow
color = COLOR_AMBER
+ paint_color = COLOR_AMBER
/obj/structure/cable/green
color = COLOR_GREEN
+ paint_color = COLOR_GREEN
/obj/structure/cable/blue
color = COLOR_CYAN_BLUE
+ paint_color = COLOR_CYAN_BLUE
/obj/structure/cable/pink
color = COLOR_PURPLE
+ paint_color = COLOR_PURPLE
/obj/structure/cable/orange
color = COLOR_ORANGE
+ paint_color = COLOR_ORANGE
/obj/structure/cable/cyan
color = COLOR_SKY_BLUE
+ paint_color = COLOR_SKY_BLUE
/obj/structure/cable/white
color = COLOR_SILVER
+ paint_color = COLOR_SILVER
/obj/structure/cable/Initialize(var/ml)
// ensure d1 & d2 reflect the icon_state for entering and exiting cable
@@ -158,50 +166,48 @@ By design, d1 is the smallest direction and d2 is the highest
//
// TODO: take a closer look at cable attackby, make it call parent?
-/obj/structure/cable/attackby(obj/item/W, mob/user)
- if(IS_WIRECUTTER(W))
- cut_wire(W, user)
+/obj/structure/cable/attackby(obj/item/used_item, mob/user)
- else if(IS_COIL(W))
- var/obj/item/stack/cable_coil/coil = W
+ if(IS_WIRECUTTER(used_item))
+ cut_wire(used_item, user)
+ return TRUE
+
+ if(IS_COIL(used_item))
+ var/obj/item/stack/cable_coil/coil = used_item
if (coil.get_amount() < 1)
to_chat(user, "You don't have enough cable to lay down.")
return TRUE
coil.cable_join(src, user)
+ return TRUE
- else if(IS_MULTITOOL(W))
-
+ if(IS_MULTITOOL(used_item))
if(powernet && (powernet.avail > 0)) // is it powered?
to_chat(user, SPAN_WARNING("[get_wattage()] in power network."))
-
+ shock(user, 5, 0.2)
else
to_chat(user, SPAN_WARNING("\The [src] is not powered."))
+ return TRUE
- shock(user, 5, 0.2)
-
-
- else if(W.edge)
+ else if(used_item.has_edge())
var/delay_holder
-
- if(W.get_attack_force(user) < 5)
- visible_message(SPAN_WARNING("[user] starts sawing away roughly at \the [src] with \the [W]."))
+ if(used_item.expend_attack_force(user) < 5)
+ visible_message(SPAN_WARNING("[user] starts sawing away roughly at \the [src] with \the [used_item]."))
delay_holder = 8 SECONDS
else
- visible_message(SPAN_WARNING("[user] begins to cut through \the [src] with \the [W]."))
+ visible_message(SPAN_WARNING("[user] begins to cut through \the [src] with \the [used_item]."))
delay_holder = 3 SECONDS
-
if(user.do_skilled(delay_holder, SKILL_ELECTRICAL, src))
- cut_wire(W, user)
- if(W.obj_flags & OBJ_FLAG_CONDUCTIBLE)
+ cut_wire(used_item, user)
+ if(used_item.obj_flags & OBJ_FLAG_CONDUCTIBLE)
shock(user, 66, 0.7)
else
visible_message(SPAN_WARNING("[user] stops cutting before any damage is done."))
+ return TRUE
- src.add_fingerprint(user)
- return TRUE
+ return ..()
-/obj/structure/cable/proc/cut_wire(obj/item/W, mob/user)
+/obj/structure/cable/proc/cut_wire(obj/item/used_item, mob/user)
var/turf/T = get_turf(src)
if(!T || !T.is_plating())
return
@@ -227,19 +233,19 @@ By design, d1 is the smallest direction and d2 is the highest
if(c.d1 == UP || c.d2 == UP)
qdel(c)
- investigate_log("was cut by [key_name(usr, usr.client)] in [get_area_name(user)]","wires")
+ investigate_log("was cut by [key_name(user, user.client)] in [get_area_name(user)]","wires")
qdel(src)
// shock the user with probability prb
/obj/structure/cable/proc/shock(mob/user, prb, var/siemens_coeff = 1.0)
- if(!prob(prb))
- return 0
+ if(!prob(prb) || powernet?.avail <= 0)
+ return FALSE
if (electrocute_mob(user, powernet, src, siemens_coeff))
spark_at(src, amount=5, cardinal_only = TRUE)
- if(HAS_STATUS(usr, STAT_STUN))
- return 1
- return 0
+ if(HAS_STATUS(user, STAT_STUN))
+ return TRUE
+ return FALSE
// TODO: generalize to matter list and parts_type.
/obj/structure/cable/create_dismantled_products(turf/T)
@@ -264,7 +270,7 @@ By design, d1 is the smallest direction and d2 is the highest
var/color_n = "#dd0000"
if(colorC)
color_n = colorC
- color = color_n
+ set_color(color_n)
/////////////////////////////////////////////////
// Cable laying helpers
@@ -502,6 +508,7 @@ By design, d1 is the smallest direction and d2 is the highest
amount = MAXCOIL
max_amount = MAXCOIL
color = COLOR_MAROON
+ paint_color = COLOR_MAROON
desc = "A coil of wiring, suitable for both delicate electronics and heavy duty power supply."
singular_name = "length"
w_class = ITEM_SIZE_NORMAL
@@ -544,7 +551,7 @@ By design, d1 is the smallest direction and d2 is the highest
TOOL_SUTURES = TOOL_QUALITY_MEDIOCRE
))
if (can_have_color && param_color) // It should be red by default, so only recolor it if parameter was specified.
- color = param_color
+ set_color(param_color)
update_icon()
update_wclass()
@@ -555,7 +562,7 @@ By design, d1 is the smallest direction and d2 is the highest
//you can use wires to heal robotics
/obj/item/stack/cable_coil/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
var/obj/item/organ/external/affecting = istype(target) && GET_EXTERNAL_ORGAN(target, user?.get_target_zone())
- if(affecting && user.a_intent == I_HELP)
+ if(affecting && user.check_intent(I_FLAG_HELP))
if(!affecting.is_robotic())
to_chat(user, SPAN_WARNING("\The [target]'s [affecting.name] is not robotic. \The [src] cannot repair it."))
else if(BP_IS_BRITTLE(affecting))
@@ -569,9 +576,9 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/item/stack/cable_coil/on_update_icon()
. = ..()
- if (!color && can_have_color)
+ if (!paint_color && can_have_color)
var/list/possible_cable_colours = get_global_cable_colors()
- color = possible_cable_colours[pick(possible_cable_colours)]
+ set_color(possible_cable_colours[pick(possible_cable_colours)])
if(amount == 1)
icon_state = "coil1"
SetName("cable piece")
@@ -594,7 +601,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(!final_color)
selected_color = "Red"
final_color = possible_cable_colours[selected_color]
- color = final_color
+ set_color(final_color)
to_chat(user, SPAN_NOTICE("You change \the [src]'s color to [lowertext(selected_color)]."))
/obj/item/stack/cable_coil/proc/update_wclass()
@@ -627,7 +634,7 @@ By design, d1 is the smallest direction and d2 is the highest
to_chat(usr, SPAN_WARNING("You need at least 15 [plural_name] of cable to make restraints!"))
return
var/obj/item/handcuffs/cable/B = new /obj/item/handcuffs/cable(usr.loc)
- B.color = color
+ B.set_color(color)
to_chat(usr, SPAN_NOTICE("You wind some [plural_name] of cable together to make some restraints."))
else
to_chat(usr, SPAN_NOTICE("You cannot do that."))
@@ -842,31 +849,39 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/item/stack/cable_coil/yellow
color = COLOR_AMBER
+ paint_color = COLOR_AMBER
/obj/item/stack/cable_coil/blue
color = COLOR_CYAN_BLUE
+ paint_color = COLOR_CYAN_BLUE
/obj/item/stack/cable_coil/green
color = COLOR_GREEN
+ paint_color = COLOR_GREEN
/obj/item/stack/cable_coil/pink
color = COLOR_PURPLE
+ paint_color = COLOR_PURPLE
/obj/item/stack/cable_coil/orange
color = COLOR_ORANGE
+ paint_color = COLOR_ORANGE
/obj/item/stack/cable_coil/cyan
color = COLOR_SKY_BLUE
+ paint_color = COLOR_SKY_BLUE
/obj/item/stack/cable_coil/white
color = COLOR_SILVER
+ paint_color = COLOR_SILVER
/obj/item/stack/cable_coil/lime
color = COLOR_LIME
+ paint_color = COLOR_LIME
/obj/item/stack/cable_coil/random/Initialize(mapload, c_length, param_color)
var/list/possible_cable_colours = get_global_cable_colors()
- color = possible_cable_colours[pick(possible_cable_colours)]
+ set_color(possible_cable_colours[pick(possible_cable_colours)])
. = ..()
// Produces cable coil from a rig power cell.
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 48abeb8383a..a60fab7f939 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -85,7 +85,8 @@
to_chat(user, "The charge meter reads [round(src.percent(), 0.1)]%.")
/obj/item/cell/emp_act(severity)
- //remove this once emp changes on dev are merged in
+ // remove this if EMPs are ever rebalanced so that they don't instantly drain borg cells
+ // todo: containers (partially) shielding contents?
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
severity *= R.cell_emp_mult
diff --git a/code/modules/power/fuel_assembly/fuel_assembly.dm b/code/modules/power/fuel_assembly/fuel_assembly.dm
index dbd9544418e..3721dff6b01 100644
--- a/code/modules/power/fuel_assembly/fuel_assembly.dm
+++ b/code/modules/power/fuel_assembly/fuel_assembly.dm
@@ -90,8 +90,8 @@
/obj/item/fuel_assembly/phoron
material = /decl/material/solid/phoron
-/obj/item/fuel_assembly/supermatter
- material = /decl/material/solid/supermatter
+/obj/item/fuel_assembly/exotic_matter
+ material = /decl/material/solid/exotic_matter
/obj/item/fuel_assembly/hydrogen
material = /decl/material/gas/hydrogen
diff --git a/code/modules/power/fuel_assembly/fuel_compressor.dm b/code/modules/power/fuel_assembly/fuel_compressor.dm
index 58b26a67dd9..0488d360f93 100644
--- a/code/modules/power/fuel_assembly/fuel_compressor.dm
+++ b/code/modules/power/fuel_assembly/fuel_compressor.dm
@@ -129,12 +129,6 @@
to_chat(user, SPAN_NOTICE("You add the contents of \the [thing] to \the [src]'s material buffer."))
return TRUE
- if(istype(thing, /obj/machinery/power/supermatter/shard))
- stored_material[/decl/material/solid/supermatter] = 5 * SHEET_MATERIAL_AMOUNT
- to_chat(user, SPAN_NOTICE("You awkwardly cram \the [thing] into \the [src]'s material buffer."))
- qdel(thing)
- return TRUE
-
if(istype(thing, /obj/item/stack/material))
var/obj/item/stack/material/M = thing
var/decl/material/mat = M.get_material()
diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm
index 472ab5c37b5..14ac3c4e1cc 100644
--- a/code/modules/power/fusion/fusion_reactions.dm
+++ b/code/modules/power/fusion/fusion_reactions.dm
@@ -102,7 +102,7 @@
// VERY UNIDEAL REACTIONS.
/decl/fusion_reaction/phoron_supermatter
- p_react = /decl/material/solid/supermatter
+ p_react = /decl/material/solid/exotic_matter
s_react = /decl/material/solid/phoron
energy_consumption = 0
energy_production = 5 * FUSION_PROCESSING_TIME_MULT
@@ -121,8 +121,7 @@
qdel(holder)
var/radiation_level = rand(100, 200)
- // Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana
- SSradiation.z_radiate(locate(1, 1, holder.z), radiation_level, 1)
+ SSradiation.z_radiate(origin, radiation_level, respect_maint = TRUE)
for(var/mob/living/human/H in global.living_mob_list_)
var/turf/T = get_turf(H)
@@ -130,10 +129,10 @@
H.set_hallucination(rand(100,150), 51)
for(var/obj/machinery/fusion_fuel_injector/I in range(world.view, origin))
- if(I.cur_assembly && I.cur_assembly.material && I.cur_assembly.material.type == /decl/material/solid/supermatter)
+ if(I.cur_assembly && I.cur_assembly.material && I.cur_assembly.material.type == /decl/material/solid/exotic_matter)
explosion(get_turf(I), 1, 2, 3)
if(!QDELETED(I))
- QDEL_IN(I, 5)
+ addtimer(CALLBACK(I, TYPE_PROC_REF(/atom, physically_destroyed)), 0.5 SECONDS)
sleep(5)
explosion(origin, 1, 2, 5)
diff --git a/code/modules/power/geothermal/_geothermal.dm b/code/modules/power/geothermal/_geothermal.dm
index 5f76fa6dd0f..3425a37cd2c 100644
--- a/code/modules/power/geothermal/_geothermal.dm
+++ b/code/modules/power/geothermal/_geothermal.dm
@@ -148,6 +148,7 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000
/obj/machinery/geothermal/Destroy()
var/atom/last_loc = loc
unset_vent()
+ connector = null
. = ..()
if(istype(last_loc))
propagate_refresh_neighbors(last_loc)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 76ea4bb5e1e..624425a5121 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -262,9 +262,9 @@
// attempt to break the light
//If xenos decide they want to smash a light bulb with a toolbox, who am I to stop them? /N
- else if(lightbulb && (lightbulb.status != LIGHT_BROKEN) && user.a_intent != I_HELP)
+ else if(lightbulb && (lightbulb.status != LIGHT_BROKEN) && !user.check_intent(I_FLAG_HELP))
- if(prob(1 + W.get_attack_force(user) * 5))
+ if(prob(1 + W.expend_attack_force(user) * 5))
user.visible_message("[user.name] smashed the light!", "You smash the light!", "You hear a tinkle of breaking glass.")
if(on && (W.obj_flags & OBJ_FLAG_CONDUCTIBLE))
@@ -316,12 +316,13 @@
to_chat(user, "There is no [get_fitting_name()] in this light.")
return TRUE
- if(ishuman(user))
- var/mob/living/human/H = user
- if(H.species.can_shred(H))
- visible_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass.")
- broken()
- return TRUE
+ if(user.can_shred())
+ visible_message(
+ SPAN_DANGER("\The [user] smashes the light!"),
+ blind_message = "You hear a tinkle of breaking glass."
+ )
+ broken()
+ return TRUE
// make it burn hands if not wearing fire-insulated gloves
if(on)
@@ -329,15 +330,15 @@
var/prot = FALSE
var/mob/living/human/H = user
if(istype(H))
- var/obj/item/clothing/gloves/pronouns = H.get_equipped_item(slot_gloves_str)
- if(istype(pronouns) && pronouns.max_heat_protection_temperature > LIGHT_BULB_TEMPERATURE)
+ var/obj/item/clothing/gloves/gloves = H.get_equipped_item(slot_gloves_str)
+ if(istype(gloves) && gloves.max_heat_protection_temperature > LIGHT_BULB_TEMPERATURE)
prot = TRUE
if(prot > 0 || user.has_genetic_condition(GENE_COND_COLD_RESISTANCE))
to_chat(user, "You remove the [get_fitting_name()].")
else if(istype(user) && user.is_telekinetic())
to_chat(user, "You telekinetically remove the [get_fitting_name()].")
- else if(user.a_intent != I_HELP)
+ else if(!user.check_intent(I_FLAG_HELP))
var/obj/item/organ/external/hand = GET_EXTERNAL_ORGAN(H, user.get_active_held_item_slot())
if(hand && hand.is_usable() && !hand.can_feel_pain())
user.apply_damage(3, BURN, hand.organ_tag, used_weapon = src)
@@ -482,7 +483,7 @@
/obj/item/light/set_color(color)
b_color = isnull(color) ? COLOR_WHITE : color
- update_icon()
+ queue_icon_update() // avoid running update_icon before Initialize
/obj/item/light/tube
name = "light tube"
@@ -552,7 +553,6 @@
// update the icon state and description of the light
/obj/item/light/on_update_icon()
. = ..()
- color = b_color
var/broken
switch(status)
if(LIGHT_OK)
@@ -565,9 +565,7 @@
icon_state = "[base_state]_broken"
desc = "A broken [name]."
broken = TRUE
- var/image/I = image(icon, src, "[base_state]_attachment[broken ? "_broken" : ""]")
- I.color = null
- add_overlay(I)
+ add_overlay(overlay_image(icon, "[base_state]_attachment[broken ? "_broken" : ""]", flags = RESET_COLOR|RESET_ALPHA))
/obj/item/light/Initialize(mapload)
. = ..()
@@ -598,7 +596,7 @@
if(!proximity) return
if(istype(target, /obj/machinery/light))
return
- if(user.a_intent != I_HURT)
+ if(!user.check_intent(I_FLAG_HARM))
return
shatter()
@@ -607,7 +605,7 @@
if(status == LIGHT_OK || status == LIGHT_BURNED)
src.visible_message("[name] shatters.","You hear a small glass object shatter.")
status = LIGHT_BROKEN
- sharp = 1
+ set_sharp(TRUE)
set_base_attack_force(5)
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
update_icon()
@@ -615,13 +613,7 @@
/obj/item/light/proc/switch_on()
switchcount++
if(rigged)
- log_and_message_admins("Rigged light explosion, last touched by [fingerprintslast]")
- var/turf/T = get_turf(src.loc)
- spawn(0)
- sleep(2)
- explosion(T, 0, 0, 3, 5)
- sleep(1)
- qdel(src)
+ addtimer(CALLBACK(src, PROC_REF(do_rigged_explosion)), 0.2 SECONDS)
status = LIGHT_BROKEN
else if(prob(min(60, switchcount*switchcount*0.01)))
status = LIGHT_BURNED
@@ -629,6 +621,15 @@
playsound(src, sound_on, 75)
return status
+/obj/item/light/proc/do_rigged_explosion()
+ if(!rigged)
+ return
+ log_and_message_admins("Rigged light explosion, last touched by [fingerprintslast]")
+ var/turf/T = get_turf(src)
+ explosion(T, 0, 0, 3, 5)
+ if(!QDELETED(src))
+ QDEL_IN(src, 1)
+
/obj/machinery/light/do_simple_ranged_interaction(var/mob/user)
if(lightbulb)
remove_bulb()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index a04cc415262..fcde5f33f1f 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -76,9 +76,9 @@
if(distance > 1)
return
if(active)
- to_chat(usr, "The generator is on.")
+ to_chat(user, "The generator is on.")
else
- to_chat(usr, "The generator is off.")
+ to_chat(user, "The generator is off.")
/obj/machinery/port_gen/emp_act(severity)
if(!active)
return
@@ -466,7 +466,7 @@
to_chat(user, "Auxilary tank shows [reagents.total_volume]u of liquid in it.")
/obj/machinery/port_gen/pacman/super/potato/UseFuel()
- if(reagents.has_reagent(/decl/material/liquid/ethanol/vodka))
+ if(reagents.has_reagent(/decl/material/liquid/alcohol/vodka))
rad_power = 4
temperature_gain = 60
remove_any_reagents(1)
@@ -486,9 +486,9 @@
/obj/machinery/port_gen/pacman/super/potato/attackby(var/obj/item/hit_with, var/mob/user)
if(istype(hit_with, /obj/item/chems))
var/obj/item/chems/chem_container = hit_with
- var/old_vodka_amount = REAGENT_VOLUME(reagents, /decl/material/liquid/ethanol/vodka)
+ var/old_vodka_amount = REAGENT_VOLUME(reagents, /decl/material/liquid/alcohol/vodka)
if(chem_container.standard_pour_into(src,user))
- if(REAGENT_VOLUME(reagents, /decl/material/liquid/ethanol/vodka) > old_vodka_amount) // yay, booze!
+ if(REAGENT_VOLUME(reagents, /decl/material/liquid/alcohol/vodka) > old_vodka_amount) // yay, booze!
audible_message(SPAN_NOTICE("[src] blips happily!"))
playsound(get_turf(src),'sound/machines/synth_yes.ogg', 50, FALSE)
else // you didn't add any more than we already had
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index ca4b205e6b0..8afd72314ce 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -179,11 +179,14 @@
return net1
//Determines how strong could be shock, deals damage to mob, uses power.
-//M is a mob who touched wire/whatever
+//victim is a mob who touched wire/whatever
//power_source is a source of electricity, can be powercell, area, apc, cable, powernet or null
//source is an object caused electrocuting (airlock, grille, etc)
//No animations will be performed by this proc.
-/proc/electrocute_mob(mob/living/M, var/power_source, var/obj/source, var/siemens_coeff = 1.0)
+/proc/electrocute_mob(mob/living/victim, power_source, obj/source, siemens_coeff = 1.0, coverage_flags = SLOT_HANDS)
+
+ coverage_flags = victim?.get_active_hand_bodypart_flags() || coverage_flags
+
var/area/source_area
if(istype(power_source,/area))
source_area = power_source
@@ -208,19 +211,16 @@
else if (!power_source)
return 0
else
- log_admin("ERROR: /proc/electrocute_mob([M], [power_source], [source]): wrong power_source")
+ log_admin("ERROR: /proc/electrocute_mob([victim], [power_source], [source]): wrong power_source")
return 0
+
//Triggers powernet warning, but only for 5 ticks (if applicable)
//If following checks determine user is protected we won't alarm for long.
if(PN)
PN.trigger_warning(5)
- if(ishuman(M))
- var/mob/living/human/H = M
- if(H.species.get_shock_vulnerability(H) <= 0)
- return
- var/obj/item/clothing/gloves/G = H.get_equipped_item(slot_gloves_str)
- if(istype(G) && G.siemens_coefficient == 0)
- return 0 //to avoid spamming with insulated glvoes on
+
+ if(victim.get_siemens_coefficient_for_coverage(coverage_flags) <= 0)
+ return
//Checks again. If we are still here subject will be shocked, trigger standard 20 tick warning
//Since this one is longer it will override the original one.
@@ -242,7 +242,7 @@
else
power_source = cell
shock_damage = cell_damage
- var/drained_hp = M.electrocute_act(shock_damage, source, siemens_coeff) //zzzzzzap!
+ var/drained_hp = victim.electrocute_act(shock_damage, source, siemens_coeff) //zzzzzzap!
var/drained_energy = drained_hp*20
if (source_area)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d7ae1df1a1a..c2b62b6059f 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -11,7 +11,7 @@
active_power_usage = 100 KILOWATTS
var/efficiency = 0.3 // Energy efficiency. 30% at this time, so 100kW load means 30kW laser pulses.
- var/minimum_power = 10 KILOWATTS // The minimum power the emitter will still fire at it it doesn't have enough power available.
+ var/minimum_power = 10 KILOWATTS // The minimum power below which the emitter will turn off; different than the power needed to fire.
var/active = 0
var/fire_delay = 100
var/max_burst_delay = 100
@@ -67,8 +67,8 @@
if(active==1)
active = 0
to_chat(user, "You turn off \the [src].")
- log_and_message_admins("turned off \the [src]")
- investigate_log("turned off by [key_name_admin(user || usr)]","singulo")
+ log_and_message_admins("turned off \the [src]", user)
+ investigate_log("turned off by [key_name_admin(user)]","singulo")
else
active = 1
if(user)
@@ -77,8 +77,8 @@
to_chat(user, "You turn on \the [src].")
shot_number = 0
fire_delay = get_initial_fire_delay()
- log_and_message_admins("turned on \the [src]")
- investigate_log("turned on by [key_name_admin(user || usr)]","singulo")
+ log_and_message_admins("turned on \the [src]", user)
+ investigate_log("turned on by [key_name_admin(user)]","singulo")
update_icon()
else
to_chat(user, "The controls are locked!")
diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm
index fc1b54c7edc..00976a216f0 100644
--- a/code/modules/power/singularity/generator.dm
+++ b/code/modules/power/singularity/generator.dm
@@ -8,7 +8,7 @@
density = TRUE
use_power = POWER_USE_OFF
matter = list(
- /decl/material/solid/supermatter = MATTER_AMOUNT_PRIMARY,
+ /decl/material/solid/exotic_matter = MATTER_AMOUNT_PRIMARY,
/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY
)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 8dae5c06871..d53d37aa144 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -13,7 +13,7 @@ var/global/list/singularities = list()
/// Category used for investigation entries relating to this atom.
var/const/investigation_label = "singulo"
- /// A list of events. Toxins is in here twice to double the chance of proccing.
+ /// A weighted list of events.
var/static/list/singularity_events = list(
/decl/singularity_event/empulse = 1,
/decl/singularity_event/toxins = 2,
@@ -63,7 +63,7 @@ var/global/list/singularities = list()
/obj/effect/singularity/explosion_act(severity)
SHOULD_CALL_PARENT(FALSE)
- if(current_stage.stage_size == STAGE_SUPER)//IT'S UNSTOPPABLE
+ if(!current_stage.explosion_vulnerable)//IT'S UNSTOPPABLE
return
if(severity == 1)
if(prob(25))
@@ -153,16 +153,13 @@ var/global/list/singularities = list()
// Handle random events.
if(prob(current_stage.event_chance))
- if(current_stage.stage_size >= STAGE_SUPER)
- var/decl/singularity_event/wave_event = GET_DECL(/decl/singularity_event/supermatter_wave)
- wave_event.handle_event(src)
- var/decl/singularity_event/singularity_event = pickweight(singularity_events)
+ var/decl/singularity_event/singularity_event = current_stage.forced_event || pickweight(singularity_events)
singularity_event = GET_DECL(singularity_event)
singularity_event.handle_event(src)
/obj/effect/singularity/proc/try_move(var/movement_dir, var/vertical_move)
set waitfor = FALSE
- if(current_stage.stage_size >= STAGE_FIVE)//The superlarge one does not care about things in its way
+ if(current_stage.ignore_obstacles)//The superlarge one does not care about things in its way
step(src, movement_dir)
if(!vertical_move)
sleep(1)
diff --git a/code/modules/power/singularity/singularity_events.dm b/code/modules/power/singularity/singularity_events.dm
index e48a040231b..f3bc342ac90 100644
--- a/code/modules/power/singularity/singularity_events.dm
+++ b/code/modules/power/singularity/singularity_events.dm
@@ -7,10 +7,7 @@
/decl/singularity_event/nothing // Nothing happens.
/decl/singularity_event/empulse/handle_event(obj/effect/singularity/source)
- if(source.current_stage.stage_size != STAGE_SUPER)
- empulse(source, 8, 10)
- else
- empulse(source, 12, 16)
+ empulse(source, source.current_stage.em_heavy_range, source.current_stage.em_light_range)
/decl/singularity_event/toxins
var/toxrange = 10
@@ -35,20 +32,10 @@
if(ishuman(M))
var/mob/living/human/H = M
if(istype(H.get_equipped_item(slot_glasses_str), /obj/item/clothing/glasses/meson))
- if(source.current_stage.stage_size != STAGE_SUPER)
+ if(!source.current_stage.the_goggles_do_nothing)
to_chat(H, SPAN_WARNING("You look directly into \the [source]. Good thing you had your protective eyewear on!"))
continue
to_chat(H, SPAN_WARNING("Your eyewear does absolutely nothing to protect you from \the [source]"))
- to_chat(M, SPAN_DANGER("You look directly into \the [source] and feel [source.current_stage.stage_size == STAGE_SUPER ? "helpless" : "weak"]."))
+ to_chat(M, SPAN_DANGER("You look directly into \the [source] and feel [source.current_stage.mesmerize_text]."))
M.apply_effect(3, STUN)
M.visible_message(SPAN_DANGER("\The [M] stares blankly at \the [source]!"))
-
-/decl/singularity_event/supermatter_wave/handle_event(obj/effect/singularity/source)
- for(var/mob/living/M in view(10, source.loc))
- to_chat(M, SPAN_WARNING("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."))
- if(prob(67))
- to_chat(M, SPAN_NOTICE("Miraculously, it fails to kill you."))
- else
- to_chat(M, SPAN_DANGER("You don't even have a moment to react as you are reduced to ashes by the intense radiation."))
- M.dust()
- SSradiation.radiate(source, rand(source.energy))
diff --git a/code/modules/power/singularity/singularity_stages.dm b/code/modules/power/singularity/singularity_stages.dm
index 831cacd48c5..2624c10e818 100644
--- a/code/modules/power/singularity/singularity_stages.dm
+++ b/code/modules/power/singularity/singularity_stages.dm
@@ -32,8 +32,22 @@
var/dissipation_energy_loss = 1
/// What is the percent chance of an event each tick?
var/event_chance
+ /// Do we force a specific event when we proc events?
+ var/decl/singularity_event/forced_event = null
/// Will we wander around?
var/wander
+ /// Can explosions destroy the singularity?
+ var/explosion_vulnerable
+ /// What is the heavy range for the EM pulse event in this stage?
+ var/em_heavy_range = 8
+ /// What is the light range for the EM pulse event in this stage?
+ var/em_light_range = 10
+ /// What do characters feel when they're mesmerized during this stage?
+ var/mesmerize_text = "weak"
+ /// Do we ignore PPE for mesmerizing in this stage?
+ var/the_goggles_do_nothing = FALSE
+ /// Do we ignore obstacles in our way?
+ var/ignore_obstacles = FALSE
/decl/singularity_stage/validate()
. = ..()
@@ -171,29 +185,7 @@
dissipates_over_time = FALSE //It cant go smaller due to e loss.
wander = TRUE
event_chance = 20
+ ignore_obstacles = TRUE
/decl/singularity_stage/stage_five/grow_to(obj/effect/singularity/source)
source.visible_message(SPAN_DANGER("\The [source] has grown out of control!"))
-
-/decl/singularity_stage/stage_five/shrink_to(obj/effect/singularity/source)
- source.visible_message(SPAN_WARNING("\The [source] miraculously reduces in size and loses its supermatter properties."))
-
-/decl/singularity_stage/stage_super
- name = "super gravitational singularity"
- desc = "A gravitational singularity with the properties of supermatter. It has the power to destroy worlds."
- min_energy = 50000
- max_energy = INFINITY
- stage_size = STAGE_SUPER
- footprint = 6
- icon = 'icons/effects/352x352.dmi'
- icon_state = "singularity_s11"//uh, whoever drew that, you know that black holes are supposed to look dark right? What's this, the clown's singulo?
- pixel_x = -160
- pixel_y = -160
- grav_pull = 16
- consume_range = 5
- dissipates_over_time = 0 //It cant go smaller due to e loss
- event_chance = 25 //Events will fire off more often.
- wander = TRUE
-
-/decl/singularity_stage/stage_super/grow_to(obj/effect/singularity/source)
- source.visible_message(SPAN_SINISTER("You witness the creation of a destructive force that cannot possibly be stopped by human hands."))
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 6ad9f2fbc7f..50c22d1479e 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -221,8 +221,8 @@
return TRUE
/obj/machinery/power/smes/attackby(var/obj/item/W, var/mob/user)
- if(component_attackby(W, user))
- return TRUE
+ if((. = component_attackby(W, user)))
+ return
return bash(W, user)
/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 3a956c49e00..59665f270cb 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -155,7 +155,7 @@
var/obj/item/clothing/gloves/G = h_user.get_equipped_item(slot_gloves_str)
if(istype(G) && G.siemens_coefficient == 0)
user_protected = 1
- log_and_message_admins("SMES FAILURE: [src.x]X [src.y]Y [src.z]Z User: [usr.ckey], Intensity: [intensity]/100 - JMP")
+ log_and_message_admins("SMES FAILURE: [src.x]X [src.y]Y [src.z]Z User: [user.ckey], Intensity: [intensity]/100 - JMP")
switch (intensity)
if (0 to 15)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index bd129184831..a941debb006 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -88,7 +88,7 @@ var/global/list/solars_list = list()
return TRUE
else if (W)
add_fingerprint(user)
- current_health -= W.get_attack_force(user)
+ current_health -= W.expend_attack_force(user)
healthcheck()
return ..()
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index 8fb0064ca70..aa6c612f55b 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -185,7 +185,7 @@
/obj/machinery/turbine/OnTopic(user, href_list)
if(href_list["close"])
- close_browser(usr, "window=turbine")
+ close_browser(user, "window=turbine")
return TOPIC_HANDLED
if(href_list["str"])
@@ -244,9 +244,9 @@
-/obj/machinery/computer/turbine_computer/OnTopic(user, href_list)
+/obj/machinery/computer/turbine_computer/OnTopic(mob/user, href_list)
if( href_list["view"] )
- usr.client.eye = src.compressor
+ user.client.eye = src.compressor
. = TOPIC_HANDLED
else if( href_list["str"] )
src.compressor.starter = !src.compressor.starter
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index a26611bd894..613ae77ae76 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -39,17 +39,20 @@
pixel_y = rand(-randpixel, randpixel)
. = ..()
+/obj/item/ammo_casing/Destroy()
+ QDEL_NULL(BB)
+ return ..()
+
//removes the projectile from the ammo casing
/obj/item/ammo_casing/proc/expend()
. = BB
BB = null
set_dir(pick(global.alldirs)) //spin spent casings
-
// Aurora forensics port, gunpowder residue.
if(leaves_residue)
leave_residue()
-
update_icon()
+ update_name()
/obj/item/ammo_casing/Crossed(atom/movable/AM)
..()
@@ -119,6 +122,11 @@
else if(spent_icon && !BB)
icon_state = spent_icon
+/obj/item/ammo_casing/update_name()
+ . = ..()
+ if(!BB)
+ SetName("spent [name]")
+
/obj/item/ammo_casing/examine(mob/user)
. = ..()
if(caliber)
@@ -167,6 +175,7 @@
return
for(var/i in 1 to initial_ammo)
stored_ammo += new ammo_type(src)
+ contents_initialized = TRUE
/obj/item/ammo_magazine/proc/get_stored_ammo_count()
. = length(stored_ammo)
@@ -269,10 +278,9 @@ var/global/list/magazine_icondata_states = list()
/proc/magazine_icondata_cache_add(var/obj/item/ammo_magazine/M)
var/list/icon_keys = list()
var/list/ammo_states = list()
- var/list/states = icon_states(M.icon)
for(var/i = 0, i <= M.max_ammo, i++)
var/ammo_state = "[M.icon_state]-[i]"
- if(ammo_state in states)
+ if(check_state_in_icon(ammo_state, M.icon))
icon_keys += i
ammo_states += ammo_state
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index 43f6f7fb6c1..29125e7db81 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -18,14 +18,16 @@
/obj/item/ammo_magazine/speedloader/on_update_icon()
. = ..()
- if(!length(stored_ammo))
+ var/ammo_count = get_stored_ammo_count()
+ if(!ammo_count)
return
+ create_initial_contents() // Not ideal, but we need instances for the icon gen.
switch(icon_state)
if("world")
var/ammo_state = "world-some"
- if(length(stored_ammo) == 1)
+ if(ammo_count == 1)
ammo_state = "world-one"
- else if(length(stored_ammo) == max_ammo)
+ else if(ammo_count == max_ammo)
ammo_state = "world-full"
var/obj/item/ammo_casing/A = stored_ammo[1]
add_overlay(overlay_image(icon, ammo_state, A.color, RESET_COLOR))
@@ -64,7 +66,7 @@
overlays += I
/obj/item/ammo_magazine/shotholder/attack_hand(mob/user)
- if(loc != user || user.a_intent != I_HURT || !length(stored_ammo) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE))
+ if(loc != user || !user.check_intent(I_FLAG_HARM) || !length(stored_ammo) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE))
return ..()
create_initial_contents()
var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len]
diff --git a/code/modules/projectiles/ammunition/chemdart.dm b/code/modules/projectiles/ammunition/chemdart.dm
index bd8710bef92..fa7647a4dcf 100644
--- a/code/modules/projectiles/ammunition/chemdart.dm
+++ b/code/modules/projectiles/ammunition/chemdart.dm
@@ -2,7 +2,7 @@
name = "dart"
icon_state = "dart"
damage = 5
- sharp = 1
+ sharp = TRUE
embed = 1 //the dart is shot fast enough to pierce space suits, so I guess splintering inside the target can be a thing. Should be rare due to low damage.
life_span = 15 //shorter range
muzzle_type = null
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 8d2a2e24ed7..d99abdef1e6 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -45,6 +45,7 @@
drop_sound = 'sound/foley/drop1.ogg'
pickup_sound = 'sound/foley/pickup2.ogg'
can_be_twohanded = TRUE // also checks one_hand_penalty
+ needs_attack_dexterity = DEXTERITY_WEAPONS
var/fire_verb = "fire"
var/waterproof = FALSE
@@ -193,15 +194,20 @@
/obj/item/gun/proc/special_check(var/mob/user)
if(!isliving(user))
- return 0
- if(!user.check_dexterity(DEXTERITY_WEAPONS))
- return 0
+ return FALSE
+
+ if(!user.check_dexterity(get_required_attack_dexterity(user)))
+ return FALSE
+
+ if(is_secure_gun() && !free_fire() && (!authorized_modes[sel_mode] || !registered_owner))
+ audible_message(SPAN_WARNING("\The [src] buzzes, refusing to fire."), hearing_distance = 3)
+ playsound(loc, 'sound/machines/buzz-sigh.ogg', 10, 0)
+ return FALSE
var/mob/living/M = user
if(!safety() && world.time > last_safety_check + 5 MINUTES && !user.skill_check(SKILL_WEAPONS, SKILL_BASIC))
if(prob(30))
toggle_safety()
- return 1
if(M.has_genetic_condition(GENE_COND_CLUMSY) && prob(40)) //Clumsy handling
var/obj/P = consume_next_projectile()
@@ -218,8 +224,9 @@
M.try_unequip(src)
else
handle_click_empty(user)
- return 0
- return 1
+ return FALSE
+
+ return TRUE
/obj/item/gun/emp_act(severity)
for(var/obj/O in contents)
@@ -243,14 +250,14 @@
handle_suicide(user)
return TRUE
- if(user.a_intent != I_HURT && user.aiming && user.aiming.active) //if aim mode, don't pistol whip
+ if(!user.check_intent(I_FLAG_HARM) && user.aiming && user.aiming.active) //if aim mode, don't pistol whip
if (user.aiming.aiming_at != target)
PreFire(target, user)
else
Fire(target, user, pointblank=1)
return TRUE
- if(user.a_intent == I_HURT) //point blank shooting
+ if(user.check_intent(I_FLAG_HARM)) //point blank shooting
Fire(target, user, pointblank = TRUE)
return TRUE
@@ -259,7 +266,8 @@
/obj/item/gun/dropped(var/mob/living/user)
check_accidents(user)
update_icon()
- return ..()
+ . = ..()
+ clear_autofire()
/obj/item/gun/proc/Fire(atom/target, atom/movable/firer, clickparams, pointblank = FALSE, reflex = FALSE, set_click_cooldown = TRUE, target_zone = BP_CHEST)
if(!firer || !target)
@@ -287,7 +295,7 @@
return
if(safety())
- if(user.a_intent == I_HURT && !user.skill_fail_prob(SKILL_WEAPONS, 100, SKILL_EXPERT, 0.5)) //reflex un-safeying
+ if(user.check_intent(I_FLAG_HARM) && !user.skill_fail_prob(SKILL_WEAPONS, 100, SKILL_EXPERT, 0.5)) //reflex un-safeying
toggle_safety(user)
else
handle_click_empty(user)
@@ -708,10 +716,6 @@
afterattack(shoot_to,target)
return 1
-/obj/item/gun/dropped(mob/living/user)
- . = ..()
- clear_autofire()
-
/obj/item/gun/proc/can_autofire()
return (autofire_enabled && world.time >= next_fire_time)
@@ -747,6 +751,9 @@
return FALSE
return TRUE
+/obj/item/gun/get_quick_interaction_handler(mob/user)
+ return GET_DECL(/decl/interaction_handler/gun/toggle_safety)
+
/obj/item/gun/get_alt_interactions(mob/user)
. = ..()
LAZYADD(., /decl/interaction_handler/gun/toggle_safety)
@@ -759,6 +766,7 @@
/decl/interaction_handler/gun/toggle_safety
name = "Toggle Safety"
+ examine_desc = "toggle the safety"
/decl/interaction_handler/gun/toggle_safety/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/gun/gun = target
@@ -766,6 +774,7 @@
/decl/interaction_handler/gun/toggle_firemode
name = "Change Firemode"
+ examine_desc = "change the firemode"
/decl/interaction_handler/gun/toggle_firemode/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/gun/gun = target
diff --git a/code/modules/projectiles/guns/energy/capacitor.dm b/code/modules/projectiles/guns/energy/capacitor.dm
index 38d3f62f52e..1232ef3e8f3 100644
--- a/code/modules/projectiles/guns/energy/capacitor.dm
+++ b/code/modules/projectiles/guns/energy/capacitor.dm
@@ -250,7 +250,7 @@ var/global/list/laser_wavelengths
if(charged)
var/obj/item/projectile/P = new projectile_type(src)
- P.color = selected_wavelength.color
+ P.set_color(selected_wavelength.color)
P.set_light(l_color = selected_wavelength.light_color)
P.damage = floor(sqrt(total_charge) * selected_wavelength.damage_multiplier)
P.armor_penetration = floor(sqrt(total_charge) * selected_wavelength.armour_multiplier)
diff --git a/code/modules/projectiles/guns/energy/staves.dm b/code/modules/projectiles/guns/energy/staves.dm
index 45ab5f71b6f..965c8f208e0 100644
--- a/code/modules/projectiles/guns/energy/staves.dm
+++ b/code/modules/projectiles/guns/energy/staves.dm
@@ -13,15 +13,13 @@
self_recharge = 1
charge_meter = 0
has_safety = FALSE
- var/required_antag_type = /decl/special_role/wizard
+ var/required_antag_type
/obj/item/gun/energy/staff/special_check(var/mob/user)
- if(required_antag_type)
- var/decl/special_role/antag = GET_DECL(required_antag_type)
- if(user.mind && !antag.is_antagonist(user.mind))
- to_chat(usr, "You focus your mind on \the [src], but nothing happens!")
- return 0
-
+ var/decl/special_role/antag = GET_DECL(required_antag_type)
+ if(user.mind && (!antag?.is_antagonist(user.mind)))
+ to_chat(user, SPAN_WARNING("You focus your mind on \the [src], but nothing happens!"))
+ return FALSE
return ..()
/obj/item/gun/energy/staff/handle_click_empty(mob/user = null)
diff --git a/code/modules/projectiles/guns/launcher/bows/arrow.dm b/code/modules/projectiles/guns/launcher/bows/arrow.dm
index 981d6fe8af7..073c4d5928b 100644
--- a/code/modules/projectiles/guns/launcher/bows/arrow.dm
+++ b/code/modules/projectiles/guns/launcher/bows/arrow.dm
@@ -5,10 +5,10 @@
plural_icon_state = ICON_STATE_WORLD + "-mult"
max_icon_state = ICON_STATE_WORLD + "-max"
w_class = ITEM_SIZE_NORMAL
- sharp = 1
- edge = 0
+ sharp = TRUE
+ edge = FALSE
lock_picking_level = 3
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
matter_multiplier = 0.2
is_spawnable_type = TRUE
diff --git a/code/modules/projectiles/guns/launcher/bows/sling.dm b/code/modules/projectiles/guns/launcher/bows/sling.dm
index 25a4b6e6d9c..c3f3822d4d8 100644
--- a/code/modules/projectiles/guns/launcher/bows/sling.dm
+++ b/code/modules/projectiles/guns/launcher/bows/sling.dm
@@ -1,14 +1,15 @@
/obj/item/gun/launcher/bow/sling
- name = "sling"
- desc = "A simple strip of leather with a cup in the center, used to hurl stones with great speed."
- slot_flags = 0
- draw_time = 0.5 SECONDS
- icon = 'icons/obj/guns/launcher/sling.dmi'
- material = /decl/material/solid/organic/leather
- color = /decl/material/solid/organic/leather::color
- string = null
- max_tension = 1
- bow_ammo_type = null
+ name = "sling"
+ desc = "A simple strip of leather with a cup in the center, used to hurl stones with great speed."
+ slot_flags = 0
+ draw_time = 0.5 SECONDS
+ icon = 'icons/obj/guns/launcher/sling.dmi'
+ material = /decl/material/solid/organic/leather
+ color = /decl/material/solid/organic/leather::color
+ string = null
+ requires_string = FALSE
+ max_tension = 1
+ bow_ammo_type = null
/obj/item/gun/launcher/bow/sling/try_string(mob/user, obj/item/bowstring/new_string)
return FALSE
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index ee2bc15639b..d8d3d2e48bd 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -32,7 +32,7 @@
to_chat(user, "[rockets.len] / [max_rockets] rockets.")
return TRUE
else
- to_chat(usr, "\The [src] cannot hold more rockets.")
+ to_chat(user, "\The [src] cannot hold more rockets.")
return TRUE
return ..()
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index d44be24924d..69fa0078472 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -30,7 +30,7 @@
return TRUE
syringe = I
to_chat(user, "You carefully insert [syringe] into [src].")
- sharp = TRUE
+ set_sharp(TRUE)
name = "syringe dart"
update_icon()
return TRUE
@@ -41,7 +41,7 @@
to_chat(user, "You remove [syringe] from [src].")
user.put_in_hands(syringe)
syringe = null
- sharp = initial(sharp)
+ set_sharp(initial(sharp))
SetName(initial(name))
update_icon()
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 1466e138166..e34fd58e061 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -49,6 +49,12 @@
ammo_magazine = new magazine_type(src)
update_icon()
+/obj/item/gun/projectile/Destroy()
+ chambered = null
+ loaded.Cut()
+ ammo_magazine = null
+ return ..()
+
/obj/item/gun/projectile/consume_next_projectile()
if(!is_jammed && prob(jam_chance))
src.visible_message("\The [src] jams!")
@@ -74,8 +80,8 @@
if(handle_casings == HOLD_CASINGS)
ammo_magazine.stored_ammo += chambered
ammo_magazine.initial_ammo--
- else if(ammo_magazine.stored_ammo.len)
- chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len]
+ else if(length(ammo_magazine.stored_ammo))
+ chambered = ammo_magazine.stored_ammo[length(ammo_magazine.stored_ammo)]
if(handle_casings != HOLD_CASINGS)
ammo_magazine.stored_ammo -= chambered
@@ -334,9 +340,9 @@
/obj/item/gun/projectile/proc/get_ammo_indicator()
var/base_state = get_world_inventory_state()
- if(!ammo_magazine || !LAZYLEN(ammo_magazine.stored_ammo))
+ if(!ammo_magazine || !ammo_magazine.get_stored_ammo_count())
return mutable_appearance(icon, "[base_state]_ammo_bad")
- else if(LAZYLEN(ammo_magazine.stored_ammo) <= 0.5 * ammo_magazine.max_ammo)
+ else if(LAZYLEN(ammo_magazine.get_stored_ammo_count()) <= 0.5 * ammo_magazine.max_ammo)
return mutable_appearance(icon, "[base_state]_ammo_warn")
else
return mutable_appearance(icon, "[base_state]_ammo_ok")
@@ -354,6 +360,7 @@
/decl/interaction_handler/projectile/remove_silencer
name = "Remove Silencer"
+ examine_desc = "remove the silencer"
/decl/interaction_handler/projectile/remove_silencer/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/gun/projectile/gun = target
@@ -361,6 +368,7 @@
/decl/interaction_handler/projectile/unload_ammo
name = "Remove Ammunition"
+ examine_desc = "unload the ammunition"
/decl/interaction_handler/projectile/unload_ammo/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/gun/projectile/gun = target
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 7505d0152aa..802b1f93863 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -35,7 +35,7 @@
/obj/item/gun/projectile/automatic/smg/on_update_icon()
..()
if(ammo_magazine)
- add_overlay("[get_world_inventory_state()]mag-[round(length(ammo_magazine.stored_ammo),5)]")
+ add_overlay("[get_world_inventory_state()]mag-[round(ammo_magazine.get_stored_ammo_count(),5)]")
/obj/item/gun/projectile/automatic/assault_rifle
name = "assault rifle"
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index a34c5d36ae9..ee2edcdcfae 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -37,13 +37,13 @@
/obj/item/gun/projectile/dartgun/on_update_icon()
..()
if(ammo_magazine)
- icon_state = "[get_world_inventory_state()]-[clamp(length(ammo_magazine.get_stored_ammo_count()), 0, 5)]"
+ icon_state = "[get_world_inventory_state()]-[clamp(ammo_magazine.get_stored_ammo_count(), 0, 5)]"
else
icon_state = get_world_inventory_state()
/obj/item/gun/projectile/dartgun/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && (slot in user_mob?.get_held_item_slots()) && ammo_magazine)
- overlay.icon_state += "-[clamp(length(ammo_magazine.get_stored_ammo_count()), 0, 5)]"
+ overlay.icon_state += "-[clamp(ammo_magazine.get_stored_ammo_count(), 0, 5)]"
. = ..()
/obj/item/gun/projectile/dartgun/consume_next_projectile()
@@ -151,13 +151,13 @@
else if (href_list["eject"])
var/index = text2num(href_list["eject"])
if(beakers[index])
- remove_beaker(beakers[index], usr)
+ remove_beaker(beakers[index], user)
. = TOPIC_REFRESH
else if (href_list["eject_cart"])
- unload_ammo(usr)
+ unload_ammo(user)
. = TOPIC_REFRESH
- Interact(usr)
+ Interact(user)
/obj/item/gun/projectile/dartgun/medical
starting_chems = list(/decl/material/liquid/burn_meds,/decl/material/liquid/brute_meds,/decl/material/liquid/antitoxins)
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 638376989ee..e64e7c3f731 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -17,7 +17,7 @@
/obj/item/gun/projectile/pistol/update_base_icon_state()
. = ..()
- if(!length(ammo_magazine?.stored_ammo))
+ if(!ammo_magazine?.get_stored_ammo_count())
var/empty_state = "[icon_state]-e"
if(check_state_in_icon(empty_state, icon))
icon_state = empty_state
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 0f54520856d..464ce437f7c 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -74,6 +74,7 @@
/decl/interaction_handler/revolver_spin_cylinder
name = "Spin Cylinder"
expected_target_type = /obj/item/gun/projectile/revolver
+ examine_desc = "spin the cylinder"
/decl/interaction_handler/revolver_spin_cylinder/invoked(atom/target, mob/user, obj/item/prop)
var/obj/item/gun/projectile/revolver/R = target
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index fbf7adf743f..152cb7a6ab5 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -14,6 +14,18 @@
is_spawnable_type = FALSE
atom_damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, ELECTROCUTE are the only things that should be in here, Try not to use PAIN as it doesn't go through stun_effect_act
+ // Code for handling tails, if any.
+ /// If the projectile leaves a trail.
+ var/proj_trail = FALSE
+ /// How long the trail lasts.
+ var/proj_trail_lifespan = 0
+ /// What icon to use for the projectile trail.
+ var/proj_trail_icon = 'icons/effects/projectiles/trail.dmi'
+ /// What icon_state to use for the projectile trail.
+ var/proj_trail_icon_state = "trail"
+ /// Any extant trail effects.
+ var/list/proj_trails
+
var/bumped = 0 //Prevents it from hitting more than one guy at once
var/def_zone = "" //Aiming at
var/atom/movable/firer = null//Who shot it
@@ -97,7 +109,7 @@
else animate_movement = NO_STEPS
. = ..()
-/obj/item/projectile/CanPass()
+/obj/item/projectile/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return TRUE
/obj/item/projectile/damage_flags()
@@ -315,11 +327,16 @@
SHOULD_CALL_PARENT(FALSE)
return
-/obj/item/projectile/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- return 1
-
/obj/item/projectile/proc/before_move()
- return
+ if(!proj_trail || !isturf(loc) || !proj_trail_icon || !proj_trail_icon_state || !proj_trail_lifespan)
+ return
+ var/obj/effect/overlay/projectile_trail/trail = new(loc)
+ trail.master = src
+ trail.icon = proj_trail_icon
+ trail.icon_state = proj_trail_icon_state
+ trail.set_density(FALSE)
+ LAZYADD(proj_trails, trail)
+ QDEL_IN(trail, proj_trail_lifespan)
/obj/item/projectile/proc/after_move()
if(hitscan && tracer_type && !(locate(/obj/effect/projectile) in loc))
@@ -612,6 +629,7 @@
trajectory.initialize_location(target.x, target.y, target.z, 0, 0)
/obj/item/projectile/Destroy()
+ QDEL_NULL_LIST(proj_trails)
if(hitscan)
if(loc && trajectory)
var/datum/point/pcache = trajectory.copy_to()
@@ -653,4 +671,4 @@
QDEL_NULL(beam_index)
/obj/item/projectile/proc/update_effect(var/obj/effect/projectile/effect)
- return
\ No newline at end of file
+ return
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index d9cde61e7df..8df181e9195 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -7,7 +7,7 @@
pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GLASS | PASS_FLAG_GRILLE
damage = 40
atom_damage_type = BURN
- sharp = 1 //concentrated burns
+ sharp = TRUE //concentrated burns
damage_flags = DAM_LASER
eyeblur = 4
hitscan = 1
@@ -210,7 +210,7 @@
icon_state = "stun"
fire_sound = 'sound/weapons/Taser.ogg'
damage_flags = 0
- sharp = 0 //not a laser
+ sharp = FALSE //not a laser
damage = 1//flavor burn! still not a laser, dmg will be reduce by energy resistance not laser resistances
atom_damage_type = BURN
eyeblur = 1//Some feedback that you've been hit
@@ -241,8 +241,8 @@
icon_state = "omnilaser"
fire_sound = 'sound/weapons/plasma_cutter.ogg'
damage = 15
- sharp = 1
- edge = 1
+ sharp = TRUE
+ edge = TRUE
atom_damage_type = BURN
life_span = 5
pass_flags = PASS_FLAG_TABLE
@@ -317,7 +317,7 @@
name = "dark matter wave"
icon_state = "darkt"
damage_flags = 0
- sharp = 0 //not a laser
+ sharp = FALSE //not a laser
agony = 40
atom_damage_type = STUN
muzzle_type = /obj/effect/projectile/muzzle/darkmattertaser
@@ -354,9 +354,9 @@
..()
if(isliving(target))
var/mob/living/L = target
- L.adjust_fire_stacks(rand(2,4))
- if(L.fire_stacks >= 3)
- L.IgniteMob()
+ L.adjust_fire_intensity(rand(2,4))
+ if(L.get_fire_intensity() >= 3)
+ L.ignite_fire()
/obj/item/projectile/beam/pop
icon_state = "bluelaser"
diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index e66053ebe84..ff77df0fa33 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -54,13 +54,10 @@
var/choice = pick(get_random_transformation_options(M))
var/mob/living/new_mob = apply_transformation(M, choice)
if(new_mob)
- new_mob.a_intent = "hurt"
- if(M.mind)
- for (var/spell/S in M.mind.learned_spells)
- new_mob.add_spell(new S.type)
- new_mob.a_intent = "hurt"
- transfer_key_from_mob_to_mob(M, new_mob)
- to_chat(new_mob, "Your form morphs into that of \a [choice].")
+ new_mob.set_intent(I_FLAG_HARM)
+ new_mob.copy_abilities_from(M)
+ transfer_key_from_mob_to_mob(M, new_mob)
+ to_chat(new_mob, "Your form morphs into that of \a [choice].")
else
new_mob = M
if(new_mob)
@@ -68,4 +65,3 @@
if(new_mob != M && !QDELETED(M))
qdel(M)
-
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 01404109510..d648f6d70c3 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -206,5 +206,5 @@
if(isliving(target))
var/mob/living/L = target
to_chat(target, SPAN_WARNING("You feel a wave of heat wash over you!"))
- L.adjust_fire_stacks(rand(5,8))
- L.IgniteMob()
\ No newline at end of file
+ L.adjust_fire_intensity(rand(5,8))
+ L.ignite_fire()
\ No newline at end of file
diff --git a/code/modules/projectiles/secure.dm b/code/modules/projectiles/secure.dm
index 241a0e0a8af..6902b3bddb1 100644
--- a/code/modules/projectiles/secure.dm
+++ b/code/modules/projectiles/secure.dm
@@ -99,14 +99,6 @@
var/decl/security_state/security_state = GET_DECL(global.using_map.security_state)
return security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)
-/obj/item/gun/special_check()
- if(is_secure_gun() && !free_fire() && (!authorized_modes[sel_mode] || !registered_owner))
- audible_message(SPAN_WARNING("\The [src] buzzes, refusing to fire."), hearing_distance = 3)
- playsound(loc, 'sound/machines/buzz-sigh.ogg', 10, 0)
- return 0
-
- . = ..()
-
/obj/item/gun/get_next_firemode()
if(!is_secure_gun())
return ..()
diff --git a/code/modules/projectiles/targeting/targeting_client.dm b/code/modules/projectiles/targeting/targeting_client.dm
index eeaf61909de..082471448a5 100644
--- a/code/modules/projectiles/targeting/targeting_client.dm
+++ b/code/modules/projectiles/targeting/targeting_client.dm
@@ -1,12 +1,11 @@
//These are called by the on-screen buttons, adjusting what the victim can and cannot do.
/client/proc/add_gun_icons()
- if(!usr || !usr.item_use_icon) return 1 // This can runtime if someone manages to throw a gun out of their hand before the proc is called.
- screen |= usr.item_use_icon
- screen |= usr.gun_move_icon
- screen |= usr.radio_use_icon
+ if(!mob.item_use_icon) return 1 // This can runtime if someone manages to throw a gun out of their hand before the proc is called.
+ screen |= mob.item_use_icon
+ screen |= mob.gun_move_icon
+ screen |= mob.radio_use_icon
/client/proc/remove_gun_icons()
- if(!usr) return 1 // Runtime prevention on N00k agents spawning with SMG
- screen -= usr.item_use_icon
- screen -= usr.gun_move_icon
- screen -= usr.radio_use_icon
+ screen -= mob.item_use_icon
+ screen -= mob.gun_move_icon
+ screen -= mob.radio_use_icon
diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm
index 5d5b1f9ba65..7210efedb4c 100644
--- a/code/modules/projectiles/targeting/targeting_overlay.dm
+++ b/code/modules/projectiles/targeting/targeting_overlay.dm
@@ -34,27 +34,24 @@
// Update HUD icons.
if(owner.gun_move_icon)
if(!(target_permissions & TARGET_CAN_MOVE))
- owner.gun_move_icon.icon_state = "no_walk0"
owner.gun_move_icon.SetName("Allow Movement")
else
- owner.gun_move_icon.icon_state = "no_walk1"
owner.gun_move_icon.SetName("Disallow Movement")
+ owner.gun_move_icon.update_icon()
if(owner.item_use_icon)
if(!(target_permissions & TARGET_CAN_CLICK))
- owner.item_use_icon.icon_state = "no_item0"
owner.item_use_icon.SetName("Allow Item Use")
else
- owner.item_use_icon.icon_state = "no_item1"
owner.item_use_icon.SetName("Disallow Item Use")
+ owner.item_use_icon.update_icon()
if(owner.radio_use_icon)
if(!(target_permissions & TARGET_CAN_RADIO))
- owner.radio_use_icon.icon_state = "no_radio0"
owner.radio_use_icon.SetName("Allow Radio Use")
else
- owner.radio_use_icon.icon_state = "no_radio1"
owner.radio_use_icon.SetName("Disallow Radio Use")
+ owner.radio_use_icon.update_icon()
var/message = "no longer permitted to "
var/use_span = "warning"
@@ -206,7 +203,7 @@
if(!no_message)
to_chat(owner, "You will no longer aim rather than fire.")
owner.client.remove_gun_icons()
- owner.gun_setting_icon.icon_state = "gun[active]"
+ owner.gun_setting_icon.update_icon()
/obj/aiming_overlay/proc/cancel_aiming(var/no_message = 0)
if(!aiming_with || !aiming_at)
diff --git a/code/modules/prometheus_metrics/metric_family.dm b/code/modules/prometheus_metrics/metric_family.dm
index 373130e297a..0054e97a257 100644
--- a/code/modules/prometheus_metrics/metric_family.dm
+++ b/code/modules/prometheus_metrics/metric_family.dm
@@ -1,11 +1,11 @@
// Datum used for gathering a set of prometheus metrics.
-/datum/metric_family
+/decl/metric_family
var/name = null
var/metric_type = null
var/help = null
// Collect should return a list of lists with two entries, one being a list and the other being a number.
-/datum/metric_family/proc/collect()
+/decl/metric_family/proc/collect()
var/list/out = list()
out[++out.len] = list(list("foo" = "bar"), 3.14)
@@ -15,9 +15,9 @@
// _to_proto will call the collect() method and format its result in a list
// suitable for encoding as a JSON protobuf mapping.
-/datum/metric_family/proc/_to_proto()
+/decl/metric_family/proc/_to_proto()
var/list/collected = collect()
-
+
var/list/out = list(
"name" = name,
"type" = metric_type,
@@ -36,7 +36,7 @@
label_pairs[++label_pairs.len] = list("name" = k, "value" = m[1][k])
metrics[++metrics.len] = list("label" = label_pairs, PROMETHEUS_METRIC_NAME(metric_type) = list("value" = m[2]))
-
+
if(metrics.len == 0)
return null
out["metric"] = metrics
diff --git a/code/modules/prometheus_metrics/metrics.dm b/code/modules/prometheus_metrics/metrics.dm
index 95e2f819002..ad98b6c178f 100644
--- a/code/modules/prometheus_metrics/metrics.dm
+++ b/code/modules/prometheus_metrics/metrics.dm
@@ -1,24 +1,15 @@
-var/global/datum/prometheus_metrics/prometheus_metrics = new
-
// prometheus_metrics holds a list of metric_family datums and uses them to
// create a json protobuf.
-/datum/prometheus_metrics
+/decl/prometheus_metrics
var/list/metric_families
-/datum/prometheus_metrics/New()
- metric_families = list()
- for(var/T in subtypesof(/datum/metric_family))
- var/datum/metric_family/mf = T
- if(initial(mf.name) == null || initial(mf.metric_type) == null)
- continue
- metric_families += new T
-
-/datum/prometheus_metrics/proc/collect()
+/decl/prometheus_metrics/proc/collect()
var/list/out = list()
- for(var/datum/metric_family/MF in metric_families)
- var/proto = MF._to_proto()
+ for(var/decl/metric_family/metric_family in decls_repository.get_decls_of_type_unassociated(/decl/metric_family))
+ var/proto = metric_family._to_proto()
if(proto != null)
- out[++out.len] = MF._to_proto()
-
+ // out += proto will try to merge the lists, we have to insert it at the end instead
+ out[++out.len] = proto
+
return json_encode(out)
diff --git a/code/modules/prometheus_metrics/metrics/byond.dm b/code/modules/prometheus_metrics/metrics/byond.dm
index 232bce38faf..3aa58ba942d 100644
--- a/code/modules/prometheus_metrics/metrics/byond.dm
+++ b/code/modules/prometheus_metrics/metrics/byond.dm
@@ -1,29 +1,29 @@
// byond-specific metrics
-/datum/metric_family/byond_time
+/decl/metric_family/byond_time
name = "byond_world_time_seconds"
metric_type = PROMETHEUS_METRIC_COUNTER
help = "Counter of 'game-time' seconds since server startup"
-/datum/metric_family/byond_time/collect()
+/decl/metric_family/byond_time/collect()
return list(list(null, world.time / 10))
-/datum/metric_family/byond_tick_lag
+/decl/metric_family/byond_tick_lag
name = "byond_tick_lag"
metric_type = PROMETHEUS_METRIC_GAUGE
help = "Current value of world.tick_lag"
-/datum/metric_family/byond_tick_lag/collect()
+/decl/metric_family/byond_tick_lag/collect()
return list(list(null, world.tick_lag))
-/datum/metric_family/byond_players
+/decl/metric_family/byond_players
name = "byond_players"
metric_type = PROMETHEUS_METRIC_GAUGE
help = "Number of players currently connected to the server"
-/datum/metric_family/byond_players/collect()
+/decl/metric_family/byond_players/collect()
var/c = 0
for(var/client/C)
if(C.connection == "seeker" || C.connection == "web")
@@ -31,10 +31,10 @@
return list(list(null, c))
-/datum/metric_family/byond_cpu
+/decl/metric_family/byond_cpu
name = "byond_cpu"
metric_type = PROMETHEUS_METRIC_GAUGE
help = "Current value of world.cpu"
-/datum/metric_family/byond_cpu/collect()
+/decl/metric_family/byond_cpu/collect()
return list(list(null, world.cpu))
diff --git a/code/modules/prometheus_metrics/metrics/ss13.dm b/code/modules/prometheus_metrics/metrics/ss13.dm
index 5c6d315b04d..f686f1d1bed 100644
--- a/code/modules/prometheus_metrics/metrics/ss13.dm
+++ b/code/modules/prometheus_metrics/metrics/ss13.dm
@@ -1,11 +1,11 @@
// ss13-specific metrics
-/datum/metric_family/ss13_controller_time_seconds
+/decl/metric_family/ss13_controller_time_seconds
name = "ss13_controller_time_seconds"
metric_type = PROMETHEUS_METRIC_COUNTER
help = "Counter of time spent in a controller in seconds"
-/datum/metric_family/ss13_controller_time_seconds/collect()
+/decl/metric_family/ss13_controller_time_seconds/collect()
var/list/out = list()
if(Master)
for(var/name in Master.total_run_times)
@@ -14,23 +14,23 @@
return out
-/datum/metric_family/ss13_master_runlevel
+/decl/metric_family/ss13_master_runlevel
name = "ss13_master_runlevel"
metric_type = PROMETHEUS_METRIC_GAUGE
help = "Current MC runlevel"
-/datum/metric_family/ss13_master_runlevel/collect()
+/decl/metric_family/ss13_master_runlevel/collect()
if(Master)
return list(list(null, Master.current_runlevel))
return list()
-/datum/metric_family/ss13_garbage_queue_length
+/decl/metric_family/ss13_garbage_queue_length
name = "ss13_garbage_queue_length"
metric_type = PROMETHEUS_METRIC_GAUGE
help = "Length of SSgarbage queues"
-/datum/metric_family/ss13_garbage_queue_length/collect()
+/decl/metric_family/ss13_garbage_queue_length/collect()
var/list/out = list()
if(SSgarbage)
@@ -40,12 +40,12 @@
return out
-/datum/metric_family/ss13_garbage_queue_results
+/decl/metric_family/ss13_garbage_queue_results
name = "ss13_garbage_queue_results"
metric_type = PROMETHEUS_METRIC_COUNTER
help = "Counter of pass/fail results for SSgarbage queues"
-/datum/metric_family/ss13_garbage_queue_results/collect()
+/decl/metric_family/ss13_garbage_queue_results/collect()
var/list/out = list()
if(SSgarbage)
@@ -56,12 +56,12 @@
return out
-/datum/metric_family/ss13_garbage_total_cleaned
+/decl/metric_family/ss13_garbage_total_cleaned
name = "ss13_garbage_total_cleaned"
metric_type = PROMETHEUS_METRIC_COUNTER
help = "Counter for number of objects deleted/GCed by SSgarbage"
-/datum/metric_family/ss13_garbage_total_cleaned/collect()
+/decl/metric_family/ss13_garbage_total_cleaned/collect()
var/list/out = list()
if(SSgarbage)
diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm
index d12f5a79204..91044cd99d5 100644
--- a/code/modules/random_map/automata/caves.dm
+++ b/code/modules/random_map/automata/caves.dm
@@ -2,7 +2,7 @@
iterations = 5
descriptor = "moon caves"
wall_type = /turf/wall/natural
- floor_type = /turf/floor
+ floor_type = /turf/floor/barren
target_turf_type = /turf/unsimulated/mask
var/sparse_mineral_turf = /turf/wall/natural/random
diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm
index d517a217017..1560263f996 100644
--- a/code/modules/random_map/drop/drop_types.dm
+++ b/code/modules/random_map/drop/drop_types.dm
@@ -22,12 +22,6 @@ var/global/list/datum/supply_drop_loot/supply_drop
/datum/supply_drop_loot/dd_SortValue()
return name
-/datum/supply_drop_loot/supermatter
- name = "Supermatter"
-/datum/supply_drop_loot/supermatter/New()
- ..()
- contents = list(/obj/machinery/power/supermatter)
-
/datum/supply_drop_loot/lasers
name = "Lasers"
container = /obj/structure/largecrate
@@ -51,18 +45,6 @@ var/global/list/datum/supply_drop_loot/supply_drop
/obj/item/gun/projectile/automatic/smg,
/obj/item/gun/projectile/automatic/assault_rifle)
-/datum/supply_drop_loot/ballistics
- name = "Ballistics"
- container = /obj/structure/largecrate
-/datum/supply_drop_loot/ballistics/New()
- ..()
- contents = list(
- /obj/item/gun/projectile/pistol,
- /obj/item/gun/projectile/shotgun/doublebarrel,
- /obj/item/gun/projectile/shotgun/pump,
- /obj/item/gun/projectile/automatic/smg,
- /obj/item/gun/projectile/automatic/assault_rifle)
-
/datum/supply_drop_loot/seeds
name = "Seeds"
container = /obj/structure/closet/crate
@@ -158,10 +140,10 @@ var/global/list/datum/supply_drop_loot/supply_drop
/obj/item/box/syringes,
/obj/item/box/autoinjectors)
-/datum/supply_drop_loot/power
- name = "Power"
+/datum/supply_drop_loot/materials
+ name = "Materials"
container = /obj/structure/largecrate
-/datum/supply_drop_loot/power/New()
+/datum/supply_drop_loot/materials/New()
..()
contents = list(
/obj/item/stack/material/sheet/mapped/steel,
diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm
index ac23a7b14e8..926ed6b2d0b 100644
--- a/code/modules/random_map/drop/droppod.dm
+++ b/code/modules/random_map/drop/droppod.dm
@@ -136,7 +136,6 @@
drop = pick(supplied_drop_types)
supplied_drop_types -= drop
if(istype(drop))
- drop.tag = null
if(drop.buckled)
drop.buckled = null
drop.forceMove(T)
@@ -168,7 +167,6 @@
return
for(var/i=0;i length(map))
return 0
var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z)
if(!T || (target_turf_type && !istype(T,target_turf_type)))
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 4357110ccbb..9b76b5dec22 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -1,8 +1,8 @@
var/global/obj/temp_reagents_holder = new
var/global/datum/reagents/sink/infinite_reagent_sink = new
-/atom/proc/add_to_reagents(reagent_type, amount, data, safety = FALSE, defer_update = FALSE)
- return reagents?.add_reagent(reagent_type, amount, data, safety, defer_update)
+/atom/proc/add_to_reagents(reagent_type, amount, data, safety = FALSE, defer_update = FALSE, phase = null)
+ return reagents?.add_reagent(reagent_type, amount, data, safety, defer_update, phase)
/atom/proc/remove_from_reagents(reagent_type, amount, safety = FALSE, defer_update = FALSE)
return reagents?.remove_reagent(reagent_type, amount, safety, defer_update)
@@ -199,12 +199,12 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
var/replace_sound
if(!(check_flags & ATOM_FLAG_NO_PHASE_CHANGE))
- if(!isnull(R.chilling_point) && R.type != R.bypass_chilling_products_for_root_type && LAZYLEN(R.chilling_products) && temperature <= R.chilling_point)
+ if(!isnull(R.chilling_point) && LAZYLEN(R.chilling_products) && temperature <= R.chilling_point)
replace_self_with = R.chilling_products
if(R.chilling_message)
replace_message = "\The [R.get_reagent_name(src)] [R.chilling_message]"
replace_sound = R.chilling_sound
- else if(!isnull(R.heating_point) && R.type != R.bypass_heating_products_for_root_type && LAZYLEN(R.heating_products) && temperature >= R.heating_point)
+ else if(!isnull(R.heating_point) && LAZYLEN(R.heating_products) && temperature >= R.heating_point)
replace_self_with = R.heating_products
if(R.heating_message)
replace_message = "\The [R.get_reagent_name(src)] [R.heating_message]"
@@ -549,11 +549,11 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
/datum/reagents/proc/trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/safety = 0, var/defer_update = FALSE, var/list/skip_reagents, var/transferred_phases = (MAT_PHASE_LIQUID | MAT_PHASE_SOLID))
if(!target || !istype(target))
- return
+ return 0
amount = max(0, min(amount, total_volume, REAGENTS_FREE_SPACE(target) / multiplier))
if(!amount)
- return
+ return 0
var/part = amount
if(skip_reagents)
@@ -561,7 +561,7 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
for(var/rtype in skip_reagents)
using_volume -= LAZYACCESS(reagent_volumes, rtype)
if(using_volume <= 0)
- return
+ return 0
part /= using_volume
else
var/using_volume = total_volume
@@ -579,6 +579,7 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
if(transferred_phases & MAT_PHASE_LIQUID)
var/liquid_transferred = min(amount_to_transfer, CHEMS_QUANTIZE(LIQUID_VOLUME(src, rtype)))
target.add_reagent(rtype, liquid_transferred * multiplier, REAGENT_DATA(src, rtype), TRUE, TRUE, MAT_PHASE_LIQUID) // We don't react until everything is in place
+
. += liquid_transferred
amount_to_transfer -= liquid_transferred
@@ -796,42 +797,55 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
// Options are touch_turf(), touch_mob() and touch_obj(). This does not handle transferring reagents to things.
// For example, splashing someone with water will get them wet and extinguish them if they are on fire,
// even if they are wearing an impermeable suit that prevents the reagents from contacting the skin.
-/datum/reagents/proc/touch_mob(var/mob/target)
+
+/datum/reagents/proc/touch_atom(atom/target, touch_atoms = TRUE)
+ if(ismob(target))
+ return touch_mob(target)
+ if(isobj(target))
+ return touch_obj(target)
+ if(isturf(target))
+ return touch_turf(target, touch_atoms)
+ return FALSE
+
+/datum/reagents/proc/touch_mob(mob/target)
if(!target || !istype(target) || !target.simulated)
return
for(var/rtype in reagent_volumes)
var/decl/material/current = GET_DECL(rtype)
current.touch_mob(target, REAGENT_VOLUME(src, rtype), src)
-/datum/reagents/proc/touch_turf(var/turf/target)
- if(!istype(target) || !target.simulated)
+/datum/reagents/proc/touch_turf(turf/touching_turf, touch_atoms = TRUE)
+
+ if(!istype(touching_turf) || !touching_turf.simulated)
return
+
for(var/rtype in reagent_volumes)
var/decl/material/current = GET_DECL(rtype)
- current.touch_turf(target, REAGENT_VOLUME(src, rtype), src)
+ current.touch_turf(touching_turf, REAGENT_VOLUME(src, rtype), src)
+
var/dirtiness = get_dirtiness()
if(dirtiness <= DIRTINESS_CLEAN)
- target.clean()
- target.remove_cleanables()
- if(dirtiness != DIRTINESS_NEUTRAL)
- if(dirtiness > DIRTINESS_NEUTRAL)
- var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate() in target
- if (!dirtoverlay)
- dirtoverlay = new /obj/effect/decal/cleanable/dirt(target)
- dirtoverlay.alpha = total_volume * dirtiness
- else
- dirtoverlay.alpha = min(dirtoverlay.alpha + total_volume * dirtiness, 255)
- else
- if(dirtiness <= DIRTINESS_STERILE)
- target.germ_level -= min(total_volume*20, target.germ_level)
- for(var/obj/item/I in target.contents)
- I.was_bloodied = null
- for(var/obj/effect/decal/cleanable/blood/B in target)
- qdel(B)
- if(dirtiness <= DIRTINESS_CLEAN)
- target.clean()
-
-/datum/reagents/proc/touch_obj(var/obj/target)
+ touching_turf.clean()
+ touching_turf.remove_cleanables()
+
+ if(dirtiness > DIRTINESS_NEUTRAL)
+ touching_turf.add_dirt(ceil(total_volume * dirtiness))
+ else if(dirtiness < DIRTINESS_NEUTRAL)
+ if(dirtiness <= DIRTINESS_STERILE)
+ touching_turf.germ_level -= min(total_volume*20, touching_turf.germ_level)
+ for(var/obj/item/I in touching_turf.contents)
+ I.was_bloodied = null
+ for(var/obj/effect/decal/cleanable/blood/B in touching_turf)
+ qdel(B)
+ if(dirtiness <= DIRTINESS_CLEAN)
+ touching_turf.clean()
+
+ if(touch_atoms)
+ for(var/atom/movable/thing in touching_turf.get_contained_external_atoms())
+ if(thing.simulated && !istype(thing, /obj/effect/effect/smoke/chem))
+ touch_atom(thing)
+
+/datum/reagents/proc/touch_obj(obj/target)
if(!target || !istype(target) || !target.simulated)
return
for(var/rtype in reagent_volumes)
@@ -876,13 +890,13 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
/datum/reagents/proc/trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/defer_update = FALSE, var/transferred_phases = (MAT_PHASE_LIQUID | MAT_PHASE_SOLID))
if(!target?.simulated)
- return
+ return 0
// If we're only dumping solids, and there's not enough liquid present on the turf to make a slurry, we dump the solids directly.
// This avoids creating an unnecessary reagent holder that won't be immediately deleted.
if((!(transferred_phases & MAT_PHASE_LIQUID) || !total_liquid_volume) && (target.reagents?.total_liquid_volume < FLUID_SLURRY))
var/datum/reagents/R = new /datum/reagents(amount, global.temp_reagents_holder)
- trans_to_holder(R, amount, multiplier, copy, TRUE, defer_update = defer_update, transferred_phases = MAT_PHASE_SOLID)
+ . = trans_to_holder(R, amount, multiplier, copy, TRUE, defer_update = defer_update, transferred_phases = MAT_PHASE_SOLID)
R.touch_turf(target)
target.dump_solid_reagents(R)
qdel(R)
@@ -890,16 +904,17 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
if(!target.reagents)
target.create_reagents(FLUID_MAX_DEPTH)
- trans_to_holder(target.reagents, amount, multiplier, copy, defer_update = defer_update, transferred_phases = transferred_phases)
+
+ . = trans_to_holder(target.reagents, amount, multiplier, copy, defer_update = defer_update, transferred_phases = transferred_phases)
// Deferred updates are presumably being done by SSfluids.
// Do an immediate fluid_act call rather than waiting for SSfluids to proc.
- if(!defer_update)
+ if(!defer_update && target.reagents.total_volume >= FLUID_PUDDLE)
target.fluid_act(target.reagents)
// Objects may or may not have reagents; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch.
/datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/defer_update = FALSE, var/transferred_phases = (MAT_PHASE_LIQUID | MAT_PHASE_SOLID))
if(!target || !target.simulated)
- return
+ return 0
if(!target.reagents)
var/datum/reagents/R = new /datum/reagents(amount * multiplier, global.temp_reagents_holder)
@@ -912,6 +927,12 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
/* Atom reagent creation - use it all the time */
+/datum/reagents/proc/get_skimmable_reagents()
+ for(var/mat in reagent_volumes)
+ var/decl/material/reagent = GET_DECL(mat)
+ if(reagent.skimmable)
+ LAZYADD(., mat)
+
/atom/proc/create_reagents(var/max_vol)
if(reagents)
log_debug("Attempted to create a new reagents holder when already referencing one: [log_info_line(src)]")
@@ -931,4 +952,4 @@ var/global/datum/reagents/sink/infinite_reagent_sink = new
var/decl/material/newreagent = GET_DECL(reagent_type)
if(!istype(newreagent))
return FALSE
- return TRUE
\ No newline at end of file
+ return TRUE
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index eaac5570598..e304fbec91e 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -223,7 +223,7 @@
. += "
Description: "
if(detailed_blood && istype(reagent, /decl/material/liquid/blood))
var/blood_data = REAGENT_DATA(beaker?.reagents, /decl/material/liquid/blood)
- . += "Blood Type: [LAZYACCESS(blood_data, DATA_BLOOD_TYPE)] DNA: [LAZYACCESS(blood_data, "blood.DNA")]"
+ . += "Blood Type: [LAZYACCESS(blood_data, DATA_BLOOD_TYPE)] DNA: [LAZYACCESS(blood_data, DATA_BLOOD_DNA)]"
else
. += "[reagent.lore_text]"
. += "
(Back)"
@@ -254,7 +254,7 @@
spawn()
has_sprites += user.client
for(var/i = 1 to MAX_PILL_SPRITE)
- send_rsc(usr, icon('icons/obj/items/chem/pill.dmi', "pill" + num2text(i)), "pill[i].png")
+ send_rsc(user, icon('icons/obj/items/chem/pill.dmi', "pill" + num2text(i)), "pill[i].png")
var/dat = list()
dat += "[name]"
dat += "[name] Menu:"
diff --git a/code/modules/reagents/Chemistry-Metabolism.dm b/code/modules/reagents/Chemistry-Metabolism.dm
index e1002809b1f..9c78f190ca2 100644
--- a/code/modules/reagents/Chemistry-Metabolism.dm
+++ b/code/modules/reagents/Chemistry-Metabolism.dm
@@ -20,7 +20,7 @@
parent = null
return ..()
-/datum/reagents/metabolism/proc/metabolize(var/list/dosage_tracker)
+/datum/reagents/metabolism/proc/metabolize(list/dosage_tracker)
if(!parent || total_volume < MINIMUM_CHEMICAL_VOLUME || !length(reagent_volumes))
return
for(var/rtype in reagent_volumes)
diff --git a/code/modules/reagents/Chemistry-Taste.dm b/code/modules/reagents/Chemistry-Taste.dm
index 46889757994..73b25e51cd5 100644
--- a/code/modules/reagents/Chemistry-Taste.dm
+++ b/code/modules/reagents/Chemistry-Taste.dm
@@ -72,4 +72,4 @@ calculate text size per text.
for(var/taste_desc in cocktail.tastes)
var/taste_power = cocktail.tastes[taste_desc] * cocktail_volume
tastes[taste_desc] += taste_power
- return tastes
\ No newline at end of file
+ return tastes
diff --git a/code/modules/reagents/chems/chems_ethanol.dm b/code/modules/reagents/chems/chems_alcohol.dm
similarity index 84%
rename from code/modules/reagents/chems/chems_ethanol.dm
rename to code/modules/reagents/chems/chems_alcohol.dm
index dc5b4215ff3..44384d64365 100644
--- a/code/modules/reagents/chems/chems_ethanol.dm
+++ b/code/modules/reagents/chems/chems_alcohol.dm
@@ -1,34 +1,30 @@
-/decl/material/liquid/ethanol
- name = "ethanol" //Parent class for all alcoholic reagents.
- lore_text = "A well-known alcohol with a variety of applications."
- taste_description = "pure alcohol"
+/decl/material/liquid/alcohol
+ abstract_type = /decl/material/liquid/alcohol
color = "#404030"
touch_met = 5
ignition_point = T0C+150
accelerant_value = FUEL_VALUE_ACCELERANT
solvent_power = MAT_SOLVENT_MODERATE
- uid = "chem_ethanol"
- boiling_point = T0C + 78.37
+ boiling_point = null // Pure ethanol boils, the rest has to separate first.
- heating_message = "boils away its ethanol content, leaving pure water."
+ heating_message = "boils away its water content, leaving pure alcohol."
heating_point = T0C + 78.37
heating_products = list(
- /decl/material/liquid/ethanol = 0.75,
- /decl/material/liquid/water = 0.25
+ /decl/material/liquid/alcohol/ethanol = 0.75,
+ /decl/material/liquid/water = 0.25
)
- bypass_heating_products_for_root_type = /decl/material/liquid/ethanol
- chilling_message = "separates as its water content freezes, leaving pure ethanol."
+ chilling_message = "separates as its water content freezes, leaving pure alcohol."
chilling_point = T0C
chilling_products = list(
- /decl/material/liquid/ethanol = 0.75,
- /decl/material/solid/ice = 0.25
+ /decl/material/liquid/alcohol/ethanol = 0.75,
+ /decl/material/solid/ice = 0.25
)
- bypass_chilling_products_for_root_type = /decl/material/liquid/ethanol
affect_blood_on_ingest = FALSE // prevents automatic toxins/inebriation as though injected
affect_blood_on_inhale = FALSE
- can_boil_to_gas = TRUE
+
+ value = 1.2
var/strength = 10 // This is, essentially, units between stages - the lower, the stronger. Less fine tuning, more clarity.
var/alcohol_toxicity = 1
@@ -36,28 +32,18 @@
var/targ_temp = 310
var/halluci = 0
- glass_name = "ethanol"
- glass_desc = "A well-known alcohol with a variety of applications."
- value = 1.2
-
-/decl/material/liquid/ethanol/Initialize()
- . = ..()
- // Impure ethanol doesn't boil, it has to separate first.
- if(type != bypass_heating_products_for_root_type)
- boiling_point = null
-
-/decl/material/liquid/ethanol/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/alcohol/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder)
..()
M.take_damage(removed * 2 * alcohol_toxicity, TOX)
M.add_chemical_effect(CE_ALCOHOL_TOXIC, alcohol_toxicity)
-/decl/material/liquid/ethanol/affect_inhale(mob/living/M, removed, datum/reagents/holder)
+/decl/material/liquid/alcohol/affect_inhale(mob/living/M, removed, datum/reagents/holder)
if(M.has_trait(/decl/trait/metabolically_inert))
return
..()
affect_ingest(M, removed, holder) // a bit of a hack, but it avoids code duplication
-/decl/material/liquid/ethanol/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/alcohol/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
if(M.has_trait(/decl/trait/metabolically_inert))
return
@@ -98,7 +84,28 @@
if(halluci)
M.adjust_hallucination(halluci, halluci)
-/decl/material/liquid/ethanol/absinthe
+// Somewhat a dummy type for 'pure ethanol' to avoid having to set dirtiness/heating products/etc on literally everything else.
+/decl/material/liquid/alcohol/ethanol
+ name = "ethanol"
+ lore_text = "A well-known alcohol with a variety of applications."
+ taste_description = "pure alcohol"
+ glass_name = "ethanol"
+ glass_desc = "A well-known alcohol with a variety of applications."
+ dirtiness = DIRTINESS_STERILE
+ uid = "chem_ethanol"
+
+ // Uncomment when refining spirits is less annoying, specifically when we have more precise temperature control.
+ // boiling_point = T0C + 78.37
+ // can_boil_to_gas = TRUE
+ // temperature_burn_milestone_material = /decl/material/liquid/alcohol/ethanol
+
+ // Pure ethanol does not separate.
+ heating_point = null
+ heating_products = null
+ chilling_point = null
+ chilling_products = null
+
+/decl/material/liquid/alcohol/absinthe
name = "absinthe"
lore_text = "Watch out that the Green Fairy doesn't come for you!"
taste_description = "death and licorice"
@@ -112,7 +119,7 @@
glass_desc = "Wormwood, anise, oh my."
uid = "chem_ethanol_absinthe"
-/decl/material/liquid/ethanol/ale
+/decl/material/liquid/alcohol/ale
name = "ale"
lore_text = "A dark alchoholic beverage made by malted barley and yeast."
taste_description = "hearty barley ale"
@@ -125,7 +132,7 @@
glass_desc = "A freezing container of delicious ale"
uid = "chem_ethanol_ale"
-/decl/material/liquid/ethanol/beer
+/decl/material/liquid/alcohol/beer
name = "beer"
codex_name = "plain beer"
lore_text = "An alcoholic beverage made from malted grains, hops, yeast, and water."
@@ -140,18 +147,18 @@
glass_desc = "A freezing container of beer"
uid = "chem_ethanol_beer"
-/decl/material/liquid/ethanol/beer/good
+/decl/material/liquid/alcohol/beer/good
uid = "chem_ethanol_beer_good"
codex_name = "premium beer"
taste_description = "beer"
-/decl/material/liquid/ethanol/beer/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/alcohol/beer/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
..()
if(M.has_trait(/decl/trait/metabolically_inert))
return
ADJ_STATUS(M, STAT_JITTER, -3)
-/decl/material/liquid/ethanol/bluecuracao
+/decl/material/liquid/alcohol/bluecuracao
name = "blue curacao"
lore_text = "Exotically blue, fruity drink, distilled from oranges."
taste_description = "oranges"
@@ -165,7 +172,7 @@
glass_name = "blue curacao"
glass_desc = "Exotically blue, fruity drink, distilled from oranges."
-/decl/material/liquid/ethanol/cognac
+/decl/material/liquid/alcohol/cognac
name = "cognac"
lore_text = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
taste_description = "rich and smooth alcohol"
@@ -179,7 +186,7 @@
glass_name = "cognac"
glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
-/decl/material/liquid/ethanol/gin
+/decl/material/liquid/alcohol/gin
name = "gin"
lore_text = "It's gin. In space. I say, good sir."
taste_description = "an alcoholic christmas tree"
@@ -193,7 +200,7 @@
glass_desc = "A crystal clear glass of Griffeater gin."
//Base type for alchoholic drinks containing coffee
-/decl/material/liquid/ethanol/coffee
+/decl/material/liquid/alcohol/coffee
name = "coffee liqueur"
lore_text = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
taste_description = "spiked coffee"
@@ -207,7 +214,7 @@
glass_desc = "Guaranteed to perk you up."
overdose = 45
-/decl/material/liquid/ethanol/coffee/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/alcohol/coffee/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
..()
if(M.has_trait(/decl/trait/metabolically_inert))
@@ -219,10 +226,10 @@
if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
-/decl/material/liquid/ethanol/coffee/affect_overdose(mob/living/M, total_dose)
- ADJ_STATUS(M, STAT_JITTER, 5)
+/decl/material/liquid/alcohol/coffee/affect_overdose(mob/living/victim, total_dose)
+ ADJ_STATUS(victim, STAT_JITTER, 5)
-/decl/material/liquid/ethanol/melonliquor
+/decl/material/liquid/alcohol/melonliquor
name = "melon liqueur"
lore_text = "A relatively sweet and fruity 46 proof liqueur."
taste_description = "fruity alcohol"
@@ -235,7 +242,7 @@
glass_name = "melon liqueur"
glass_desc = "A relatively sweet and fruity 46 proof liquor."
-/decl/material/liquid/ethanol/rum
+/decl/material/liquid/alcohol/rum
name = "dark rum"
lore_text = "Yohoho and all that."
taste_description = "spiked butterscotch"
@@ -249,7 +256,7 @@
glass_name = "rum"
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
-/decl/material/liquid/ethanol/sake
+/decl/material/liquid/alcohol/sake
name = "sake"
lore_text = "Anime's favorite drink."
taste_description = "dry alcohol"
@@ -262,7 +269,7 @@
glass_name = "sake"
glass_desc = "A glass of sake."
-/decl/material/liquid/ethanol/tequila
+/decl/material/liquid/alcohol/tequila
name = "tequila"
lore_text = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
taste_description = "paint stripper"
@@ -275,7 +282,7 @@
glass_name = "tequila"
glass_desc = "Now all that's missing is the weird colored shades!"
-/decl/material/liquid/ethanol/thirteenloko
+/decl/material/liquid/alcohol/thirteenloko
name = "Thirteen Loko"
lore_text = "A potent mixture of caffeine and alcohol."
taste_description = "jitters and death"
@@ -289,7 +296,7 @@
glass_name = "Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
-/decl/material/liquid/ethanol/thirteenloko/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/alcohol/thirteenloko/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
..()
if(M.has_trait(/decl/trait/metabolically_inert))
@@ -301,7 +308,7 @@
ADJ_STATUS(M, STAT_JITTER, 5)
M.add_chemical_effect(CE_PULSE, 2)
-/decl/material/liquid/ethanol/vermouth
+/decl/material/liquid/alcohol/vermouth
name = "vermouth"
lore_text = "You suddenly feel a craving for a martini..."
taste_description = "dry alcohol"
@@ -315,7 +322,7 @@
glass_name = "vermouth"
glass_desc = "You wonder why you're even drinking this straight."
-/decl/material/liquid/ethanol/vodka
+/decl/material/liquid/alcohol/vodka
name = "vodka"
codex_name = "plain vodka"
lore_text = "Number one drink AND fueling choice for Independents around the galaxy."
@@ -329,7 +336,7 @@
glass_name = "vodka"
glass_desc = "The glass contain wodka. Xynta."
-/decl/material/liquid/ethanol/vodka/premium
+/decl/material/liquid/alcohol/vodka/premium
name = "premium vodka"
codex_name = null
lore_text = "Premium distilled vodka imported directly from the Gilgamesh Colonial Confederation."
@@ -340,7 +347,7 @@
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_ethanol_premiumvodka"
-/decl/material/liquid/ethanol/whiskey
+/decl/material/liquid/alcohol/whiskey
name = "malt whiskey"
lore_text = "A superb and well-aged single-malt whiskey. Damn."
taste_description = "molasses"
@@ -353,7 +360,7 @@
glass_name = "whiskey"
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
-/decl/material/liquid/ethanol/wine
+/decl/material/liquid/alcohol/wine
name = "red wine"
lore_text = "An premium alchoholic beverage made from distilled grape juice."
taste_description = "bitter sweetness"
@@ -366,7 +373,7 @@
glass_name = "red wine"
glass_desc = "A very classy looking drink."
-/decl/material/liquid/ethanol/wine/premium
+/decl/material/liquid/alcohol/wine/premium
name = "white wine"
lore_text = "An exceptionally expensive alchoholic beverage made from distilled white grapes."
taste_description = "white velvet"
@@ -376,7 +383,7 @@
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_ethanol_whitewine"
-/decl/material/liquid/ethanol/herbal
+/decl/material/liquid/alcohol/herbal
name = "herbal liquor"
lore_text = "A complex blend of herbs, spices and roots mingle in this old Earth classic."
taste_description = "a sweet summer garden"
@@ -389,7 +396,7 @@
glass_name = "herbal liquor"
glass_desc = "It's definitely green. Or is it yellow?"
-/decl/material/liquid/ethanol/hooch
+/decl/material/liquid/alcohol/hooch
name = "hooch"
lore_text = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
taste_description = "pure resignation"
@@ -403,7 +410,7 @@
glass_name = "Hooch"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
-/decl/material/liquid/ethanol/irish_cream
+/decl/material/liquid/alcohol/irish_cream
name = "Irish cream"
lore_text = "Whiskey-imbued cream."
taste_description = "creamy alcohol"
@@ -416,7 +423,7 @@
glass_name = "Irish cream"
glass_desc = "It's cream, mixed with whiskey."
-/decl/material/liquid/ethanol/mead
+/decl/material/liquid/alcohol/mead
name = "mead"
lore_text = "A Viking's drink, though a cheap one."
taste_description = "sweet, sweet alcohol"
@@ -430,7 +437,7 @@
glass_name = "mead"
glass_desc = "A Viking's beverage, though a cheap one."
-/decl/material/liquid/ethanol/moonshine
+/decl/material/liquid/alcohol/moonshine
name = "moonshine"
lore_text = "You've really hit rock bottom now... your liver packed its bags and left last night."
taste_description = "bitterness"
@@ -444,7 +451,7 @@
glass_name = "moonshine"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
-/decl/material/liquid/ethanol/pwine
+/decl/material/liquid/alcohol/pwine
name = "poison wine"
lore_text = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!"
taste_description = "purified alcoholic death"
@@ -458,7 +465,7 @@
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_ethanol_poisonwine"
-/decl/material/liquid/ethanol/pwine/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/alcohol/pwine/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
..()
if(M.has_trait(/decl/trait/metabolically_inert))
@@ -476,7 +483,7 @@
else
heart.take_internal_damage(100, 0)
-/decl/material/liquid/ethanol/aged_whiskey // I have no idea what this is and where it comes from. //It comes from Dinnlan now
+/decl/material/liquid/alcohol/aged_whiskey // I have no idea what this is and where it comes from. //It comes from Dinnlan now
name = "aged whiskey"
lore_text = "A well-aged whiskey of high quality. Probably imported. Just a sip'll do it, but that burn will leave you wanting more."
color = "#523600"
@@ -488,7 +495,7 @@
glass_name = "aged whiskey"
glass_desc = "A well-aged whiskey of high quality. Probably imported."
-/decl/material/liquid/ethanol/cider_apple
+/decl/material/liquid/alcohol/cider_apple
name = "apple cider"
lore_text = "A refreshing glass of apple cider."
taste_description = "cool apple cider"
@@ -501,7 +508,7 @@
glass_name = "apple cider"
glass_desc = "A refreshing glass of apple cider."
-/decl/material/liquid/ethanol/cider_pear
+/decl/material/liquid/alcohol/cider_pear
name = "pear cider"
lore_text = "A refreshing glass of pear cider."
taste_description = "cool pear cider"
@@ -514,7 +521,7 @@
glass_name = "pear cider"
glass_desc = "A refreshing glass of pear cider."
-/decl/material/liquid/ethanol/champagne
+/decl/material/liquid/alcohol/champagne
name = "champagne"
lore_text = "Smooth sparkling wine, produced in the same region of France as it has been for centuries."
taste_description = "bitterness and fizz"
@@ -528,7 +535,7 @@
glass_desc = "Sparkling white wine, produced in the same region of France as it has been for centuries."
glass_special = list(DRINK_FIZZ)
-/decl/material/liquid/ethanol/jagermeister
+/decl/material/liquid/alcohol/jagermeister
name = "Jagermeister"
lore_text = "A special blend of alcohol, herbs, and spices. It has remained a popular Earther drink."
taste_description = "herbs, spices, and alcohol"
@@ -541,7 +548,7 @@
glass_name = "jagermeister"
glass_desc = "A special blend of alcohol, herbs, and spices. It has remained a popular Earther drink."
-/decl/material/liquid/ethanol/kvass
+/decl/material/liquid/alcohol/kvass
name = "kvass"
lore_text = "An alcoholic drink commonly made from bread."
taste_description = "vkusnyy kvas, ypa!"
diff --git a/code/modules/reagents/chems/chems_blood.dm b/code/modules/reagents/chems/chems_blood.dm
index e3a08e5b873..ab5f8e6dd8e 100644
--- a/code/modules/reagents/chems/chems_blood.dm
+++ b/code/modules/reagents/chems/chems_blood.dm
@@ -46,12 +46,12 @@
for(var/chem in other_chems)
my_chems[chem] = my_chems[chem] + other_chems[chem]
-/decl/material/liquid/blood/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
+/decl/material/liquid/blood/touch_turf(var/turf/touching_turf, var/amount, var/datum/reagents/holder)
var/data = REAGENT_DATA(holder, type)
- if(!istype(T) || REAGENT_VOLUME(holder, type) < 3)
+ if(!istype(touching_turf) || REAGENT_VOLUME(holder, type) < 3)
return
- var/weakref/W = LAZYACCESS(data, DATA_BLOOD_DONOR)
- blood_splatter(T, W?.resolve() || holder.my_atom, 1)
+ var/weakref/donor = LAZYACCESS(data, DATA_BLOOD_DONOR)
+ blood_splatter(touching_turf, donor?.resolve() || holder.my_atom, 1)
/decl/material/liquid/blood/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
. = ..()
@@ -72,7 +72,7 @@
/decl/material/liquid/blood/get_reagent_color(datum/reagents/holder)
var/list/blood_data = REAGENT_DATA(holder, type)
- return blood_data?["blood_color"] || ..()
+ return blood_data?[DATA_BLOOD_COLOR] || ..()
/decl/material/liquid/coagulated_blood
name = "coagulated blood"
diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm
index 829ba1df5b2..1558ef76762 100644
--- a/code/modules/reagents/chems/chems_compounds.dm
+++ b/code/modules/reagents/chems/chems_compounds.dm
@@ -35,11 +35,11 @@
addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/human, update_eyes)), 5 SECONDS)
. = ..()
-/decl/material/liquid/glowsap/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/glowsap/affect_overdose(mob/living/victim, total_dose)
. = ..()
- M.add_chemical_effect(CE_TOXIN, 1)
- M.set_hallucination(60, 20)
- SET_STATUS_MAX(M, STAT_DRUGGY, 10)
+ victim.add_chemical_effect(CE_TOXIN, 1)
+ victim.set_hallucination(60, 20)
+ SET_STATUS_MAX(victim, STAT_DRUGGY, 10)
/decl/material/solid/blackpepper
name = "black pepper"
diff --git a/code/modules/reagents/chems/chems_drinks.dm b/code/modules/reagents/chems/chems_drinks.dm
index 77c2b2c99d0..eca5276b785 100644
--- a/code/modules/reagents/chems/chems_drinks.dm
+++ b/code/modules/reagents/chems/chems_drinks.dm
@@ -9,6 +9,7 @@
nutriment_factor = 0
hydration_factor = 6
affect_blood_on_ingest = FALSE
+ affect_blood_on_inhale = FALSE
var/adj_dizzy = 0 // Per tick
var/adj_drowsy = 0
@@ -177,15 +178,16 @@
allergen_flags = ALLERGEN_VEGETABLE
/decl/material/liquid/drink/juice/garlic
- name = "garlic juice"
- lore_text = "Who would even drink this?"
+ name = "garlic oil"
+ lore_text = "A strong-smelling, pungent oil pressed from garlic cloves. It has some antibiotic properties, and can help with infections."
taste_description = "bad breath"
nutriment_factor = 1
color = "#eeddcc"
uid = "chem_drink_garlic"
+ antibiotic_strength = 0.65
- glass_name = "garlic juice"
- glass_desc = "Who would even drink juice from garlic?"
+ glass_name = "garlic oil"
+ glass_desc = "A potion of guaranteed bad breath."
allergen_flags = ALLERGEN_ALLIUM
/decl/material/liquid/drink/juice/onion
@@ -307,6 +309,7 @@
taste_description = "creamy milk"
color = "#dfd7af"
uid = "chem_drink_cream"
+ skimmable = TRUE
glass_name = "cream"
glass_desc = "Ewwww..."
@@ -376,9 +379,9 @@
..()
M.add_chemical_effect(CE_PULSE, 2)
-/decl/material/liquid/drink/coffee/affect_overdose(mob/living/M, total_dose)
- ADJ_STATUS(M, STAT_JITTER, 5)
- M.add_chemical_effect(CE_PULSE, 1)
+/decl/material/liquid/drink/coffee/affect_overdose(mob/living/victim, total_dose)
+ ADJ_STATUS(victim, STAT_JITTER, 5)
+ victim.add_chemical_effect(CE_PULSE, 1)
/decl/material/liquid/drink/coffee/build_presentation_name_from_reagents(var/obj/item/prop, var/supplied)
diff --git a/code/modules/reagents/chems/chems_drugs.dm b/code/modules/reagents/chems/chems_drugs.dm
index 9d36a9a5ae3..e9345200297 100644
--- a/code/modules/reagents/chems/chems_drugs.dm
+++ b/code/modules/reagents/chems/chems_drugs.dm
@@ -61,9 +61,9 @@
LAZYSET(holder.reagent_data, type, world.time)
to_chat(M, "You feel invigorated and calm.")
-/decl/material/liquid/nicotine/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/nicotine/affect_overdose(mob/living/victim, total_dose)
..()
- M.add_chemical_effect(CE_PULSE, 2)
+ victim.add_chemical_effect(CE_PULSE, 2)
/decl/material/liquid/sedatives
name = "sedatives"
@@ -253,10 +253,9 @@
if(istype(M))
M.remove_client_color(/datum/client_color/noir/thirdeye)
-/decl/material/liquid/glowsap/gleam/affect_overdose(mob/living/M, total_dose)
- M.take_damage(rand(1, 5), BRAIN)
- if(ishuman(M) && prob(10))
- var/mob/living/human/H = M
- H.seizure()
+/decl/material/liquid/glowsap/gleam/affect_overdose(mob/living/victim, total_dose)
+ victim.take_damage(rand(1, 5), BRAIN)
+ if(prob(10))
+ victim.seizure()
if(prob(10))
- to_chat(M, SPAN_DANGER("[pick(overdose_messages)]"))
+ to_chat(victim, SPAN_DANGER("[pick(overdose_messages)]"))
diff --git a/code/modules/reagents/chems/chems_herbal.dm b/code/modules/reagents/chems/chems_herbal.dm
index f9f7d7bb480..676142113fb 100644
--- a/code/modules/reagents/chems/chems_herbal.dm
+++ b/code/modules/reagents/chems/chems_herbal.dm
@@ -15,10 +15,16 @@
/decl/material/liquid/antitoxins/ginseng
name = "powdered ginseng"
uid = "chem_antitoxins_herbal"
- lore_text = "Ginseng root has curative properties and encourages organ recovery after poisoning."
+ lore_text = "Ginseng root has curative properties and encourages organ recovery and restoration of blood volume after poisoning or blood loss."
taste_description = "bitter herbs"
antitoxin_strength = 0.35
+/decl/material/liquid/antitoxins/ginseng/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
+ . = ..()
+ if(M.has_trait(/decl/trait/metabolically_inert))
+ return
+ M.add_chemical_effect(CE_BLOODRESTORE, 8 * removed)
+
/decl/material/liquid/sedatives/valerian
name = "powdered valerian flower"
uid = "chem_sedatives_herbal"
diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm
index 5724175fbce..7b8357a1767 100644
--- a/code/modules/reagents/chems/chems_medicines.dm
+++ b/code/modules/reagents/chems/chems_medicines.dm
@@ -52,14 +52,12 @@
uid = "chem_styptic"
var/effectiveness = 1
-/decl/material/liquid/brute_meds/affect_overdose(mob/living/M, var/datum/reagents/holder)
+/decl/material/liquid/brute_meds/affect_overdose(mob/living/victim, total_dose)
..()
- if(ishuman(M))
- M.add_chemical_effect(CE_BLOCKAGE, (15 + REAGENT_VOLUME(holder, type))/100)
- var/mob/living/human/H = M
- for(var/obj/item/organ/external/E in H.get_external_organs())
- if(E.status & ORGAN_ARTERY_CUT && prob(2 + REAGENT_VOLUME(holder, type) / overdose))
- E.status &= ~ORGAN_ARTERY_CUT
+ victim.add_chemical_effect(CE_BLOCKAGE, (15 + total_dose) / 100)
+ for(var/obj/item/organ/external/limb in victim.get_external_organs())
+ if((limb.status & ORGAN_ARTERY_CUT) && prob(2 + total_dose / overdose))
+ limb.status &= ~ORGAN_ARTERY_CUT
//This is a logistic function that effectively doubles the healing rate as brute amounts get to around 200. Any injury below 60 is essentially unaffected and there's a scaling inbetween.
#define ADJUSTED_REGEN_VAL(X) (6+(6/(1+200*2.71828**(-0.05*(X)))))
@@ -169,12 +167,10 @@
if(immunity_to_add > 0)
M.adjust_immunity(immunity_to_add) // Rapidly brings someone up to half immunity.
-/decl/material/liquid/immunobooster/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/immunobooster/affect_overdose(mob/living/victim, total_dose)
..()
- M.add_chemical_effect(CE_TOXIN, 1)
- var/mob/living/human/H = M
- if(istype(H))
- M.adjust_immunity(-0.5)
+ victim.add_chemical_effect(CE_TOXIN, 1)
+ victim.adjust_immunity(-0.5)
/decl/material/liquid/stimulants
name = "stimulants"
@@ -236,25 +232,16 @@
overdose = REAGENTS_OVERDOSE/2
scannable = 1
value = 1.5
+ antibiotic_strength = 1
exoplanet_rarity_gas = MAT_RARITY_EXOTIC
uid = "chem_antibiotics"
-/decl/material/liquid/antibiotics/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder)
- var/volume = REAGENT_VOLUME(holder, type)
- . = ..()
- M.adjust_immunity(-0.1)
- M.add_chemical_effect(CE_ANTIBIOTIC, 1)
- if(volume > 10)
- M.adjust_immunity(-0.3)
- if(LAZYACCESS(M.chem_doses, type) > 15)
- M.adjust_immunity(-0.25)
-
-/decl/material/liquid/antibiotics/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/antibiotics/affect_overdose(mob/living/victim, total_dose)
..()
- M.adjust_immunity(-0.5)
- M.immunity = max(M.immunity - 0.25, 0)
+ victim.adjust_immunity(-0.5)
+ victim.immunity = max(victim.immunity - 0.25, 0)
if(prob(2))
- M.immunity_norm = max(M.immunity_norm - 1, 0)
+ victim.immunity_norm = max(victim.immunity_norm - 1, 0)
/decl/material/liquid/retrovirals
name = "retrovirals"
@@ -267,14 +254,12 @@
exoplanet_rarity_gas = MAT_RARITY_EXOTIC
uid = "chem_retrovirals"
-/decl/material/liquid/retrovirals/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/retrovirals/affect_overdose(mob/living/victim, total_dose)
. = ..()
- if(ishuman(M))
- var/mob/living/human/H = M
- for(var/obj/item/organ/external/E in H.get_external_organs())
- if(!BP_IS_PROSTHETIC(E) && prob(25) && !(E.status & ORGAN_MUTATED))
- E.mutate()
- E.limb_flags |= ORGAN_FLAG_DEFORMED
+ for(var/obj/item/organ/external/limb in victim.get_external_organs())
+ if(!BP_IS_PROSTHETIC(limb) && prob(25) && !(limb.status & ORGAN_MUTATED))
+ limb.mutate()
+ limb.limb_flags |= ORGAN_FLAG_DEFORMED
/decl/material/liquid/retrovirals/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder)
. = ..()
@@ -413,8 +398,8 @@
break
..()
-/decl/material/liquid/clotting_agent/affect_overdose(mob/living/M, total_dose)
- var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(M, BP_HEART)
+/decl/material/liquid/clotting_agent/affect_overdose(mob/living/victim, total_dose)
+ var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(victim, BP_HEART)
if(heart && prob(25))
heart.take_general_damage(rand(1,3))
return ..()
diff --git a/code/modules/reagents/chems/chems_nutriment.dm b/code/modules/reagents/chems/chems_nutriment.dm
index 802b96c7992..cc0774431ca 100644
--- a/code/modules/reagents/chems/chems_nutriment.dm
+++ b/code/modules/reagents/chems/chems_nutriment.dm
@@ -12,6 +12,8 @@
fishing_bait_value = 0.65
compost_value = 1
nutriment_factor = 10
+ affect_blood_on_ingest = 0
+ affect_blood_on_inhale = 0
// Technically a room-temperature solid, but saves
// repathing it to /solid all over the codebase.
@@ -60,19 +62,6 @@
uid = "chem_nutriment_plant"
allergen_flags = ALLERGEN_VEGETABLE
-/decl/material/liquid/nutriment/plant_oil
- name = "plant oil"
- lore_text = "A thin yellow oil pressed from vegetables or nuts. Useful as fuel, or in cooking."
- uid = "chem_nutriment_plant_oil"
- melting_point = 273
- boiling_point = 373
- taste_description = "oily blandness"
- burn_product = /decl/material/gas/carbon_monoxide
- ignition_point = T0C+150
- accelerant_value = FUEL_VALUE_ACCELERANT
- gas_flags = XGM_GAS_FUEL
- allergen_flags = ALLERGEN_VEGETABLE
-
/decl/material/liquid/nutriment/honey
name = "honey"
lore_text = "A golden yellow syrup, loaded with sugary sweetness."
@@ -94,9 +83,9 @@
uid = "chem_nutriment_flour"
allergen_flags = ALLERGEN_GLUTEN
-/decl/material/liquid/nutriment/flour/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
+/decl/material/liquid/nutriment/flour/touch_turf(var/turf/touching_turf, var/amount, var/datum/reagents/holder)
..()
- new /obj/effect/decal/cleanable/flour(T)
+ new /obj/effect/decal/cleanable/flour(touching_turf)
/decl/material/liquid/nutriment/batter
name = "batter"
@@ -113,9 +102,9 @@
boiling_point = 373
allergen_flags = ALLERGEN_EGG | ALLERGEN_GLUTEN
-/decl/material/liquid/nutriment/batter/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
+/decl/material/liquid/nutriment/batter/touch_turf(var/turf/touching_turf, var/amount, var/datum/reagents/holder)
..()
- new /obj/effect/decal/cleanable/pie_smudge(T)
+ new /obj/effect/decal/cleanable/pie_smudge(touching_turf)
/decl/material/liquid/nutriment/batter/cakebatter
name = "cake batter"
@@ -307,19 +296,6 @@
boiling_point = 373
allergen_flags = ALLERGEN_FRUIT
-/decl/material/liquid/nutriment/cornoil
- name = "corn oil"
- lore_text = "An oil derived from various types of corn."
- taste_description = "slime"
- taste_mult = 0.1
- nutriment_factor = 20
- color = "#302000"
- slipperiness = 8
- uid = "chem_nutriment_cornoil"
- melting_point = 273
- boiling_point = 373
- allergen_flags = ALLERGEN_VEGETABLE
-
/decl/material/liquid/nutriment/sprinkles
name = "sprinkles"
lore_text = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
diff --git a/code/modules/reagents/chems/chems_oil.dm b/code/modules/reagents/chems/chems_oil.dm
new file mode 100644
index 00000000000..ad359dd61ca
--- /dev/null
+++ b/code/modules/reagents/chems/chems_oil.dm
@@ -0,0 +1,52 @@
+/decl/material/liquid/oil
+ name = "fuel oil" // paraffin etc
+ lore_text = "Clarified fuel oil, perfect for fuelling a lantern."
+ burn_product = /decl/material/gas/carbon_monoxide
+ ignition_point = T0C+150
+ accelerant_value = FUEL_VALUE_ACCELERANT
+ gas_flags = XGM_GAS_FUEL
+ melting_point = 273
+ boiling_point = 373
+ uid = "chem_oil_lamp"
+ color = "#664330"
+ value = 1.5
+ fishing_bait_value = 0
+ taste_mult = 4
+ metabolism = REM * 4
+ exoplanet_rarity_gas = MAT_RARITY_NOWHERE
+ affect_blood_on_ingest = 0
+ affect_blood_on_inhale = 0
+ slipperiness = 8
+
+/decl/material/liquid/oil/plant
+ name = "plant oil"
+ lore_text = "A thin yellow oil pressed from vegetables or nuts. Useful as fuel, or in cooking."
+ uid = "chem_oil_plant"
+ taste_description = "oily blandness"
+ allergen_flags = ALLERGEN_VEGETABLE
+ compost_value = 1
+ nutriment_factor = 8
+
+/decl/material/liquid/oil/plant/corn
+ name = "corn oil"
+ lore_text = "An oil derived from various types of corn."
+ taste_description = "slime"
+ nutriment_factor = 20
+ color = "#302000"
+ uid = "chem_oil_corn"
+ taste_mult = 0.1
+
+/decl/material/liquid/oil/fish
+ name = "fish oil"
+ lore_text = "A pungent yellow oil pressed from fish meat and fish skin. Useful as fuel, or in cooking, or for encouraging recovery after brain injuries."
+ uid = "chem_oil_fish"
+ taste_description = "pungent, oily fish"
+ allergen_flags = ALLERGEN_FISH
+ compost_value = 1
+ nutriment_factor = 6
+
+// Copied from neuroannealer; yes, it's silly, but we need a way to treat brain damage on the medieval map.
+// Should possibly be an ingredient rather than the be-all end-all medication.
+/decl/material/liquid/oil/fish/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder)
+ . = ..()
+ M.add_chemical_effect(CE_BRAIN_REGEN, 0.5) // Half as effective as neuroannealer, without the side-effects.
diff --git a/code/modules/reagents/chems/chems_painkillers.dm b/code/modules/reagents/chems/chems_painkillers.dm
index dc75c84c4ad..8ab62f4048f 100644
--- a/code/modules/reagents/chems/chems_painkillers.dm
+++ b/code/modules/reagents/chems/chems_painkillers.dm
@@ -112,17 +112,17 @@
M.add_chemical_effect(CE_ALCOHOL_TOXIC, 1)
M.add_chemical_effect(CE_BREATHLOSS, 1 * boozed) //drinking and opiating suppresses breathing.
-/decl/material/liquid/painkillers/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/painkillers/affect_overdose(mob/living/victim, total_dose)
..()
- M.add_chemical_effect(CE_PAINKILLER, pain_power*0.5) //extra painkilling for extra trouble
+ victim.add_chemical_effect(CE_PAINKILLER, pain_power*0.5) //extra painkilling for extra trouble
if(narcotic)
- SET_STATUS_MAX(M, STAT_DRUGGY, 10)
- M.set_hallucination(120, 30)
- M.add_chemical_effect(CE_BREATHLOSS, breathloss_severity*2) //ODing on opiates can be deadly.
- if(isboozed(M))
- M.add_chemical_effect(CE_BREATHLOSS, breathloss_severity*4) //Don't drink and OD on opiates folks
+ SET_STATUS_MAX(victim, STAT_DRUGGY, 10)
+ victim.set_hallucination(120, 30)
+ victim.add_chemical_effect(CE_BREATHLOSS, breathloss_severity*2) //ODing on opiates can be deadly.
+ if(isboozed(victim))
+ victim.add_chemical_effect(CE_BREATHLOSS, breathloss_severity*4) //Don't drink and OD on opiates folks
else
- M.add_chemical_effect(CE_TOXIN, 1)
+ victim.add_chemical_effect(CE_TOXIN, 1)
/decl/material/liquid/painkillers/proc/isboozed(var/mob/living/M)
. = 0
@@ -132,7 +132,7 @@
if(ingested)
var/list/pool = M.reagents.reagent_volumes | ingested.reagent_volumes
for(var/rtype in pool)
- var/decl/material/liquid/ethanol/booze = GET_DECL(rtype)
+ var/decl/material/liquid/alcohol/booze = GET_DECL(rtype)
if(!istype(booze) ||LAZYACCESS(M.chem_doses, rtype) < 2) //let them experience false security at first
continue
. = 1
diff --git a/code/modules/reagents/chems/chems_pigments.dm b/code/modules/reagents/chems/chems_pigments.dm
index d110680a76e..55c6be4c47c 100644
--- a/code/modules/reagents/chems/chems_pigments.dm
+++ b/code/modules/reagents/chems/chems_pigments.dm
@@ -85,9 +85,9 @@
painting.reset_color()
painting.set_alpha(keep_alpha)
-/decl/material/liquid/paint_stripper/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
- if(istype(T) && !isspaceturf(T))
- remove_paint(T, holder)
+/decl/material/liquid/paint_stripper/touch_turf(var/turf/touching_turf, var/amount, var/datum/reagents/holder)
+ if(istype(touching_turf) && !isspaceturf(touching_turf))
+ remove_paint(touching_turf, holder)
/decl/material/liquid/paint_stripper/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder)
if(istype(O))
@@ -107,20 +107,20 @@
uid = "chem_pigment_paint"
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/liquid/paint/proc/apply_paint(var/atom/painting, var/datum/reagents/holder)
- if(istype(painting) && istype(holder))
+/decl/material/liquid/paint/proc/apply_paint(var/atom/painting, var/datum/reagents/holder, var/threshold = 1)
+ if(istype(painting) && istype(holder) && REAGENT_VOLUME(holder, type) >= threshold)
var/keep_alpha = painting.alpha
painting.set_color(holder.get_color())
painting.set_alpha(keep_alpha)
-/decl/material/liquid/paint/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
- if(istype(T) && !isspaceturf(T))
- apply_paint(T, holder)
+/decl/material/liquid/paint/touch_turf(var/turf/touching_turf, var/amount, var/datum/reagents/holder)
+ if(istype(touching_turf) && !isspaceturf(touching_turf))
+ apply_paint(touching_turf, holder, FLUID_MINIMUM_TRANSFER)
/decl/material/liquid/paint/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder)
if(istype(O))
- apply_paint(O, holder)
+ apply_paint(O, holder, O.get_object_size())
/decl/material/liquid/paint/touch_mob(var/mob/living/M, var/amount, var/datum/reagents/holder)
if(istype(M))
- apply_paint(M, holder)
\ No newline at end of file
+ apply_paint(M, holder, M.get_object_size())
diff --git a/code/modules/reagents/chems/random/chems_random.dm b/code/modules/reagents/chems/random/chems_random.dm
index 15eb9b92bf1..8efa3b54f8b 100644
--- a/code/modules/reagents/chems/random/chems_random.dm
+++ b/code/modules/reagents/chems/random/chems_random.dm
@@ -7,7 +7,7 @@ var/global/list/random_chem_interaction_blacklist = list(
/decl/material/liquid/drink,
/decl/material/liquid/random,
/decl/material/solid/phoron,
- /decl/material/liquid/ethanol // Includes alcoholic beverages
+ /decl/material/liquid/alcohol // Includes alcoholic beverages
)
#define FOR_ALL_EFFECTS \
diff --git a/code/modules/reagents/chems/random/random_effects.dm b/code/modules/reagents/chems/random/random_effects.dm
index af118872c97..0ef001eb16a 100644
--- a/code/modules/reagents/chems/random/random_effects.dm
+++ b/code/modules/reagents/chems/random/random_effects.dm
@@ -227,7 +227,7 @@
mode = RANDOM_CHEM_EFFECT_INT
desc = "acute toxicity"
-/decl/random_chem_effect/random_properties/heal_brute/affect_blood(var/mob/living/M, var/removed, var/value)
+/decl/random_chem_effect/random_properties/tox_damage/affect_blood(var/mob/living/M, var/removed, var/value)
M.take_damage(value * removed, TOX)
/decl/random_chem_effect/random_properties/heal_brute
@@ -243,7 +243,7 @@
maximum = 10
desc = "burn repair"
-/decl/random_chem_effect/random_properties/heal_brute/affect_blood(var/mob/living/M, var/removed, var/value)
+/decl/random_chem_effect/random_properties/heal_burns/affect_blood(var/mob/living/M, var/removed, var/value)
M.heal_organ_damage(0, removed * value)
#undef RANDOM_CHEM_EFFECT_TRUE
diff --git a/code/modules/reagents/cocktails.dm b/code/modules/reagents/cocktails.dm
index 6e5effe3da2..b1c3a79b910 100644
--- a/code/modules/reagents/cocktails.dm
+++ b/code/modules/reagents/cocktails.dm
@@ -104,7 +104,7 @@
description = "Watered-down rum. Pirate approved!"
ratios = list(
/decl/material/liquid/water = 1,
- /decl/material/liquid/ethanol/rum = 1
+ /decl/material/liquid/alcohol/rum = 1
)
/decl/cocktail/screwdriver
@@ -112,7 +112,7 @@
description = "A classic mixture of vodka and orange juice. Just the thing for the tired engineer."
ratios = list(
/decl/material/liquid/drink/juice/orange = 4,
- /decl/material/liquid/ethanol/vodka = 1
+ /decl/material/liquid/alcohol/vodka = 1
)
/decl/cocktail/tequila_sunrise
@@ -120,39 +120,39 @@
description = "A simple cocktail of tequila and orange juice. Much like a screwdriver."
ratios = list(
/decl/material/liquid/drink/juice/orange = 4,
- /decl/material/liquid/ethanol/tequila = 1
+ /decl/material/liquid/alcohol/tequila = 1
)
/decl/cocktail/classic_martini
name = "gin martini"
description = "Vermouth with gin. The classiest of all cocktails."
ratios = list(
- /decl/material/liquid/ethanol/gin = 4,
- /decl/material/liquid/ethanol/vermouth = 1
+ /decl/material/liquid/alcohol/gin = 4,
+ /decl/material/liquid/alcohol/vermouth = 1
)
/decl/cocktail/vodka_martini
name = "vodka martini"
description = "A bastardisation of the classic martini. Still great."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 4,
- /decl/material/liquid/ethanol/vermouth = 1
+ /decl/material/liquid/alcohol/vodka = 4,
+ /decl/material/liquid/alcohol/vermouth = 1
)
/decl/cocktail/allies_cocktail
name = "Allies Cocktail"
description = "A drink made from your allies, not as sweet as when made from your enemies."
ratios = list(
- /decl/material/liquid/ethanol/vermouth = 2,
- /decl/material/liquid/ethanol/vodka = 2,
- /decl/material/liquid/ethanol/gin = 2
+ /decl/material/liquid/alcohol/vermouth = 2,
+ /decl/material/liquid/alcohol/vodka = 2,
+ /decl/material/liquid/alcohol/gin = 2
)
/decl/cocktail/bilk
name = "bilk"
description = "A foul brew of milk and beer. For alcoholics who fear osteoporosis."
ratios = list(
- /decl/material/liquid/ethanol/beer = 1,
+ /decl/material/liquid/alcohol/beer = 1,
/decl/material/liquid/drink/milk = 1
)
@@ -161,7 +161,7 @@
description = "A mild cocktail, widely considered an all-time classic."
ratios = list(
/decl/material/liquid/drink/tonic = 4,
- /decl/material/liquid/ethanol/gin = 1
+ /decl/material/liquid/alcohol/gin = 1
)
/decl/cocktail/cuba_libre
@@ -169,24 +169,24 @@
description = "A classic mix of rum and cola."
ratios = list(
/decl/material/liquid/drink/cola = 4,
- /decl/material/liquid/ethanol/rum = 1
+ /decl/material/liquid/alcohol/rum = 1
)
/decl/cocktail/black_russian
name = "black Russian"
description = "Similar to a white Russian, but fit for the lactose-intolerant."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 2,
- /decl/material/liquid/ethanol/coffee = 1
+ /decl/material/liquid/alcohol/vodka = 2,
+ /decl/material/liquid/alcohol/coffee = 1
)
/decl/cocktail/white_russian
name = "white Russian"
description = "A straightforward cocktail of coffee liqueur and vodka. Popular in a lot of places, but that's just, like, an opinion, man."
ratios = list(
- /decl/material/liquid/ethanol/coffee = 2,
+ /decl/material/liquid/alcohol/coffee = 2,
/decl/material/liquid/drink/milk/cream,
- /decl/material/liquid/ethanol/vodka = 1
+ /decl/material/liquid/alcohol/vodka = 1
)
/decl/cocktail/whiskey_cola
@@ -194,7 +194,7 @@
description = "Whiskey mixed with cola. Quite refreshing."
ratios = list(
/decl/material/liquid/drink/cola = 4,
- /decl/material/liquid/ethanol/whiskey = 1
+ /decl/material/liquid/alcohol/whiskey = 1
)
/decl/cocktail/bloody_mary
@@ -202,7 +202,7 @@
description = "A cocktail of vodka, tomato and lime juice. Celery stalk optional."
ratios = list(
/decl/material/liquid/drink/juice/tomato = 3,
- /decl/material/liquid/ethanol/vodka = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
/decl/material/liquid/drink/juice/lime = 1
)
@@ -210,10 +210,10 @@
name = "The Livergeist"
description = "A cocktail pioneered by a small cabal with a vendetta against the liver. Drink very carefully."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 1,
- /decl/material/liquid/ethanol/gin = 1,
- /decl/material/liquid/ethanol/aged_whiskey = 1,
- /decl/material/liquid/ethanol/cognac = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
+ /decl/material/liquid/alcohol/gin = 1,
+ /decl/material/liquid/alcohol/aged_whiskey = 1,
+ /decl/material/liquid/alcohol/cognac = 1,
/decl/material/liquid/drink/juice/lime = 1
)
@@ -221,16 +221,16 @@
name = "Brave Bull"
description = "A strong cocktail of tequila and coffee liquor."
ratios = list(
- /decl/material/liquid/ethanol/tequila = 2,
- /decl/material/liquid/ethanol/coffee = 1
+ /decl/material/liquid/alcohol/tequila = 2,
+ /decl/material/liquid/alcohol/coffee = 1
)
/decl/cocktail/toxins_special
name = "Toxins Special"
description = "Raise a glass to the bomb technicians of yesteryear, wherever their ashes now reside."
ratios = list(
- /decl/material/liquid/ethanol/rum = 1,
- /decl/material/liquid/ethanol/vermouth = 1,
+ /decl/material/liquid/alcohol/rum = 1,
+ /decl/material/liquid/alcohol/vermouth = 1,
/decl/material/solid/phoron
)
@@ -238,7 +238,7 @@
name = "Beepsky Smash"
description = "A cocktail originating with stationside security forces. Rumoured to take the edge off being stunned with your own baton."
ratios = list(
- /decl/material/liquid/ethanol/whiskey = 2,
+ /decl/material/liquid/alcohol/whiskey = 2,
/decl/material/liquid/drink/juice/lime = 1,
/decl/material/solid/metal/iron
)
@@ -258,8 +258,8 @@
name = "The Manly Dorf"
description = "A cocktail of old that claims to be for manly men, but is mostly for people who can't tell beer and ale apart."
ratios = list(
- /decl/material/liquid/ethanol/ale = 1,
- /decl/material/liquid/ethanol/beer = 1
+ /decl/material/liquid/alcohol/ale = 1,
+ /decl/material/liquid/alcohol/beer = 1
)
/decl/cocktail/irish_coffee
@@ -267,16 +267,16 @@
description = "A cocktail of coffee, whiskey and cream, just the thing to kick you awake while also dulling the pain of existence."
ratios = list(
/decl/material/liquid/drink/coffee = 4,
- /decl/material/liquid/ethanol/irish_cream = 1
+ /decl/material/liquid/alcohol/irish_cream = 1
)
/decl/cocktail/b52
name = "B-52"
description = "A semi-modern spin on an Irish coffee, featuring a dash of cognac. It will get you bombed."
ratios = list(
- /decl/material/liquid/ethanol/coffee = 1,
- /decl/material/liquid/ethanol/irish_cream = 1,
- /decl/material/liquid/ethanol/cognac = 1
+ /decl/material/liquid/alcohol/coffee = 1,
+ /decl/material/liquid/alcohol/irish_cream = 1,
+ /decl/material/liquid/alcohol/cognac = 1
)
order_specific = TRUE // layered cocktail
@@ -284,9 +284,9 @@
name = "Atomic Bomb"
description = "A radioactive take on a B-52, popularized by asteroid miners with prosthetic organs and something to prove."
ratios = list(
- /decl/material/liquid/ethanol/coffee = 1,
- /decl/material/liquid/ethanol/irish_cream = 1,
- /decl/material/liquid/ethanol/cognac = 1,
+ /decl/material/liquid/alcohol/coffee = 1,
+ /decl/material/liquid/alcohol/irish_cream = 1,
+ /decl/material/liquid/alcohol/cognac = 1,
/decl/material/solid/metal/uranium
)
order_specific = TRUE // layered cocktail
@@ -296,7 +296,7 @@
name = "margarita"
description = "A classic cocktail of antiquity."
ratios = list(
- /decl/material/liquid/ethanol/tequila = 3,
+ /decl/material/liquid/alcohol/tequila = 3,
/decl/material/liquid/drink/juice/lime = 1
)
@@ -305,10 +305,10 @@
description = "Most of the liquor cabinet, brought together in a delicious mix. Designed for middle-aged alcoholics."
ratios = list(
/decl/material/liquid/drink/cola = 2,
- /decl/material/liquid/ethanol/rum = 1,
- /decl/material/liquid/ethanol/vodka = 1,
- /decl/material/liquid/ethanol/gin = 1,
- /decl/material/liquid/ethanol/tequila = 1
+ /decl/material/liquid/alcohol/rum = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
+ /decl/material/liquid/alcohol/gin = 1,
+ /decl/material/liquid/alcohol/tequila = 1
)
/decl/cocktail/threemileisland
@@ -316,10 +316,10 @@
description = "Much like the Atomic Bomb, this cocktail was adapted by asteroid miners who couldn't enjoy a drink without a dose of radiation poisoning."
ratios = list(
/decl/material/liquid/drink/cola = 2,
- /decl/material/liquid/ethanol/rum = 1,
- /decl/material/liquid/ethanol/vodka = 1,
- /decl/material/liquid/ethanol/gin = 1,
- /decl/material/liquid/ethanol/tequila = 1,
+ /decl/material/liquid/alcohol/rum = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
+ /decl/material/liquid/alcohol/gin = 1,
+ /decl/material/liquid/alcohol/tequila = 1,
/decl/material/solid/metal/uranium
)
@@ -328,23 +328,23 @@
description = "A simple cocktail, considered to be cultured and refined."
ratios = list(
/decl/material/liquid/drink/sodawater = 4,
- /decl/material/liquid/ethanol/whiskey = 1
+ /decl/material/liquid/alcohol/whiskey = 1
)
/decl/cocktail/manhattan
name = "Manhattan"
description = "Another classic cocktail of antiquity. Popular with private investigators."
ratios = list(
- /decl/material/liquid/ethanol/whiskey = 2,
- /decl/material/liquid/ethanol/vermouth = 1
+ /decl/material/liquid/alcohol/whiskey = 2,
+ /decl/material/liquid/alcohol/vermouth = 1
)
/decl/cocktail/manhattan_proj
name = "Manhattan Project"
description = "A classic cocktail with a spicy twist, pioneered by a robot detective."
ratios = list(
- /decl/material/liquid/ethanol/whiskey = 2,
- /decl/material/liquid/ethanol/vermouth = 1,
+ /decl/material/liquid/alcohol/whiskey = 2,
+ /decl/material/liquid/alcohol/vermouth = 1,
/decl/material/solid/metal/uranium
)
@@ -353,14 +353,14 @@
description = "A simple, refreshing cocktail with a kick to it."
ratios = list(
/decl/material/liquid/drink/tonic = 4,
- /decl/material/liquid/ethanol/vodka = 1
+ /decl/material/liquid/alcohol/vodka = 1
)
/decl/cocktail/gin_fizz
name = "gin fizz"
description = "A dry, refreshing cocktail with a tang of lime."
ratios = list(
- /decl/material/liquid/ethanol/gin = 2,
+ /decl/material/liquid/alcohol/gin = 2,
/decl/material/liquid/drink/sodawater = 2,
/decl/material/liquid/drink/juice/lime = 1
)
@@ -369,7 +369,7 @@
name = "Bahama Mama"
description = "A sweet tropical cocktail that is deceptively strong."
ratios = list(
- /decl/material/liquid/ethanol/rum = 2,
+ /decl/material/liquid/alcohol/rum = 2,
/decl/material/liquid/drink/juice/orange = 2,
/decl/material/liquid/drink/juice/lime = 2,
/decl/material/liquid/drink/grenadine = 1
@@ -379,8 +379,8 @@
name = "Singulo"
description = "Traditionally thrown together from maintenance stills and used to treat singularity exposure in engineers who forgot their meson goggles."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 1,
- /decl/material/liquid/ethanol/wine = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
+ /decl/material/liquid/alcohol/wine = 1,
/decl/material/solid/metal/radium
)
@@ -388,7 +388,7 @@
name = "Demon's Blood"
description = "A ghoulish cocktail that originated as a practical joke in a fringe habitat."
ratios = list(
- /decl/material/liquid/ethanol/rum = 2,
+ /decl/material/liquid/alcohol/rum = 2,
/decl/material/liquid/drink/citrussoda = 2,
/decl/material/liquid/drink/cherrycola = 2,
/decl/material/liquid/blood = 1
@@ -399,7 +399,7 @@
description = "A thick and creamy cocktail."
ratios = list(
/decl/material/liquid/drink/milk/cream = 2,
- /decl/material/liquid/ethanol/rum = 2,
+ /decl/material/liquid/alcohol/rum = 2,
/decl/material/liquid/drink/juice/banana = 1,
/decl/material/liquid/drink/juice/watermelon = 1
)
@@ -408,7 +408,7 @@
name = "Anti-freeze"
description = "A chilled cocktail invented and popularized by corona miners."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 3,
+ /decl/material/liquid/alcohol/vodka = 3,
/decl/material/liquid/drink/milk/cream = 2,
/decl/material/solid/ice = 2
)
@@ -417,7 +417,7 @@
name = "Barefoot"
description = "A smooth cocktail that will take your mind off the broken glass you stepped on."
ratios = list(
- /decl/material/liquid/ethanol/vermouth = 4,
+ /decl/material/liquid/alcohol/vermouth = 4,
/decl/material/liquid/drink/juice/berry = 2,
/decl/material/liquid/drink/milk/cream = 1
)
@@ -426,7 +426,7 @@
name = "sbiten"
description = "A form of spiced mead that will bring tears to the eyes of the most hardened drinker."
ratios = list(
- /decl/material/liquid/ethanol/mead = 9,
+ /decl/material/liquid/alcohol/mead = 9,
/decl/material/liquid/capsaicin = 1
)
@@ -434,7 +434,7 @@
name = "red mead"
description = "Supposedly a traditional drink amongst mercenary groups prior to dangerous missions."
ratios = list(
- /decl/material/liquid/ethanol/mead = 1,
+ /decl/material/liquid/alcohol/mead = 1,
/decl/material/liquid/blood = 1
)
@@ -442,7 +442,7 @@
name = "Acid Spit"
description = "A cocktail inspired by monsters of legend, popular with college students daring their friends to drink one."
ratios = list(
- /decl/material/liquid/ethanol/wine = 1,
+ /decl/material/liquid/alcohol/wine = 1,
/decl/material/liquid/acid
)
@@ -454,17 +454,17 @@
/decl/material/liquid/drink/juice/orange = 2,
/decl/material/liquid/drink/juice/lime = 1,
/decl/material/liquid/drink/juice/lemon = 1,
- /decl/material/liquid/ethanol/vodka = 1
+ /decl/material/liquid/alcohol/vodka = 1
)
/decl/cocktail/neurotoxin
name = "Neurotoxin"
description = "A cocktail primarily intended for people with a grudge against their own brain."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 1,
- /decl/material/liquid/ethanol/gin = 1,
- /decl/material/liquid/ethanol/aged_whiskey = 1,
- /decl/material/liquid/ethanol/cognac = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
+ /decl/material/liquid/alcohol/gin = 1,
+ /decl/material/liquid/alcohol/aged_whiskey = 1,
+ /decl/material/liquid/alcohol/cognac = 1,
/decl/material/liquid/drink/juice/lime = 1,
/decl/material/liquid/sedatives
)
@@ -474,16 +474,16 @@
description = "A tangy, fizzy twist on beer."
ratios = list(
/decl/material/liquid/drink/lemon_lime = 3,
- /decl/material/liquid/ethanol/beer = 1
+ /decl/material/liquid/alcohol/beer = 1
)
/decl/cocktail/irishslammer
name = "Irish Slammer"
description = "A rich cocktail of whiskey, stout and cream that was performed using a shot glass before glass-interleaving technology was lost."
ratios = list(
- /decl/material/liquid/ethanol/ale = 5,
- /decl/material/liquid/ethanol/whiskey = 1,
- /decl/material/liquid/ethanol/irish_cream = 1
+ /decl/material/liquid/alcohol/ale = 5,
+ /decl/material/liquid/alcohol/whiskey = 1,
+ /decl/material/liquid/alcohol/irish_cream = 1
)
// A whiskey cola with added beer.
@@ -491,8 +491,8 @@
name = "Syndicate Bomb"
description = "A murky cocktail reputed to have originated in criminal circles. It will definitely get you bombed."
ratios = list(
- /decl/material/liquid/ethanol/whiskey = 1,
- /decl/material/liquid/ethanol/beer = 1,
+ /decl/material/liquid/alcohol/whiskey = 1,
+ /decl/material/liquid/alcohol/beer = 1,
/decl/material/liquid/drink/cola = 4
)
@@ -500,19 +500,19 @@
name = "Devil's Kiss"
description = "A ghoulish cocktail popular in some of the weirder dive bars on the system fringe."
ratios = list(
- /decl/material/liquid/ethanol/rum = 4,
+ /decl/material/liquid/alcohol/rum = 4,
/decl/material/liquid/blood = 1,
- /decl/material/liquid/ethanol/coffee = 2
+ /decl/material/liquid/alcohol/coffee = 2
)
/decl/cocktail/hippiesdelight
name = "Hippy's Delight"
description = "A complex cocktail that just might open your third eye."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 1,
- /decl/material/liquid/ethanol/gin = 1,
- /decl/material/liquid/ethanol/aged_whiskey = 1,
- /decl/material/liquid/ethanol/cognac = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
+ /decl/material/liquid/alcohol/gin = 1,
+ /decl/material/liquid/alcohol/aged_whiskey = 1,
+ /decl/material/liquid/alcohol/cognac = 1,
/decl/material/liquid/drink/juice/lime = 1,
/decl/material/liquid/psychotropics = 2
)
@@ -531,7 +531,7 @@
description = "A smooth, steady cocktail supposedly ordered by sawbones and surgeons of legend."
ratios = list(
/decl/material/liquid/drink/cherrycola = 4,
- /decl/material/liquid/ethanol/rum = 2
+ /decl/material/liquid/alcohol/rum = 2
)
/decl/cocktail/vodkacola
@@ -539,14 +539,14 @@
description = "A simple mix of cola and vodka, combining sweetness, fizz and a kick in the teeth."
ratios = list(
/decl/material/liquid/drink/cola = 2,
- /decl/material/liquid/ethanol/vodka = 1
+ /decl/material/liquid/alcohol/vodka = 1
)
/decl/cocktail/sawbonesdismay
name = "Sawbones' Dismay"
description = "Legally, we are required to inform you that drinking this cocktail may invalidate your health insurance."
ratios = list(
- /decl/material/liquid/ethanol/jagermeister = 1,
+ /decl/material/liquid/alcohol/jagermeister = 1,
/decl/material/liquid/drink/beastenergy = 1
)
@@ -554,7 +554,7 @@
name = "Patron"
description = "Tequila mixed with flaked silver, for those with moderate expensive tastes."
ratios = list(
- /decl/material/liquid/ethanol/tequila = 1,
+ /decl/material/liquid/alcohol/tequila = 1,
/decl/material/solid/metal/silver
)
@@ -571,7 +571,7 @@
name = "Goldschlager"
description = "Schnapps mixed with flaked gold, for those with very expensive tastes."
ratios = list(
- /decl/material/liquid/ethanol/vodka = 1,
+ /decl/material/liquid/alcohol/vodka = 1,
/decl/material/solid/metal/gold
)
@@ -597,5 +597,5 @@
description = "Watered-down whiskey. Essentially grog, but without the pirates."
ratios = list(
/decl/material/liquid/water = 1,
- /decl/material/liquid/ethanol/whiskey = 1
+ /decl/material/liquid/alcohol/whiskey = 1
)
diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm
index 924c00ea958..62f5d50a7e3 100644
--- a/code/modules/reagents/dispenser/cartridge.dm
+++ b/code/modules/reagents/dispenser/cartridge.dm
@@ -48,13 +48,14 @@
else if(user)
to_chat(user, SPAN_NOTICE("You clear the label on \the [src]."))
-/obj/item/chems/chem_disp_cartridge/attack_self()
- ..()
+/obj/item/chems/chem_disp_cartridge/attack_self(mob/user)
+ if((. = ..()))
+ return
if (ATOM_IS_OPEN_CONTAINER(src))
- to_chat(usr, SPAN_NOTICE("You put the cap on \the [src]."))
+ to_chat(user, SPAN_NOTICE("You put the cap on \the [src]."))
atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
else
- to_chat(usr, SPAN_NOTICE("You take the cap off \the [src]."))
+ to_chat(user, SPAN_NOTICE("You take the cap off \the [src]."))
atom_flags |= ATOM_FLAG_OPEN_CONTAINER
/obj/item/chems/chem_disp_cartridge/afterattack(obj/target, mob/user, proximity_flag, click_parameters)
@@ -65,7 +66,7 @@
return TRUE
if(handle_eaten_by_mob(user, target) != EATEN_INVALID)
return TRUE
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
if(standard_splash_mob(user,target))
return TRUE
if(reagents && reagents.total_volume)
diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm
index fc67bea1606..fadf1e19187 100644
--- a/code/modules/reagents/dispenser/cartridge_presets.dm
+++ b/code/modules/reagents/dispenser/cartridge_presets.dm
@@ -32,24 +32,24 @@ DEFINE_CARTRIDGE_FOR_CHEM(iron, /decl/material/solid/metal/iron)
DEFINE_CARTRIDGE_FOR_CHEM(copper, /decl/material/solid/metal/copper)
DEFINE_CARTRIDGE_FOR_CHEM(mercury, /decl/material/liquid/mercury)
DEFINE_CARTRIDGE_FOR_CHEM(radium, /decl/material/solid/metal/radium)
-DEFINE_CARTRIDGE_FOR_CHEM(ethanol, /decl/material/liquid/ethanol)
+DEFINE_CARTRIDGE_FOR_CHEM(ethanol, /decl/material/liquid/alcohol/ethanol)
DEFINE_CARTRIDGE_FOR_CHEM(sacid, /decl/material/liquid/acid)
DEFINE_CARTRIDGE_FOR_CHEM(tungsten, /decl/material/solid/metal/tungsten)
// Bar, alcoholic
-DEFINE_CARTRIDGE_FOR_CHEM(beer, /decl/material/liquid/ethanol/beer)
-DEFINE_CARTRIDGE_FOR_CHEM(kahlua, /decl/material/liquid/ethanol/coffee)
-DEFINE_CARTRIDGE_FOR_CHEM(whiskey, /decl/material/liquid/ethanol/whiskey)
-DEFINE_CARTRIDGE_FOR_CHEM(wine, /decl/material/liquid/ethanol/wine)
-DEFINE_CARTRIDGE_FOR_CHEM(vodka, /decl/material/liquid/ethanol/vodka)
-DEFINE_CARTRIDGE_FOR_CHEM(gin, /decl/material/liquid/ethanol/gin)
-DEFINE_CARTRIDGE_FOR_CHEM(rum, /decl/material/liquid/ethanol/rum)
-DEFINE_CARTRIDGE_FOR_CHEM(tequila, /decl/material/liquid/ethanol/tequila)
-DEFINE_CARTRIDGE_FOR_CHEM(vermouth, /decl/material/liquid/ethanol/vermouth)
-DEFINE_CARTRIDGE_FOR_CHEM(cognac, /decl/material/liquid/ethanol/cognac)
-DEFINE_CARTRIDGE_FOR_CHEM(ale, /decl/material/liquid/ethanol/ale)
-DEFINE_CARTRIDGE_FOR_CHEM(mead, /decl/material/liquid/ethanol/mead)
+DEFINE_CARTRIDGE_FOR_CHEM(beer, /decl/material/liquid/alcohol/beer)
+DEFINE_CARTRIDGE_FOR_CHEM(kahlua, /decl/material/liquid/alcohol/coffee)
+DEFINE_CARTRIDGE_FOR_CHEM(whiskey, /decl/material/liquid/alcohol/whiskey)
+DEFINE_CARTRIDGE_FOR_CHEM(wine, /decl/material/liquid/alcohol/wine)
+DEFINE_CARTRIDGE_FOR_CHEM(vodka, /decl/material/liquid/alcohol/vodka)
+DEFINE_CARTRIDGE_FOR_CHEM(gin, /decl/material/liquid/alcohol/gin)
+DEFINE_CARTRIDGE_FOR_CHEM(rum, /decl/material/liquid/alcohol/rum)
+DEFINE_CARTRIDGE_FOR_CHEM(tequila, /decl/material/liquid/alcohol/tequila)
+DEFINE_CARTRIDGE_FOR_CHEM(vermouth, /decl/material/liquid/alcohol/vermouth)
+DEFINE_CARTRIDGE_FOR_CHEM(cognac, /decl/material/liquid/alcohol/cognac)
+DEFINE_CARTRIDGE_FOR_CHEM(ale, /decl/material/liquid/alcohol/ale)
+DEFINE_CARTRIDGE_FOR_CHEM(mead, /decl/material/liquid/alcohol/mead)
// Bar, soft
DEFINE_CARTRIDGE_FOR_CHEM(ice, /decl/material/solid/ice)
diff --git a/code/modules/reagents/heat_sources/_heat_source.dm b/code/modules/reagents/heat_sources/_heat_source.dm
index b9295313707..eb5b3cebf44 100644
--- a/code/modules/reagents/heat_sources/_heat_source.dm
+++ b/code/modules/reagents/heat_sources/_heat_source.dm
@@ -5,8 +5,8 @@
#define HEATER_MODE_COOL "cool"
/obj/machinery/reagent_temperature
- name = "chemical heater"
- desc = "A small electric Bunsen, used to heat beakers and vials of chemicals."
+ name = "hotplate"
+ desc = "A small electric hotplate, used to heat cookware, beakers, or vials of chemicals."
icon = 'icons/obj/machines/heat_sources.dmi'
icon_state = "hotplate"
atom_flags = ATOM_FLAG_CLIMBABLE
@@ -70,6 +70,7 @@
/obj/machinery/reagent_temperature/ProcessAtomTemperature()
if(use_power >= POWER_USE_ACTIVE)
+
var/last_temperature = temperature
if(heater_mode == HEATER_MODE_HEAT && temperature < target_temperature)
temperature = min(target_temperature, temperature + heating_power)
@@ -79,10 +80,25 @@
if(container)
queue_temperature_atoms(container)
queue_icon_update()
+
+ // Hackery to heat pots placed onto a hotplate without also grilling/baking stuff.
+ if(isturf(loc))
+ var/datum/gas_mixture/environment = loc.return_air()
+ for(var/obj/item/chems/cooking_vessel/pot in loc.get_contained_external_atoms())
+ pot.fire_act(environment, temperature, 500)
+
return TRUE // Don't kill this processing loop unless we're not powered.
. = ..()
/obj/machinery/reagent_temperature/attackby(var/obj/item/thing, var/mob/user)
+
+ if(istype(thing, /obj/item/chems/cooking_vessel))
+ if(!user.try_unequip(thing, get_turf(src)))
+ return TRUE
+ thing.reset_offsets(anim_time = 0)
+ user.visible_message(SPAN_NOTICE("\The [user] places \the [thing] onto \the [src]."))
+ return TRUE
+
if(IS_WRENCH(thing))
if(use_power == POWER_USE_ACTIVE)
to_chat(user, SPAN_WARNING("Turn \the [src] off first!"))
diff --git a/code/modules/reagents/reactions/_reaction.dm b/code/modules/reagents/reactions/_reaction.dm
index e743ecf0ab2..fbc2eaa85d6 100644
--- a/code/modules/reagents/reactions/_reaction.dm
+++ b/code/modules/reagents/reactions/_reaction.dm
@@ -38,7 +38,7 @@
return 1
-/decl/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
if(thermal_product && location && ATOM_SHOULD_TEMPERATURE_ENQUEUE(location))
ADJUST_ATOM_TEMPERATURE(location, location.temperature + (location.get_thermal_mass_coefficient() * thermal_product))
@@ -61,8 +61,6 @@
if(reaction_volume > A)
reaction_volume = A
- var/alt_reaction_indicator = get_alternate_reaction_indicator(holder)
-
for(var/reactant in required_reagents)
holder.remove_reagent(reactant, reaction_volume * required_reagents[reactant], safety = 1)
@@ -71,7 +69,7 @@
if(result)
holder.add_reagent(result, amt_produced, data, safety = 1)
- on_reaction(holder, amt_produced, alt_reaction_indicator, data)
+ on_reaction(holder, amt_produced, data)
//called after processing reactions, if they occurred
/decl/chemical_reaction/proc/post_reaction(var/datum/reagents/holder)
diff --git a/code/modules/reagents/reactions/reaction_alcohol.dm b/code/modules/reagents/reactions/reaction_alcohol.dm
index 87ac55aacef..4d96bdb5d12 100644
--- a/code/modules/reagents/reactions/reaction_alcohol.dm
+++ b/code/modules/reagents/reactions/reaction_alcohol.dm
@@ -14,7 +14,7 @@
/decl/chemical_reaction/recipe/moonshine
name = "Moonshine"
- result = /decl/material/liquid/ethanol/moonshine
+ result = /decl/material/liquid/alcohol/moonshine
required_reagents = list(/decl/material/liquid/nutriment = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -29,7 +29,7 @@
/decl/chemical_reaction/recipe/wine
name = "Red Wine"
- result = /decl/material/liquid/ethanol/wine
+ result = /decl/material/liquid/alcohol/wine
required_reagents = list(/decl/material/liquid/drink/juice/grape = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -37,7 +37,7 @@
/decl/chemical_reaction/recipe/pwine
name = "Poison Wine"
- result = /decl/material/liquid/ethanol/pwine
+ result = /decl/material/liquid/alcohol/pwine
required_reagents = list(/decl/material/liquid/poisonberryjuice = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -45,7 +45,7 @@
/decl/chemical_reaction/recipe/melonliquor
name = "Melon Liquor"
- result = /decl/material/liquid/ethanol/melonliquor
+ result = /decl/material/liquid/alcohol/melonliquor
required_reagents = list(/decl/material/liquid/drink/juice/watermelon = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -53,7 +53,7 @@
/decl/chemical_reaction/recipe/bluecuracao
name = "Blue Curacao"
- result = /decl/material/liquid/ethanol/bluecuracao
+ result = /decl/material/liquid/alcohol/bluecuracao
required_reagents = list(/decl/material/liquid/drink/juice/orange = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -61,15 +61,15 @@
/decl/chemical_reaction/recipe/beer
name = "Plain Beer"
- result = /decl/material/liquid/ethanol/beer
- required_reagents = list(/decl/material/liquid/nutriment/cornoil = 10)
+ result = /decl/material/liquid/alcohol/beer
+ required_reagents = list(/decl/material/liquid/oil/plant/corn = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
mix_message = "The solution roils as it rapidly ferments into a foaming amber liquid."
/decl/chemical_reaction/recipe/vodka
name = "Potato Vodka"
- result = /decl/material/liquid/ethanol/vodka
+ result = /decl/material/liquid/alcohol/vodka
required_reagents = list(/decl/material/liquid/drink/juice/potato = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -77,7 +77,7 @@
/decl/chemical_reaction/recipe/vodka2
name = "Turnip Vodka"
- result = /decl/material/liquid/ethanol/vodka
+ result = /decl/material/liquid/alcohol/vodka
required_reagents = list(/decl/material/liquid/drink/juice/turnip = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -85,7 +85,7 @@
/decl/chemical_reaction/recipe/sake
name = "Sake"
- result = /decl/material/liquid/ethanol/sake
+ result = /decl/material/liquid/alcohol/sake
required_reagents = list(/decl/material/liquid/nutriment/rice = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
@@ -93,7 +93,7 @@
/decl/chemical_reaction/recipe/kahlua
name = "Kahlua"
- result = /decl/material/liquid/ethanol/coffee
+ result = /decl/material/liquid/alcohol/coffee
required_reagents = list(/decl/material/liquid/drink/coffee = 5, /decl/material/liquid/nutriment/sugar = 5)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 5
@@ -101,28 +101,28 @@
/decl/chemical_reaction/recipe/irish_cream
name = "Irish Cream"
- result = /decl/material/liquid/ethanol/irish_cream
- required_reagents = list(/decl/material/liquid/ethanol/whiskey = 2, /decl/material/liquid/drink/milk/cream = 1)
+ result = /decl/material/liquid/alcohol/irish_cream
+ required_reagents = list(/decl/material/liquid/alcohol/whiskey = 2, /decl/material/liquid/drink/milk/cream = 1)
result_amount = 3
/decl/chemical_reaction/recipe/hooch
name = "Hooch"
- result = /decl/material/liquid/ethanol/hooch
- required_reagents = list (/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/ethanol = 2, /decl/material/liquid/fuel = 1)
+ result = /decl/material/liquid/alcohol/hooch
+ required_reagents = list (/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/alcohol/ethanol = 2, /decl/material/liquid/fuel = 1)
minimum_temperature = 30 CELSIUS
maximum_temperature = (30 CELSIUS) + 100
result_amount = 3
/decl/chemical_reaction/recipe/mead
name = "Mead"
- result = /decl/material/liquid/ethanol/mead
+ result = /decl/material/liquid/alcohol/mead
required_reagents = list(/decl/material/liquid/nutriment/honey = 1, /decl/material/liquid/water = 1)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 2
/decl/chemical_reaction/recipe/rum
name = "Dark Rum"
- result = /decl/material/liquid/ethanol/rum
+ result = /decl/material/liquid/alcohol/rum
required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/water = 1)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 2
@@ -130,21 +130,21 @@
/decl/chemical_reaction/recipe/cider_apple
name = "Apple Cider"
- result = /decl/material/liquid/ethanol/cider_apple
+ result = /decl/material/liquid/alcohol/cider_apple
required_reagents = list(/decl/material/liquid/drink/juice/apple = 2, /decl/material/liquid/nutriment/sugar = 1)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 3
/decl/chemical_reaction/recipe/cider_pear
name = "Pear Cider"
- result = /decl/material/liquid/ethanol/cider_pear
+ result = /decl/material/liquid/alcohol/cider_pear
required_reagents = list(/decl/material/liquid/drink/juice/pear = 2, /decl/material/liquid/nutriment/sugar = 1)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 3
/decl/chemical_reaction/recipe/kvass
name = "Kvass"
- result = /decl/material/liquid/ethanol/kvass
- required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/ethanol/beer = 1)
+ result = /decl/material/liquid/alcohol/kvass
+ required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/alcohol/beer = 1)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 3
diff --git a/code/modules/reagents/reactions/reaction_compounds.dm b/code/modules/reagents/reactions/reaction_compounds.dm
index a2126b561d7..8df2ada04be 100644
--- a/code/modules/reagents/reactions/reaction_compounds.dm
+++ b/code/modules/reagents/reactions/reaction_compounds.dm
@@ -48,7 +48,7 @@
name = "Methyl Bromide"
required_reagents = list(
/decl/material/liquid/bromide = 1,
- /decl/material/liquid/ethanol = 1,
+ /decl/material/liquid/alcohol/ethanol = 1,
/decl/material/liquid/fuel/hydrazine = 1
)
result_amount = 3
@@ -151,10 +151,44 @@
name = "Condensed Capsaicin"
minimum_temperature = 100 CELSIUS
maximum_temperature = 200 CELSIUS // To avoid cooking chili creating condensed capsaicin.
- mix_message = "darkens and thickens as it seperates from its water content"
+ mix_message = "darkens and thickens as it separates from its water content"
required_reagents = list(/decl/material/liquid/capsaicin = 2)
result = list(/decl/material/liquid/capsaicin/condensed = 1)
-/decl/chemical_reaction/compound/condensed_capsaicin/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/compound/condensed_capsaicin/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
. = ..()
holder?.add_reagent(/decl/material/liquid/water, created_volume)
+
+/decl/chemical_reaction/compound/nanitefluid
+ name = "Nanite Fluid"
+ result = /decl/material/liquid/nanitefluid
+ required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/solid/metal/aluminium = 1, /decl/material/liquid/lube = 1)
+ catalysts = list(/decl/material/solid/phoron = 5)
+ result_amount = 3
+ minimum_temperature = (-25 CELSIUS) - 100
+ maximum_temperature = -25 CELSIUS
+ mix_message = "The solution becomes a metallic slime."
+
+// This is a bit silly, but we need a way to unify oil types until someone rewrites lanterns.
+/decl/chemical_reaction/compound/fuel_oil
+ name = "Plant Fuel Oil"
+ result = /decl/material/liquid/oil
+ result_amount = 3
+ required_reagents = list(
+ /decl/material/liquid/oil/plant = 2,
+ /decl/material/solid/graphite = 1
+ )
+
+/decl/chemical_reaction/compound/fuel_oil/corn
+ name = "Corn Fuel Oil"
+ required_reagents = list(
+ /decl/material/liquid/oil/plant/corn = 2,
+ /decl/material/solid/graphite = 1
+ )
+
+/decl/chemical_reaction/compound/fuel_oil/fish
+ name = "Fish Fuel Oil"
+ required_reagents = list(
+ /decl/material/liquid/oil/fish = 2,
+ /decl/material/solid/graphite = 1
+ )
diff --git a/code/modules/reagents/reactions/reaction_drugs.dm b/code/modules/reagents/reactions/reaction_drugs.dm
index 5f92eaa6bc8..a4f85cb3fa7 100644
--- a/code/modules/reagents/reactions/reaction_drugs.dm
+++ b/code/modules/reagents/reactions/reaction_drugs.dm
@@ -22,16 +22,16 @@
name = "Strong Painkillers"
result = /decl/material/liquid/painkillers/strong
required_reagents = list(
- /decl/material/liquid/stabilizer = 1,
- /decl/material/liquid/ethanol = 1,
- /decl/material/liquid/acetone = 1
+ /decl/material/liquid/stabilizer = 1,
+ /decl/material/liquid/alcohol/ethanol = 1,
+ /decl/material/liquid/acetone = 1
)
result_amount = 3
/decl/chemical_reaction/drug/antiseptic
name = "Antiseptic"
result = /decl/material/liquid/antiseptic
- required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/antitoxins = 1, /decl/material/liquid/acid/hydrochloric = 1)
+ required_reagents = list(/decl/material/liquid/alcohol/ethanol = 1, /decl/material/liquid/antitoxins = 1, /decl/material/liquid/acid/hydrochloric = 1)
result_amount = 3
/decl/chemical_reaction/drug/mutagenics
@@ -111,16 +111,6 @@
required_reagents = list(/decl/material/liquid/antirads = 1, /decl/material/solid/carbon = 1)
result_amount = 2
-/decl/chemical_reaction/compound/nanitefluid
- name = "Nanite Fluid"
- result = /decl/material/liquid/nanitefluid
- required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/solid/metal/aluminium = 1, /decl/material/liquid/lube = 1)
- catalysts = list(/decl/material/solid/phoron = 5)
- result_amount = 3
- minimum_temperature = (-25 CELSIUS) - 100
- maximum_temperature = -25 CELSIUS
- mix_message = "The solution becomes a metallic slime."
-
/decl/chemical_reaction/drug/antibiotics
name = "Antibiotics"
result = /decl/material/liquid/antibiotics
@@ -136,7 +126,7 @@
/decl/chemical_reaction/drug/sedatives
name = "Sedatives"
result = /decl/material/liquid/sedatives
- required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/nutriment/sugar = 4
+ required_reagents = list(/decl/material/liquid/alcohol/ethanol = 1, /decl/material/liquid/nutriment/sugar = 4
)
inhibitors = list(
/decl/material/solid/phosphorus
@@ -146,7 +136,7 @@
/decl/chemical_reaction/drug/paralytics
name = "Paralytics"
result = /decl/material/liquid/paralytics
- required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/mercury = 2, /decl/material/liquid/fuel/hydrazine = 2)
+ required_reagents = list(/decl/material/liquid/alcohol/ethanol = 1, /decl/material/liquid/mercury = 2, /decl/material/liquid/fuel/hydrazine = 2)
result_amount = 1
/decl/chemical_reaction/drug/zombiepowder
diff --git a/code/modules/reagents/reactions/reaction_grenade_reaction.dm b/code/modules/reagents/reactions/reaction_grenade_reaction.dm
index ec529bef717..7827c6ac054 100644
--- a/code/modules/reagents/reactions/reaction_grenade_reaction.dm
+++ b/code/modules/reagents/reactions/reaction_grenade_reaction.dm
@@ -11,7 +11,7 @@
required_reagents = list(/decl/material/liquid/water = 1, /decl/material/solid/potassium = 1)
mix_message = "The solution bubbles vigorously!"
-/decl/chemical_reaction/grenade_reaction/explosion_potassium/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/explosion_potassium/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
if(location)
@@ -32,7 +32,7 @@
result_amount = null
mix_message = "The solution bubbles vigorously!"
-/decl/chemical_reaction/grenade_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
@@ -58,7 +58,7 @@
mix_message = "The solution bubbles vigorously!"
maximum_temperature = T100C
-/decl/chemical_reaction/grenade_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/location = holder.get_reaction_loc(chemical_reaction_flags)
if(location)
@@ -79,7 +79,7 @@
reaction_sound = 'sound/items/Welder.ogg'
mix_message = "The solution suddenly ignites!"
-/decl/chemical_reaction/grenade_reaction/flash_fire/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/flash_fire/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(istype(location))
@@ -93,7 +93,7 @@
result_amount = 0.4
mix_message = "The solution bubbles vigorously!"
-/decl/chemical_reaction/grenade_reaction/chemsmoke/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/chemsmoke/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
@@ -112,7 +112,7 @@
result_amount = 2
mix_message = "The solution bubbles vigorously!"
-/decl/chemical_reaction/grenade_reaction/foam/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/foam/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
@@ -129,7 +129,7 @@
result_amount = 5
mix_message = "The solution foams up violently!"
-/decl/chemical_reaction/grenade_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
if(location)
@@ -151,7 +151,7 @@
result_amount = 5
mix_message = "The solution bubbles vigorously!"
-/decl/chemical_reaction/grenade_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/grenade_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
diff --git a/code/modules/reagents/reactions/reaction_herbal.dm b/code/modules/reagents/reactions/reaction_herbal.dm
index f0f6bc441f4..62950dd1d64 100644
--- a/code/modules/reagents/reactions/reaction_herbal.dm
+++ b/code/modules/reagents/reactions/reaction_herbal.dm
@@ -3,7 +3,7 @@
result_amount = 2
minimum_temperature = 100 CELSIUS
-/decl/chemical_reaction/drug/herbal/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/drug/herbal/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
. = ..()
// Add plant matter to represent the herbs that the medicine has been leached out of.
holder?.add_reagent(/decl/material/solid/organic/plantmatter, created_volume)
@@ -44,7 +44,7 @@
/decl/chemical_reaction/drug/herbal/yarrow_tincture
name = "tincture of yarrow"
required_reagents = list(
- /decl/material/liquid/ethanol = 1,
+ /decl/material/liquid/alcohol/ethanol = 1,
/decl/material/liquid/brute_meds/yarrow = 3
)
result = /decl/material/liquid/brute_meds/yarrow/tincture
@@ -52,15 +52,15 @@
/decl/chemical_reaction/drug/herbal/aloe_tincture
name = "tincture of aloe"
required_reagents = list(
- /decl/material/liquid/ethanol = 1,
- /decl/material/liquid/burn_meds/aloe = 3
+ /decl/material/liquid/alcohol/ethanol = 1,
+ /decl/material/liquid/burn_meds/aloe = 3
)
result = /decl/material/liquid/burn_meds/aloe/tincture
/decl/chemical_reaction/drug/herbal/ginseng_tincture
name = "tincture of ginseng"
required_reagents = list(
- /decl/material/liquid/ethanol = 1,
+ /decl/material/liquid/alcohol/ethanol = 1,
/decl/material/liquid/antitoxins/ginseng = 3
)
result = /decl/material/liquid/antitoxins/ginseng/tincture
@@ -68,7 +68,7 @@
/decl/chemical_reaction/drug/herbal/valerian_tincture
name = "tincture of valerian"
required_reagents = list(
- /decl/material/liquid/ethanol = 1,
+ /decl/material/liquid/alcohol/ethanol = 1,
/decl/material/liquid/sedatives/valerian = 3
)
result = /decl/material/liquid/sedatives/valerian/tincture
diff --git a/code/modules/reagents/reactions/reaction_other.dm b/code/modules/reagents/reactions/reaction_other.dm
index 19c5613ea7e..dca52f041f6 100644
--- a/code/modules/reagents/reactions/reaction_other.dm
+++ b/code/modules/reagents/reactions/reaction_other.dm
@@ -10,7 +10,7 @@
return ..()
return 0
-/decl/chemical_reaction/soap_key/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/soap_key/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
var/obj/item/soap/S = holder.get_reaction_loc(chemical_reaction_flags)
if(istype(S) && S.key_data)
new /obj/item/key/temporary(get_turf(S), /decl/material/liquid/cleaner, S.key_data, strength)
diff --git a/code/modules/reagents/reactions/reaction_recipe.dm b/code/modules/reagents/reactions/reaction_recipe.dm
index f8a9797da15..a113d821cc5 100644
--- a/code/modules/reagents/reactions/reaction_recipe.dm
+++ b/code/modules/reagents/reactions/reaction_recipe.dm
@@ -37,7 +37,7 @@
/decl/chemical_reaction/recipe/garlicsauce
name = "Garlic Sauce"
result = /decl/material/liquid/nutriment/garlicsauce
- required_reagents = list(/decl/material/liquid/drink/juice/garlic = 1, /decl/material/liquid/nutriment/cornoil = 1)
+ required_reagents = list(/decl/material/liquid/drink/juice/garlic = 1, /decl/material/liquid/oil/plant/corn = 1)
result_amount = 2
mix_message = "The solution thickens into a creamy white oil."
@@ -79,7 +79,7 @@
/decl/chemical_reaction/recipe/vinegar2
name = "Clear Vinegar"
result = /decl/material/liquid/nutriment/vinegar
- required_reagents = list(/decl/material/liquid/ethanol = 10)
+ required_reagents = list(/decl/material/liquid/alcohol/ethanol = 10)
catalysts = list(/decl/material/liquid/enzyme = 5)
result_amount = 10
mix_message = "The solution roils as it rapidly ferments into a sharp-smelling liquid."
diff --git a/code/modules/reagents/reactions/reaction_recipe_food.dm b/code/modules/reagents/reactions/reaction_recipe_food.dm
index 29ba82a01db..0ece0daefd2 100644
--- a/code/modules/reagents/reactions/reaction_recipe_food.dm
+++ b/code/modules/reagents/reactions/reaction_recipe_food.dm
@@ -4,7 +4,7 @@
abstract_type = /decl/chemical_reaction/recipe/food
var/obj_result
-/decl/chemical_reaction/recipe/food/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/recipe/food/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(obj_result && isturf(location))
@@ -58,7 +58,7 @@
name = "Enzyme Margarine"
required_reagents = list(
/decl/material/solid/sodiumchloride = 1,
- /decl/material/liquid/nutriment/plant_oil = 20
+ /decl/material/liquid/oil/plant = 20
)
catalysts = list(/decl/material/liquid/enzyme = 5)
mix_message = "The solution thickens and curdles into a pale yellow solid."
@@ -210,7 +210,7 @@
name = "Space Liberty Duff"
required_reagents = list(
/decl/material/liquid/water = 10,
- /decl/material/liquid/ethanol/vodka = 5,
+ /decl/material/liquid/alcohol/vodka = 5,
/decl/material/liquid/psychotropics = 5
)
obj_result = /obj/item/food/spacylibertyduff
@@ -219,7 +219,7 @@
name = "Amanita Jelly"
required_reagents = list(
/decl/material/liquid/water = 10,
- /decl/material/liquid/ethanol/vodka = 5,
+ /decl/material/liquid/alcohol/vodka = 5,
/decl/material/liquid/amatoxin = 5
)
obj_result = /obj/item/food/amanitajelly
diff --git a/code/modules/reagents/reactions/reaction_synthesis.dm b/code/modules/reagents/reactions/reaction_synthesis.dm
index 90f7a0e1957..79695861328 100644
--- a/code/modules/reagents/reactions/reaction_synthesis.dm
+++ b/code/modules/reagents/reactions/reaction_synthesis.dm
@@ -19,7 +19,7 @@
)
. = ..()
-/decl/chemical_reaction/synthesis/fiberglass/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/synthesis/fiberglass/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
@@ -28,9 +28,6 @@
var/decl/material/mat = GET_DECL(/decl/material/solid/fiberglass)
mat.create_object(location, created_volume)
-/decl/chemical_reaction/synthesis/crystalization/can_happen(datum/reagents/holder)
- . = ..() && length(holder.reagent_volumes) > 1
-
/decl/chemical_reaction/synthesis/crystalization
name = "Crystalization"
required_reagents = list(/decl/material/liquid/crystal_agent = 1)
@@ -47,7 +44,7 @@
if(rtype != /decl/material/liquid/crystal_agent && REAGENT_VOLUME(holder, rtype) >= REAGENT_UNITS_PER_MATERIAL_SHEET)
return TRUE
-/decl/chemical_reaction/synthesis/crystalization/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/synthesis/crystalization/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
var/list/removing_reagents = list()
@@ -81,7 +78,7 @@
continue
return TRUE
-/decl/chemical_reaction/synthesis/aerogel/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/synthesis/aerogel/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
var/list/removing_reagents = list()
@@ -100,7 +97,7 @@
required_reagents = list(/decl/material/liquid/acid = 1, /decl/material/liquid/plasticide = 2)
mix_message = "The solution solidifies into a grey-white mass."
-/decl/chemical_reaction/synthesis/plastication/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/synthesis/plastication/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
@@ -115,7 +112,7 @@
result_amount = 3
mix_message = "The solution hardens and begins to crystallize."
-/decl/chemical_reaction/synthesis/resin_pack/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/synthesis/resin_pack/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/T = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(!istype(T))
@@ -126,17 +123,17 @@
new /obj/item/stack/medical/resin/crafted(T, create_stacks)
/decl/chemical_reaction/synthesis/soap
- name = "Handmade Soap"
+ name = "Handmade Plant Soap"
required_reagents = list(
- /decl/material/solid/carbon/ashes = 5,
- /decl/material/liquid/water = 5,
- /decl/material/liquid/nutriment/plant_oil = 10
+ /decl/material/solid/carbon/ashes = 5,
+ /decl/material/liquid/water = 5,
+ /decl/material/liquid/oil/plant = 10
)
result_amount = 1
mix_message = "The solution thickens and solidifies."
minimum_temperature = 100 CELSIUS
-/decl/chemical_reaction/synthesis/soap/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
+/decl/chemical_reaction/synthesis/soap/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
..()
var/turf/T = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(!istype(T))
@@ -146,3 +143,73 @@
return
for(var/i = 1 to create_soap)
new /obj/item/soap/crafted(T)
+
+/decl/chemical_reaction/synthesis/soap/corn
+ name = "Handmade Corn Soap"
+ required_reagents = list(
+ /decl/material/solid/carbon/ashes = 5,
+ /decl/material/liquid/water = 5,
+ /decl/material/liquid/oil/plant/corn = 10
+ )
+
+// Making chipboard out of wood scraps/recycled wood.
+/decl/chemical_reaction/synthesis/chipboard
+ name = "Oak Chipboard"
+ required_reagents = list(
+ /decl/material/solid/organic/wood/oak = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2),
+ /decl/material/solid/organic/plastic = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2)
+ )
+ result_amount = 1
+ mix_message = "The wood particulate binds with the plastic to form laminated chipboard."
+ minimum_temperature = 100 CELSIUS
+ var/chipboard_type = /decl/material/solid/organic/wood/chipboard
+
+/decl/chemical_reaction/synthesis/chipboard/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
+ ..()
+ var/turf/T = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
+ if(!istype(T))
+ return
+ var/create_sheets = floor(created_volume)
+ if(create_sheets <= 0)
+ return
+ new /obj/item/stack/material/sheet(T, create_sheets, chipboard_type)
+
+/decl/chemical_reaction/synthesis/chipboard/maple
+ name = "Maple Chipboard"
+ required_reagents = list(
+ /decl/material/solid/organic/wood/maple = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2),
+ /decl/material/solid/organic/plastic = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2)
+ )
+ chipboard_type = /decl/material/solid/organic/wood/chipboard/maple
+
+/decl/chemical_reaction/synthesis/chipboard/mahogany
+ name = "Mahogany Chipboard"
+ required_reagents = list(
+ /decl/material/solid/organic/wood/mahogany = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2),
+ /decl/material/solid/organic/plastic = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2)
+ )
+ chipboard_type = /decl/material/solid/organic/wood/chipboard/mahogany
+
+/decl/chemical_reaction/synthesis/chipboard/ebony
+ name = "Ebony Chipboard"
+ required_reagents = list(
+ /decl/material/solid/organic/wood/ebony = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2),
+ /decl/material/solid/organic/plastic = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2)
+ )
+ chipboard_type = /decl/material/solid/organic/wood/chipboard/ebony
+
+/decl/chemical_reaction/synthesis/chipboard/walnut
+ name = "Walnut Chipboard"
+ required_reagents = list(
+ /decl/material/solid/organic/wood/walnut = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2),
+ /decl/material/solid/organic/plastic = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2)
+ )
+ chipboard_type = /decl/material/solid/organic/wood/chipboard/walnut
+
+/decl/chemical_reaction/synthesis/chipboard/yew
+ name = "Yew Chipboard"
+ required_reagents = list(
+ /decl/material/solid/organic/wood/yew = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2),
+ /decl/material/solid/organic/plastic = (REAGENT_UNITS_PER_MATERIAL_SHEET / 2)
+ )
+ chipboard_type = /decl/material/solid/organic/wood/chipboard/yew
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 49d66cb0af7..de18007e761 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -27,9 +27,13 @@
/obj/item/chems/on_update_icon()
. = ..()
+ if(detail_state)
+ add_overlay(overlay_image(icon, "[initial(icon_state)][detail_state]", detail_color || COLOR_WHITE, RESET_COLOR))
var/image/contents_overlay = get_reagents_overlay(use_single_icon ? icon_state : null)
if(contents_overlay)
add_overlay(contents_overlay)
+ if(detail_state)
+ add_overlay(overlay_image(icon, "[initial(icon_state)][detail_state]", detail_color || COLOR_WHITE, RESET_COLOR))
/obj/item/chems/apply_additional_mob_overlays(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing)
var/image/reagents_overlay = get_reagents_overlay(overlay.icon_state)
@@ -43,18 +47,13 @@
/obj/item/chems/proc/cannot_interact(mob/user)
if(!CanPhysicallyInteract(user))
- to_chat(usr, SPAN_WARNING("You're in no condition to do that!"))
+ to_chat(user, SPAN_WARNING("You're in no condition to do that!"))
return TRUE
if(ismob(loc) && loc != user)
- to_chat(usr, SPAN_WARNING("You can't set transfer amounts while \the [src] is being held by someone else."))
+ to_chat(user, SPAN_WARNING("You can't set transfer amounts while \the [src] is being held by someone else."))
return TRUE
return FALSE
-/obj/item/chems/on_update_icon()
- . = ..()
- if(detail_state)
- add_overlay(overlay_image(icon, "[initial(icon_state)][detail_state]", detail_color || COLOR_WHITE, RESET_COLOR))
-
/obj/item/chems/update_name()
. = ..() // handles material, etc
var/newname = name
@@ -100,6 +99,21 @@
return
/obj/item/chems/attackby(obj/item/used_item, mob/user)
+
+ // Skimming off cream, repurposed from crucibles.
+ // TODO: potentially make this an alt interaction and unify with slag skimming.
+ if(istype(used_item, /obj/item/chems) && ATOM_IS_OPEN_CONTAINER(used_item) && used_item.reagents?.maximum_volume && reagents?.total_volume && length(reagents.reagent_volumes) > 1)
+ var/list/skimmable_reagents = reagents.get_skimmable_reagents()
+ if(length(skimmable_reagents))
+ var/removing = min(amount_per_transfer_from_this, REAGENTS_FREE_SPACE(used_item.reagents))
+ if(removing <= 0)
+ to_chat(user, SPAN_WARNING("\The [used_item] is full."))
+ else
+ var/old_amt = used_item.reagents.total_volume
+ reagents.trans_to_holder(used_item.reagents, removing, skip_reagents = (reagents.reagent_volumes - skimmable_reagents))
+ to_chat(user, SPAN_NOTICE("You skim [used_item.reagents.total_volume-old_amt] unit\s of [used_item.reagents.get_primary_reagent_name()] from the top of \the [reagents.get_primary_reagent_name()]."))
+ return TRUE
+
if(used_item.user_can_attack_with(user, silent = TRUE))
if(IS_PEN(used_item))
var/tmp_label = sanitize_safe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
@@ -186,12 +200,21 @@
//
// Interactions
//
+/obj/item/chems/get_quick_interaction_handler(mob/user)
+ var/static/interaction = GET_DECL(/decl/interaction_handler/set_transfer/chems)
+ return interaction
+
/obj/item/chems/get_alt_interactions(var/mob/user)
. = ..()
- LAZYADD(., /decl/interaction_handler/set_transfer/chems)
+ var/static/list/chem_interactions = list(
+ /decl/interaction_handler/set_transfer/chems,
+ /decl/interaction_handler/empty/chems
+ )
+ LAZYADD(., chem_interactions)
/decl/interaction_handler/set_transfer/chems
expected_target_type = /obj/item/chems
+ examine_desc = "set the transfer volume"
/decl/interaction_handler/set_transfer/chems/is_possible(var/atom/target, var/mob/user)
. = ..()
@@ -208,6 +231,7 @@
name = "Empty On Floor"
expected_target_type = /obj/item/chems
interaction_flags = INTERACTION_NEEDS_INVENTORY | INTERACTION_NEEDS_PHYSICAL_INTERACTION | INTERACTION_NEVER_AUTOMATIC
+ examine_desc = "empty $TARGET_THEM$ onto the floor"
/decl/interaction_handler/empty/chems/invoked(atom/target, mob/user, obj/item/prop)
var/turf/T = get_turf(user)
diff --git a/code/modules/reagents/reagent_containers/_glass.dm b/code/modules/reagents/reagent_containers/_glass.dm
new file mode 100644
index 00000000000..f381c8a44bb
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/_glass.dm
@@ -0,0 +1,176 @@
+
+////////////////////////////////////////////////////////////////////////////////
+/// (Mixing)Glass.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/chems/glass
+ name = ""
+ desc = ""
+ icon_state = "null"
+ item_state = "null"
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = @"[5,10,15,25,30,60]"
+ volume = 60
+ w_class = ITEM_SIZE_SMALL
+ atom_flags = ATOM_FLAG_OPEN_CONTAINER
+ obj_flags = OBJ_FLAG_HOLLOW
+ material = /decl/material/solid/glass
+ abstract_type = /obj/item/chems/glass
+ drop_sound = 'sound/foley/bottledrop1.ogg'
+ pickup_sound = 'sound/foley/bottlepickup1.ogg'
+ watertight = FALSE // /glass uses the open container flag for this
+
+/obj/item/chems/glass/proc/get_atoms_can_be_placed_into()
+ var/static/list/_can_be_placed_into = list(
+ /obj/machinery/chem_master/,
+ /obj/machinery/chemical_dispenser,
+ /obj/machinery/reagentgrinder,
+ /obj/structure/table,
+ /obj/structure/closet,
+ /obj/structure/hygiene/sink,
+ /obj/item/grenade/chem_grenade,
+ /mob/living/bot/medbot,
+ /obj/item/secure_storage/safe,
+ /obj/structure/iv_drip,
+ /obj/machinery/disposal,
+ /mob/living/simple_animal/cow,
+ /mob/living/simple_animal/hostile/goat,
+ /obj/machinery/sleeper,
+ /obj/machinery/smartfridge/,
+ /obj/machinery/biogenerator,
+ /obj/machinery/constructable_frame,
+ /obj/machinery/radiocarbon_spectrometer,
+ /obj/machinery/material_processing/extractor
+ )
+ return _can_be_placed_into
+
+/obj/item/chems/glass/examine(mob/user, distance)
+ . = ..()
+ if(distance > 2)
+ return
+
+ if(reagents?.total_volume)
+ to_chat(user, SPAN_NOTICE("It contains [reagents.total_volume] units of reagents."))
+ else
+ to_chat(user, SPAN_NOTICE("It is empty."))
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ to_chat(user,SPAN_NOTICE("The airtight lid seals it completely."))
+
+/obj/item/chems/glass/proc/can_lid()
+ return TRUE
+
+/obj/item/chems/glass/proc/should_drink_from(mob/drinker)
+ . = reagents?.total_volume > 0
+ if(.)
+ var/decl/material/drinking = reagents.get_primary_reagent_decl()
+ return drinking ? !drinking.is_unsafe_to_drink(drinker) : FALSE
+
+/obj/item/chems/glass/attack_self(mob/user)
+
+ if(can_lid() && user.check_intent(I_FLAG_HELP))
+ if(ATOM_IS_OPEN_CONTAINER(src))
+ to_chat(user, SPAN_NOTICE("You put the lid on \the [src]."))
+ atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
+ else
+ to_chat(user, SPAN_NOTICE("You take the lid off \the [src]."))
+ atom_flags |= ATOM_FLAG_OPEN_CONTAINER
+ update_icon()
+ return TRUE
+
+ if(should_drink_from(user) && is_edible(user) && handle_eaten_by_mob(user, user) != EATEN_INVALID)
+ return TRUE
+
+ return ..()
+
+/obj/item/chems/glass/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
+ if(expend_attack_force(user) && !(item_flags & ITEM_FLAG_NO_BLUDGEON) && user.check_intent(I_FLAG_HARM))
+ return ..()
+ return FALSE
+
+/obj/item/chems/glass/afterattack(var/obj/target, var/mob/user, var/proximity)
+ if(!ATOM_IS_OPEN_CONTAINER(src) || !proximity) //Is the container open & are they next to whatever they're clicking?
+ return FALSE //If not, do nothing.
+ if(target?.storage)
+ return TRUE
+ for(var/type in get_atoms_can_be_placed_into()) //Is it something it can be placed into?
+ if(istype(target, type))
+ return TRUE
+ if(standard_dispenser_refill(user, target)) //Are they clicking a water tank/some dispenser?
+ return TRUE
+ if(standard_pour_into(user, target)) //Pouring into another beaker?
+ return TRUE
+ if(handle_eaten_by_mob(user, target) != EATEN_INVALID)
+ return TRUE
+ if(user.check_intent(I_FLAG_HARM))
+ if(standard_splash_mob(user,target))
+ return TRUE
+ if(reagents && reagents.total_volume)
+ to_chat(user, SPAN_DANGER("You splash the contents of \the [src] onto \the [target]."))
+ reagents.splash(target, reagents.total_volume)
+ return TRUE
+ else if(reagents && reagents.total_volume)
+ to_chat(user, SPAN_NOTICE("You splash a small amount of the contents of \the [src] onto \the [target]."))
+ reagents.splash(target, min(reagents.total_volume, 5))
+ return TRUE
+ . = ..()
+
+// Drinking out of bowls.
+/obj/item/chems/glass/get_edible_material_amount(mob/eater)
+ return reagents?.total_volume
+
+/obj/item/chems/glass/get_utensil_food_type()
+ return /obj/item/food/lump
+
+// Interaction code borrowed from /food.
+// Should we consider moving this down to /chems for any open container? Medicine from a bottle using a spoon, etc.
+/obj/item/chems/glass/attackby(obj/item/used_item, mob/living/user)
+
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ return ..()
+
+ var/obj/item/utensil/utensil = used_item
+ if(istype(utensil) && (utensil.utensil_flags & UTENSIL_FLAG_SCOOP))
+ if(utensil.loaded_food)
+ to_chat(user, SPAN_WARNING("You already have something on \the [utensil]."))
+ return TRUE
+ if(!reagents?.total_volume)
+ to_chat(user, SPAN_WARNING("\The [src] is empty."))
+ return TRUE
+ seperate_food_chunk(utensil, user)
+ if(utensil.loaded_food?.reagents?.total_volume)
+ to_chat(user, SPAN_NOTICE("You scoop up some of \the [utensil.loaded_food.reagents.get_primary_reagent_name()] with \the [utensil]."))
+ return TRUE
+
+ return ..()
+
+/obj/item/chems/glass/get_alt_interactions(mob/user)
+ . = ..()
+ if(reagents?.total_volume >= FLUID_PUDDLE)
+ LAZYADD(., /decl/interaction_handler/dip_item)
+ LAZYADD(., /decl/interaction_handler/fill_from)
+ if(user?.get_active_held_item())
+ LAZYADD(., /decl/interaction_handler/empty_into)
+ if(can_lid())
+ LAZYADD(., /decl/interaction_handler/toggle_lid)
+
+/decl/interaction_handler/toggle_lid
+ name = "Toggle Lid"
+ expected_target_type = /obj/item/chems/glass
+
+/decl/interaction_handler/toggle_lid/is_possible(atom/target, mob/user, obj/item/prop)
+ . = ..()
+ if(. && !istype(prop))
+ var/obj/item/chems/glass/glass = target
+ return glass.can_lid()
+
+/decl/interaction_handler/toggle_lid/invoked(atom/target, mob/user, obj/item/prop)
+ var/obj/item/chems/glass/glass = target
+ if(istype(glass) && glass.can_lid())
+ if(ATOM_IS_OPEN_CONTAINER(glass))
+ to_chat(user, SPAN_NOTICE("You put the lid on \the [glass]."))
+ glass.atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
+ else
+ to_chat(user, SPAN_NOTICE("You take the lid off \the [glass]."))
+ glass.atom_flags |= ATOM_FLAG_OPEN_CONTAINER
+ glass.update_icon()
+ return TRUE
+
diff --git a/code/modules/reagents/reagent_containers/glass_edibility.dm b/code/modules/reagents/reagent_containers/_glass_edibility.dm
similarity index 86%
rename from code/modules/reagents/reagent_containers/glass_edibility.dm
rename to code/modules/reagents/reagent_containers/_glass_edibility.dm
index 9411350417e..2449de26a43 100644
--- a/code/modules/reagents/reagent_containers/glass_edibility.dm
+++ b/code/modules/reagents/reagent_containers/_glass_edibility.dm
@@ -2,6 +2,6 @@
if(!ATOM_IS_OPEN_CONTAINER(src))
to_chat(user, SPAN_WARNING("You need to open \the [src] first."))
return EATEN_UNABLE
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
return EATEN_INVALID
return ..()
diff --git a/code/modules/reagents/reagent_containers/beaker.dm b/code/modules/reagents/reagent_containers/beaker.dm
index a3c95ef6db0..724a0ca448b 100644
--- a/code/modules/reagents/reagent_containers/beaker.dm
+++ b/code/modules/reagents/reagent_containers/beaker.dm
@@ -65,6 +65,7 @@
take_damage(rand(4,8))
/obj/item/chems/glass/beaker/large
+ name_prefix = "large"
name = "beaker" // see update_name override below
desc = "A large beaker."
icon = 'icons/obj/items/chem/beakers/large.dmi'
@@ -74,10 +75,6 @@
possible_transfer_amounts = @"[5,10,15,25,30,60,120]"
w_class = ITEM_SIZE_LARGE
-/obj/item/chems/glass/beaker/large/update_name()
- . = ..()
- SetName("large [name]") // large glass beaker, not glass large beaker
-
/obj/item/chems/glass/beaker/bowl
name = "mixing bowl"
desc = "A large mixing bowl."
@@ -89,6 +86,9 @@
atom_flags = ATOM_FLAG_OPEN_CONTAINER
material = /decl/material/solid/metal/steel
+/obj/item/chems/glass/beaker/bowl/can_lid()
+ return FALSE
+
/obj/item/chems/glass/beaker/bowl/pottery
material = /decl/material/solid/stone/pottery
@@ -178,5 +178,5 @@
matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
volume = 120
-/obj/item/chems/glass/beaker/sulphuric/populate_reagents()
+/obj/item/chems/glass/beaker/sulfuric/populate_reagents()
add_to_reagents(/decl/material/liquid/acid, reagents.maximum_volume)
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 6e69142d458..658b68dddf7 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -37,9 +37,6 @@
reagent_volumes[T] = volume
var/decl/material/R = T
reagent_names += initial(R.name)
-
-/obj/item/chems/borghypo/Initialize()
- . = ..()
START_PROCESSING(SSobj, src)
/obj/item/chems/borghypo/Destroy()
@@ -100,14 +97,14 @@
return
-/obj/item/chems/borghypo/OnTopic(var/href, var/list/href_list)
+/obj/item/chems/borghypo/OnTopic(mob/user, href_list, datum/topic_state/state)
if(href_list["reagent_index"])
var/index = text2num(href_list["reagent_index"])
if(index > 0 && index <= reagent_ids.len)
playsound(loc, 'sound/effects/pop.ogg', 50, 0)
mode = index
var/decl/material/R = reagent_ids[mode]
- to_chat(usr, "Synthesizer is now producing '[initial(R.name)]'.")
+ to_chat(user, "Synthesizer is now producing '[initial(R.name)]'.")
return TOPIC_REFRESH
/obj/item/chems/borghypo/examine(mob/user, distance)
@@ -128,18 +125,18 @@
volume = 60
possible_transfer_amounts = @"[5,10,20,30]"
reagent_ids = list(
- /decl/material/liquid/ethanol/beer,
- /decl/material/liquid/ethanol/coffee,
- /decl/material/liquid/ethanol/whiskey,
- /decl/material/liquid/ethanol/wine,
- /decl/material/liquid/ethanol/vodka,
- /decl/material/liquid/ethanol/gin,
- /decl/material/liquid/ethanol/rum,
- /decl/material/liquid/ethanol/tequila,
- /decl/material/liquid/ethanol/vermouth,
- /decl/material/liquid/ethanol/cognac,
- /decl/material/liquid/ethanol/ale,
- /decl/material/liquid/ethanol/mead,
+ /decl/material/liquid/alcohol/beer,
+ /decl/material/liquid/alcohol/coffee,
+ /decl/material/liquid/alcohol/whiskey,
+ /decl/material/liquid/alcohol/wine,
+ /decl/material/liquid/alcohol/vodka,
+ /decl/material/liquid/alcohol/gin,
+ /decl/material/liquid/alcohol/rum,
+ /decl/material/liquid/alcohol/tequila,
+ /decl/material/liquid/alcohol/vermouth,
+ /decl/material/liquid/alcohol/cognac,
+ /decl/material/liquid/alcohol/ale,
+ /decl/material/liquid/alcohol/mead,
/decl/material/liquid/water,
/decl/material/liquid/nutriment/sugar,
/decl/material/solid/ice,
@@ -158,8 +155,8 @@
/decl/material/liquid/drink/hot_coco,
/decl/material/liquid/drink/tea/green,
/decl/material/liquid/drink/citrussoda,
- /decl/material/liquid/ethanol/beer,
- /decl/material/liquid/ethanol/coffee
+ /decl/material/liquid/alcohol/beer,
+ /decl/material/liquid/alcohol/coffee
)
/obj/item/chems/borghypo/service/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
diff --git a/code/modules/reagents/reagent_containers/bowl.dm b/code/modules/reagents/reagent_containers/bowl.dm
index 6b50d060cf0..bc54aadbaa4 100644
--- a/code/modules/reagents/reagent_containers/bowl.dm
+++ b/code/modules/reagents/reagent_containers/bowl.dm
@@ -9,57 +9,9 @@
volume = 30
amount_per_transfer_from_this = 5
-// Drinking out of bowls.
-/obj/item/chems/glass/bowl/attack_self(mob/user)
- if(is_edible(user) && handle_eaten_by_mob(user, user) != EATEN_INVALID)
- return TRUE
- return ..()
-
/obj/item/chems/glass/bowl/can_lid()
return FALSE
-/obj/item/chems/glass/bowl/get_food_default_transfer_amount(mob/eater)
- return eater?.get_eaten_transfer_amount(amount_per_transfer_from_this)
-
-/obj/item/chems/glass/bowl/get_edible_material_amount(mob/eater)
- return reagents?.total_volume
-
-/obj/item/chems/glass/bowl/get_food_consumption_method(mob/eater)
- return EATING_METHOD_DRINK
-
-/obj/item/chems/glass/bowl/get_utensil_food_type()
- return /obj/item/food/lump
-
-// Interaction code borrowed from /food.
-/obj/item/chems/glass/bowl/attackby(obj/item/W, mob/living/user)
-
- if(istype(W, /obj/item/food))
- if(!reagents?.total_volume)
- to_chat(user, SPAN_WARNING("\The [src] is empty."))
- return TRUE
- var/transferring = min(get_food_default_transfer_amount(user), REAGENTS_FREE_SPACE(W.reagents))
- if(!transferring)
- to_chat(user, SPAN_WARNING("You cannot dip \the [W] in \the [src]."))
- return TRUE
- reagents.trans_to_holder(W.reagents, transferring)
- user.visible_message(SPAN_NOTICE("\The [user] dunks \the [W] in \the [src]."))
- return TRUE
-
- var/obj/item/utensil/utensil = W
- if(istype(utensil) && (utensil.utensil_flags & UTENSIL_FLAG_SCOOP))
- if(utensil.loaded_food)
- to_chat(user, SPAN_WARNING("You already have something on \the [utensil]."))
- return TRUE
- if(!reagents?.total_volume)
- to_chat(user, SPAN_WARNING("\The [src] is empty."))
- return TRUE
- seperate_food_chunk(utensil, user)
- if(utensil.loaded_food?.reagents?.total_volume)
- to_chat(user, SPAN_NOTICE("You scoop up some of \the [utensil.loaded_food.reagents.get_primary_reagent_name()] with \the [utensil]."))
- return TRUE
-
- return ..()
-
// Predefined soup types for mapping.
/obj/item/chems/glass/bowl/mapped
abstract_type = /obj/item/chems/glass/bowl/mapped
@@ -181,6 +133,17 @@
DATA_MASK_COLOR = "#faa005"
)
+/obj/item/chems/glass/bowl/mapped/noodlesoup
+ abstract_type = /obj/item/chems/glass/bowl/mapped/noodlesoup
+ initial_reagent_type = /decl/material/liquid/nutriment/soup/noodle
+
+/obj/item/chems/glass/bowl/mapped/noodlesoup/chicken/get_initial_reagent_data()
+ return list(
+ DATA_TASTE = list("chicken" = 1, "carrot" = 1),
+ DATA_INGREDIENT_LIST = list("chicken" = 1, "carrot" = 1),
+ DATA_INGREDIENT_FLAGS = (ALLERGEN_VEGETABLE | ALLERGEN_MEAT),
+ )
+
// Mystery soup is special/stupid.
/obj/item/chems/glass/bowl/mystery
var/drained = FALSE
diff --git a/code/modules/reagents/reagent_containers/bucket.dm b/code/modules/reagents/reagent_containers/bucket.dm
index 1e072a63217..e2e5c9f2e56 100644
--- a/code/modules/reagents/reagent_containers/bucket.dm
+++ b/code/modules/reagents/reagent_containers/bucket.dm
@@ -15,6 +15,12 @@
drop_sound = 'sound/foley/donk1.ogg'
pickup_sound = 'sound/foley/pickup2.ogg'
+/obj/item/chems/glass/bucket/get_edible_material_amount(mob/eater)
+ return 0
+
+/obj/item/chems/glass/bucket/get_utensil_food_type()
+ return null
+
/obj/item/chems/glass/bucket/attackby(var/obj/D, mob/user)
if(istype(D, /obj/item/mop))
if(reagents.total_volume < 1)
@@ -44,7 +50,7 @@
desc = "It's a wooden bucket. How rustic."
icon = 'icons/obj/items/wooden_bucket.dmi'
volume = 200
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_COLOR // name is already modified
/// The material used for the chain, belts, and rivets holding the wood together, typically iron or steel.
/// Mostly used for visual and matter reasons. Initially a typepath, set to a decl on init.
diff --git a/code/modules/reagents/reagent_containers/condiments/condiment_appearance.dm b/code/modules/reagents/reagent_containers/condiments/condiment_appearance.dm
index b534f6bc812..4236c186754 100644
--- a/code/modules/reagents/reagent_containers/condiments/condiment_appearance.dm
+++ b/code/modules/reagents/reagent_containers/condiments/condiment_appearance.dm
@@ -75,7 +75,7 @@
condiment_center_of_mass = @'{"x":16,"y":8}'
/decl/condiment_appearance/cornoil
- condiment_type = /decl/material/liquid/nutriment/cornoil
+ condiment_type = /decl/material/liquid/oil/plant/corn
condiment_name = "corn oil"
condiment_desc = "A delicious oil used in cooking. Made from corn."
condiment_icon = 'icons/obj/food/condiments/cornoil.dmi'
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
index 809c6cedb83..386ad49b09a 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
@@ -39,23 +39,6 @@ var/global/const/DRINK_ICON_NOISY = "noise"
if(obj_flags & OBJ_FLAG_HOLLOW)
. /= HOLLOW_OBJECT_MATTER_MULTIPLIER
-/obj/item/chems/drinks/glass2/examine(mob/M)
- . = ..()
-
- for(var/I in extras)
- if(istype(I, /obj/item/glass_extra))
- to_chat(M, "There is \a [I] in \the [src].")
- else if(istype(I, /obj/item/food/processed_grown/slice))
- to_chat(M, "There is \a [I] on the rim.")
- else
- to_chat(M, "There is \a [I] somewhere on the glass. Somehow.")
-
- if(has_ice())
- to_chat(M, "There is some ice floating in the drink.")
-
- if(has_fizz())
- to_chat(M, "It is fizzing slightly.")
-
/obj/item/chems/drinks/glass2/proc/has_ice()
if(LAZYLEN(reagents.reagent_volumes))
var/decl/material/R = reagents.get_primary_reagent_decl()
@@ -113,7 +96,7 @@ var/global/const/DRINK_ICON_NOISY = "noise"
/obj/item/chems/drinks/glass2/examine(mob/user, distance)
. = ..()
- if(!istype(user) || distance > 1)
+ if(!istype(user))
return
var/list/extra_text
for(var/extra in extras)
@@ -122,8 +105,14 @@ var/global/const/DRINK_ICON_NOISY = "noise"
LAZYADD(extra_text, GE.glass_desc)
else if(istype(extra, /obj/item/food/processed_grown/slice))
LAZYADD(extra_text, "There is \a [extra] on the rim.")
+ else
+ to_chat(user, "There is \a [extra] somewhere on the glass. Somehow.")
if(length(extra_text))
to_chat(user, SPAN_NOTICE(jointext(extra_text," ")))
+ if(has_ice())
+ to_chat(user, "There is some ice floating in the drink.")
+ if(has_fizz())
+ to_chat(user, "It is fizzing slightly.")
/obj/item/chems/drinks/glass2/proc/get_filling_overlay(amount, overlay)
@@ -207,7 +196,7 @@ var/global/const/DRINK_ICON_NOISY = "noise"
/obj/item/chems/drinks/glass2/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/utensil/spoon))
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
user.visible_message("[user] bashes \the [src] with a spoon, shattering it to pieces! What a rube.")
playsound(src, "shatter", 30, 1)
if(reagents)
diff --git a/code/modules/reagents/reagent_containers/drinks.dm b/code/modules/reagents/reagent_containers/drinks.dm
index d1f01780b6e..d80b593cf60 100644
--- a/code/modules/reagents/reagent_containers/drinks.dm
+++ b/code/modules/reagents/reagent_containers/drinks.dm
@@ -57,7 +57,7 @@
return
return ..()
-/obj/item/chems/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
+/obj/item/chems/drinks/standard_dispenser_refill(mob/user, obj/structure/reagent_dispensers/target, skip_container_check = FALSE)
return do_open_check(user) && ..()
/obj/item/chems/drinks/standard_pour_into(var/mob/user, var/atom/target)
@@ -148,7 +148,7 @@
add_to_reagents(/decl/material/liquid/drink/milk/chocolate, reagents.maximum_volume)
/obj/item/chems/drinks/coffee
- name = "\improper Robust Coffee"
+ name = "cup of coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon_state = "coffee"
center_of_mass = @'{"x":15,"y":10}'
@@ -269,16 +269,14 @@
//tea and tea accessories
/obj/item/chems/drinks/tea
- name = "cup of tea master item"
+ name = "cup of tea"
desc = "A tall plastic cup full of the concept and ideal of tea."
icon_state = "coffee"
item_state = "coffee"
center_of_mass = @'{"x":16,"y":14}'
filling_states = @"[100]"
- base_name = "cup"
base_icon = "cup"
volume = 30
- presentation_flags = PRESENTATION_FLAG_NAME
/obj/item/chems/drinks/tea/black
name = "cup of black tea"
diff --git a/code/modules/reagents/reagent_containers/drinks/bottle.dm b/code/modules/reagents/reagent_containers/drinks/bottle.dm
index 1bca3f9d3a0..56e5f6b4720 100644
--- a/code/modules/reagents/reagent_containers/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/drinks/bottle.dm
@@ -34,14 +34,14 @@
//when thrown on impact, bottles smash and spill their contents
/obj/item/chems/drinks/bottle/throw_impact(atom/hit_atom, var/datum/thrownthing/TT)
..()
- if(material?.is_brittle() && TT.thrower && TT.thrower.a_intent != I_HELP)
+ if(material?.is_brittle() && TT.thrower && !TT.thrower.check_intent(I_FLAG_HELP))
if(TT.speed > throw_speed || smash_check(TT.dist_travelled)) //not as reliable as smashing directly
smash(loc, hit_atom)
/obj/item/chems/drinks/bottle/proc/smash_check(var/distance)
if(!material?.is_brittle())
return 0
- if(rag && rag.on_fire) // Molotovs should be somewhat reliable, they're a pain to make.
+ if(rag?.is_on_fire()) // Molotovs should be somewhat reliable, they're a pain to make.
return TRUE
if(!smash_duration)
return 0
@@ -68,13 +68,13 @@
if(rag)
rag.dropInto(T)
while(T)
+ if(!rag || QDELETED(src) || !HasBelow(T.z) || !T.is_open())
+ break
rag.forceMove(T)
- if(rag.on_fire)
+ if(rag.is_on_fire())
T.hotspot_expose(700, 5)
for(var/mob/living/M in T.contents)
- M.IgniteMob()
- if(!rag || QDELETED(src) || !HasBelow(T.z) || !T.is_open())
- break
+ M.ignite_fire()
T = GetBelow(T)
rag = null
@@ -148,7 +148,7 @@
. = ..()
underlays.Cut()
if(rag)
- var/underlay_image = image(icon='icons/obj/drinks.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay)
+ var/underlay_image = image(icon='icons/obj/drinks.dmi', icon_state=rag.is_on_fire()? "[rag_underlay]_lit" : rag_underlay)
underlays += underlay_image
set_light(rag.light_range, 0.1, rag.light_color)
else
@@ -157,7 +157,7 @@
/obj/item/chems/drinks/bottle/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
. = ..()
- if(user.a_intent != I_HURT)
+ if(!user.check_intent(I_FLAG_HARM))
return
if(!smash_check(1))
return //won't always break on the first hit
@@ -168,7 +168,7 @@
user.visible_message(SPAN_DANGER("\The [user] smashes \the [src] into [H]'s [affecting.name]!"))
// You are going to knock someone out for longer if they are not wearing a helmet.
var/blocked = target.get_blocked_ratio(hit_zone, BRUTE, damage = 10) * 100
- var/weaken_duration = smash_duration + min(0, get_attack_force(user) - blocked + 10)
+ var/weaken_duration = smash_duration + min(0, expend_attack_force(user) - blocked + 10)
if(weaken_duration)
target.apply_effect(min(weaken_duration, 5), WEAKEN, blocked) // Never weaken more than a flash!
else
@@ -178,8 +178,8 @@
if(reagents)
user.visible_message(SPAN_NOTICE("The contents of \the [src] splash all over [target]!"))
reagents.splash(target, reagents.total_volume)
- if(rag && rag.on_fire && istype(target))
- target.IgniteMob()
+ if(rag?.is_on_fire() && istype(target))
+ target.ignite_fire()
//Finally, smash the bottle. This kills (qdel) the bottle.
var/obj/item/broken_bottle/B = smash(target.loc, target)
@@ -228,8 +228,7 @@
throw_range = 5
item_state = "beer"
attack_verb = list("stabbed", "slashed", "attacked")
- sharp = 1
- edge = 0
+ sharp = TRUE
obj_flags = OBJ_FLAG_HOLLOW
material = /decl/material/solid/glass
_base_attack_force = 9
@@ -251,7 +250,7 @@
center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/gin/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/gin, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/gin, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
@@ -260,7 +259,7 @@
center_of_mass = @'{"x":16,"y":3}'
/obj/item/chems/drinks/bottle/whiskey/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/whiskey, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/whiskey, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/agedwhiskey
name = "aged whiskey"
@@ -269,7 +268,7 @@
center_of_mass = @'{"x":16,"y":3}'
/obj/item/chems/drinks/bottle/agedwhiskey/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/aged_whiskey, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/aged_whiskey, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/vodka
name = "Tunguska Triple Distilled"
@@ -278,7 +277,7 @@
center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/vodka/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/vodka, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/tequila
name = "Caccavo Guaranteed Quality tequila"
@@ -287,7 +286,7 @@
center_of_mass = @'{"x":16,"y":3}'
/obj/item/chems/drinks/bottle/tequila/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/tequila, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/patron
name = "Wrapp Artiste Patron"
@@ -296,7 +295,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/patron/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume - 5)
+ add_to_reagents(/decl/material/liquid/alcohol/tequila, reagents.maximum_volume - 5)
add_to_reagents(/decl/material/solid/metal/silver, 5)
/obj/item/chems/drinks/bottle/rum
@@ -306,7 +305,7 @@
center_of_mass = @'{"x":16,"y":8}'
/obj/item/chems/drinks/bottle/rum/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/rum, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/rum, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/holywater
name = "Flask of Holy Water"
@@ -324,7 +323,7 @@
center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/vermouth/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/vermouth, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/vermouth, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/kahlua
name = "Robert Robust's Coffee Liqueur"
@@ -333,7 +332,7 @@
center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/kahlua/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/coffee, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/coffee, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/goldschlager
name = "College Girl Goldschlager"
@@ -342,7 +341,7 @@
center_of_mass = @'{"x":15,"y":3}'
/obj/item/chems/drinks/bottle/goldschlager/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume - 5)
+ add_to_reagents(/decl/material/liquid/alcohol/vodka, reagents.maximum_volume - 5)
add_to_reagents(/decl/material/solid/metal/gold, 5)
/obj/item/chems/drinks/bottle/cognac
@@ -352,7 +351,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/cognac/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/cognac, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/cognac, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/wine
name = "Doublebeard Bearded Special Wine"
@@ -361,7 +360,7 @@
center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/wine/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/wine, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/wine, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/absinthe
name = "Jailbreaker Verte"
@@ -370,7 +369,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/absinthe/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/absinthe, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/absinthe, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/melonliquor
name = "Emeraldine Melon Liquor"
@@ -379,7 +378,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/melonliquor/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/melonliquor, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/melonliquor, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/bluecuracao
name = "Miss Blue Curacao"
@@ -388,7 +387,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/bluecuracao/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/bluecuracao, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/bluecuracao, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/herbal
name = "Liqueur d'Herbe"
@@ -397,7 +396,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/herbal/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/herbal, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/herbal, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/grenadine
name = "Briar Rose Grenadine Syrup"
@@ -442,7 +441,7 @@
center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/pwine/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/pwine, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/pwine, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/sake
name = "Takeo Sadow's Combined Sake"
@@ -451,7 +450,7 @@
center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/sake/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/sake, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/sake, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/champagne
@@ -463,7 +462,7 @@
var/opening
/obj/item/chems/drinks/bottle/champagne/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/champagne, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/champagne, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/champagne/open(mob/user)
if(ATOM_IS_OPEN_CONTAINER(src))
@@ -498,7 +497,7 @@
center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/jagermeister/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/jagermeister, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/jagermeister, reagents.maximum_volume)
//////////////////////////PREMIUM ALCOHOL ///////////////////////
/obj/item/chems/drinks/bottle/premiumvodka
@@ -511,20 +510,25 @@
var/namepick = pick("Four Stripes","Gilgamesh","Novaya Zemlya","Indie","STS-35")
var/typepick = pick("Absolut","Gold","Quadruple Distilled","Platinum","Standard")
name = "[namepick] [typepick]"
- add_to_reagents(/decl/material/liquid/ethanol/vodka/premium, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/vodka/premium, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/premiumwine
name = "Uve De Blanc"
desc = "You feel pretentious just looking at it."
icon_state = "premiumwine"
center_of_mass = @'{"x":16,"y":4}'
+ var/aged_min = 0
+ var/aged_max = 150
-/obj/item/chems/drinks/bottle/premiumwine/populate_reagents()
+/obj/item/chems/drinks/bottle/premiumwine/proc/make_random_name()
var/namepick = pick("Calumont","Sciacchemont","Recioto","Torcalota")
- var/agedyear = rand(global.using_map.game_year - 150, global.using_map.game_year)
- name = "Chateau [namepick] De Blanc"
+ return "bottle of Chateau [namepick] De Blanc"
+
+/obj/item/chems/drinks/bottle/premiumwine/populate_reagents()
+ var/agedyear = rand(global.using_map.game_year - aged_max, global.using_map.game_year - aged_min)
+ set_custom_name(make_random_name())
desc += " This bottle is marked as [agedyear] Vintage."
- add_to_reagents(/decl/material/liquid/ethanol/wine/premium, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/wine/premium, reagents.maximum_volume)
//////////////////////////JUICES AND STUFF ///////////////////////
@@ -607,7 +611,7 @@
center_of_mass = @'{"x":16,"y":12}'
/obj/item/chems/drinks/bottle/small/beer/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/beer, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/beer, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/small/ale
name = "\improper Magm-Ale"
@@ -617,7 +621,7 @@
center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/bottle/small/ale/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/ale, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/ale, reagents.maximum_volume)
/obj/item/chems/drinks/bottle/small/gingerbeer
name = "Ginger Beer"
diff --git a/code/modules/reagents/reagent_containers/drinks/cans.dm b/code/modules/reagents/reagent_containers/drinks/cans.dm
index 21e60c118a1..285fd84391e 100644
--- a/code/modules/reagents/reagent_containers/drinks/cans.dm
+++ b/code/modules/reagents/reagent_containers/drinks/cans.dm
@@ -50,7 +50,7 @@
center_of_mass = @'{"x":16,"y":8}'
/obj/item/chems/drinks/cans/thirteenloko/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/thirteenloko, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/thirteenloko, reagents.maximum_volume)
/obj/item/chems/drinks/cans/dr_gibb
name = "\improper Dr. Gibb"
@@ -203,7 +203,7 @@
center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/speer/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/beer/good, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/beer/good, reagents.maximum_volume)
/obj/item/chems/drinks/cans/ale
name = "\improper Magm-Ale"
@@ -212,4 +212,4 @@
center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/ale/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/ale, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/ale, reagents.maximum_volume)
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index c8412e988a5..bb8ea65e64b 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -30,7 +30,7 @@
var/trans = 0
if(ismob(target))
- if(user.a_intent == I_HELP)
+ if(user.check_intent(I_FLAG_HELP))
return
var/time = 20 //2/3rds the time of a syringe
diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm
index c28d70364f6..55309ff3d2c 100644
--- a/code/modules/reagents/reagent_containers/food.dm
+++ b/code/modules/reagents/reagent_containers/food.dm
@@ -142,7 +142,7 @@
/obj/item/food/Destroy()
QDEL_NULL(plate)
trash = null
- if(contents)
+ if(length(contents))
for(var/atom/movable/something in contents)
something.dropInto(loc)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/food/eggs.dm b/code/modules/reagents/reagent_containers/food/eggs.dm
index bf707313e55..ea7851b65ed 100644
--- a/code/modules/reagents/reagent_containers/food/eggs.dm
+++ b/code/modules/reagents/reagent_containers/food/eggs.dm
@@ -39,10 +39,10 @@
var/clr = W.get_tool_property(TOOL_PEN, TOOL_PROP_COLOR_NAME)
if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
- to_chat(usr, SPAN_WARNING("The egg refuses to take on this color!"))
+ to_chat(user, SPAN_WARNING("The egg refuses to take on this color!"))
return TRUE
- to_chat(usr, SPAN_NOTICE("You color \the [src] [clr]"))
+ to_chat(user, SPAN_NOTICE("You color \the [src] [clr]"))
icon_state = "egg-[clr]"
return TRUE
return ..()
diff --git a/code/modules/reagents/reagent_containers/food/fish.dm b/code/modules/reagents/reagent_containers/food/fish.dm
index d4a3a57106b..fd8ec91188e 100644
--- a/code/modules/reagents/reagent_containers/food/fish.dm
+++ b/code/modules/reagents/reagent_containers/food/fish.dm
@@ -70,7 +70,7 @@
qdel(src)
/obj/item/mollusc/attackby(var/obj/item/thing, var/mob/user)
- if(thing.sharp || thing.edge)
+ if(thing.is_sharp() || thing.has_edge())
user.visible_message(SPAN_NOTICE("\The [user] cracks open \the [src] with \the [thing]."))
crack_shell(user)
return TRUE
diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm
index b027e451e05..fc4f92672c1 100644
--- a/code/modules/reagents/reagent_containers/food/lunch.dm
+++ b/code/modules/reagents/reagent_containers/food/lunch.dm
@@ -69,10 +69,10 @@ var/global/list/lunchables_drink_reagents_ = list(
// This default list is a bit different, it contains items we don't want
var/global/list/lunchables_ethanol_reagents_ = list(
- /decl/material/liquid/ethanol/coffee,
- /decl/material/liquid/ethanol/hooch,
- /decl/material/liquid/ethanol/thirteenloko,
- /decl/material/liquid/ethanol/pwine
+ /decl/material/liquid/alcohol/coffee,
+ /decl/material/liquid/alcohol/hooch,
+ /decl/material/liquid/alcohol/thirteenloko,
+ /decl/material/liquid/alcohol/pwine
)
/proc/lunchables_lunches()
@@ -97,7 +97,7 @@ var/global/list/lunchables_ethanol_reagents_ = list(
/proc/lunchables_ethanol_reagents()
if(!(lunchables_ethanol_reagents_[lunchables_ethanol_reagents_[1]]))
- lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /decl/material/liquid/ethanol)
+ lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /decl/material/liquid/alcohol)
return lunchables_ethanol_reagents_
/proc/init_lunchable_list(var/list/lunches)
@@ -107,11 +107,11 @@ var/global/list/lunchables_ethanol_reagents_ = list(
.[initial(O.name)] = lunch
return sortTim(., /proc/cmp_text_asc)
-/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types)
+/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_type)
. = list()
- for(var/reagent_type in subtypesof(reagent_types))
- if(reagent_type in banned_reagents)
+ for(var/reagent_subtype in decls_repository.get_decls_of_type(reagent_type))
+ if(reagent_subtype in banned_reagents)
continue
- var/decl/material/reagent = reagent_type
- .[initial(reagent.name)] = reagent_type
+ var/decl/material/reagent = reagent_subtype
+ .[initial(reagent.name)] = reagent_subtype
return sortTim(., /proc/cmp_text_asc)
diff --git a/code/modules/reagents/reagent_containers/food/meat/fish.dm b/code/modules/reagents/reagent_containers/food/meat/fish.dm
index 80b15eae9fb..4036cb4efe7 100644
--- a/code/modules/reagents/reagent_containers/food/meat/fish.dm
+++ b/code/modules/reagents/reagent_containers/food/meat/fish.dm
@@ -29,7 +29,7 @@
/obj/item/food/fishandchips
name = "fish and chips"
desc = "Best enjoyed wrapped in a newspaper on a cold wet day."
- icon = 'icons/obj/food/fried/fishfingers.dmi'
+ icon = 'icons/obj/food/fried/fishandchips.dmi'
filling_color = "#e3d796"
center_of_mass = @'{"x":16,"y":16}'
nutriment_desc = list("salt" = 1, "chips" = 2, "fish" = 2)
diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm
index f387e9af0e7..6c6cf548fe6 100644
--- a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm
+++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm
@@ -49,7 +49,7 @@
return FALSE
/obj/item/pizzabox/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- if(proximity_flag && user?.a_intent == I_HURT && user != target)
+ if(proximity_flag && user?.check_intent(I_FLAG_HARM) && user != target)
jostle_pizza()
explode_stack()
@@ -189,7 +189,7 @@
/obj/item/pizzabox/attack_hand(mob/user)
- if(open && pizza && user.a_intent != I_GRAB)
+ if(open && pizza && !user.check_intent(I_FLAG_GRAB))
if(user.check_dexterity(DEXTERITY_HOLD_ITEM))
user.put_in_hands(pizza)
to_chat(user, SPAN_NOTICE("You take \the [pizza] out of \the [src]."))
@@ -304,6 +304,7 @@
/decl/interaction_handler/open_pizza_box
expected_target_type = /obj/item/pizzabox
+ examine_desc = "open or close $TARGET_THEM$"
/decl/interaction_handler/open_pizza_box/is_possible(atom/target, mob/user, obj/item/prop)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
deleted file mode 100644
index 64473fa9530..00000000000
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-
-////////////////////////////////////////////////////////////////////////////////
-/// (Mixing)Glass.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/chems/glass
- name = ""
- desc = ""
- icon_state = "null"
- item_state = "null"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = @"[5,10,15,25,30,60]"
- volume = 60
- w_class = ITEM_SIZE_SMALL
- atom_flags = ATOM_FLAG_OPEN_CONTAINER
- obj_flags = OBJ_FLAG_HOLLOW
- material = /decl/material/solid/glass
- abstract_type = /obj/item/chems/glass
- drop_sound = 'sound/foley/bottledrop1.ogg'
- pickup_sound = 'sound/foley/bottlepickup1.ogg'
- watertight = FALSE // /glass uses the open container flag for this
-
- var/list/can_be_placed_into = list(
- /obj/machinery/chem_master/,
- /obj/machinery/chemical_dispenser,
- /obj/machinery/reagentgrinder,
- /obj/structure/table,
- /obj/structure/closet,
- /obj/structure/hygiene/sink,
- /obj/item/grenade/chem_grenade,
- /mob/living/bot/medbot,
- /obj/item/secure_storage/safe,
- /obj/structure/iv_drip,
- /obj/machinery/disposal,
- /mob/living/simple_animal/cow,
- /mob/living/simple_animal/hostile/goat,
- /obj/machinery/sleeper,
- /obj/machinery/smartfridge/,
- /obj/machinery/biogenerator,
- /obj/machinery/constructable_frame,
- /obj/machinery/radiocarbon_spectrometer,
- /obj/machinery/material_processing/extractor
- )
-
-/obj/item/chems/glass/examine(mob/user, distance)
- . = ..()
- if(distance > 2)
- return
-
- if(reagents?.total_volume)
- to_chat(user, SPAN_NOTICE("It contains [reagents.total_volume] units of reagents."))
- else
- to_chat(user, SPAN_NOTICE("It is empty."))
- if(!ATOM_IS_OPEN_CONTAINER(src))
- to_chat(user,SPAN_NOTICE("The airtight lid seals it completely."))
-
-/obj/item/chems/glass/proc/can_lid()
- return TRUE
-
-/obj/item/chems/glass/attack_self()
- . = ..()
- if(!. && can_lid())
- if(ATOM_IS_OPEN_CONTAINER(src))
- to_chat(usr, SPAN_NOTICE("You put the lid on \the [src]."))
- atom_flags ^= ATOM_FLAG_OPEN_CONTAINER
- else
- to_chat(usr, SPAN_NOTICE("You take the lid off \the [src]."))
- atom_flags |= ATOM_FLAG_OPEN_CONTAINER
- update_icon()
-
-/obj/item/chems/glass/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
- if(get_attack_force(user) && !(item_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT)
- return ..()
- return FALSE
-
-/obj/item/chems/glass/afterattack(var/obj/target, var/mob/user, var/proximity)
- if(!ATOM_IS_OPEN_CONTAINER(src) || !proximity) //Is the container open & are they next to whatever they're clicking?
- return FALSE //If not, do nothing.
- if(target?.storage)
- return TRUE
- for(var/type in can_be_placed_into) //Is it something it can be placed into?
- if(istype(target, type))
- return TRUE
- if(standard_dispenser_refill(user, target)) //Are they clicking a water tank/some dispenser?
- return TRUE
- if(standard_pour_into(user, target)) //Pouring into another beaker?
- return TRUE
- if(handle_eaten_by_mob(user, target) != EATEN_INVALID)
- return TRUE
- if(user.a_intent == I_HURT)
- if(standard_splash_mob(user,target))
- return TRUE
- if(reagents && reagents.total_volume)
- to_chat(user, SPAN_DANGER("You splash the contents of \the [src] onto \the [target]."))
- reagents.splash(target, reagents.total_volume)
- return TRUE
- else if(reagents && reagents.total_volume)
- to_chat(user, SPAN_NOTICE("You splash a small amount of the contents of \the [src] onto \the [target]."))
- reagents.splash(target, min(reagents.total_volume, 5))
- return TRUE
- . = ..()
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index af8367645f7..be5659ebba4 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -185,6 +185,7 @@
. = ..()
if(label_text)
update_name()
+ update_icon()
/obj/item/chems/hypospray/autoinjector/populate_reagents()
SHOULD_CALL_PARENT(TRUE)
@@ -192,10 +193,6 @@
if(reagents?.total_volume > 0 && autolabel && !label_text) // don't override preset labels
label_text = "[reagents.get_primary_reagent_name()], [reagents.total_volume]u"
-/obj/item/chems/hypospray/autoinjector/Initialize()
- . = ..()
- update_icon()
-
/obj/item/chems/hypospray/autoinjector/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
. = ..()
if(.)
diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm
index 275a3bac13d..19eaaa9cd1d 100644
--- a/code/modules/reagents/reagent_containers/inhaler.dm
+++ b/code/modules/reagents/reagent_containers/inhaler.dm
@@ -62,7 +62,7 @@
if(user == target)
user.visible_message(
SPAN_NOTICE("\The [user] inhales from \the [src]."),
- SPAN_NOTICE("You stick the \the [src] in your mouth and press the injection button.")
+ SPAN_NOTICE("You stick \the [src] in your mouth and press the injection button.")
)
else
user.visible_message(
diff --git a/code/modules/reagents/reagent_containers/mortar.dm b/code/modules/reagents/reagent_containers/mortar.dm
index fe85a5c09fe..b19a7340e23 100644
--- a/code/modules/reagents/reagent_containers/mortar.dm
+++ b/code/modules/reagents/reagent_containers/mortar.dm
@@ -28,7 +28,7 @@
var/decl/material/attacking_material = using_item.get_material()
var/decl/material/crushing_material = crushing_item?.get_material()
var/skill_factor = CLAMP01(1 + 0.3*(user.get_skill_value(SKILL_CHEMISTRY) - SKILL_EXPERT)/(SKILL_EXPERT - SKILL_MIN))
- if(using_item.get_attack_force(user) <= 0 || !attacking_material || !crushing_material)
+ if(using_item.expend_attack_force(user) <= 0 || !attacking_material || !crushing_material)
return TRUE
if(attacking_material.hardness <= crushing_material.hardness)
to_chat(user, SPAN_NOTICE("\The [using_item] is not hard enough to crush \the [crushing_item]."))
diff --git a/code/modules/reagents/reagent_containers/packets.dm b/code/modules/reagents/reagent_containers/packets.dm
index c46af37998f..391c3440471 100644
--- a/code/modules/reagents/reagent_containers/packets.dm
+++ b/code/modules/reagents/reagent_containers/packets.dm
@@ -7,7 +7,14 @@
amount_per_transfer_from_this = 1
volume = 10
-/obj/item/chems/packet/afterattack(var/obj/target, var/mob/user, var/proximity)
+/obj/item/chems/packet/attack_self(mob/user)
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ atom_flags |= ATOM_FLAG_OPEN_CONTAINER
+ to_chat(user, SPAN_NOTICE("You tear \the [src] open."))
+ return TRUE
+ return ..()
+
+/obj/item/chems/packet/afterattack(obj/target, mob/user, proximity)
if(!proximity)
return ..()
if(standard_dispenser_refill(user, target))
@@ -54,6 +61,14 @@
icon = 'icons/obj/food/condiments/packets/packet_medium.dmi'
/obj/item/chems/packet/honey/populate_reagents()
+ add_to_reagents(/decl/material/liquid/nutriment/honey, reagents.maximum_volume)
+
+/obj/item/chems/packet/honey_fake
+ name = "'honey' packet"
+ desc = "Contains 10u of allergen-free non-GMO 'honey'."
+ icon = 'icons/obj/food/condiments/packets/packet_medium.dmi'
+
+/obj/item/chems/packet/honey_fake/populate_reagents()
add_to_reagents(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume)
/obj/item/chems/packet/capsaicin
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 2df686595f8..c3b4cbd9ff8 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -36,9 +36,6 @@
if(A?.storage || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/chems) || istype(A, /obj/structure/hygiene/sink) || istype(A, /obj/structure/janitorialcart))
return
- if(istype(A, /spell))
- return
-
if(proximity)
if(standard_dispenser_refill(user, A))
return
@@ -50,7 +47,7 @@
Spray_at(A, user, proximity)
if(reagents.has_reagent(/decl/material/liquid/acid))
- log_and_message_admins("fired sulphuric acid from \a [src].", user)
+ log_and_message_admins("fired sulfuric acid from \a [src].", user)
if(reagents.has_reagent(/decl/material/liquid/acid/polyacid))
log_and_message_admins("fired polyacid from \a [src].", user)
if(reagents.has_reagent(/decl/material/liquid/lube))
@@ -85,7 +82,7 @@
/obj/item/chems/spray/attack_self(var/mob/user)
if(has_safety())
- toggle_safety()
+ toggle_safety(user)
return TRUE
else
//If no safety, we just toggle the nozzle
@@ -98,9 +95,9 @@
/obj/item/chems/spray/proc/has_safety()
return FALSE
-/obj/item/chems/spray/proc/toggle_safety()
+/obj/item/chems/spray/proc/toggle_safety(mob/user)
safety = !safety
- to_chat(usr, SPAN_NOTICE("You switch the safety [safety ? "on" : "off"]."))
+ to_chat(user, SPAN_NOTICE("You switch the safety [safety ? "on" : "off"]."))
/obj/item/chems/spray/examine(mob/user, distance)
. = ..()
@@ -109,7 +106,7 @@
if(has_safety() && distance <= 1)
to_chat(user, "The safety is [safety ? "on" : "off"].")
-/obj/item/chems/get_alt_interactions(mob/user)
+/obj/item/chems/spray/get_alt_interactions(mob/user)
. = ..()
LAZYADD(., /decl/interaction_handler/empty/chems)
LAZYADD(., /decl/interaction_handler/next_spray_amount)
@@ -119,6 +116,7 @@
name = "Next Nozzle Setting"
expected_target_type = /obj/item/chems/spray
interaction_flags = INTERACTION_NEEDS_INVENTORY | INTERACTION_NEEDS_PHYSICAL_INTERACTION
+ examine_desc = "select the next nozzle spray amount"
/decl/interaction_handler/next_spray_amount/is_possible(obj/item/chems/spray/target, mob/user, obj/item/prop)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index af3b52c34c2..0018d127862 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -17,7 +17,7 @@
volume = 15
w_class = ITEM_SIZE_TINY
slot_flags = SLOT_EARS
- sharp = 1
+ sharp = TRUE
item_flags = ITEM_FLAG_NO_BLUDGEON
var/mode = SYRINGE_DRAW
@@ -82,7 +82,7 @@
if(!target.reagents)
return
- if((user.a_intent == I_HURT) && ismob(target))
+ if((user.check_intent(I_FLAG_HARM)) && ismob(target))
if(can_stab)
syringestab(target, user)
else
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 22877a3e341..778ed37be45 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -10,6 +10,7 @@
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY)
max_health = 100
tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
+
var/wrenchable = TRUE
var/unwrenched = FALSE
var/tmp/volume = 1000
@@ -37,9 +38,9 @@
if(!(. = ..()))
return
if(reagents?.total_volume > 0)
- tool_interaction_flags = 0
+ tool_interaction_flags &= ~TOOL_INTERACTION_DECONSTRUCT
else
- tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
+ tool_interaction_flags |= TOOL_INTERACTION_DECONSTRUCT
/obj/structure/reagent_dispensers/initialize_reagents(populate = TRUE)
if(!reagents)
@@ -89,7 +90,7 @@
// We do this here to avoid putting the vessel straight into storage.
// This is usually handled by afterattack on /chems.
- if(storage && ATOM_IS_OPEN_CONTAINER(W) && user.a_intent == I_HELP)
+ if(storage && ATOM_IS_OPEN_CONTAINER(W) && user.check_intent(I_FLAG_HELP))
if(W.standard_dispenser_refill(user, src))
return TRUE
if(W.standard_pour_into(user, src))
@@ -102,6 +103,7 @@
log_and_message_admins("opened a tank at [get_area_name(loc)].")
leak()
return TRUE
+
. = ..()
/obj/structure/reagent_dispensers/verb/set_amount_dispensed()
@@ -118,11 +120,6 @@
if (N)
amount_dispensed = N
-/obj/structure/reagent_dispensers/physically_destroyed(var/skip_qdel)
- if(reagents?.total_volume)
- reagents.trans_to_turf(get_turf(src), reagents.total_volume)
- . = ..()
-
/obj/structure/reagent_dispensers/explosion_act(severity)
. = ..()
if(. && (severity == 1) || (severity == 2 && prob(50)) || (severity == 3 && prob(5)))
@@ -256,7 +253,7 @@
/obj/structure/reagent_dispensers/water_cooler
name = "water cooler"
desc = "A machine that dispenses cool water to drink."
- icon = 'icons/obj/vending.dmi'
+ icon = 'icons/obj/structures/water_cooler.dmi'
icon_state = "water_cooler"
possible_transfer_amounts = null
amount_dispensed = 5
@@ -299,10 +296,15 @@
qdel(C)
cups++
return TRUE
+ return ..()
+/obj/structure/reagent_dispensers/water_cooler/on_reagent_change()
. = ..()
- if(!. && ATOM_IS_OPEN_CONTAINER(W))
- flick("[icon_state]-vend", src)
+ // Bubbles in top of cooler.
+ if(reagents?.total_volume)
+ var/vend_state = "[icon_state]-vend"
+ if(check_state_in_icon(vend_state, icon))
+ flick(vend_state, src)
/obj/structure/reagent_dispensers/beerkeg
name = "beer keg"
@@ -314,14 +316,15 @@
matter = list(/decl/material/solid/metal/stainlesssteel = MATTER_AMOUNT_TRACE)
/obj/structure/reagent_dispensers/beerkeg/populate_reagents()
- add_to_reagents(/decl/material/liquid/ethanol/beer, reagents.maximum_volume)
+ add_to_reagents(/decl/material/liquid/alcohol/beer, reagents.maximum_volume)
/obj/structure/reagent_dispensers/acid
- name = "sulphuric acid dispenser"
+ name = "sulfuric acid dispenser"
desc = "A dispenser of acid for industrial processes."
icon_state = "acidtank"
amount_dispensed = 10
anchored = TRUE
+ density = FALSE
/obj/structure/reagent_dispensers/acid/populate_reagents()
add_to_reagents(/decl/material/liquid/acid, reagents.maximum_volume)
@@ -351,6 +354,7 @@
/decl/interaction_handler/toggle_open/reagent_dispenser
name = "Toggle refilling cap"
expected_target_type = /obj/structure/reagent_dispensers
+ examine_desc = "open or close the refilling cap"
/decl/interaction_handler/toggle_open/reagent_dispenser/invoked(atom/target, mob/user, obj/item/prop)
if(target.atom_flags & ATOM_FLAG_OPEN_CONTAINER)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index a753cdde1c7..a50fa92e738 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -114,7 +114,7 @@ var/global/list/diversion_junctions = list()
/obj/machinery/disposal/receive_mouse_drop(atom/dropping, mob/user, params)
- . = (user?.a_intent != I_HURT && ..())
+ . = (!user?.check_intent(I_FLAG_HARM) && ..())
if(!. && !(stat & BROKEN))
diff --git a/code/modules/recycling/disposalholder.dm b/code/modules/recycling/disposalholder.dm
index 4f3546d06a6..7a95d7d2ce2 100644
--- a/code/modules/recycling/disposalholder.dm
+++ b/code/modules/recycling/disposalholder.dm
@@ -82,11 +82,11 @@
if(!curr)
last.expel(src, loc, dir)
- // find the turf which should contain the next pipe
+/// find the turf which should contain the next pipe
/obj/structure/disposalholder/proc/nextloc()
return get_step(loc,dir)
-// find a matching pipe on a turf
+/// find a matching pipe on a turf
/obj/structure/disposalholder/proc/findpipe(var/turf/containing_turf)
if(!containing_turf)
return null
@@ -98,8 +98,8 @@
// if no matching pipe, return null
return null
-// merge two holder objects
-// used when a a holder meets a stuck holder
+/// merge two holder objects
+/// used when a holder meets a stuck holder
/obj/structure/disposalholder/proc/merge(var/obj/structure/disposalholder/other)
for(var/atom/movable/other_movable in other)
other_movable.forceMove(src) // move everything in other holder to this one
@@ -119,7 +119,7 @@
else
partialTag = new_tag
-// called when player tries to move while in a pipe
+/// called when player tries to move while in a pipe
/obj/structure/disposalholder/relaymove(mob/user)
if(!isliving(user))
return
diff --git a/code/modules/recycling/disposalpipe.dm b/code/modules/recycling/disposalpipe.dm
index 60401186373..88e11fbbdc6 100644
--- a/code/modules/recycling/disposalpipe.dm
+++ b/code/modules/recycling/disposalpipe.dm
@@ -184,8 +184,7 @@
if(H)
expel(H, T, 0)
- spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
- qdel(src)
+ QDEL_IN(src, 2) // delete pipe after 2 ticks to ensure expel proc finished
// pipe affected by explosion
@@ -232,37 +231,9 @@
qdel(src)
-// pipe is deleted
-// ensure if holder is present, it is expelled
-/obj/structure/disposalpipe/Destroy()
- var/obj/structure/disposalholder/H = locate() in src
- if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // deleting pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.forceMove(T)
- AM.pipe_eject(0)
- qdel(H)
- return ..()
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
- . = ..()
-
/obj/structure/disposalpipe/hides_under_flooring()
return 1
-// *** TEST verb
-//client/verb/dispstop()
-// for(var/obj/structure/disposalholder/H in world)
-// H.active = 0
-
// a straight or bent segment
/obj/structure/disposalpipe/segment
icon_state = "pipe-s" // Sadly this var stores state. "pipe-c" is corner. Should be changed, but requires huge map diff.
diff --git a/code/modules/recycling/wrapped_package.dm b/code/modules/recycling/wrapped_package.dm
index fe3003c6773..da2a33bfd70 100644
--- a/code/modules/recycling/wrapped_package.dm
+++ b/code/modules/recycling/wrapped_package.dm
@@ -195,7 +195,7 @@
update_icon()
return TRUE
- else if(W.sharp && user.a_intent == I_HELP)
+ else if(W.is_sharp() && user.check_intent(I_FLAG_HELP))
//You can alternative cut the wrapper off with a sharp item
unwrap(user)
return TRUE
diff --git a/code/modules/research/design_console.dm b/code/modules/research/design_console.dm
index 73b6abc3255..5e2e43978ad 100644
--- a/code/modules/research/design_console.dm
+++ b/code/modules/research/design_console.dm
@@ -1,11 +1,16 @@
/obj/machinery/computer/design_console
name = "design database console"
desc = "A console for interfacing with a research and development design network."
+ maximum_component_parts = list(
+ /obj/item/stock_parts/item_holder/disk_reader = 1,
+ /obj/item/stock_parts = 15,
+ )
+ /// A cached reference to our disk reader part, if present.
+ var/obj/item/stock_parts/item_holder/disk_reader/disk_reader
var/initial_network_id
var/initial_network_key
var/list/local_cache
- var/obj/item/disk/design_disk/disk
var/obj/machinery/design_database/viewing_database
var/showing_designs = FALSE
@@ -13,36 +18,34 @@
. = ..()
set_extension(src, /datum/extension/network_device, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS)
+/obj/machinery/computer/design_console/Destroy()
+ viewing_database = null
+ disk_reader = null
+ return ..()
+
/obj/machinery/computer/design_console/modify_mapped_vars(map_hash)
..()
ADJUST_TAG_VAR(initial_network_id, map_hash)
+/obj/machinery/computer/design_console/RefreshParts()
+ . = ..()
+ disk_reader = get_component_of_type(/obj/item/stock_parts/item_holder/disk_reader)
+ if(disk_reader)
+ disk_reader.register_on_insert(CALLBACK(src, PROC_REF(update_ui)))
+ disk_reader.register_on_eject(CALLBACK(src, PROC_REF(update_ui)))
+
+/obj/machinery/computer/design_console/proc/try_get_disk()
+ return disk_reader?.get_inserted()
+
+/obj/machinery/computer/design_console/proc/update_ui()
+ SSnano.update_uis(src)
+
/obj/machinery/computer/design_console/handle_post_network_connection()
..()
sync_network()
-/obj/machinery/computer/design_console/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/disk/design_disk))
- if(disk)
- to_chat(user, SPAN_WARNING("\The [src] already has a disk inserted."))
- return TRUE
- if(user.try_unequip(I, src))
- visible_message("\The [user] slots \the [I] into \the [src].")
- disk = I
- return TRUE
- . = ..()
-
/obj/machinery/computer/design_console/proc/eject_disk(var/mob/user)
- if(disk)
- disk.dropInto(loc)
- if(user)
- if(!issilicon(user))
- user.put_in_hands(disk)
- if(Adjacent(user, src))
- visible_message(SPAN_NOTICE("\The [user] removes \the [disk] from \the [src]."))
- disk = null
- return TRUE
- return FALSE
+ return !!disk_reader.eject_item(user)
/obj/machinery/computer/design_console/interface_interact(mob/user)
ui_interact(user)
@@ -55,9 +58,13 @@
var/datum/computer_network/network = device.get_network()
data["network_id"] = device.network_tag
+ var/obj/item/disk/design_disk/disk = try_get_disk()
if(disk)
data["disk_name"] = disk.name
- data["disk_tech"] = disk.blueprint ? disk.blueprint.name : "no design saved"
+ if(istype(disk))
+ data["disk_tech"] = disk.blueprint ? disk.blueprint.name : "no design saved"
+ else
+ data["disk_tech"] = "invalid data format"
else
data["disk_name"] = "no disk loaded"
@@ -159,7 +166,8 @@
if(href_list["save_design"])
var/datum/fabricator_recipe/design = locate(href_list["save_design"])
- if(istype(design) && disk)
+ var/obj/item/disk/design_disk/disk = try_get_disk()
+ if(istype(design) && istype(disk))
disk.blueprint = design
disk.SetName("[initial(disk.name)] ([disk.blueprint.name])")
return TOPIC_REFRESH
@@ -219,20 +227,3 @@
var/list/techs = get_network_tech_levels()
for(var/obj/machinery/fabricator/fab in network.get_devices_by_type(/obj/machinery/fabricator))
fab.refresh_design_cache(techs)
-
-/obj/machinery/computer/design_console/get_alt_interactions(var/mob/user)
- . = ..()
- LAZYADD(., /decl/interaction_handler/remove_disk/console)
-
-/decl/interaction_handler/remove_disk/console
- expected_target_type = /obj/machinery/computer/design_console
-
-/decl/interaction_handler/remove_disk/console/is_possible(atom/target, mob/user, obj/item/prop)
- . = ..()
- if(.)
- var/obj/machinery/computer/design_console/D = target
- . = !!D.disk
-
-/decl/interaction_handler/remove_disk/console/invoked(atom/target, mob/user, obj/item/prop)
- var/obj/machinery/computer/design_console/D = target
- D.eject_disk(user)
diff --git a/code/modules/research/design_database.dm b/code/modules/research/design_database.dm
index 11e53477ef5..5c5a6b3cc41 100644
--- a/code/modules/research/design_database.dm
+++ b/code/modules/research/design_database.dm
@@ -17,12 +17,17 @@ var/global/list/default_initial_tech_levels
construct_state = /decl/machine_construction/default/panel_closed
uncreated_component_parts = null
stat_immune = 0
+ maximum_component_parts = list(
+ /obj/item/stock_parts/item_holder/disk_reader = 1,
+ /obj/item/stock_parts = 15,
+ )
+ /// A cached reference to our disk reader part, if present.
+ var/obj/item/stock_parts/item_holder/disk_reader/disk_reader
var/initial_network_id
var/initial_network_key
var/list/tech_levels
var/need_disk_operation = FALSE
- var/obj/item/disk/tech_disk/disk
var/sync_policy = SYNC_PULL_NETWORK|SYNC_PUSH_NETWORK|SYNC_PULL_DISK
/obj/machinery/design_database/proc/toggle_sync_policy_flag(var/sync_flag)
@@ -36,13 +41,17 @@ var/global/list/default_initial_tech_levels
var/list/data = list()
var/datum/extension/network_device/device = get_extension(src, /datum/extension/network_device)
data["network_id"] = device.network_tag
+ var/obj/item/disk/tech_disk/disk = try_get_disk()
if(disk)
data["disk_name"] = disk.name
- var/list/tech_data = list()
- for(var/tech in disk.stored_tech)
- var/decl/research_field/field = SSfabrication.get_research_field_by_id(tech)
- tech_data += list(list("field" = field.name, "desc" = field.desc, "level" = "[disk.stored_tech[tech]].0 GQ"))
- data["disk_tech"] = tech_data
+ if(istype(disk))
+ var/list/tech_data = list()
+ for(var/tech in disk.stored_tech)
+ var/decl/research_field/field = SSfabrication.get_research_field_by_id(tech)
+ tech_data += list(list("field" = field.name, "desc" = field.desc, "level" = "[disk.stored_tech[tech]].0 GQ"))
+ data["disk_tech"] = tech_data
+ else
+ data["disk_error"] = "invalid data format"
else
data["disk_name"] = "no disk loaded"
@@ -116,26 +125,30 @@ var/global/list/default_initial_tech_levels
return
// Read or write from a loaded disk.
+ var/obj/item/disk/tech_disk/disk = try_get_disk()
if(disk && need_disk_operation)
- if(sync_policy & SYNC_PULL_DISK)
- var/new_tech = FALSE
- for(var/tech in disk.stored_tech)
- if(tech_levels[tech] < disk.stored_tech[tech])
- tech_levels[tech] = disk.stored_tech[tech]
- new_tech = TRUE
- if(new_tech)
- visible_message(SPAN_NOTICE("\The [src] clicks and chirps as it reads from \the [disk]."))
- if((sync_policy & SYNC_PUSH_NETWORK) && !sync_design_consoles())
- visible_message(SPAN_WARNING("\The [src] flashes an error light from its network interface."))
-
- if(sync_policy & SYNC_PUSH_DISK)
- var/new_tech
- for(var/tech in tech_levels)
- if(tech_levels[tech] > LAZYACCESS(disk.stored_tech, tech))
- new_tech = TRUE
- LAZYSET(disk.stored_tech, tech, tech_levels[tech])
- if(new_tech)
- visible_message(SPAN_NOTICE("\The [src] whirrs and drones as it writes to \the [disk]."))
+ if(!istype(disk)) // wrong type of disk!
+ visible_message(SPAN_WARNING("\The [src] whirrs and drones, before emitting an ominous grinding sound."))
+ else
+ if(sync_policy & SYNC_PULL_DISK)
+ var/new_tech = FALSE
+ for(var/tech in disk.stored_tech)
+ if(tech_levels[tech] < disk.stored_tech[tech])
+ tech_levels[tech] = disk.stored_tech[tech]
+ new_tech = TRUE
+ if(new_tech)
+ visible_message(SPAN_NOTICE("\The [src] clicks and chirps as it reads from \the [disk]."))
+ if((sync_policy & SYNC_PUSH_NETWORK) && !sync_design_consoles())
+ visible_message(SPAN_WARNING("\The [src] flashes an error light from its network interface."))
+
+ if(sync_policy & SYNC_PUSH_DISK)
+ var/new_tech
+ for(var/tech in tech_levels)
+ if(tech_levels[tech] > LAZYACCESS(disk.stored_tech, tech))
+ new_tech = TRUE
+ LAZYSET(disk.stored_tech, tech, tech_levels[tech])
+ if(new_tech)
+ visible_message(SPAN_NOTICE("\The [src] whirrs and drones as it writes to \the [disk]."))
visible_message("The I/O light on \the [src] stops blinking.")
need_disk_operation = FALSE
@@ -148,49 +161,35 @@ var/global/list/default_initial_tech_levels
/obj/machinery/design_database/Destroy()
design_databases -= src
- QDEL_NULL(disk)
+ disk_reader = null
. = ..()
-/obj/machinery/design_database/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/disk/tech_disk))
- if(disk)
- to_chat(user, SPAN_WARNING("\The [src] already has a disk inserted."))
- return TRUE
- if(user.try_unequip(I, src))
- visible_message("\The [user] slots \the [I] into \the [src].")
- visible_message(SPAN_NOTICE("\The [src]'s I/O light begins to blink."))
- disk = I
- need_disk_operation = TRUE
- return TRUE
+/obj/machinery/design_database/proc/on_insert_disk(obj/item/disk/D, mob/user)
+ visible_message(SPAN_NOTICE("\The [src]'s I/O light begins to blink."))
+ need_disk_operation = TRUE
+ update_ui()
- . = ..()
+/obj/machinery/design_database/proc/on_eject_disk(obj/item/disk/D, mob/user)
+ need_disk_operation = FALSE
+ update_ui()
-/obj/machinery/design_database/proc/eject_disk(var/mob/user)
- if(disk)
- disk.dropInto(loc)
- need_disk_operation = FALSE
- if(user)
- if(!issilicon(user))
- user.put_in_hands(disk)
- if(Adjacent(user, src))
- visible_message(SPAN_NOTICE("\The [user] removes \the [disk] from \the [src]."))
- disk = null
- return TRUE
- return FALSE
-
-/obj/machinery/design_database/get_alt_interactions(var/mob/user)
+/obj/machinery/design_database/RefreshParts()
. = ..()
- LAZYADD(., /decl/interaction_handler/remove_disk/designs)
+ disk_reader = get_component_of_type(/obj/item/stock_parts/item_holder/disk_reader)
+ if(disk_reader)
+ disk_reader.register_on_insert(CALLBACK(src, PROC_REF(on_insert_disk)))
+ disk_reader.register_on_eject(CALLBACK(src, PROC_REF(on_eject_disk)))
-/decl/interaction_handler/remove_disk/designs
- expected_target_type = /obj/machinery/design_database
+/obj/machinery/design_database/proc/try_get_disk()
+ return disk_reader?.get_inserted()
-/decl/interaction_handler/remove_disk/designs/is_possible(atom/target, mob/user, obj/item/prop)
- . = ..()
- if(.)
- var/obj/machinery/design_database/D = target
- . = !!D.disk
+/obj/machinery/design_database/proc/update_ui()
+ SSnano.update_uis(src)
-/decl/interaction_handler/remove_disk/designs/invoked(atom/target, mob/user, obj/item/prop)
- var/obj/machinery/design_database/D = target
- D.eject_disk(user)
+// used for, specifically, removing a disk via the UI
+/obj/machinery/design_database/proc/eject_disk(var/mob/user)
+ if(!disk_reader)
+ to_chat(user, SPAN_WARNING("\The [src] has no disk drive installed."))
+ return FALSE
+ . = !isnull(disk_reader.eject_item(user))
+ update_ui()
diff --git a/code/modules/research/design_database_analyzer.dm b/code/modules/research/design_database_analyzer.dm
index ad1c78d239a..6750ea55a04 100644
--- a/code/modules/research/design_database_analyzer.dm
+++ b/code/modules/research/design_database_analyzer.dm
@@ -81,7 +81,7 @@
/obj/machinery/destructive_analyzer/attackby(var/obj/item/O, var/mob/user)
- if(IS_MULTITOOL(O) && user.a_intent != I_HURT)
+ if(IS_MULTITOOL(O) && !user.check_intent(I_FLAG_HARM))
var/datum/extension/local_network_member/fabnet = get_extension(src, /datum/extension/local_network_member)
fabnet.get_new_tag(user)
return TRUE
@@ -89,8 +89,8 @@
if(busy)
to_chat(user, SPAN_WARNING("\The [src] is busy right now."))
return TRUE
- if(component_attackby(O, user))
- return TRUE
+ if((. = component_attackby(O, user)))
+ return
if(isrobot(user))
return TRUE
if(loaded_item)
diff --git a/code/modules/sealant_gun/sealant_injector.dm b/code/modules/sealant_gun/sealant_injector.dm
index a3e89a44343..99f8553586d 100644
--- a/code/modules/sealant_gun/sealant_injector.dm
+++ b/code/modules/sealant_gun/sealant_injector.dm
@@ -103,6 +103,7 @@
/decl/interaction_handler/sealant_try_inject
name = "Inject Sealant"
expected_target_type = /obj/structure/sealant_injector
+ examine_desc = "inject sealant from a held item"
/decl/interaction_handler/sealant_try_inject/invoked(atom/target, mob/user, obj/item/prop)
var/obj/structure/sealant_injector/SI = target
diff --git a/code/modules/security_levels/_security_level.dm b/code/modules/security_levels/_security_level.dm
new file mode 100644
index 00000000000..ca4ba811c82
--- /dev/null
+++ b/code/modules/security_levels/_security_level.dm
@@ -0,0 +1,48 @@
+/decl/security_level
+ var/icon = 'icons/misc/security_state.dmi'
+ var/name
+
+ // These values are primarily for station alarms and status displays, and which light colors and overlays to use
+ var/light_range
+ var/light_power
+ var/light_color_alarm
+ var/light_color_class
+ var/light_color_status_display
+
+ var/up_description
+ var/down_description
+
+ var/datum/alarm_appearance/alarm_appearance
+
+ abstract_type = /decl/security_level
+
+/decl/security_level/Initialize()
+ . = ..()
+ if(ispath(alarm_appearance, /datum/alarm_appearance))
+ alarm_appearance = new alarm_appearance
+
+/decl/security_level/validate()
+ . = ..()
+ var/initial_appearance = initial(alarm_appearance)
+ if(!initial_appearance)
+ . += "alarm_appearance was not set"
+ else if(!ispath(initial_appearance))
+ . += "alarm_appearance was not set to a /datum/alarm_appearance subpath"
+ else if(!istype(alarm_appearance, /datum/alarm_appearance))
+ . += "alarm_appearance creation failed (check runtimes?)"
+
+// Called when we're switching from a lower security level to this one.
+/decl/security_level/proc/switching_up_to()
+ return
+
+// Called when we're switching from a higher security level to this one.
+/decl/security_level/proc/switching_down_to()
+ return
+
+// Called when we're switching from this security level to a higher one.
+/decl/security_level/proc/switching_up_from()
+ return
+
+// Called when we're switching from this security level to a lower one.
+/decl/security_level/proc/switching_down_from()
+ return
\ No newline at end of file
diff --git a/code/modules/security_levels/alarm_appearance.dm b/code/modules/security_levels/alarm_appearance.dm
new file mode 100644
index 00000000000..494158a6039
--- /dev/null
+++ b/code/modules/security_levels/alarm_appearance.dm
@@ -0,0 +1,61 @@
+/datum/alarm_appearance
+ var/display_icon //The icon_state for the displays. Normally only one is used, unless uses_twotone_displays is TRUE.
+ var/display_icon_color //The color for the display icon.
+
+ var/display_icon_twotone //Used for two-tone displays.
+ var/display_icon_twotone_color //The color for the display icon.
+
+ var/display_emblem //The icon_state for the emblem, i.e for delta, a radstorm, alerts.
+ var/display_emblem_color //The color for the emblem.
+
+ var/alarm_icon //The icon_state for the alarms
+ var/alarm_icon_color //the color for the icon_state
+
+ var/alarm_icon_twotone //Used for two-tone alarms (i.e delta).
+ var/alarm_icon_twotone_color //The color for the secondary tone icon.
+
+/datum/alarm_appearance/green
+ display_icon = "status_display_lines"
+ display_icon_color = PIPE_COLOR_GREEN
+
+ display_emblem = "status_display_alert"
+ display_emblem_color = COLOR_WHITE
+
+ alarm_icon = "alarm_normal"
+ alarm_icon_color = PIPE_COLOR_GREEN
+
+/datum/alarm_appearance/blue
+ display_icon = "status_display_lines"
+ display_icon_color = COLOR_BLUE
+
+ display_emblem = "status_display_alert"
+ display_emblem_color = COLOR_WHITE
+
+ alarm_icon = "alarm_normal"
+ alarm_icon_color = COLOR_BLUE
+
+/datum/alarm_appearance/red
+ display_icon = "status_display_lines"
+ display_icon_color = COLOR_RED
+
+ display_emblem = "status_display_alert"
+ display_emblem_color = COLOR_WHITE
+
+ alarm_icon = "alarm_blinking"
+ alarm_icon_color = COLOR_RED
+
+/datum/alarm_appearance/delta
+ display_icon = "status_display_twotone1"
+ display_icon_color = COLOR_RED
+
+ display_icon_twotone = "status_display_twotone2"
+ display_icon_twotone_color = COLOR_YELLOW
+
+ display_emblem = "delta"
+ display_emblem_color = COLOR_WHITE
+
+ alarm_icon = "alarm_blinking_twotone1"
+ alarm_icon_color = COLOR_RED
+
+ alarm_icon_twotone = "alarm_blinking_twotone2"
+ alarm_icon_twotone_color = PIPE_COLOR_YELLOW
\ No newline at end of file
diff --git a/code/modules/security levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
similarity index 100%
rename from code/modules/security levels/keycard_authentication.dm
rename to code/modules/security_levels/keycard_authentication.dm
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
new file mode 100644
index 00000000000..186fd37fbbe
--- /dev/null
+++ b/code/modules/security_levels/security_levels.dm
@@ -0,0 +1,105 @@
+/// The default security state used on most space maps.
+/decl/security_state/default
+ all_security_levels = list(
+ /decl/security_level/default/code_green,
+ /decl/security_level/default/code_blue,
+ /decl/security_level/default/code_red,
+ /decl/security_level/default/code_delta
+ )
+
+/// An abstract security level type that supports announcements on level change.
+/decl/security_level/default
+ abstract_type = /decl/security_level/default
+
+ var/static/datum/announcement/priority/security/security_announcement_up = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice1.ogg'))
+ var/static/datum/announcement/priority/security/security_announcement_down = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice1.ogg'))
+
+/decl/security_level/default/switching_up_to()
+ if(up_description)
+ security_announcement_up.Announce(up_description, "Attention! Alert level elevated to [name]!")
+ notify_station()
+
+/decl/security_level/default/switching_down_to()
+ if(down_description)
+ security_announcement_down.Announce(down_description, "Attention! Alert level changed to [name]!")
+ notify_station()
+
+/decl/security_level/default/proc/notify_station()
+ for(var/obj/machinery/firealarm/FA in SSmachines.machinery)
+ if(isContactLevel(FA.z))
+ FA.update_icon()
+ post_status("alert")
+
+/decl/security_level/default/code_green
+ name = "code green"
+
+ light_range = 2
+ light_power = 1
+
+ light_color_alarm = COLOR_GREEN
+ light_color_class = "font_green"
+ light_color_status_display = COLOR_GREEN
+
+
+ alarm_appearance = /datum/alarm_appearance/green
+
+ down_description = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
+
+/decl/security_level/default/code_blue
+ name = "code blue"
+
+ light_range = 2
+ light_power = 1
+ light_color_alarm = COLOR_BLUE
+ light_color_class = "font_blue"
+ light_color_status_display = COLOR_BLUE
+
+ alarm_appearance = /datum/alarm_appearance/blue
+
+ up_description = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted."
+ down_description = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed."
+
+/decl/security_level/default/code_red
+ name = "code red"
+
+ light_range = 4
+ light_power = 2
+ light_color_alarm = COLOR_RED
+ light_color_class = "font_red"
+ light_color_status_display = COLOR_RED
+
+ alarm_appearance = /datum/alarm_appearance/red
+
+ up_description = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised."
+ down_description = "The self-destruct mechanism has been deactivated, there is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised."
+
+/decl/security_level/default/code_delta
+ name = "code delta"
+
+ light_range = 4
+ light_power = 2
+ light_color_alarm = COLOR_RED
+ light_color_class = "font_red"
+ light_color_status_display = COLOR_RED
+
+ alarm_appearance = /datum/alarm_appearance/delta
+
+
+ var/static/datum/announcement/priority/security/security_announcement_delta = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/siren.ogg'))
+
+/decl/security_level/default/code_delta/switching_up_to()
+ security_announcement_delta.Announce("The self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.", "Attention! Delta security level reached!")
+ notify_station()
+
+// The following are dummy states and levels to soft-disable security levels on some maps.
+/// A security state used for maps that don't have security levels exposed to players.
+/decl/security_state/none
+ all_security_levels = list(
+ /decl/security_level/none
+ )
+
+/// A dummy security level with no effects.
+/decl/security_level/none
+ name = "none"
+ // Since currently we're required to have an alarm_appearance, we just use a blank one.
+ alarm_appearance = /datum/alarm_appearance
\ No newline at end of file
diff --git a/code/modules/security_levels/security_state.dm b/code/modules/security_levels/security_state.dm
new file mode 100644
index 00000000000..2e997845d41
--- /dev/null
+++ b/code/modules/security_levels/security_state.dm
@@ -0,0 +1,136 @@
+/decl/security_state
+ abstract_type = /decl/security_state
+ /// Whether or not security level information should be shown to new players on login.
+ var/show_on_login = TRUE
+ // When defining any of these values type paths should be used, not instances. Instances will be acquired in /New()
+
+ var/decl/security_level/severe_security_level // At which security level (and higher) the use of nuclear fission devices and other extreme measures are allowed. Defaults to the last entry in all_security_levels if unset.
+ var/decl/security_level/high_security_level // At which security level (and higher) transfer votes are disabled, ERT may be requested, and other similar high alert implications. Defaults to the second to last entry in all_security_levels if unset.
+ // All security levels within the above convention: Low, Guarded, Elevated, High, Severe
+
+
+ // Under normal conditions the crew may not raise the current security level higher than the highest_standard_security_level
+ // The crew may also not adjust the security level once it is above the highest_standard_security_level.
+ // Defaults to the second to last entry in all_security_levels if unset/null.
+ // Set to FALSE/0 if there should be no restrictions.
+ var/decl/security_level/highest_standard_security_level
+
+ var/decl/security_level/current_security_level // The current security level. Defaults to the first entry in all_security_levels if unset.
+ var/decl/security_level/stored_security_level // The security level that we are escalating to high security from - we will return to this level once we choose to revert.
+ var/list/all_security_levels // List of all available security levels
+ var/list/standard_security_levels // List of all normally selectable security levels
+ var/list/comm_console_security_levels // List of all selectable security levels for the command and communication console - basically standard_security_levels - 1
+
+/decl/security_state/Initialize()
+
+ . = ..()
+
+ // Setup the severe security level
+ if(!(severe_security_level in all_security_levels))
+ severe_security_level = all_security_levels[all_security_levels.len]
+ severe_security_level = GET_DECL(severe_security_level)
+
+ // Setup the high security level
+ if(!(high_security_level in all_security_levels))
+ high_security_level = all_security_levels[max(1, all_security_levels.len - 1)]
+ high_security_level = GET_DECL(high_security_level)
+
+ // Setup the highest standard security level
+ if(highest_standard_security_level || isnull(highest_standard_security_level))
+ if(!(highest_standard_security_level in all_security_levels))
+ highest_standard_security_level = all_security_levels[max(1, all_security_levels.len - 1)]
+ highest_standard_security_level = GET_DECL(highest_standard_security_level)
+ else
+ highest_standard_security_level = null
+
+ // Setup the current security level
+ if(current_security_level in all_security_levels)
+ current_security_level = GET_DECL(current_security_level)
+ else
+ current_security_level = GET_DECL(all_security_levels[1])
+
+ // Setup the full list of available security levels now that we no longer need to use "x in all_security_levels"
+ var/list/security_level_instances = list()
+ for(var/security_level_type in all_security_levels)
+ security_level_instances += GET_DECL(security_level_type)
+ all_security_levels = security_level_instances
+
+ standard_security_levels = list()
+ // Setup the list of normally selectable security levels
+ for(var/security_level in all_security_levels)
+ standard_security_levels += security_level
+ if(security_level == highest_standard_security_level)
+ break
+
+ comm_console_security_levels = list()
+ // Setup the list of selectable security levels available in the comm. console
+ for(var/security_level in all_security_levels)
+ if(security_level == highest_standard_security_level)
+ break
+ comm_console_security_levels += security_level
+
+ // Now we ensure the high security level is not above the severe one (but we allow them to be equal)
+ var/severe_index = all_security_levels.Find(severe_security_level)
+ var/high_index = all_security_levels.Find(high_security_level)
+ if(high_index > severe_index)
+ high_security_level = severe_security_level
+
+ // Finally switch up to the default starting security level.
+ current_security_level.switching_up_to()
+
+/decl/security_state/proc/can_change_security_level()
+ return current_security_level in standard_security_levels
+
+/decl/security_state/proc/can_switch_to(var/given_security_level)
+ if(!can_change_security_level())
+ return FALSE
+ return given_security_level in standard_security_levels
+
+/decl/security_state/proc/current_security_level_is_lower_than(var/given_security_level)
+ var/current_index = all_security_levels.Find(current_security_level)
+ var/given_index = all_security_levels.Find(given_security_level)
+
+ return given_index && current_index < given_index
+
+/decl/security_state/proc/current_security_level_is_same_or_higher_than(var/given_security_level)
+ var/current_index = all_security_levels.Find(current_security_level)
+ var/given_index = all_security_levels.Find(given_security_level)
+
+ return given_index && current_index >= given_index
+
+/decl/security_state/proc/current_security_level_is_higher_than(var/given_security_level)
+ var/current_index = all_security_levels.Find(current_security_level)
+ var/given_index = all_security_levels.Find(given_security_level)
+
+ return given_index && current_index > given_index
+
+/decl/security_state/proc/set_security_level(var/decl/security_level/new_security_level, var/force_change = FALSE)
+ if(new_security_level == current_security_level)
+ return FALSE
+ if(!(new_security_level in all_security_levels))
+ return FALSE
+ if(!force_change && !can_switch_to(new_security_level))
+ return FALSE
+
+ var/decl/security_level/previous_security_level = current_security_level
+ current_security_level = new_security_level
+
+ var/previous_index = all_security_levels.Find(previous_security_level)
+ var/new_index = all_security_levels.Find(new_security_level)
+
+ if(new_index > previous_index)
+ previous_security_level.switching_up_from()
+ new_security_level.switching_up_to()
+ else
+ previous_security_level.switching_down_from()
+ new_security_level.switching_down_to()
+
+ log_and_message_admins("has changed the security level from [previous_security_level.name] to [new_security_level.name].")
+ return TRUE
+
+// This proc decreases the current security level, if possible
+/decl/security_state/proc/decrease_security_level(var/force_change = FALSE)
+ var/current_index = all_security_levels.Find(current_security_level)
+ if(current_index == 1)
+ return FALSE
+ return set_security_level(all_security_levels[current_index - 1], force_change)
diff --git a/code/modules/shield_generators/handheld_diffuser.dm b/code/modules/shield_generators/handheld_diffuser.dm
index 250691aa2a6..4a546c0241f 100644
--- a/code/modules/shield_generators/handheld_diffuser.dm
+++ b/code/modules/shield_generators/handheld_diffuser.dm
@@ -41,14 +41,14 @@
if(istype(S) && !S.diffused_for && !S.disabled_for && cell.checked_use(10 KILOWATTS * CELLRATE))
S.diffuse(20)
-/obj/item/shield_diffuser/attack_self()
+/obj/item/shield_diffuser/attack_self(mob/user)
enabled = !enabled
update_icon()
if(enabled)
START_PROCESSING(SSobj, src)
else
STOP_PROCESSING(SSobj, src)
- to_chat(usr, "You turn \the [src] [enabled ? "on" : "off"].")
+ to_chat(user, "You turn \the [src] [enabled ? "on" : "off"].")
/obj/item/shield_diffuser/examine(mob/user)
. = ..()
diff --git a/code/modules/shield_generators/shield.dm b/code/modules/shield_generators/shield.dm
index 0b97dd24cbf..b39816fdce5 100644
--- a/code/modules/shield_generators/shield.dm
+++ b/code/modules/shield_generators/shield.dm
@@ -37,7 +37,7 @@
if(update_neighbors)
for(var/obj/effect/shield/shield in T)
shield.update_icon(FALSE)
- add_overlay(image(icon = icon, icon_state = "[icon_state]_edge", dir = direction))
+ add_overlay(image(icon = icon, icon_state = "[icon_state]edge", dir = direction))
// Prevents shuttles, singularities and pretty much everything else from moving the field segments away.
// The only thing that is allowed to move us is the Destroy() proc.
@@ -217,7 +217,7 @@
if(!gen.check_flag(MODEFLAG_HYPERKINETIC))
user.visible_message("\The [user] tries to attack \the [src] with \the [weapon], but it passes through!")
return TRUE
- var/force = weapon.get_attack_force(user)
+ var/force = weapon.expend_attack_force(user)
user.visible_message("\The [user] [pick(weapon.attack_verb)] \the [src] with \the [weapon]!")
switch(weapon.atom_damage_type)
if(BURN)
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 61f0f341e6e..0cb3ee417b9 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -46,7 +46,7 @@
return bash(I, user)
/obj/machinery/shield/bash(obj/item/W, mob/user)
- if(isliving(user) && user.a_intent == I_HELP)
+ if(isliving(user) && user.check_intent(I_FLAG_HELP))
return FALSE
if(!W.user_can_attack_with(user))
return FALSE
@@ -55,7 +55,7 @@
//Calculate damage
switch(W.atom_damage_type)
if(BRUTE, BURN)
- current_health -= W.get_attack_force(user)
+ current_health -= W.expend_attack_force(user)
else
return FALSE
diff --git a/code/modules/shieldgen/shieldwallgen.dm b/code/modules/shieldgen/shieldwallgen.dm
index 12682043752..0ca75384784 100644
--- a/code/modules/shieldgen/shieldwallgen.dm
+++ b/code/modules/shieldgen/shieldwallgen.dm
@@ -289,7 +289,7 @@
/obj/machinery/shieldwall/attackby(var/obj/item/I, var/mob/user)
var/obj/machinery/shieldwallgen/G = prob(50) ? gen_primary : gen_secondary
- G.storedpower -= I.get_attack_force(user)*2500
+ G.storedpower -= I.expend_attack_force(user)*2500
user.visible_message("\The [user] hits \the [src] with \the [I]!")
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.do_attack_animation(src)
diff --git a/code/modules/shuttles/docking_beacon.dm b/code/modules/shuttles/docking_beacon.dm
index 8c0f64d87b1..bac4e5fe16a 100644
--- a/code/modules/shuttles/docking_beacon.dm
+++ b/code/modules/shuttles/docking_beacon.dm
@@ -94,7 +94,7 @@
if(href_list["edit_codes"])
var/newcode = sanitize(input("Input new docking codes:", "Docking codes", docking_codes) as text|null)
- if(!CanInteract(usr,state))
+ if(!CanInteract(user,state))
return TOPIC_NOACTION
if(newcode)
docking_codes = uppertext(newcode)
@@ -103,7 +103,7 @@
if(href_list["edit_display_name"])
var/newname = sanitize(input("Input new display name:", "Display name", display_name) as text|null)
- if(!CanInteract(usr,state))
+ if(!CanInteract(user,state))
return TOPIC_NOACTION
if(newname)
display_name = newname
@@ -114,7 +114,7 @@
if(href_list["edit_size"])
var/newwidth = input("Input new docking width for beacon:", "Docking size", docking_width) as num|null
var/newheight = input("Input new docking height for beacon:", "Docking size", docking_height) as num|null
- if(!CanInteract(usr,state))
+ if(!CanInteract(user,state))
return TOPIC_NOACTION
if(newwidth && newheight)
docking_width = clamp(newwidth, 0, MAX_DOCKING_SIZE)
@@ -134,7 +134,7 @@
return TOPIC_REFRESH
if(href_list["edit_permitted_shuttles"])
- var/shuttle = sanitize(input(usr,"Enter the ID of the shuttle you wish to permit/unpermit for this beacon:", "Enter ID") as text|null)
+ var/shuttle = sanitize(input(user,"Enter the ID of the shuttle you wish to permit/unpermit for this beacon:", "Enter ID") as text|null)
if(shuttle)
if(shuttle in permitted_shuttles)
permitted_shuttles -= shuttle
@@ -166,7 +166,7 @@
if(href_list["change_color"])
var/new_color = input(user, "Choose a color.", "\the [src]", ship_color) as color|null
- if(!CanInteract(usr,state))
+ if(!CanInteract(user,state))
return TOPIC_NOACTION
if(new_color && new_color != ship_color)
ship_color = new_color
@@ -175,7 +175,7 @@
if(href_list["change_ship_name"])
var/new_ship_name = sanitize(input(user, "Enter a new name for the ship:", "Change ship name.") as null|text)
- if(!CanInteract(usr,state))
+ if(!CanInteract(user,state))
return TOPIC_NOACTION
if(!new_ship_name)
return TOPIC_HANDLED
@@ -195,7 +195,7 @@
if(!construction_mode)
return TOPIC_HANDLED
var/confirm = alert(user, "This will permanently finalize the ship, are you sure?", "Ship finalization", "No", "Yes")
- if(!CanInteract(usr,state))
+ if(!CanInteract(user,state))
return TOPIC_NOACTION
if(confirm == "Yes")
if(create_ship())
@@ -203,7 +203,7 @@
ship_name = ""
LAZYCLEARLIST(errors)
else
- to_chat(usr, SPAN_WARNING("Could not finalize the construction of the ship!"))
+ to_chat(user, SPAN_WARNING("Could not finalize the construction of the ship!"))
return TOPIC_REFRESH
/obj/machinery/docking_beacon/proc/allow_projection()
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index c12dc6e38d9..bd13d30c417 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -3,7 +3,7 @@ var/global/list/escape_pods_by_name = list()
/datum/shuttle/autodock/ferry/escape_pod
var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/arming_controller
- category = /datum/shuttle/autodock/ferry/escape_pod
+ abstract_type = /datum/shuttle/autodock/ferry/escape_pod
move_time = 100
/datum/shuttle/autodock/ferry/escape_pod/New(map_hash)
diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm
index 82cde0c759b..661bab8cf89 100644
--- a/code/modules/shuttles/landmarks.dm
+++ b/code/modules/shuttles/landmarks.dm
@@ -135,7 +135,7 @@ var/global/list/shuttle_landmarks = list()
/obj/effect/shuttle_landmark/automatic/sector_set(var/obj/effect/overmap/visitable/O)
..()
- SetName("[initial(name)] ([x],[y])")
+ SetName("[initial(name)] ([x],[y],[z])")
//Subtype that calls explosion on init to clear space for shuttles
/obj/effect/shuttle_landmark/automatic/clearing
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 794f0736f12..85ee565817b 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -12,7 +12,7 @@
var/arrive_time = 0 //the time at which the shuttle arrives when long jumping
var/flags = 0
var/process_state = IDLE_STATE //Used with SHUTTLE_FLAGS_PROCESS, as well as to store current state.
- var/category = /datum/shuttle
+ abstract_type = /datum/shuttle
var/multiz = 0 //how many multiz levels, starts at 0
var/ceiling_type = /turf/unsimulated/floor/shuttle_ceiling
diff --git a/code/modules/shuttles/shuttle_autodock.dm b/code/modules/shuttles/shuttle_autodock.dm
index 74c157df8fe..f2003eb0129 100644
--- a/code/modules/shuttles/shuttle_autodock.dm
+++ b/code/modules/shuttles/shuttle_autodock.dm
@@ -16,7 +16,7 @@
var/obj/effect/shuttle_landmark/landmark_transition //This variable is type-abused initially: specify the landmark_tag, not the actual landmark.
var/move_time = 240 //the time spent in the transition area
- category = /datum/shuttle/autodock
+ abstract_type = /datum/shuttle/autodock
flags = SHUTTLE_FLAGS_PROCESS | SHUTTLE_FLAGS_ZERO_G
/datum/shuttle/autodock/New(var/map_hash, var/obj/effect/shuttle_landmark/start_waypoint)
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 67337ab8fe2..422e33e3f0e 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -89,7 +89,7 @@
if(href_list["set_codes"])
var/newcode = input("Input new docking codes", "Docking codes", shuttle.docking_codes) as text|null
- if (newcode && CanInteract(usr, global.default_topic_state))
+ if (newcode && CanInteract(user, global.default_topic_state))
shuttle.set_docking_codes(uppertext(newcode))
return TOPIC_REFRESH
diff --git a/code/modules/shuttles/shuttle_console_multi.dm b/code/modules/shuttles/shuttle_console_multi.dm
index c55dcc37721..28f8805a36d 100644
--- a/code/modules/shuttles/shuttle_console_multi.dm
+++ b/code/modules/shuttles/shuttle_console_multi.dm
@@ -9,14 +9,14 @@
"can_pick" = shuttle.moving_status == SHUTTLE_IDLE,
)
-/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/shuttle, var/list/href_list)
+/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/shuttle, var/list/href_list, var/user)
if((. = ..()) != null)
return
if(href_list["pick"])
var/dest_key = input("Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations()
- if(dest_key && CanInteract(usr, global.default_topic_state))
- shuttle.set_destination(dest_key, usr)
+ if(dest_key && CanInteract(user, global.default_topic_state))
+ shuttle.set_destination(dest_key, user)
return TOPIC_REFRESH
diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm
index 2bdc11d2284..f6efaa4a864 100644
--- a/code/modules/shuttles/shuttle_emergency.dm
+++ b/code/modules/shuttles/shuttle_emergency.dm
@@ -1,5 +1,5 @@
/datum/shuttle/autodock/ferry/emergency
- category = /datum/shuttle/autodock/ferry/emergency
+ abstract_type = /datum/shuttle/autodock/ferry/emergency
move_time = 10 MINUTES
flags = SHUTTLE_FLAGS_PROCESS | SHUTTLE_FLAGS_ZERO_G | SHUTTLE_FLAGS_NO_CODE
var/datum/evacuation_controller/shuttle/emergency_controller
diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm
index 4f23361de2b..ebe0a7cf54f 100644
--- a/code/modules/shuttles/shuttle_ferry.dm
+++ b/code/modules/shuttles/shuttle_ferry.dm
@@ -7,7 +7,7 @@
var/obj/effect/shuttle_landmark/waypoint_station //This variable is type-abused initially: specify the landmark_tag, not the actual landmark.
var/obj/effect/shuttle_landmark/waypoint_offsite //This variable is type-abused initially: specify the landmark_tag, not the actual landmark.
- category = /datum/shuttle/autodock/ferry
+ abstract_type = /datum/shuttle/autodock/ferry
/datum/shuttle/autodock/ferry/New(map_hash)
if(map_hash)
diff --git a/code/modules/shuttles/shuttle_specops.dm b/code/modules/shuttles/shuttle_specops.dm
index 41778075e99..90a54b1eab0 100644
--- a/code/modules/shuttles/shuttle_specops.dm
+++ b/code/modules/shuttles/shuttle_specops.dm
@@ -14,10 +14,7 @@
var/reset_time = 0 //the world.time at which the shuttle will be ready to move again.
var/launch_prep = 0
var/cancel_countdown = 0
- category = /datum/shuttle/autodock/ferry/specops
-
-/datum/shuttle/autodock/ferry/specops/New()
- ..()
+ abstract_type = /datum/shuttle/autodock/ferry/specops
/datum/shuttle/autodock/ferry/specops/launch(var/user)
if (!can_launch())
@@ -98,7 +95,7 @@
return ..()
/datum/shuttle/autodock/ferry/specops/proc/sleep_until_launch()
- var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
+ var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a list with potential time values.
var/launch_time = world.time + specops_countdown_time
var/time_until_launch
diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm
index 175924860dc..f38e5fef5b3 100644
--- a/code/modules/shuttles/shuttle_supply.dm
+++ b/code/modules/shuttles/shuttle_supply.dm
@@ -3,7 +3,7 @@
var/late_chance = 80
var/max_late_time = (30 SECONDS)
flags = SHUTTLE_FLAGS_PROCESS|SHUTTLE_FLAGS_SUPPLY|SHUTTLE_FLAGS_NO_CODE
- category = /datum/shuttle/autodock/ferry/supply
+ abstract_type = /datum/shuttle/autodock/ferry/supply
ceiling_type = /turf/floor/shuttle_ceiling
/datum/shuttle/autodock/ferry/supply/short_jump(var/area/destination)
diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm
index 35e00c68be6..71e144e02e2 100644
--- a/code/modules/shuttles/shuttles_multi.dm
+++ b/code/modules/shuttles/shuttles_multi.dm
@@ -2,7 +2,7 @@
var/list/destination_tags
var/list/destinations_cache = list()
var/last_cache_rebuild_time = 0
- category = /datum/shuttle/autodock/multi
+ abstract_type = /datum/shuttle/autodock/multi
/datum/shuttle/autodock/multi/New(map_hash)
..()
@@ -42,7 +42,7 @@
var/arrival_message
var/departure_message
- category = /datum/shuttle/autodock/multi/antag
+ abstract_type = /datum/shuttle/autodock/multi/antag
/datum/shuttle/autodock/multi/antag/New(map_hash)
..()
diff --git a/code/modules/species/outsider/shadow.dm b/code/modules/species/outsider/shadow.dm
deleted file mode 100644
index 709f5d38ffe..00000000000
--- a/code/modules/species/outsider/shadow.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/decl/bodytype/starlight/shadow
- name = "shadow"
- desc = "A wound of darkness inflicted upon the world."
- icon_base = 'icons/mob/human_races/species/shadow/body.dmi'
- icon_deformed = 'icons/mob/human_races/species/shadow/body.dmi'
- body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
- eye_darksight_range = 8
- uid = "bodytype_starlight_shadow"
-
-/decl/blood_type/shadowstuff
- name = "shadowstuff"
- antigen_category = "shadowstuff"
- splatter_name = "shadowstuff"
- splatter_desc = "A puddle of shadowstuff."
- splatter_colour = COLOR_GRAY80
-
-/decl/species/starlight/shadow
- name = "Shadow"
- name_plural = "shadows"
- description = "A being of pure darkness, hates the light and all that comes with it."
- butchery_data = null
-
- available_bodytypes = list(/decl/bodytype/starlight/shadow)
-
- unarmed_attacks = list(/decl/natural_attack/claws/strong, /decl/natural_attack/bite/sharp)
- shock_vulnerability = 0
-
- blood_types = list(
- /decl/blood_type/shadowstuff
- )
- flesh_color = "#aaaaaa"
-
- remains_type = /obj/effect/decal/cleanable/ash
- death_message = "dissolves into ash..."
-
- species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED
-
-/decl/species/starlight/shadow/handle_environment_special(var/mob/living/human/H)
- if(H.is_in_stasis() || H.stat == DEAD || H.isSynthetic())
- return
- var/light_amount = 0
- if(isturf(H.loc))
- var/turf/T = H.loc
- light_amount = T.get_lumcount() * 10
- if(light_amount > 2) //if there's enough light, start dying
- H.take_overall_damage(1,1)
- else //heal in the dark
- H.heal_overall_damage(1,1)
\ No newline at end of file
diff --git a/code/modules/species/outsider/starlight.dm b/code/modules/species/outsider/starlight.dm
deleted file mode 100644
index 215ba3cf5e9..00000000000
--- a/code/modules/species/outsider/starlight.dm
+++ /dev/null
@@ -1,153 +0,0 @@
-/decl/species/starlight
- abstract_type = /decl/species/starlight
- butchery_data = null
- spawn_flags = SPECIES_IS_RESTRICTED
- available_pronouns = list(/decl/pronouns/neuter)
- force_background_info = list(
- /decl/background_category/heritage = /decl/background_detail/heritage/other
- )
- hidden_from_codex = TRUE
-
-/decl/bodytype/starlight
- abstract_type = /decl/bodytype/starlight
- has_limbs = list(
- BP_CHEST = list("path" = /obj/item/organ/external/chest/unbreakable),
- BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable),
- BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable),
- BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable),
- BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable),
- BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable),
- BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable),
- BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable),
- BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable),
- BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable),
- BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable)
- )
- has_organ = list(
- BP_BRAIN = /obj/item/organ/internal/brain/starlight
- )
-
-/obj/item/organ/internal/brain/starlight
- name = "essence of fire"
- desc = "A fancy name for ash. Still, it does look a bit different from the regular stuff."
- icon = 'icons/obj/objects.dmi'
- icon_state = "ash"
-
-/decl/bodytype/starlight/starborn
- name = "starborn"
- desc = "A blazing mass of light."
- icon_base = 'icons/mob/human_races/species/starborn/body.dmi'
- icon_deformed = 'icons/mob/human_races/species/starborn/body.dmi'
- husk_icon = 'icons/mob/human_races/species/starborn/husk.dmi'
- body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
- uid = "bodytype_starlight_starborn"
- cold_level_1 = 260
- cold_level_2 = 250
- cold_level_3 = 235
- heat_level_1 = 20000
- heat_level_2 = 30000
- heat_level_3 = 40000
- cold_discomfort_level = 300
- cold_discomfort_strings = list(
- "You feel your fire dying out...",
- "Your fire begins to shrink away from the cold.",
- "You feel slow and sluggish from the cold."
- )
- heat_discomfort_level = 10000
- heat_discomfort_strings = list(
- "Surprisingly, you start burning!",
- "You're... burning!?!"
- )
-
-/decl/blood_type/starstuff
- name = "starstuff"
- antigen_category = "starstuff"
- splatter_name = "starstuff"
- splatter_desc = "A puddle of starstuff."
- splatter_colour = "#ffff00"
-
-/decl/species/starlight/handle_death(var/mob/living/human/H)
- addtimer(CALLBACK(H, TYPE_PROC_REF(/mob, dust)),0)
-
-/decl/species/starlight/starborn
- name = "Starborn"
- name_plural = "Starborn"
- description = "Beings of fire and light, split off from a sun deity of unbelievable power."
- available_bodytypes = list(/decl/bodytype/starlight/starborn)
-
- blood_types = list(
- /decl/blood_type/starstuff
- )
- flesh_color = "#ffff00"
-
- unarmed_attacks = list(/decl/natural_attack/punch/starborn)
-
- warning_low_pressure = 50
- hazard_low_pressure = 0
- shock_vulnerability = 0
- hunger_factor = 0
- thirst_factor = 0
- death_message = "dissolves into pure flames!"
- breath_type = null
-
-
- total_health = 250
- body_temperature = T0C + 500 //We are being of fire and light.
- species_flags = SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED | SPECIES_FLAG_NO_TANGLE
-
- base_auras = list(
- /obj/aura/starborn
- )
-
-/decl/species/starlight/starborn/handle_death(var/mob/living/human/H)
- ..()
- var/turf/T = get_turf(H)
- T.add_to_reagents(/decl/material/liquid/fuel, 20)
- T.hotspot_expose(FLAMMABLE_GAS_MINIMUM_BURN_TEMPERATURE)
-
-/decl/bodytype/starlight/blueforged
- name = "blueforged"
- desc = "A mass of carved and shaped spacetime."
- icon_base = 'icons/mob/human_races/species/blueforged/body.dmi'
- icon_deformed = 'icons/mob/human_races/species/blueforged/body.dmi'
- eye_icon = 'icons/mob/human_races/species/blueforged/eyes.dmi'
- body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
- override_organ_types = list(BP_EYES = /obj/item/organ/internal/eyes/blueforged)
- uid = "bodytype_starlight_blueforged"
-
-/decl/blood_type/spacestuff
- name = "spacestuff"
- antigen_category = "spacestuff"
- splatter_name = "spacestuff"
- splatter_desc = "A puddle of spacestuff."
- splatter_colour = "#2222ff"
-
-/decl/species/starlight/blueforged
- name = "Blueforged"
- name_plural = "Blueforged"
- description = "Living chunks of spacetime, carved out of the original dimension and given life by a being of unbelievable power."
- available_bodytypes = list(/decl/bodytype/starlight/blueforged)
-
- flesh_color = "#2222ff"
-
- warning_low_pressure = 50
- hazard_low_pressure = 0
- hunger_factor = 0
- thirst_factor = 0
- breath_type = null
-
- burn_mod = 10
- brute_mod = 0
- oxy_mod = 0
- toxins_mod = 0
- radiation_mod = 0
- species_flags = SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED | SPECIES_FLAG_NO_TANGLE
-
-/decl/species/starlight/blueforged/handle_death(var/mob/living/human/H)
- ..()
- new /obj/effect/temporary(get_turf(H),11, 'icons/mob/mob.dmi', "liquify")
-
-/obj/item/organ/internal/eyes/blueforged
- name = "bluespace prism"
- desc = "You can see an endless blue plane when looking through it. Your eyes tingle if you stare too hard."
- icon = 'icons/mob/human_races/species/blueforged/organs.dmi'
diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm
index f92a78d08d1..d7477882df5 100644
--- a/code/modules/species/species.dm
+++ b/code/modules/species/species.dm
@@ -57,9 +57,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
var/flesh_color = "#ffc896" // Pink.
var/blood_oxy = 1
- // Preview in prefs positioning. If null, uses defaults set on a static list in preferences.dm.
- var/list/character_preview_screen_locs
-
var/organs_icon //species specific internal organs icons
var/strength = STR_MEDIUM
@@ -82,12 +79,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
// Combat vars.
var/total_health = DEFAULT_SPECIES_HEALTH // Point at which the mob will enter crit.
- var/list/unarmed_attacks = list( // Possible unarmed attacks that the mob will use in combat,
- /decl/natural_attack,
- /decl/natural_attack/bite
- )
- var/list/natural_armour_values // Armour values used if naked.
var/brute_mod = 1 // Physical damage multiplier.
var/burn_mod = 1 // Burn damage multiplier.
var/toxins_mod = 1 // Toxloss modifier
@@ -500,23 +492,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
return TRUE //We could tie it to stamina
return FALSE
-// Called when using the shredding behavior.
-/decl/species/proc/can_shred(var/mob/living/human/H, var/ignore_intent, var/ignore_antag)
-
- if((!ignore_intent && H.a_intent != I_HURT) || H.pulling_punches)
- return 0
-
- if(!ignore_antag && H.mind && !player_is_antag(H.mind))
- return 0
-
- for(var/attack_type in unarmed_attacks)
- var/decl/natural_attack/attack = GET_DECL(attack_type)
- if(!istype(attack) || !attack.is_usable(H))
- continue
- if(attack.shredding)
- return 1
- return 0
-
/decl/species/proc/handle_vision(var/mob/living/human/H)
var/list/vision = H.get_accumulated_vision_handlers()
H.update_sight()
@@ -628,7 +603,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
var/skill_mod = 10 * attacker.get_skill_difference(SKILL_COMBAT, target)
var/state_mod = attacker.melee_accuracy_mods() - target.melee_accuracy_mods()
var/push_mod = min(max(1 + attacker.get_skill_difference(SKILL_COMBAT, target), 1), 3)
- if(target.a_intent == I_HELP)
+ if(target.check_intent(I_FLAG_HELP))
state_mod -= 30
//Handle unintended consequences
for(var/obj/item/I in holding)
diff --git a/code/modules/species/species_attack.dm b/code/modules/species/species_attack.dm
index 0c1fe901f76..0fffa984643 100644
--- a/code/modules/species/species_attack.dm
+++ b/code/modules/species/species_attack.dm
@@ -2,8 +2,8 @@
attack_verb = list("bit", "chomped on")
attack_sound = 'sound/weapons/bite.ogg'
shredding = 0
- sharp = 1
- edge = 1
+ sharp = TRUE
+ edge = TRUE
name = "sharp bite"
/decl/natural_attack/claws
@@ -14,8 +14,8 @@
eye_attack_text_victim = "sharp claws"
attack_sound = 'sound/weapons/slice.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
- sharp = 1
- edge = 1
+ sharp = TRUE
+ edge = TRUE
name = "claws"
usable_with_limbs = list(BP_L_HAND, BP_R_HAND)
var/blocked_by_gloves = TRUE
@@ -90,7 +90,7 @@
damage = 2
usable_with_limbs = list(BP_CHEST, BP_GROIN)
-/decl/natural_attack/slime_glomp/apply_effects(mob/living/user, mob/living/target, attack_damage, zone)
+/decl/natural_attack/slime_glomp/apply_attack_effects(mob/living/user, mob/living/target, attack_damage, zone)
. = ..()
if(.)
user.apply_stored_shock_to(target)
diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm
index 90b97759adc..4bf80fd91e7 100644
--- a/code/modules/species/species_getters.dm
+++ b/code/modules/species/species_getters.dm
@@ -1,6 +1,3 @@
-/decl/species/proc/get_valid_shapeshifter_forms(var/mob/living/human/H)
- return list()
-
/decl/species/proc/get_additional_examine_text(var/mob/living/human/H)
return
@@ -19,9 +16,6 @@
/decl/species/proc/get_vision_flags(var/mob/living/human/H)
return vision_flags
-/decl/species/proc/get_surgery_overlay_icon(var/mob/living/human/H)
- return 'icons/mob/surgery.dmi'
-
/decl/species/proc/get_footstep(var/mob/living/human/H, var/footstep_type)
return
diff --git a/code/modules/species/species_helpers.dm b/code/modules/species/species_helpers.dm
index 5bd257fa5bc..efd996aaf26 100644
--- a/code/modules/species/species_helpers.dm
+++ b/code/modules/species/species_helpers.dm
@@ -1,14 +1,9 @@
var/global/list/stored_shock_by_ref = list()
/mob/living/proc/apply_stored_shock_to(var/mob/living/target)
- if(stored_shock_by_ref["\ref[src]"])
- target.electrocute_act(stored_shock_by_ref["\ref[src]"]*0.9, src)
- stored_shock_by_ref["\ref[src]"] = 0
-
-/decl/species/proc/toggle_stance(var/mob/living/human/H)
- if(!H.incapacitated())
- H.pulling_punches = !H.pulling_punches
- to_chat(H, "You are now [H.pulling_punches ? "pulling your punches" : "not pulling your punches"].")
+ if(global.stored_shock_by_ref["\ref[src]"])
+ target.electrocute_act(global.stored_shock_by_ref["\ref[src]"]*0.9, src)
+ global.stored_shock_by_ref["\ref[src]"] = 0
/decl/species/proc/fluid_act(var/mob/living/human/H, var/datum/reagents/fluids)
SHOULD_CALL_PARENT(TRUE)
diff --git a/code/modules/species/species_hud.dm b/code/modules/species/species_hud.dm
index ee873291034..7add078db3a 100644
--- a/code/modules/species/species_hud.dm
+++ b/code/modules/species/species_hud.dm
@@ -1,18 +1,31 @@
/datum/hud_data
- var/has_a_intent = 1 // Set to draw intent box.
- var/has_m_intent = 1 // Set to draw move intent box.
- var/has_warnings = 1 // Set to draw environment warnings.
- var/has_pressure = 1 // Draw the pressure indicator.
- var/has_nutrition = 1 // Draw the nutrition indicator.
- var/has_bodytemp = 1 // Draw the bodytemp indicator.
- var/has_drop = 1 // Set to draw drop button.
- var/has_throw = 1 // Set to draw throw button.
- var/has_resist = 1 // Set to draw resist button.
- var/has_internals = 1 // Set to draw the internals toggle button.
- var/has_up_hint = 1 // Set to draw the "look-up" hint icon
- var/list/equip_slots = list() // Checked by mob_can_equip().
- var/list/persistent_slots = list() // Built in New(), used for unhidable inv updates
- var/list/hidden_slots = list() // Built in New(), used for hidable inv updates
+
+ /// Set to draw move intent box.
+ var/has_m_intent = 1
+ /// Set to draw environment warnings.
+ var/has_warnings = 1
+ /// Draw the pressure indicator.
+ var/has_pressure = 1
+ /// Draw the nutrition indicator.
+ var/has_nutrition = 1
+ /// Draw the bodytemp indicator.
+ var/has_bodytemp = 1
+ /// Set to draw drop button.
+ var/has_drop = 1
+ /// Set to draw throw button.
+ var/has_throw = 1
+ /// Set to draw resist button.
+ var/has_resist = 1
+ /// Set to draw the internals toggle button.
+ var/has_internals = 1
+ /// Set to draw the "look-up" hint icon
+ var/has_up_hint = 1
+ /// Checked by mob_can_equip().
+ var/list/equip_slots = list()
+ /// Built in New(), used for unhidable inv updates
+ var/list/persistent_slots = list()
+ /// Built in New(), used for hidable inv updates
+ var/list/hidden_slots = list()
var/list/inventory_slots = list(
/datum/inventory_slot/handcuffs,
diff --git a/code/modules/species/species_shapeshifter.dm b/code/modules/species/species_shapeshifter.dm
deleted file mode 100644
index f49e307387e..00000000000
--- a/code/modules/species/species_shapeshifter.dm
+++ /dev/null
@@ -1,129 +0,0 @@
-// This is something of an intermediary species used for species that
-// need to emulate the appearance of another race. Currently it is only
-// used for slimes but it may be useful for other species later.
-var/global/list/wrapped_species_by_ref = list()
-
-/decl/species/shapeshifter
- available_bodytypes = list(/decl/bodytype/shapeshifter)
- inherent_verbs = list(
- /mob/living/human/proc/shapeshifter_select_shape,
- /mob/living/human/proc/shapeshifter_select_hair,
- /mob/living/human/proc/shapeshifter_select_gender,
- /mob/living/human/proc/shapeshifter_select_colour
- )
- hidden_from_codex = TRUE
- var/list/valid_transform_species = list()
- var/monochromatic
- var/default_form
-
-/decl/species/shapeshifter/Initialize()
- default_form = global.using_map.default_species
- valid_transform_species |= default_form
- . = ..()
-
-/decl/species/shapeshifter/get_valid_shapeshifter_forms(var/mob/living/human/H)
- return valid_transform_species
-
-/decl/species/shapeshifter/get_root_species_name(var/mob/living/human/H)
- if(!H) return ..()
- var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"])
- return S.get_root_species_name(H)
-
-/decl/species/shapeshifter/handle_pre_spawn(var/mob/living/human/H)
- ..()
- wrapped_species_by_ref["\ref[H]"] = default_form
-
-/decl/species/shapeshifter/handle_post_spawn(var/mob/living/human/H)
- if(monochromatic)
- var/skin_colour = H.get_skin_colour()
- SET_HAIR_COLOR(H, skin_colour, TRUE)
- SET_FACIAL_HAIR_COLOR(H, skin_colour, TRUE)
- ..()
-
-/decl/species/shapeshifter/get_pain_emote(var/mob/living/human/H, var/pain_power)
- var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"])
- return S.get_pain_emote(H, pain_power)
-
-// Verbs follow.
-/mob/living/human/proc/shapeshifter_select_hair()
-
- set name = "Select Hair"
- set category = "Abilities"
-
- if(stat || is_on_special_ability_cooldown())
- return
-
- set_special_ability_cooldown(1 SECOND)
-
- visible_message("\The [src]'s form contorts subtly.")
- var/decl/bodytype/root_bodytype = get_bodytype()
- var/list/hairstyles = species.get_available_accessory_types(root_bodytype, SAC_HAIR)
- if(length(hairstyles))
- var/decl/sprite_accessory/new_hair = input("Select a hairstyle.", "Shapeshifter Hair") as null|anything in hairstyles
- SET_HAIR_STYLE(src, (new_hair ? new_hair.type : /decl/sprite_accessory/hair/bald), FALSE)
-
- var/list/beardstyles = species.get_available_accessory_types(root_bodytype, SAC_FACIAL_HAIR)
- if(length(beardstyles))
- var/decl/sprite_accessory/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in beardstyles
- SET_FACIAL_HAIR_STYLE(src, (new_hair ? new_hair.type : /decl/sprite_accessory/facial_hair/shaved), FALSE)
-
-/mob/living/human/proc/shapeshifter_select_gender()
-
- set name = "Select Gender"
- set category = "Abilities"
-
- if(stat || is_on_special_ability_cooldown())
- return
-
- set_special_ability_cooldown(5 SECONDS)
-
- var/new_gender = input("Please select a gender.", "Shapeshifter Gender") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL)
- if(!new_gender)
- return
-
- visible_message("\The [src]'s form contorts subtly.")
- set_gender(new_gender, TRUE)
-
-/mob/living/human/proc/shapeshifter_select_shape()
-
- set name = "Select Body Shape"
- set category = "Abilities"
-
- if(stat ||is_on_special_ability_cooldown())
- return
-
- set_special_ability_cooldown(5 SECONDS)
-
- var/new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in species.get_valid_shapeshifter_forms(src)
- if(!new_species || !get_species_by_key(new_species) || wrapped_species_by_ref["\ref[src]"] == new_species)
- return
-
- wrapped_species_by_ref["\ref[src]"] = new_species
- visible_message("\The [src] shifts and contorts, taking the form of \a ["\improper [new_species]"]!")
- try_refresh_visible_overlays()
-
-/mob/living/human/proc/shapeshifter_select_colour()
-
- set name = "Select Body Colour"
- set category = "Abilities"
-
- if(stat || is_on_special_ability_cooldown())
- return
-
- set_special_ability_cooldown(5 SECONDS)
-
- var/new_skin = input("Please select a new body color.", "Shapeshifter Colour") as color
- if(!new_skin)
- return
- shapeshifter_set_colour(new_skin)
-
-/mob/living/human/proc/shapeshifter_set_colour(var/new_skin)
- set_skin_colour(new_skin, skip_update = TRUE)
- var/decl/species/shapeshifter/S = species
- if(S.monochromatic)
- var/skin_colour = get_skin_colour()
- SET_HAIR_COLOR(src, skin_colour, TRUE)
- SET_FACIAL_HAIR_COLOR(src, skin_colour, TRUE)
- for(var/obj/item/organ/external/E in get_external_organs())
- E.sync_colour_to_human(src)
- try_refresh_visible_overlays()
diff --git a/code/modules/species/species_shapeshifter_bodytypes.dm b/code/modules/species/species_shapeshifter_bodytypes.dm
deleted file mode 100644
index 9c3e4d00f15..00000000000
--- a/code/modules/species/species_shapeshifter_bodytypes.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/decl/bodytype/shapeshifter
- name = "protean form"
- bodytype_category = BODYTYPE_HUMANOID
- uid = "bodytype_shapeshifter"
-
-/decl/bodytype/shapeshifter/apply_limb_colouration(var/obj/item/organ/external/E, var/icon/applying)
- applying.MapColors("#4d4d4d","#969696","#1c1c1c", "#000000")
- applying.SetIntensity(limb_icon_intensity)
- applying += rgb(,,,180) // Makes the icon translucent, SO INTUITIVE TY BYOND
- return applying
-
-/decl/bodytype/shapeshifter/check_dismember_type_override(var/disintegrate)
- if(disintegrate == DISMEMBER_METHOD_EDGE)
- return DISMEMBER_METHOD_BLUNT
- return ..()
-
-/decl/bodytype/shapeshifter/get_base_icon(var/mob/living/human/H, var/get_deform)
- if(!H) return ..(null, get_deform)
- var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"])
- return S.default_bodytype.get_base_icon(H, get_deform)
-
-/decl/bodytype/shapeshifter/get_blood_overlays(var/mob/living/human/H)
- if(!H) return ..()
- var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"])
- return S.default_bodytype.get_blood_overlays(H)
-
-/decl/bodytype/shapeshifter/get_damage_overlays(var/mob/living/human/H)
- if(!H) return ..()
- var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"])
- return S.default_bodytype.get_damage_overlays(H)
-
-/decl/bodytype/shapeshifter/get_husk_icon(var/mob/living/human/H)
- if(H)
- var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"])
- if(S) return S.default_bodytype.get_husk_icon(H)
- return ..()
-
-/decl/bodytype/shapeshifter/get_icon_cache_uid(var/mob/H)
- . = ..()
- if(H)
- . = "[.]-[wrapped_species_by_ref["\ref[H]"]]"
-
-/decl/bodytype/shapeshifter/apply_bodytype_organ_modifications(obj/item/organ/org)
- ..()
- var/obj/item/organ/external/E = org
- if(istype(E) && E.owner)
- E.sync_colour_to_human(E.owner)
\ No newline at end of file
diff --git a/code/modules/species/station/golem.dm b/code/modules/species/station/golem.dm
index 9f571d66c60..93dc4786eae 100644
--- a/code/modules/species/station/golem.dm
+++ b/code/modules/species/station/golem.dm
@@ -16,7 +16,6 @@
available_bodytypes = list(/decl/bodytype/crystalline/golem)
- unarmed_attacks = list(/decl/natural_attack/stomp, /decl/natural_attack/kick, /decl/natural_attack/punch)
species_flags = SPECIES_FLAG_NO_POISON
spawn_flags = SPECIES_IS_RESTRICTED
shock_vulnerability = 0
diff --git a/code/modules/species/station/human.dm b/code/modules/species/station/human.dm
index 6264a7b2048..2ee92427f41 100644
--- a/code/modules/species/station/human.dm
+++ b/code/modules/species/station/human.dm
@@ -2,12 +2,6 @@
name = SPECIES_HUMAN
name_plural = "Humans"
primitive_form = SPECIES_MONKEY
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite
- )
description = "A medium-sized creature prone to great ambition. If you are reading this, you are probably a human."
hidden_from_codex = FALSE
spawn_flags = SPECIES_CAN_JOIN
diff --git a/code/modules/species/station/human_bodytypes.dm b/code/modules/species/station/human_bodytypes.dm
index be6879a20a4..b6c753b5514 100644
--- a/code/modules/species/station/human_bodytypes.dm
+++ b/code/modules/species/station/human_bodytypes.dm
@@ -8,7 +8,7 @@
bandages_icon = 'icons/mob/bandage.dmi'
limb_icon_intensity = 0.7
associated_gender = FEMALE
- onmob_state_modifiers = list(slot_w_uniform_str = "f")
+ onmob_state_modifiers = list((slot_w_uniform_str) = "f")
appearance_flags = HAS_SKIN_TONE_NORMAL | HAS_UNDERWEAR | HAS_EYE_COLOR
nail_noun = "nails"
uid = "bodytype_human_fem"
diff --git a/code/modules/species/station/monkey.dm b/code/modules/species/station/monkey.dm
index 9159f5eadc3..1871219744e 100644
--- a/code/modules/species/station/monkey.dm
+++ b/code/modules/species/station/monkey.dm
@@ -15,7 +15,6 @@
dusted_anim = "dust-m"
death_message = "lets out a faint chimper as it collapses and stops moving..."
- unarmed_attacks = list(/decl/natural_attack/bite, /decl/natural_attack/claws, /decl/natural_attack/punch)
inherent_verbs = list(/mob/living/proc/ventcrawl)
species_hud = /datum/hud_data/monkey
butchery_data = /decl/butchery_data/humanoid/monkey
diff --git a/code/modules/species/station/monkey_bodytypes.dm b/code/modules/species/station/monkey_bodytypes.dm
index 804d6d0add1..b1b22de545c 100644
--- a/code/modules/species/station/monkey_bodytypes.dm
+++ b/code/modules/species/station/monkey_bodytypes.dm
@@ -19,12 +19,12 @@
uid = "bodytype_monkey"
/decl/bodytype/monkey/Initialize()
- equip_adjust = list(
- BP_L_HAND = list("[NORTH]" = list( 1, 3), "[EAST]" = list(-3, 2), "[SOUTH]" = list(-1, 3), "[WEST]" = list( 3, 2)),
- BP_R_HAND = list("[NORTH]" = list(-1, 3), "[EAST]" = list( 3, 2), "[SOUTH]" = list( 1, 3), "[WEST]" = list(-3, 2)),
- slot_shoes_str = list("[NORTH]" = list( 0, 7), "[EAST]" = list(-1, 7), "[SOUTH]" = list( 0, 7), "[WEST]" = list( 1, 7)),
- slot_head_str = list("[NORTH]" = list( 0, 0), "[EAST]" = list(-2, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list( 2, 0)),
- slot_wear_mask_str = list("[NORTH]" = list( 0, 0), "[EAST]" = list(-1, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list( 1, 0))
+ _equip_adjust = list(
+ (BP_L_HAND) = list("[NORTH]" = list( 1, 3), "[EAST]" = list(-3, 2), "[SOUTH]" = list(-1, 3), "[WEST]" = list( 3, 2)),
+ (BP_R_HAND) = list("[NORTH]" = list(-1, 3), "[EAST]" = list( 3, 2), "[SOUTH]" = list( 1, 3), "[WEST]" = list(-3, 2)),
+ (slot_shoes_str) = list("[NORTH]" = list( 0, 7), "[EAST]" = list(-1, 7), "[SOUTH]" = list( 0, 7), "[WEST]" = list( 1, 7)),
+ (slot_head_str) = list("[NORTH]" = list( 0, 0), "[EAST]" = list(-2, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list( 2, 0)),
+ (slot_wear_mask_str) = list("[NORTH]" = list( 0, 0), "[EAST]" = list(-1, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list( 1, 0))
)
. = ..()
diff --git a/code/modules/spells/aoe_turf/aoe_turf.dm b/code/modules/spells/aoe_turf/aoe_turf.dm
deleted file mode 100644
index 46febbfbe5f..00000000000
--- a/code/modules/spells/aoe_turf/aoe_turf.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Aoe turf spells target a ring of tiles around the user
-This ring has an outer radius (range) and an inner radius (inner_radius)
-Aoe turf spells have two useful flags: IGNOREDENSE and IGNORESPACE. These are explained in setup.dm
-*/
-
-/spell/aoe_turf //affects all turfs in view or range (depends)
- spell_flags = IGNOREDENSE
- var/inner_radius = -1 //for all your ring spell needs
-
-/spell/aoe_turf/choose_targets(mob/user = usr)
- var/list/targets = list()
-
- for(var/turf/target in view_or_range(range, holder, selection_type))
- if(!(target in view_or_range(inner_radius, holder, selection_type)))
- if(target.density && (spell_flags & IGNOREDENSE))
- continue
- if(isspaceturf(target) && (spell_flags & IGNORESPACE))
- continue
- targets += target
-
- if(!targets.len) //doesn't waste the spell
- return
-
- return targets
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/blink.dm b/code/modules/spells/aoe_turf/blink.dm
deleted file mode 100644
index 3fd742aec24..00000000000
--- a/code/modules/spells/aoe_turf/blink.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-/spell/aoe_turf/blink
- name = "Blink"
- desc = "This spell randomly teleports you a short distance."
- feedback = "BL"
- school = "conjuration"
- charge_max = 20
- spell_flags = Z2NOCAST | IGNOREDENSE | IGNORESPACE
- invocation = "none"
- invocation_type = SpI_NONE
- range = 7
- inner_radius = 1
-
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 4)
- cooldown_min = 5 //4 deciseconds reduction per rank
- hud_state = "wiz_blink"
- cast_sound = 'sound/magic/blink.ogg'
-
-/spell/aoe_turf/blink/cast(var/list/targets, mob/user)
- if(!targets.len)
- return
-
- var/turf/T = pick(targets)
- var/turf/starting = get_turf(user)
- if(T)
- if(user.buckled)
- user.buckled = null
- user.forceMove(T)
-
- var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
- smoke.set_up(3, 0, starting)
- smoke.start()
-
- smoke = new()
- smoke.set_up(3, 0, T)
- smoke.start()
-
- return
-
-/spell/aoe_turf/blink/empower_spell()
- if(!..())
- return 0
- inner_radius += 1
-
- return "You've increased the inner range of [src]."
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/charge.dm b/code/modules/spells/aoe_turf/charge.dm
deleted file mode 100644
index d9c8f95af90..00000000000
--- a/code/modules/spells/aoe_turf/charge.dm
+++ /dev/null
@@ -1,72 +0,0 @@
-/spell/aoe_turf/charge
- name = "Charge"
- desc = "This spell can be used to charge up spent magical artifacts, among other things."
-
- school = "transmutation"
- charge_max = 600
- spell_flags = 0
- invocation = "DIRI CEL"
- invocation_type = SpI_WHISPER
- range = 0
- cooldown_min = 400 //50 deciseconds reduction per rank
-
- hud_state = "wiz_charge"
- cast_sound = 'sound/magic/charge.ogg'
-
-/spell/aoe_turf/charge/cast(var/list/targets, mob/user)
- for(var/turf/T in targets)
- depth_cast(T)
-
-/spell/aoe_turf/charge/proc/depth_cast(var/list/targets)
- for(var/atom/A in targets)
- if(A.contents.len)
- depth_cast(A.contents)
- cast_charge(A)
-
-/spell/aoe_turf/charge/proc/mob_charge(var/mob/living/M)
- if(!M.mind)
- return
- if(M.mind.learned_spells.len != 0)
- for(var/spell/S in M.mind.learned_spells)
- if(!istype(S, /spell/aoe_turf/charge))
- S.charge_counter = S.charge_max
- to_chat(M, "You feel raw magic flowing through you, it feels good!")
- else
- to_chat(M, "You feel very strange for a moment, but then it passes.")
- return M
-
-/spell/aoe_turf/charge/proc/cast_charge(var/atom/target)
- var/atom/charged_item
-
- if(isliving(target))
- charged_item = mob_charge(target)
-
- if(istype(target, /obj/item/grab))
- var/obj/item/grab/grab = target
- if(grab.affecting)
- var/mob/M = grab.get_affecting_mob()
- if(M)
- charged_item = mob_charge(M)
-
- if(istype(target, /obj/item/cell/))
- var/obj/item/cell/C = target
- if(prob(80) && C.maxcharge)
- C.maxcharge -= 200
- if(C.maxcharge <= 0) //maxcharge of 0! Madness!
- C.maxcharge = 0
- C.charge = C.maxcharge
- charged_item = C
-
- if(!charged_item)
- return 0
- else
- charged_item.visible_message("[charged_item] suddenly sparks with energy!")
- return 1
-
-
-/spell/aoe_turf/charge/blood
- name = "Blood Infusion"
- desc = "This spell charges things around it using the lifeforce gained by sacrificed blood."
- charge_type = Sp_HOLDVAR
- holder_var_type = "bruteloss"
- holder_var_amount = 30
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/conjure/conjure.dm b/code/modules/spells/aoe_turf/conjure/conjure.dm
deleted file mode 100644
index 9291456f41a..00000000000
--- a/code/modules/spells/aoe_turf/conjure/conjure.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-Conjure spells spawn things (mobs, objs, turfs) in their summon_type
-How they spawn stuff is decided by behaviour vars, which are explained below
-*/
-
-/spell/aoe_turf/conjure
- name = "Conjure"
- desc = "This spell conjures objs of the specified types in range."
-
- school = "conjuration" //funny, that
-
- var/list/summon_type = list() //determines what exactly will be summoned
- //should NOT be text, like list(/obj/machinery/bot/ed209)
-
- range = 0 //default values: only spawn on the player tile
- selection_type = "view"
-
- duration = 0 // 0=permanent, any other time in deciseconds - how long the summoned objects last for
- var/summon_amt = 1 //amount of objects summoned
- var/summon_exclusive = 0 //spawn one of everything, instead of random things
-
- var/list/newVars = list() //vars of the summoned objects will be replaced with those where they meet
- //should have format of list("emagged" = 1,"name" = "Wizard's Justicebot"), for example
-
- cast_sound = 'sound/magic/castsummon.ogg'
-
-/spell/aoe_turf/conjure/cast(list/targets, mob/user)
-
- for(var/i=1,i <= summon_amt,i++)
- if(!targets.len)
- break
- var/summoned_object_type
- if(summon_exclusive)
- if(!summon_type.len)
- break
- summoned_object_type = summon_type[1]
- summon_type -= summoned_object_type
- else
- summoned_object_type = pick(summon_type)
- var/turf/spawn_place = pick(targets)
- if(spell_flags & IGNOREPREV)
- targets -= spawn_place
-
- var/atom/summoned_object
- if(ispath(summoned_object_type,/turf))
- spawn_place.ChangeTurf(summoned_object_type)
- summoned_object = spawn_place
- else
- summoned_object = new summoned_object_type(spawn_place)
- var/atom/movable/overlay/animation = new /atom/movable/overlay(summoned_object)
- animation.SetName("conjure")
- animation.set_density(0)
- animation.anchored = TRUE
- animation.icon = 'icons/effects/effects.dmi'
- animation.layer = BASE_HUMAN_LAYER
- if(ismob(summoned_object)) //we want them to NOT attack us.
- var/mob/M = summoned_object
- M.faction = user.faction
- apply_vars(summoned_object, user)
-
- if(duration)
- spawn(duration)
- if(summoned_object && !isturf(summoned_object))
- qdel(summoned_object)
- conjure_animation(animation, spawn_place)
- return
-
-/spell/aoe_turf/conjure/proc/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
- qdel(animation)
-
-/spell/aoe_turf/conjure/proc/apply_vars(atom/summoned_object, mob/caster)
- if(!istype(summoned_object) || !length(newVars))
- return
- for(var/varName in newVars)
- if(varName in summoned_object.vars)
- summoned_object.vars[varName] = newVars[varName]
diff --git a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm b/code/modules/spells/aoe_turf/conjure/druidic_spells.dm
deleted file mode 100644
index e6f0b8ea260..00000000000
--- a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm
+++ /dev/null
@@ -1,113 +0,0 @@
-/spell/aoe_turf/conjure/summon
- var/name_summon = 0
- cast_sound = 'sound/weapons/wave.ogg'
-
-/spell/aoe_turf/conjure/summon/before_cast()
- ..()
- if(name_summon)
- var/newName = sanitize(input("Would you like to name your summon?") as null|text, MAX_NAME_LEN)
- if(newName)
- newVars["name"] = newName
-
-/spell/aoe_turf/conjure/summon/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
- animation.icon_state = "shield2"
- flick("shield2",animation)
- sleep(10)
- ..()
-
-
-/spell/aoe_turf/conjure/summon/bats
- name = "Summon Space Bats"
- desc = "This spell summons a flock of spooky space bats."
- feedback = "SB"
-
- charge_max = 1200 //2 minutes
- spell_flags = NEEDSCLOTHES
- invocation = "Bla'yo daya!"
- invocation_type = SpI_SHOUT
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 3)
- cooldown_min = 600
-
- range = 1
-
- summon_amt = 1
- summon_type = list(/mob/living/simple_animal/hostile/scarybat)
-
- hud_state = "wiz_bats"
-
-/spell/aoe_turf/conjure/summon/bats/empower_spell()
- if(!..())
- return 0
-
- newVars = list("max_health" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2)
-
- return "Your bats are now stronger."
-
-/spell/aoe_turf/conjure/summon/bear
- name = "Summon Bear"
- desc = "This spell summons a permanent bear companion that will follow your orders."
- feedback = "BR"
- charge_max = 3000 //5 minutes because this is a REALLY powerful spell. May tone it down/up.
- spell_flags = NEEDSCLOTHES
- invocation = "REA'YO GOR DAYA!"
- invocation_type = SpI_SHOUT
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 0, Sp_POWER = 4)
-
- range = 0
-
- name_summon = 1
-
- summon_amt = 1
- summon_type = list(/mob/living/simple_animal/hostile/commanded/bear)
- newVars = list("max_health" = 15,
- "health" = 15,
- "melee_damage_lower" = 10,
- "melee_damage_upper" = 10,
- )
-
- hud_state = "wiz_bear"
-
-/spell/aoe_turf/conjure/summon/bear/apply_vars(atom/summoned_object, mob/caster)
- . = ..()
- if(isliving(summoned_object))
- var/mob/living/summoned_mob = summoned_object
- if(istype(summoned_mob.ai, /datum/mob_controller/aggressive/commanded))
- var/datum/mob_controller/aggressive/commanded/command_ai = summoned_mob.ai
- command_ai.master = caster
-
-/spell/aoe_turf/conjure/summon/bear/empower_spell()
- if(!..())
- return 0
- switch(spell_levels[Sp_POWER])
- if(1)
- newVars = list("max_health" = 30,
- "health" = 30,
- "melee_damage_lower" = 15,
- "melee_damage_upper" = 15
- )
- return "Your bear has been upgraded from a cub to a whelp."
- if(2)
- newVars = list("max_health" = 45,
- "health" = 45,
- "melee_damage_lower" = 20,
- "melee_damage_upper" = 20,
- "color" = "#d9d9d9" //basically we want them to look different enough that people can recognize it.
- )
- return "Your bear has been upgraded from a whelp to an adult."
- if(3)
- newVars = list("max_health" = 60,
- "health" = 60,
- "melee_damage_lower" = 25,
- "melee_damage_upper" = 25,
- "color" = "#8c8c8c"
- )
- return "Your bear has been upgraded from an adult to an alpha."
- if(4)
- newVars = list("max_health" = 75,
- "health" = 75,
- "melee_damage_lower" = 35,
- "melee_damage_upper" = 35,
- "resistance" = 3,
- "color" = "#0099ff"
- )
- return "Your bear is now worshiped as a god amongst bears."
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/conjure/faithful_hound.dm b/code/modules/spells/aoe_turf/conjure/faithful_hound.dm
deleted file mode 100644
index 4511e6a07f4..00000000000
--- a/code/modules/spells/aoe_turf/conjure/faithful_hound.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/spell/aoe_turf/conjure/faithful_hound
- name = "Faithful Hound"
- desc = "Summon a spectral watchdog with a special password. Anyone without the password is in for a barking and a biting."
- feedback = "FH"
-
- charge_max = 600
- spell_flags = NEEDSCLOTHES
- invocation = "Du korilath tangus"
- invocation_type = SpI_WHISPER
- range = 0
-
- summon_amt = 1
- summon_type = list(/mob/living/simple_animal/faithful_hound)
- hud_state = "wiz_hound"
-
- var/temp_password
-
-/spell/aoe_turf/conjure/faithful_hound/apply_vars(atom/summoned_object, mob/caster)
- . = ..()
- var/mob/living/simple_animal/faithful_hound/hound = summoned_object
- if(istype(hound) && istype(hound.ai))
- hound.ai.add_friend(caster)
- hound.ai.memorise(caster, temp_password)
- temp_password = null
-
-/spell/aoe_turf/conjure/faithful_hound/before_cast()
- ..()
- temp_password = sanitize(input("What password will this beast listen to?") as text, MAX_NAME_LEN)
diff --git a/code/modules/spells/aoe_turf/conjure/force_portal.dm b/code/modules/spells/aoe_turf/conjure/force_portal.dm
deleted file mode 100644
index 293e176051f..00000000000
--- a/code/modules/spells/aoe_turf/conjure/force_portal.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/spell/aoe_turf/conjure/force_portal
- name = "Force Portal"
- desc = "Create a portal that sucks in anything that touches it and then shoots it all out at the end."
- school = "conjuration"
- feedback = "FP"
- summon_type = list(/obj/effect/force_portal)
- charge_max = 200
- spell_flags = NEEDSCLOTHES
- range = 0
- cast_sound = null
-
- hud_state = "wiz_force"
diff --git a/code/modules/spells/aoe_turf/conjure/forcewall.dm b/code/modules/spells/aoe_turf/conjure/forcewall.dm
deleted file mode 100644
index 1c937f3f6d8..00000000000
--- a/code/modules/spells/aoe_turf/conjure/forcewall.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/spell/aoe_turf/conjure/forcewall
- name = "Forcewall"
- desc = "Create a wall of pure energy at your location."
- school = "conjuration"
- feedback = "FW"
- summon_type = list(/obj/effect/forcefield)
- duration = 300
- charge_max = 100
- spell_flags = 0
- range = 0
- cast_sound = 'sound/magic/forcewall.ogg'
-
- hud_state = "wiz_shield"
-
-/spell/aoe_turf/conjure/forcewall/mime
- name = "Invisible wall"
- desc = "Create an invisible wall on your location."
- school = "mime"
- panel = "Mime"
- summon_type = list(/obj/effect/forcefield/mime)
- invocation_type = SpI_EMOTE
- invocation = "mimes placing their hands on a flat surfacing, and pushing against it."
- charge_max = 300
- cast_sound = null
-
- override_base = "grey"
- hud_state = "mime_wall"
-
-/obj/effect/forcefield
- desc = "A space wizard's magic wall."
- name = "FORCEWALL"
- icon = 'icons/effects/effects.dmi'
- icon_state = "m_shield"
- anchored = TRUE
- opacity = FALSE
- density = TRUE
-
-/obj/effect/forcefield/bullet_act(var/obj/item/projectile/Proj, var/def_zone)
- var/turf/T = get_turf(src.loc)
- if(T)
- for(var/mob/M in T)
- Proj.on_hit(M,M.bullet_act(Proj, def_zone))
- return
-
-/obj/effect/forcefield/mime
- icon_state = "empty"
- name = "invisible wall"
- desc = "You have a bad feeling about this."
diff --git a/code/modules/spells/aoe_turf/conjure/grove.dm b/code/modules/spells/aoe_turf/conjure/grove.dm
deleted file mode 100644
index 77f68981e9d..00000000000
--- a/code/modules/spells/aoe_turf/conjure/grove.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/spell/aoe_turf/conjure/grove
- name = "Grove"
- desc = "Creates a sanctuary of nature around the wizard as well as creating a healing plant."
-
- spell_flags = IGNOREDENSE | IGNORESPACE | NEEDSCLOTHES | Z2NOCAST | IGNOREPREV
- charge_max = 1200
- school = "transmutation"
-
- range = 1
- cooldown_min = 600
-
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 1)
-
- summon_amt = 47
- summon_type = list(/turf/floor/fake_grass)
- var/spread = 0
- var/datum/seed/seed
- var/seed_type = /datum/seed/merlin_tear
- cast_sound = 'sound/magic/repulse.ogg'
-
-/spell/aoe_turf/conjure/grove/New()
- ..()
- if(seed_type)
- seed = new seed_type()
- else
- seed = SSplants.create_random_seed(1)
-
-/spell/aoe_turf/conjure/grove/before_cast()
- var/turf/T = get_turf(holder)
- var/obj/effect/vine/P = new(T,seed)
- P.spread_chance = spread
-
-
-/spell/aoe_turf/conjure/grove/sanctuary
- name = "Sanctuary"
- desc = "Creates a sanctuary of nature around the wizard as well as creating a healing plant."
- feedback = "SY"
- invocation = "Bo K'Iitan!"
- invocation_type = SpI_SHOUT
- spell_flags = IGNOREDENSE | IGNORESPACE | NEEDSCLOTHES | Z2NOCAST | IGNOREPREV
- cooldown_min = 600
-
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 1)
-
- seed_type = /datum/seed/merlin_tear
- newVars = list("name" = "sanctuary", "desc" = "This grass makes you feel comfortable. Peaceful.","blessed" = 1)
-
- hud_state = "wiz_grove"
-/spell/aoe_turf/conjure/grove/sanctuary/empower_spell()
- if(!..())
- return 0
-
- seed.set_trait(TRAIT_SPREAD,2) //make it grow.
- spread = 40
- return "Your sanctuary will now grow beyond that of the grassy perimeter."
-
-/datum/seed/merlin_tear
- name = "merlin tears"
- product_name = "merlin tears"
- display_name = "merlin tears"
- chems = list(/decl/material/liquid/brute_meds = list(3,7), /decl/material/liquid/burn_meds = list(3,7), /decl/material/liquid/antitoxins = list(3,7), /decl/material/liquid/regenerator = list(3,7), /decl/material/liquid/neuroannealer = list(1,2), /decl/material/liquid/eyedrops = list(1,2))
- grown_tag = "berries"
-
-/datum/seed/merlin_tear/New()
- ..()
- set_trait(TRAIT_PLANT_ICON,"bush5")
- set_trait(TRAIT_PRODUCT_ICON,"berry")
- set_trait(TRAIT_PRODUCT_COLOUR,"#4d4dff")
- set_trait(TRAIT_PLANT_COLOUR, "#ff6600")
- set_trait(TRAIT_YIELD,4)
- set_trait(TRAIT_MATURATION,6)
- set_trait(TRAIT_PRODUCTION,6)
- set_trait(TRAIT_POTENCY,10)
- set_trait(TRAIT_HARVEST_REPEAT,1)
- set_trait(TRAIT_IMMUTABLE,1) //no making op plants pls
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/disable_tech.dm b/code/modules/spells/aoe_turf/disable_tech.dm
deleted file mode 100644
index d9912e1c390..00000000000
--- a/code/modules/spells/aoe_turf/disable_tech.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/spell/aoe_turf/disable_tech
- name = "Disable Tech"
- desc = "This spell disables all weapons, cameras and most other technology in range."
- feedback = "DT"
- charge_max = 400
- spell_flags = NEEDSCLOTHES
- invocation = "NEC CANTIO"
- invocation_type = SpI_SHOUT
- selection_type = "range"
- range = 0
- inner_radius = -1
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2)
- cooldown_min = 200 //50 deciseconds reduction per rank
-
- var/emp_heavy = 3
- var/emp_light = 5
-
- hud_state = "wiz_tech"
- cast_sound = 'sound/magic/disable_tech.ogg'
-
-/spell/aoe_turf/disable_tech/cast(list/targets)
-
- for(var/turf/target in targets)
- empulse(get_turf(target), emp_heavy, emp_light)
- return
-
-/spell/aoe_turf/disable_tech/empower_spell()
- if(!..())
- return 0
- emp_heavy += 2
- emp_light += 2
-
- return "You've increased the range of [src]."
diff --git a/code/modules/spells/aoe_turf/drain_blood.dm b/code/modules/spells/aoe_turf/drain_blood.dm
deleted file mode 100644
index 8ad4ea6b8a2..00000000000
--- a/code/modules/spells/aoe_turf/drain_blood.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/spell/aoe_turf/drain_blood
- name = "Drain Blood"
- desc = "This spell allows the caster to borrow blood from those around them. Sharing is caring!"
- feedback = "DB"
- school = "transmutation"
- charge_max = 600
- invocation = "whispers something darkly"
- invocation_type = SpI_EMOTE
- range = 3
- inner_radius = 0
-
- time_between_channels = 100
- number_of_channels = 3
- cast_sound = 'sound/effects/squelch2.ogg'
- hud_state = "const_rune"
-
-/spell/aoe_turf/drain_blood/cast(var/list/targets, var/mob/user)
- for(var/t in targets)
- for(var/mob/living/L in t)
- if(L.stat == DEAD || L == user)
- continue
- //Hurt target
- if(ishuman(L))
- var/mob/living/human/H = L
- H.vessel.remove_any(10)
- else
- L.take_damage(10)
- to_chat(L, "You feel your lifeforce being ripping out of your body!")
-
- //Do effect
- var/obj/item/projectile/beam/blood_effect/effect = new(get_turf(user))
- effect.pixel_x = 0
- effect.pixel_y = 0
- effect.launch(L, "chest")
-
- //Heal self
- if(ishuman(user))
- var/mob/living/human/H = user
- var/amount = min(10, H.species.blood_volume - H.vessel.total_volume)
- if(amount > 0)
- H.adjust_blood(amount)
- continue
- L.heal_damage(BRUTE, 5, do_update_health = FALSE)
- L.heal_damage(BURN, 2.5, do_update_health = FALSE)
- L.heal_damage(TOX, 2.5)
-
-/obj/item/projectile/beam/blood_effect
- name = "blood jet"
- icon_state = "blood"
- damage = 0
- randpixel = 0
- no_attack_log = 1
- muzzle_type = /obj/effect/projectile/blood
- tracer_type = /obj/effect/projectile/blood
- impact_type = /obj/effect/projectile/blood
-
-/obj/item/projectile/beam/blood_effect/Bump(var/atom/a, forced=0)
- if(a == original)
- on_impact(a)
- qdel(src)
- return 1
- return 0
-
-
-/obj/effect/projectile/blood
- icon_state = "blood"
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/exchange_wounds.dm b/code/modules/spells/aoe_turf/exchange_wounds.dm
deleted file mode 100644
index 7293e960d29..00000000000
--- a/code/modules/spells/aoe_turf/exchange_wounds.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-/spell/aoe_turf/exchange_wounds
- name = "Exchange Wounds"
- desc = "Allows you to sacrifice your own well-being for that of those around you."
- feedback = "EW"
- school = "transmutation"
- invocation = "Esh Yek Vai!"
- invocation_type = SpI_SHOUT
- charge_max = 400
- spell_flags = 0
-
- var/amt_healed = 0
- var/heal_max = 100
- range = 4
- inner_radius = 0
- number_of_channels = 0
- time_between_channels = 20
-
- hud_state = "wiz_exchange"
-
-/spell/aoe_turf/exchange_wounds/perform()
- amt_healed = 0
- ..()
-
-/spell/aoe_turf/exchange_wounds/cast(var/list/targets, var/mob/living/user)
- new /obj/effect/temporary(get_turf(user),10,'icons/effects/effects.dmi',"purple_electricity_constant")
- for(var/t in targets)
- for(var/mob/living/L in t)
- if(L.faction != user.faction)
- continue
- new /obj/effect/temporary(get_turf(L),10,'icons/effects/effects.dmi',"green_sparkles")
- if(L.get_damage(BRUTE) > 5)
- L.heal_damage(BRUTE, 5)
- user.take_damage(2)
- amt_healed += 5
- if(L.get_damage(BURN) > 5)
- L.heal_damage(BURN, 5)
- user.take_damage(2, BURN)
- amt_healed += 5
-
-/spell/aoe_turf/exchange_wounds/check_valid_targets()
- if(amt_healed > heal_max)
- return FALSE
- return ..()
\ No newline at end of file
diff --git a/code/modules/spells/aoe_turf/knock.dm b/code/modules/spells/aoe_turf/knock.dm
deleted file mode 100644
index 3cf8614eeaa..00000000000
--- a/code/modules/spells/aoe_turf/knock.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/spell/aoe_turf/knock
- name = "Knock"
- desc = "This spell opens nearby doors and does not require wizard garb."
- feedback = "KN"
- school = "transmutation"
- charge_max = 100
- spell_flags = 0
- invocation = "Aulie Oxin Fiera."
- invocation_type = SpI_WHISPER
- range = 3
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 1)
- cooldown_min = 20 //20 deciseconds reduction per rank
-
- hud_state = "wiz_knock"
- cast_sound = 'sound/magic/knock.ogg'
-
-/spell/aoe_turf/knock/cast(list/targets)
- for(var/turf/T in targets)
- for(var/obj/machinery/door/door in T.contents)
- spawn(1)
- if(istype(door,/obj/machinery/door/airlock))
- var/obj/machinery/door/airlock/AL = door //casting is important
- AL.locked = 0
- door.open()
- return
-
-
-/spell/aoe_turf/knock/empower_spell()
- if(!..())
- return 0
- range *= 2
-
- return "You've doubled the range of [src]."
-
-/spell/aoe_turf/knock/slow
- charge_max = 200
- hidden_from_codex = TRUE
diff --git a/code/modules/spells/aoe_turf/smoke.dm b/code/modules/spells/aoe_turf/smoke.dm
deleted file mode 100644
index f9f0138908f..00000000000
--- a/code/modules/spells/aoe_turf/smoke.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/spell/aoe_turf/smoke
- name = "Smoke"
- desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
- feedback = "SM"
- school = "transmutation"
- charge_max = 120
- spell_flags = 0
- invocation = "none"
- invocation_type = SpI_NONE
- range = 1
- inner_radius = -1
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 2)
- cooldown_min = 20 //25 deciseconds reduction per rank
-
- smoke_spread = 2
- smoke_amt = 5
-
- hud_state = "wiz_smoke"
- cast_sound = 'sound/magic/smoke.ogg'
-
-/spell/aoe_turf/smoke/empower_spell()
- if(!..())
- return 0
- smoke_amt += 2
-
- return "[src] will now create more smoke."
diff --git a/code/modules/spells/aoe_turf/summons.dm b/code/modules/spells/aoe_turf/summons.dm
deleted file mode 100644
index be61819d9ea..00000000000
--- a/code/modules/spells/aoe_turf/summons.dm
+++ /dev/null
@@ -1,72 +0,0 @@
-/spell/aoe_turf/conjure/summonEdSwarm //test purposes
- name = "Dispense Wizard Justice"
- desc = "This spell dispenses wizard justice."
-
- summon_type = list(/mob/living/bot/secbot/ed209)
- summon_amt = 10
- range = 3
- newVars = list("emagged" = 1,"name" = "Wizard's Justicebot")
-
- hud_state = "wiz_ed"
-
-/spell/aoe_turf/conjure/carp
- name = "Summon Carp"
- desc = "This spell conjures a simple carp."
-
- school = "conjuration"
- charge_max = 1200
- spell_flags = NEEDSCLOTHES
- invocation = "Nouk Fhumm Sacp Risska!"
- invocation_type = SpI_SHOUT
- range = 1
- cast_sound = 'sound/magic/summon_carp.ogg'
-
- summon_type = list(/mob/living/simple_animal/hostile/carp)
-
- hud_state = "wiz_carp"
-
-/spell/aoe_turf/conjure/creature
- name = "Summon Creature Swarm"
- desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth"
-
- school = "conjuration"
- charge_max = 1200
- spell_flags = 0
- invocation = "Ia-Ia! Naomesnalia!"
- invocation_type = SpI_SHOUT
- summon_amt = 10
- range = 3
-
- summon_type = list(/mob/living/simple_animal/hostile/creature)
-
- hud_state = "wiz_creature"
-
-/spell/aoe_turf/conjure/mirage
- name = "Summon Mirage"
- desc = "This spell summons a harmless carp mirage for a few seconds."
- feedback = "MR"
- school = "illusion"
- charge_max = 1200
- spell_flags = NEEDSCLOTHES
- invocation = "Nouk Fhunhm Sacp Risska!"
- invocation_type = SpI_SHOUT
- range = 1
- cast_sound = 'sound/magic/summon_carp.ogg'
-
- duration = 600
- cooldown_min = 600
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 2, Sp_POWER = 3)
-
- summon_type = list(/mob/living/simple_animal/hostile/carp)
-
- hud_state = "wiz_carp"
-
- newVars = list("melee_damage_lower" = 0, "melee_damage_upper" = 0, "break_stuff_probability" = 0)
-
-/spell/aoe_turf/conjure/mirage/empower_spell()
- if(!..())
- return 0
-
- summon_amt++
-
- return "You now summon [summon_amt] mirages per spellcast."
\ No newline at end of file
diff --git a/code/modules/spells/artifacts.dm b/code/modules/spells/artifacts.dm
deleted file mode 100644
index 2c085ff8e2a..00000000000
--- a/code/modules/spells/artifacts.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-//////////////////////Scrying orb//////////////////////
-
-/obj/item/scrying
- name = "scrying orb"
- desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means."
- icon = 'icons/obj/projectiles.dmi'
- icon_state = "bluespace"
- throw_speed = 3
- throw_range = 7
- atom_damage_type = BURN
- hitsound = 'sound/magic/forcewall.ogg'
- max_health = ITEM_HEALTH_NO_DAMAGE
- _base_attack_force = 10
-
-/obj/item/scrying/attack_self(mob/user)
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- if((user.mind && !wizards.is_antagonist(user.mind)))
- to_chat(user, "You stare into the orb and see nothing but your own reflection.")
- return
-
- to_chat(user, "You can see... everything!") // This never actually happens.
- visible_message("[user] stares into [src], their eyes glazing over.")
-
- user.teleop = user.ghostize()
- announce_ghost_joinleave(user.teleop, 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.")
- return
-
-
-
-/////////////////////////Cursed Dice///////////////////////////
-/obj/item/dice/d20/cursed
- desc = "A dice with twenty sides said to have an ill effect on those that are unlucky..."
-
-/obj/item/dice/d20/cursed/attack_self(mob/user)
- ..()
- if(isliving(user))
- var/mob/living/M = user
- if(icon_state == "[name][sides]")
- M.heal_damage(BRUTE, 30)
- else if(icon_state == "[name]1")
- M.take_damage(30)
diff --git a/code/modules/spells/artifacts/spellbound_servants.dm b/code/modules/spells/artifacts/spellbound_servants.dm
deleted file mode 100644
index 6477080cfdf..00000000000
--- a/code/modules/spells/artifacts/spellbound_servants.dm
+++ /dev/null
@@ -1,284 +0,0 @@
-/datum/spellbound_type
- var/name = "Stuff"
- var/desc = "spells n shit"
- var/equipment = list()
- var/spells = list()
-
-/datum/spellbound_type/proc/spawn_servant(var/atom/a, var/mob/master, var/mob/user)
- set waitfor = 0
- var/mob/living/human/H = new(a)
- H.ckey = user.ckey
- H.change_appearance(APPEARANCE_GENDER|APPEARANCE_BODY|APPEARANCE_EYE_COLOR|APPEARANCE_HAIR|APPEARANCE_FACIAL_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR_COLOR|APPEARANCE_SKIN)
-
- var/obj/item/implant/translator/natural/I = new()
- I.implant_in_mob(H, BP_HEAD)
- if (length(master.languages))
- var/decl/language/lang = master.languages[1]
- H.add_language(lang.type)
- H.set_default_language(lang.type)
- I.languages[lang.name] = 1
-
- modify_servant(equip_servant(H), H)
- set_antag(H.mind, master)
- var/name_choice = sanitize(input(H, "Choose a name. If you leave this blank, it will be defaulted to your current characters.", "Name change") as null|text, MAX_NAME_LEN)
- if(name_choice)
- H.SetName(name_choice)
- H.real_name = name_choice
-
-/datum/spellbound_type/proc/equip_servant(var/mob/living/human/H)
- for(var/stype in spells)
- var/spell/S = new stype()
- if(S.spell_flags & NEEDSCLOTHES)
- S.spell_flags &= ~NEEDSCLOTHES
- H.add_spell(S)
- . = list()
- for(var/etype in equipment)
- var/obj/item/I = new etype(get_turf(H))
- if(istype(I, /obj/item/clothing))
- I.canremove = 0
- H.equip_to_slot_if_possible(I,equipment[etype],0,1,1,1)
- . += I
-
-/datum/spellbound_type/proc/set_antag(var/datum/mind/M, var/mob/master)
- return
-
-/datum/spellbound_type/proc/modify_servant(var/list/items, var/mob/living/human/H)
- return
-
-/datum/spellbound_type/apprentice
- name = "Apprentice"
- desc = "Summon your trusty apprentice, equipped with their very own spellbook."
- equipment = list(/obj/item/clothing/head/wizard = slot_head_str,
- /obj/item/clothing/jumpsuit/lightpurple = slot_w_uniform_str,
- /obj/item/clothing/shoes/sandal = slot_shoes_str,
- /obj/item/staff = BP_R_HAND,
- /obj/item/book/spell/apprentice = BP_L_HAND,
- /obj/item/clothing/suit/wizrobe = slot_wear_suit_str)
- spells = list(/spell/noclothes)
-
-/datum/spellbound_type/apprentice/set_antag(var/datum/mind/M, var/mob/master)
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- wizards.add_antagonist_mind(M, 1, "Wizard's Apprentice", "You are an apprentice-type Servant! You're just an ordinary Wizard-To-Be, with no special abilities, but do not need robes to cast spells. Follow your teacher's orders!")
-
-/datum/spellbound_type/servant
- var/spiel = "You don't do anything in particular."
-
-/datum/spellbound_type/servant/set_antag(var/datum/mind/M, var/mob/master)
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- wizards.add_antagonist_mind(M, 1, "Spellbound Servant", "You are a [name]-type Servant! [spiel]")
-
-/datum/spellbound_type/servant/caretaker
- name = "Caretaker"
- desc = "A healer, a medic, a shoulder to cry on. This servant will heal you, even from near death."
- spiel = "'The last enemy that will be destroyed is death.' You can perceive any injuries with simple sight, and heal them with the Trance spell; potentially even reversing death itself! However, this comes at a price; Trance will become increasingly harder to use as you use it, until you can use it no longer. Be cautious, and aid your Master in any way possible!"
- equipment = list(/obj/item/clothing/jumpsuit/caretaker = slot_w_uniform_str,
- /obj/item/clothing/shoes/dress/caretakershoes = slot_shoes_str)
- spells = list(/spell/toggle_armor/caretaker,
- /spell/targeted/heal_target/touch,
- /spell/aoe_turf/knock/slow,
- /spell/targeted/heal_target/area/slow,
- /spell/targeted/analyze,
- /spell/targeted/heal_target/trance
- )
-
-/datum/spellbound_type/servant/champion
- name = "Champion"
- desc = "A knight in shining armor; a warrior, a protector, and a loyal friend."
- spiel = "Your sword and armor are second to none, but you have no unique supernatural powers beyond summoning the sword to your hands. Protect your Master with your life!"
- equipment = list(
- /obj/item/clothing/pants/champion = slot_w_uniform_str,
- /obj/item/clothing/shoes/jackboots/medievalboots = slot_shoes_str
- )
- spells = list(
- /spell/toggle_armor/champion,
- /spell/toggle_armor/excalibur
- )
-
-/datum/spellbound_type/servant/familiar
- name = "Familiar"
- desc = "A friend! Or are they a pet? They can transform into animals, and take some particular traits from said creatures."
- spiel = "This form of yours is weak in comparison to your transformed form, but that certainly won't pose a problem, considering the fact that you have an alternative. Whatever it is you can turn into, use its powers wisely and serve your Master as well as possible!"
- equipment = list(
- /obj/item/clothing/head/bandana/familiarband = slot_head_str,
- /obj/item/clothing/pants/familiar = slot_w_uniform_str
- )
-
-/datum/spellbound_type/servant/familiar/modify_servant(var/list/equipment, var/mob/living/human/H)
- var/familiar_type
- switch(input(H,"Choose your desired animal form:", "Form") as anything in list("Space Pike", "Mouse", "Cat", "Bear"))
- if("Space Pike")
- H.add_genetic_condition(GENE_COND_NO_BREATH)
- H.add_genetic_condition(GENE_COND_SPACE_RESISTANCE)
- familiar_type = /mob/living/simple_animal/hostile/carp/pike
- if("Mouse")
- H.verbs |= /mob/living/proc/ventcrawl
- familiar_type = /mob/living/simple_animal/passive/mouse
- if("Cat")
- H.add_genetic_condition(GENE_COND_RUNNING)
- familiar_type = /mob/living/simple_animal/passive/cat
- if("Bear")
- familiar_type = /mob/living/simple_animal/hostile/bear
- var/spell/targeted/shapeshift/familiar/F = new()
- F.possible_transformations = list(familiar_type)
- H.add_spell(F)
-
-/datum/spellbound_type/servant/fiend
- name = "Fiend"
- desc = "A practitioner of dark and evil magics, almost certainly a demon, and possibly a lawyer."
- spiel = "The Summoning Ritual has bound you to this world with limited access to your infernal powers; you'll have to be strategic in how you use them. Follow your Master's orders as well as you can!"
- spells = list(/spell/targeted/projectile/dumbfire/fireball/firebolt,
- /spell/targeted/ethereal_jaunt,
- /spell/targeted/torment,
- /spell/area_teleport,
- /spell/hand/charges/blood_shard
- )
-
-/datum/spellbound_type/servant/fiend/equip_servant(var/mob/living/human/H)
- if(H.gender == MALE)
- equipment = list(/obj/item/clothing/costume/fiendsuit = slot_w_uniform_str,
- /obj/item/clothing/shoes/dress/devilshoes = slot_shoes_str)
- spells += /spell/toggle_armor/fiend
- else
- equipment = list(/obj/item/clothing/dress/devil = slot_w_uniform_str,
- /obj/item/clothing/shoes/dress/devilshoes = slot_shoes_str)
- spells += /spell/toggle_armor/fiend/fem
- ..()
-
-/datum/spellbound_type/servant/infiltrator
- name = "Infiltrator"
- desc = "A spy and a manipulator to the end, capable of hiding in plain sight and falsifying information to your heart's content."
- spiel = "On the surface, you are a completely normal person, but is that really all you are? People are so easy to fool, do as your Master says, and do it with style!"
- spells = list(
- /spell/toggle_armor/infil_items,
- /spell/targeted/exude_pleasantness,
- /spell/targeted/genetic/blind/hysteria
- )
-
-/datum/spellbound_type/servant/infiltrator/equip_servant(var/mob/living/human/H)
- if(H.gender == MALE)
- equipment = list(/obj/item/clothing/pants/slacks/outfit/tie = slot_w_uniform_str,
- /obj/item/clothing/shoes/dress/infilshoes = slot_shoes_str)
- spells += /spell/toggle_armor/infiltrator
- else
- equipment = list(/obj/item/clothing/dress/white = slot_w_uniform_str,
- /obj/item/clothing/shoes/dress/infilshoes = slot_shoes_str)
- spells += /spell/toggle_armor/infiltrator/fem
- ..()
-
-/datum/spellbound_type/servant/overseer
- name = "Overseer"
- desc = "A ghost, or an imaginary friend; the Overseer is immune to space and can turn invisible at a whim, but has little offensive capabilities."
- spiel = "Physicality is not something you are familiar with. Indeed, injuries cannot slow you down, but you can't fight back, either! In addition to this, you can reach into the void and return the soul of a single departed crewmember via the revoke death verb, if so desired; this can even revive your Master, should they fall in combat before you do. Serve them well."
- equipment = list(
- /obj/item/clothing/pants/casual/blackjeans/outfit = slot_w_uniform_str,
- /obj/item/clothing/suit/jacket/hoodie/grim = slot_wear_suit_str,
- /obj/item/clothing/shoes/sandal/grimboots = slot_shoes_str,
- /obj/item/contract/wizard/xray = BP_L_HAND,
- /obj/item/contract/wizard/telepathy = BP_R_HAND
- )
- spells = list(
- /spell/toggle_armor/overseer,
- /spell/targeted/ethereal_jaunt,
- /spell/invisibility,
- /spell/targeted/revoke
- )
-
-/datum/spellbound_type/servant/overseer/equip_servant(var/mob/living/human/H)
- ..()
- H.add_aura(new /obj/aura/regenerating(H))
-
-/obj/effect/cleanable/spellbound
- name = "strange rune"
- desc = "some sort of runic symbol drawn in... crayon?"
- icon = 'icons/obj/rune.dmi'
- icon_state = "spellbound"
- is_spawnable_type = FALSE // invalid without spell_type passed
- var/datum/spellbound_type/stype
- var/last_called = 0
-
-/obj/effect/cleanable/spellbound/Initialize(mapload, var/spell_type)
- . = ..(mapload)
- stype = new spell_type()
-
-/obj/effect/cleanable/spellbound/attack_hand(var/mob/user)
- SHOULD_CALL_PARENT(FALSE)
- if(last_called > world.time)
- return TRUE
- last_called = world.time + 30 SECONDS
- var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/wizard_familiar)
- for(var/mob/observer/ghost/ghost in global.player_list)
- if(G.assess_candidate(ghost,null,FALSE))
- to_chat(ghost, "[SPAN_NOTICE("A wizard is requesting a Spell-Bound Servant!")] (Join)")
- return TRUE
-
-/obj/effect/cleanable/spellbound/CanUseTopic(var/mob)
- if(isliving(mob))
- return STATUS_CLOSE
- return STATUS_INTERACTIVE
-
-/obj/effect/cleanable/spellbound/OnTopic(var/mob/user, href_list, state)
- if(href_list["master"])
- var/mob/master = locate(href_list["master"])
- stype.spawn_servant(get_turf(src),master,user)
- qdel(src)
- return TOPIC_HANDLED
-
-/obj/effect/cleanable/spellbound/Destroy()
- qdel(stype)
- stype = null
- return ..()
-
-/obj/item/summoning_stone
- name = "summoning stone"
- desc = "a small non-descript stone of dubious origin."
- icon = 'icons/obj/items/summoning_stone.dmi'
- icon_state = "stone"
- throw_speed = 5
- throw_range = 10
- w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/stone/basalt
-
-/obj/item/summoning_stone/attack_self(var/mob/user)
- if(isAdminLevel(user.z))
- to_chat(user, "You cannot use \the [src] here.")
- return
- user.set_machine(src)
- interact(user)
-
-/obj/item/summoning_stone/interact(var/mob/user)
- var/list/types = subtypesof(/datum/spellbound_type) - /datum/spellbound_type/servant
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- if(user.mind && !wizards.is_antagonist(user.mind))
- use_type(pick(types),user)
- return
- var/dat = "Summoning StoneChoose a companion to help you.
"
- for(var/type in types)
- var/datum/spellbound_type/SB = type
- dat += " [initial(SB.name)] - [initial(SB.desc)]"
- show_browser(user,dat,"window=summoning")
- onclose(user,"summoning")
-
-/obj/item/summoning_stone/proc/use_type(var/type, var/mob/user)
- new /obj/effect/cleanable/spellbound(get_turf(src),type)
- if(prob(20))
- var/list/base_areas = maintlocs //Have to do it this way as its a macro
- var/list/pareas = base_areas.Copy()
- while(pareas.len)
- var/a = pick(pareas)
- var/area/picked_area = pareas[a]
- pareas -= a
- var/list/turfs = get_area_turfs(picked_area)
- for(var/t in turfs)
- var/turf/T = t
- if(T.density)
- turfs -= T
- if(turfs.len)
- src.visible_message("\The [src] vanishes!")
- src.forceMove(pick(turfs))
- show_browser(user, null, "window=summoning")
- qdel(src)
-
-/obj/item/summoning_stone/OnTopic(user, href_list, state)
- if(href_list["type"])
- use_type(href_list["type"],user)
- return TOPIC_HANDLED
\ No newline at end of file
diff --git a/code/modules/spells/artifacts/storage.dm b/code/modules/spells/artifacts/storage.dm
deleted file mode 100644
index 4d84cab7d3d..00000000000
--- a/code/modules/spells/artifacts/storage.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/obj/structure/closet/wizard
- name = "artifact closet"
- desc = "a special lead lined closet used to hold artifacts of immense power."
- closet_appearance = /decl/closet_appearance/alien
-
-/obj/structure/closet/wizard/Initialize()
- . = ..()
- new /obj/item/parcel(get_turf(src), null, src, "Imported straight from the Wizard Acadamy. Do not lose the contents or suffer a demerit.")
-
-/obj/structure/closet/wizard/armor
- name = "Mastercrafted Armor Set"
- desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space."
-
-/obj/structure/closet/wizard/armor/WillContain()
- return list(
- /obj/item/clothing/shoes/sandal,
- /obj/item/clothing/gloves/wizard,
- /obj/item/clothing/suit/space/void/wizard,
- /obj/item/clothing/head/helmet/space/void/wizard
- )
-
-/obj/structure/closet/wizard/scrying
- name = "Scrying Orb"
- desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to reconnoiter with ease. In addition, buying it will permanently grant you x-ray vision."
-
-/obj/structure/closet/wizard/scrying/WillContain()
- return list(
- /obj/item/scrying,
- /obj/item/contract/wizard/xray,
- )
\ No newline at end of file
diff --git a/code/modules/spells/construct_spells.dm b/code/modules/spells/construct_spells.dm
deleted file mode 100644
index 0c705aff4fc..00000000000
--- a/code/modules/spells/construct_spells.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-//////////////////////////////Construct Spells/////////////////////////
-
-/proc/findNullRod(var/atom/target)
- if(istype(target,/obj/item/nullrod))
- return 1
- else if(target.contents)
- for(var/atom/A in target.contents)
- if(findNullRod(A))
- return 1
- return 0
diff --git a/code/modules/spells/contracts.dm b/code/modules/spells/contracts.dm
deleted file mode 100644
index 1b6ebf527f7..00000000000
--- a/code/modules/spells/contracts.dm
+++ /dev/null
@@ -1,142 +0,0 @@
-/obj/item/contract
- name = "contract"
- desc = "written in the blood of some unfortunate fellow."
- icon = 'icons/mob/screen/spells.dmi'
- icon_state = "master_open"
- material = /decl/material/solid/organic/paper
- var/contract_master = null
- var/list/contract_spells = list(/spell/contract/reward,/spell/contract/punish,/spell/contract/return_master)
-
-/obj/item/contract/attack_self(mob/user)
- if(contract_master == null)
- to_chat(user, "You bind the contract to your soul, making you the recipient of whatever poor fool's soul that decides to contract with you.")
- contract_master = user
- return
-
- if(contract_master == user)
- to_chat(user, "You can't contract with yourself!")
- return
-
- var/ans = alert(user,"The contract clearly states that signing this contract will bind your soul to \the [contract_master]. Are you sure you want to continue?","[src]","Yes","No")
-
- if(ans == "Yes")
- user.visible_message("\The [user] signs the contract, their body glowing a deep yellow.")
- if(!src.contract_effect(user))
- user.visible_message("\The [src] visibly rejects \the [user], erasing their signature from the line.")
- return
- user.visible_message("\The [src] disappears with a flash of light.")
- if(contract_spells.len && isliving(contract_master)) //if it aint text its probably a mob or another user
- var/mob/living/M = contract_master
- for(var/spell_type in contract_spells)
- M.add_spell(new spell_type(user), "const_spell_ready")
- log_and_message_admins("signed their soul over to \the [contract_master] using \the [src].", user)
- qdel(src)
-
-/obj/item/contract/proc/contract_effect(mob/user)
- to_chat(user, "You've signed your soul over to \the [contract_master] and with that your unbreakable vow of servitude begins.")
- return 1
-
-/obj/item/contract/apprentice
- name = "apprentice wizarding contract"
- desc = "a wizarding school contract for those who want to sign their soul for a piece of the magic pie."
- color = "#993300"
-
-/obj/item/contract/apprentice/contract_effect(mob/user)
- if(user.mind.assigned_special_role == "Wizard's Apprentice")
- to_chat(user, "You are already a wizarding apprentice!")
- return 0
- if(user.mind.assigned_special_role == "Spellbound Servant")
- to_chat(user, "You are a servant. You have no need of apprenticeship.")
- return 0
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- if(wizards.add_antagonist_mind(user.mind, 1, "Wizard's Apprentice", "You are an apprentice! Your job is to learn the wizarding arts!"))
- to_chat(user, "With the signing of this paper you agree to become \the [contract_master]'s apprentice in the art of wizardry.")
- return 1
- return 0
-
-/obj/item/contract/wizard //contracts that involve making a deal with the Wizard Acadamy (or NON PLAYERS)
- contract_master = "\improper Wizard Academy"
-
-/obj/item/contract/wizard/xray
- name = "xray vision contract"
- desc = "This contract is almost see-through..."
- color = "#339900"
-
-/obj/item/contract/wizard/xray/contract_effect(mob/user)
- ..()
- if (user.add_genetic_condition(GENE_COND_XRAY))
- user.set_sight(user.sight|SEE_MOBS|SEE_OBJS|SEE_TURFS)
- user.set_see_in_dark(8)
- user.set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
- to_chat(user, "The walls suddenly disappear.")
- return 1
- return 0
-
-/obj/item/contract/wizard/telepathy
- name = "telepathy contract"
- desc = "The edges of the contract grow blurry when you look away from them. To be fair, actually reading it gives you a headache."
- color = "#fcc605"
-
-/obj/item/contract/wizard/telepathy/contract_effect(mob/user)
- ..()
- return user.add_genetic_condition(GENE_COND_REMOTE_TALK)
-
-/obj/item/contract/boon
- name = "boon contract"
- desc = "this contract grants you a boon for signing it."
- var/path
-
-/obj/item/contract/boon/Initialize(mapload, var/new_path)
- . = ..(mapload)
- if(new_path)
- path = new_path
- var/item_name = ""
- if(ispath(path,/obj))
- var/obj/O = path
- item_name = initial(O.name)
- else if(ispath(path,/spell))
- var/spell/S = path
- item_name = initial(S.name)
- name = "[item_name] contract"
-
-/obj/item/contract/boon/contract_effect(mob/user)
- ..()
- if(user.mind.assigned_special_role == "Spellbound Servant")
- to_chat(user, "As a servant you find yourself unable to use this contract.")
- return 0
- if(ispath(path,/spell))
- user.add_spell(new path)
- return 1
- else if(ispath(path,/obj))
- new path(get_turf(user.loc))
- playsound(get_turf(usr),'sound/magic/charge.ogg',50,1)
- return 1
-
-/obj/item/contract/boon/wizard
- contract_master = "\improper Wizard Academy"
-
-/obj/item/contract/boon/wizard/fireball
- path = /spell/targeted/projectile/dumbfire/fireball
- desc = "This contract feels warm to the touch."
-
-/obj/item/contract/boon/wizard/smoke
- path = /spell/aoe_turf/smoke
- desc = "This contract smells as dank as they come."
-
-/obj/item/contract/boon/wizard/forcewall
- path = /spell/aoe_turf/conjure/forcewall
- contract_master = "\improper Mime Federation"
- desc = "This contract has a dedication to mimes everywhere at the top."
-
-/obj/item/contract/boon/wizard/knock
- path = /spell/aoe_turf/knock
- desc = "This contract is hard to hold still."
-
-/obj/item/contract/boon/wizard/horsemask
- path = /spell/targeted/equip_item/horsemask
- desc = "This contract is more horse than your mind has room for."
-
-/obj/item/contract/boon/wizard/charge
- path = /spell/aoe_turf/charge
- desc = "This contract is made of 100% post-consumer wizard."
-
diff --git a/code/modules/spells/general/acid_spray.dm b/code/modules/spells/general/acid_spray.dm
deleted file mode 100644
index 752a17eecb7..00000000000
--- a/code/modules/spells/general/acid_spray.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/spell/acid_spray
- name = "Acid Spray"
- desc = "A common spell used to destroy basically anything in front of the wizard."
- school = "conjuration"
- feedback = "as"
- spell_flags = 0
- charge_max = 600
-
- invocation = "Tagopar lethodar!"
- invocation_type = SpI_SHOUT
- var/reagent_type = /decl/material/liquid/acid/hydrochloric
- hud_state = "wiz_acid"
- cast_sound = 'sound/magic/disintegrate.ogg'
-
-/spell/acid_spray/choose_targets()
- return list(holder)
-
-/spell/acid_spray/cast(var/list/targets, var/mob/user)
- var/atom/target = targets[1]
- var/angle = dir2angle(target.dir)
- for(var/mod in list(315, 0, 45))
- var/obj/effect/effect/water/chempuff/chem = new(get_turf(target))
- chem.create_reagents(10)
- chem.add_to_reagents(reagent_type,10)
- spawn(0)
- chem.set_up(get_ranged_target_turf(target, angle2dir(angle+mod), 3))
diff --git a/code/modules/spells/general/area_teleport.dm b/code/modules/spells/general/area_teleport.dm
deleted file mode 100644
index 68e20f3d6f9..00000000000
--- a/code/modules/spells/general/area_teleport.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-/spell/area_teleport
- name = "Teleport"
- desc = "This spell teleports you to a type of area of your selection."
- feedback = "TP"
- school = "conjuration"
- charge_max = 60 SECONDS
- spell_flags = NEEDSCLOTHES
- invocation = "Scyar Nila!"
- invocation_type = SpI_SHOUT
- cooldown_min = 200 //100 deciseconds reduction per rank
-
- smoke_spread = 1
- smoke_amt = 5
-
- var/randomise_selection = 0 //if it lets the usr choose the teleport loc or picks it from the list
- var/invocation_area = 1 //if the invocation appends the selected area
-
- cast_sound = 'sound/effects/teleport.ogg'
-
- hud_state = "wiz_tele"
-
-/spell/area_teleport/before_cast()
- return
-
-/spell/area_teleport/choose_targets()
- var/area/thearea
- if(!randomise_selection)
- thearea = input("Area to teleport to", "Teleport") as null|anything in wizteleportlocs
- if(!thearea)
- return
- else
- thearea = pick(wizteleportlocs)
- return list(wizteleportlocs[thearea])
-
-/spell/area_teleport/cast(area/thearea, mob/user)
- playsound(get_turf(user),cast_sound,50,1)
- var/turf/end = user.try_teleport(thearea)
-
- if(!end)
- to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")
- return
- return
-
-/spell/area_teleport/check_valid_targets(list/targets)
- // Teleport should function across z's, so we make sure that happens
- // without this check, it only works for teleporting to areas you can see
- return islist(targets) && length(targets)
-
-/spell/area_teleport/after_cast()
- return
-
-/spell/area_teleport/invocation(mob/user, area/chosenarea)
- if(!istype(chosenarea))
- return //can't have that, can we
- if(!invocation_area || !chosenarea)
- ..()
- else
- invocation += "[uppertext(chosenarea.proper_name)]"
- ..()
- return
diff --git a/code/modules/spells/general/camera_vision.dm b/code/modules/spells/general/camera_vision.dm
deleted file mode 100644
index cfd0cfb030e..00000000000
--- a/code/modules/spells/general/camera_vision.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/spell/camera_connection
- name = "Camera Connection"
- desc = "This spell allows the wizard to connect to the local camera network and see what it sees."
-
- school = "racial"
-
- invocation_type = SpI_EMOTE
- invocation = "emits a beeping sound before standing very, very still."
-
- charge_max = 600 //1 minute
- charge_type = Sp_RECHARGE
-
-
- spell_flags = Z2NOCAST
- hud_state = "wiz_IPC"
-
- var/extension_type = /datum/extension/eye/cameranet
-
-/spell/camera_connection/New()
- ..()
- set_extension(src, extension_type)
-
-/spell/camera_connection/choose_targets()
- var/mob/living/L = holder
- if(!istype(L) || L.eyeobj) //no using if we already have an eye on.
- return null
- return list(holder)
-
-/spell/camera_connection/cast(var/list/targets, mob/user)
- var/mob/living/L = targets[1]
-
- var/datum/extension/eye/cameranet/cn = get_extension(src, /datum/extension/eye/)
- if(!cn)
- to_chat(user, SPAN_WARNING("There's a flash of sparks as the spell fizzles out!"))
- return
- cn.look(L)
\ No newline at end of file
diff --git a/code/modules/spells/general/contract_spells.dm b/code/modules/spells/general/contract_spells.dm
deleted file mode 100644
index fa95cd16e23..00000000000
--- a/code/modules/spells/general/contract_spells.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-//These spells are given to the owner of a contract when a victim signs it.
-//As such they are REALLY REALLY powerful (because the victim is rewarded for signing it, and signing contracts is completely voluntary)
-
-/spell/contract
- name = "Contract Spell"
- desc = "A spell perfecting the techniques of keeping a servant happy and obedient."
-
- school = "transmutation"
- spell_flags = 0
- invocation = "none"
- invocation_type = SpI_NONE
-
-
- var/mob/subject
-
-/spell/contract/New(var/mob/M)
- ..()
- subject = M
- name += " ([M.real_name])"
-
-/spell/contract/choose_targets()
- return list(subject)
-
-/spell/contract/cast(mob/target,mob/user)
- if(!subject)
- to_chat(usr, "This spell was not properly given a target. Contact a coder.")
- return null
-
- if(istype(target,/list))
- var/list/target_list = target
- target = target_list[1]
- return target
-
-
-/spell/contract/reward
- name = "Reward Contractee"
- desc = "A spell that makes your contracted victim feel better."
-
- charge_max = 300
- cooldown_min = 100
-
- hud_state = "wiz_jaunt_old"
-
-/spell/contract/reward/cast(mob/living/target,mob/user)
- target = ..(target,user)
- if(!target)
- return
-
- to_chat(target, SPAN_BLUE("You feel great!"))
- target.ExtinguishMob()
-
-/spell/contract/punish
- name = "Punish Contractee"
- desc = "A spell that sets your contracted victim ablaze."
-
- charge_max = 300
- cooldown_min = 100
-
- hud_state = "gen_immolate"
-
-/spell/contract/punish/cast(mob/living/target,mob/user)
- target = ..(target,user)
- if(!target)
- return
-
- to_chat(target, "You feel punished!")
- target.fire_stacks += 15
- target.IgniteMob()
\ No newline at end of file
diff --git a/code/modules/spells/general/create_air.dm b/code/modules/spells/general/create_air.dm
deleted file mode 100644
index 405e161a54a..00000000000
--- a/code/modules/spells/general/create_air.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/spell/create_air
- name = "Create Air"
- desc = "A much used spell used in the vasteness of space to make it not so killey."
-
- charge_max = 200
- spell_flags = Z2NOCAST
- invocation = "none"
- invocation_type = SpI_NONE
-
- number_of_channels = 0
- time_between_channels = 200
- hud_state = "wiz_air"
- var/list/air_change = list(/decl/material/gas/oxygen = ONE_ATMOSPHERE)
-
-/spell/create_air/choose_targets()
- var/air = holder.return_air()
- if(air)
- return list(air)
- return null
-
-/spell/create_air/cast(var/list/targets, var/mob/holder, var/channel_count)
- var/datum/gas_mixture/environment = targets[1]
- for(var/gas in air_change)
- environment.adjust_gas(gas, air_change[gas])
diff --git a/code/modules/spells/general/invisibility.dm b/code/modules/spells/general/invisibility.dm
deleted file mode 100644
index 3fbab715efd..00000000000
--- a/code/modules/spells/general/invisibility.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/spell/invisibility
- name = "invisibility"
- desc = "A simple spell of invisibility, for when you really just can't afford a paper bag."
- feedback = "IV"
- spell_flags = 0
- charge_max = 100
- invocation = "Ror Rim Or!"
- invocation_type = SpI_SHOUT
- var/on = 0
- hud_state = "invisibility"
-
-/spell/invisibility/choose_targets()
- if(ishuman(holder))
- return holder
-
-/spell/invisibility/cast(var/mob/living/human/H, var/mob/user)
- on = !on
- if(on)
- if(H.add_cloaking_source(src))
- playsound(get_turf(H), 'sound/effects/teleport.ogg', 90, 1)
- H.add_genetic_condition(GENE_COND_CLUMSY)
- else if(H.remove_cloaking_source(src))
- playsound(get_turf(H), 'sound/effects/stealthoff.ogg', 90, 1)
- H.remove_genetic_condition(GENE_COND_CLUMSY)
\ No newline at end of file
diff --git a/code/modules/spells/general/mark_recall.dm b/code/modules/spells/general/mark_recall.dm
deleted file mode 100644
index 11131e72ece..00000000000
--- a/code/modules/spells/general/mark_recall.dm
+++ /dev/null
@@ -1,88 +0,0 @@
-/spell/mark_recall
- name = "Mark and Recall"
- desc = "This spell was created so wizards could get home from the bar without driving. Does not require wizard garb."
- feedback = "MK"
- school = "conjuration"
- charge_max = 600 //1 minutes for how OP this shit is (apparently not as op as I thought)
- spell_flags = Z2NOCAST
- invocation = "Re-Alki R'natha."
- invocation_type = SpI_WHISPER
- cooldown_min = 300
-
- smoke_amt = 1
- smoke_spread = 5
-
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 1)
-
- cast_sound = 'sound/effects/teleport.ogg'
- hud_state = "wiz_mark"
- var/mark = null
-
-/spell/mark_recall/choose_targets()
- if(!mark)
- return list("magical fairy dust") //because why not
- else
- return list(mark)
-
-/spell/mark_recall/cast(var/list/targets,mob/user)
- if(!targets.len)
- return 0
- var/target = targets[1]
- if(istext(target))
- mark = new /obj/effect/cleanable/wizard_mark(get_turf(user),src)
- return 1
- if(!istype(target,/obj)) //something went wrong
- return 0
- var/turf/T = get_turf(target)
- if(!T)
- return 0
- user.forceMove(T)
- ..()
-
-/spell/mark_recall/empower_spell()
- if(!..())
- return 0
-
- spell_flags = NO_SOMATIC
-
- return "You will always be able to cast this spell, even while unconscious or handcuffed."
-
-/obj/effect/cleanable/wizard_mark
- name = "\improper Mark of the Wizard"
- desc = "A strange rune said to be made by wizards. Or its just some shmuck playing with crayons again."
- icon = 'icons/obj/rune.dmi'
- icon_state = "wizard_mark"
- anchored = TRUE
- layer = TURF_LAYER
- is_spawnable_type = FALSE // invalid without spell passed
- var/spell/mark_recall/spell
-
-/obj/effect/cleanable/wizard_mark/Initialize(mapload,var/mrspell)
- . = ..()
- spell = mrspell
-
-/obj/effect/cleanable/wizard_mark/Destroy()
- spell.mark = null //dereference pls.
- spell = null
- return ..()
-
-/obj/effect/cleanable/wizard_mark/attack_hand(var/mob/user)
- if(user != spell.holder)
- return ..()
- user.visible_message("\The [user] mutters an incantation and \the [src] disappears!")
- qdel(src)
- return TRUE
-
-/obj/effect/cleanable/wizard_mark/nullrod_act(mob/user, obj/item/nullrod/rod)
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- visible_message("\The [user] dispels \the [src] and it fades away!")
- qdel(src)
- return TRUE
-
-/obj/effect/cleanable/wizard_mark/attackby(var/obj/item/I, var/mob/user)
- if(istype(I, /obj/item/book/spell))
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- visible_message("\The [src] fades away!")
- qdel(src)
- return TRUE
- return ..()
\ No newline at end of file
diff --git a/code/modules/spells/general/portal_teleport.dm b/code/modules/spells/general/portal_teleport.dm
deleted file mode 100644
index 1f1ed0ad603..00000000000
--- a/code/modules/spells/general/portal_teleport.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/spell/portal_teleport
- name = "Create Portal"
- desc = "This spell creates a long lasting portal to an area of your selection."
- feedback = "TP"
- school = "conjuration"
- spell_flags = NEEDSCLOTHES
- invocation = "Scyar Peranda!"
- invocation_type = SpI_SHOUT
- charge_max = 30 MINUTES
- cooldown_min = 25 MINUTES
-
- smoke_spread = 1
- smoke_amt = 5
-
- var/list/select_areas = list()
-
- cast_sound = 'sound/effects/teleport.ogg'
-
- hud_state = "wiz_tele"
-
-/spell/portal_teleport/before_cast()
- return
-
-/spell/portal_teleport/choose_targets()
- var/area/thearea
- var/message = alert("Would you like to show station areas?\nNote: it can take up to 5 minutes for the away sites to load in and show up.",, "Yes", "No")
- switch(message)
- if("Yes")
- select_areas = stationlocs
- if("No")
- select_areas = (stationlocs) ^ (wizportallocs)
-
- thearea = input("Area to teleport to", "Teleport") as null|anything in select_areas
- if(!thearea) return
-
- return list(select_areas[thearea])
-
-/spell/portal_teleport/cast(area/thearea, mob/user)
- playsound(get_turf(user),cast_sound,50,1)
- var/turf/start = get_turf(user)
- var/turf/end = user.try_teleport(thearea)
-
- if(!end)
- to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")
- return
-
- new /obj/effect/portal/wizard(start, end, 35 MINUTES)
- new /obj/effect/portal/wizard(end, start, 35 MINUTES)
-
- return
-
-/spell/portal_teleport/after_cast()
- return
-
-/spell/portal_teleport/invocation(mob/user, area/chosenarea)
- if(!chosenarea || !istype(chosenarea))
- ..()
- else
- invocation += "[uppertext(chosenarea.proper_name)]"
- ..()
- return
-
-/obj/effect/portal/wizard
- name = "dark anomaly"
- desc = "It pulls on the edges of reality as if trying to draw them in."
- icon = 'icons/obj/objects.dmi'
- icon_state = "bhole3"
diff --git a/code/modules/spells/general/radiant_aura.dm b/code/modules/spells/general/radiant_aura.dm
deleted file mode 100644
index 27e85404027..00000000000
--- a/code/modules/spells/general/radiant_aura.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/spell/radiant_aura
- name = "Radiant aura"
- desc = "Form a protective layer of light around you, making you immune to laser fire."
- feedback = "ra"
- invocation_type = SpI_EMOTE
- invocation = "conjures a sphere of fire around themselves."
- school = "conjuration"
- spell_flags = NEEDSCLOTHES
- charge_max = 300
- cooldown_min = 100
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 0)
- cast_sound = 'sound/effects/snap.ogg'
- duration = 40
- hud_state = "gen_immolate"
-
-/spell/radiant_aura/choose_targets()
- return list(holder)
-
-/spell/radiant_aura/cast(var/list/targets, var/mob/user)
- var/obj/aura/radiant_aura/A = new(user)
- QDEL_IN(A,duration)
diff --git a/code/modules/spells/general/return_master.dm b/code/modules/spells/general/return_master.dm
deleted file mode 100644
index 119cc93804d..00000000000
--- a/code/modules/spells/general/return_master.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/spell/contract/return_master
- name = "Return to Master"
- desc = "Teleport back to your master"
-
- school = "conjuration"
- charge_max = 600
- spell_flags = 0
- invocation = "none"
- invocation_type = SpI_NONE
- cooldown_min = 200
-
- smoke_spread = 1
- smoke_amt = 5
-
- hud_state = "wiz_tele"
-
-
-/spell/contract/return_master/cast(mob/target,mob/user)
- target = ..(target,user)
- if(!target)
- return
-
- user.forceMove(get_turf(target))
\ No newline at end of file
diff --git a/code/modules/spells/general/toggle_armor.dm b/code/modules/spells/general/toggle_armor.dm
deleted file mode 100644
index 5da3bf537f8..00000000000
--- a/code/modules/spells/general/toggle_armor.dm
+++ /dev/null
@@ -1,121 +0,0 @@
-/spell/toggle_armor
- name = "Toggle Armor"
- spell_flags = 0
- charge_max = 10
- school = "Conjuration"
- var/list/armor_pieces
- var/equip = 0
- hud_state = "const_shell"
-
-/spell/toggle_armor/New()
- if(armor_pieces)
- var/list/nlist = list()
- for(var/type in armor_pieces)
- var/obj/item/I = new type(null)
- nlist[I] = armor_pieces[type]
- armor_pieces = nlist
- return ..()
-
-/spell/toggle_armor/proc/drop_piece(var/obj/I)
- if(ismob(I.loc))
- var/mob/M = I.loc
- M.drop_from_inventory(I)
-
-/spell/toggle_armor/choose_targets()
- return list(holder)
-
-/spell/toggle_armor/cast(var/list/targets, var/mob/user)
- equip = !equip
- name = "[initial(name)] ([equip ? "off" : "on"])"
- if(equip)
- for(var/piece in armor_pieces)
- var/slot = armor_pieces[piece]
- drop_piece(piece)
- user.drop_from_inventory(user.get_equipped_item(slot))
- user.equip_to_slot_if_possible(piece,slot,0,1,1,1)
- else
- for(var/piece in armor_pieces)
- var/obj/item/I = piece
- drop_piece(piece)
- I.forceMove(null)
-
-/spell/toggle_armor/greytide_worldwide
- name = "Greytide Worldwide"
- invocation_type = SpI_EMOTE
- invocation = "screams incoherently!"
- armor_pieces = list(/obj/item/clothing/jumpsuit/grey = slot_w_uniform_str,
- /obj/item/clothing/gloves/insulated/cheap = slot_gloves_str,
- /obj/item/clothing/mask/gas = slot_wear_mask_str,
- /obj/item/clothing/shoes/color/black = slot_shoes_str,
- /obj/item/toolbox/mechanical = BP_R_HAND,
- /obj/item/chems/spray/extinguisher = BP_L_HAND)
-
-/spell/toggle_armor/caretaker
- name = "Toggle Armor (Caretaker)"
- invocation_type = SpI_EMOTE
- invocation = "radiates a holy light"
- armor_pieces = list(/obj/item/clothing/head/caretakerhood = slot_head_str,
- /obj/item/clothing/suit/caretakercloak = slot_wear_suit_str
- )
- hud_state = "caretaker"
-
-/spell/toggle_armor/champion
- name = "Toggle Armor (Champion)"
- invocation_type = SpI_EMOTE
- invocation = "is covered in golden embers for a moment, before they fade"
- armor_pieces = list(/obj/item/clothing/head/champhelm = slot_head_str,
- /obj/item/clothing/suit/champarmor = slot_wear_suit_str
- )
- hud_state = "champion"
-
-/spell/toggle_armor/excalibur
- name = "Toggle Sword"
- invocation_type = SpI_EMOTE
- invocation = "thrusts /his hand forward, and it is enveloped in golden embers!"
- armor_pieces = list(/obj/item/sword/excalibur = BP_R_HAND)
- hud_state = "excalibur"
-
-/spell/toggle_armor/fiend
- name = "Toggle Armor (Fiend)"
- invocation_type = SpI_EMOTE
- invocation = "snaps /his fingers, and /his clothes begin to shift and change"
- armor_pieces = list(/obj/item/clothing/head/fiendhood = slot_head_str,
- /obj/item/clothing/suit/fiendcowl = slot_wear_suit_str
- )
- hud_state = "fiend"
-
-/spell/toggle_armor/fiend/fem
- armor_pieces = list(/obj/item/clothing/head/fiendhood/fem = slot_head_str,
- /obj/item/clothing/suit/fiendcowl/fem = slot_wear_suit_str
- )
-
-/spell/toggle_armor/infiltrator
- name = "Toggle Armor (Infiltrator)"
- invocation_type = SpI_EMOTE
- invocation = "winks. In an instant, /his clothes change dramatically"
- armor_pieces = list(/obj/item/clothing/head/infilhat = slot_head_str,
- /obj/item/clothing/suit/infilsuit = slot_wear_suit_str
- )
- hud_state = "infiltrator"
-
-/spell/toggle_armor/infiltrator/fem
- armor_pieces = list(/obj/item/clothing/head/infilhat/fem = slot_head_str,
- /obj/item/clothing/suit/infilsuit/fem = slot_wear_suit_str
- )
-
-/spell/toggle_armor/infil_items
- name = "Toggle Counterfeit Kit"
- invocation_type = SpI_EMOTE
- invocation = "flicks /his wrists, one at a time"
- armor_pieces = list(/obj/item/stamp/chameleon = BP_L_HAND,
- /obj/item/pen/chameleon = BP_R_HAND)
- hud_state = "forgery"
-
-/spell/toggle_armor/overseer
- name = "Toggle Armor (Overseer)"
- invocation_type = SpI_EMOTE
- invocation = " is enveloped in shadows, before /his form begins to shift rapidly"
- armor_pieces = list(/obj/item/clothing/head/overseerhood = slot_head_str,
- /obj/item/clothing/suit/straight_jacket/overseercloak = slot_wear_suit_str
- )
- hud_state = "overseer"
\ No newline at end of file
diff --git a/code/modules/spells/hand/blood_shards.dm b/code/modules/spells/hand/blood_shards.dm
deleted file mode 100644
index 0908ee28520..00000000000
--- a/code/modules/spells/hand/blood_shards.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/spell/hand/charges/blood_shard
- name = "Blood Shards"
- desc = "Invoke a corrupted projectile forward that causes an enemy's blood to fly out in painful shards. Anyone hit by this will have their blood explode out of them in a spray of smaller shards. Stores two charges."
- spell_flags = 0
- charge_max = 600
- invocation = "opens their hand, which bursts into vicious red light."
- invocation_type = SpI_EMOTE
-
- range = 7
- max_casts = 2
- compatible_targets = list(/atom)
- hud_state = "wiz_bshard"
- cast_sound = 'sound/magic/demon_attack1.ogg'
-
-/spell/hand/charges/blood_shard/cast_hand(var/atom/A,var/mob/user)
- var/obj/item/projectile/blood_shard/B = new(get_turf(user))
- B.firer = user
- B.launch(A, BP_CHEST)
- user.visible_message("\The [user] shoots out a deep red shard from their hand!")
- return ..()
-
-/obj/item/projectile/blood_shard
- name = "bloodshard"
- damage = 25
- icon_state = "blood"
- atom_damage_type = BRUTE
- damage_flags = 0
-
-/obj/item/projectile/blood_shard/on_hit(var/atom/movable/target, var/blocked = 0)
- if(..())
- if(ishuman(target))
- var/mob/living/human/H = target
- H.vessel.remove_any(30)
- H.visible_message("Tiny red shards burst from \the [H]'s skin!")
- fragmentate(get_turf(src), 30, 5, list(/obj/item/projectile/bullet/pellet/blood))
-
-/obj/item/projectile/bullet/pellet/blood
- name = "blood fragment"
- damage = 10
\ No newline at end of file
diff --git a/code/modules/spells/hand/burning_grip.dm b/code/modules/spells/hand/burning_grip.dm
deleted file mode 100644
index 772b4e6aa9c..00000000000
--- a/code/modules/spells/hand/burning_grip.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/spell/hand/burning_grip
- name = "Burning Grip"
- desc = "Cause someone to drop a held object by causing it to heat up intensly."
- school = "transmutation"
- feedback = "bg"
- range = 5
- spell_flags = 0
- invocation_type = SpI_NONE
- show_message = " throws sparks from their hands"
- spell_delay = 120
- hud_state = "wiz_burn"
- cast_sound = 'sound/magic/fireball.ogg'
- compatible_targets = list(/mob/living/human)
-
-/spell/hand/burning_grip/valid_target(var/mob/living/L, var/mob/user)
- if(!..())
- return 0
- if(length(L.get_held_items()))
- return 0
- return 1
-
-/spell/hand/burning_grip/cast_hand(var/mob/living/human/H, var/mob/user)
- var/list/targets = list()
- for(var/hand_slot in H.get_held_item_slots())
- targets |= hand_slot
-
- var/obj/O = new /obj/effect/temporary(get_turf(H),3, 'icons/effects/effects.dmi', "fire_goon")
- O.alpha = 150
-
- for(var/organ in targets)
- var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, organ)
- if(!E)
- continue
- E.take_external_damage(burn=10, used_weapon = "hot iron")
- if(E.can_feel_pain())
- E.check_pain_disarm()
- else
- E.take_external_damage(burn=6, used_weapon = "hot iron")
- to_chat(H, SPAN_WARNING("You notice that your [E] is burned."))
diff --git a/code/modules/spells/hand/entangle.dm b/code/modules/spells/hand/entangle.dm
deleted file mode 100644
index 37a4776fe28..00000000000
--- a/code/modules/spells/hand/entangle.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/spell/hand/charges/entangle
- name = "Entangle"
- desc = "This spell creates vines that immediately entangle a nearby victim."
- feedback = "ET"
- school = "transmutation"
- charge_max = 600
- spell_flags = NEEDSCLOTHES | SELECTABLE | IGNOREPREV
- invocation = "Bu-Ekel'Inas!"
- invocation_type = SpI_SHOUT
- range = 3
- max_casts = 1
-
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2)
- cooldown_min = 300
- duration = 30
- compatible_targets = list(/mob)
-
- hud_state = "wiz_entangle"
- cast_sound = 'sound/magic/staff_door.ogg'
- show_message = " points towards the ground, causing plants to erupt"
- var/datum/seed/seed
-
-/spell/hand/charges/entangle/New()
- ..()
- seed = new()
- seed.set_trait(TRAIT_PLANT_ICON,"flower")
- seed.set_trait(TRAIT_PRODUCT_ICON,"flower2")
- seed.set_trait(TRAIT_PRODUCT_COLOUR,"#4d4dff")
- seed.set_trait(TRAIT_SPREAD,2)
- seed.name = "heirlooms"
- seed.product_name = "heirloom"
- seed.display_name = "vines"
- seed.chems = list(/decl/material/liquid/nutriment = list(1,20))
-
-/spell/hand/charges/entangle/cast_hand(var/mob/M,var/mob/user)
- var/turf/T = get_turf(M)
- var/obj/effect/vine/single/P = new(T, seed, null, TRUE)
- P.can_buckle = 1
-
- P.buckle_mob(M)
- M.set_dir(pick(global.cardinal))
- M.visible_message("[P] appear from the floor, spinning around \the [M] tightly!")
- return ..()
-
-/spell/hand/charges/entangle/empower_spell()
- if(!..())
- return 0
-
- max_casts++
-
- return "This spell will now entangle [max_casts] times before running out."
\ No newline at end of file
diff --git a/code/modules/spells/hand/hand.dm b/code/modules/spells/hand/hand.dm
deleted file mode 100644
index 9652cf1cce1..00000000000
--- a/code/modules/spells/hand/hand.dm
+++ /dev/null
@@ -1,83 +0,0 @@
-/spell/hand
- var/min_range = 0
- var/list/compatible_targets = list(/atom)
- var/spell_delay = 5
- var/move_delay
- var/click_delay
- var/hand_state = "spell"
- var/obj/item/magic_hand/current_hand
- var/show_message
-
-/spell/hand/choose_targets(mob/user = usr)
- return list(user)
-
-/spell/hand/cast_check(skipcharge = 0,mob/user = usr, var/list/targets)
- if(!..())
- return FALSE
- if(user.get_active_held_item())
- to_chat(holder, "You need an empty hand to cast this spell.")
- return FALSE
- return TRUE
-
-/spell/hand/cast(list/targets, mob/user)
- if(current_hand)
- cancel_hand()
- if(user.get_active_held_item())
- to_chat(user, "You need an empty hand to cast this spell.")
- return FALSE
- current_hand = new(null, src)
- if(!user.put_in_active_hand(current_hand))
- QDEL_NULL(current_hand)
- return FALSE
- return TRUE
-
-/spell/hand/proc/cancel_hand()
- if(!QDELETED(current_hand))
- QDEL_NULL(current_hand)
-
-/spell/hand/Destroy()
- QDEL_NULL(current_hand)
- . = ..()
-
-/spell/hand/proc/valid_target(var/atom/a,var/mob/user) //we use seperate procs for our target checking for the hand spells.
- var/distance = get_dist(a,user)
- if((min_range && distance < min_range) || (range && distance > range))
- return FALSE
- if(!is_type_in_list(a,compatible_targets))
- return FALSE
- return TRUE
-
-/spell/hand/proc/cast_hand(var/atom/a,var/mob/user) //same for casting.
- return TRUE
-
-/spell/hand/charges
- var/casts = 1
- var/max_casts = 1
-
-/spell/hand/charges/cast(list/targets, mob/user)
- . = ..()
- if(.)
- casts = max_casts
- to_chat(user, "You ready the [name] spell ([casts]/[casts] charges).")
-
-/spell/hand/charges/cast_hand()
- if(..())
- casts--
- to_chat(holder, SPAN_NOTICE("The [name] spell has [casts] out of [max_casts] charges left."))
- cancel_hand()
- return TRUE
- return FALSE
-
-/spell/hand/duration
- var/hand_timer = null
- var/hand_duration = 0
-
-/spell/hand/duration/cast(var/list/targets, var/mob/user)
- . = ..()
- if(.)
- hand_timer = addtimer(CALLBACK(src, PROC_REF(cancel_hand)), hand_duration, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)
-
-/spell/hand/duration/cancel_hand()
- deltimer(hand_timer)
- hand_timer = null
- ..()
\ No newline at end of file
diff --git a/code/modules/spells/hand/hand_item.dm b/code/modules/spells/hand/hand_item.dm
deleted file mode 100644
index 8da6139bfbb..00000000000
--- a/code/modules/spells/hand/hand_item.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-/*much like grab this item is used primarily for the utility it provides.
-Basically: I can use it to target things where I click. I can then pass these targets to a spell and target things not using a list.
-*/
-
-/obj/item/magic_hand
- name = "Magic Hand"
- icon = 'icons/mob/screen/spells.dmi'
- atom_flags = 0
- item_flags = 0
- obj_flags = 0
- simulated = 0
- icon_state = "spell"
- max_health = ITEM_HEALTH_NO_DAMAGE
- is_spawnable_type = FALSE
- obj_flags = OBJ_FLAG_NO_STORAGE
- var/next_spell_time = 0
- var/spell/hand/hand_spell
-
-/obj/item/magic_hand/Initialize(ml, _hand_spell)
- . = ..()
- hand_spell = _hand_spell
- name = "[name] ([hand_spell.name])"
- icon_state = hand_spell.hand_state
-
-// These return values do not look correct...
-/obj/item/magic_hand/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
- if(hand_spell && hand_spell.valid_target(target, user))
- fire_spell(target, user)
- return FALSE
- return TRUE
-
-/obj/item/magic_hand/proc/fire_spell(var/atom/A, mob/living/user)
- if(!hand_spell) //no spell? Die.
- user.drop_from_inventory(src)
-
- if(!hand_spell.valid_target(A,user))
- return
- if(world.time < next_spell_time)
- to_chat(user, "The spell isn't ready yet!")
- return
- if(user.a_intent == I_HELP)
- to_chat(user, "You decide against casting this spell as your intent is set to help.")
- return
-
- if(hand_spell.show_message)
- user.visible_message("\The [user][hand_spell.show_message]")
- if(hand_spell.cast_hand(A,user))
- next_spell_time = world.time + hand_spell.spell_delay
- if(hand_spell.move_delay)
- user.ExtraMoveCooldown(hand_spell.move_delay)
- if(hand_spell.click_delay)
- user.setClickCooldown(hand_spell.move_delay)
-
-/obj/item/magic_hand/afterattack(var/atom/A, var/mob/user, var/proximity)
- if(hand_spell)
- fire_spell(A,user)
-
-/obj/item/magic_hand/throw_at() //no throwing pls
- usr.drop_from_inventory(src)
-
-/obj/item/magic_hand/dropped() //gets deleted on drop
- ..()
- qdel(src)
-
-/obj/item/magic_hand/Destroy() //better save than sorry.
- hand_spell.current_hand = null
- hand_spell = null
- . = ..()
\ No newline at end of file
diff --git a/code/modules/spells/hand/slippery_surface.dm b/code/modules/spells/hand/slippery_surface.dm
deleted file mode 100644
index 3b5fc448d03..00000000000
--- a/code/modules/spells/hand/slippery_surface.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/spell/hand/slippery_surface
- name = "Slippery Surface"
- desc = "More of a practical joke than an actual spell."
- school = "transmutation"
- feedback = "su"
- range = 5
- spell_flags = 0
- invocation_type = SpI_NONE
- show_message = " snaps their fingers."
- spell_delay = 50
- hud_state = "gen_ice"
- cast_sound = 'sound/magic/summonitems_generic.ogg'
-
-/spell/hand/slippery_surface/cast_hand(var/atom/a, var/mob/user)
- for(var/turf/T in view(1,a))
- if(T.simulated)
- T.wet_floor(50)
- new /obj/effect/temporary(T, 3, 'icons/effects/effects.dmi', "sonar_ping")
- return ..()
diff --git a/code/modules/spells/hand/sunwrath.dm b/code/modules/spells/hand/sunwrath.dm
deleted file mode 100644
index 63da9a54c61..00000000000
--- a/code/modules/spells/hand/sunwrath.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/spell/hand/duration/sunwrath
- name = "Sun God's Wrath"
- desc = "Your hands become a gateway of fire, shooting hot plasma from your fingertips."
- spell_flags = 0
- charge_max = 600
- invocation_type = SpI_SHOUT
- invocation = "Herald! Bless me with your anger!"
- show_message = " erupts fire from their hands"
- school = "Divine"
- hand_duration = 100
- spell_delay = 30
- range = 4
- hud_state = "wiz_immolate"
-
-/spell/hand/duration/sunwrath/cast_hand(var/atom/A, var/mob/user)
- var/turf/T = get_turf(user)
- var/list/turfs = getline(T,A) - T
- for(var/t in turfs)
- var/turf/turf = t
- if(turf.density || isspaceturf(turf))
- break
- new /obj/effect/fake_fire/sunwrath(t)
- return 1
-
-/obj/effect/fake_fire/sunwrath
- firelevel = 2
- last_temperature = 0
- pressure = 3000
-
-/obj/effect/fake_fire/sunwrath/Process() //Override, so we burn mobs only
- for(var/mob/living/L in loc)
- L.FireBurn(firelevel,last_temperature,pressure)
\ No newline at end of file
diff --git a/code/modules/spells/no_clothes.dm b/code/modules/spells/no_clothes.dm
deleted file mode 100644
index 3b850292351..00000000000
--- a/code/modules/spells/no_clothes.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/spell/noclothes
- name = "No Clothes"
- desc = "Learn the ancient art of not wearing fancy robes while casting spells."
- feedback = "NC"
- spell_flags = NO_BUTTON
\ No newline at end of file
diff --git a/code/modules/spells/racial_wizard.dm b/code/modules/spells/racial_wizard.dm
deleted file mode 100644
index b8871ebf1f1..00000000000
--- a/code/modules/spells/racial_wizard.dm
+++ /dev/null
@@ -1,81 +0,0 @@
-//this file is full of all the racial spells/artifacts/etc that each species has.
-
-/obj/item/magic_rock
- name = "magical rock"
- desc = "Legends say that this rock will unlock the true potential of anyone who touches it."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "magic rock"
- w_class = ITEM_SIZE_SMALL
- throw_speed = 1
- throw_range = 3
- material = /decl/material/solid/stone/basalt
- var/list/potentials = list(
- SPECIES_HUMAN = /obj/item/bag/cash/infinite
- )
-
-/obj/item/magic_rock/attack_self(mob/user)
- if(!ishuman(user))
- to_chat(user, "\The [src] can do nothing for such a simple being.")
- return
- var/mob/living/human/H = user
- var/reward = potentials[H.species.get_root_species_name(H)] //we get body type because that lets us ignore subspecies.
- if(!reward)
- to_chat(user, "\The [src] does not know what to make of you.")
- return
- for(var/spell/S in user.mind.learned_spells)
- if(istype(S,reward))
- to_chat(user, "\The [src] can do no more for you.")
- return
- var/a = new reward()
- if(ispath(reward,/spell))
- H.add_spell(a)
- else if(ispath(reward,/obj))
- H.put_in_hands(a)
- to_chat(user, "\The [src] crumbles in your hands.")
- qdel(src)
-
-/obj/item/bag/cash/infinite
- storage = /datum/storage/bag/cash/infinite
-
-/obj/item/bag/cash/infinite/WillContain()
- return list(/obj/item/cash/c1000)
-
-/spell/messa_shroud/choose_targets()
- return list(get_turf(holder))
-
-/spell/messa_shroud/cast(var/list/targets, mob/user)
- var/turf/T = targets[1]
-
- if(!istype(T))
- return
-
- var/obj/O = new /obj(T)
- O.set_light(range, -10, "#ffffff")
-
- spawn(duration)
- qdel(O)
-
-/mob/observer/eye/freelook/wizard_eye
- name_sufix = "Wizard Eye"
-
-/mob/observer/eye/freelook/wizard_eye/Initialize()
- . = ..() //we dont use the Ai one because it has AI specific procs imbedded in it.
- visualnet = cameranet
-
-/mob/living/proc/release_eye()
- set name = "Release Vision"
- set desc = "Return your sight to your body."
- set category = "Abilities"
-
- verbs -= /mob/living/proc/release_eye //regardless of if we have an eye or not we want to get rid of this verb.
-
- if(!eyeobj)
- return
- eyeobj.release(src)
-
-/mob/observer/eye/freelook/wizard_eye/Destroy()
- if(isliving(eyeobj.owner))
- var/mob/living/L = eyeobj.owner
- L.release_eye()
- qdel(eyeobj)
- return ..()
diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm
deleted file mode 100644
index 653d2b8cae2..00000000000
--- a/code/modules/spells/spell_code.dm
+++ /dev/null
@@ -1,395 +0,0 @@
-var/global/list/spells = typesof(/spell) //needed for the badmin verb for now
-
-/spell
- var/name
- var/desc
- var/feedback = "" //what gets sent if this spell gets chosen by the spellbook.
- parent_type = /datum
- var/panel = "Spells"//What panel the proc holder needs to go on.
-
- var/school = "evocation" //not relevant at now, but may be important later if there are changes to how spells work. the ones I used for now will probably be changed... maybe spell presets? lacking flexibility but with some other benefit?
- /*Spell schools as follows:
- Racial - Only tagged to spells gained for being a certain race
- Conjuration - Creating an object or transporting it.
- Transmutation - Modifying an object or transforming it.
- Illusion - Altering perception or thought.
- */
- var/charge_type = Sp_RECHARGE //can be recharge or charges, see charge_max and charge_counter descriptions; can also be based on the holder's vars now, use "holder_var" for that
-
- var/charge_max = 100 //recharge time in deciseconds if charge_type = Sp_RECHARGE or starting charges if charge_type = Sp_CHARGES
- var/charge_counter = 0 //can only cast spells if it equals recharge, ++ each decisecond if charge_type = Sp_RECHARGE or -- each cast if charge_type = Sp_CHARGES
- var/still_recharging_msg = "The spell is still recharging."
-
- var/silenced = 0 //not a binary - the length of time we can't cast this for
- var/processing = 0 //are we processing already? Mainly used so that silencing a spell doesn't call process() again. (and inadvertedly making it run twice as fast)
-
- var/holder_var_type = "bruteloss" //only used if charge_type equals to "holder_var"
- var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used
-
- var/spell_flags = NEEDSCLOTHES
- var/invocation = "HURP DURP" //what is uttered when the wizard casts the spell
- var/invocation_type = SpI_NONE //can be none, whisper, shout, and emote
- var/range = 7 //the range of the spell; outer radius for aoe spells
- var/message = "" //whatever it says to the guy affected by it
- var/selection_type = "view" //can be "range" or "view"
- var/atom/movable/holder //where the spell is. Normally the user, can be an item
- var/duration = 0 //how long the spell lasts
-
- var/list/spell_levels = list(Sp_SPEED = 0, Sp_POWER = 0) //the current spell levels - total spell levels can be obtained by just adding the two values
- var/list/level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 0) //maximum possible levels in each category. Total does cover both.
- var/cooldown_reduc = 0 //If set, defines how much charge_max drops by every speed upgrade
- var/delay_reduc = 0
- var/cooldown_min = 0 //minimum possible cooldown for a charging spell
-
- var/overlay = 0
- var/overlay_icon = 'icons/obj/wizard.dmi'
- var/overlay_icon_state = "spell"
- var/overlay_lifespan = 0
-
- var/sparks_spread = 0
- var/sparks_amt = 0 //cropped at 10
- var/smoke_spread = 0 //1 - harmless, 2 - harmful
- var/smoke_amt = 0 //cropped at 10
-
- var/critfailchance = 0
- var/time_between_channels = 0 //Delay between casts
- var/number_of_channels = 1 //How many times can we channel?
-
- var/cast_delay = 1
- var/cast_sound = ""
-
- var/hud_state = "" //name of the icon used in generating the spell hud object
- var/override_base = ""
-
-
- var/obj/screen/connected_button
-
- var/hidden_from_codex = FALSE
-
-///////////////////////
-///SETUP AND PROCESS///
-///////////////////////
-
-/spell/New()
- ..()
-
- //still_recharging_msg = "[name] is still recharging."
- charge_counter = charge_max
-
-/spell/proc/process()
- if(processing)
- return
- processing = 1
- spawn(0)
- while(charge_counter < charge_max || silenced > 0)
- charge_counter = min(charge_max,charge_counter+1)
- silenced = max(0,silenced-1)
- sleep(1)
- if(connected_button)
- var/obj/screen/ability/spell/S = connected_button
- if(!istype(S))
- return
- S.update_charge(1)
- processing = 0
- return
-
-/////////////////
-/////CASTING/////
-/////////////////
-
-/spell/proc/choose_targets(mob/user = usr) //depends on subtype - see targeted.dm, aoe_turf.dm, dumbfire.dm, or code in general folder
- return
-
-/spell/proc/perform(mob/user = usr, skipcharge = 0) //if recharge is started is important for the trigger spells
- if(!holder)
- holder = user //just in case
- if(!cast_check(skipcharge, user))
- return
- to_chat(user, SPAN_NOTICE("You start casting \the [name]..."))
- if(cast_delay && !spell_do_after(user, cast_delay))
- return
- var/list/targets = choose_targets(user)
- if(!check_valid_targets(targets))
- to_chat(user, SPAN_WARNING("\The [name] fizzles. There are no valid targets nearby."))
- return
- var/time = 0
- admin_attacker_log(user, "attempted to cast the spell [name]")
- do
- time++
- if(!check_valid_targets(targets)) //make sure we HAVE something
- break
- if(cast_check(1,user, targets)) //we check again, otherwise you can choose a target and then wait for when you are no longer able to cast (I.E. Incapacitated) to use it.
- invocation(user, targets)
- take_charge(user, skipcharge)
- before_cast(targets) //applies any overlays and effects
- if(prob(critfailchance))
- critfail(targets, user)
- else
- cast(targets, user, time)
- after_cast(targets) //generates the sparks, smoke, target messages etc.
- else
- break
- while(time != number_of_channels && do_after(user, time_between_channels, incapacitation_flags = INCAPACITATION_KNOCKOUT|INCAPACITATION_FORCELYING|INCAPACITATION_STUNNED, same_direction=1))
- after_spell(targets, user, time) //When we are done with the spell completely.
-
-
-
-/spell/proc/cast(list/targets, mob/user, var/channel_duration) //the actual meat of the spell
- return
-
-/spell/proc/critfail(list/targets, mob/user) //the wizman has fucked up somehow
- return
-
-/spell/proc/after_spell(var/list/targets, var/mob/user, var/channel_duration) //After everything else is done.
- return
-
-/spell/proc/adjust_var(mob/living/target = usr, type, amount) //handles the adjustment of the var when the spell is used. has some hardcoded types
- switch(type)
- if("bruteloss")
- target.take_damage(amount)
- if("fireloss")
- target.take_damage(amount, BURN)
- if("toxloss")
- target.take_damage(amount, TOX)
- if("oxyloss")
- target.take_damage(amount, OXY)
- if("brainloss")
- target.take_damage(amount, BRAIN)
- if("stunned")
- ADJ_STATUS(target, STAT_STUN, amount)
- if("weakened")
- ADJ_STATUS(target, STAT_WEAK, amount)
- if("paralysis")
- ADJ_STATUS(target, STAT_PARA, amount)
- else
- target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existant vars
- return
-
-///////////////////////////
-/////CASTING WRAPPERS//////
-///////////////////////////
-
-/spell/proc/before_cast(list/targets)
- for(var/atom/target in targets)
- if(overlay)
- var/location
- if(isliving(target))
- location = target.loc
- else if(isturf(target))
- location = target
- var/obj/effect/overlay/spell = new /obj/effect/overlay(location)
- spell.icon = overlay_icon
- spell.icon_state = overlay_icon_state
- spell.anchored = TRUE
- spell.set_density(0)
- spawn(overlay_lifespan)
- qdel(spell)
-
-/spell/proc/after_cast(list/targets)
- if(cast_sound)
- playsound(get_turf(holder),cast_sound,50,1)
- for(var/atom/target in targets)
- var/location = get_turf(target)
- if(isliving(target) && message)
- to_chat(target, text("[message]"))
- if(sparks_spread)
- spark_at(location, amount = sparks_amt)
- if(smoke_spread)
- if(smoke_spread == 1)
- var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
- smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is
- smoke.start()
- else if(smoke_spread == 2)
- var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad()
- smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is
- smoke.start()
-
-/////////////////////
-////CASTING TOOLS////
-/////////////////////
-/*Checkers, cost takers, message makers, etc*/
-
-/spell/proc/cast_check(skipcharge = 0,mob/user = usr, var/list/targets) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
-
- if(silenced > 0)
- return 0
-
- if(!(src in user.mind.learned_spells) && holder == user && !(isanimal(user)))
- error("[user] utilized the spell '[src]' without having it.")
- to_chat(user, "You shouldn't have this spell! Something's wrong.")
- return 0
-
- var/turf/user_turf = get_turf(user)
- if(!user_turf)
- to_chat(user, "You cannot cast spells in null space!")
-
- if((spell_flags & Z2NOCAST) && isAdminLevel(user_turf.z)) //Certain spells are not allowed on the centcomm zlevel
- return 0
-
- if(spell_flags & CONSTRUCT_CHECK)
- for(var/turf/T in range(holder, 1))
- if(findNullRod(T))
- return 0
-
- if(!src.check_charge(skipcharge, user)) //sees if we can cast based on charges alone
- return 0
-
- if(holder == user)
- if(isanimal(user))
- var/mob/living/simple_animal/SA = user
- if(SA.purge)
- to_chat(SA, "The null sceptre's power interferes with your own!")
- return 0
-
- if(!(spell_flags & GHOSTCAST))
- if(!(spell_flags & NO_SOMATIC))
- var/mob/living/L = user
- if(L.incapacitated(INCAPACITATION_STUNNED|INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY|INCAPACITATION_FORCELYING|INCAPACITATION_KNOCKOUT))
- to_chat(user, "You can't cast spells while incapacitated!")
- return 0
-
- if(ishuman(user) && !(invocation_type in list(SpI_EMOTE, SpI_NONE)) && user.get_item_blocking_speech())
- to_chat(user, "Mmmf mrrfff!")
- return 0
-
- var/spell/noclothes/spell = locate() in user.mind.learned_spells
- if((spell_flags & NEEDSCLOTHES) && !(spell && istype(spell)))//clothes check
- if(!user.wearing_wiz_garb())
- return 0
-
- return 1
-
-/spell/proc/check_charge(var/skipcharge, mob/user)
- if(!skipcharge)
- switch(charge_type)
- if(Sp_RECHARGE)
- if(charge_counter < charge_max)
- to_chat(user, still_recharging_msg)
- return 0
- if(Sp_CHARGES)
- if(!charge_counter)
- to_chat(user, "[name] has no charges left.")
- return 0
- return 1
-
-/spell/proc/take_charge(mob/user = user, var/skipcharge)
- if(!skipcharge)
- switch(charge_type)
- if(Sp_RECHARGE)
- charge_counter = 0 //doesn't start recharging until the targets selecting ends
- src.process()
- return 1
- if(Sp_CHARGES)
- charge_counter-- //returns the charge if the targets selecting fails
- return 1
- if(Sp_HOLDVAR)
- adjust_var(user, holder_var_type, holder_var_amount)
- return 1
- return 0
- return 1
-
-/spell/proc/check_valid_targets(var/list/targets)
- if(!targets)
- return 0
- if(!islist(targets))
- targets = list(targets)
- else if(!targets.len)
- return 0
-
- var/list/valid_targets = view_or_range(range, holder, selection_type)
- for(var/target in targets)
- if(!(target in valid_targets))
- return 0
- return 1
-
-/spell/proc/invocation(mob/user = usr, var/list/targets) //spelling the spell out and setting it on recharge/reducing charges amount
-
- switch(invocation_type)
- if(SpI_SHOUT)
- if(prob(50))//Auto-mute? Fuck that noise
- user.say(invocation)
- else
- user.say(replacetext(invocation," ","`"))
- if(SpI_WHISPER)
- if(prob(50))
- user.whisper(invocation)
- else
- user.whisper(replacetext(invocation," ","`"))
- if(SpI_EMOTE)
- user.custom_emote(VISIBLE_MESSAGE, invocation)
-
-/////////////////////
-///UPGRADING PROCS///
-/////////////////////
-
-/spell/proc/can_improve(var/upgrade_type)
- if(level_max[Sp_TOTAL] <= ( spell_levels[Sp_SPEED] + spell_levels[Sp_POWER] )) //too many levels, can't do it
- return 0
-
- //if(upgrade_type && spell_levels[upgrade_type] && level_max[upgrade_type])
- if(upgrade_type && spell_levels[upgrade_type] >= level_max[upgrade_type])
- return 0
-
- return 1
-
-/spell/proc/empower_spell()
- if(!can_improve(Sp_POWER))
- return 0
-
- spell_levels[Sp_POWER]++
-
- return 1
-
-/spell/proc/quicken_spell()
- if(!can_improve(Sp_SPEED))
- return 0
-
- spell_levels[Sp_SPEED]++
-
- if(delay_reduc && cast_delay)
- cast_delay = max(0, cast_delay - delay_reduc)
- else if(cast_delay)
- cast_delay = round( max(0, initial(cast_delay) * ((level_max[Sp_SPEED] - spell_levels[Sp_SPEED]) / level_max[Sp_SPEED] ) ) )
-
- if(charge_type == Sp_RECHARGE)
- if(cooldown_reduc)
- charge_max = max(cooldown_min, charge_max - cooldown_reduc)
- else
- charge_max = round( max(cooldown_min, initial(charge_max) * ((level_max[Sp_SPEED] - spell_levels[Sp_SPEED]) / level_max[Sp_SPEED] ) ) ) //the fraction of the way you are to max speed levels is the fraction you lose
- if(charge_max < charge_counter)
- charge_counter = charge_max
-
- var/temp = ""
- name = initial(name)
- switch(level_max[Sp_SPEED] - spell_levels[Sp_SPEED])
- if(3)
- temp = "You have improved [name] into Efficient [name]."
- name = "Efficient [name]"
- if(2)
- temp = "You have improved [name] into Quickened [name]."
- name = "Quickened [name]"
- if(1)
- temp = "You have improved [name] into Free [name]."
- name = "Free [name]"
- if(0)
- temp = "You have improved [name] into Instant [name]."
- name = "Instant [name]"
-
- return temp
-
-/spell/proc/spell_do_after(var/mob/user, delay, var/numticks = 5)
- if(!user || isnull(user))
- return 0
-
- var/incap_flags = INCAPACITATION_STUNNED|INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY|INCAPACITATION_FORCELYING
- if(!(spell_flags & (GHOSTCAST)))
- incap_flags |= INCAPACITATION_KNOCKOUT
-
- return do_after(user,delay, incapacitation_flags = incap_flags)
-
-/proc/view_or_range(distance = world.view , center = usr , type)
- switch(type)
- if("view")
- . = view(distance,center)
- if("range")
- . = range(distance,center)
\ No newline at end of file
diff --git a/code/modules/spells/spell_projectile.dm b/code/modules/spells/spell_projectile.dm
deleted file mode 100644
index 1599a59d3a7..00000000000
--- a/code/modules/spells/spell_projectile.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/obj/item/projectile/spell_projectile
- name = "spell"
- icon = 'icons/obj/projectiles.dmi'
-
- nodamage = 1 //Most of the time, anyways
-
- var/spell/targeted/projectile/carried
-
- penetrating = 0
- life_span = 10 //set by the duration of the spell
-
- var/proj_trail = 0 //if it leaves a trail
- var/proj_trail_lifespan = 0 //deciseconds
- var/proj_trail_icon = 'icons/obj/wizard.dmi'
- var/proj_trail_icon_state = "trail"
- var/list/trails = new()
-
-/obj/item/projectile/spell_projectile/Destroy()
- for(var/trail in trails)
- qdel(trail)
- carried = null
- return ..()
-
-/obj/item/projectile/spell_projectile/explosion_act()
- SHOULD_CALL_PARENT(FALSE)
- return
-
-/obj/item/projectile/spell_projectile/before_move()
- if(proj_trail && src && src.loc) //pretty trails
- var/obj/effect/overlay/trail = new /obj/effect/overlay(loc)
- trails += trail
- trail.icon = proj_trail_icon
- trail.icon_state = proj_trail_icon_state
- trail.set_density(0)
- spawn(proj_trail_lifespan)
- trails -= trail
- qdel(trail)
-
-/obj/item/projectile/spell_projectile/proc/prox_cast(var/list/targets)
- if(loc)
- carried.prox_cast(targets, src)
- qdel(src)
- return
-
-/obj/item/projectile/spell_projectile/Bump(var/atom/A, forced=0)
- if(loc && carried)
- prox_cast(carried.choose_prox_targets(user = carried.holder, spell_holder = src))
- return 1
-
-/obj/item/projectile/spell_projectile/on_impact()
- if(loc && carried)
- prox_cast(carried.choose_prox_targets(user = carried.holder, spell_holder = src))
- return 1
-
-/obj/item/projectile/spell_projectile/seeking
- name = "seeking spell"
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
deleted file mode 100644
index fa43c3e8d63..00000000000
--- a/code/modules/spells/spellbook.dm
+++ /dev/null
@@ -1,322 +0,0 @@
-#define NOREVERT 1
-#define LOCKED 2
-#define CAN_MAKE_CONTRACTS 4
-#define INVESTABLE 8
-#define NO_LOCKING 16
-
-//spells/spellbooks have a variable for this but as artefacts are literal items they do not.
-//so we do this instead.
-var/global/list/artefact_feedback = list(
- /obj/structure/closet/wizard/armor = "HS",
- /obj/item/gun/energy/staff/focus = "MF",
- /obj/item/gun/energy/staff/fire = "FS",
- /obj/item/summoning_stone = "ST",
- /obj/item/magic_rock = "RA",
- /obj/item/contract/apprentice = "CP",
- /obj/structure/closet/wizard/scrying = "SO",
- /obj/item/paper/scroll/teleportation = "TS",
- /obj/item/gun/energy/staff = "ST",
- /obj/item/gun/energy/staff/animate = "SA",
- /obj/item/dice/d20/cursed = "DW"
-)
-
-/obj/item/book/spell
- name = "master spell book"
- desc = "The legendary book of spells of the wizard."
- throw_speed = 1
- throw_range = 5
- w_class = ITEM_SIZE_NORMAL
- material = /decl/material/solid/organic/paper
- matter = list(/decl/material/solid/organic/leather = MATTER_AMOUNT_REINFORCEMENT)
- unique = TRUE
- var/uses = 1
- var/temp = null
- var/datum/spellbook/spellbook
- var/spellbook_type = /datum/spellbook/ //for spawning specific spellbooks.
- var/investing_time = 0 //what time we target forr a return on our spell investment.
- var/has_sacrificed = 0 //whether we have already got our sacrifice bonus for the current investment.
-
-/obj/item/book/spell/Initialize()
- . = ..()
- set_spellbook(spellbook_type)
-
-/obj/item/book/spell/try_carve()
- return FALSE
-
-/obj/item/book/spell/proc/set_spellbook(var/type)
- if(spellbook)
- qdel(spellbook)
- spellbook = new type()
- uses = spellbook.max_uses
- name = spellbook.name
- desc = spellbook.desc
-
-/obj/item/book/spell/attack_self(mob/user)
- if(!user.mind)
- return
- if (user.mind.assigned_special_role != /decl/special_role/wizard)
- if (user.mind.assigned_special_role != "Wizard's Apprentice")
- to_chat(user, "You can't make heads or tails of this book.")
- return
- if (spellbook.book_flags & LOCKED)
- to_chat(user, "Drat! This spellbook's apprentice-proof lock is on!")
- return
- else if (spellbook.book_flags & LOCKED)
- to_chat(user, "You notice the apprentice-proof lock is on. Luckily you are beyond such things.")
- interact(user)
-
-/obj/item/book/spell/proc/make_sacrifice(obj/item/I, mob/user, var/reagent)
- if(has_sacrificed)
- to_chat(user, SPAN_WARNING("\The [src] is already sated! Wait for a return on your investment before you sacrifice more to it."))
- return
- if(reagent)
- if(I.reagents?.has_reagent(reagent, 5))
- I.remove_from_reagents(reagent, 5)
- else if(LAZYACCESS(I.matter, reagent) >= (SHEET_MATERIAL_AMOUNT * 5))
- qdel(I)
- else
- if(istype(I,/obj/item/stack))
- var/obj/item/stack/S = I
- if(S.amount < S.max_amount)
- to_chat(usr, "You must sacrifice [S.max_amount] stacks of [S]!")
- return
- qdel(I)
- to_chat(user, "Your sacrifice was accepted!")
- has_sacrificed = 1
- investing_time = max(investing_time - 6000,1) //subtract 10 minutes. Make sure it doesn't act funky at the beginning of the game.
-
-
-/obj/item/book/spell/attackby(obj/item/I, mob/user)
- if(investing_time)
- for(var/type in spellbook.sacrifice_objects)
- if(istype(I,type))
- make_sacrifice(I, user)
- return TRUE
-
- for(var/mat in spellbook.sacrifice_materials)
- if(LAZYACCESS(I.matter, mat) > (SHEET_MATERIAL_AMOUNT * 10))
- make_sacrifice(I, user, mat)
- return TRUE
-
- if(I.reagents)
- for(var/id in spellbook.sacrifice_reagents)
- if(I.reagents.has_reagent(id, 5))
- make_sacrifice(I, user, id)
- return TRUE
- return ..()
-
-/obj/item/book/spell/interact(mob/user)
- var/dat = null
- if(temp)
- dat = "[temp] Return"
- else
- dat = "[spellbook.title][spellbook.title_desc] You have [uses] spell slot\s left. "
- dat += "Requires Wizard Garb Selectable Target Spell Charge Type: Recharge, Sacrifice, Charges "
- dat += "To use a contract, first bind it to your soul, then give it to someone to sign. This will bind their soul to you. "
- for(var/i in 1 to spellbook.spells.len)
- var/name = "" //name of target
- var/desc = "" //description of target
- var/info = "" //additional information
- if(ispath(spellbook.spells[i],/datum/spellbook))
- var/datum/spellbook/S = spellbook.spells[i]
- name = initial(S.name)
- desc = initial(S.book_desc)
- info = "[initial(S.max_uses)] Spell Slots"
- else if(ispath(spellbook.spells[i],/obj))
- var/obj/O = spellbook.spells[i]
- name = "Artefact: [capitalize(initial(O.name))]" //because 99.99% of objects dont have capitals in them and it makes it look weird.
- desc = initial(O.desc)
- else if(ispath(spellbook.spells[i],/spell))
- var/spell/S = spellbook.spells[i]
- name = initial(S.name)
- desc = initial(S.desc)
- var/testing = initial(S.spell_flags)
- if(testing & NEEDSCLOTHES)
- info = "W"
- var/type = ""
- switch(initial(S.charge_type))
- if(Sp_RECHARGE)
- type = "R"
- if(Sp_HOLDVAR)
- type = "S"
- if(Sp_CHARGES)
- type = "C"
- info += "[type]"
- dat += "[name]"
- if(length(info))
- dat += " ([info])"
- dat += " ([spellbook.spells[spellbook.spells[i]]] spell slot[spellbook.spells[spellbook.spells[i]] > 1 ? "s" : "" ])"
- if(spellbook.book_flags & CAN_MAKE_CONTRACTS)
- dat += " Make Contract"
- dat += " [desc]
"
- dat += " "
- dat += "Re-memorise your spellbook."
- if(spellbook.book_flags & INVESTABLE)
- if(investing_time)
- dat += "Currently investing in a slot..."
- else
- dat += "Invest a Spell Slot Investing a spellpoint will return two spellpoints back in 15 minutes. Some say a sacrifice could even shorten the time..."
- if(!(spellbook.book_flags & NOREVERT))
- dat += "Choose different spellbook."
- if(!(spellbook.book_flags & NO_LOCKING))
- dat += "[spellbook.book_flags & LOCKED ? "Unlock" : "Lock"] the spellbook."
- show_browser(user, dat, "window=spellbook")
-
-/obj/item/book/spell/CanUseTopic(var/mob/living/human/H)
- if(!istype(H))
- return STATUS_CLOSE
-
- if(H.mind && (spellbook.book_flags & LOCKED) && H.mind.assigned_special_role == "Wizard's Apprentice") //make sure no scrubs get behind the lock
- return STATUS_CLOSE
-
- return ..()
-
-/obj/item/book/spell/OnTopic(var/mob/living/human/user, href_list)
- if(href_list["lock"] && !(spellbook.book_flags & NO_LOCKING))
- if(spellbook.book_flags & LOCKED)
- spellbook.book_flags &= ~LOCKED
- else
- spellbook.book_flags |= LOCKED
- . = TOPIC_REFRESH
-
- else if(href_list["temp"])
- temp = null
- . = TOPIC_REFRESH
-
- else if(href_list["book"])
- if(initial(spellbook.max_uses) != spellbook.max_uses || uses != spellbook.max_uses)
- temp = "You've already purchased things using this spellbook!"
- else
- src.set_spellbook(/datum/spellbook)
- temp = "You have reverted back to the Book of Tomes."
- . = TOPIC_REFRESH
-
- else if(href_list["invest"])
- temp = invest()
- . = TOPIC_REFRESH
-
- else if(href_list["path"])
- var/path = locate(href_list["path"]) in spellbook.spells
- if(!path)
- return TOPIC_HANDLED
- if(uses < spellbook.spells[path])
- to_chat(user, "You do not have enough spell slots to purchase this.")
- return TOPIC_HANDLED
- send_feedback(path) //feedback stuff
- if(ispath(path,/datum/spellbook))
- src.set_spellbook(path)
- temp = "You have chosen a new spellbook."
- else
- if(href_list["contract"])
- if(!(spellbook.book_flags & CAN_MAKE_CONTRACTS))
- return //no
- uses -= spellbook.spells[path]
- spellbook.max_uses -= spellbook.spells[path] //no basksies
- var/obj/O = new /obj/item/contract/boon(get_turf(user),path)
- temp = "You have purchased \the [O]."
- else
- if(ispath(path,/spell))
- temp = src.add_spell(user,path)
- if(temp)
- uses -= spellbook.spells[path]
- else
- var/obj/O = new path(get_turf(user))
- temp = "You have purchased \a [O]."
- uses -= spellbook.spells[path]
- spellbook.max_uses -= spellbook.spells[path]
- //finally give it a bit of an oomf
- playsound(get_turf(user),'sound/effects/phasein.ogg',50,1)
- . = TOPIC_REFRESH
-
- else if(href_list["reset"] && !(spellbook.book_flags & NOREVERT))
- var/area/map_template/wizard_station/A = get_area(user)
- if(istype(A))
- uses = spellbook.max_uses
- investing_time = 0
- has_sacrificed = 0
- user.spellremove()
- temp = "All spells and investments have been removed. You may now memorise a new set of spells."
- SSstatistics.add_field_details("wizard_spell_learned","UM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
- else
- to_chat(user, "You must be in the wizard academy to re-memorise your spells.")
- . = TOPIC_REFRESH
-
- src.interact(user)
-
-/obj/item/book/spell/proc/invest()
- if(uses < 1)
- return "You don't have enough slots to invest!"
- if(investing_time)
- return "You can only invest one spell slot at a time."
- uses--
- START_PROCESSING(SSobj, src)
- investing_time = world.time + (15 MINUTES)
- return "You invest a spellslot and will recieve two in return in 15 minutes."
-
-/obj/item/book/spell/Process()
- if(investing_time && investing_time <= world.time)
- src.visible_message("\The [src] emits a soft chime.")
- uses += 2
- if(uses > spellbook.max_uses)
- spellbook.max_uses = uses
- investing_time = 0
- has_sacrificed = 0
- STOP_PROCESSING(SSobj, src)
- return 1
-
-/obj/item/book/spell/Destroy()
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/item/book/spell/proc/send_feedback(var/path)
- if(ispath(path,/datum/spellbook))
- var/datum/spellbook/S = path
- SSstatistics.add_field_details("wizard_spell_learned","[initial(S.feedback)]")
- else if(ispath(path,/spell))
- var/spell/S = path
- SSstatistics.add_field_details("wizard_spell_learned","[initial(S.feedback)]")
- else if(ispath(path,/obj))
- SSstatistics.add_field_details("wizard_spell_learned","[artefact_feedback[path]]")
-
-
-/obj/item/book/spell/proc/add_spell(var/mob/user, var/spell_path)
- for(var/spell/S in user.mind.learned_spells)
- if(istype(S,spell_path))
- if(!S.can_improve())
- return
- if(S.can_improve(Sp_SPEED) && S.can_improve(Sp_POWER))
- switch(alert(user, "Do you want to upgrade this spell's speed or power?", "Spell upgrade", "Speed", "Power", "Cancel"))
- if("Speed")
- return S.quicken_spell()
- if("Power")
- return S.empower_spell()
- else
- return
- else if(S.can_improve(Sp_POWER))
- return S.empower_spell()
- else if(S.can_improve(Sp_SPEED))
- return S.quicken_spell()
-
- var/spell/S = new spell_path()
- user.add_spell(S)
- return "You learn the spell [S]"
-
-/datum/spellbook
- var/name = "\improper Book of Tomes"
- var/desc = "The legendary book of spells of the wizard."
- var/book_desc = "Holds information on the various tomes available to a wizard"
- var/feedback = "" //doesn't need one.
- var/book_flags = NOREVERT
- var/max_uses = 1
- var/title = "Book of Tomes"
- var/title_desc = "This tome marks down all the available tomes for use. Choose wisely, there are no refunds."
- var/list/spells = list(/datum/spellbook/standard = 1,
- /datum/spellbook/cleric = 1,
- /datum/spellbook/battlemage = 1,
- /datum/spellbook/spatial = 1,
- /datum/spellbook/druid = 1
- ) //spell's path = cost of spell
-
- var/list/sacrifice_reagents
- var/list/sacrifice_objects
- var/list/sacrifice_materials
diff --git a/code/modules/spells/spellbook/battlemage.dm b/code/modules/spells/spellbook/battlemage.dm
deleted file mode 100644
index 07cebf63d82..00000000000
--- a/code/modules/spells/spellbook/battlemage.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-//Battlemage is all about mixing physical with the mystical in head to head combat.
-//Things like utility and mobility come second.
-/datum/spellbook/battlemage
- name = "\improper Battlemage's Bible"
- feedback = "BM"
- desc = "Smells like blood."
- book_desc = "Mix physical with the mystical in head to head combat."
- title = "The Art of Magical Combat"
- title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent."
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE
- max_uses = 6
-
- spells = list(
- /spell/targeted/projectile/dumbfire/passage = 1,
- /spell/targeted/equip_item/dyrnwyn = 1,
- /spell/targeted/equip_item/shield = 1,
- /spell/targeted/projectile/dumbfire/fireball = 1,
- /spell/targeted/torment = 1,
- /spell/targeted/heal_target = 2,
- /spell/aoe_turf/conjure/mirage = 1,
- /spell/targeted/shapeshift/corrupt_form = 1,
- /spell/radiant_aura = 1,
- /spell/noclothes = 1,
- /obj/structure/closet/wizard/armor = 1,
- /obj/item/gun/energy/staff/focus = 1,
- /obj/item/gun/energy/staff/fire = 1,
- /obj/item/dice/d20/cursed = 1,
- /obj/item/summoning_stone = 2,
- /obj/item/magic_rock = 1,
- /obj/item/contract/wizard/xray = 1,
- /obj/item/contract/wizard/telepathy = 1,
- /obj/item/contract/apprentice = 1
- )
-
- sacrifice_objects = list(
- /obj/item/sword,
- /obj/item/bladed/axe/fire,
- /obj/item/baton,
- /obj/item/knife/ritual,
- /obj/item/knife/kitchen/cleaver,
- /obj/item/knife/folding/combat/balisong,
- /obj/item/knife/folding/tacticool,
- /obj/item/star
- )
diff --git a/code/modules/spells/spellbook/cleric.dm b/code/modules/spells/spellbook/cleric.dm
deleted file mode 100644
index 98c5a48f6d5..00000000000
--- a/code/modules/spells/spellbook/cleric.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-//Cleric is all about healing. Mobility and offense comes at a higher price but not impossible.
-/obj/item/book/spell/cleric
- spellbook_type = /datum/spellbook/cleric
-
-/datum/spellbook/cleric
- name = "\improper Cleric's Tome"
- feedback = "CR"
- desc = "For those who do not harm, or at least feel sorry about it."
- book_desc = "All about healing. Mobility and offense comes at a higher price but not impossible."
- title = "Cleric's Tome of Healing"
- title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent."
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE
- max_uses = 7
-
- spells = list(
- /spell/targeted/heal_target/major = 1,
- /spell/targeted/heal_target/area = 1,
- /spell/targeted/heal_target/sacrifice = 1,
- /spell/targeted/genetic/blind = 1,
- /spell/targeted/shapeshift/baleful_polymorph = 1,
- /spell/targeted/projectile/dumbfire/stuncuff = 1,
- /spell/targeted/ethereal_jaunt = 2,
- /spell/aoe_turf/knock = 1,
- /spell/radiant_aura = 1,
- /spell/targeted/equip_item/holy_relic = 1,
- /spell/aoe_turf/conjure/grove/sanctuary = 1,
- /spell/targeted/projectile/dumbfire/fireball = 2,
- /spell/area_teleport = 2,
- /spell/portal_teleport = 2,
- /spell/aoe_turf/conjure/forcewall = 1,
- /spell/noclothes = 1,
- /obj/item/magic_rock = 1,
- /obj/structure/closet/wizard/scrying = 2,
- /obj/item/summoning_stone = 2,
- /obj/item/contract/wizard/telepathy = 1,
- /obj/item/contract/apprentice = 1
- )
-
- sacrifice_reagents = list(
- /decl/material/liquid/adminordrazine
- )
- sacrifice_objects = list(
- /obj/item/stack/nanopaste,
- /obj/item/scanner/health,
- /obj/item/scanner/breath,
- /obj/item/stack/medical/bandage/advanced,
- /obj/item/stack/medical/ointment/advanced,
- /obj/item/bodybag/rescue,
- /obj/item/defibrillator
- )
diff --git a/code/modules/spells/spellbook/druid.dm b/code/modules/spells/spellbook/druid.dm
deleted file mode 100644
index 48ee015d349..00000000000
--- a/code/modules/spells/spellbook/druid.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-//all about the summons, nature, and a bit o' healin.
-
-/obj/item/book/spell/druid
- spellbook_type = /datum/spellbook/druid
-
-/datum/spellbook/druid
- name = "\improper Druid's Leaflet"
- feedback = "DL"
- desc = "It smells like an air freshener."
- book_desc = "Summons, nature, and a bit o' healin."
- title = "Druidic Guide on how to be smug about nature"
- title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent."
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE
- max_uses = 6
-
- spells = list(
- /spell/targeted/heal_target = 1,
- /spell/targeted/heal_target/sacrifice = 1,
- /spell/aoe_turf/conjure/mirage = 1,
- /spell/aoe_turf/conjure/summon/bats = 1,
- /spell/aoe_turf/conjure/summon/bear = 1,
- /spell/targeted/equip_item/party_hardy = 1,
- /spell/targeted/equip_item/seed = 1,
- /spell/targeted/shapeshift/avian = 1,
- /spell/aoe_turf/disable_tech = 1,
- /spell/hand/charges/entangle = 1,
- /spell/aoe_turf/conjure/grove/sanctuary = 1,
- /spell/aoe_turf/knock = 1,
- /spell/area_teleport = 2,
- /spell/portal_teleport = 2,
- /spell/noclothes = 1,
- /obj/item/magic_rock = 1,
- /obj/item/summoning_stone = 2,
- /obj/item/contract/wizard/telepathy = 1,
- /obj/item/contract/apprentice = 1
- )
- sacrifice_objects = list(
- /obj/item/seeds,
- /obj/item/wirecutters/clippers,
- /obj/item/scanner/plant,
- /obj/item/tool/axe/hatchet,
- /obj/item/tool/hoe/mini
- )
diff --git a/code/modules/spells/spellbook/spatial.dm b/code/modules/spells/spellbook/spatial.dm
deleted file mode 100644
index def9a6695d2..00000000000
--- a/code/modules/spells/spellbook/spatial.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-//all about moving around and mobility and being an annoying shit.
-
-/obj/item/book/spell/spatial
- spellbook_type = /datum/spellbook/spatial
-
-/datum/spellbook/spatial
- name = "\improper Spatial Manual"
- feedback = "SP"
- desc = "You feel like this might disappear from out of under you."
- book_desc = "Movement and teleportation. Run from your problems!"
- title = "Manual of Spatial Transportation"
- title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent."
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE
- max_uses = 11
-
- spells = list(
- /spell/targeted/ethereal_jaunt = 1,
- /spell/aoe_turf/blink = 1,
- /spell/area_teleport = 1,
- /spell/portal_teleport = 1,
- /spell/targeted/projectile/dumbfire/passage = 1,
- /spell/mark_recall = 1,
- /spell/targeted/swap = 1,
- /spell/targeted/shapeshift/avian = 1,
- /spell/targeted/projectile/magic_missile = 1,
- /spell/targeted/heal_target = 1,
- /spell/aoe_turf/conjure/forcewall = 1,
- /spell/aoe_turf/smoke = 1,
- /spell/aoe_turf/conjure/summon/bats = 3,
- /spell/noclothes = 1,
- /obj/item/dice/d20/cursed = 1,
- /obj/structure/closet/wizard/scrying = 2,
- /obj/item/paper/scroll/teleportation = 1,
- /obj/item/magic_rock = 1,
- /obj/item/summoning_stone = 3,
- /obj/item/contract/wizard/telepathy = 1,
- /obj/item/contract/apprentice = 1
- )
-
- sacrifice_reagents = list(
- /decl/material/liquid/amphetamines
- )
- sacrifice_objects = list(
- /obj/item/stack/telecrystal
- )
- sacrifice_materials = list(
- /decl/material/solid/gemstone/diamond
- )
\ No newline at end of file
diff --git a/code/modules/spells/spellbook/standard.dm b/code/modules/spells/spellbook/standard.dm
deleted file mode 100644
index 99e8f27c274..00000000000
--- a/code/modules/spells/spellbook/standard.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-//the spellbook we know and love. Well, the one we know, at least.
-
-/obj/item/book/spell/standard
- spellbook_type = /datum/spellbook/standard
-
-/datum/spellbook/standard
- name = "\improper Standard Spellbook"
- feedback = "SB"
- title = "Book of Spells and Artefacts"
- title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent."
- book_desc = "A general wizard's spellbook. All its spells are easy to use but hard to master."
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE
- max_uses = 6
-
- spells = list(
- /spell/targeted/projectile/magic_missile = 1,
- /spell/targeted/projectile/dumbfire/fireball = 1,
- /spell/aoe_turf/disable_tech = 1,
- /spell/aoe_turf/smoke = 1,
- /spell/targeted/genetic/blind = 1,
- /spell/targeted/subjugation = 1,
- /spell/aoe_turf/conjure/forcewall = 1,
- /spell/aoe_turf/blink = 1,
- /spell/area_teleport = 1,
- /spell/targeted/ethereal_jaunt = 1,
- /spell/targeted/heal_target = 1,
- /spell/aoe_turf/knock = 1,
- /spell/noclothes = 2,
- /obj/item/gun/energy/staff/focus = 1,
- /obj/item/gun/energy/staff/fire = 1,
- /obj/item/gun/energy/staff/animate = 1,
- /obj/structure/closet/wizard/scrying = 1,
- /obj/item/summoning_stone = 2,
- /obj/item/magic_rock = 1,
- /obj/item/contract/wizard/telepathy = 1,
- /obj/item/contract/apprentice = 1
- )
-
- sacrifice_objects = list(
- /obj/item/toolbox,
- /obj/item/cane/fancy,
- /obj/item/flamethrower,
- /obj/item/plastique,
- /obj/item/dice,
- /obj/item/soap,
- /obj/item/flame/candle,
- /obj/item/flame/candle/scented/incense,
- /obj/item/caution,
- /obj/item/towel,
- /obj/item/tank/jetpack,
- /obj/item/plunger,
- /obj/item/megaphone,
- /obj/item/deck/cards
- )
\ No newline at end of file
diff --git a/code/modules/spells/spellbook/student.dm b/code/modules/spells/spellbook/student.dm
deleted file mode 100644
index 1c07a5135b1..00000000000
--- a/code/modules/spells/spellbook/student.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-//wizard's training wheels. Basically. Same shit as in the general one.
-
-/obj/item/book/spell/student
- spellbook_type = /datum/spellbook/student
-
-/datum/spellbook/student
- name = "\improper Student's Spellbook"
- feedback = "ST"
- desc = "This spell book has a sticker on it that says, 'certified for children 5 and older'."
- book_desc = "This spellbook is dedicated to teaching neophytes in the ways of magic."
- title = "Book of Spells and Education"
- title_desc = "Hello. Congratulations on becoming a wizard. You may be asking yourself: What? A wizard? Already? Of course! Anybody can become a wizard! Learning to be a good one is the hard part. Without further adue, let us begin by learning the three concepts of wizardry, 'Spell slots', 'Spells', and 'Artifacts'. Firstly lets try to understand the 'spell slot'. A spell slot is the measurable amount of spells and artifacts one tome can give. Most spells will only take up a singular spell slot, however more powerful spells/artifacts can take up more. Spells are spells. They can have requirements, such as wizard garb, and most can be upgraded by purchasing additional spell slots for them. Most upgrades fall into two categories, 'Speed' and 'Power'. Speed upgrades decrease the time you have to spend recharging your spell. Power increases the potency of your spells. Spells are also special in that they can be refunded while inside the Wizard Acadamy, so if you want to test a spell out before moving out into the field, feel free to do that in the comfort of our home. Artifacts, or 'Artefacts' as we call them, are powerful wizard tools or items made specially for wizards everywhere. Extremely potent, they cannot be refunded like spells, and some of them can be used by non-wizards, so be careful! Knowing these three concepts puts you in a league above most wizards, however knowledge of spells is just as important so we've included a list of spells below made specifically for the beginning wizard. Take all of them, or mix and match, remember being creative is half of being a wizard!"
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE
- max_uses = 5
-
- spells = list(
- /spell/aoe_turf/knock = 1,
- /spell/targeted/ethereal_jaunt = 1,
- /spell/targeted/projectile/magic_missile = 1,
- /obj/item/gun/energy/staff/focus = 1,
- /obj/item/contract/wizard/xray = 1
- )
-
-/datum/spellbook/student/apprentice
- book_flags = CAN_MAKE_CONTRACTS|INVESTABLE|NOREVERT|NO_LOCKING
-
-/obj/item/book/spell/apprentice
- spellbook_type = /datum/spellbook/student/apprentice
diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm
deleted file mode 100644
index ad550747a7f..00000000000
--- a/code/modules/spells/spells.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-/datum/mind
- var/list/learned_spells
-
-/mob/Stat()
- . = ..()
- if(. && ability_master && ability_master.spell_objects)
- for(var/obj/screen/ability/spell/screen in ability_master.spell_objects)
- var/spell/S = screen.spell
- if((!S.connected_button) || !statpanel(S.panel))
- continue //Not showing the noclothes spell
- switch(S.charge_type)
- if(Sp_RECHARGE)
- statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button)
- if(Sp_CHARGES)
- statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button)
- if(Sp_HOLDVAR)
- statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button)
-
-/proc/restore_spells(var/mob/H)
- if(H.mind && H.mind.learned_spells)
- var/list/spells = list()
- for(var/spell/spell_to_remove in H.mind.learned_spells) //remove all the spells from other people.
- if(ismob(spell_to_remove.holder))
- var/mob/M = spell_to_remove.holder
- spells += spell_to_remove
- M.remove_spell(spell_to_remove)
-
- for(var/spell/spell_to_add in spells)
- H.add_spell(spell_to_add)
- H.ability_master.update_abilities(0,H)
-
-/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready")
- if(!ability_master)
- ability_master = new(null, src)
- spell_to_add.holder = src
- if(mind)
- if(!mind.learned_spells)
- mind.learned_spells = list()
- mind.learned_spells |= spell_to_add
- ability_master.add_spell(spell_to_add, spell_base)
- return 1
-
-/mob/proc/remove_spell(var/spell/spell_to_remove)
- if(!spell_to_remove || !istype(spell_to_remove))
- return
-
- if(mind)
- mind.learned_spells -= spell_to_remove
- if (ability_master)
- ability_master.remove_ability(ability_master.get_ability_by_spell(spell_to_remove))
- return 1
-
-/mob/proc/silence_spells(var/amount = 0)
- if(amount < 0)
- return
-
- if(!ability_master)
- return
-
- ability_master.silence_spells(amount)
\ No newline at end of file
diff --git a/code/modules/spells/targeted/analyze.dm b/code/modules/spells/targeted/analyze.dm
deleted file mode 100644
index 705d97399c7..00000000000
--- a/code/modules/spells/targeted/analyze.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/spell/targeted/analyze
- name = "Analyze"
- desc = "Using your wizardly powers, you can detect the inner destructions of a persons body."
-
- feedback = "AZ"
- school = "illusion"
- charge_max = 100
- spell_flags = INCLUDEUSER|SELECTABLE
- range = 2
- invocation_type = SpI_WHISPER
- invocation = "Fu Yi Fim"
- compatible_mobs = list(/mob/living/human)
- hud_state = "analyze"
-
-/spell/targeted/analyze/cast(var/list/targets, var/mob/user)
- for(var/a in targets)
- var/mob/living/human/H = a
- new /obj/effect/temporary(get_turf(a),5, 'icons/effects/effects.dmi', "repel_missiles")
- to_chat(user,medical_scan_results(H,1))
\ No newline at end of file
diff --git a/code/modules/spells/targeted/blood_boil.dm b/code/modules/spells/targeted/blood_boil.dm
deleted file mode 100644
index 4c39b3b4620..00000000000
--- a/code/modules/spells/targeted/blood_boil.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-/spell/targeted/blood_boil
- name = "Blood Boil"
- desc = "Allow you to concentrate so deeply on a target that their body temperature increases, eventually setting them on fire."
- feedback = "BO"
- school = "transmutation"
- charge_max = 300
- spell_flags = 0
- invocation_type = SpI_NONE
- range = 5
- max_targets = 1
- compatible_mobs = list(/mob/living/human)
-
- time_between_channels = 50
- number_of_channels = 0
-
- hud_state = "wiz_boilblood"
-
-/spell/targeted/blood_boil/cast(var/list/targets, var/mob/user)
- var/mob/living/human/H = targets[1]
- H.bodytemperature += 40
- if(prob(10))
- to_chat(H,"\The [user] seems to radiate an uncomfortable amount of heat your direction.")
- if(H.bodytemperature > H.get_mob_temperature_threshold(HEAT_LEVEL_3)) //Burst into flames
- H.fire_stacks += 50
- H.IgniteMob()
\ No newline at end of file
diff --git a/code/modules/spells/targeted/cleric_spells.dm b/code/modules/spells/targeted/cleric_spells.dm
deleted file mode 100644
index 74061d776dd..00000000000
--- a/code/modules/spells/targeted/cleric_spells.dm
+++ /dev/null
@@ -1,248 +0,0 @@
-/spell/targeted/heal_target
- name = "Cure Light Wounds"
- desc = "a rudimentary spell used mainly by wizards to heal papercuts. Does not require wizard garb."
- feedback = "CL"
- school = "transmutation"
- charge_max = 20 SECONDS
- spell_flags = INCLUDEUSER | SELECTABLE
- invocation = "Di'Nath!"
- invocation_type = SpI_SHOUT
- range = 2
- max_targets = 1
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 1, Sp_POWER = 2)
-
- cooldown_reduc = 50
- hud_state = "heal_minor"
- cast_sound = 'sound/magic/staff_healing.ogg'
-
- amt_dam_brute = -15
- amt_dam_fire = -5
- amt_dam_robo = -4
- effect_state = "green_sparkles"
- effect_duration = 5
-
- // Vars expect a constant at compile time, so we can't use macros for spans here
- message = "You feel a pleasant rush of heat move through your body."
-
-/spell/targeted/heal_target/empower_spell()
- if(!..())
- return 0
- amt_dam_brute -= 15
- amt_dam_fire -= 15
- amt_dam_robo -= 7
- return "[src] will now heal more."
-
-/spell/targeted/heal_target/touch
- name = "Healing Touch"
- desc = "Heals an adjacent target for a reasonable amount of health."
- range = 1
- amt_dam_fire = -7
- amt_dam_brute = -7
- amt_dam_robo = -5
- charge_max = 10 SECONDS
- spell_flags = SELECTABLE
- invocation = "Di'Na!"
-
- hud_state = "heal_touch"
-
-/spell/targeted/heal_target/major
- name = "Cure Major Wounds"
- desc = "A spell used to fix others that cannot be fixed with regular medicine."
- feedback = "CM"
- charge_max = 30 SECONDS
- spell_flags = INCLUDEUSER | SELECTABLE | NEEDSCLOTHES
- invocation = "Borv Di'Nath!"
- range = 1
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 1, Sp_POWER = 1)
- cooldown_reduc = 100
- hud_state = "heal_major"
-
- amt_dam_brute = -75
- amt_dam_fire = -50
- amt_dam_robo = -10
- amt_blood = 28
-
- message = "Your body feels like a warm, cozy fire."
-
-/spell/targeted/heal_target/major/empower_spell()
- if(!..())
- return 0
- amt_blood = 28
- amt_organ = 5
- amt_brain = -5
- amt_radiation = -25
- amt_dam_tox = -20
- amt_dam_oxy = -14
- amt_dam_brute = -35
- amt_dam_fire = -35
- amt_dam_robo = -15
-
- return "[src] heals more, and heals organ damage and radiation."
-
-/spell/targeted/heal_target/area
- name = "Cure Area"
- desc = "This spell heals everyone in an area."
- feedback = "HA"
- charge_max = 1 MINUTE
- spell_flags = INCLUDEUSER
- invocation = "Nal Di'Nath!"
- range = 2
- max_targets = 0
- level_max = list(Sp_TOTAL = 1, Sp_SPEED = 1, Sp_POWER = 1)
- cooldown_reduc = 300
- hud_state = "heal_area"
- amt_dam_robo = -6
- amt_dam_brute = -25
- amt_dam_fire = -25
-
-/spell/targeted/heal_target/area/empower_spell()
- if(!..())
- return 0
- amt_dam_brute -= 15
- amt_dam_fire -= 15
- amt_dam_robo -= 4
- range += 2
-
- return "[src] now heals more in a wider area."
-
-/spell/targeted/heal_target/area/slow
- charge_max = 2 MINUTES
-
-/spell/targeted/heal_target/sacrifice
- name = "Sacrifice"
- desc = "This spell heals immensily. For a price. Does not require wizard garb."
- feedback = "SF"
- spell_flags = SELECTABLE
- invocation = "Ei'Nath Borv Di'Nath!"
- charge_type = Sp_HOLDVAR
- holder_var_type = "fireloss"
- holder_var_amount = 100
- level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1)
-
- amt_dam_brute = -1000
- amt_dam_fire = -1000
- amt_dam_oxy = -100
- amt_dam_tox = -100
- amt_dam_robo = -1000
- amt_blood = 280
- effect_color = "#ff0000"
-
- hud_state = "gen_dissolve"
- cast_sound = 'sound/magic/disintegrate.ogg'
-
-/spell/targeted/heal_target/sacrifice/empower_spell()
- if(!..())
- return 0
-
- amt_organ = 25
- amt_brain = -25
- amt_radiation = -100
-
-
- return "You will now heal organ and brain damage, as well as virtually purge all radiation."
-
-
-/spell/targeted/heal_target/trance
- name = "Trance"
- desc = "A mighty spell of restoration that briefly forces its target into a deep, dreamless sleep, rapidly repairing their body and soul as their senses are dulled. The users of this mighty art are known for being short lived, slowly devolving into raving madness as the power they once relied on fails them with excessive use."
- feedback = "TC"
- spell_flags = SELECTABLE
- invocation = "Di' Dae Nath!"
- charge_max = 2 MINUTES
-
- amt_dam_brute = -1000
- amt_dam_fire = -1000
- amt_dam_oxy = -100
- amt_dam_tox = -100
- amt_dam_robo = -1000
- hud_state = "trance"
- var/obj/effect/effect
-
-/spell/targeted/heal_target/trance/cast(var/list/targets, var/mob/user)
- for(var/t in targets)
- var/mob/living/L = t
- var/turf/T = get_turf(L)
- effect = new /obj/effect/rift(T)
- effect.color = "f0e68c"
- L.forceMove(effect)
- var/time = (L.get_damage(BRUTE) + L.get_damage(BURN)) * 20
- L.status_flags &= GODMODE
- to_chat(L,"You will be in stasis for [time/10] second\s.")
- addtimer(CALLBACK(src,PROC_REF(cancel_rift)),time)
-
-/spell/targeted/heal_target/trance/Destroy()
- cancel_rift()
- return ..()
-
-/spell/targeted/heal_target/trance/proc/cancel_rift()
- if(effect)
- var/mob/living/L = locate() in effect
- L.status_flags &= ~GODMODE
- L.forceMove(get_turf(L))
- apply_spell_damage(L)
- charge_max += 300
- QDEL_NULL(effect)
-
-/obj/effect/rift
- name = "rift"
- desc = "a tear in space and time."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "rift"
- anchored = TRUE
- density = FALSE
-
-/obj/effect/rift/Destroy()
- for(var/o in contents)
- var/atom/movable/M = o
- M.dropInto(loc)
- . = ..()
-
-/spell/targeted/revoke
- name = "Revoke Death"
- desc = "Revoke that of death itself. Comes at a cost that may be hard to manage for some."
- feedback = "RK"
-
- spell_flags = SELECTABLE
-
- charge_type = Sp_CHARGES
- charge_max = 1
- invocation = "Di Le Nal Yen Nath!"
- invocation_type = SpI_SHOUT
- range = 1
- hud_state = "heal_revoke"
-
-/spell/targeted/revoke/cast(var/list/targets, var/mob/living/user)
- if(alert(user, "Are you sure?", "Alert", "Yes", "No") == "Yes" && alert(user, "Are you ABSOLUTELY SURE?", "Alert", "Absolutely!", "No") == "Absolutely!")
- var/should_wait = 1
- for(var/t in targets)
- var/mob/living/M = t
- M.rejuvenate()
- if(M.client) //We've got a dude
- should_wait = 0
- break //Don't need to check anymore.
- if(should_wait)
- addtimer(CALLBACK(src,PROC_REF(check_for_revoke),targets), 30 SECONDS)
- else
- revoke_spells()
-
-
-/spell/targeted/revoke/proc/check_for_revoke(var/list/targets)
- for(var/t in targets)
- var/mob/M = t
- if(M.client)
- revoke_spells()
- return
- charge_counter = charge_max
- to_chat(holder,"\The [src] refreshes as it seems it could not bring back the souls of those you healed.")
-
-/spell/targeted/revoke/proc/revoke_spells()
- if(!isliving(holder))
- return
- var/mob/living/M = holder
- if(M.mind)
- for(var/s in M.mind.learned_spells)
- if(istype(s, /spell/toggle_armor)) //Can keep the armor n junk.
- continue
- M.remove_spell(s)
- for(var/a in M.auras)
- M.remove_aura(a)
\ No newline at end of file
diff --git a/code/modules/spells/targeted/equip/burning_touch.dm b/code/modules/spells/targeted/equip/burning_touch.dm
deleted file mode 100644
index 65ed431693b..00000000000
--- a/code/modules/spells/targeted/equip/burning_touch.dm
+++ /dev/null
@@ -1,69 +0,0 @@
-/spell/targeted/equip_item/burning_hand
- name = "Burning Hand"
- desc = "Bathes your hand in fire, giving you all the perks and disadvantages that brings."
- feedback = "BH"
- school = "conjuration"
- invocation = "Horila Kiha!"
- invocation_type = SpI_SHOUT
- spell_flags = INCLUDEUSER
- range = -1
- duration = 0
- max_targets = 1
- equipped_summons = list("active hand" = /obj/item/burning_hands)
- delete_old = 0
- hud_state = "gen_burnhand"
-
-/obj/item/burning_hands
- name = "Burning Hand"
- icon = 'icons/mob/screen/grabs.dmi'
- icon_state = "grabbed+1"
- _base_attack_force = 10
- atom_damage_type = BURN
- simulated = 0
- max_health = ITEM_HEALTH_NO_DAMAGE
- obj_flags = OBJ_FLAG_NO_STORAGE
- var/burn_power = 0
- var/burn_timer
-
-/obj/item/burning_hands/on_picked_up(var/mob/user)
- burn_power = 0
- burn_timer = world.time + 10 SECONDS
- START_PROCESSING(SSobj,src)
-
-/obj/item/burning_hands/get_heat()
- return 1000
-
-/obj/item/burning_hands/isflamesource()
- return TRUE
-
-/obj/item/burning_hands/Process()
- if(world.time < burn_timer)
- return
- burn_timer = world.time + 5 SECONDS
- burn_power++
- set_base_attack_force(get_base_attack_force()+2)
- if(!ishuman(src.loc))
- qdel(src)
- return
- var/mob/living/human/user = src.loc
- var/obj/item/organ/external/hand
- if(src == user.get_equipped_item(BP_L_HAND))
- hand = GET_EXTERNAL_ORGAN(user, BP_L_HAND)
- else if(src == user.get_equipped_item(BP_R_HAND))
- hand = GET_EXTERNAL_ORGAN(user, BP_R_HAND)
- if(hand)
- hand.take_external_damage(burn = 2 * burn_power)
- if(burn_power > 5)
- user.fire_stacks += 15
- user.IgniteMob()
- user.visible_message("\The [user] bursts into flames!")
- user.drop_from_inventory(src)
- else
- if(burn_power == 5)
- to_chat(user, "You begin to lose control of \the [src]'s flames as they rapidly move up your arm...")
- else
- to_chat(user, "You feel \the [src] grow hotter and hotter!")
-
-/obj/item/burning_hands/dropped()
- ..()
- qdel(src)
\ No newline at end of file
diff --git a/code/modules/spells/targeted/equip/dyrnwyn.dm b/code/modules/spells/targeted/equip/dyrnwyn.dm
deleted file mode 100644
index 71d7ace1e4f..00000000000
--- a/code/modules/spells/targeted/equip/dyrnwyn.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/spell/targeted/equip_item/dyrnwyn
- name = "Summon Dyrnwyn"
- desc = "Summons the legendary sword of Rhydderch Hael, said to draw in flame when held by a worthy man."
- feedback = "SD"
- charge_type = Sp_HOLDVAR
- holder_var_type = "fireloss"
- holder_var_amount = 10
- school = "conjuration"
- invocation = "Anrhydeddu Fi!"
- invocation_type = SpI_SHOUT
- spell_flags = INCLUDEUSER
- range = -1
- level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1)
- duration = 300 //30 seconds
- max_targets = 1
- equipped_summons = list("active hand" = /obj/item/sword)
- delete_old = FALSE
- var/material = /decl/material/solid/metal/gold
-
- hud_state = "gen_immolate"
-
-
-/spell/targeted/equip_item/dyrnwyn/summon_item(var/new_type)
- var/obj/item/sword = new new_type(null,material)
- sword.SetName("\improper Dyrnwyn")
- sword.atom_damage_type = BURN
- sword.hitsound = 'sound/items/welder2.ogg'
- LAZYSET(sword.slowdown_per_slot, BP_L_HAND, 1)
- LAZYSET(sword.slowdown_per_slot, BP_R_HAND, 1)
- return sword
-
-/spell/targeted/equip_item/dyrnwyn/empower_spell()
- if(!..())
- return FALSE
-
- material = /decl/material/solid/metal/silver
- return "Dyrnwyn has been made pure: it is now made of silver."
diff --git a/code/modules/spells/targeted/equip/equip.dm b/code/modules/spells/targeted/equip/equip.dm
deleted file mode 100644
index 7b0304d9e07..00000000000
--- a/code/modules/spells/targeted/equip/equip.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-//You can set duration to 0 to have the items last forever
-
-/spell/targeted/equip_item
- cast_sound = 'sound/magic/summonitems_generic.ogg'
- var/list/equipped_summons = list() //assoc list of text ids and paths to spawn
- var/list/summoned_items = list() //list of items we summoned and will dispose when the spell runs out
- var/delete_old = 1 //if the item previously in the slot is deleted - otherwise, it's dropped
-
-/spell/targeted/equip_item/cast(list/targets, mob/user = usr)
- ..()
- for(var/mob/living/L in targets)
- for(var/slot_id in equipped_summons)
- var/to_create = equipped_summons[slot_id]
- if(cmptext(slot_id,"active hand"))
- slot_id = user.get_active_held_item_slot()
- else if(cmptext(slot_id, "off hand"))
- slot_id = user.get_empty_hand_slot()
- else
- slot_id = text2num(slot_id) //because the index is text, we access this instead
- var/obj/item/new_item = summon_item(to_create)
- var/obj/item/old_item = L.get_equipped_item(slot_id)
- if(old_item)
- L.drop_from_inventory(old_item)
- if(delete_old)
- qdel(old_item)
- L.equip_to_slot(new_item, slot_id)
- new_item.on_picked_up(L)
-
- if(duration)
- summoned_items += new_item //we store it in a list to remove later
-
- if(duration)
- spawn(duration)
- for(var/obj/item/to_remove in summoned_items)
- qdel(to_remove)
-
-/spell/targeted/equip_item/proc/summon_item(var/newtype)
- return new newtype
diff --git a/code/modules/spells/targeted/equip/holy_relic.dm b/code/modules/spells/targeted/equip/holy_relic.dm
deleted file mode 100644
index 7c6dadf5da2..00000000000
--- a/code/modules/spells/targeted/equip/holy_relic.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/spell/targeted/equip_item/holy_relic
- name = "Summon Holy Relic"
- desc = "This spell summons a relic of purity into your hand for a short while. The relic will disrupt occult and magical energies - be wary, as this includes your own."
- feedback = "SR"
- school = "conjuration"
- charge_type = Sp_RECHARGE
- spell_flags = NEEDSCLOTHES | INCLUDEUSER
- invocation = "Yee'Ro Su!"
- invocation_type = SpI_SHOUT
- range = 0
- max_targets = 1
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 1, Sp_POWER = 1)
- charge_max = 60 SECONDS
- duration = 25 SECONDS
- cooldown_min = 35 SECONDS
- delete_old = 0
- compatible_mobs = list(/mob/living/human)
-
- hud_state = "purge1"
-
- equipped_summons = list("active hand" = /obj/item/nullrod)
-
-/spell/targeted/equip_item/holy_relic/cast(list/targets, mob/user = usr)
- ..()
- for(var/mob/M in targets)
- M.visible_message(SPAN_DANGER("A rod of metal appears in \the [M]'s hand!"))
-
-/spell/targeted/equip_item/holy_relic/empower_spell()
- if(!..())
- return 0
-
- duration += 50
-
- return "The holy relic now lasts for [duration/10] seconds."
\ No newline at end of file
diff --git a/code/modules/spells/targeted/equip/horsemask.dm b/code/modules/spells/targeted/equip/horsemask.dm
deleted file mode 100644
index 31995ba86bd..00000000000
--- a/code/modules/spells/targeted/equip/horsemask.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/spell/targeted/equip_item/horsemask
- name = "Curse of the Horseman"
- desc = "This spell triggers a curse on a target, causing them to wield an unremovable horse head mask. They will speak like a horse! Any masks they are wearing will be disintegrated. This spell does not require robes."
- school = "transmutation"
- charge_type = Sp_RECHARGE
- charge_max = 150
- charge_counter = 0
- spell_flags = 0
- invocation = "Kn'a Ftaghu, Puck'Bthnk!"
- invocation_type = SpI_SHOUT
- range = 7
- max_targets = 1
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 1)
- cooldown_min = 30 //30 deciseconds reduction per rank
- selection_type = "range"
-
- compatible_mobs = list(/mob/living/human)
-
- hud_state = "wiz_horse"
- cast_sound = 'sound/magic/horsehead_curse.ogg'
-
-/spell/targeted/equip_item/horsemask/New()
- ..()
- equipped_summons = list("[slot_wear_mask_str]" = /obj/item/clothing/mask/horsehead)
-
-/spell/targeted/equip_item/horsemask/cast(list/targets, mob/user = usr)
- ..()
- for(var/mob/living/target in targets)
- target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \
- "Your face burns up, and shortly after the fire you realise you have the face of a horse!")
- target.flash_eyes()
-
-/spell/targeted/equip_item/horsemask/summon_item(var/new_type)
- var/obj/item/new_item = new new_type
- new_item.canremove = 0 //curses!
- if(istype(new_item, /obj/item/clothing/mask/horsehead))
- var/obj/item/clothing/mask/horsehead/magichead = new_item
- magichead.flags_inv = null //so you can still see their face
- magichead.voicechange = 1 //NEEEEIIGHH
- return new_item
-
-/spell/targeted/equip_item/horsemask/empower_spell()
- if(!..())
- return 0
-
- spell_flags = SELECTABLE
-
- return "You can now select your target with [src]"
\ No newline at end of file
diff --git a/code/modules/spells/targeted/equip/party_hardy.dm b/code/modules/spells/targeted/equip/party_hardy.dm
deleted file mode 100644
index f6f7ba54d07..00000000000
--- a/code/modules/spells/targeted/equip/party_hardy.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/spell/targeted/equip_item/party_hardy
- name = "Summon Party"
- desc = "This spell was invented for the sole purpose of getting crunked at 11am on a Tuesday. Does not require wizard garb."
- feedback = "PY"
- school = "conjuration"
- charge_type = Sp_RECHARGE
- charge_max = 900
- cooldown_min = 600
- spell_flags = INCLUDEUSER
- invocation = "Llet'Su G'iit Rrkned!" //Let's get wrecked.
- invocation_type = SpI_SHOUT
- range = 6
- max_targets = 0
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 1, Sp_POWER = 2)
- delete_old = 0
-
- hud_state = "wiz_party"
-
- compatible_mobs = list(/mob/living/human)
- equipped_summons = list("active hand" = /obj/item/chems/drinks/bottle/small/beer)
-
-/spell/targeted/equip_item/party_hardy/empower_spell()
- if(!..())
- return 0
- switch(spell_levels[Sp_POWER])
- if(1)
- equipped_summons = list("active hand" = /obj/item/chems/drinks/bottle/small/beer,
- "off hand" = /obj/item/food/poppypretzel)
- return "The spell will now give everybody a preztel as well."
- if(2)
- equipped_summons = list("active hand" = /obj/item/chems/drinks/bottle/absinthe,
- "off hand" = /obj/item/food/poppypretzel,
- "[slot_head_str]" = /obj/item/clothing/head/collectable/wizard)
- return "Woo! Now everybody gets a cool wizard hat and MORE BOOZE!"
-
- return 0
\ No newline at end of file
diff --git a/code/modules/spells/targeted/equip/seed.dm b/code/modules/spells/targeted/equip/seed.dm
deleted file mode 100644
index 2252ec75c8c..00000000000
--- a/code/modules/spells/targeted/equip/seed.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/spell/targeted/equip_item/seed
- name = "Summon Seed"
- desc = "This spell summons a random seed into the hand of the wizard."
- feedback = "SE"
- delete_old = 0
-
- spell_flags = INCLUDEUSER | NEEDSCLOTHES
- invocation_type = SpI_WHISPER
- invocation = "Ria'li akta."
-
- equipped_summons = list("active hand" = /obj/item/seeds/random)
- compatible_mobs = list(/mob/living/human)
-
- charge_max = 600 //1 minute
- cooldown_min = 200 //20 seconds
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 0)
-
- range = -1
- max_targets = 1
-
- hud_state = "wiz_seed"
\ No newline at end of file
diff --git a/code/modules/spells/targeted/equip/shield.dm b/code/modules/spells/targeted/equip/shield.dm
deleted file mode 100644
index b725196ad3a..00000000000
--- a/code/modules/spells/targeted/equip/shield.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/spell/targeted/equip_item/shield
- name = "Summon Shield"
- desc = "Summons the most holy of shields, the riot shield. Commonly used during wizard riots."
- feedback = "SH"
- school = "conjuration"
- invocation = "Sia helda!"
- invocation_type = SpI_SHOUT
- spell_flags = INCLUDEUSER | NEEDSCLOTHES
- range = -1
- max_targets = 1
-
- compatible_mobs = list(/mob/living/human)
-
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 2, Sp_POWER = 1)
- charge_type = Sp_RECHARGE
- charge_max = 900
- cooldown_min = 300
- equipped_summons = list("off hand" = /obj/item/shield/)
- duration = 300
- delete_old = 0
- var/item_color = "#6666ff"
- var/block_chance = 30
-
- hud_state = "wiz_shield"
-
-/spell/targeted/equip_item/shield/summon_item(var/new_type)
- var/obj/item/shield/I = new new_type()
- I.icon_state = "buckler"
- I.color = item_color
- I.SetName("Wizard's Shield")
- I.base_block_chance = block_chance
- return I
-
-/spell/targeted/equip_item/shield/empower_spell()
- if(!..())
- return 0
-
- item_color = "#6600ff"
- block_chance = 60
-
- return "Your summoned shields will now block more often."
diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm
deleted file mode 100644
index e686e7712dc..00000000000
--- a/code/modules/spells/targeted/ethereal_jaunt.dm
+++ /dev/null
@@ -1,120 +0,0 @@
-/spell/targeted/ethereal_jaunt
- name = "Ethereal Jaunt"
- desc = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls."
- feedback = "EJ"
- school = "transmutation"
- charge_max = 30 SECONDS
- spell_flags = Z2NOCAST | NEEDSCLOTHES | INCLUDEUSER
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
- max_targets = 1
- level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 3)
- cooldown_min = 10 SECONDS //50 deciseconds reduction per rank
- duration = 5 SECONDS
-
- hud_state = "wiz_jaunt"
-
-/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
- for(var/mob/living/target in targets)
- if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(target))
- continue
-
- if(target.buckled)
- target.buckled.unbuckle_mob()
- spawn(0)
- var/mobloc = get_turf(target.loc)
- var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt( mobloc )
- var/atom/movable/overlay/animation = new /atom/movable/overlay(holder)
- animation.SetName("water")
- animation.set_density(0)
- animation.anchored = TRUE
- animation.icon = 'icons/mob/mob.dmi'
- animation.layer = FLY_LAYER
- target.ExtinguishMob()
- if(target.buckled)
- target.buckled = null
- jaunt_disappear(animation, target)
- target.forceMove(holder)
- jaunt_steam(mobloc)
- sleep(duration)
- mobloc = holder.last_valid_turf
- animation.forceMove(mobloc)
- jaunt_steam(mobloc)
- holder.reappearing = 1
- sleep(20)
- jaunt_reappear(animation, target)
- sleep(5)
- if(!target.forceMove(mobloc))
- for(var/direction in list(1,2,4,8,5,6,9,10))
- var/turf/T = get_step(mobloc, direction)
- if(T)
- if(target.forceMove(T))
- break
- target.client.eye = target
- qdel(animation)
- qdel(holder)
-
-/spell/targeted/ethereal_jaunt/empower_spell()
- if(!..())
- return 0
- duration += 2 SECONDS
-
- return "[src] now lasts longer."
-
-/spell/targeted/ethereal_jaunt/proc/jaunt_disappear(var/atom/movable/overlay/animation, var/mob/living/target)
- animation.icon_state = "liquify"
- flick("liquify",animation)
- playsound(get_turf(target), 'sound/magic/ethereal_enter.ogg', 30)
-
-/spell/targeted/ethereal_jaunt/proc/jaunt_reappear(var/atom/movable/overlay/animation, var/mob/living/target)
- flick("reappear",animation)
- playsound(get_turf(target), 'sound/magic/ethereal_exit.ogg', 30)
-
-/spell/targeted/ethereal_jaunt/proc/jaunt_steam(var/mobloc)
- var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread()
- steam.set_up(10, 0, mobloc)
- steam.start()
-
-/obj/effect/dummy/spell_jaunt
- name = "water"
- icon = 'icons/effects/effects.dmi'
- icon_state = "nothing"
- var/canmove = 1
- var/reappearing = 0
- density = FALSE
- anchored = TRUE
- var/turf/last_valid_turf
-
-/obj/effect/dummy/spell_jaunt/Initialize()
- . = ..()
- last_valid_turf = get_turf(loc)
-
-/obj/effect/dummy/spell_jaunt/Destroy()
- // Eject contents if deleted somehow
- for(var/atom/movable/AM in src)
- AM.dropInto(loc)
- return ..()
-
-/obj/effect/dummy/spell_jaunt/relaymove(var/mob/user, direction)
- if (!canmove || reappearing) return
- var/turf/newLoc = get_step(src, direction)
- if(!(newLoc.turf_flags & TURF_FLAG_NOJAUNT))
- forceMove(newLoc)
- var/turf/T = get_turf(loc)
- if(!T.contains_dense_objects())
- last_valid_turf = T
- else
- to_chat(user, "Some strange aura is blocking the way!")
- canmove = 0
- addtimer(CALLBACK(src, PROC_REF(allow_move)), 2)
-
-/obj/effect/dummy/spell_jaunt/proc/allow_move()
- canmove = TRUE
-
-/obj/effect/dummy/spell_jaunt/explosion_act(blah)
- SHOULD_CALL_PARENT(FALSE)
- return
-
-/obj/effect/dummy/spell_jaunt/bullet_act(blah)
- return
diff --git a/code/modules/spells/targeted/exude_pleasantness.dm b/code/modules/spells/targeted/exude_pleasantness.dm
deleted file mode 100644
index 74ae51237ab..00000000000
--- a/code/modules/spells/targeted/exude_pleasantness.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/spell/targeted/exude_pleasantness
- name = "Exhude Pleasantness"
- desc = "A simple spell used to make friends with people. Be warned, this spell only has a subtle effect"
- feedback = "AP"
- school = "Illusion"
- spell_flags = INCLUDEUSER
- range = 5
- max_targets = 0
- charge_max = 100
- var/list/possible_messages = list("seems pretty trustworthy!", "makes you feel appreciated.", "looks pretty cool.", "feels like the only decent person here!", "makes you feel safe.")
- hud_state = "friendly"
-
-/spell/targeted/exude_pleasantness/cast(var/list/targets, var/mob/user)
- for(var/m in targets)
- var/mob/living/L = m
- if(L.mind && L.mind.assigned_special_role == "Spellbound Servant")
- to_chat(m, SPAN_NOTICE("\The [user] seems relatively harmless."))
- else
- to_chat(m, FONT_LARGE(SPAN_NOTICE("\The [user] [pick(possible_messages)]")))
\ No newline at end of file
diff --git a/code/modules/spells/targeted/genetic.dm b/code/modules/spells/targeted/genetic.dm
deleted file mode 100644
index bcc5233b9b6..00000000000
--- a/code/modules/spells/targeted/genetic.dm
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Other mutation or disability spells can be found in
-code\game\dna\genes\vg_powers.dm
-code\game\dna\genes\goon_disabilities.dm
-code\game\dna\genes\goon_powers.dm
-*/
-/spell/targeted/genetic
- name = "Genetic modifier"
- desc = "This spell inflicts a set of genetic conditions upon the target."
- duration = 10 SECONDS
- var/list/genetic_conditions = list()
-
-/spell/targeted/genetic/cast(list/targets)
- ..()
- for(var/mob/living/target in targets)
- for(var/x in genetic_conditions)
- target.add_genetic_condition(x, duration)
-
-/spell/targeted/genetic/blind
- name = "Blind"
- desc = "This spell inflicts a target with temporary blindness. Does not require wizard garb."
- feedback = "BD"
- school = "illusion"
- duration = 300
- charge_max = 300
- spell_flags = 0
- invocation = "Sty Kaly."
- invocation_type = SpI_WHISPER
- message = "Your eyes cry out in pain!"
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 1, Sp_POWER = 3)
- cooldown_min = 50
- range = 7
- max_targets = 0
- amt_eye_blind = 10
- amt_eye_blurry = 20
- hud_state = "wiz_blind"
- cast_sound = 'sound/magic/blind.ogg'
- genetic_conditions = list(GENE_COND_BLINDED)
-
-/spell/targeted/genetic/blind/empower_spell()
- if(!..())
- return 0
- duration += 10 SECONDS
- return "[src] will now blind for a longer period of time."
-
-/spell/targeted/genetic/blind/hysteria
- name = "Hysteria"
- desc = "A spell used to make someone look like a blind fool, and also makes them a blind fool."
- feedback = "HY"
- school = "illusion"
- spell_flags = SELECTABLE
- charge_max = 600
- invocation_type = SpI_SHOUT
- invocation = "Sty Di Kaly!"
- amt_dizziness = 10
- hud_state = "hysteria"
-
-/spell/targeted/genetic/blind/starburst
- name = "Starburst"
- desc = "Send a jolt of electricity through everyone's nerve center, blinding and stunning them."
- feedback = "SB"
- school = "transmutation"
- invocation = "Tid Caeh Yor!"
- spell_flags = NOFACTION
- invocation_type = SpI_SHOUT
- charge_max = 60 SECONDS
- spell_flags = 0
- amt_dizziness = 0
- amt_eye_blurry = 5
- amt_stunned = 1
- effect_state = "electricity_constant"
- effect_duration = 5
- hud_state = "wiz_starburst"
diff --git a/code/modules/spells/targeted/glimpse_of_eternity.dm b/code/modules/spells/targeted/glimpse_of_eternity.dm
deleted file mode 100644
index a4d783245ab..00000000000
--- a/code/modules/spells/targeted/glimpse_of_eternity.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/spell/targeted/glimpse_of_eternity
- name = "Glimpse of Eternity"
- desc = "Show the non-believers what enlightenment truely means."
- feedback = "GE"
- school = "illusion"
- invocation = "Ghe Tar Yet!"
- invocation_type = SpI_SHOUT
- spell_flags = INCLUDEUSER
- max_targets = 0
- charge_max = 400
- range = 3
-
- hud_state = "wiz_glimpse"
-
-/spell/targeted/glimpse_of_eternity/cast(var/list/targets, var/mob/user)
- for(var/t in targets)
- var/mob/living/L = t
- if(L.faction != user.faction) //Worse for non-allies
- SET_STATUS_MAX(L, STAT_BLIND, 5)
- SET_STATUS_MAX(L, STAT_STUN, 5)
- new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "electricity_constant")
- else
- SET_STATUS_MAX(L, STAT_BLIND, 2)
- L.heal_damage(BRUTE, 10, do_update_health = FALSE)
- L.heal_damage(BURN, 10)
- new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "green_sparkles")
\ No newline at end of file
diff --git a/code/modules/spells/targeted/projectile/dumbfire.dm b/code/modules/spells/targeted/projectile/dumbfire.dm
deleted file mode 100644
index 491a5f00f99..00000000000
--- a/code/modules/spells/targeted/projectile/dumbfire.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/spell/targeted/projectile/dumbfire
- selection_type = "range"
-
-/spell/targeted/projectile/dumbfire/choose_targets(mob/user = usr)
- var/list/targets = list()
-
- var/starting_dir = user.dir //where are we facing at the time of casting?
- var/turf/starting_turf = get_turf(user)
- var/current_turf = starting_turf
- for(var/i = 1; i <= src.range; i++)
- current_turf = get_step(current_turf, starting_dir)
- targets += current_turf
- return targets
\ No newline at end of file
diff --git a/code/modules/spells/targeted/projectile/fireball.dm b/code/modules/spells/targeted/projectile/fireball.dm
deleted file mode 100644
index ef65dc885f7..00000000000
--- a/code/modules/spells/targeted/projectile/fireball.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/spell/targeted/projectile/dumbfire/fireball
- name = "Fireball"
- desc = "A classic spell, grants you the ability to throw an exploding ball of flame in any direction. Does not require wizard garb."
- feedback = "FB"
- proj_type = /obj/item/projectile/spell_projectile/fireball
-
- school = "conjuration"
- charge_max = 10 SECONDS
- spell_flags = 0
- invocation = "Oni-Soma!"
- invocation_type = SpI_SHOUT
- range = 20
-
- level_max = list(Sp_TOTAL = 5, Sp_SPEED = 0, Sp_POWER = 5)
-
- duration = 20
- proj_step_delay = 1
-
- amt_dam_brute = 20
- amt_dam_fire = 25
-
- var/ex_severe = -1
- var/ex_heavy = 1
- var/ex_light = 2
- var/ex_flash = 5
-
- hud_state = "wiz_fireball"
- cast_sound = 'sound/magic/fireball.ogg'
-
-/spell/targeted/projectile/dumbfire/fireball/prox_cast(var/list/targets, spell_holder)
- for(var/mob/living/M in targets)
- apply_spell_damage(M)
- explosion(get_turf(spell_holder), ex_severe, ex_heavy, ex_light, ex_flash)
-
-/spell/targeted/projectile/dumbfire/fireball/empower_spell()
- if(!..())
- return 0
-
- if(spell_levels[Sp_POWER]%2 == 1)
- ex_severe++
- ex_heavy++
- ex_light++
- ex_flash++
-
- return "The spell [src] now has a larger explosion."
-
-//PROJECTILE
-
-/obj/item/projectile/spell_projectile/fireball
- name = "fireball"
- icon_state = "fireball"
-
-/spell/targeted/projectile/dumbfire/fireball/firebolt
- name = "Firebolt"
- desc = "A quick-casted fireball. Burns the user, and their enemies, but is much faster to shoot."
- feedback = "FO"
- charge_type = Sp_HOLDVAR
- invocation = "Ignus!"
- holder_var_type = "fireloss"
- holder_var_amount = 10
- amt_dam_brute = 10
- amt_dam_fire = 15
- ex_heavy = -1
- ex_light = 1
- ex_flash = 3
- hud_state = "firebolt"
\ No newline at end of file
diff --git a/code/modules/spells/targeted/projectile/magic_missile.dm b/code/modules/spells/targeted/projectile/magic_missile.dm
deleted file mode 100644
index 1d72399718a..00000000000
--- a/code/modules/spells/targeted/projectile/magic_missile.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/spell/targeted/projectile/magic_missile
- name = "Magic Missile"
- desc = "This spell fires several, slow moving, magic projectiles at nearby targets."
- feedback = "MM"
- school = "conjuration"
- charge_max = 150
- spell_flags = NEEDSCLOTHES
- invocation = "Forti Gy-Ama!"
- invocation_type = SpI_SHOUT
- range = 7
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 3)
- cooldown_min = 90 //15 deciseconds reduction per rank
-
- max_targets = 0
-
- proj_type = /obj/item/projectile/spell_projectile/seeking/magic_missile
- duration = 10
- proj_step_delay = 5
-
- hud_state = "wiz_mm"
- cast_sound = 'sound/magic/magic_missile.ogg'
- amt_paralysis = 3
- amt_stunned = 3
-
- amt_dam_fire = 10
-
-/spell/targeted/projectile/magic_missile/prox_cast(var/list/targets, atom/spell_holder)
- spell_holder.visible_message("\The [spell_holder] pops with a flash!")
- playsound(src, 'sound/magic/mm_hit.ogg', 40)
- for(var/mob/living/M in targets)
- apply_spell_damage(M)
- return
-
-/spell/targeted/projectile/magic_missile/empower_spell()
- if(!..())
- return 0
-
- if(spell_levels[Sp_POWER] == level_max[Sp_POWER])
- amt_paralysis += 2
- amt_stunned += 2
- return "[src] will now stun people for a longer duration."
- amt_dam_fire += 5
-
- return "[src] does more damage now."
-
-
-
-//PROJECTILE
-
-/obj/item/projectile/spell_projectile/seeking/magic_missile
- name = "magic missile"
- icon_state = "magicm"
-
- proj_trail = 1
- proj_trail_lifespan = 5
- proj_trail_icon_state = "magicmd"
diff --git a/code/modules/spells/targeted/projectile/passage.dm b/code/modules/spells/targeted/projectile/passage.dm
deleted file mode 100644
index b99e147bee2..00000000000
--- a/code/modules/spells/targeted/projectile/passage.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/spell/targeted/projectile/dumbfire/passage
- name = "Passage"
- desc = "throw a spell towards an area and teleport to it."
- feedback = "PA"
- proj_type = /obj/item/projectile/spell_projectile/passage
-
-
- school = "conjuration"
- charge_max = 250
- invocation = "A'YASAMA"
- invocation_type = SpI_SHOUT
- range = 15
-
-
- level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1)
- spell_flags = NEEDSCLOTHES
- duration = 15
-
- proj_step_delay = 1
-
- hud_state = "gen_project"
- cast_sound = 'sound/magic/lightning_bolt.ogg'
-
-/spell/targeted/projectile/dumbfire/passage/prox_cast(var/list/targets, atom/spell_holder)
- for(var/mob/living/L in targets)
- apply_spell_damage(L)
-
- var/turf/T = get_turf(spell_holder)
-
- holder.forceMove(T)
- var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread()
- S.set_up(3,0,T)
- S.start()
- playsound(src, 'sound/magic/lightningshock.ogg', 50)
-
-/spell/targeted/projectile/dumbfire/passage/empower_spell()
- if(!..())
- return 0
-
- amt_stunned += 3
-
- return "[src] now stuns those who get hit by it."
-
-/obj/item/projectile/spell_projectile/passage
- name = "spell"
- icon_state = "energy2"
\ No newline at end of file
diff --git a/code/modules/spells/targeted/projectile/projectile.dm b/code/modules/spells/targeted/projectile/projectile.dm
deleted file mode 100644
index 6df791094be..00000000000
--- a/code/modules/spells/targeted/projectile/projectile.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Projectile spells make special projectiles (obj/item/spell_projectile) and fire them at targets
-Dumbfire projectile spells fire directly ahead of the user
-spell_projectiles call their spell's (carried) prox_cast when they get in range of a target
-If the spell_projectile is seeking, it will update its target every process and follow them
-*/
-
-/spell/targeted/projectile
- range = 7
- var/proj_type = /obj/item/projectile/spell_projectile //use these. They are very nice
- var/proj_step_delay = 1 //lower = faster
- var/cast_prox_range = 1
-
-/spell/targeted/projectile/cast(list/targets, mob/user = usr)
- for(var/atom/target in targets)
- var/obj/item/projectile/projectile = new proj_type(user.loc, user.dir)
-
- if(!projectile)
- return
-
- if(istype(projectile, /obj/item/projectile/spell_projectile))
- var/obj/item/projectile/spell_projectile/SP = projectile
- SP.carried = src //casting is magical
- projectile.original = target
- projectile.starting = get_turf(user)
- projectile.shot_from = user //fired from the user
- projectile.current = projectile.original
- projectile.yo = target.y - user.y
- projectile.xo = target.x - user.x
- projectile.life_span = src.duration
- projectile.hitscan = !proj_step_delay
- projectile.step_delay = proj_step_delay
- projectile.launch(target)
- return
-
-/spell/targeted/projectile/proc/choose_prox_targets(mob/user = usr, var/atom/movable/spell_holder)
- var/list/targets = list()
- for(var/mob/living/M in range(spell_holder, cast_prox_range))
- if(M == user && !(spell_flags & INCLUDEUSER))
- continue
- targets += M
- return targets
-
-/spell/targeted/projectile/proc/prox_cast(var/list/targets, var/atom/movable/spell_holder)
- return targets
\ No newline at end of file
diff --git a/code/modules/spells/targeted/projectile/stuncuff.dm b/code/modules/spells/targeted/projectile/stuncuff.dm
deleted file mode 100644
index 52046381588..00000000000
--- a/code/modules/spells/targeted/projectile/stuncuff.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/spell/targeted/projectile/dumbfire/stuncuff
- name = "Stun Cuff"
- desc = "This spell fires out a small curse that stuns and cuffs the target."
- feedback = "SC"
- proj_type = /obj/item/projectile/spell_projectile/stuncuff
-
- charge_type = Sp_CHARGES
- charge_max = 6
- charge_counter = 6
- spell_flags = 0
- invocation = "Fu'Reai Diakan!"
- invocation_type = SpI_SHOUT
- range = 20
-
- level_max = list(Sp_TOTAL = 0, Sp_SPEED = 0, Sp_POWER = 0)
-
- duration = 20
- proj_step_delay = 1
-
- amt_stunned = 6
-
- hud_state = "wiz_cuff"
- cast_sound = 'sound/magic/wandodeath.ogg'
-
-/spell/targeted/projectile/dumbfire/stuncuff/prox_cast(var/list/targets, spell_holder)
- for(var/mob/living/M in targets)
- if(ishuman(M))
- var/mob/living/human/H = M
- var/obj/item/handcuffs/wizard/cuffs = new()
- H.equip_to_slot(cuffs, slot_handcuffed_str)
- H.visible_message("Beams of light form around \the [H]'s hands!")
- apply_spell_damage(M)
-
-
-/obj/item/handcuffs/wizard
- name = "beams of light"
- desc = "Undescribable and unpenetrable. Or so they say."
-
- breakouttime = 300 //30 seconds
-
-/obj/item/handcuffs/wizard/dropped(var/mob/user)
- ..()
- qdel(src)
-
-/obj/item/projectile/spell_projectile/stuncuff
- name = "stuncuff"
- icon_state = "spell"
\ No newline at end of file
diff --git a/code/modules/spells/targeted/shapeshift.dm b/code/modules/spells/targeted/shapeshift.dm
deleted file mode 100644
index ae5de55a0f7..00000000000
--- a/code/modules/spells/targeted/shapeshift.dm
+++ /dev/null
@@ -1,203 +0,0 @@
-//basic transformation spell. Should work for most simple_animals
-
-/spell/targeted/shapeshift
- name = "Shapeshift"
- desc = "This spell transforms the target into something else for a short while."
-
- school = "transmutation"
-
- charge_type = Sp_RECHARGE
- charge_max = 600
-
- duration = 0 //set to 0 for permanent.
-
- var/list/possible_transformations = list()
- var/list/newVars = list() //what the variables of the new created thing will be.
-
- cast_sound = 'sound/magic/charge.ogg'
- var/revert_sound = 'sound/magic/charge.ogg' //the sound that plays when something gets turned back.
- var/share_damage = 1 //do we want the damage we take from our new form to move onto our real one? (Only counts for finite duration)
- var/drop_items = 1 //do we want to drop all our items when we transform?
- var/toggle = 0 //Can we toggle this?
- var/list/transformed_dudes = list() //Who we transformed. Transformed = Transformation. Both mobs.
-
-/spell/targeted/shapeshift/cast(var/list/targets, mob/user)
- for(var/m in targets)
- var/mob/living/M = m
- if(M.stat == DEAD)
- to_chat(user, "[name] can only transform living targets.")
- continue
- if(M.buckled)
- M.buckled.unbuckle_mob()
- if(toggle && transformed_dudes.len && stop_transformation(M))
- continue
- var/new_mob = pick(possible_transformations)
-
- var/mob/living/trans = new new_mob(get_turf(M))
- for(var/varName in newVars) //stolen shamelessly from Conjure
- if(varName in trans.vars)
- trans.vars[varName] = newVars[varName]
- //Give them our languages
- for(var/decl/language/lang as anything in M.languages)
- trans.add_language(lang.type)
-
- trans.SetName("[trans.name] ([M])")
- if(ishuman(M) && drop_items)
- for(var/obj/item/I in M.contents)
- M.drop_from_inventory(I)
- if(M.mind)
- M.mind.transfer_to(trans)
- else
- trans.key = M.key
- new /obj/effect/temporary(get_turf(M), 5, 'icons/effects/effects.dmi', "summoning")
-
- M.forceMove(trans) //move inside the new dude to hide him.
- M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING
- transformed_dudes[trans] = M
- events_repository.register(/decl/observ/death, trans,src, TYPE_PROC_REF(/spell/targeted/shapeshift, stop_transformation))
- events_repository.register(/decl/observ/destroyed, trans,src, TYPE_PROC_REF(/spell/targeted/shapeshift, stop_transformation))
- events_repository.register(/decl/observ/destroyed, M, src, TYPE_PROC_REF(/spell/targeted/shapeshift, destroyed_transformer))
- if(duration)
- spawn(duration)
- stop_transformation(trans)
-
-/spell/targeted/shapeshift/proc/destroyed_transformer(var/mob/target) //Juuuuust in case
- var/mob/current = transformed_dudes[target]
- to_chat(current, "You suddenly feel as if this transformation has become permanent...")
- remove_target(target)
-
-/spell/targeted/shapeshift/proc/stop_transformation(var/mob/living/target)
- var/mob/living/transformer = transformed_dudes[target]
- if(!transformer)
- return FALSE
- transformer.status_flags &= ~GODMODE
- if(share_damage)
- var/transformer_max_health = transformer.get_max_health()
- var/damage = transformer.set_max_health(transformer_max_health-round(transformer_max_health*(transformer.get_health_ratio())))
- for(var/i in 1 to ceil(damage/10))
- transformer.take_damage(10)
- if(target.mind)
- target.mind.transfer_to(transformer)
- else
- transformer.key = target.key
- playsound(get_turf(target), revert_sound, 50, 1)
- transformer.forceMove(get_turf(target))
- remove_target(target)
- qdel(target)
- return TRUE
-
-/spell/targeted/shapeshift/proc/remove_target(var/mob/living/target)
- var/mob/current = transformed_dudes[target]
- events_repository.unregister(/decl/observ/destroyed, target,src)
- events_repository.unregister(/decl/observ/death, current,src)
- events_repository.unregister(/decl/observ/destroyed, current,src)
- transformed_dudes[target] = null
- transformed_dudes -= target
-
-/spell/targeted/shapeshift/baleful_polymorph
- name = "Baleful Polymorth"
- desc = "This spell transforms its target into a small, furry animal."
- feedback = "BP"
- possible_transformations = list(
- /mob/living/simple_animal/lizard,
- /mob/living/simple_animal/passive/mouse,
- /mob/living/simple_animal/passive/mouse/rat,
- /mob/living/simple_animal/corgi
- )
-
- share_damage = 0
- invocation = "Yo'balada!"
- invocation_type = SpI_SHOUT
- spell_flags = NEEDSCLOTHES | SELECTABLE
- range = 3
- duration = 150 //15 seconds.
- cooldown_min = 200 //20 seconds
-
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2)
-
- newVars = list("health" = 50, "max_health" = 50)
-
- hud_state = "wiz_poly"
-
-
-/spell/targeted/shapeshift/baleful_polymorph/empower_spell()
- if(!..())
- return 0
-
- duration += 50
-
- return "Your target will now stay in their polymorphed form for [duration/10] seconds."
-
-/spell/targeted/shapeshift/avian
- name = "Polymorph"
- desc = "This spell transforms the wizard into the common parrot."
- feedback = "AV"
- possible_transformations = list(/mob/living/simple_animal/hostile/parrot)
-
- drop_items = 0
- share_damage = 0
- invocation = "Poli'crakata!"
- invocation_type = SpI_SHOUT
- spell_flags = INCLUDEUSER
- range = -1
- duration = 150
- charge_max = 600
- cooldown_min = 300
- level_max = list(Sp_TOTAL = 1, Sp_SPEED = 1, Sp_POWER = 0)
- hud_state = "wiz_parrot"
-
-/spell/targeted/shapeshift/corrupt_form
- name = "Corrupt Form"
- desc = "This spell shapes the wizard into a terrible, terrible beast."
- feedback = "CF"
- possible_transformations = list(/mob/living/simple_animal/hostile/revenant)
-
- invocation = "mutters something dark and twisted as their form begins to twist..."
- invocation_type = SpI_EMOTE
- spell_flags = INCLUDEUSER
- range = -1
- duration = 150
- charge_max = 1200
- cooldown_min = 600
-
- drop_items = 0
- share_damage = 0
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 2, Sp_POWER = 2)
-
- newVars = list("name" = "corrupted soul")
-
- hud_state = "wiz_corrupt"
- cast_sound = 'sound/magic/disintegrate.ogg'
-
-/spell/targeted/shapeshift/corrupt_form/empower_spell()
- if(!..())
- return 0
-
- switch(spell_levels[Sp_POWER])
- if(1)
- duration *= 2
- return "You will now stay corrupted for [duration/10] seconds."
- if(2)
- newVars = list("name" = "\proper corruption incarnate",
- "melee_damage_upper" = 25,
- "resistance" = 6,
- "health" = 125,
- "max_health" = 125)
- duration = 0
- return "You revel in the corruption. There is no turning back."
-
-/spell/targeted/shapeshift/familiar
- name = "Transform"
- desc = "Transform into a familiar form. Literally."
- feedback = "FA"
- possible_transformations = list()
- drop_items = 0
- invocation_type = SpI_EMOTE
- invocation = "'s body dissipates into a pale mass of light, then reshapes!"
- range = -1
- spell_flags = INCLUDEUSER
- duration = 0
- charge_max = 2 MINUTES
- toggle = 1
-
- hud_state = "wiz_carp"
\ No newline at end of file
diff --git a/code/modules/spells/targeted/shatter_mind.dm b/code/modules/spells/targeted/shatter_mind.dm
deleted file mode 100644
index f84d6765035..00000000000
--- a/code/modules/spells/targeted/shatter_mind.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/spell/targeted/shatter
- name = "Shatter Mind"
- desc = "Assaults the mind of the target with fear of the unknown, shattering their sanity and causing brain damage."
- feedback = "SM"
- school = "illusion"
- charge_max = 300
- spell_flags = 0
- invocation_type = SpI_NONE
- range = 5
- max_targets = 1
- compatible_mobs = list(/mob/living/human)
-
- time_between_channels = 150
- number_of_channels = 0
-
- hud_state = "wiz_statue"
-
-/spell/targeted/shatter/cast(var/list/targets, var/mob/user)
- var/mob/living/human/H = targets[1]
- if(prob(50))
- sound_to(user, get_sfx("swing_hit"))
- if(prob(5))
- to_chat(H, "You feel unhinged.")
- H.adjust_hallucination(5,5)
- ADJ_STATUS(H, STAT_CONFUSE, 2)
- ADJ_STATUS(H, STAT_DIZZY, 2)
- if(H.hallucination_power > 50)
- H.take_damage(5, BRAIN)
- to_chat(H, "You feel your mind tearing apart!")
\ No newline at end of file
diff --git a/code/modules/spells/targeted/shift.dm b/code/modules/spells/targeted/shift.dm
deleted file mode 100644
index 2b53b60d244..00000000000
--- a/code/modules/spells/targeted/shift.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/spell/targeted/ethereal_jaunt/shift
- name = "Phase Shift"
- desc = "This spell allows you to pass through walls"
-
- charge_max = 200
- spell_flags = Z2NOCAST | INCLUDEUSER | CONSTRUCT_CHECK
- invocation_type = SpI_NONE
- range = -1
- duration = 50 //in deciseconds
-
- hud_state = "const_shift"
-
-/spell/targeted/ethereal_jaunt/shift/jaunt_disappear(var/atom/movable/overlay/animation, var/mob/living/target)
- animation.icon_state = "phase_shift"
- animation.set_dir(target.dir)
- flick("phase_shift",animation)
-
-/spell/targeted/ethereal_jaunt/shift/jaunt_reappear(var/atom/movable/overlay/animation, var/mob/living/target)
- animation.icon_state = "phase_shift2"
- animation.set_dir(target.dir)
- flick("phase_shift2",animation)
-
-/spell/targeted/ethereal_jaunt/shift/jaunt_steam(var/mobloc)
- return
\ No newline at end of file
diff --git a/code/modules/spells/targeted/subjugate.dm b/code/modules/spells/targeted/subjugate.dm
deleted file mode 100644
index 700dac35b36..00000000000
--- a/code/modules/spells/targeted/subjugate.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/spell/targeted/subjugation
- name = "Subjugation"
- desc = "This spell temporarily subjugates a target's mind and does not require wizard garb."
- feedback = "SJ"
- school = "illusion"
- charge_max = 500
- spell_flags = NOFACTION
- invocation = "Dii Oda Baji."
- invocation_type = SpI_WHISPER
-
- message = "You suddenly feel completely overwhelmed!"
-
- max_targets = 1
-
- level_max = list(Sp_TOTAL = 3, Sp_SPEED = 0, Sp_POWER = 3)
-
- amt_dizziness = 100
- amt_confused = 100
- amt_stuttering = 100
-
- compatible_mobs = list(/mob/living/human)
-
- hud_state = "wiz_subj"
-
-/spell/targeted/subjugation/empower_spell()
- if(!..())
- return 0
-
- if(spell_levels[Sp_POWER] == level_max[Sp_POWER])
- max_targets = 0
-
- return "[src] will now effect everyone in the area."
- else
- max_targets++
- return "[src] will now effect [max_targets] people."
\ No newline at end of file
diff --git a/code/modules/spells/targeted/swap.dm b/code/modules/spells/targeted/swap.dm
deleted file mode 100644
index 150bd903077..00000000000
--- a/code/modules/spells/targeted/swap.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/spell/targeted/swap
- name = "swap"
- desc = "This spell swaps the positions of the wizard and a target. Causes brain damage."
- feedback = "SW"
- school = "conjuration"
-
- charge_type = Sp_HOLDVAR
- holder_var_type = "brainloss"
- holder_var_amount = 10
-
- invocation = "Joyo!"
- invocation_type = SpI_WHISPER
-
- level_max = list(Sp_TOTAL = 2, Sp_SPEED = 0, Sp_POWER = 2)
-
- spell_flags = Z2NOCAST
- range = 6
- max_targets = 1
- compatible_mobs = list(/mob/living)
-
- hud_state = "wiz_swap"
-
- cast_sound = 'sound/magic/mandswap.ogg'
-
-/spell/targeted/swap/cast(var/list/targets, mob/user)
- for(var/mob/T in targets)
- var/turf/aT = get_turf(T)
- var/turf/bT = get_turf(user)
-
- T.forceMove(bT)
- user.forceMove(aT)
-
- apply_spell_damage(T)
-
-/spell/targeted/swap/empower_spell()
- if(!..())
- return 0
-
- amt_eye_blind += 2
-
- return "This spell will now blind the target."
diff --git a/code/modules/spells/targeted/targeted.dm b/code/modules/spells/targeted/targeted.dm
deleted file mode 100644
index 46e6e242b26..00000000000
--- a/code/modules/spells/targeted/targeted.dm
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-Targeted spells (with the exception of dumbfire) select from all the mobs in the defined range
-Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are explained in setup.dm
-*/
-
-
-/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob
- var/max_targets = 1 //leave 0 for unlimited targets in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range
- var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast
-
-
- var/amt_weakened = 0
- var/amt_paralysis = 0
- var/amt_stunned = 0
-
- var/amt_dizziness = 0
- var/amt_confused = 0
- var/amt_stuttering = 0
-
- //set to negatives for healing unless commented otherwise
- var/amt_dam_fire = 0
- var/amt_dam_brute = 0
- var/amt_dam_oxy = 0
- var/amt_dam_tox = 0
- var/amt_dam_robo = 0
- var/amt_brain = 0
- var/amt_radiation = 0
- var/amt_blood = 0 //Positive numbers to add blood
- var/amt_organ = 0 //Positive numbers for healing
-
- var/amt_eye_blind = 0
- var/amt_eye_blurry = 0
-
- var/effect_state = null //What effect to show on each, if any
- var/effect_duration = 0
- var/effect_color = "#ffffff"
-
- var/list/compatible_mobs = list()
-
-
-/spell/targeted/choose_targets(mob/user = usr)
- var/list/targets = list()
-
- if(max_targets == 0) //unlimited
- if(range == -2)
- targets = global.living_mob_list_
- else
- for(var/mob/living/target in view_or_range(range, holder, selection_type))
- targets += target
-
- else if(max_targets == 1) //single target can be picked
- if((range == 0 || range == -1) && spell_flags & INCLUDEUSER)
- targets += user
- else
- var/list/possible_targets = list()
- var/list/starting_targets
- if(range == -2)
- starting_targets = global.living_mob_list_
- else
- starting_targets = view_or_range(range, holder, selection_type)
-
- for(var/mob/living/M in starting_targets)
- if(!(spell_flags & INCLUDEUSER) && M == user)
- continue
- if((spell_flags & NOFACTION) && user.faction == M.faction)
- continue
- if((spell_flags & NONONFACTION) && user.faction != M.faction)
- continue
- if(compatible_mobs && compatible_mobs.len)
- if(!is_type_in_list(M, compatible_mobs)) continue
- if(compatible_mobs && compatible_mobs.len && !is_type_in_list(M, compatible_mobs))
- continue
- possible_targets += M
-
- if(possible_targets.len)
- if(spell_flags & SELECTABLE) //if we are allowed to choose. see setup.dm for details
- var/mob/temp_target = input(user, "Choose the target for the spell.", "Targeting") as null|mob in possible_targets
- if(temp_target)
- targets += temp_target
- else
- targets += pick(possible_targets)
- //Adds a safety check post-input to make sure those targets are actually in range.
-
-
- else
- var/list/possible_targets = list()
- var/list/starting_targets
-
- if(range == -2)
- starting_targets = global.living_mob_list_
- else
- starting_targets = view_or_range(range, holder, selection_type)
-
- for(var/mob/living/target in starting_targets)
- if(!(spell_flags & INCLUDEUSER) && target == user)
- continue
- if(compatible_mobs && !is_type_in_list(target, compatible_mobs))
- continue
- possible_targets += target
-
- if(spell_flags & SELECTABLE)
- for(var/i = 1; i<=max_targets, i++)
- if(!possible_targets.len)
- break
- var/mob/M = input(user, "Choose the target for the spell.", "Targeting") as null|mob in possible_targets
- if(!M)
- break
- if(range != -2)
- if(!(M in view_or_range(range, holder, selection_type)))
- continue
- targets += M
- possible_targets -= M
- else
- for(var/i=1,i<=max_targets,i++)
- if(!possible_targets.len)
- break
- if(target_ignore_prev)
- var/target = pick(possible_targets)
- possible_targets -= target
- targets += target
- else
- targets += pick(possible_targets)
-
- if(!(spell_flags & INCLUDEUSER) && (user in targets))
- targets -= user
-
- if(compatible_mobs && compatible_mobs.len)
- for(var/mob/living/target in targets) //filters out all the non-compatible mobs
- if(!is_type_in_list(target, compatible_mobs))
- targets -= target
-
- return targets
-
-/spell/targeted/cast(var/list/targets, mob/user)
- for(var/mob/living/target in targets)
- if(range >= 0)
- if(!(target in view_or_range(range, holder, selection_type))) //filter at time of casting
- targets -= target
- continue
- apply_spell_damage(target)
-
-/spell/targeted/proc/apply_spell_damage(mob/living/target)
- target.take_damage(amt_dam_brute, do_update_health = FALSE)
- target.take_damage(amt_dam_fire, BURN, do_update_health = FALSE)
- target.take_damage(amt_dam_tox, TOX, do_update_health = FALSE)
- target.take_damage(amt_dam_oxy, OXY)
- if(ishuman(target))
- var/mob/living/human/H = target
- for(var/obj/item/organ/internal/affecting in H.get_internal_organs())
- if(affecting && istype(affecting))
- affecting.heal_damage(amt_organ, amt_organ)
- for(var/obj/item/organ/external/affecting in H.get_external_organs())
- if(affecting && istype(affecting))
- var/dam = BP_IS_PROSTHETIC(affecting) ? -amt_dam_robo : amt_organ
- affecting.heal_damage(dam, dam, robo_repair = BP_IS_PROSTHETIC(affecting))
- H.adjust_blood(amt_blood)
- H.take_damage(amt_brain, BRAIN)
- H.radiation += min(H.radiation, amt_radiation)
-
- target.update_icon()
- //disabling
- SET_STATUS_MAX(target, STAT_WEAK, amt_weakened)
- SET_STATUS_MAX(target, STAT_PARA, amt_paralysis)
- SET_STATUS_MAX(target, STAT_STUN, amt_stunned)
- if(amt_weakened || amt_paralysis || amt_stunned)
- if(target.buckled)
- target.buckled = null
- ADJ_STATUS(target, STAT_BLIND, amt_eye_blind)
- ADJ_STATUS(target, STAT_BLURRY, amt_eye_blurry)
- ADJ_STATUS(target, STAT_DIZZY, amt_dizziness)
- ADJ_STATUS(target, STAT_CONFUSE, amt_confused)
- ADJ_STATUS(target, STAT_STUTTER, amt_stuttering)
- if(effect_state)
- var/obj/o = new /obj/effect/temporary(get_turf(target), effect_duration, 'icons/effects/effects.dmi', effect_state)
- o.color = effect_color
\ No newline at end of file
diff --git a/code/modules/spells/targeted/torment.dm b/code/modules/spells/targeted/torment.dm
deleted file mode 100644
index e98836699f3..00000000000
--- a/code/modules/spells/targeted/torment.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/spell/targeted/torment
- name = "Torment"
- desc = "Darkness stabs at the bodies of those around you. All within a medium range will suffer significant pain."
- feedback = "TM"
- school = "illusion"
- charge_max = 150
- spell_flags = NOFACTION
- invocation = "Rai Di-Kaal!"
- invocation_type = SpI_SHOUT
- range = 5
- level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1)
- cooldown_min = 50
- message = "So much pain! All you can hear is screaming!"
-
- max_targets = 0
- compatible_mobs = list(/mob/living/human)
-
- var/loss = 30
-
- hud_state = "wiz_horse"
- cast_sound = 'sound/magic/cowhead_curse.ogg'
-
-/spell/targeted/torment/cast(var/list/targets, var/mob/user)
- user.spawn_gibber()
- for(var/mob/living/human/H in targets)
- H.take_damage(loss, PAIN)
-
-/spell/targeted/torment/empower_spell()
- if(!..())
- return 0
-
- loss += 30
-
- return "[src] will now cause more pain."
\ No newline at end of file
diff --git a/code/modules/sprite_accessories/metadata/accessory_metadata_gradient.dm b/code/modules/sprite_accessories/metadata/accessory_metadata_gradient.dm
index 8b5d7b48734..d134b6782f8 100644
--- a/code/modules/sprite_accessories/metadata/accessory_metadata_gradient.dm
+++ b/code/modules/sprite_accessories/metadata/accessory_metadata_gradient.dm
@@ -19,8 +19,7 @@
var/list/selectable_labels_to_states = list()
/decl/sprite_accessory_metadata/gradient/Initialize()
- var/list/selectable = icon_states(icon)
- for(var/state in selectable)
+ for(var/state in get_states_in_icon_cached(icon))
if(!selectable_states_to_labels[state])
selectable_states_to_labels[state] = capitalize(state)
for(var/state in selectable_states_to_labels)
diff --git a/code/modules/submaps/_submap.dm b/code/modules/submaps/_submap.dm
index 20404728d37..c2fde5b895d 100644
--- a/code/modules/submaps/_submap.dm
+++ b/code/modules/submaps/_submap.dm
@@ -26,7 +26,7 @@
archetype = _archetype
if(!pref_name)
- pref_name = archetype.descriptor
+ pref_name = archetype.name
testing("Starting submap setup - '[name]', [archetype], [associated_z]z.")
@@ -41,7 +41,7 @@
jobs[job.title] = job
if(!associated_z)
- testing( "Submap error - [name]/[archetype ? archetype.descriptor : "NO ARCHETYPE"] could not find an associated z-level for spawnpoint registration.")
+ testing( "Submap error - [name]/[archetype ? archetype.name : "NO ARCHETYPE"] could not find an associated z-level for spawnpoint registration.")
qdel(src)
return
@@ -59,7 +59,7 @@
registered_spawnpoint = TRUE
if(!registered_spawnpoint)
- testing( "Submap error - [name]/[archetype ? archetype.descriptor : "NO ARCHETYPE"] has no job spawn points.")
+ testing( "Submap error - [name]/[archetype ? archetype.name : "NO ARCHETYPE"] has no job spawn points.")
qdel(src)
return
diff --git a/code/modules/submaps/submap_archetype.dm b/code/modules/submaps/submap_archetype.dm
index be118fa8202..9597b64f1f6 100644
--- a/code/modules/submaps/submap_archetype.dm
+++ b/code/modules/submaps/submap_archetype.dm
@@ -1,5 +1,6 @@
/decl/submap_archetype
- var/descriptor = "generic ship archetype"
+ // TODO: use UID instead of name for pref saving.
+ var/name = "generic ship archetype"
var/list/whitelisted_species = list()
var/list/blacklisted_species = list()
var/call_webhook
@@ -13,12 +14,18 @@
/decl/submap_archetype/validate()
. = ..()
- if(!descriptor)
- . += "no descriptor set"
+ if(name)
+ var/static/list/submaps_by_name = list( (global.using_map.name) = global.using_map.type)
+ if(submaps_by_name[name])
+ . += "name '[name]' ([type]) collides with submap type '[submaps_by_name[name]]'"
+ else
+ submaps_by_name[name] = type
+ else
+ . += "no name set"
// Generic ships to populate the list.
/decl/submap_archetype/derelict
- descriptor = "drifting wreck"
+ name = "drifting wreck"
/decl/submap_archetype/abandoned_ship
- descriptor = "abandoned ship"
+ name = "abandoned ship"
diff --git a/code/modules/submaps/submap_job.dm b/code/modules/submaps/submap_job.dm
index 49e6622328e..89d8b2f3871 100644
--- a/code/modules/submaps/submap_job.dm
+++ b/code/modules/submaps/submap_job.dm
@@ -7,7 +7,8 @@
create_record = FALSE
total_positions = 4
outfit_type = /decl/outfit/job/survivor
- hud_icon = "hudblank"
+ hud_icon_state = "hudblank"
+ hud_icon = null
available_by_default = FALSE
allowed_ranks = null
allowed_branches = null
@@ -55,7 +56,12 @@
if(islist(blacklisted_species) && !length(blacklisted_species))
blacklisted_species |= SSmodpacks.default_submap_blacklisted_species
- if(!abstract_job)
+ if(abstract_job)
+ if(!hud_icon)
+ hud_icon = global.using_map.hud_icons
+ if(!hud_icon_state)
+ hud_icon_state = "hud[ckey(title)]"
+ else
spawnpoints = list()
owner = _owner
..()
@@ -78,17 +84,17 @@
to_chat(feedback, "Not old enough. Minimum character age is [minimum_character_age[S.get_root_species_name()]].")
return TRUE
if(LAZYLEN(whitelisted_species) && !(prefs.species in whitelisted_species))
- to_chat(feedback, "Your current species, [prefs.species], is not permitted as [title] on \a [owner.archetype.descriptor].")
+ to_chat(feedback, "Your current species, [prefs.species], is not permitted as [title] on \a [owner.archetype.name].")
return TRUE
if(prefs.species in blacklisted_species)
- to_chat(feedback, "Your current species, [prefs.species], is not permitted as [title] on \a [owner.archetype.descriptor].")
+ to_chat(feedback, "Your current species, [prefs.species], is not permitted as [title] on \a [owner.archetype.name].")
return TRUE
if(owner && owner.archetype)
if(LAZYLEN(owner.archetype.whitelisted_species) && !(prefs.species in owner.archetype.whitelisted_species))
- to_chat(feedback, "Your current species, [prefs.species], is not permitted on \a [owner.archetype.descriptor].")
+ to_chat(feedback, "Your current species, [prefs.species], is not permitted on \a [owner.archetype.name].")
return TRUE
if(prefs.species in owner.archetype.blacklisted_species)
- to_chat(feedback, "Your current species, [prefs.species], is not permitted on \a [owner.archetype.descriptor].")
+ to_chat(feedback, "Your current species, [prefs.species], is not permitted on \a [owner.archetype.name].")
return TRUE
return FALSE
diff --git a/code/modules/surgery/_surgery.dm b/code/modules/surgery/_surgery.dm
index 11b61a35b24..fe4eb699d91 100644
--- a/code/modules/surgery/_surgery.dm
+++ b/code/modules/surgery/_surgery.dm
@@ -236,7 +236,7 @@ var/global/list/surgery_tool_exception_cache = list()
/obj/item/proc/do_surgery(mob/living/M, mob/living/user, fuckup_prob)
// Check for the Hippocratic oath.
- if(!istype(M) || !istype(user) || user.a_intent == I_HURT)
+ if(!istype(M) || !istype(user) || user.check_intent(I_FLAG_HARM))
return FALSE
// Check for multi-surgery drifting.
@@ -292,7 +292,7 @@ var/global/list/surgery_tool_exception_cache = list()
return TRUE
// If we're on an optable, we are protected from some surgery fails. Bypass this for some items (like health analyzers).
- if((locate(/obj/machinery/optable) in get_turf(M)) && user.a_intent == I_HELP)
+ if((locate(/obj/machinery/optable) in get_turf(M)) && user.check_intent(I_FLAG_HELP))
// Keep track of which tools we know aren't appropriate for surgery on help intent.
if(global.surgery_tool_exception_cache[type])
return FALSE
@@ -304,7 +304,7 @@ var/global/list/surgery_tool_exception_cache = list()
return TRUE
// Otherwise we can make a start on surgery!
- else if(istype(M) && !QDELETED(M) && user.a_intent != I_HURT && user.get_active_held_item() == src)
+ else if(istype(M) && !QDELETED(M) && !user.check_intent(I_FLAG_HARM) && user.get_active_held_item() == src)
// Double-check this in case it changed between initial check and now.
if(zone in global.surgeries_in_progress[operation_ref])
to_chat(user, SPAN_WARNING("You can't operate on this area while surgery is already in progress."))
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 78f9c9cbfea..f9d54f3b125 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -245,7 +245,7 @@
return ..()
/decl/surgery_step/generic/amputate/proc/is_clean(var/mob/user, var/obj/item/tool, var/mob/target)
- . = (user.a_intent != I_HELP) ? FALSE : (can_operate(target) >= OPERATE_OKAY && istype(tool, /obj/item/circular_saw))
+ . = (!user.check_intent(I_FLAG_HELP)) ? FALSE : (can_operate(target) >= OPERATE_OKAY && istype(tool, /obj/item/circular_saw))
/decl/surgery_step/generic/amputate/get_speed_modifier(var/mob/user, var/mob/target, var/obj/item/tool, var/tool_archetype)
. = ..()
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 1b8ef1751a0..be2f0f6b69d 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -21,6 +21,12 @@
affected.take_external_damage(20, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
..()
+/decl/surgery_step/cavity/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool, target_zone)
+ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
+ if(!affected || !BP_IS_PROSTHETIC(affected) || BP_IS_CRYSTAL(affected))
+ return ..()
+ return SURGERY_SKILLS_ROBOTIC
+
//////////////////////////////////////////////////////////////////
// create implant space surgery step
//////////////////////////////////////////////////////////////////
@@ -38,16 +44,16 @@
/decl/surgery_step/cavity/make_space/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] starts making some space inside [target]'s [affected.cavity_name] cavity with \the [tool].", \
- "You start making some space inside [target]'s [affected.cavity_name] cavity with \the [tool]." )
+ user.visible_message("[user] starts making some space inside [target]'s [affected.cavity_name] with \the [tool].", \
+ "You start making some space inside [target]'s [affected.cavity_name] with \the [tool]." )
target.custom_pain("The pain in your chest is living hell!",1,affecting = affected)
affected.cavity = TRUE
..()
/decl/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] makes some space inside [target]'s [affected.cavity_name] cavity with \the [tool].", \
- "You make some space inside [target]'s [affected.cavity_name] cavity with \the [tool]." )
+ user.visible_message("[user] makes some space inside [target]'s \the [affected.cavity_name] with \the [tool].", \
+ "You make some space inside [target]'s \the [affected.cavity_name] with \the [tool]." )
..()
//////////////////////////////////////////////////////////////////
@@ -70,15 +76,15 @@
/decl/surgery_step/cavity/close_space/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] starts mending [target]'s [affected.cavity_name] cavity wall with \the [tool].", \
- "You start mending [target]'s [affected.cavity_name] cavity wall with \the [tool]." )
+ user.visible_message("[user] starts mending [target]'s \the [affected.cavity_name] wall with \the [tool].", \
+ "You start mending [target]'s \the [affected.cavity_name] wall with \the [tool]." )
target.custom_pain("The pain in your chest is living hell!",1,affecting = affected)
..()
/decl/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] mends [target]'s [affected.cavity_name] cavity walls with \the [tool].", \
- "You mend [target]'s [affected.cavity_name] cavity walls with \the [tool]." )
+ user.visible_message("[user] mends [target]'s \the [affected.cavity_name] walls with \the [tool].", \
+ "You mend [target]'s \the [affected.cavity_name] walls with \the [tool]." )
affected.cavity = FALSE
..()
@@ -109,7 +115,7 @@
if(affected && affected.cavity)
var/max_volume = BASE_STORAGE_CAPACITY(affected.cavity_max_w_class) + affected.internal_organs_size
if(tool.w_class > affected.cavity_max_w_class)
- to_chat(user, SPAN_WARNING("\The [tool] is too big for [affected.cavity_name] cavity."))
+ to_chat(user, SPAN_WARNING("\The [tool] is too big for \the [affected.cavity_name]."))
return FALSE
var/total_volume = tool.get_storage_cost()
for(var/obj/item/I in affected.implants)
@@ -119,14 +125,14 @@
for(var/obj/item/organ/internal/org in affected.internal_organs)
max_volume -= org.get_storage_cost()
if(total_volume > max_volume)
- to_chat(user, SPAN_WARNING("There isn't enough space left in [affected.cavity_name] cavity for [tool]."))
+ to_chat(user, SPAN_WARNING("There isn't enough space left in \the [affected.cavity_name] for [tool]."))
return FALSE
return TRUE
/decl/surgery_step/cavity/place_item/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] starts putting \the [tool] inside [target]'s [affected.cavity_name] cavity.", \
- "You start putting \the [tool] inside [target]'s [affected.cavity_name] cavity." )
+ user.visible_message("[user] starts putting \the [tool] inside [target]'s \the [affected.cavity_name].", \
+ "You start putting \the [tool] inside [target]'s \the [affected.cavity_name]." )
target.custom_pain("The pain in your chest is living hell!",1,affecting = affected)
..()
@@ -134,8 +140,8 @@
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
if(!user.try_unequip(tool, affected))
return
- user.visible_message("[user] puts \the [tool] inside [target]'s [affected.cavity_name] cavity.", \
- "You put \the [tool] inside [target]'s [affected.cavity_name] cavity." )
+ user.visible_message("[user] puts \the [tool] inside [target]'s \the [affected.cavity_name].", \
+ "You put \the [tool] inside [target]'s \the [affected.cavity_name]." )
if (tool.w_class > affected.cavity_max_w_class/2 && prob(50) && !BP_IS_PROSTHETIC(affected) && affected.sever_artery())
to_chat(user, "You tear some blood vessels trying to fit such a big object in this cavity.")
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1,affecting = affected)
diff --git a/code/modules/surgery/necrotic.dm b/code/modules/surgery/necrotic.dm
index 14b39b1f739..6f41080ae0d 100644
--- a/code/modules/surgery/necrotic.dm
+++ b/code/modules/surgery/necrotic.dm
@@ -133,15 +133,15 @@
var/list/dead_organs
if(E.status & ORGAN_DEAD)
var/image/radial_button = image(icon = E.icon, icon_state = E.icon_state)
- radial_button.name = "Regenerate \the [E.name]"
+ radial_button.name = "Regenerate \the [E]"
LAZYSET(dead_organs, E.organ_tag, radial_button)
for(var/obj/item/organ/I in target.get_internal_organs())
if(I && (I.status & ORGAN_DEAD) && I.parent_organ == target_zone)
if(!I.can_recover())
- to_chat(user, SPAN_WARNING("\The [I.name] is beyond saving."))
+ to_chat(user, SPAN_WARNING("\The [I] is beyond saving."))
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
- radial_button.name = "Regenerate \the [I.name]"
+ radial_button.name = "Regenerate \the [I]"
LAZYSET(dead_organs, I.organ_tag, radial_button)
if(!LAZYLEN(dead_organs))
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index f6b9bffb28e..76b37e9eb8d 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -104,7 +104,7 @@
for(var/obj/item/organ/I in target.get_internal_organs())
if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
- radial_button.name = "Detach \the [I.name]"
+ radial_button.name = "Detach \the [I]"
LAZYSET(attached_organs, I.organ_tag, radial_button)
if(!LAZYLEN(attached_organs))
to_chat(user, SPAN_WARNING("You can't find any organs to separate."))
@@ -158,7 +158,7 @@
for(var/obj/item/organ/internal/I in affected.implants)
if(I.status & ORGAN_CUT_AWAY)
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
- radial_button.name = "Remove \the [I.name]"
+ radial_button.name = "Remove \the [I]"
LAZYSET(removable_organs, I, radial_button)
if(!LAZYLEN(removable_organs))
to_chat(user, SPAN_WARNING("You can't find any removable organs."))
@@ -262,7 +262,7 @@
return FALSE
if(O.w_class > affected.cavity_max_w_class)
- to_chat(user, SPAN_WARNING("\The [O.name] [pronouns.is] too big for [affected.cavity_name] cavity!"))
+ to_chat(user, SPAN_WARNING("\The [O.name] [pronouns.is] too big for \the [affected.cavity_name]!"))
return FALSE
var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, O.organ_tag)
@@ -336,7 +336,7 @@
for(var/obj/item/organ/I in (affected.implants|affected.internal_organs))
if(I.status & ORGAN_CUT_AWAY)
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
- radial_button.name = "Attach \the [I.name]"
+ radial_button.name = "Attach \the [I]"
LAZYSET(attachable_organs, I, radial_button)
if(!LAZYLEN(attachable_organs))
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 06fe754e5de..ca8806692a1 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -181,7 +181,7 @@
/decl/surgery_step/sterilize/Initialize()
. = ..()
- for(var/decl/material/liquid/ethanol/booze in decls_repository.get_decls_of_type_unassociated(/decl/material/liquid/ethanol))
+ for(var/decl/material/liquid/alcohol/booze in decls_repository.get_decls_of_subtype_unassociated(/decl/material/liquid/alcohol))
if(booze.strength <= 40)
sterilizing_reagents |= booze.type
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 44020605dee..8695ab98499 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -416,7 +416,7 @@
for(var/obj/item/organ/I in target.get_internal_organs())
if(I && !(I.status & ORGAN_CUT_AWAY) && !BP_IS_CRYSTAL(I) && I.parent_organ == target_zone)
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
- radial_button.name = "Detach \the [I.name]"
+ radial_button.name = "Detach \the [I]"
LAZYSET(attached_organs, I.organ_tag, radial_button)
if(!LAZYLEN(attached_organs))
to_chat(user, SPAN_WARNING("There are no appropriate internal components to decouple."))
@@ -461,7 +461,7 @@
for(var/obj/item/organ/I in affected.implants)
if ((I.status & ORGAN_CUT_AWAY) && BP_IS_PROSTHETIC(I) && !BP_IS_CRYSTAL(I) && (I.parent_organ == target_zone))
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
- radial_button.name = "Reattach \the [I.name]"
+ radial_button.name = "Reattach \the [I]"
LAZYSET(removable_organs, I.organ_tag, radial_button)
var/organ_to_replace = show_radial_menu(user, tool, removable_organs, radius = 42, require_near = TRUE, use_labels = RADIAL_LABELS_OFFSET, check_locs = list(tool))
if(!organ_to_replace)
diff --git a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm
index e8332774a9e..b39bfc00a24 100644
--- a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm
+++ b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm
@@ -5,7 +5,7 @@
icon_state = ICON_STATE_WORLD
sound_player = /datum/sound_player/synthesizer
path = /datum/instrument/guitar/clean_crisis
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE)
slot_flags = SLOT_BACK
@@ -16,7 +16,7 @@
icon_state = "eguitar"
sound_player = /datum/sound_player/synthesizer
path = /datum/instrument/guitar
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE,
/decl/material/solid/metal/copper = MATTER_AMOUNT_TRACE,
diff --git a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm
index d73ee46400a..5eb4e3e773e 100644
--- a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm
+++ b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm
@@ -8,8 +8,5 @@
icon_state = "violin"
sound_player = /datum/sound_player/violin
path = /datum/instrument/obsolete/violin
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE)
-
-/obj/structure/synthesized_instrument/synthesizer/shouldStopPlaying(mob/user)
- return !(src && in_range(src, user))
\ No newline at end of file
diff --git a/code/modules/tools/archetypes/tool_archetype_definitions.dm b/code/modules/tools/archetypes/tool_archetype_definitions.dm
index 25df48e3afd..2b2b2f14f4d 100644
--- a/code/modules/tools/archetypes/tool_archetype_definitions.dm
+++ b/code/modules/tools/archetypes/tool_archetype_definitions.dm
@@ -70,16 +70,16 @@
/decl/tool_archetype/knife/get_default_quality(obj/item/tool)
if(tool)
- if(tool.sharp && tool.edge)
+ if(tool.is_sharp() && tool.has_edge())
return TOOL_QUALITY_DEFAULT
- else if(tool.sharp || tool.edge)
+ else if(tool.is_sharp() || tool.has_edge())
return TOOL_QUALITY_MEDIOCRE
return ..()
/decl/tool_archetype/knife/get_default_speed(obj/item/tool)
if(tool)
- if(tool.sharp && tool.edge)
+ if(tool.is_sharp() && tool.has_edge())
return TOOL_SPEED_DEFAULT
- else if(tool.sharp || tool.edge)
+ else if(tool.is_sharp() || tool.has_edge())
return TOOL_SPEED_MEDIOCRE
return ..()
diff --git a/code/modules/tools/components/handle.dm b/code/modules/tools/components/handle.dm
index 18d4053a985..507b7a72958 100644
--- a/code/modules/tools/components/handle.dm
+++ b/code/modules/tools/components/handle.dm
@@ -1,7 +1,7 @@
/obj/item/tool_component/handle
name = "tool handle"
icon = 'icons/obj/items/tool/components/tool_handle.dmi'
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
abstract_type = /obj/item/tool_component/handle
/obj/item/tool_component/handle/short
diff --git a/code/modules/tools/components/head.dm b/code/modules/tools/components/head.dm
index 5d7aa85f512..e8e408c7c76 100644
--- a/code/modules/tools/components/head.dm
+++ b/code/modules/tools/components/head.dm
@@ -40,6 +40,11 @@ var/global/list/_tool_properties_cache = list()
desc = "The head of a hoe."
icon_state = "hoe"
+/obj/item/tool_component/head/chisel
+ name = "chisel head"
+ desc = "The head of a chisel."
+ icon_state = "hoe"
+
/obj/item/tool_component/head/handaxe
name = "hand axe head"
desc = "The head of a hand axe."
@@ -58,3 +63,8 @@ var/global/list/_tool_properties_cache = list()
icon_state = "sledgehammer"
w_class = ITEM_SIZE_NORMAL
+/obj/item/tool_component/head/forging_hammer
+ name = "forging hammer head"
+ desc = "The head of a forging hammer."
+ icon_state = "forging"
+ w_class = ITEM_SIZE_NORMAL
diff --git a/code/modules/tools/subtypes/axes.dm b/code/modules/tools/subtypes/axes.dm
index 93eae37611f..d671ffa0747 100644
--- a/code/modules/tools/subtypes/axes.dm
+++ b/code/modules/tools/subtypes/axes.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/items/tool/axes/handaxe.dmi'
sharp = TRUE
edge = TRUE
- handle_material = /decl/material/solid/organic/wood
+ handle_material = /decl/material/solid/organic/wood/oak
item_flags = ITEM_FLAG_IS_WEAPON
origin_tech = @'{"materials":2,"combat":1}'
attack_verb = list("chopped", "torn", "cut")
@@ -19,8 +19,15 @@
return tool_qualities
/obj/item/tool/axe/ebony
+ material = /decl/material/solid/metal/iron
handle_material = /decl/material/solid/organic/wood/ebony
+/obj/item/tool/axe/iron
+ material = /decl/material/solid/metal/iron
+
+/obj/item/tool/axe/ebony/bronze
+ material = /decl/material/solid/metal/bronze
+
// Legacy SS13 hatchet.
/obj/item/tool/axe/hatchet
name = "hatchet"
diff --git a/code/modules/tools/subtypes/hammers.dm b/code/modules/tools/subtypes/hammers.dm
index 20304b690e5..ff5d1ef1989 100644
--- a/code/modules/tools/subtypes/hammers.dm
+++ b/code/modules/tools/subtypes/hammers.dm
@@ -2,8 +2,6 @@
name = "hammer"
desc = "A simple hammer. Ancient technology once thought lost."
icon = 'icons/obj/items/tool/hammers/hammer.dmi'
- sharp = 0
- edge = 0
attack_verb = list(
"bludgeons",
"slaps",
@@ -29,7 +27,10 @@
return tool_properties
/obj/item/tool/hammer/get_initial_tool_qualities()
- var/static/list/tool_qualities = list(TOOL_HAMMER = TOOL_QUALITY_DEFAULT)
+ var/static/list/tool_qualities = list(
+ TOOL_HAMMER = TOOL_QUALITY_DEFAULT,
+ TOOL_CROWBAR = TOOL_QUALITY_WORST
+ )
return tool_qualities
/obj/item/tool/hammer/sledge
@@ -76,3 +77,18 @@
TOOL_SHOVEL = TOOL_QUALITY_DECENT
)
return tool_qualities
+
+/obj/item/tool/hammer/forge
+ name = "forging hammer"
+ desc = "A heavy hammer, used to forge hot metal at an anvil."
+ icon = 'icons/obj/items/tool/hammers/forge.dmi'
+ w_class = ITEM_SIZE_NORMAL
+
+// Forging hammers are not great at general hammer tasks (too heavy I guess),
+// and also don't work as crowbars due to missing the nail ripper/flange,
+// but will be more effective at forging when blacksmithy is merged.
+/obj/item/tool/hammer/forge/get_initial_tool_qualities()
+ var/static/list/tool_qualities = list(
+ TOOL_HAMMER = TOOL_QUALITY_MEDIOCRE
+ )
+ return tool_qualities
diff --git a/code/modules/tools/subtypes/hoes.dm b/code/modules/tools/subtypes/hoes.dm
index 499e25975ac..8e73bac49bc 100644
--- a/code/modules/tools/subtypes/hoes.dm
+++ b/code/modules/tools/subtypes/hoes.dm
@@ -11,8 +11,8 @@
w_class = ITEM_SIZE_LARGE
/obj/item/tool/hoe/wood
- color = /decl/material/solid/organic/wood::color
- material = /decl/material/solid/organic/wood
+ color = /decl/material/solid/organic/wood/oak::color
+ material = /decl/material/solid/organic/wood/oak
/obj/item/tool/hoe/wood/walnut
color = /decl/material/solid/organic/wood/walnut::color
diff --git a/code/modules/tools/subtypes/pickaxes.dm b/code/modules/tools/subtypes/pickaxes.dm
index 0b2bdf0d586..083c99661f8 100644
--- a/code/modules/tools/subtypes/pickaxes.dm
+++ b/code/modules/tools/subtypes/pickaxes.dm
@@ -6,7 +6,7 @@
sharp = TRUE
edge = TRUE
w_class = ITEM_SIZE_HUGE
- handle_material = /decl/material/solid/organic/wood
+ handle_material = /decl/material/solid/organic/wood/oak
_base_attack_force = 15
/obj/item/tool/pickaxe/Initialize(ml, material_key, _handle_material, _binding_material, override_tool_qualities, override_tool_properties)
@@ -31,7 +31,7 @@
// Using these mainly for debugging.
/obj/item/tool/pickaxe/wood
- material = /decl/material/solid/organic/wood
+ material = /decl/material/solid/organic/wood/oak
/obj/item/tool/pickaxe/stone
material = /decl/material/solid/stone/flint
@@ -75,3 +75,7 @@
/obj/item/tool/pickaxe/iron
material = /decl/material/solid/metal/iron
handle_material = /decl/material/solid/organic/wood/ebony
+
+/obj/item/tool/pickaxe/bronze
+ material = /decl/material/solid/metal/bronze
+ handle_material = /decl/material/solid/organic/wood/ebony
diff --git a/code/modules/tools/subtypes/shovel.dm b/code/modules/tools/subtypes/shovel.dm
index da05b5532f8..204bb0a9fbb 100644
--- a/code/modules/tools/subtypes/shovel.dm
+++ b/code/modules/tools/subtypes/shovel.dm
@@ -8,7 +8,7 @@
edge = TRUE
sharp = TRUE
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
- handle_material = /decl/material/solid/organic/wood
+ handle_material = /decl/material/solid/organic/wood/oak
_base_attack_force = 8
/obj/item/tool/shovel/get_initial_tool_qualities()
@@ -19,8 +19,8 @@
return tool_qualities
/obj/item/tool/shovel/wood
- color = /decl/material/solid/organic/wood::color
- material = /decl/material/solid/organic/wood
+ color = /decl/material/solid/organic/wood/oak::color
+ material = /decl/material/solid/organic/wood/oak
/obj/item/tool/shovel/wood/walnut
color = /decl/material/solid/organic/wood/walnut::color
diff --git a/code/modules/tools/subtypes/xenoarchaeology_picks.dm b/code/modules/tools/subtypes/xenoarchaeology_picks.dm
index 01e22a01623..2a335b9fa4c 100644
--- a/code/modules/tools/subtypes/xenoarchaeology_picks.dm
+++ b/code/modules/tools/subtypes/xenoarchaeology_picks.dm
@@ -7,7 +7,7 @@
material = /decl/material/solid/metal/chromium
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY)
w_class = ITEM_SIZE_SMALL
- sharp = 1
+ sharp = TRUE
abstract_type = /obj/item/tool/xeno
material_alteration = 0
handle_material = /decl/material/solid/organic/plastic
@@ -36,18 +36,18 @@
to_chat(user, "This tool has a [get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) || 0] centimetre excavation depth.")
/obj/item/tool/xeno/brush
- name = "wire brush"
- icon_state = "pick_brush"
- slot_flags = SLOT_EARS
- _base_attack_force = 1
- attack_verb = list("prodded", "attacked")
- desc = "A wood-handled brush with thick metallic wires for clearing away dust and loose scree."
- sharp = 0
- material = /decl/material/solid/metal/steel
- handle_material = /decl/material/solid/organic/wood
- excavation_amount = 1
- excavation_sound = "sweeping"
- excavation_verb = "brushing"
+ name = "wire brush"
+ icon_state = "pick_brush"
+ slot_flags = SLOT_EARS
+ _base_attack_force = 1
+ attack_verb = list("prodded", "attacked")
+ desc = "A wood-handled brush with thick metallic wires for clearing away dust and loose scree."
+ sharp = FALSE
+ material = /decl/material/solid/metal/steel
+ handle_material = /decl/material/solid/organic/wood/oak
+ excavation_amount = 1
+ excavation_sound = "sweeping"
+ excavation_verb = "brushing"
/obj/item/tool/xeno/one_pick
name = "2cm pick"
diff --git a/code/modules/tools/tool.dm b/code/modules/tools/tool.dm
index 889d2ab199d..953a751ebbb 100644
--- a/code/modules/tools/tool.dm
+++ b/code/modules/tools/tool.dm
@@ -6,7 +6,6 @@
w_class = ITEM_SIZE_NORMAL
origin_tech = @'{"materials":1,"engineering":1}'
attack_verb = list("hit", "pierced", "sliced", "attacked")
- sharp = 0
abstract_type = /obj/item/tool
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
_base_attack_force = 10
diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm
index 8d34b659309..03c3be6b0e4 100644
--- a/code/modules/turbolift/turbolift_console.dm
+++ b/code/modules/turbolift/turbolift_console.dm
@@ -11,7 +11,7 @@
/obj/structure/lift/proc/pressed(var/mob/user)
if(!issilicon(user))
- if(user.a_intent == I_HURT)
+ if(user.check_intent(I_FLAG_HARM))
user.visible_message("\The [user] hammers on the lift button!")
else
user.visible_message("\The [user] presses the lift button.")
diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm
index 08318914e2e..a5aa85daf86 100644
--- a/code/modules/vehicles/bike.dm
+++ b/code/modules/vehicles/bike.dm
@@ -63,7 +63,7 @@
usr.visible_message("\The [usr] puts up \the [src]'s kickstand.")
else
if(isspaceturf(src.loc))
- to_chat(usr, " You don't think kickstands work in space...")
+ to_chat(usr, "You don't think kickstands work in space...")
return
usr.visible_message("\The [usr] puts down \the [src]'s kickstand.")
diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm
index 342d8dbba7e..62606d2626b 100644
--- a/code/modules/vehicles/cargo_train.dm
+++ b/code/modules/vehicles/cargo_train.dm
@@ -193,7 +193,7 @@
if(distance > 1)
return
- if(!ishuman(usr))
+ if(!ishuman(user))
return
to_chat(user, "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.")
diff --git a/code/modules/vehicles/engine.dm b/code/modules/vehicles/engine.dm
index 6f5737bccfc..8032dfccc70 100644
--- a/code/modules/vehicles/engine.dm
+++ b/code/modules/vehicles/engine.dm
@@ -48,7 +48,7 @@
cell.dropInto(loc)
cell = null
return TRUE
- if(user.a_intent != I_HURT)
+ if(!user.check_intent(I_FLAG_HARM))
to_chat(user, SPAN_WARNING("There is no cell in \the [src] to remove with \the [I]!"))
return TRUE
return ..()
@@ -110,8 +110,8 @@
for(var/rtype in temp_reagents_holder.reagents.reagent_volumes)
var/new_multiplier = 1
var/decl/material/R = GET_DECL(rtype)
- if(istype(R,/decl/material/liquid/ethanol))
- var/decl/material/liquid/ethanol/E = R
+ if(istype(R, /decl/material/liquid/alcohol))
+ var/decl/material/liquid/alcohol/E = R
new_multiplier = (10/E.strength)
actually_flameable = 1
else if(istype(R,/decl/material/liquid/fuel/hydrazine))
@@ -140,5 +140,5 @@
/obj/item/engine/thermal/rev_engine(var/atom/movable/M)
M.audible_message("\The [M] rumbles to life.")
-/obj/item/engine/electric/putter(var/atom/movable/M)
+/obj/item/engine/thermal/putter(var/atom/movable/M)
M.audible_message("\The [M] putters before turning off.")
\ No newline at end of file
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index 01d1a248b88..1098bd2bf01 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -106,7 +106,7 @@
return ..() // handles bash()
/obj/vehicle/bash(obj/item/weapon, mob/user)
- if(isliving(user) && user.a_intent == I_HELP)
+ if(isliving(user) && user.check_intent(I_FLAG_HELP))
return FALSE
if(!weapon.user_can_attack_with(user))
return FALSE
@@ -115,10 +115,10 @@
// physical damage types that can impart force; swinging a bat or energy sword
switch(weapon.atom_damage_type)
if(BURN)
- current_health -= weapon.get_attack_force(user) * fire_dam_coeff
+ current_health -= weapon.expend_attack_force(user) * fire_dam_coeff
. = TRUE
if(BRUTE)
- current_health -= weapon.get_attack_force(user) * brute_dam_coeff
+ current_health -= weapon.expend_attack_force(user) * brute_dam_coeff
. = TRUE
else
. = FALSE
@@ -144,23 +144,17 @@
healthcheck()
/obj/vehicle/emp_act(severity)
- var/was_on = on
+ addtimer(CALLBACK(src, PROC_REF(end_emp), on), severity * 30 SECONDS)
stat |= EMPED
- var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(loc)
- pulse2.icon = 'icons/effects/effects.dmi'
- pulse2.icon_state = "empdisable"
- pulse2.SetName("emp sparks")
- pulse2.anchored = TRUE
- pulse2.set_dir(pick(global.cardinal))
-
- spawn(10)
- qdel(pulse2)
+ var/obj/effect/temp_visual/emp_burst/burst = new /obj/effect/temp_visual/emp_burst(loc)
+ burst.set_dir(pick(global.cardinal))
if(on)
turn_off()
- spawn(severity*300)
- stat &= ~EMPED
- if(was_on)
- turn_on()
+
+/obj/vehicle/proc/end_emp(was_on)
+ stat &= ~EMPED
+ if(was_on)
+ turn_on()
/obj/vehicle/attack_ai(mob/living/silicon/ai/user)
return
@@ -240,23 +234,23 @@
turn_on()
return
-/obj/vehicle/proc/insert_cell(var/obj/item/cell/C, var/mob/living/human/H)
+/obj/vehicle/proc/insert_cell(var/obj/item/cell/C, var/mob/living/user)
if(cell)
return
if(!istype(C))
return
- if(!H.try_unequip(C, src))
+ if(!user.try_unequip(C, src))
return
cell = C
powercheck()
- to_chat(usr, "You install [C] in [src].")
+ to_chat(user, "You install [C] in [src].")
-/obj/vehicle/proc/remove_cell(var/mob/living/human/H)
+/obj/vehicle/proc/remove_cell(var/mob/living/user)
if(!cell)
return
- to_chat(usr, "You remove [cell] from [src].")
- H.put_in_hands(cell)
+ to_chat(user, "You remove [cell] from [src].")
+ user.put_in_hands(cell)
cell = null
powercheck()
diff --git a/code/modules/weather/_weather.dm b/code/modules/weather/_weather.dm
index dd78d0d269b..9c1a6493a53 100644
--- a/code/modules/weather/_weather.dm
+++ b/code/modules/weather/_weather.dm
@@ -43,6 +43,13 @@
var/obj/abstract/lightning_overlay/lightning_overlay // A visible atom used for animated lighting effects.
var/tmp/list/vis_contents_additions // Holder for a list used to add required atoms to turf vis_contents.
+ /// A list of particle sources to randomize particle-based effects per-turf.
+ var/list/obj/abstract/weather_particles/particle_sources = newlist(
+ /obj/abstract/weather_particles,
+ /obj/abstract/weather_particles,
+ /obj/abstract/weather_particles,
+ /obj/abstract/weather_particles
+ )
// Main heartbeat proc, called by SSweather.
/obj/abstract/weather_system/proc/tick()
@@ -106,3 +113,35 @@
invisibility = INVISIBILITY_NONE
is_spawnable_type = FALSE
appearance_flags = RESET_COLOR | KEEP_APART
+
+// Dummy object for weather particles.
+/obj/abstract/weather_particles
+ // plane = EMISSIVE_PLANE
+ // layer = ABOVE_LIGHTING_LAYER
+ icon = null
+ invisibility = INVISIBILITY_NONE
+ is_spawnable_type = FALSE
+ appearance_flags = RESET_COLOR | KEEP_APART
+ layer = ABOVE_HUMAN_LAYER
+
+/obj/abstract/weather_particles/proc/update_particle_system(obj/abstract/weather_system/holder)
+ if(!istype(particles, /particles/weather))
+ return
+ var/particles/weather/weather_particles = particles
+ weather_particles.color = holder.color // sync color
+ alpha = holder.alpha // sync alpha
+ // reset rotation and velocity
+ weather_particles.rotation = 0
+ weather_particles.velocity = generator("vector", weather_particles.base_velocity[1], weather_particles.base_velocity[2], NORMAL_RAND)
+ if(holder.wind_direction != 0 && holder.wind_strength != 0) // direction is set
+ // rain always falls down, but if the wind is east or west
+ // then it also gets a little bit of side momentum
+ // based on the horizontal component of the direction
+ var/wind_angle = 90 - dir2angle(holder.wind_direction) // byond's coordinate axis is fucky
+ var/x_wind_vel = cos(wind_angle) * holder.wind_strength
+ var/z_wind_vel = sin(wind_angle) * holder.wind_strength // experimental!
+ // tilt to an angle that makes sense for our min/max velocity
+ // 0 is south, but if our velocity is pure south we get -90, so add 90
+ // and then invert it, because byond uses counter-clockwise and we want clockwise
+ weather_particles.rotation = generator("num", 90 - arctan(x_wind_vel * 0.50, weather_particles.base_velocity[1][2]), 90 - arctan(x_wind_vel, weather_particles.base_velocity[2][2]), NORMAL_RAND)
+ weather_particles.velocity += generator("vector", list(0, 0, 0), list(x_wind_vel, 0, z_wind_vel), NORMAL_RAND)
\ No newline at end of file
diff --git a/code/modules/weather/weather_fsm_states.dm b/code/modules/weather/weather_fsm_states.dm
index 6c80309d357..08c45c46c3e 100644
--- a/code/modules/weather/weather_fsm_states.dm
+++ b/code/modules/weather/weather_fsm_states.dm
@@ -12,8 +12,9 @@
var/icon = 'icons/effects/weather.dmi'
var/icon_state
+ var/particles/weather/particle_system
- var/alpha = 210
+ var/alpha = 170
var/minimum_time = 2 MINUTES
var/maximum_time = 10 MINUTES
var/is_liquid = FALSE
@@ -22,6 +23,30 @@
var/list/ambient_sounds
var/list/ambient_indoors_sounds
+/particles/weather
+ width = 32
+ height = 32
+ bound1 = list(-16, -16, -20)
+ bound2 = list(20, 20, 20)
+ count = 100
+ spawning = 2
+ lifespan = 2 SECONDS // they'll hopefully hit the bounds long before this runs out
+ // basic 3d projection matrix
+ // 16px in the z axis = 1 in the y axis, because perspective memes i guess?
+ transform = list(
+ 1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 1/16, 0, 0,
+ 0, 0, 0, 1,
+ )
+ fadein = 1
+ position = generator("box", list(-16, 16, -16), list(20, 20, 20)) // start at the top in the Y axis
+ /// How much does (east/west) wind affect the horizontal component of the particles?
+ var/wind_intensity = 2
+ /// What is the non-wind-affected velocity component of the particles?
+ /// A list of two lists (minimum and maximum velocities) passed to a generator.
+ var/list/base_velocity = list(list(0, -6, 0), list(0, -10, 0))
+
/decl/state/weather/entered_state(datum/holder)
. = ..()
@@ -41,6 +66,15 @@
else
weather.color = COLOR_WHITE
+ if(ispath(particle_system))
+ for(var/obj/abstract/weather_particles/particle_source in weather.particle_sources)
+ particle_source.particles = new particle_system // separate datums so that you could make some turfs have special effects in the future
+ weather.update_particle_system() // sync wind, etc.
+ else
+ for(var/obj/abstract/weather_particles/particle_source in weather.particle_sources)
+ if(particle_source.particles)
+ QDEL_NULL(particle_source.particles)
+
/decl/state/weather/proc/tick(var/obj/abstract/weather_system/weather)
return
@@ -129,7 +163,7 @@
/decl/state_transition/weather/snow_heavy
)
-/decl/state/weather/snow/heavy/adjust_temperature(initial_temperature)
+/decl/state/weather/snow/medium/adjust_temperature(initial_temperature)
return min(initial_temperature - 25, T0C)
/decl/state/weather/snow/heavy
@@ -148,7 +182,8 @@
/decl/state/weather/rain
name = "Light Rain"
- icon_state = "rain"
+ icon_state = null//"rain"
+ particle_system = /particles/weather/rain
descriptor = "It is raining gently."
cosmetic_span_class = "notice"
is_liquid = TRUE
@@ -162,13 +197,19 @@
protected_messages = list("Raindrops patter against $ITEM$.")
var/list/roof_messages = list("Rain patters against the roof.")
+/particles/weather/rain
+ icon = 'icons/effects/weather.dmi'
+ icon_state = "rain_particle" // animated particles don't seem to work...
+ wind_intensity = 1
+
/decl/state/weather/rain/handle_roofed_effects(var/mob/living/M, var/obj/abstract/weather_system/weather)
if(length(roof_messages) && prob(cosmetic_message_chance))
to_chat(M, "[pick(roof_messages)]")
/decl/state/weather/rain/storm
name = "Heavy Rain"
- icon_state = "storm"
+ icon_state = null // "storm"
+ particle_system = /particles/weather/rain/storm
descriptor = "It is raining heavily."
cosmetic_span_class = "warning"
transitions = list(
@@ -180,6 +221,11 @@
roof_messages = list("Torrential rain thunders against the roof.")
ambient_sounds = list('sound/effects/weather/rain_heavy.ogg')
+/particles/weather/rain/storm
+ wind_intensity = 3
+ spawning = 5
+ count = 200
+
/decl/state/weather/rain/storm/tick(var/obj/abstract/weather_system/weather)
..()
if(prob(0.5))
@@ -188,6 +234,7 @@
/decl/state/weather/rain/hail
name = "Hail"
icon_state = "hail"
+ particle_system = null
descriptor = "It is hailing."
cosmetic_span_class = "danger"
is_liquid = FALSE
@@ -201,7 +248,8 @@
/decl/state/weather/rain/hail/handle_exposure_effects(var/mob/living/M, var/obj/abstract/weather_system/weather)
to_chat(M, SPAN_DANGER("You are pelted by a shower of hail!"))
- M.take_damage(rand(1, 3))
+ if(M.getBruteLoss() < 20) // Put a cap on it to make it annoying but not lethal.
+ M.take_damage(rand(1, 3))
/decl/state/weather/ash
name = "Ash"
diff --git a/code/modules/weather/weather_init.dm b/code/modules/weather/weather_init.dm
index 276b6ce614a..48b8e16f3cd 100644
--- a/code/modules/weather/weather_init.dm
+++ b/code/modules/weather/weather_init.dm
@@ -6,6 +6,10 @@ INITIALIZE_IMMEDIATE(/obj/abstract/weather_system)
set_invisibility(INVISIBILITY_NONE)
+ if(prob(20)) // arbitrary chance to already have some degree of wind when the weather system starts
+ wind_direction = pick(global.alldirs)
+ wind_strength = rand(1,5)
+
banned_weather_conditions = banned
// Bookkeeping/rightclick guards.
diff --git a/code/modules/weather/weather_wind.dm b/code/modules/weather/weather_wind.dm
index c363f20e36e..dc95fdd4f73 100644
--- a/code/modules/weather/weather_wind.dm
+++ b/code/modules/weather/weather_wind.dm
@@ -23,6 +23,11 @@
wind_direction = turn(wind_direction, 180)
if(old_strength != wind_strength)
mob_shown_wind.Cut()
+ update_particle_system()
+
+/obj/abstract/weather_system/proc/update_particle_system()
+ for(var/obj/abstract/weather_particles/particle_source in particle_sources)
+ particle_source.update_particle_system(src)
/obj/abstract/weather_system/proc/show_wind(var/mob/M, var/force = FALSE)
var/mob_ref = weakref(M)
diff --git a/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm
index cc79f4bf2b5..abd7dc61c3b 100644
--- a/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm
+++ b/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm
@@ -1,7 +1,7 @@
/obj/machinery/giga_drill
name = "alien drill"
desc = "A giant, alien drill mounted on long treads."
- icon = 'icons/obj/mining.dmi'
+ icon = 'icons/obj/machines/gigadrill.dmi'
icon_state = "gigadrill"
var/active = 0
var/drill_time = 10
diff --git a/code/modules/xenoarcheaology/artifacts/triggers/force.dm b/code/modules/xenoarcheaology/artifacts/triggers/force.dm
index c8003f314e7..97a771745f1 100644
--- a/code/modules/xenoarcheaology/artifacts/triggers/force.dm
+++ b/code/modules/xenoarcheaology/artifacts/triggers/force.dm
@@ -7,7 +7,7 @@
var/obj/item/projectile/hit_projectile = hit_with
return (hit_projectile.atom_damage_type == BRUTE)
else if(istype(hit_with, /obj/item))
- return (hit_with.get_attack_force(user) >= 10)
+ return (hit_with.expend_attack_force(user) >= 10)
/datum/artifact_trigger/force/on_explosion(severity)
return TRUE
diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm
index ad492eb65ef..ba7a38c2f3d 100644
--- a/code/modules/xenoarcheaology/boulder.dm
+++ b/code/modules/xenoarcheaology/boulder.dm
@@ -1,8 +1,8 @@
/obj/structure/boulder
name = "boulder"
desc = "A large boulder, somewhat bigger than a small boulder."
- icon = 'icons/obj/mining.dmi'
- icon_state = "boulder1"
+ icon = 'icons/obj/structures/boulder.dmi'
+ icon_state = ICON_STATE_WORLD
density = TRUE
opacity = TRUE
anchored = TRUE
@@ -30,7 +30,7 @@
/obj/structure/boulder/Initialize(var/ml, var/_mat, var/coloration)
. = ..()
- icon_state = "boulder[rand(1,6)]"
+ icon_state = "[initial(icon_state)][rand(1,6)]"
if(coloration)
color = coloration
excavation_level = rand(5, 50)
diff --git a/code/modules/xenoarcheaology/datums/artifact_find.dm b/code/modules/xenoarcheaology/datums/artifact_find.dm
index b70f17112e8..242af56502d 100644
--- a/code/modules/xenoarcheaology/datums/artifact_find.dm
+++ b/code/modules/xenoarcheaology/datums/artifact_find.dm
@@ -2,8 +2,6 @@
var/artifact_id
var/artifact_find_type
var/static/potential_finds = list(
- /obj/machinery/power/supermatter = 5,
- /obj/machinery/power/supermatter/shard = 25,
/obj/machinery/auto_cloner = 100,
/obj/machinery/giga_drill = 100,
/obj/machinery/replicator = 100,
diff --git a/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm b/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm
index 9cd5a4e78ae..957c9204a4d 100644
--- a/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm
+++ b/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm
@@ -29,16 +29,16 @@
/obj/item/chems/glass/replenishing/Initialize()
. = ..()
- spawning_id = pick(
- /decl/material/liquid/blood, \
- /decl/material/liquid/lube, \
- /decl/material/liquid/sedatives, \
- /decl/material/liquid/ethanol, \
- /decl/material/liquid/water, \
- /decl/material/solid/ice, \
- /decl/material/liquid/fuel, \
- /decl/material/liquid/cleaner \
- )
+ spawning_id = pick(list(
+ /decl/material/liquid/blood,
+ /decl/material/liquid/lube,
+ /decl/material/liquid/sedatives,
+ /decl/material/liquid/alcohol/ethanol,
+ /decl/material/liquid/water,
+ /decl/material/solid/ice,
+ /decl/material/liquid/fuel,
+ /decl/material/liquid/cleaner
+ ))
START_PROCESSING(SSobj, src)
/obj/item/chems/glass/replenishing/Process()
diff --git a/code/modules/xenoarcheaology/finds/find_types/weapons.dm b/code/modules/xenoarcheaology/finds/find_types/weapons.dm
index 73db85aeca5..b593cece25d 100644
--- a/code/modules/xenoarcheaology/finds/find_types/weapons.dm
+++ b/code/modules/xenoarcheaology/finds/find_types/weapons.dm
@@ -18,7 +18,7 @@
"It doesn't look safe.",
"It looks wickedly jagged.",
"There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains along the edges.")
-
+
/decl/archaeological_find/knife/new_icon()
return pick(knife_icons)
@@ -46,7 +46,7 @@
modification_flags = XENOFIND_APPLY_DECOR
possible_types = list(/obj/item/beartrap)
-/decl/archaeological_find/knife/generate_name()
+/decl/archaeological_find/trap/generate_name()
return "[pick("wicked","evil","byzantine","dangerous")] looking [pick("device","contraption","thing","trap")]"
/decl/archaeological_find/trap/get_additional_description()
diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm
index 0ac71ec2278..86f037fd0f8 100644
--- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm
+++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm
@@ -57,6 +57,7 @@
/obj/item/anodevice/Destroy()
inserted_battery = null
+ STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/anodevice/attackby(var/obj/I, var/mob/user)
@@ -188,10 +189,6 @@
else
icon_state = "anodev_empty"
-/obj/item/anodevice/Destroy()
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
/obj/item/anodevice/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
if (!istype(target))
return ..()
diff --git a/code/modules/xenoarcheaology/tools/core_sampler.dm b/code/modules/xenoarcheaology/tools/core_sampler.dm
index 01b4f1401e5..21d5bd0cb6d 100644
--- a/code/modules/xenoarcheaology/tools/core_sampler.dm
+++ b/code/modules/xenoarcheaology/tools/core_sampler.dm
@@ -51,7 +51,7 @@
icon_state = "sliver1"
randpixel = 8
w_class = ITEM_SIZE_TINY
- sharp = 1
+ sharp = TRUE
material = /decl/material/solid/stone/sandstone
material_health_multiplier = 0.25
diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm
index 213d77ff128..813f424e7f1 100644
--- a/code/modules/xenoarcheaology/tools/tools.dm
+++ b/code/modules/xenoarcheaology/tools/tools.dm
@@ -10,8 +10,8 @@
/obj/item/bag/fossils
name = "fossil satchel"
desc = "Transports delicate fossils in suspension so they don't break during transit."
- icon = 'icons/obj/mining.dmi'
- icon_state = "satchel"
+ icon = 'icons/obj/items/mining_satchel.dmi'
+ icon_state = ICON_STATE_WORLD
slot_flags = SLOT_LOWER_BODY | SLOT_POCKET
w_class = ITEM_SIZE_NORMAL
storage = /datum/storage/bag/fossils
diff --git a/code/procs/hud.dm b/code/procs/hud.dm
index 5f4c5580e92..49286df1000 100644
--- a/code/procs/hud.dm
+++ b/code/procs/hud.dm
@@ -13,73 +13,71 @@ the HUD updates properly! */
if(!can_process_hud(M))
return
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, global.med_hud_users)
- for(var/mob/living/human/patient in P.Mob.in_view(P.Turf))
+ for(var/mob/living/human/patient in P.hud_mob.in_view(P.hud_turf))
- if(patient.is_invisible_to(P.Mob))
+ if(patient.is_invisible_to(P.hud_mob))
continue
if(local_scanner)
- P.Client.images += patient.hud_list[HEALTH_HUD]
+ P.hud_client.images += patient.hud_list[HEALTH_HUD]
if(network)
var/record = network.get_crew_record_by_name(patient.get_visible_name())
if(!record)
return
- P.Client.images += patient.hud_list[STATUS_HUD]
+ P.hud_client.images += patient.hud_list[STATUS_HUD]
else
var/sensor_level = getsensorlevel(patient)
if(sensor_level >= VITALS_SENSOR_VITAL)
- P.Client.images += patient.hud_list[HEALTH_HUD]
+ P.hud_client.images += patient.hud_list[HEALTH_HUD]
if(sensor_level >= VITALS_SENSOR_BINARY)
- P.Client.images += patient.hud_list[LIFE_HUD]
+ P.hud_client.images += patient.hud_list[LIFE_HUD]
//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features.
/proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt, datum/computer_network/network)
if(!can_process_hud(M))
return
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, global.sec_hud_users)
- for(var/mob/living/human/perp in P.Mob.in_view(P.Turf))
+ for(var/mob/living/human/perp in P.hud_mob.in_view(P.hud_turf))
- if(perp.is_invisible_to(P.Mob))
+ if(perp.is_invisible_to(P.hud_mob))
continue
if(network)
var/record = network.get_crew_record_by_name(perp.get_visible_name())
if(!record)
return
- P.Client.images += perp.hud_list[ID_HUD]
+ P.hud_client.images += perp.hud_list[ID_HUD]
if(advanced_mode)
- P.Client.images += perp.hud_list[WANTED_HUD]
- P.Client.images += perp.hud_list[IMPTRACK_HUD]
- P.Client.images += perp.hud_list[IMPLOYAL_HUD]
- P.Client.images += perp.hud_list[IMPCHEM_HUD]
+ P.hud_client.images += perp.hud_list[WANTED_HUD]
+ P.hud_client.images += perp.hud_list[IMPTRACK_HUD]
+ P.hud_client.images += perp.hud_list[IMPLOYAL_HUD]
+ P.hud_client.images += perp.hud_list[IMPCHEM_HUD]
/proc/process_jani_hud(var/mob/M, var/mob/Alt)
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, global.jani_hud_users)
- for (var/obj/effect/decal/cleanable/dirtyfloor in view(P.Mob))
- P.Client.images += dirtyfloor.hud_overlay
+ for (var/obj/effect/decal/cleanable/dirtyfloor in view(P.hud_mob))
+ if(istype(dirtyfloor, /obj/effect/decal/cleanable/dirt))
+ var/obj/effect/decal/cleanable/dirt/dirt = dirtyfloor
+ if(dirt.alpha <= 0)
+ continue
+ P.hud_client.images += dirtyfloor.hud_overlay
/datum/arranged_hud_process
- var/client/Client
- var/mob/Mob
- var/turf/Turf
+ var/client/hud_client
+ var/mob/hud_mob
+ var/turf/hud_turf
/proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list)
hud_list |= M
var/datum/arranged_hud_process/P = new
- P.Client = M.client
- P.Mob = Alt ? Alt : M
- P.Turf = get_turf(P.Mob)
+ P.hud_client = M.client
+ P.hud_mob = Alt ? Alt : M
+ P.hud_turf = get_turf(P.hud_mob)
return P
/proc/can_process_hud(var/mob/M)
- if(!M)
- return 0
- if(!M.client)
- return 0
- if(M.stat != CONSCIOUS)
- return 0
- return 1
+ return M?.client && M.stat == CONSCIOUS
//Deletes the current HUD images so they can be refreshed with new ones.
/mob/proc/handle_hud_glasses() //Used in the life.dm of mobs that can use HUDs.
diff --git a/code/procs/AStar.dm b/code/procs/pathfinding.dm
similarity index 78%
rename from code/procs/AStar.dm
rename to code/procs/pathfinding.dm
index 01e4213f805..7732761b8d3 100644
--- a/code/procs/AStar.dm
+++ b/code/procs/pathfinding.dm
@@ -5,14 +5,14 @@ A Star pathfinding algorithm
Returns a list of tiles forming a path from A to B, taking dense objects as well as walls, and the orientation of
windows along the route into account.
Use:
-your_list = AStar(start location, end location, adjacent turf proc, distance proc)
+your_list = find_path_astar(start location, end location, adjacent turf proc, distance proc)
For the adjacent turf proc i wrote:
/turf/proc/AdjacentTurfs
And for the distance one i wrote:
/turf/proc/Distance
So an example use might be:
-src.path_list = AStar(src.loc, target.loc, TYPE_PROC_REF(/turf, AdjacentTurfs), TYPE_PROC_REF(/turf, Distance))
+src.path_list = find_path_astar(src.loc, target.loc, TYPE_PROC_REF(/turf, AdjacentTurfs), TYPE_PROC_REF(/turf, Distance))
Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use.
@@ -60,7 +60,12 @@ length to avoid portals or something i guess?? Not that they're counted right no
/proc/PathWeightCompare(PathNode/a, PathNode/b)
return a.estimated_cost - b.estimated_cost
-/proc/AStar(var/start, var/end, adjacent, dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
+/proc/find_path_astar_async(start, end, adjacent, dist, max_nodes, max_node_depth = 30, min_target_dist = 0, min_node_dist, id, datum/exclude)
+ set waitfor = FALSE
+ return find_path_astar(start, end, adjacent, dist, max_nodes, max_node_depth, min_target_dist, min_node_dist, id, exclude, check_tick = TRUE)
+
+/proc/find_path_astar(start, end, adjacent, dist, max_nodes, max_node_depth = 30, min_target_dist = 0, min_node_dist, id, datum/exclude, check_tick = FALSE)
+
var/datum/priority_queue/open = new /datum/priority_queue(/proc/PathWeightCompare)
var/list/closed = list()
var/list/path
@@ -85,13 +90,11 @@ length to avoid portals or something i guess?? Not that they're counted right no
path[index--] = current.position
break
- if(min_node_dist && max_node_depth)
- if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth)
- continue
+ if(min_node_dist && max_node_depth && (call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth))
+ continue
- if(max_node_depth)
- if(current.nodes_traversed >= max_node_depth)
- continue
+ if(max_node_depth && current.nodes_traversed >= max_node_depth)
+ continue
for(var/datum/datum in call(current.position, adjacent)(id))
if(datum == exclude)
@@ -115,4 +118,9 @@ length to avoid portals or something i guess?? Not that they're counted right no
if(max_nodes && open.Length() > max_nodes)
open.Remove(open.Length())
+ if(check_tick)
+ CHECK_TICK
+ if(check_tick)
+ CHECK_TICK
+
return path
diff --git a/code/unit_tests/_template.dm b/code/unit_tests/_template.dm
index 556941cb1ce..36dc0ddfa18 100644
--- a/code/unit_tests/_template.dm
+++ b/code/unit_tests/_template.dm
@@ -7,8 +7,8 @@
/datum/unit_test/template
name = "Test Template - Change My name"
- template = /datum/unit_test/template // Set this var equal to the test path to treat it as a template, i.e. it should not be run
- async = 1 // Set if we should continue testing elsewhere and come back and check on the results.
+ abstract_type = /datum/unit_test/template // Set this var equal to the test path to treat it as a template, i.e. it should not be run
+ async = 1 // Set if we should continue testing elsewhere and come back and check on the results.
/datum/unit_test/template/start_test()
diff --git a/code/unit_tests/alt_appearances_test.dm b/code/unit_tests/alt_appearances_test.dm
index 1bfd0ed325e..d1c4b22a8e8 100644
--- a/code/unit_tests/alt_appearances_test.dm
+++ b/code/unit_tests/alt_appearances_test.dm
@@ -20,9 +20,8 @@
for(var/ca_type in decls_repository.get_decl_paths_of_subtype(/decl/cardborg_appearance))
var/decl/cardborg_appearance/ca = ca_type
- var/list/existing_icon_states = icon_states(initial(ca.icon))
var/icon_state = initial(ca.icon_state)
- if(!(icon_state in existing_icon_states))
+ if(!check_state_in_icon(icon_state, initial(ca.icon)))
log_unit_test("Icon state [icon_state] is missing.")
failed = TRUE
if(failed)
diff --git a/code/unit_tests/atmospherics_tests.dm b/code/unit_tests/atmospherics_tests.dm
index 5a9c69c15cf..46837d818bf 100644
--- a/code/unit_tests/atmospherics_tests.dm
+++ b/code/unit_tests/atmospherics_tests.dm
@@ -2,7 +2,7 @@
Unit tests for ATMOSPHERICS primitives
*/
/datum/unit_test/atmos_machinery
- template = /datum/unit_test/atmos_machinery
+ abstract_type = /datum/unit_test/atmos_machinery
var/list/test_cases = list()
/datum/unit_test/atmos_machinery/proc/create_gas_mixes(gas_mix_data)
@@ -60,7 +60,7 @@
pass("[case_name]: conserved moles of each gas ID.")
/datum/unit_test/atmos_machinery/conserve_moles
- template = /datum/unit_test/atmos_machinery/conserve_moles
+ abstract_type = /datum/unit_test/atmos_machinery/conserve_moles
test_cases = list(
uphill = list(
source = list(
diff --git a/code/unit_tests/backgrounds.dm b/code/unit_tests/backgrounds.dm
index d44e5e2c5c3..e08b1ec3751 100644
--- a/code/unit_tests/backgrounds.dm
+++ b/code/unit_tests/backgrounds.dm
@@ -1,5 +1,5 @@
/datum/unit_test/background
- name = "BACKGROUND - All Species Background Values Shall Be Of Valid Types And Length"
+ name = "BACKGROUND: All Species Background Values Shall Be Of Valid Types And Length"
/datum/unit_test/background/start_test()
diff --git a/code/unit_tests/chemistry_tests.dm b/code/unit_tests/chemistry_tests.dm
index bb6e9d90477..cdc9dae00d4 100644
--- a/code/unit_tests/chemistry_tests.dm
+++ b/code/unit_tests/chemistry_tests.dm
@@ -1,6 +1,6 @@
/datum/unit_test/chemistry
name = "CHEMISTRY: Reagent Template"
- template = /datum/unit_test/chemistry
+ abstract_type = /datum/unit_test/chemistry
var/container_volume = 45
var/donor_type = /obj/item
diff --git a/code/unit_tests/closets.dm b/code/unit_tests/closets.dm
index 9bc236f8ff9..10688fd7231 100644
--- a/code/unit_tests/closets.dm
+++ b/code/unit_tests/closets.dm
@@ -29,18 +29,18 @@
if(!closet.base_icon)
LAZYADD(bad_base_icon, "[closet.type]")
else
- var/list/base_states = icon_states(closet.base_icon)
+ var/list/base_states = get_states_in_icon_cached(closet.base_icon)
for(var/thing in check_base_states)
- if(!(thing in base_states))
+ if(!base_states[thing])
LAZYADD(bad_base_state, "[closet.type] - [thing] - [closet.base_icon]")
if(LAZYLEN(closet.decals) && !closet.decal_icon)
LAZYADD(bad_decal_icon, "[closet.type]")
else
- var/list/decal_states = icon_states(closet.decal_icon)
+ var/list/decal_states = get_states_in_icon_cached(closet.decal_icon)
for(var/thing in closet.decals)
if(isnull(closet.decals[thing]))
LAZYADD(bad_decal_colour, "[check_appearance] - [thing]")
- if(!(thing in decal_states))
+ if(!decal_states[thing])
LAZYADD(bad_decal_state, "[check_appearance] - [thing] - [closet.decal_icon]")
if( \
diff --git a/code/unit_tests/clothing.dm b/code/unit_tests/clothing.dm
index 2b3889695c3..8219e6d0418 100644
--- a/code/unit_tests/clothing.dm
+++ b/code/unit_tests/clothing.dm
@@ -99,7 +99,7 @@
generated_tokens += "[token][clothes.markings_state_modifier]"
// Keep track of which states we've looked for or otherwise evaluated for later state checking.
- var/list/check_states = icon_states(clothes.icon)
+ var/list/check_states = get_states_in_icon(clothes.icon)
// Validate against the list of generated tokens.
for(var/gen_token in generated_tokens)
diff --git a/code/unit_tests/codex.dm b/code/unit_tests/codex.dm
index 92a97cec0d5..2130edd1f88 100644
--- a/code/unit_tests/codex.dm
+++ b/code/unit_tests/codex.dm
@@ -1,5 +1,5 @@
/datum/unit_test/codex_string_uniqueness
- name = "CODEX - All Codex Associated Strings Shall Be Unique"
+ name = "CODEX: All Codex Associated Strings Shall Be Unique"
/datum/unit_test/codex_string_uniqueness/start_test()
var/list/failures = list()
@@ -18,7 +18,7 @@
return TRUE
/datum/unit_test/codex_overlap
- name = "CODEX - No Codex String IDs Shall Overlap"
+ name = "CODEX: No Codex String IDs Shall Overlap"
/datum/unit_test/codex_overlap/start_test()
var/list/failures = list()
@@ -42,7 +42,7 @@
return TRUE
/datum/unit_test/codex_links
- name = "CODEX - All Codex Links Will Function"
+ name = "CODEX: All Codex Links Will Function"
/datum/unit_test/codex_links/start_test()
var/list/failures = list()
@@ -64,7 +64,7 @@
return 1
/datum/unit_test/codex_dump_test
- name = "CODEX - Codex Will Successfully Dump To Filesystem"
+ name = "CODEX: Codex Will Successfully Dump To Filesystem"
/datum/unit_test/codex_dump_test/start_test()
var/dump_result
diff --git a/code/unit_tests/del_the_world.dm b/code/unit_tests/del_the_world.dm
index 3a9c575e699..411ef21b8d3 100644
--- a/code/unit_tests/del_the_world.dm
+++ b/code/unit_tests/del_the_world.dm
@@ -7,15 +7,6 @@
var/turf/spawn_loc = get_safe_turf()
var/list/cached_contents = spawn_loc.contents.Copy()
- /// Types to except from GC checking tests.
- var/list/gc_exceptions = list(
- // I hate doing this, but until the graph tests are fixed by someone who actually understands them,
- // this is the best I can do without breaking other stuff.
- /datum/node/physical,
- // Randomly fails to GC during CI, cause unclear. Remove this if the root cause is identified.
- /obj/item/organ/external/chest
- )
-
var/list/ignore = typesof(
// will error if the area already has one
/obj/machinery/power/apc,
@@ -48,57 +39,52 @@
continue
qdel(to_del, force = TRUE) // I hate borg stacks I hate borg stacks
AM = null // this counts as a reference to the last item if we don't explicitly clear it??
+ del_candidates.Cut() // this also??
// Check for hanging references.
SSticker.delay_end = TRUE // Don't end the round while we wait!
- // No harddels during this test.
- SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = 6 HOURS // github CI timeout length
+ // Drastically lower the amount of time it takes to GC, since we don't have clients that can hold it up.
+ SSgarbage.collection_timeout[GC_QUEUE_CHECK] = 10 SECONDS
cached_contents.Cut()
+ var/list/queues_we_care_about = list()
+ // All of em, I want hard deletes too, since we rely on the debug info from them
+ for(var/i in 1 to GC_QUEUE_HARDDELETE)
+ queues_we_care_about += i
+
+ //Now that we've qdel'd everything, let's sleep until the gc has processed all the shit we care about
+ // + 2 seconds to ensure that everything gets in the queue.
+ var/time_needed = 2 SECONDS
+ for(var/index in queues_we_care_about)
+ time_needed += SSgarbage.collection_timeout[index]
+
// track start time so we know anything deleted after this point isn't ours
var/start_time = world.time
- // spin until the first item in the filter queue is older than start_time
- var/filter_queue_finished = FALSE
- var/list/filter_queue = SSgarbage.queues[GC_QUEUE_FILTER]
- while(!filter_queue_finished)
- if(!length(filter_queue))
- filter_queue_finished = TRUE
- break
- var/oldest_item = filter_queue[1]
- var/qdel_time = filter_queue[oldest_item]
- if(qdel_time > start_time) // Everything is in the check queue now!
- filter_queue_finished = TRUE
- break
- if(world.time > start_time + 2 MINUTES)
- fail("Something has gone horribly wrong, the filter queue has been processing for well over 2 minutes. What the hell did you do??")
- break
- // We want to fire every time.
- SSgarbage.next_fire = 1
- sleep(2 SECONDS)
- // We need to check the check queue now.
- start_time = world.time
- // sleep until SSgarbage has run through the queue
- var/time_needed = SSgarbage.collection_timeout[GC_QUEUE_CHECK]
- sleep(time_needed)
- // taken verbatim from TG's Del The World
+ var/real_start_time = REALTIMEOFDAY
var/garbage_queue_processed = FALSE
- var/list/check_queue = SSgarbage.queues[GC_QUEUE_CHECK]
+
+ sleep(time_needed)
while(!garbage_queue_processed)
- //How the hell did you manage to empty this? Good job!
- if(!length(check_queue))
- garbage_queue_processed = TRUE
- break
+ var/oldest_packet_creation = INFINITY
+ for(var/index in queues_we_care_about)
+ var/list/queue_to_check = SSgarbage.queues[index]
+ if(!length(queue_to_check))
+ continue
+
+ var/list/oldest_packet = queue_to_check[1]
+ //Pull out the time we inserted at
+ var/qdeld_at = oldest_packet[GC_QUEUE_ITEM_GCD_DESTROYED]
+
+ oldest_packet_creation = min(qdeld_at, oldest_packet_creation)
- var/oldest_packet = check_queue[1]
- //Pull out the time we deld at
- var/qdeld_at = check_queue[oldest_packet]
//If we've found a packet that got del'd later then we finished, then all our shit has been processed
- if(qdeld_at > start_time)
+ //That said, if there are any pending hard deletes you may NOT sleep, we gotta handle that shit
+ if(oldest_packet_creation > start_time && !length(SSgarbage.queues[GC_QUEUE_HARDDELETE]))
garbage_queue_processed = TRUE
break
- if(world.time > start_time + time_needed + 8 MINUTES)
- fail("The garbage queue has been processing for well over 10 minutes. Something is likely broken.")
+ if(REALTIMEOFDAY > real_start_time + time_needed + 30 MINUTES) //If this gets us gitbanned I'm going to laugh so hard
+ fail("Something has gone horribly wrong, the garbage queue has been processing for well over 30 minutes. What the hell did you do")
break
//Immediately fire the gc right after
@@ -109,8 +95,6 @@
//Alright, time to see if anything messed up
var/list/cache_for_sonic_speed = SSgarbage.items
for(var/path in cache_for_sonic_speed)
- if(path in gc_exceptions)
- continue
var/datum/qdel_item/item = cache_for_sonic_speed[path]
if(item.failures)
failures += "[item.name] hard deleted [item.failures] times out of a total del count of [item.qdels]"
diff --git a/code/unit_tests/equipment_tests.dm b/code/unit_tests/equipment_tests.dm
index 558debe8c65..dac446856e8 100644
--- a/code/unit_tests/equipment_tests.dm
+++ b/code/unit_tests/equipment_tests.dm
@@ -1,41 +1,37 @@
/datum/unit_test/vision_glasses
name = "EQUIPMENT: Vision Template"
- template = /datum/unit_test/vision_glasses
- var/mob/living/human/H = null
+ abstract_type = /datum/unit_test/vision_glasses
+ var/mob/living/human/subject = null
var/expectation = SEE_INVISIBLE_NOLIGHTING
var/glasses_type = null
async = 1
/datum/unit_test/vision_glasses/start_test()
- var/list/test = create_test_mob_with_mind(get_safe_turf(), /mob/living/human)
- if(isnull(test))
- fail("Check Runtimed in Mob creation")
-
- if(test["result"] == FAILURE)
- fail(test["msg"])
- async = 0
- return 0
-
- H = locate(test["mobref"])
- return H?.equip_to_slot(new glasses_type(H), slot_glasses_str, TRUE, TRUE)
+ subject = new(get_safe_turf(), SPECIES_HUMAN) // force human so default map species doesn't mess with anything
+ subject.equip_to_slot(new glasses_type(subject), slot_glasses_str)
+ return 1
/datum/unit_test/vision_glasses/check_result()
- if(isnull(H) || H.life_tick < 2)
+ if(isnull(subject) || subject.life_tick < 2)
return 0
- if(isnull(H.get_equipped_item(slot_glasses_str)))
+ if(isnull(subject.get_equipped_item(slot_glasses_str)))
fail("Mob doesn't have glasses on")
- H.handle_vision() // Because Life has a client check that bypasses updating vision
+ subject.handle_vision() // Because Life has a client check that bypasses updating vision
- if(H.see_invisible == expectation)
- pass("Mob See invisible is [H.see_invisible]")
+ if(subject.see_invisible == expectation)
+ pass("Mob See invisible is [subject.see_invisible]")
else
- fail("Mob See invisible is [H.see_invisible] / expected [expectation]")
+ fail("Mob See invisible is [subject.see_invisible] / expected [expectation]")
return 1
+/datum/unit_test/vision_glasses/teardown_test()
+ QDEL_NULL(subject)
+ . = ..()
+
/datum/unit_test/vision_glasses/NVG
name = "EQUIPMENT: NVG see_invis"
glasses_type = /obj/item/clothing/glasses/night
diff --git a/code/unit_tests/extension_tests.dm b/code/unit_tests/extension_tests.dm
index 3cf14a6f23d..2a7724e3cc7 100644
--- a/code/unit_tests/extension_tests.dm
+++ b/code/unit_tests/extension_tests.dm
@@ -1,10 +1,10 @@
/datum/unit_test/extensions
name = "EXTENSIONS template"
- template = /datum/unit_test/extensions
+ abstract_type = /datum/unit_test/extensions
async = 0
/datum/unit_test/extensions/basic_extension_shall_lazy_initalize_as_expected
- name = "EXTENSIONS - Basic extension shall lazy initialize as expected"
+ name = "EXTENSIONS: Basic extension shall lazy initialize as expected"
/datum/unit_test/extensions/basic_extension_shall_lazy_initalize_as_expected/start_test()
var/turf/start = get_safe_turf()
@@ -40,7 +40,7 @@
return TRUE
/datum/unit_test/extensions/basic_immediate_extension_shall_initalize_as_expected
- name = "EXTENSIONS - Basic immediate extension shall initialize as expected"
+ name = "EXTENSIONS: Basic immediate extension shall initialize as expected"
/datum/unit_test/extensions/basic_immediate_extension_shall_initalize_as_expected/start_test()
var/turf/start = get_safe_turf()
@@ -71,7 +71,7 @@
return TRUE
/datum/unit_test/extensions/shall_acquire_extension_subtype_as_expected
- name = "EXTENSIONS - Shall acquire extension subtype as expected"
+ name = "EXTENSIONS: Shall acquire extension subtype as expected"
/datum/unit_test/extensions/shall_acquire_extension_subtype_as_expected/start_test()
var/turf/start = get_safe_turf()
@@ -88,7 +88,7 @@
return TRUE
/datum/unit_test/extensions/extension_shall_be_provided_arguments_as_expected
- name = "EXTENSIONS - Extension shall be provided arguments as expected"
+ name = "EXTENSIONS: Extension shall be provided arguments as expected"
/datum/unit_test/extensions/extension_shall_be_provided_arguments_as_expected/start_test()
var/turf/start = get_safe_turf()
@@ -105,7 +105,7 @@
return TRUE
/datum/unit_test/extensions/immediate_extension_shall_be_provided_arguments_as_expected
- name = "EXTENSIONS - Immediate extension shall be provided arguments as expected"
+ name = "EXTENSIONS: Immediate extension shall be provided arguments as expected"
/datum/unit_test/extensions/immediate_extension_shall_be_provided_arguments_as_expected/start_test()
var/turf/start = get_safe_turf()
@@ -122,7 +122,7 @@
return TRUE
/datum/unit_test/extensions/get_or_create_extension_shall_initialize_as_expected
- name = "EXTENSIONS - get_or_create() shall initialize as expected"
+ name = "EXTENSIONS: get_or_create() shall initialize as expected"
/datum/unit_test/extensions/get_or_create_extension_shall_initialize_as_expected/start_test()
var/turf/start = get_safe_turf()
@@ -147,7 +147,7 @@
return TRUE
/datum/unit_test/extensions/get_or_create_extension_with_arguments_shall_initialize_as_expected
- name = "EXTENSIONS - get_or_create() with arguments shall initialize as expected"
+ name = "EXTENSIONS: get_or_create() with arguments shall initialize as expected"
/datum/unit_test/extensions/get_or_create_extension_with_arguments_shall_initialize_as_expected/start_test()
var/turf/start = get_safe_turf()
diff --git a/code/unit_tests/foundation_tests.dm b/code/unit_tests/foundation_tests.dm
index 66fb31643b3..27196ec37ff 100644
--- a/code/unit_tests/foundation_tests.dm
+++ b/code/unit_tests/foundation_tests.dm
@@ -3,7 +3,7 @@
*/
/datum/unit_test/foundation
name = "FOUNDATION template"
- template = /datum/unit_test/foundation
+ abstract_type = /datum/unit_test/foundation
async = 0
/datum/unit_test/foundation/step_shall_return_true_on_success
diff --git a/code/unit_tests/graph_tests.dm b/code/unit_tests/graph_tests.dm
index 66a939e3a8f..47cdb388f62 100644
--- a/code/unit_tests/graph_tests.dm
+++ b/code/unit_tests/graph_tests.dm
@@ -430,7 +430,7 @@
* Base Test Setup *
******************/
/datum/unit_test/graph_test
- template = /datum/unit_test/graph_test
+ abstract_type = /datum/unit_test/graph_test
async = TRUE
var/list/graphs
@@ -480,7 +480,7 @@
/atom/movable/graph_test
is_spawnable_type = FALSE
var/datum/node/physical/node
- var/list/neighoursByDirection = list()
+ var/list/neighboursByDirection = list()
/atom/movable/graph_test/Initialize()
. = ..()
@@ -489,6 +489,7 @@
/atom/movable/graph_test/Destroy()
QDEL_NULL(node)
+ neighboursByDirection.Cut()
return ..()
/atom/movable/graph_test/forceMove()
@@ -497,20 +498,21 @@
/atom/movable/graph_test/proc/Connect(atom/movable/graph_test/neighbour)
var/direction = get_dir(src, neighbour)
- neighoursByDirection[num2text(direction)] = neighbour
- neighbour.neighoursByDirection[num2text(global.flip_dir[direction])] = src
+ neighboursByDirection[num2text(direction)] = neighbour
+ neighbour.neighboursByDirection[num2text(global.flip_dir[direction])] = src
node.Connect(neighbour.node)
/atom/movable/graph_test/CheckNodeNeighbours()
// This is a lazy setup for ease of debugging
// In a practical setup you'd preferably gather a list of neighbours to be disconnected and pass them in a single Disconnect-call
// You'd possibly also verify the dir of this and neighbour nodes, to ensure that they're still facing each other properly
- for(var/direction in neighoursByDirection)
- var/atom/movable/graph_test/neighbour = neighoursByDirection[direction]
+ for(var/direction in neighboursByDirection)
+ var/atom/movable/graph_test/neighbour = neighboursByDirection[direction]
var/turf/expected_loc = get_step(src, text2num(direction))
- if(neighbour.loc != expected_loc)
+ // can't connect in nullspace
+ if(isnull(neighbour.loc) || neighbour.loc != expected_loc)
node.Disconnect(neighbour.node)
- neighoursByDirection -= direction
+ neighboursByDirection -= direction
return TRUE
/datum/graph/testing
@@ -523,7 +525,7 @@
var/on_split_was_called
var/issues
-/datum/graph/testing/New(var/node, var/edges, var/name)
+/datum/graph/testing/New(var/node, var/edges, var/previous_owner, var/name)
..()
src.name = name || "Graph"
issues = list()
@@ -557,8 +559,10 @@
/datum/graph/testing/proc/CheckExpectations()
if(on_check_expectations)
issues += DoCheckExpectations(on_check_expectations)
+ QDEL_NULL(on_check_expectations) // stop holding up GC!
if(length(split_expectations) && !on_split_was_called)
issues += "Had split expectations but OnSplit was not called"
+ QDEL_LIST(split_expectations) // stop holding up GC!
if(!length(split_expectations) && on_split_was_called)
issues += "Had no split expectations but OnSplit was called"
if(expecting_merge != on_merge_was_called)
@@ -575,6 +579,11 @@
src.expected_nodes = expected_nodes || list()
src.expected_edges = expected_edges || list()
+/datum/graph_expectation/Destroy(force)
+ expected_nodes.Cut()
+ expected_edges.Cut()
+ return ..()
+
// Stub for subtype-specific functionality for DoCheckExpectations.
// Should not access graph.nodes or graph.edges.
/datum/graph_expectation/proc/OnCheckExpectations(var/datum/graph/graph)
diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm
index f2894e862e3..279daba8a34 100644
--- a/code/unit_tests/icon_tests.dm
+++ b/code/unit_tests/icon_tests.dm
@@ -1,9 +1,9 @@
/datum/unit_test/icon_test
name = "ICON STATE template"
- template = /datum/unit_test/icon_test
+ abstract_type = /datum/unit_test/icon_test
/datum/unit_test/icon_test/food_shall_have_icon_states
- name = "ICON STATE - Food And Drink Subtypes Shall Have Icon States"
+ name = "ICON STATE: Food And Drink Subtypes Shall Have Icon States"
var/list/check_types = list(
/obj/item/chems/condiment,
/obj/item/chems/drinks,
@@ -12,11 +12,14 @@
// We skip lumps because they are invisible, they are only ever inside utensils.
var/list/skip_types = list(/obj/item/food/lump)
-/datum/unit_test/icon_test/food_shall_have_icon_states/start_test()
-
+/datum/unit_test/icon_test/food_shall_have_icon_states/proc/assemble_skipped_types()
skip_types |= typesof(/obj/item/food/grown)
skip_types |= typesof(/obj/item/food/processed_grown)
+/datum/unit_test/icon_test/food_shall_have_icon_states/start_test()
+
+ assemble_skipped_types()
+
var/list/failures = list()
for(var/check_type in check_types)
for(var/check_subtype in typesof(check_type))
@@ -48,7 +51,7 @@
return 1
/datum/unit_test/icon_test/turfs_shall_have_icon_states
- name = "ICON STATE - Turf Subtypes Shall Have Icon States"
+ name = "ICON STATE: Turf Subtypes Shall Have Icon States"
var/list/except_types = list(
/turf/mimic_edge,
/turf/open
@@ -82,7 +85,7 @@
return 1
/datum/unit_test/icon_test/signs_shall_have_existing_icon_states
- name = "ICON STATE - Signs shall have existing icon states"
+ name = "ICON STATE: Signs shall have existing icon states"
var/list/skip_types = list(
// Posters use a decl to set their icon and handle their own validation.
/obj/structure/sign/poster
@@ -121,7 +124,7 @@
return 1
/datum/unit_test/icon_test/random_spawners_shall_have_existing_icon_states
- name = "ICON STATE - Random spawners shall have existing icon states"
+ name = "ICON STATE: Random spawners shall have existing icon states"
/datum/unit_test/icon_test/random_spawners_shall_have_existing_icon_states/start_test()
var/list/failures = list()
@@ -144,7 +147,7 @@
return 1
/datum/unit_test/icon_test/floor_decals_shall_have_existing_icon_states
- name = "ICON STATE - Floor decals shall have existing icon states"
+ name = "ICON STATE: Floor decals shall have existing icon states"
var/static/list/excepted_types = list(
/obj/effect/floor_decal/reset,
/obj/effect/floor_decal/undo
@@ -172,7 +175,7 @@
return 1
/datum/unit_test/icon_test/bgstate
- name = "ICON_STATE - Character Previews Will Have Background States"
+ name = "ICON STATE: Character Previews Will Have Background States"
/datum/unit_test/icon_test/bgstate/start_test()
var/obj/screen/setup_preview/preview = /obj/screen/setup_preview
@@ -195,3 +198,165 @@
else
pass("All preview icons have all background icon states.")
return 1
+
+/datum/unit_test/icon_test/smartfridges
+ name = "ICON STATE: Smartfridges Will Have All Needed Icon States"
+
+/datum/unit_test/icon_test/smartfridges/start_test()
+ var/list/failures = list()
+ var/list/test_icons = list()
+ var/list/test_contents_overlays = list()
+ for(var/obj/machinery/smartfridge/fridge as anything in typesof(/obj/machinery/smartfridge))
+ if(TYPE_IS_ABSTRACT(fridge) || !fridge::simulated)
+ continue
+ var/fridge_icon = fridge::icon
+ if(fridge_icon)
+ test_icons |= fridge_icon
+ else
+ failures += "[fridge] has null icon"
+ var/fridge_state = fridge::icon_state
+ if(fridge_state != ICON_STATE_WORLD)
+ failures += "[fridge] has non-world icon_state '[fridge_state]'"
+ var/fridge_contents_icon = fridge::overlay_contents_icon
+ if(fridge_contents_icon)
+ test_contents_overlays |= fridge_contents_icon
+
+ for(var/test_icon in test_icons)
+ var/static/list/fridge_states = list(
+ "world",
+ "world-vend",
+ "world-deny",
+ "world-off",
+ "world-broken",
+ "world-panel",
+ "world-top",
+ "world-top-broken",
+ "world-broken",
+ "world-sidepanel",
+ "world-sidepanel-broken"
+ )
+ for(var/test_state in fridge_states)
+ if(!check_state_in_icon(test_state, test_icon))
+ failures += "[test_icon] missing icon_state [test_state]"
+
+ for(var/test_icon in test_contents_overlays)
+ var/static/list/test_overlays = list(
+ "empty",
+ "1",
+ "2",
+ "3",
+ "4",
+ "empty-off",
+ "1-off",
+ "2-off",
+ "3-off",
+ "4-off"
+ )
+ for(var/test_overlay in test_overlays)
+ if(!check_state_in_icon(test_overlay, test_icon))
+ failures += "[test_icon] missing overlay [test_overlay]"
+
+ if(length(failures))
+ fail("Missing smartfridge icons or icon states:\n\t-[jointext(failures, "\n\t-")]")
+ else
+ pass("All smartfridges have all icons and icon states.")
+ return 1
+
+/datum/unit_test/icon_test/vendors
+ name = "ICON STATE: Vending Machines Will Have All Needed Icon States"
+
+/datum/unit_test/icon_test/vendors/start_test()
+ var/list/failures = list()
+ var/list/test_icons = list()
+
+ for(var/obj/machinery/vending/vendor as anything in typesof(/obj/machinery/vending))
+ if(TYPE_IS_ABSTRACT(vendor) || !vendor::simulated)
+ continue
+ var/vendor_icon = vendor::icon
+ if(vendor_icon)
+ test_icons |= vendor_icon
+ else
+ failures += "[vendor] has null icon"
+ var/vendor_state = vendor::icon_state
+ if(vendor_state != ICON_STATE_WORLD)
+ failures += "[vendor] has non-world icon_state '[vendor_state]'"
+
+ for(var/test_icon in test_icons)
+ var/static/list/vendor_states = list(
+ "world",
+ "world-vend",
+ "world-deny",
+ "world-off",
+ "world-broken",
+ "world-panel",
+ )
+ for(var/test_state in vendor_states)
+ if(!check_state_in_icon(test_state, test_icon))
+ failures += "[test_icon] missing icon_state [test_state]"
+
+ if(length(failures))
+ fail("Missing vendor icons or icon states:\n\t-[jointext(failures, "\n\t-")]")
+ else
+ pass("All vendors have all icons and icon states.")
+ return 1
+
+
+/datum/unit_test/HUDS_shall_have_icon_states
+ name = "ICON STATE: HUD overlays shall have appropriate icon_states"
+
+/datum/unit_test/HUDS_shall_have_icon_states/start_test()
+ var/failed_jobs = 0
+ var/failed_sanity_checks = 0
+
+ // Throwing implants and health HUDs in here.
+ // Antag HUDs are tested by special role validation.
+
+ var/static/list/implant_hud_states = list(
+ "hud_imp_blank" = "Blank",
+ "hud_imp_loyal" = "Loyalty",
+ "hud_imp_unknown" = "Unknown",
+ "hud_imp_tracking" = "Tracking",
+ "hud_imp_chem" = "Chemical",
+ )
+ for(var/implant_hud_state in implant_hud_states)
+ if(!check_state_in_icon(implant_hud_state, global.using_map.implant_hud_icons))
+ log_bad("Sanity Check - Missing map [implant_hud_states[implant_hud_state]] implant HUD icon_state '[implant_hud_state]' from icon [global.using_map.implant_hud_icons]")
+ failed_sanity_checks++
+
+ var/static/list/med_hud_states = list(
+ "blank" = "Blank",
+ "flatline" = "Flatline",
+ "0" = "Dead",
+ "1" = "Healthy",
+ "2" = "Lightly injured",
+ "3" = "Moderately injured",
+ "4" = "Severely injured",
+ "5" = "Dying",
+ )
+ for(var/med_hud_state in med_hud_states)
+ if(!check_state_in_icon(med_hud_state, global.using_map.med_hud_icons))
+ log_bad("Sanity Check - Missing map [med_hud_states[med_hud_state]] medical HUD icon_state '[med_hud_state]' from icon [global.using_map.med_hud_icons]")
+ failed_sanity_checks++
+ var/static/list/global_states = list(
+ "" = "Default/unnamed",
+ "hudunknown" = "Unknown role",
+ "hudhealthy" = "Healthy mob",
+ "hudill" = "Diseased mob",
+ "huddead" = "Dead mob"
+ )
+ for(var/global_state in global_states)
+ if(!check_state_in_icon(global_state, global.using_map.hud_icons))
+ log_bad("Sanity Check - Missing map [global_states[global_state]] HUD icon_state '[global_state]' from icon [global.using_map.hud_icons]")
+ failed_sanity_checks++
+
+ for(var/job_name in SSjobs.titles_to_datums)
+ var/datum/job/job = SSjobs.titles_to_datums[job_name]
+ if(!check_state_in_icon(job.hud_icon_state, job.hud_icon))
+ log_bad("[job.title] - Missing HUD icon: [job.hud_icon_state] in icon [job.hud_icon]")
+ failed_jobs++
+
+ if(failed_sanity_checks || failed_jobs)
+ fail("[global.using_map.type] - [failed_sanity_checks] failed sanity check\s, [failed_jobs] job\s with missing HUD icon.")
+ else
+ pass("All jobs have a HUD icon.")
+ return 1
diff --git a/code/unit_tests/integrated_circuits.dm b/code/unit_tests/integrated_circuits.dm
index ca6d5099487..84de2ac2ff3 100644
--- a/code/unit_tests/integrated_circuits.dm
+++ b/code/unit_tests/integrated_circuits.dm
@@ -1,8 +1,8 @@
/datum/unit_test/integrated_circuits
- template = /datum/unit_test/integrated_circuits
+ abstract_type = /datum/unit_test/integrated_circuits
/datum/unit_test/integrated_circuits/unique_names
- name = "INTEGRATED CIRCUITS - Circuits must have unique names"
+ name = "INTEGRATED CIRCUITS: Circuits must have unique names"
/datum/unit_test/integrated_circuits/unique_names/start_test()
var/list/circuits_by_name = list()
@@ -20,7 +20,7 @@
/datum/unit_test/integrated_circuits/prefabs_are_valid
- name = "INTEGRATED CIRCUITS - Prefabs Are Valid"
+ name = "INTEGRATED CIRCUITS: Prefabs Are Valid"
/datum/unit_test/integrated_circuits/prefabs_are_valid/start_test()
var/list/failed_prefabs = list()
@@ -37,7 +37,7 @@
return 1
/datum/unit_test/integrated_circuits/prefabs_shall_not_fail_to_create
- name = "INTEGRATED CIRCUITS - Prefabs Shall Not Fail To Create"
+ name = "INTEGRATED CIRCUITS: Prefabs Shall Not Fail To Create"
/datum/unit_test/integrated_circuits/prefabs_shall_not_fail_to_create/start_test()
var/list/failed_prefabs = list()
@@ -63,8 +63,8 @@
return 1
/datum/unit_test/integrated_circuits/input_output
- name = "INTEGRATED CIRCUITS - INPUT/OUTPUT - TEMPLATE"
- template = /datum/unit_test/integrated_circuits/input_output
+ name = "INTEGRATED CIRCUITS: INPUT/OUTPUT - TEMPLATE"
+ abstract_type = /datum/unit_test/integrated_circuits/input_output
var/list/all_inputs = list()
var/list/all_expected_outputs = list()
var/activation_pin = 1
@@ -110,13 +110,13 @@
return 1
/datum/unit_test/integrated_circuits/input_output/multiplexer
- name = "INTEGRATED CIRCUITS - INPUT/OUTPUT - Multiplexer - Medium"
+ name = "INTEGRATED CIRCUITS: INPUT/OUTPUT - Multiplexer - Medium"
all_inputs = list(list(1,1,2,3,4),list(2,1,2,3,4),list(3,1,2,3,4),list(4,1,2,3,4))
all_expected_outputs = list(list(1),list(2),list(3),list(4))
circuit_type = /obj/item/integrated_circuit/transfer/multiplexer/medium
/datum/unit_test/integrated_circuits/input_output/demultiplexer
- name = "INTEGRATED CIRCUITS - INPUT/OUTPUT - Demultiplexer - Medium"
+ name = "INTEGRATED CIRCUITS: INPUT/OUTPUT - Demultiplexer - Medium"
all_inputs = list(list(1,5),list(2,6),list(3,7),list(4,8))
all_expected_outputs = list(list(5,null,null,null),list(null,6,null,null),list(null,null,7,null),list(null,null,null,8))
circuit_type = /obj/item/integrated_circuit/transfer/demultiplexer/medium
diff --git a/code/unit_tests/job_tests.dm b/code/unit_tests/job_tests.dm
index b1295165734..b6b652731f8 100644
--- a/code/unit_tests/job_tests.dm
+++ b/code/unit_tests/job_tests.dm
@@ -35,36 +35,6 @@
pass("All jobs had outfit types.")
return 1
-/datum/unit_test/jobs_shall_have_a_HUD_icon
- name = "JOB: Shall have a HUD icon"
-
-/datum/unit_test/jobs_shall_have_a_HUD_icon/start_test()
- var/failed_jobs = 0
- var/failed_sanity_checks = 0
-
- var/job_huds = icon_states(global.using_map.id_hud_icons)
-
- if(!("" in job_huds))
- log_bad("Sanity Check - Missing default/unnamed HUD icon")
- failed_sanity_checks++
-
- if(!("hudunknown" in job_huds))
- log_bad("Sanity Check - Missing HUD icon: hudunknown")
- failed_sanity_checks++
-
- for(var/job_name in SSjobs.titles_to_datums)
- var/datum/job/J = SSjobs.titles_to_datums[job_name]
- var/hud_icon_state = J.hud_icon
- if(!(hud_icon_state in job_huds))
- log_bad("[J.title] - Missing HUD icon: [hud_icon_state]")
- failed_jobs++
-
- if(failed_sanity_checks || failed_jobs)
- fail("[global.using_map.id_hud_icons] - [failed_sanity_checks] failed sanity check\s, [failed_jobs] job\s with missing HUD icon.")
- else
- pass("All jobs have a HUD icon.")
- return 1
-
/datum/unit_test/jobs_shall_have_a_unique_title
name = "JOBS: All Job Datums Shall Have A Unique Title"
diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm
index 2803ba8db09..89238fa88d2 100644
--- a/code/unit_tests/map_tests.dm
+++ b/code/unit_tests/map_tests.dm
@@ -503,6 +503,28 @@
//=======================================================================================
+// These vars are used to avoid in-world loops in the following unit test.
+var/global/_unit_test_disposal_segments = list()
+var/global/_unit_test_sort_junctions = list()
+
+#ifdef UNIT_TEST
+/obj/structure/disposalpipe/segment/Initialize(mapload)
+ . = ..()
+ _unit_test_disposal_segments += src
+
+/obj/structure/disposalpipe/segment/Destroy()
+ _unit_test_disposal_segments -= src
+ return ..()
+
+/obj/structure/disposalpipe/sortjunction/Initialize(mapload)
+ . = ..()
+ _unit_test_sort_junctions += src
+
+/obj/structure/disposalpipe/sortjunction/Destroy()
+ _unit_test_sort_junctions -= src
+ return ..()
+#endif
+
/datum/unit_test/disposal_segments_shall_connect_with_other_disposal_pipes
name = "MAP: Disposal segments shall connect with other disposal pipes"
@@ -522,7 +544,7 @@
num2text(SOUTH) = list(list(SOUTH, list(NORTH, WEST)), list(EAST, list(NORTH, EAST))),
num2text(WEST) = list(list(EAST, list(NORTH, EAST)), list(SOUTH, list(SOUTH, EAST))))
- for(var/obj/structure/disposalpipe/segment/D in world)
+ for(var/obj/structure/disposalpipe/segment/D in _unit_test_disposal_segments)
if(!D.loc)
continue
if(D.icon_state == "pipe-s")
@@ -760,7 +782,7 @@
/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/start_test()
. = 1
var/fail = FALSE
- for(var/obj/structure/disposalpipe/sortjunction/sort in world)
+ for(var/obj/structure/disposalpipe/sortjunction/sort in _unit_test_sort_junctions)
if(!sort.loc)
continue
if(is_type_in_list(sort, exempt_junctions))
diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm
index 5867dd2ca90..2f03eb9da32 100644
--- a/code/unit_tests/mob_tests.dm
+++ b/code/unit_tests/mob_tests.dm
@@ -58,21 +58,9 @@
// ============================================================================
-var/global/default_mobloc = null
-
-/proc/create_test_mob_with_mind(var/turf/mobloc = null, var/mobtype = /mob/living/human)
+/datum/unit_test/mob_damage/proc/create_test_mob_with_mind(var/turf/mobloc, var/mobtype = /mob/living/human)
var/list/test_result = list("result" = FAILURE, "msg" = "", "mobref" = null)
- if(isnull(mobloc))
- if(!default_mobloc)
- for(var/turf/floor/tiled/T in world)
- if(!T.zone?.air)
- continue
- var/pressure = T.zone.air.return_pressure()
- if(90 < pressure && pressure < 120) // Find a turf between 90 and 120
- default_mobloc = T
- break
- mobloc = default_mobloc
if(!mobloc)
test_result["msg"] = "Unable to find a location to create test mob"
return test_result
@@ -129,7 +117,7 @@ var/global/default_mobloc = null
/datum/unit_test/mob_damage
name = "MOB: Template for mob damage"
- template = /datum/unit_test/mob_damage
+ abstract_type = /datum/unit_test/mob_damage
var/damagetype = BRUTE
var/mob_type = /mob/living/human
var/expected_vulnerability = STANDARD
@@ -260,15 +248,15 @@ var/global/default_mobloc = null
fail("[icon_file] is not a valid icon file.")
return 1
- var/list/valid_states = icon_states(icon_file)
+ var/list/valid_states = get_states_in_icon_cached(icon_file)
- if(!valid_states.len)
+ if(!length(valid_states))
return 1
for(var/i=1, i<=SSrobots.all_module_names.len, i++)
var/modname = lowertext(SSrobots.all_module_names[i])
var/bad_msg = "[ascii_red]--------------- [modname]"
- if(!(modname in valid_states))
+ if(!valid_states[modname])
log_unit_test("[bad_msg] does not contain a valid icon state in [icon_file][ascii_reset]")
failed=1
diff --git a/code/unit_tests/movement_tests.dm b/code/unit_tests/movement_tests.dm
index d86ee6585a7..dbcb2bc4499 100644
--- a/code/unit_tests/movement_tests.dm
+++ b/code/unit_tests/movement_tests.dm
@@ -1,10 +1,10 @@
/datum/unit_test/movement
name = "MOVEMENT template"
- template = /datum/unit_test/movement
+ abstract_type = /datum/unit_test/movement
async = 0
/datum/unit_test/movement/force_move_shall_trigger_crossed_when_entering_turf
- name = "MOVEMENT - Force Move Shall Trigger Crossed When Entering Turf"
+ name = "MOVEMENT: Force Move Shall Trigger Crossed When Entering Turf"
/datum/unit_test/movement/force_move_shall_trigger_crossed_when_entering_turf/start_test()
var/turf/start = get_safe_turf()
@@ -27,7 +27,7 @@
return TRUE
/datum/unit_test/movement/force_move_shall_trigger_entered
- name = "MOVEMENT - Force Move Shall Trigger Entered"
+ name = "MOVEMENT: Force Move Shall Trigger Entered"
/datum/unit_test/movement/force_move_shall_trigger_entered/start_test()
var/turf/start = get_safe_turf()
diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm
index b9174d26fe8..829bc743576 100644
--- a/code/unit_tests/observation_tests.dm
+++ b/code/unit_tests/observation_tests.dm
@@ -4,7 +4,7 @@
/datum/unit_test/observation
name = "OBSERVATION template"
- template = /datum/unit_test/observation
+ abstract_type = /datum/unit_test/observation
async = 0
var/list/received_moves
var/list/received_name_set_events
diff --git a/code/unit_tests/override_tests.dm b/code/unit_tests/override_tests.dm
index 5a904c09ef5..4687b0c72aa 100644
--- a/code/unit_tests/override_tests.dm
+++ b/code/unit_tests/override_tests.dm
@@ -2,10 +2,10 @@
/datum/unit_test/override
name = "OVERRIDE template"
- template = /datum/unit_test/override
+ abstract_type = /datum/unit_test/override
/datum/unit_test/override/obj_random_shall_spawn_heaviest_item
- name = "OVERRIDE - obj/random shall spawn heaviest item"
+ name = "OVERRIDE: obj/random shall spawn heaviest item"
/datum/unit_test/override/obj_random_shall_spawn_heaviest_item/start_test()
global.unit_test_last_obj_random_creation = null
@@ -22,7 +22,7 @@
return 1
/datum/unit_test/override/atom_creator_simple_shall_always_spawn
- name = "OVERRIDE - /datum/atom_creator/simple shall always spawn"
+ name = "OVERRIDE: /datum/atom_creator/simple shall always spawn"
/datum/unit_test/override/atom_creator_simple_shall_always_spawn/start_test()
var/datum/atom_creator/simple/S = new/datum/atom_creator/simple(/obj/unit_test_light, 1)
@@ -40,7 +40,7 @@
return 1
/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest
- name = "OVERRIDE - /datum/atom_creator/weighted shall spawn heaviest"
+ name = "OVERRIDE: /datum/atom_creator/weighted shall spawn heaviest"
/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest/start_test()
var/datum/atom_creator/weighted/W = new/datum/atom_creator/weighted(list(/obj/unit_test_light = 9001, /obj/unit_test_heavy = 1))
@@ -57,7 +57,7 @@
return 1
/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest_recursive
- name = "OVERRIDE - /datum/atom_creator/weighted shall spawn heaviest - Recursive"
+ name = "OVERRIDE: /datum/atom_creator/weighted shall spawn heaviest - Recursive"
/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest_recursive/start_test()
var/datum/atom_creator/weighted/W = new/datum/atom_creator/weighted(
diff --git a/code/unit_tests/proximity_tests.dm b/code/unit_tests/proximity_tests.dm
index b77946ec739..b405a2c3db2 100644
--- a/code/unit_tests/proximity_tests.dm
+++ b/code/unit_tests/proximity_tests.dm
@@ -2,7 +2,7 @@
* Template Setup *
*****************/
/datum/unit_test/proximity
- template = /datum/unit_test/proximity
+ abstract_type = /datum/unit_test/proximity
var/turf/wall/wall
var/obj/proximity_listener/proximity_listener
@@ -24,7 +24,7 @@
wall.set_opacity(opacity)
/datum/unit_test/proximity/visibility
- template = /datum/unit_test/proximity/visibility
+ abstract_type = /datum/unit_test/proximity/visibility
var/list/expected_number_of_turfs_by_trigger_type
/datum/unit_test/proximity/visibility/start_test()
diff --git a/code/unit_tests/subsystem_tests.dm b/code/unit_tests/subsystem_tests.dm
index 95224a7050b..114dcb1a48c 100644
--- a/code/unit_tests/subsystem_tests.dm
+++ b/code/unit_tests/subsystem_tests.dm
@@ -1,5 +1,5 @@
/datum/unit_test/subsystem_atom_shall_have_no_bad_init_calls
- name = "SUBSYSTEM - ATOMS: Shall have no bad init calls"
+ name = "SUBSYSTEM: ATOMS: Shall have no bad init calls"
/datum/unit_test/subsystem_atom_shall_have_no_bad_init_calls/start_test()
if(SSatoms.BadInitializeCalls.len)
@@ -10,7 +10,7 @@
return 1
/datum/unit_test/subsystem_shall_be_initialized
- name = "SUBSYSTEM - INIT: Subsystems shall be initalized"
+ name = "SUBSYSTEM: INIT: Subsystems shall be initalized"
/datum/unit_test/subsystem_shall_be_initialized/start_test()
var/list/bad_subsystems = list()
@@ -28,7 +28,7 @@
return 1
/datum/unit_test/all_atoms_shall_be_initialized
- name = "SUBSYSTEM - ATOMS: All atoms shall be initialized."
+ name = "SUBSYSTEM: ATOMS: All atoms shall be initialized."
/datum/unit_test/all_atoms_shall_be_initialized/start_test()
set background = TRUE // avoid infinite loop warning; SS will still wait for us.
diff --git a/code/unit_tests/time_tests.dm b/code/unit_tests/time_tests.dm
index 8f700ed2d13..55a17518a60 100644
--- a/code/unit_tests/time_tests.dm
+++ b/code/unit_tests/time_tests.dm
@@ -1,9 +1,9 @@
/datum/unit_test/time
- name = "TIME - Template"
- template = /datum/unit_test/time
+ name = "TIME: Template"
+ abstract_type = /datum/unit_test/time
/datum/unit_test/time/shall_validate_sixth_of_june
- name = "Shall validate 6th of June"
+ name = "TIME: Shall validate 6th of June"
/datum/unit_test/time/shall_validate_sixth_of_june/start_test()
var/datum/is_date/day/D = new(6, 6)
@@ -15,7 +15,7 @@
return TRUE
/datum/unit_test/time/shall_not_validate_not_sixth_of_june
- name = "Shall not validate not-6th of June"
+ name = "TIME: Shall not validate not-6th of June"
/datum/unit_test/time/shall_not_validate_not_sixth_of_june/start_test()
var/datum/is_date/day/D = new(1, 1)
@@ -26,10 +26,10 @@
qdel(D)
return TRUE
-/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_before_end
- name = "Shall be able to validate range that include 6th of June - Start before End"
+/datum/unit_test/time/shall_validate_range_that_include_sixth_of_june_start_before_end
+ name = "TIME: Shall be able to validate range that include 6th of June - Start before End"
-/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_before_end/start_test()
+/datum/unit_test/time/shall_validate_range_that_include_sixth_of_june_start_before_end/start_test()
var/datum/is_date/range/R = new(5, 5, 7, 7)
if(R.IsValid())
pass("Validation succeeded")
@@ -38,10 +38,10 @@
qdel(R)
return TRUE
-/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_after_end
- name = "Shall be able to validate range that include 6th of June - Start after End"
+/datum/unit_test/time/shall_validate_range_that_include_sixth_of_june_start_after_end
+ name = "TIME: Shall be able to validate range that include 6th of June - Start after End"
-/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_after_end/start_test()
+/datum/unit_test/time/shall_validate_range_that_include_sixth_of_june_start_after_end/start_test()
var/datum/is_date/range/R = new(8, 8, 7, 7)
if(R.IsValid())
pass("Validation succeeded")
@@ -50,10 +50,10 @@
qdel(R)
return TRUE
-/datum/unit_test/time/shall_not_validate_range_that_exlude_sixt_of_june_start_before_end
- name = "Shall not validate range that exlude 6th of June - Start before End"
+/datum/unit_test/time/shall_not_validate_range_that_exclude_sixth_of_june_start_before_end
+ name = "TIME: Shall not validate range that exclude 6th of June - Start before End"
-/datum/unit_test/time/shall_not_validate_range_that_exlude_sixt_of_june_start_before_end/start_test()
+/datum/unit_test/time/shall_not_validate_range_that_exclude_sixth_of_june_start_before_end/start_test()
var/datum/is_date/range/R = new(7, 7, 8, 8)
if(R.IsValid())
fail("Unexpected validation")
@@ -62,10 +62,10 @@
qdel(R)
return TRUE
-/datum/unit_test/time/shall_not_validate_range_that_exclude_sixt_of_june_start_after_end
- name = "Shall not validate range that exlude 6th of June - Start after End"
+/datum/unit_test/time/shall_not_validate_range_that_exclude_sixth_of_june_start_after_end
+ name = "TIME: Shall not validate range that exclude 6th of June - Start after End"
-/datum/unit_test/time/shall_not_validate_range_that_exclude_sixt_of_june_start_after_end/start_test()
+/datum/unit_test/time/shall_not_validate_range_that_exclude_sixth_of_june_start_after_end/start_test()
var/datum/is_date/range/R = new(7, 7, 5, 5)
if(R.IsValid())
fail("Unexpected validation")
diff --git a/code/unit_tests/turf_icons.dm b/code/unit_tests/turf_icons.dm
index e0b6a7e17ae..3319864ee2a 100644
--- a/code/unit_tests/turf_icons.dm
+++ b/code/unit_tests/turf_icons.dm
@@ -8,8 +8,7 @@
/turf/unsimulated
)
var/list/excepted_types = list(
- /turf/unsimulated/map,
- /turf/unsimulated/wall/cascade
+ /turf/unsimulated/map
)
/datum/unit_test/turf_floor_icons_shall_be_valid/setup_test()
@@ -127,15 +126,22 @@
)
/turf/wall/proc/get_turf_validation_corner_states()
- . = list("", "other")
- if(paint_color)
+ . = list("")
+ if(!material)
+ CRASH("[type] lacks a material!")
+ if(material?.wall_flags & WALL_HAS_EDGES)
+ . |= "other"
+ if(paint_color || (material?.wall_flags & PAINT_PAINTABLE))
. |= "paint"
- if(stripe_color)
+ if(stripe_color || (material?.wall_flags & PAINT_STRIPABLE))
. |= "stripe"
/turf/wall/natural/get_turf_validation_corner_states()
return list("", "shine")
+/turf/wall/log/get_turf_validation_corner_states()
+ return list("", "other")
+
/turf/wall/validate_turf()
// Walls generate their own icons, icon/icon_state are largely irrelevant other than map previews.
diff --git a/code/unit_tests/unique_tests.dm b/code/unit_tests/unique_tests.dm
index 2d23719ea30..cef4aba20aa 100644
--- a/code/unit_tests/unique_tests.dm
+++ b/code/unit_tests/unique_tests.dm
@@ -9,7 +9,7 @@
var/list/possible_cable_colours = get_global_cable_colors()
for(var/color_name in possible_cable_colours)
group_by(names, color_name, index)
- group_by(colors, possible_cable_colours[color_name], index)
+ group_by(colors, possible_cable_colours[color_name], color_name)
index++
var/number_of_issues = number_of_issues(names, "Names")
@@ -207,26 +207,6 @@
pass("All gas symbols are unique.")
return TRUE
-/datum/unit_test/submaps_shall_have_a_unique_descriptor
- name = "UNIQUENESS: Archetypes shall have a valid, unique descriptor."
-
-/datum/unit_test/submaps_shall_have_a_unique_descriptor/start_test()
- var/list/submaps_by_name = list()
-
- var/list/all_submaps = decls_repository.get_decls_of_subtype(/decl/submap_archetype)
- for(var/submap_type in all_submaps)
- var/decl/submap_archetype/submap = all_submaps[submap_type]
- if(submap.descriptor)
- group_by(submaps_by_name, submap.descriptor, submap_type)
-
- var/number_of_issues = number_of_issues(submaps_by_name, "Submap Archetype Descriptors")
- if(length(number_of_issues))
- fail("Found [number_of_issues] submap archetype\s with duplicate descriptors.")
- else
- pass("All submap archetypes have unique descriptors.")
- return 1
-
-
/datum/unit_test/proc/number_of_issues(var/list/entries, var/type, var/feedback = /decl/noi_feedback)
var/issues = 0
for(var/key in entries)
diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm
index 4fe4fedfdc5..24fd800c854 100644
--- a/code/unit_tests/unit_test.dm
+++ b/code/unit_tests/unit_test.dm
@@ -4,7 +4,7 @@
* For the most part I think any test can be created that doesn't require a client in a mob or require a game mode other then extended
*
* The easiest way to make effective tests is to create a "template" if you intend to run the same test over and over and make your actual
- * tests be a "child object" of those templates. Be sure and name your templates with the word "template" somewhere in var/name.
+ * tests be a "child object" of those templates. Be sure to set abstract_type on your template type.
*
* The goal is to have all sorts of tests that run and to run them as quickly as possible.
*
@@ -51,8 +51,8 @@ var/global/ascii_reset = "[ascii_esc]\[0m"
// Templates aren't intended to be ran but just serve as a way to create child objects of it with inheritable tests for quick test creation.
/datum/unit_test
+ abstract_type = /datum/unit_test
var/name = "template - should not be ran."
- var/template // Treat the unit test as a template if its type is the same as the value of this var
var/disabled = 0 // If we want to keep a unit test in the codebase but not run it for some reason.
var/async = 0 // If the check can be left to do it's own thing, you must define a check_result() proc if you use this.
var/reported = 0 // If it's reported a success or failure. Any tests that have not are assumed to be failures.
@@ -157,11 +157,10 @@ var/global/ascii_reset = "[ascii_esc]\[0m"
/proc/get_test_datums()
. = list()
- for(var/test in subtypesof(/datum/unit_test))
- var/datum/unit_test/d = test
- if(test == initial(d.template))
+ for(var/datum/unit_test/test as anything in subtypesof(/datum/unit_test))
+ if(TYPE_IS_ABSTRACT(test))
continue
- . += d
+ . += test
/proc/do_unit_test(datum/unit_test/test, end_time, skip_disabled_tests = TRUE)
if(test.disabled && skip_disabled_tests)
diff --git a/code/unit_tests/virtual_mob_tests.dm b/code/unit_tests/virtual_mob_tests.dm
index 2a7eb99d0da..718bf010748 100644
--- a/code/unit_tests/virtual_mob_tests.dm
+++ b/code/unit_tests/virtual_mob_tests.dm
@@ -1,10 +1,10 @@
/datum/unit_test/virtual
- name = "VIRTUAL - Template"
- template = /datum/unit_test/virtual
+ name = "VIRTUAL: Template"
+ abstract_type = /datum/unit_test/virtual
/datum/unit_test/virtual/helper
- name = "VIRTUAL - Template Helper"
- template = /datum/unit_test/virtual/helper
+ name = "VIRTUAL: Template Helper"
+ abstract_type = /datum/unit_test/virtual/helper
var/helper_proc
var/list/expected_mobs
@@ -45,14 +45,14 @@
return TRUE
/datum/unit_test/virtual/helper/check_hearers_in_range
- name = "VIRTUAL - Helper Test - Check Hearers In Range"
+ name = "VIRTUAL: Helper Test - Check Hearers In Range"
helper_proc = /proc/hearers_in_range
/datum/unit_test/virtual/helper/check_hearers_in_range/standard_setup()
..()
expected_mobs = list(mob_one, mob_two, mob_three)
/datum/unit_test/virtual/helper/check_hearers_in_range_with_mob_inside_storage
- name = "VIRTUAL - Helper Test - Check Hearers In Range - With Mob Inside Storage"
+ name = "VIRTUAL: Helper Test - Check Hearers In Range - With Mob Inside Storage"
helper_proc = /proc/hearers_in_range
var/obj/storage
/datum/unit_test/virtual/helper/check_hearers_in_range_with_mob_inside_storage/standard_setup()
@@ -65,35 +65,35 @@
. = ..()
/datum/unit_test/virtual/helper/check_viewers_in_range
- name = "VIRTUAL - Helper Test - Check Viewers In Range"
+ name = "VIRTUAL: Helper Test - Check Viewers In Range"
helper_proc = /proc/viewers_in_range
/datum/unit_test/virtual/helper/check_viewers_in_range/standard_setup()
..()
expected_mobs = list(mob_one, mob_two, mob_three)
/datum/unit_test/virtual/helper/check_all_hearers
- name = "VIRTUAL - Helper Test - Check All Hearers"
+ name = "VIRTUAL: Helper Test - Check All Hearers"
helper_proc = /proc/all_hearers
/datum/unit_test/virtual/helper/check_all_hearers/standard_setup()
..()
expected_mobs = list(mob_one, mob_two)
/datum/unit_test/virtual/helper/check_all_viewers
- name = "VIRTUAL - Helper Test - Check All Viewers"
+ name = "VIRTUAL: Helper Test - Check All Viewers"
helper_proc = /proc/all_viewers
/datum/unit_test/virtual/helper/check_all_viewers/standard_setup()
..()
expected_mobs = list(mob_one, mob_two)
/datum/unit_test/virtual/helper/check_mobs_in_viewing_range
- name = "VIRTUAL - Helper Test - Check Mobs In Viewing Range"
+ name = "VIRTUAL: Helper Test - Check Mobs In Viewing Range"
helper_proc = /proc/hosts_in_view_range
/datum/unit_test/virtual/helper/check_mobs_in_viewing_range/standard_setup()
..()
expected_mobs = list(mob_one, mob_two)
/datum/unit_test/virtual/helper/check_hosts_in_view_range_with_mob_inside_object
- name = "VIRTUAL - Helper Test - Check Hosts in View Range - With Mob Inside Object"
+ name = "VIRTUAL: Helper Test - Check Hosts in View Range - With Mob Inside Object"
helper_proc = /proc/hosts_in_view_range
var/obj/storage
/datum/unit_test/virtual/helper/check_hosts_in_view_range_with_mob_inside_object/standard_setup()
diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm
index b83f880bff9..7866c78bd62 100644
--- a/code/unit_tests/zas_tests.dm
+++ b/code/unit_tests/zas_tests.dm
@@ -12,7 +12,7 @@
/datum/unit_test/zas_area_test
name = "ZAS: Area Test Template"
- template = /datum/unit_test/zas_area_test
+ abstract_type = /datum/unit_test/zas_area_test
var/area_path = null // Put the area you are testing here.
var/expectation = UT_NORMAL // See defines above.
diff --git a/code/unit_tests/~unit_test_subsystems.dm b/code/unit_tests/~unit_test_subsystems.dm
index 23d8aab1d0b..eea8a75f692 100644
--- a/code/unit_tests/~unit_test_subsystems.dm
+++ b/code/unit_tests/~unit_test_subsystems.dm
@@ -31,6 +31,12 @@ SUBSYSTEM_DEF(unit_tests)
#endif
log_unit_test("Initializing Unit Testing")
+ // Misc validation.
+ if(istype(global.using_map))
+ global.using_map.validate()
+ else
+ log_error("global.using_map is null or invalid!")
+
//
//Start the Round.
//
diff --git a/code/world.dm b/code/world.dm
index 361fa6c4a15..057199cfb0a 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -12,6 +12,9 @@
hub = "Exadv1.spacestation13"
icon_size = WORLD_ICON_SIZE
fps = 20
-#ifdef GC_FAILURE_HARD_LOOKUP
+#ifdef FIND_REF_NO_CHECK_TICK
+#pragma push
+#pragma ignore loop_checks
loop_checks = FALSE
+#pragma pop
#endif
diff --git a/config/example/configuration.txt b/config/example/configuration.txt
index 4b34dd2f6f4..38ac928c783 100644
--- a/config/example/configuration.txt
+++ b/config/example/configuration.txt
@@ -345,22 +345,19 @@ ROUNDSTART_LEVEL_GENERATION
## If uncommented, votes can be called to add extra antags to the round. Uncomment to enable.
#ALLOW_EXTRA_ANTAGS
-## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked.
+## Remove the # to make rounds which end instantly continue until the shuttle is called or the station is nuked.
## Malf and Rev will let the shuttle be called when the antags/protags are dead.
## Uncomment to enable.
CONTINUOUS_ROUNDS
-## Spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard. Uncomment to enable.
-#FEATURE_OBJECT_SPELL_SYSTEM
-
## Allowed modes.
-MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolution","spyvspy","traitor","wizard"]
+MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolution","spyvspy","traitor"]
## Mode names.
-MODE_NAMES {"calamity":"Calamity","extended":"Extended","mercenary":"Mercenary","wizard":"Wizard","cult":"Cult","heist":"Heist","ninja":"Ninja","revolution":"Revolution","traitor":"Traitor","spyvspy":"Spy v. spy","crossfire":"Crossfire"}
+MODE_NAMES {"calamity":"Calamity","extended":"Extended","mercenary":"Mercenary","cult":"Cult","heist":"Heist","ninja":"Ninja","revolution":"Revolution","traitor":"Traitor","spyvspy":"Spy v. spy","crossfire":"Crossfire"}
## Relative probability of each mode.
-PROBABILITIES {"calamity":0,"extended":1,"mercenary":1,"wizard":1,"cult":0,"heist":0,"ninja":0,"revolution":0,"traitor":1,"spyvspy":0,"crossfire":0}
+PROBABILITIES {"calamity":0,"extended":1,"mercenary":1,"cult":0,"heist":0,"ninja":0,"revolution":0,"traitor":1,"spyvspy":0,"crossfire":0}
## If security is prohibited from being most antagonists. Uncomment to enable.
#PROTECT_ROLES_FROM_ANTAGONIST
@@ -369,7 +366,7 @@ PROBABILITIES {"calamity":0,"extended":1,"mercenary":1,"wizard":1,"cult":0,"heis
TRAITOR_SCALING
## A list of modes that should be votable.
-VOTABLE_MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolution","secret","spyvspy","traitor","wizard"]
+VOTABLE_MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolution","secret","spyvspy","traitor"]
##
# PROTECTED
@@ -377,13 +374,13 @@ VOTABLE_MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolu
##
## Password used for authorizing external tools that can apply bans.
-#BAN_COMMS_PASSWORD
+#BAN_COMMS_PASSWORD
## Password used for authorizing ircbot and other external tools.
-#COMMS_PASSWORD
+#COMMS_PASSWORD
## Export address where external tools that monitor logins are located.
-#LOGIN_EXPORT_ADDR
+#LOGIN_EXPORT_ADDR
##
# RESOURCES
@@ -413,7 +410,7 @@ VOTABLE_MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolu
#ABANDON_ALLOWED 1
## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc.
-#ADMIN_IRC
+#ADMIN_IRC
## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system.
#ADMIN_LEGACY_SYSTEM 1
@@ -431,7 +428,7 @@ VOTABLE_MODES ["crossfire","cult","extended","heist","mercenary","ninja","revolu
#AOOC_ALLOWED 1
## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
-#BANAPPEALS
+#BANAPPEALS
## Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
#BAN_LEGACY_SYSTEM 1
@@ -452,7 +449,7 @@ CHARACTER_SLOTS 40
#DISABLE_WEBHOOK_EMBEDS
## Discord server permanent invite address.
-#DISCORDURL
+#DISCORDURL
## Comment to disable the dead OOC channel by default.
#DOOC_ALLOWED 1
@@ -473,20 +470,20 @@ CHARACTER_SLOTS 40
#FORBID_SINGULO_POSSESSION
## Discussion forum address.
-#FORUMURL
+#FORUMURL
## Defines world FPS. Defaults to 20.
## Can also accept ticklag values (0.9, 0.5, etc) which will automatically be converted to FPS.
#FPS 20
## GitHub address.
-#GITHUBURL
+#GITHUBURL
## Determines whether or not people without a registered ckey (i.e. guest-*) can connect to your server. Uncomment to enable.
#GUESTS_ALLOWED
## Set a hosted by name for UNIX platforms.
-#HOSTEDBY
+#HOSTEDBY
## Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to visible. This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly. Uncomment to enable.
#HUB_VISIBILITY
@@ -495,7 +492,7 @@ CHARACTER_SLOTS 40
#IRC_BOT_HOST localhost
## GitHub new issue address.
-#ISSUEREPORTURL
+#ISSUEREPORTURL
## Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments.
#JOBS_HAVE_MINIMAL_ACCESS 1
@@ -554,11 +551,11 @@ LOADOUT_SLOTS 4
RESPAWN_DELAY 5
## Set a server location for world reboot. Don't include the byond://, just give the address and port.
-#SERVER
+#SERVER
## Set a server URL for the IRC bot to use; like SERVER, don't include the byond://
## Unlike SERVER, this one shouldn't break auto-reconnect.
-#SERVERURL
+#SERVERURL
## Server name: This appears at the top of the screen in-game.
SERVER_NAME Space Station 13: Polaris
@@ -594,7 +591,7 @@ USEALIENWHITELIST
#WAIT_FOR_SIGUSR1_REBOOT
## Wiki address.
-#WIKIURL
+#WIKIURL
##
# VOTING
diff --git a/html/changelog.html b/html/changelog.html
index c693f51951e..8e46ecdab25 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -52,6 +52,83 @@
-->
+ 22 January 2025
+ MistakeNot4892 updated:
+
+ - Swords on Shaded Hills can be sharpened using whetstones or grindstones.
+ - Guns can now be fired from rigs regardless of dexterity.
+
+
+ 21 January 2025
+ Penelope Haze updated:
+
+ - Mud can now receive footprints with any reagent other than mud. No more conspicuously missing bloody footprints!
+
+
+ 19 January 2025
+ MistakeNot4892 updated:
+
+ - Intents have been rewritten and moved, please report any issues with intent selection.
+
+
+ 16 January 2025
+ MistakeNot4892 updated:
+
+ - The White and Minimalist HUD styles can now be customised to use a specific overlay color.
+ - The Shaded Hills river now flows north.
+ - Snow, mud and sand will now show footprints.
+
+
+ 15 January 2025
+ MistakeNot4892 updated:
+
+ - The way you interact with barrels and well has been significantly reworked; clicking with a bucket or tool should give a list of options to pick from. Please report bugs with this on the tracker.
+
+
+ 08 January 2025
+ MistakeNot4892 updated:
+
+ - Mud and blood can now leave footprints.
+
+
+ 03 January 2025
+ MistakeNot4892 updated:
+
+ - Raw plant oil no longer works as lantern fuel; it must be mixed with powdered graphite first.
+
+
+ 23 December 2024
+ ophelia v0.8 updated:
+
+ - added new dirt and mud tile sprites
+ - added new wooden chest sprites, by Doe
+ - mud and soil plots are now properly greyscaled to soil material color
+
+
+ 21 December 2024
+ Penelope Haze updated:
+
+ - Makes weather effects slightly more transparent.
+
+
+ 07 December 2024
+ MistakeNot4892 updated:
+
+ - Most wooden floors and tables on space maps are now chipboard laminate instead.
+
+
+ 05 December 2024
+ ophelia updated:
+
+ - You can now put any disk into the research design database or research design console, but only the correct disk type (tech disk or design disk) will function.
+
+
+ 18 November 2024
+ MistakeNot4892 updated:
+
+ - Swapped barrel icons out for Doe's much nicer barrels.
+
+
13 November 2024
Penelope Haze updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 74940df8c73..20e1bd55f28 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -14921,3 +14921,53 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- tweak: Crayons are now slowly used up while writing on paper, at a rate of one
charge per 25 characters. (Crayons have a default of 30 charges.)
- tweak: Added new furniture to the Shaded Hills inn.
+2024-11-18:
+ MistakeNot4892:
+ - tweak: Swapped barrel icons out for Doe's much nicer barrels.
+2024-12-05:
+ ophelia:
+ - tweak: You can now put any disk into the research design database or research
+ design console, but only the correct disk type (tech disk or design disk) will
+ function.
+2024-12-07:
+ MistakeNot4892:
+ - tweak: Most wooden floors and tables on space maps are now chipboard laminate
+ instead.
+2024-12-21:
+ Penelope Haze:
+ - tweak: Makes weather effects slightly more transparent.
+2024-12-23:
+ ophelia v0.8:
+ - imageadd: added new dirt and mud tile sprites
+ - imageadd: added new wooden chest sprites, by Doe
+ - tweak: mud and soil plots are now properly greyscaled to soil material color
+2025-01-03:
+ MistakeNot4892:
+ - tweak: Raw plant oil no longer works as lantern fuel; it must be mixed with powdered
+ graphite first.
+2025-01-08:
+ MistakeNot4892:
+ - tweak: Mud and blood can now leave footprints.
+2025-01-15:
+ MistakeNot4892:
+ - tweak: The way you interact with barrels and well has been significantly reworked;
+ clicking with a bucket or tool should give a list of options to pick from. Please
+ report bugs with this on the tracker.
+2025-01-16:
+ MistakeNot4892:
+ - tweak: The White and Minimalist HUD styles can now be customised to use a specific
+ overlay color.
+ - tweak: The Shaded Hills river now flows north.
+ - tweak: Snow, mud and sand will now show footprints.
+2025-01-19:
+ MistakeNot4892:
+ - tweak: Intents have been rewritten and moved, please report any issues with intent
+ selection.
+2025-01-21:
+ Penelope Haze:
+ - tweak: Mud can now receive footprints with any reagent other than mud. No more
+ conspicuously missing bloody footprints!
+2025-01-22:
+ MistakeNot4892:
+ - tweak: Swords on Shaded Hills can be sharpened using whetstones or grindstones.
+ - tweak: Guns can now be fired from rigs regardless of dexterity.
diff --git a/icons/clothing/accessories/jewelry/locket.dmi b/icons/clothing/accessories/jewelry/locket.dmi
deleted file mode 100644
index eeee8efe7ea..00000000000
Binary files a/icons/clothing/accessories/jewelry/locket.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/necklace.dmi b/icons/clothing/accessories/jewelry/necklace.dmi
index 23c9eee0063..2f5ca2d3cfb 100644
Binary files a/icons/clothing/accessories/jewelry/necklace.dmi and b/icons/clothing/accessories/jewelry/necklace.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/cross.dmi b/icons/clothing/accessories/jewelry/pendants/cross.dmi
new file mode 100644
index 00000000000..ca9d50a60f0
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/cross.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/crystal.dmi b/icons/clothing/accessories/jewelry/pendants/crystal.dmi
new file mode 100644
index 00000000000..a54525da6ab
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/crystal.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/diamond.dmi b/icons/clothing/accessories/jewelry/pendants/diamond.dmi
new file mode 100644
index 00000000000..44e931a658d
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/diamond.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/frill.dmi b/icons/clothing/accessories/jewelry/pendants/frill.dmi
new file mode 100644
index 00000000000..97891de4bc3
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/frill.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/locket.dmi b/icons/clothing/accessories/jewelry/pendants/locket.dmi
new file mode 100644
index 00000000000..e8f1bbee40b
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/locket.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/ornate.dmi b/icons/clothing/accessories/jewelry/pendants/ornate.dmi
new file mode 100644
index 00000000000..9e6901f4e29
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/ornate.dmi differ
diff --git a/icons/clothing/accessories/jewelry/pendants/square.dmi b/icons/clothing/accessories/jewelry/pendants/square.dmi
new file mode 100644
index 00000000000..5c9040c7baa
Binary files /dev/null and b/icons/clothing/accessories/jewelry/pendants/square.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring.dmi b/icons/clothing/accessories/jewelry/rings/ring.dmi
deleted file mode 100644
index 5a116c6c820..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_band.dmi b/icons/clothing/accessories/jewelry/rings/ring_band.dmi
new file mode 100644
index 00000000000..b8f40338dcc
Binary files /dev/null and b/icons/clothing/accessories/jewelry/rings/ring_band.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_band_split.dmi b/icons/clothing/accessories/jewelry/rings/ring_band_split.dmi
new file mode 100644
index 00000000000..fb29ccae72a
Binary files /dev/null and b/icons/clothing/accessories/jewelry/rings/ring_band_split.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_band_thick.dmi b/icons/clothing/accessories/jewelry/rings/ring_band_thick.dmi
new file mode 100644
index 00000000000..93a83527a24
Binary files /dev/null and b/icons/clothing/accessories/jewelry/rings/ring_band_thick.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_band_thin.dmi b/icons/clothing/accessories/jewelry/rings/ring_band_thin.dmi
new file mode 100644
index 00000000000..83c9b2ced56
Binary files /dev/null and b/icons/clothing/accessories/jewelry/rings/ring_band_thin.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_blue.dmi b/icons/clothing/accessories/jewelry/rings/ring_blue.dmi
deleted file mode 100644
index e607595960f..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_blue.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_cti.dmi b/icons/clothing/accessories/jewelry/rings/ring_cti.dmi
deleted file mode 100644
index 6acd9239cbd..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_cti.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_diamond.dmi b/icons/clothing/accessories/jewelry/rings/ring_diamond.dmi
deleted file mode 100644
index e05fcffea0f..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_diamond.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_magic.dmi b/icons/clothing/accessories/jewelry/rings/ring_magic.dmi
deleted file mode 100644
index 885a1d75314..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_magic.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_mariner.dmi b/icons/clothing/accessories/jewelry/rings/ring_mariner.dmi
deleted file mode 100644
index 32a6a93b5e9..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_mariner.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_seal.dmi b/icons/clothing/accessories/jewelry/rings/ring_seal.dmi
new file mode 100644
index 00000000000..620206a28cb
Binary files /dev/null and b/icons/clothing/accessories/jewelry/rings/ring_seal.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_seal_masonic.dmi b/icons/clothing/accessories/jewelry/rings/ring_seal_masonic.dmi
index 12fc05d63a0..c2efcfd5c18 100644
Binary files a/icons/clothing/accessories/jewelry/rings/ring_seal_masonic.dmi and b/icons/clothing/accessories/jewelry/rings/ring_seal_masonic.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_seal_secgen.dmi b/icons/clothing/accessories/jewelry/rings/ring_seal_secgen.dmi
deleted file mode 100644
index bddad5ae758..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_seal_secgen.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_seal_signet.dmi b/icons/clothing/accessories/jewelry/rings/ring_seal_signet.dmi
index 63eaa34ef64..e6145d53c50 100644
Binary files a/icons/clothing/accessories/jewelry/rings/ring_seal_signet.dmi and b/icons/clothing/accessories/jewelry/rings/ring_seal_signet.dmi differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_shadow.dmi b/icons/clothing/accessories/jewelry/rings/ring_shadow.dmi
deleted file mode 100644
index 43542dbc982..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_shadow.dmi and /dev/null differ
diff --git a/icons/clothing/accessories/jewelry/rings/ring_star.dmi b/icons/clothing/accessories/jewelry/rings/ring_star.dmi
deleted file mode 100644
index 4308da7ff6f..00000000000
Binary files a/icons/clothing/accessories/jewelry/rings/ring_star.dmi and /dev/null differ
diff --git a/mods/content/corporate/icons/rigs/asset_protection/boots.dmi b/icons/clothing/rigs/ert/asset_protection/boots.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/asset_protection/boots.dmi
rename to icons/clothing/rigs/ert/asset_protection/boots.dmi
diff --git a/mods/content/corporate/icons/rigs/asset_protection/chest.dmi b/icons/clothing/rigs/ert/asset_protection/chest.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/asset_protection/chest.dmi
rename to icons/clothing/rigs/ert/asset_protection/chest.dmi
diff --git a/mods/content/corporate/icons/rigs/asset_protection/gloves.dmi b/icons/clothing/rigs/ert/asset_protection/gloves.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/asset_protection/gloves.dmi
rename to icons/clothing/rigs/ert/asset_protection/gloves.dmi
diff --git a/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi b/icons/clothing/rigs/ert/asset_protection/helmet.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/asset_protection/helmet.dmi
rename to icons/clothing/rigs/ert/asset_protection/helmet.dmi
diff --git a/mods/content/corporate/icons/rigs/asset_protection/rig.dmi b/icons/clothing/rigs/ert/asset_protection/rig.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/asset_protection/rig.dmi
rename to icons/clothing/rigs/ert/asset_protection/rig.dmi
diff --git a/mods/content/corporate/icons/rigs/commander/boots.dmi b/icons/clothing/rigs/ert/commander/boots.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/commander/boots.dmi
rename to icons/clothing/rigs/ert/commander/boots.dmi
diff --git a/mods/content/corporate/icons/rigs/commander/chest.dmi b/icons/clothing/rigs/ert/commander/chest.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/commander/chest.dmi
rename to icons/clothing/rigs/ert/commander/chest.dmi
diff --git a/mods/content/corporate/icons/rigs/commander/gloves.dmi b/icons/clothing/rigs/ert/commander/gloves.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/commander/gloves.dmi
rename to icons/clothing/rigs/ert/commander/gloves.dmi
diff --git a/mods/content/corporate/icons/rigs/commander/helmet.dmi b/icons/clothing/rigs/ert/commander/helmet.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/commander/helmet.dmi
rename to icons/clothing/rigs/ert/commander/helmet.dmi
diff --git a/mods/content/corporate/icons/rigs/commander/rig.dmi b/icons/clothing/rigs/ert/commander/rig.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/commander/rig.dmi
rename to icons/clothing/rigs/ert/commander/rig.dmi
diff --git a/mods/content/corporate/icons/rigs/engineer/boots.dmi b/icons/clothing/rigs/ert/engineer/boots.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/engineer/boots.dmi
rename to icons/clothing/rigs/ert/engineer/boots.dmi
diff --git a/mods/content/corporate/icons/rigs/engineer/chest.dmi b/icons/clothing/rigs/ert/engineer/chest.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/engineer/chest.dmi
rename to icons/clothing/rigs/ert/engineer/chest.dmi
diff --git a/mods/content/corporate/icons/rigs/engineer/gloves.dmi b/icons/clothing/rigs/ert/engineer/gloves.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/engineer/gloves.dmi
rename to icons/clothing/rigs/ert/engineer/gloves.dmi
diff --git a/mods/content/corporate/icons/rigs/engineer/helmet.dmi b/icons/clothing/rigs/ert/engineer/helmet.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/engineer/helmet.dmi
rename to icons/clothing/rigs/ert/engineer/helmet.dmi
diff --git a/mods/content/corporate/icons/rigs/engineer/rig.dmi b/icons/clothing/rigs/ert/engineer/rig.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/engineer/rig.dmi
rename to icons/clothing/rigs/ert/engineer/rig.dmi
diff --git a/mods/content/corporate/icons/rigs/janitor/boots.dmi b/icons/clothing/rigs/ert/janitor/boots.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/janitor/boots.dmi
rename to icons/clothing/rigs/ert/janitor/boots.dmi
diff --git a/mods/content/corporate/icons/rigs/janitor/chest.dmi b/icons/clothing/rigs/ert/janitor/chest.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/janitor/chest.dmi
rename to icons/clothing/rigs/ert/janitor/chest.dmi
diff --git a/mods/content/corporate/icons/rigs/janitor/gloves.dmi b/icons/clothing/rigs/ert/janitor/gloves.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/janitor/gloves.dmi
rename to icons/clothing/rigs/ert/janitor/gloves.dmi
diff --git a/mods/content/corporate/icons/rigs/janitor/helmet.dmi b/icons/clothing/rigs/ert/janitor/helmet.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/janitor/helmet.dmi
rename to icons/clothing/rigs/ert/janitor/helmet.dmi
diff --git a/mods/content/corporate/icons/rigs/janitor/rig.dmi b/icons/clothing/rigs/ert/janitor/rig.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/janitor/rig.dmi
rename to icons/clothing/rigs/ert/janitor/rig.dmi
diff --git a/mods/content/corporate/icons/rigs/medic/boots.dmi b/icons/clothing/rigs/ert/medic/boots.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/medic/boots.dmi
rename to icons/clothing/rigs/ert/medic/boots.dmi
diff --git a/mods/content/corporate/icons/rigs/medic/chest.dmi b/icons/clothing/rigs/ert/medic/chest.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/medic/chest.dmi
rename to icons/clothing/rigs/ert/medic/chest.dmi
diff --git a/mods/content/corporate/icons/rigs/medic/gloves.dmi b/icons/clothing/rigs/ert/medic/gloves.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/medic/gloves.dmi
rename to icons/clothing/rigs/ert/medic/gloves.dmi
diff --git a/mods/content/corporate/icons/rigs/medic/helmet.dmi b/icons/clothing/rigs/ert/medic/helmet.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/medic/helmet.dmi
rename to icons/clothing/rigs/ert/medic/helmet.dmi
diff --git a/mods/content/corporate/icons/rigs/medic/rig.dmi b/icons/clothing/rigs/ert/medic/rig.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/medic/rig.dmi
rename to icons/clothing/rigs/ert/medic/rig.dmi
diff --git a/mods/content/corporate/icons/rigs/security/boots.dmi b/icons/clothing/rigs/ert/security/boots.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/security/boots.dmi
rename to icons/clothing/rigs/ert/security/boots.dmi
diff --git a/mods/content/corporate/icons/rigs/security/chest.dmi b/icons/clothing/rigs/ert/security/chest.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/security/chest.dmi
rename to icons/clothing/rigs/ert/security/chest.dmi
diff --git a/mods/content/corporate/icons/rigs/security/gloves.dmi b/icons/clothing/rigs/ert/security/gloves.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/security/gloves.dmi
rename to icons/clothing/rigs/ert/security/gloves.dmi
diff --git a/mods/content/corporate/icons/rigs/security/helmet.dmi b/icons/clothing/rigs/ert/security/helmet.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/security/helmet.dmi
rename to icons/clothing/rigs/ert/security/helmet.dmi
diff --git a/mods/content/corporate/icons/rigs/security/rig.dmi b/icons/clothing/rigs/ert/security/rig.dmi
similarity index 100%
rename from mods/content/corporate/icons/rigs/security/rig.dmi
rename to icons/clothing/rigs/ert/security/rig.dmi
diff --git a/icons/clothing/spacesuit/void/medical_alt/suit.dmi b/icons/clothing/spacesuit/void/medical_alt/suit.dmi
index 77b79193e46..634b6742079 100644
Binary files a/icons/clothing/spacesuit/void/medical_alt/suit.dmi and b/icons/clothing/spacesuit/void/medical_alt/suit.dmi differ
diff --git a/icons/clothing/suits/sleeved_robe.dmi b/icons/clothing/suits/sleeved_robe.dmi
new file mode 100644
index 00000000000..6895f94a926
Binary files /dev/null and b/icons/clothing/suits/sleeved_robe.dmi differ
diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi
index e1966e9bb5a..3642e8ed8f4 100644
Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 78c4315424a..5502343f0d5 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/effects/hay.dmi b/icons/effects/hay.dmi
new file mode 100644
index 00000000000..47c16d24770
Binary files /dev/null and b/icons/effects/hay.dmi differ
diff --git a/icons/effects/landmarks.dmi b/icons/effects/landmarks.dmi
index 7c5729455bf..28317726409 100644
Binary files a/icons/effects/landmarks.dmi and b/icons/effects/landmarks.dmi differ
diff --git a/icons/effects/liquids.dmi b/icons/effects/liquids.dmi
index 965e319bc4a..7cdf5d1b006 100644
Binary files a/icons/effects/liquids.dmi and b/icons/effects/liquids.dmi differ
diff --git a/icons/effects/mouse_pointers/examine_pointer.dmi b/icons/effects/mouse_pointers/examine_pointer.dmi
index 41a9cec13b0..a565a554fa7 100644
Binary files a/icons/effects/mouse_pointers/examine_pointer.dmi and b/icons/effects/mouse_pointers/examine_pointer.dmi differ
diff --git a/icons/effects/projectiles/trail.dmi b/icons/effects/projectiles/trail.dmi
new file mode 100644
index 00000000000..4e058a3f1bf
Binary files /dev/null and b/icons/effects/projectiles/trail.dmi differ
diff --git a/icons/effects/weather.dmi b/icons/effects/weather.dmi
index 01aa9d456f4..aa4438a638d 100644
Binary files a/icons/effects/weather.dmi and b/icons/effects/weather.dmi differ
diff --git a/icons/mob/footprints/footprints.dmi b/icons/mob/footprints/footprints.dmi
new file mode 100644
index 00000000000..2d9699e82c8
Binary files /dev/null and b/icons/mob/footprints/footprints.dmi differ
diff --git a/icons/mob/footprints/footprints_paw.dmi b/icons/mob/footprints/footprints_paw.dmi
new file mode 100644
index 00000000000..08fac62a016
Binary files /dev/null and b/icons/mob/footprints/footprints_paw.dmi differ
diff --git a/icons/mob/footprints/footprints_snake.dmi b/icons/mob/footprints/footprints_snake.dmi
new file mode 100644
index 00000000000..6e913803eb1
Binary files /dev/null and b/icons/mob/footprints/footprints_snake.dmi differ
diff --git a/icons/mob/footprints/footprints_trail.dmi b/icons/mob/footprints/footprints_trail.dmi
new file mode 100644
index 00000000000..944ed4e175b
Binary files /dev/null and b/icons/mob/footprints/footprints_trail.dmi differ
diff --git a/icons/mob/footprints/footprints_wheelchair.dmi b/icons/mob/footprints/footprints_wheelchair.dmi
new file mode 100644
index 00000000000..4a2e800cf76
Binary files /dev/null and b/icons/mob/footprints/footprints_wheelchair.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
deleted file mode 100644
index ed608471041..00000000000
Binary files a/icons/mob/hud.dmi and /dev/null differ
diff --git a/icons/mob/hud_med.dmi b/icons/mob/hud_med.dmi
deleted file mode 100644
index 705886a5490..00000000000
Binary files a/icons/mob/hud_med.dmi and /dev/null differ
diff --git a/icons/mob/screen/abilities.dmi b/icons/mob/screen/abilities.dmi
new file mode 100644
index 00000000000..ca7d904bd71
Binary files /dev/null and b/icons/mob/screen/abilities.dmi differ
diff --git a/icons/mob/screen/ability_inhand.dmi b/icons/mob/screen/ability_inhand.dmi
new file mode 100644
index 00000000000..63e1b630dc0
Binary files /dev/null and b/icons/mob/screen/ability_inhand.dmi differ
diff --git a/icons/mob/screen/phenomena.dmi b/icons/mob/screen/phenomena.dmi
deleted file mode 100644
index f1d05fa9730..00000000000
Binary files a/icons/mob/screen/phenomena.dmi and /dev/null differ
diff --git a/icons/mob/screen/spells.dmi b/icons/mob/screen/spells.dmi
deleted file mode 100644
index d574921544d..00000000000
Binary files a/icons/mob/screen/spells.dmi and /dev/null differ
diff --git a/icons/mob/screen/styles/intents.dmi b/icons/mob/screen/styles/intents.dmi
deleted file mode 100644
index 3c26214b74e..00000000000
Binary files a/icons/mob/screen/styles/intents.dmi and /dev/null differ
diff --git a/icons/mob/screen/styles/minimalist/attack_selector.dmi b/icons/mob/screen/styles/minimalist/attack_selector.dmi
index c5a7e57c522..2e3d66fd059 100644
Binary files a/icons/mob/screen/styles/minimalist/attack_selector.dmi and b/icons/mob/screen/styles/minimalist/attack_selector.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/fire_intent.dmi b/icons/mob/screen/styles/minimalist/fire_intent.dmi
index 62efd8ca867..02a311ec4e8 100644
Binary files a/icons/mob/screen/styles/minimalist/fire_intent.dmi and b/icons/mob/screen/styles/minimalist/fire_intent.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/hands.dmi b/icons/mob/screen/styles/minimalist/hands.dmi
index 28264b0635f..05840e72af8 100644
Binary files a/icons/mob/screen/styles/minimalist/hands.dmi and b/icons/mob/screen/styles/minimalist/hands.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/intents.dmi b/icons/mob/screen/styles/minimalist/intents.dmi
deleted file mode 100644
index 4f4dbaa0b84..00000000000
Binary files a/icons/mob/screen/styles/minimalist/intents.dmi and /dev/null differ
diff --git a/icons/mob/screen/styles/minimalist/interaction.dmi b/icons/mob/screen/styles/minimalist/interaction.dmi
index 8a4875e964f..b8c4a0b80fe 100644
Binary files a/icons/mob/screen/styles/minimalist/interaction.dmi and b/icons/mob/screen/styles/minimalist/interaction.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/inventory.dmi b/icons/mob/screen/styles/minimalist/inventory.dmi
index d2d055fe753..169c66eefdd 100644
Binary files a/icons/mob/screen/styles/minimalist/inventory.dmi and b/icons/mob/screen/styles/minimalist/inventory.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/movement.dmi b/icons/mob/screen/styles/minimalist/movement.dmi
index 3a3115d5b88..fa354873156 100644
Binary files a/icons/mob/screen/styles/minimalist/movement.dmi and b/icons/mob/screen/styles/minimalist/movement.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/uphint.dmi b/icons/mob/screen/styles/minimalist/uphint.dmi
index fc54e68b933..412cab2b32d 100644
Binary files a/icons/mob/screen/styles/minimalist/uphint.dmi and b/icons/mob/screen/styles/minimalist/uphint.dmi differ
diff --git a/icons/mob/screen/styles/minimalist/zone_selector.dmi b/icons/mob/screen/styles/minimalist/zone_selector.dmi
index 9a35a9acd27..2cdd0893f6a 100644
Binary files a/icons/mob/screen/styles/minimalist/zone_selector.dmi and b/icons/mob/screen/styles/minimalist/zone_selector.dmi differ
diff --git a/icons/mob/screen/styles/underworld/attack_selector.dmi b/icons/mob/screen/styles/underworld/attack_selector.dmi
new file mode 100644
index 00000000000..2df7a24c30d
Binary files /dev/null and b/icons/mob/screen/styles/underworld/attack_selector.dmi differ
diff --git a/icons/mob/screen/styles/underworld/fire_intent.dmi b/icons/mob/screen/styles/underworld/fire_intent.dmi
new file mode 100644
index 00000000000..1f7c93487fd
Binary files /dev/null and b/icons/mob/screen/styles/underworld/fire_intent.dmi differ
diff --git a/icons/mob/screen/styles/underworld/hands.dmi b/icons/mob/screen/styles/underworld/hands.dmi
new file mode 100644
index 00000000000..fd37369cc08
Binary files /dev/null and b/icons/mob/screen/styles/underworld/hands.dmi differ
diff --git a/icons/mob/screen/styles/underworld/interaction.dmi b/icons/mob/screen/styles/underworld/interaction.dmi
new file mode 100644
index 00000000000..ce806127f53
Binary files /dev/null and b/icons/mob/screen/styles/underworld/interaction.dmi differ
diff --git a/icons/mob/screen/styles/underworld/inventory.dmi b/icons/mob/screen/styles/underworld/inventory.dmi
new file mode 100644
index 00000000000..b576bd3b4df
Binary files /dev/null and b/icons/mob/screen/styles/underworld/inventory.dmi differ
diff --git a/icons/mob/screen/styles/underworld/movement.dmi b/icons/mob/screen/styles/underworld/movement.dmi
new file mode 100644
index 00000000000..6890efd9fa4
Binary files /dev/null and b/icons/mob/screen/styles/underworld/movement.dmi differ
diff --git a/icons/mob/screen/styles/underworld/uphint.dmi b/icons/mob/screen/styles/underworld/uphint.dmi
new file mode 100644
index 00000000000..4d78c55da72
Binary files /dev/null and b/icons/mob/screen/styles/underworld/uphint.dmi differ
diff --git a/icons/mob/screen/styles/underworld/zone_selector.dmi b/icons/mob/screen/styles/underworld/zone_selector.dmi
new file mode 100644
index 00000000000..e482039b230
Binary files /dev/null and b/icons/mob/screen/styles/underworld/zone_selector.dmi differ
diff --git a/icons/mob/screen/styles/white/attack_selector.dmi b/icons/mob/screen/styles/white/attack_selector.dmi
index 6aa6118a743..02f97413e1a 100644
Binary files a/icons/mob/screen/styles/white/attack_selector.dmi and b/icons/mob/screen/styles/white/attack_selector.dmi differ
diff --git a/icons/mob/screen/styles/white/fire_intent.dmi b/icons/mob/screen/styles/white/fire_intent.dmi
index 5ab217edcd5..64af8d1e078 100644
Binary files a/icons/mob/screen/styles/white/fire_intent.dmi and b/icons/mob/screen/styles/white/fire_intent.dmi differ
diff --git a/icons/mob/screen/styles/white/hands.dmi b/icons/mob/screen/styles/white/hands.dmi
index 59702d43b99..0f65b990467 100644
Binary files a/icons/mob/screen/styles/white/hands.dmi and b/icons/mob/screen/styles/white/hands.dmi differ
diff --git a/icons/mob/screen/styles/white/interaction.dmi b/icons/mob/screen/styles/white/interaction.dmi
index e11d10d2c13..8511d73937a 100644
Binary files a/icons/mob/screen/styles/white/interaction.dmi and b/icons/mob/screen/styles/white/interaction.dmi differ
diff --git a/icons/mob/screen/styles/white/inventory.dmi b/icons/mob/screen/styles/white/inventory.dmi
index 0ce80198e6b..f8cfa9cbbc5 100644
Binary files a/icons/mob/screen/styles/white/inventory.dmi and b/icons/mob/screen/styles/white/inventory.dmi differ
diff --git a/icons/mob/screen/styles/white/movement.dmi b/icons/mob/screen/styles/white/movement.dmi
index 17faaf9413d..b3a61c63a9b 100644
Binary files a/icons/mob/screen/styles/white/movement.dmi and b/icons/mob/screen/styles/white/movement.dmi differ
diff --git a/icons/mob/screen/styles/white/uphint.dmi b/icons/mob/screen/styles/white/uphint.dmi
index d3e9075d704..ee795947c30 100644
Binary files a/icons/mob/screen/styles/white/uphint.dmi and b/icons/mob/screen/styles/white/uphint.dmi differ
diff --git a/icons/mob/screen/styles/white/zone_selector.dmi b/icons/mob/screen/styles/white/zone_selector.dmi
index fe86e824f98..1e768fdd53d 100644
Binary files a/icons/mob/screen/styles/white/zone_selector.dmi and b/icons/mob/screen/styles/white/zone_selector.dmi differ
diff --git a/icons/mob/simple_animal/fish_cave.dmi b/icons/mob/simple_animal/fish_cave.dmi
new file mode 100644
index 00000000000..40e1f162f86
Binary files /dev/null and b/icons/mob/simple_animal/fish_cave.dmi differ
diff --git a/icons/mob/simple_animal/fish_lantern.dmi b/icons/mob/simple_animal/fish_lantern.dmi
new file mode 100644
index 00000000000..eea9923c6d4
Binary files /dev/null and b/icons/mob/simple_animal/fish_lantern.dmi differ
diff --git a/icons/obj/banner.dmi b/icons/obj/banner.dmi
deleted file mode 100644
index fdcb38c72c6..00000000000
Binary files a/icons/obj/banner.dmi and /dev/null differ
diff --git a/icons/obj/banner_woven.dmi b/icons/obj/banner_woven.dmi
deleted file mode 100644
index 5e667ae3b0a..00000000000
Binary files a/icons/obj/banner_woven.dmi and /dev/null differ
diff --git a/icons/obj/closets/bases/cabinet.dmi b/icons/obj/closets/bases/cabinet.dmi
index 236b164ca6e..603874dd3c1 100644
Binary files a/icons/obj/closets/bases/cabinet.dmi and b/icons/obj/closets/bases/cabinet.dmi differ
diff --git a/icons/obj/closets/bases/chest.dmi b/icons/obj/closets/bases/chest.dmi
index 491dcbd62c0..bef40525584 100644
Binary files a/icons/obj/closets/bases/chest.dmi and b/icons/obj/closets/bases/chest.dmi differ
diff --git a/icons/obj/food/butchery/steak.dmi b/icons/obj/food/butchery/steak.dmi
index 4fe0f414844..16661e0dbc7 100644
Binary files a/icons/obj/food/butchery/steak.dmi and b/icons/obj/food/butchery/steak.dmi differ
diff --git a/icons/obj/food/cooking_vessels/cauldron.dmi b/icons/obj/food/cooking_vessels/cauldron.dmi
new file mode 100644
index 00000000000..7be32a10bde
Binary files /dev/null and b/icons/obj/food/cooking_vessels/cauldron.dmi differ
diff --git a/icons/obj/food/cooking_vessels/pot.dmi b/icons/obj/food/cooking_vessels/pot.dmi
index f1816c557d0..368ef60fd40 100644
Binary files a/icons/obj/food/cooking_vessels/pot.dmi and b/icons/obj/food/cooking_vessels/pot.dmi differ
diff --git a/icons/obj/food/hay.dmi b/icons/obj/food/hay.dmi
new file mode 100644
index 00000000000..2a24bc36b01
Binary files /dev/null and b/icons/obj/food/hay.dmi differ
diff --git a/icons/obj/food/nuggets/nugget.dmi b/icons/obj/food/nuggets/nugget.dmi
new file mode 100644
index 00000000000..6022a38314e
Binary files /dev/null and b/icons/obj/food/nuggets/nugget.dmi differ
diff --git a/icons/obj/food/nuggets/nugget_corgi.dmi b/icons/obj/food/nuggets/nugget_corgi.dmi
new file mode 100644
index 00000000000..73f1fe111d0
Binary files /dev/null and b/icons/obj/food/nuggets/nugget_corgi.dmi differ
diff --git a/icons/obj/food/nuggets/nugget_lizard.dmi b/icons/obj/food/nuggets/nugget_lizard.dmi
new file mode 100644
index 00000000000..7eb06bd525e
Binary files /dev/null and b/icons/obj/food/nuggets/nugget_lizard.dmi differ
diff --git a/icons/obj/food/nuggets/nugget_star.dmi b/icons/obj/food/nuggets/nugget_star.dmi
new file mode 100644
index 00000000000..28651880ee8
Binary files /dev/null and b/icons/obj/food/nuggets/nugget_star.dmi differ
diff --git a/icons/obj/items/banners/banner.dmi b/icons/obj/items/banners/banner.dmi
new file mode 100644
index 00000000000..7edc1596436
Binary files /dev/null and b/icons/obj/items/banners/banner.dmi differ
diff --git a/icons/obj/items/banners/banner_forked.dmi b/icons/obj/items/banners/banner_forked.dmi
new file mode 100644
index 00000000000..55ce19fe492
Binary files /dev/null and b/icons/obj/items/banners/banner_forked.dmi differ
diff --git a/icons/obj/items/banners/banner_pointed.dmi b/icons/obj/items/banners/banner_pointed.dmi
new file mode 100644
index 00000000000..371cb954f3a
Binary files /dev/null and b/icons/obj/items/banners/banner_pointed.dmi differ
diff --git a/icons/obj/items/banners/banner_rounded.dmi b/icons/obj/items/banners/banner_rounded.dmi
new file mode 100644
index 00000000000..84ae95413c3
Binary files /dev/null and b/icons/obj/items/banners/banner_rounded.dmi differ
diff --git a/icons/obj/items/banners/banner_square.dmi b/icons/obj/items/banners/banner_square.dmi
new file mode 100644
index 00000000000..549c0637e18
Binary files /dev/null and b/icons/obj/items/banners/banner_square.dmi differ
diff --git a/icons/obj/items/banners/banner_symbols.dmi b/icons/obj/items/banners/banner_symbols.dmi
new file mode 100644
index 00000000000..8c77f26d413
Binary files /dev/null and b/icons/obj/items/banners/banner_symbols.dmi differ
diff --git a/icons/obj/items/banners/banner_tasselled.dmi b/icons/obj/items/banners/banner_tasselled.dmi
new file mode 100644
index 00000000000..271fbce4232
Binary files /dev/null and b/icons/obj/items/banners/banner_tasselled.dmi differ
diff --git a/icons/obj/items/banners/banner_woven.dmi b/icons/obj/items/banners/banner_woven.dmi
new file mode 100644
index 00000000000..4178722e7b0
Binary files /dev/null and b/icons/obj/items/banners/banner_woven.dmi differ
diff --git a/icons/obj/items/banners/sign.dmi b/icons/obj/items/banners/sign.dmi
new file mode 100644
index 00000000000..a2fb9ec0361
Binary files /dev/null and b/icons/obj/items/banners/sign.dmi differ
diff --git a/icons/obj/items/banners/sign_symbols.dmi b/icons/obj/items/banners/sign_symbols.dmi
new file mode 100644
index 00000000000..16ce7891c0c
Binary files /dev/null and b/icons/obj/items/banners/sign_symbols.dmi differ
diff --git a/icons/obj/items/candelabra.dmi b/icons/obj/items/candelabra.dmi
new file mode 100644
index 00000000000..3d0b0010945
Binary files /dev/null and b/icons/obj/items/candelabra.dmi differ
diff --git a/icons/obj/items/chain.dmi b/icons/obj/items/chain.dmi
new file mode 100644
index 00000000000..95d5c71b70f
Binary files /dev/null and b/icons/obj/items/chain.dmi differ
diff --git a/icons/obj/items/flame/candle.dmi b/icons/obj/items/flame/candle.dmi
index fa33e15df8b..ef2c6a8987f 100644
Binary files a/icons/obj/items/flame/candle.dmi and b/icons/obj/items/flame/candle.dmi differ
diff --git a/icons/obj/items/gemstones/baguette.dmi b/icons/obj/items/gemstones/baguette.dmi
new file mode 100644
index 00000000000..a10c3dc6754
Binary files /dev/null and b/icons/obj/items/gemstones/baguette.dmi differ
diff --git a/icons/obj/items/gemstones/hexagon.dmi b/icons/obj/items/gemstones/hexagon.dmi
new file mode 100644
index 00000000000..a66d147db14
Binary files /dev/null and b/icons/obj/items/gemstones/hexagon.dmi differ
diff --git a/icons/obj/items/gemstones/octagon.dmi b/icons/obj/items/gemstones/octagon.dmi
new file mode 100644
index 00000000000..c216faaadf9
Binary files /dev/null and b/icons/obj/items/gemstones/octagon.dmi differ
diff --git a/icons/obj/items/gemstones/poor.dmi b/icons/obj/items/gemstones/poor.dmi
new file mode 100644
index 00000000000..97d192b3493
Binary files /dev/null and b/icons/obj/items/gemstones/poor.dmi differ
diff --git a/icons/obj/items/gemstones/round.dmi b/icons/obj/items/gemstones/round.dmi
new file mode 100644
index 00000000000..69bca88b994
Binary files /dev/null and b/icons/obj/items/gemstones/round.dmi differ
diff --git a/icons/obj/items/gemstones/uncut.dmi b/icons/obj/items/gemstones/uncut.dmi
new file mode 100644
index 00000000000..46b30ab2343
Binary files /dev/null and b/icons/obj/items/gemstones/uncut.dmi differ
diff --git a/icons/obj/pottery/bottle.dmi b/icons/obj/items/handmade/bottle.dmi
similarity index 100%
rename from icons/obj/pottery/bottle.dmi
rename to icons/obj/items/handmade/bottle.dmi
diff --git a/icons/obj/pottery/bottle_tall.dmi b/icons/obj/items/handmade/bottle_tall.dmi
similarity index 100%
rename from icons/obj/pottery/bottle_tall.dmi
rename to icons/obj/items/handmade/bottle_tall.dmi
diff --git a/icons/obj/pottery/bottle_wide.dmi b/icons/obj/items/handmade/bottle_wide.dmi
similarity index 100%
rename from icons/obj/pottery/bottle_wide.dmi
rename to icons/obj/items/handmade/bottle_wide.dmi
diff --git a/icons/obj/items/handmade/bowl.dmi b/icons/obj/items/handmade/bowl.dmi
new file mode 100644
index 00000000000..29cb47bf9be
Binary files /dev/null and b/icons/obj/items/handmade/bowl.dmi differ
diff --git a/icons/obj/items/handmade/bowl_fancy.dmi b/icons/obj/items/handmade/bowl_fancy.dmi
new file mode 100644
index 00000000000..af43c58133a
Binary files /dev/null and b/icons/obj/items/handmade/bowl_fancy.dmi differ
diff --git a/icons/obj/items/handmade/cup.dmi b/icons/obj/items/handmade/cup.dmi
new file mode 100644
index 00000000000..8e894e7d612
Binary files /dev/null and b/icons/obj/items/handmade/cup.dmi differ
diff --git a/icons/obj/items/handmade/cup_fancy.dmi b/icons/obj/items/handmade/cup_fancy.dmi
new file mode 100644
index 00000000000..02f64ffe84f
Binary files /dev/null and b/icons/obj/items/handmade/cup_fancy.dmi differ
diff --git a/icons/obj/items/handmade/decanter.dmi b/icons/obj/items/handmade/decanter.dmi
new file mode 100644
index 00000000000..aad1cd74fe3
Binary files /dev/null and b/icons/obj/items/handmade/decanter.dmi differ
diff --git a/icons/obj/pottery/jar.dmi b/icons/obj/items/handmade/jar.dmi
similarity index 100%
rename from icons/obj/pottery/jar.dmi
rename to icons/obj/items/handmade/jar.dmi
diff --git a/icons/obj/items/handmade/mug.dmi b/icons/obj/items/handmade/mug.dmi
new file mode 100644
index 00000000000..5130e4cd185
Binary files /dev/null and b/icons/obj/items/handmade/mug.dmi differ
diff --git a/icons/obj/pottery/teapot.dmi b/icons/obj/items/handmade/teapot.dmi
similarity index 100%
rename from icons/obj/pottery/teapot.dmi
rename to icons/obj/items/handmade/teapot.dmi
diff --git a/icons/obj/pottery/vase.dmi b/icons/obj/items/handmade/vase.dmi
similarity index 100%
rename from icons/obj/pottery/vase.dmi
rename to icons/obj/items/handmade/vase.dmi
diff --git a/icons/obj/items/handmade/vase_fancy.dmi b/icons/obj/items/handmade/vase_fancy.dmi
new file mode 100644
index 00000000000..8a66723be83
Binary files /dev/null and b/icons/obj/items/handmade/vase_fancy.dmi differ
diff --git a/icons/obj/items/handmade/vase_fancy_fluted.dmi b/icons/obj/items/handmade/vase_fancy_fluted.dmi
new file mode 100644
index 00000000000..af3a2270a76
Binary files /dev/null and b/icons/obj/items/handmade/vase_fancy_fluted.dmi differ
diff --git a/icons/obj/items/hook.dmi b/icons/obj/items/hook.dmi
new file mode 100644
index 00000000000..602683208c7
Binary files /dev/null and b/icons/obj/items/hook.dmi differ
diff --git a/icons/obj/items/horseshoe.dmi b/icons/obj/items/horseshoe.dmi
new file mode 100644
index 00000000000..15f6f5f2482
Binary files /dev/null and b/icons/obj/items/horseshoe.dmi differ
diff --git a/icons/obj/items/hourglass.dmi b/icons/obj/items/hourglass.dmi
new file mode 100644
index 00000000000..a3930025333
Binary files /dev/null and b/icons/obj/items/hourglass.dmi differ
diff --git a/icons/obj/items/mining_satchel.dmi b/icons/obj/items/mining_satchel.dmi
new file mode 100644
index 00000000000..64d0ded9257
Binary files /dev/null and b/icons/obj/items/mining_satchel.dmi differ
diff --git a/icons/obj/items/sheet_snatcher.dmi b/icons/obj/items/sheet_snatcher.dmi
new file mode 100644
index 00000000000..7a898ac6f09
Binary files /dev/null and b/icons/obj/items/sheet_snatcher.dmi differ
diff --git a/icons/obj/items/shield/buckler.dmi b/icons/obj/items/shield/buckler.dmi
deleted file mode 100644
index ff53a0e14e0..00000000000
Binary files a/icons/obj/items/shield/buckler.dmi and /dev/null differ
diff --git a/icons/obj/items/shield/buckler_base_metal.dmi b/icons/obj/items/shield/buckler_base_metal.dmi
new file mode 100644
index 00000000000..41372efa755
Binary files /dev/null and b/icons/obj/items/shield/buckler_base_metal.dmi differ
diff --git a/icons/obj/items/shield/buckler_base_wood.dmi b/icons/obj/items/shield/buckler_base_wood.dmi
new file mode 100644
index 00000000000..03e9bc34a6d
Binary files /dev/null and b/icons/obj/items/shield/buckler_base_wood.dmi differ
diff --git a/icons/obj/items/shield/buckler_metal.dmi b/icons/obj/items/shield/buckler_metal.dmi
new file mode 100644
index 00000000000..0d27f07c23e
Binary files /dev/null and b/icons/obj/items/shield/buckler_metal.dmi differ
diff --git a/icons/obj/items/shield/buckler_wood.dmi b/icons/obj/items/shield/buckler_wood.dmi
new file mode 100644
index 00000000000..94e4563a342
Binary files /dev/null and b/icons/obj/items/shield/buckler_wood.dmi differ
diff --git a/icons/obj/items/shield_fasteners.dmi b/icons/obj/items/shield_fasteners.dmi
new file mode 100644
index 00000000000..e4c289ffc0c
Binary files /dev/null and b/icons/obj/items/shield_fasteners.dmi differ
diff --git a/icons/obj/items/stock_parts/modular_components.dmi b/icons/obj/items/stock_parts/modular_components.dmi
index 570e13bbf65..1a471de37fa 100644
Binary files a/icons/obj/items/stock_parts/modular_components.dmi and b/icons/obj/items/stock_parts/modular_components.dmi differ
diff --git a/icons/obj/items/storage/backpack/backpack_crafted.dmi b/icons/obj/items/storage/backpack/backpack_crafted.dmi
new file mode 100644
index 00000000000..e565e4862a1
Binary files /dev/null and b/icons/obj/items/storage/backpack/backpack_crafted.dmi differ
diff --git a/icons/obj/items/storage/backpack/backpack_haversack.dmi b/icons/obj/items/storage/backpack/backpack_haversack.dmi
new file mode 100644
index 00000000000..ca148f6a4ea
Binary files /dev/null and b/icons/obj/items/storage/backpack/backpack_haversack.dmi differ
diff --git a/icons/obj/items/storage/basket.dmi b/icons/obj/items/storage/basket.dmi
deleted file mode 100644
index 8f6981dc10d..00000000000
Binary files a/icons/obj/items/storage/basket.dmi and /dev/null differ
diff --git a/icons/obj/items/storage/baskets/basket_large.dmi b/icons/obj/items/storage/baskets/basket_large.dmi
new file mode 100644
index 00000000000..71c23d7b6ce
Binary files /dev/null and b/icons/obj/items/storage/baskets/basket_large.dmi differ
diff --git a/icons/obj/items/storage/baskets/basket_round.dmi b/icons/obj/items/storage/baskets/basket_round.dmi
new file mode 100644
index 00000000000..c84fe4b7e60
Binary files /dev/null and b/icons/obj/items/storage/baskets/basket_round.dmi differ
diff --git a/icons/obj/items/storage/nugget_box.dmi b/icons/obj/items/storage/nugget_box.dmi
new file mode 100644
index 00000000000..43293c62dfa
Binary files /dev/null and b/icons/obj/items/storage/nugget_box.dmi differ
diff --git a/icons/obj/items/tool/chisel.dmi b/icons/obj/items/tool/chisel.dmi
new file mode 100644
index 00000000000..e277e1ba44b
Binary files /dev/null and b/icons/obj/items/tool/chisel.dmi differ
diff --git a/icons/obj/items/tool/components/tool_head.dmi b/icons/obj/items/tool/components/tool_head.dmi
index dbb7e7db2bc..cc9a43d9971 100644
Binary files a/icons/obj/items/tool/components/tool_head.dmi and b/icons/obj/items/tool/components/tool_head.dmi differ
diff --git a/icons/obj/items/tool/hammers/forge.dmi b/icons/obj/items/tool/hammers/forge.dmi
new file mode 100644
index 00000000000..a7b0a4e0611
Binary files /dev/null and b/icons/obj/items/tool/hammers/forge.dmi differ
diff --git a/icons/obj/items/training_dummies/alien.dmi b/icons/obj/items/training_dummies/alien.dmi
new file mode 100644
index 00000000000..a08ae3ce7fa
Binary files /dev/null and b/icons/obj/items/training_dummies/alien.dmi differ
diff --git a/icons/obj/items/training_dummies/archery.dmi b/icons/obj/items/training_dummies/archery.dmi
new file mode 100644
index 00000000000..b3e58a34a26
Binary files /dev/null and b/icons/obj/items/training_dummies/archery.dmi differ
diff --git a/icons/obj/items/training_dummies/damage.dmi b/icons/obj/items/training_dummies/damage.dmi
new file mode 100644
index 00000000000..6eaae4a674a
Binary files /dev/null and b/icons/obj/items/training_dummies/damage.dmi differ
diff --git a/icons/obj/items/training_dummies/standard.dmi b/icons/obj/items/training_dummies/standard.dmi
new file mode 100644
index 00000000000..d4b367b4db8
Binary files /dev/null and b/icons/obj/items/training_dummies/standard.dmi differ
diff --git a/icons/obj/items/training_dummies/straw.dmi b/icons/obj/items/training_dummies/straw.dmi
new file mode 100644
index 00000000000..aa4646488b3
Binary files /dev/null and b/icons/obj/items/training_dummies/straw.dmi differ
diff --git a/icons/obj/items/training_dummies/syndicate.dmi b/icons/obj/items/training_dummies/syndicate.dmi
new file mode 100644
index 00000000000..aee57436e79
Binary files /dev/null and b/icons/obj/items/training_dummies/syndicate.dmi differ
diff --git a/icons/obj/machines/gigadrill.dmi b/icons/obj/machines/gigadrill.dmi
new file mode 100644
index 00000000000..bcbda6a5144
Binary files /dev/null and b/icons/obj/machines/gigadrill.dmi differ
diff --git a/icons/obj/machines/smartfridges/contents_chem.dmi b/icons/obj/machines/smartfridges/contents_chem.dmi
new file mode 100644
index 00000000000..652eb6a7a29
Binary files /dev/null and b/icons/obj/machines/smartfridges/contents_chem.dmi differ
diff --git a/icons/obj/machines/smartfridges/contents_drink.dmi b/icons/obj/machines/smartfridges/contents_drink.dmi
new file mode 100644
index 00000000000..cc6c36719b0
Binary files /dev/null and b/icons/obj/machines/smartfridges/contents_drink.dmi differ
diff --git a/icons/obj/machines/smartfridges/contents_food.dmi b/icons/obj/machines/smartfridges/contents_food.dmi
new file mode 100644
index 00000000000..34c205c5013
Binary files /dev/null and b/icons/obj/machines/smartfridges/contents_food.dmi differ
diff --git a/icons/obj/machines/smartfridges/contents_plants.dmi b/icons/obj/machines/smartfridges/contents_plants.dmi
new file mode 100644
index 00000000000..c51a11f5e92
Binary files /dev/null and b/icons/obj/machines/smartfridges/contents_plants.dmi differ
diff --git a/icons/obj/machines/smartfridges/dark.dmi b/icons/obj/machines/smartfridges/dark.dmi
new file mode 100644
index 00000000000..27eb86d54c7
Binary files /dev/null and b/icons/obj/machines/smartfridges/dark.dmi differ
diff --git a/icons/obj/machines/smartfridges/drinks.dmi b/icons/obj/machines/smartfridges/drinks.dmi
new file mode 100644
index 00000000000..474246171a2
Binary files /dev/null and b/icons/obj/machines/smartfridges/drinks.dmi differ
diff --git a/icons/obj/machines/smartfridges/drying_oven.dmi b/icons/obj/machines/smartfridges/drying_oven.dmi
new file mode 100644
index 00000000000..d5a59817b1e
Binary files /dev/null and b/icons/obj/machines/smartfridges/drying_oven.dmi differ
diff --git a/icons/obj/machines/smartfridges/food.dmi b/icons/obj/machines/smartfridges/food.dmi
new file mode 100644
index 00000000000..0c690607da1
Binary files /dev/null and b/icons/obj/machines/smartfridges/food.dmi differ
diff --git a/icons/obj/machines/smartfridges/science.dmi b/icons/obj/machines/smartfridges/science.dmi
new file mode 100644
index 00000000000..091312e07f3
Binary files /dev/null and b/icons/obj/machines/smartfridges/science.dmi differ
diff --git a/icons/obj/machines/vending/bar.dmi b/icons/obj/machines/vending/bar.dmi
new file mode 100644
index 00000000000..c670371c50f
Binary files /dev/null and b/icons/obj/machines/vending/bar.dmi differ
diff --git a/icons/obj/machines/vending/cartridges.dmi b/icons/obj/machines/vending/cartridges.dmi
new file mode 100644
index 00000000000..927d474e441
Binary files /dev/null and b/icons/obj/machines/vending/cartridges.dmi differ
diff --git a/icons/obj/machines/vending/cigarettes.dmi b/icons/obj/machines/vending/cigarettes.dmi
new file mode 100644
index 00000000000..83870f29f06
Binary files /dev/null and b/icons/obj/machines/vending/cigarettes.dmi differ
diff --git a/icons/obj/machines/vending/coffee.dmi b/icons/obj/machines/vending/coffee.dmi
new file mode 100644
index 00000000000..d4f22cabc6b
Binary files /dev/null and b/icons/obj/machines/vending/coffee.dmi differ
diff --git a/icons/obj/machines/vending/dinnerware.dmi b/icons/obj/machines/vending/dinnerware.dmi
new file mode 100644
index 00000000000..297ee226b59
Binary files /dev/null and b/icons/obj/machines/vending/dinnerware.dmi differ
diff --git a/icons/obj/machines/vending/drinks.dmi b/icons/obj/machines/vending/drinks.dmi
new file mode 100644
index 00000000000..8e241137536
Binary files /dev/null and b/icons/obj/machines/vending/drinks.dmi differ
diff --git a/icons/obj/machines/vending/engineering.dmi b/icons/obj/machines/vending/engineering.dmi
new file mode 100644
index 00000000000..da8b3af7e50
Binary files /dev/null and b/icons/obj/machines/vending/engineering.dmi differ
diff --git a/icons/obj/machines/vending/engivend.dmi b/icons/obj/machines/vending/engivend.dmi
new file mode 100644
index 00000000000..6051e27ff1a
Binary files /dev/null and b/icons/obj/machines/vending/engivend.dmi differ
diff --git a/icons/obj/machines/vending/fitness.dmi b/icons/obj/machines/vending/fitness.dmi
new file mode 100644
index 00000000000..fbe9fd2a7a7
Binary files /dev/null and b/icons/obj/machines/vending/fitness.dmi differ
diff --git a/icons/obj/machines/vending/games.dmi b/icons/obj/machines/vending/games.dmi
new file mode 100644
index 00000000000..e472e9421a2
Binary files /dev/null and b/icons/obj/machines/vending/games.dmi differ
diff --git a/icons/obj/machines/vending/generic.dmi b/icons/obj/machines/vending/generic.dmi
new file mode 100644
index 00000000000..b7962898cd2
Binary files /dev/null and b/icons/obj/machines/vending/generic.dmi differ
diff --git a/icons/obj/machines/vending/hotfood.dmi b/icons/obj/machines/vending/hotfood.dmi
new file mode 100644
index 00000000000..d186fa5e3d1
Binary files /dev/null and b/icons/obj/machines/vending/hotfood.dmi differ
diff --git a/icons/obj/machines/vending/laptops.dmi b/icons/obj/machines/vending/laptops.dmi
new file mode 100644
index 00000000000..069ba547883
Binary files /dev/null and b/icons/obj/machines/vending/laptops.dmi differ
diff --git a/icons/obj/machines/vending/lavatory.dmi b/icons/obj/machines/vending/lavatory.dmi
new file mode 100644
index 00000000000..83057f32eec
Binary files /dev/null and b/icons/obj/machines/vending/lavatory.dmi differ
diff --git a/icons/obj/machines/vending/magic.dmi b/icons/obj/machines/vending/magic.dmi
new file mode 100644
index 00000000000..38a969fabe5
Binary files /dev/null and b/icons/obj/machines/vending/magic.dmi differ
diff --git a/icons/obj/machines/vending/medical.dmi b/icons/obj/machines/vending/medical.dmi
new file mode 100644
index 00000000000..8f03461e5e2
Binary files /dev/null and b/icons/obj/machines/vending/medical.dmi differ
diff --git a/icons/obj/machines/vending/nutri_green.dmi b/icons/obj/machines/vending/nutri_green.dmi
new file mode 100644
index 00000000000..4c514e4f215
Binary files /dev/null and b/icons/obj/machines/vending/nutri_green.dmi differ
diff --git a/icons/obj/machines/vending/nutri_grey.dmi b/icons/obj/machines/vending/nutri_grey.dmi
new file mode 100644
index 00000000000..b403fb74b04
Binary files /dev/null and b/icons/obj/machines/vending/nutri_grey.dmi differ
diff --git a/icons/obj/machines/vending/nutrimat.dmi b/icons/obj/machines/vending/nutrimat.dmi
new file mode 100644
index 00000000000..382a47df06a
Binary files /dev/null and b/icons/obj/machines/vending/nutrimat.dmi differ
diff --git a/icons/obj/machines/vending/robotics.dmi b/icons/obj/machines/vending/robotics.dmi
new file mode 100644
index 00000000000..43d48409ad1
Binary files /dev/null and b/icons/obj/machines/vending/robotics.dmi differ
diff --git a/icons/obj/machines/vending/security.dmi b/icons/obj/machines/vending/security.dmi
new file mode 100644
index 00000000000..f09df161b80
Binary files /dev/null and b/icons/obj/machines/vending/security.dmi differ
diff --git a/icons/obj/machines/vending/seeds_green.dmi b/icons/obj/machines/vending/seeds_green.dmi
new file mode 100644
index 00000000000..f3d730d74e1
Binary files /dev/null and b/icons/obj/machines/vending/seeds_green.dmi differ
diff --git a/icons/obj/machines/vending/seeds_grey.dmi b/icons/obj/machines/vending/seeds_grey.dmi
new file mode 100644
index 00000000000..c85ba5b81f8
Binary files /dev/null and b/icons/obj/machines/vending/seeds_grey.dmi differ
diff --git a/icons/obj/machines/vending/snacks.dmi b/icons/obj/machines/vending/snacks.dmi
new file mode 100644
index 00000000000..c5bb7ce78a0
Binary files /dev/null and b/icons/obj/machines/vending/snacks.dmi differ
diff --git a/icons/obj/machines/vending/snix.dmi b/icons/obj/machines/vending/snix.dmi
new file mode 100644
index 00000000000..9711d5a38ca
Binary files /dev/null and b/icons/obj/machines/vending/snix.dmi differ
diff --git a/icons/obj/machines/vending/soda.dmi b/icons/obj/machines/vending/soda.dmi
new file mode 100644
index 00000000000..8b6277aa483
Binary files /dev/null and b/icons/obj/machines/vending/soda.dmi differ
diff --git a/icons/obj/machines/vending/solsnacks.dmi b/icons/obj/machines/vending/solsnacks.dmi
new file mode 100644
index 00000000000..55498c1e585
Binary files /dev/null and b/icons/obj/machines/vending/solsnacks.dmi differ
diff --git a/icons/obj/machines/vending/soviet.dmi b/icons/obj/machines/vending/soviet.dmi
new file mode 100644
index 00000000000..a16f21e429d
Binary files /dev/null and b/icons/obj/machines/vending/soviet.dmi differ
diff --git a/icons/obj/machines/vending/theater.dmi b/icons/obj/machines/vending/theater.dmi
new file mode 100644
index 00000000000..3108ae546b0
Binary files /dev/null and b/icons/obj/machines/vending/theater.dmi differ
diff --git a/icons/obj/machines/vending/tool.dmi b/icons/obj/machines/vending/tool.dmi
new file mode 100644
index 00000000000..97660e43853
Binary files /dev/null and b/icons/obj/machines/vending/tool.dmi differ
diff --git a/icons/obj/machines/vending/tool_adh.dmi b/icons/obj/machines/vending/tool_adh.dmi
new file mode 100644
index 00000000000..03f49f0d1dc
Binary files /dev/null and b/icons/obj/machines/vending/tool_adh.dmi differ
diff --git a/icons/obj/machines/vending/uniform.dmi b/icons/obj/machines/vending/uniform.dmi
new file mode 100644
index 00000000000..10148b98121
Binary files /dev/null and b/icons/obj/machines/vending/uniform.dmi differ
diff --git a/icons/obj/machines/vending/wallmed.dmi b/icons/obj/machines/vending/wallmed.dmi
new file mode 100644
index 00000000000..792954c53a9
Binary files /dev/null and b/icons/obj/machines/vending/wallmed.dmi differ
diff --git a/icons/obj/machines/vending/weeb.dmi b/icons/obj/machines/vending/weeb.dmi
new file mode 100644
index 00000000000..62966c77b12
Binary files /dev/null and b/icons/obj/machines/vending/weeb.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
deleted file mode 100644
index 0bf325c1efb..00000000000
Binary files a/icons/obj/mining.dmi and /dev/null differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 4705a37d998..ec7ad98c685 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/pottery/bowl.dmi b/icons/obj/pottery/bowl.dmi
deleted file mode 100644
index 46550a0a386..00000000000
Binary files a/icons/obj/pottery/bowl.dmi and /dev/null differ
diff --git a/icons/obj/pottery/cup.dmi b/icons/obj/pottery/cup.dmi
deleted file mode 100644
index 09d0afb49de..00000000000
Binary files a/icons/obj/pottery/cup.dmi and /dev/null differ
diff --git a/icons/obj/pottery/mug.dmi b/icons/obj/pottery/mug.dmi
deleted file mode 100644
index cf14f1786e3..00000000000
Binary files a/icons/obj/pottery/mug.dmi and /dev/null differ
diff --git a/icons/obj/structures/armor_stand.dmi b/icons/obj/structures/armor_stand.dmi
new file mode 100644
index 00000000000..0431f7f626c
Binary files /dev/null and b/icons/obj/structures/armor_stand.dmi differ
diff --git a/icons/obj/structures/banner_frame.dmi b/icons/obj/structures/banner_frame.dmi
index 986bf0821e7..7379e9201d2 100644
Binary files a/icons/obj/structures/banner_frame.dmi and b/icons/obj/structures/banner_frame.dmi differ
diff --git a/icons/obj/structures/barrel.dmi b/icons/obj/structures/barrel.dmi
deleted file mode 100644
index 4adfb3e502e..00000000000
Binary files a/icons/obj/structures/barrel.dmi and /dev/null differ
diff --git a/icons/obj/structures/barrels/barrel.dmi b/icons/obj/structures/barrels/barrel.dmi
new file mode 100644
index 00000000000..1fec40d535c
Binary files /dev/null and b/icons/obj/structures/barrels/barrel.dmi differ
diff --git a/icons/obj/structures/barrels/cask.dmi b/icons/obj/structures/barrels/cask.dmi
new file mode 100644
index 00000000000..a2eba5fa0d9
Binary files /dev/null and b/icons/obj/structures/barrels/cask.dmi differ
diff --git a/icons/obj/structures/barrels/cask_rack.dmi b/icons/obj/structures/barrels/cask_rack.dmi
new file mode 100644
index 00000000000..2ee0ca5985b
Binary files /dev/null and b/icons/obj/structures/barrels/cask_rack.dmi differ
diff --git a/icons/obj/structures/barrels/cask_rack_large.dmi b/icons/obj/structures/barrels/cask_rack_large.dmi
new file mode 100644
index 00000000000..e5929b56dd9
Binary files /dev/null and b/icons/obj/structures/barrels/cask_rack_large.dmi differ
diff --git a/icons/obj/structures/benches.dmi b/icons/obj/structures/benches.dmi
index 70510d9d975..5a56743224b 100644
Binary files a/icons/obj/structures/benches.dmi and b/icons/obj/structures/benches.dmi differ
diff --git a/icons/obj/structures/bookcase.dmi b/icons/obj/structures/bookcase.dmi
index 586f8895427..e232f90cb32 100644
Binary files a/icons/obj/structures/bookcase.dmi and b/icons/obj/structures/bookcase.dmi differ
diff --git a/icons/obj/structures/boulder.dmi b/icons/obj/structures/boulder.dmi
new file mode 100644
index 00000000000..dc83a302239
Binary files /dev/null and b/icons/obj/structures/boulder.dmi differ
diff --git a/icons/obj/structures/divider.dmi b/icons/obj/structures/divider.dmi
new file mode 100644
index 00000000000..5016482a2a1
Binary files /dev/null and b/icons/obj/structures/divider.dmi differ
diff --git a/icons/obj/structures/forging/bellows.dmi b/icons/obj/structures/forging/bellows.dmi
new file mode 100644
index 00000000000..9e6031422ef
Binary files /dev/null and b/icons/obj/structures/forging/bellows.dmi differ
diff --git a/icons/obj/structures/grandfather_clock.dmi b/icons/obj/structures/grandfather_clock.dmi
new file mode 100644
index 00000000000..cbef65c5ac4
Binary files /dev/null and b/icons/obj/structures/grandfather_clock.dmi differ
diff --git a/icons/obj/structures/haybale.dmi b/icons/obj/structures/haybale.dmi
new file mode 100644
index 00000000000..822e36790b3
Binary files /dev/null and b/icons/obj/structures/haybale.dmi differ
diff --git a/icons/obj/structures/haystack.dmi b/icons/obj/structures/haystack.dmi
new file mode 100644
index 00000000000..fb663b7285f
Binary files /dev/null and b/icons/obj/structures/haystack.dmi differ
diff --git a/icons/obj/structures/lounge.dmi b/icons/obj/structures/lounge.dmi
new file mode 100644
index 00000000000..49843d472ca
Binary files /dev/null and b/icons/obj/structures/lounge.dmi differ
diff --git a/icons/obj/structures/ore_box.dmi b/icons/obj/structures/ore_box.dmi
new file mode 100644
index 00000000000..c9eea92cfd2
Binary files /dev/null and b/icons/obj/structures/ore_box.dmi differ
diff --git a/icons/obj/structures/pillars/pillar_wide_inset.dmi b/icons/obj/structures/pillars/pillar_wide_inset.dmi
new file mode 100644
index 00000000000..8f307cd2eb0
Binary files /dev/null and b/icons/obj/structures/pillars/pillar_wide_inset.dmi differ
diff --git a/icons/obj/structures/pillars/pillar_wide_round.dmi b/icons/obj/structures/pillars/pillar_wide_round.dmi
new file mode 100644
index 00000000000..c0625980dd8
Binary files /dev/null and b/icons/obj/structures/pillars/pillar_wide_round.dmi differ
diff --git a/icons/obj/structures/pillars/pillar_wide_square.dmi b/icons/obj/structures/pillars/pillar_wide_square.dmi
new file mode 100644
index 00000000000..a5ea0d80445
Binary files /dev/null and b/icons/obj/structures/pillars/pillar_wide_square.dmi differ
diff --git a/icons/obj/structures/rug.dmi b/icons/obj/structures/rug.dmi
new file mode 100644
index 00000000000..ab64dd8fba6
Binary files /dev/null and b/icons/obj/structures/rug.dmi differ
diff --git a/icons/obj/structures/sign_post.dmi b/icons/obj/structures/sign_post.dmi
new file mode 100644
index 00000000000..c6c3ab25d47
Binary files /dev/null and b/icons/obj/structures/sign_post.dmi differ
diff --git a/icons/obj/structures/snowmen/snowbot.dmi b/icons/obj/structures/snowmen/snowbot.dmi
new file mode 100644
index 00000000000..c209cf5e868
Binary files /dev/null and b/icons/obj/structures/snowmen/snowbot.dmi differ
diff --git a/icons/obj/structures/snowmen/snowman.dmi b/icons/obj/structures/snowmen/snowman.dmi
new file mode 100644
index 00000000000..c174da4bb4d
Binary files /dev/null and b/icons/obj/structures/snowmen/snowman.dmi differ
diff --git a/icons/obj/structures/snowmen/snowspider.dmi b/icons/obj/structures/snowmen/snowspider.dmi
new file mode 100644
index 00000000000..bc7af6f5b8c
Binary files /dev/null and b/icons/obj/structures/snowmen/snowspider.dmi differ
diff --git a/icons/obj/structures/target_stakes/archery_butt.dmi b/icons/obj/structures/target_stakes/archery_butt.dmi
new file mode 100644
index 00000000000..b2e7253cf4b
Binary files /dev/null and b/icons/obj/structures/target_stakes/archery_butt.dmi differ
diff --git a/icons/obj/structures/target_stakes/target_stake.dmi b/icons/obj/structures/target_stakes/target_stake.dmi
new file mode 100644
index 00000000000..7423233493f
Binary files /dev/null and b/icons/obj/structures/target_stakes/target_stake.dmi differ
diff --git a/icons/obj/structures/water_cooler.dmi b/icons/obj/structures/water_cooler.dmi
new file mode 100644
index 00000000000..47660e5d627
Binary files /dev/null and b/icons/obj/structures/water_cooler.dmi differ
diff --git a/icons/obj/structures/well.dmi b/icons/obj/structures/well.dmi
index 33a27086c18..9a6402de826 100644
Binary files a/icons/obj/structures/well.dmi and b/icons/obj/structures/well.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
deleted file mode 100644
index 91cf6530e50..00000000000
Binary files a/icons/obj/vending.dmi and /dev/null differ
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index 49d879d47d8..b8ebfc01108 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ
diff --git a/icons/screen/hud.dmi b/icons/screen/hud.dmi
new file mode 100644
index 00000000000..b8d98129369
Binary files /dev/null and b/icons/screen/hud.dmi differ
diff --git a/icons/screen/hud_antag.dmi b/icons/screen/hud_antag.dmi
new file mode 100644
index 00000000000..07840ff2614
Binary files /dev/null and b/icons/screen/hud_antag.dmi differ
diff --git a/icons/screen/hud_implants.dmi b/icons/screen/hud_implants.dmi
new file mode 100644
index 00000000000..5899f696f70
Binary files /dev/null and b/icons/screen/hud_implants.dmi differ
diff --git a/icons/screen/hud_med.dmi b/icons/screen/hud_med.dmi
new file mode 100644
index 00000000000..280097c8166
Binary files /dev/null and b/icons/screen/hud_med.dmi differ
diff --git a/icons/screen/intents.dmi b/icons/screen/intents.dmi
new file mode 100644
index 00000000000..3e7992ed2c9
Binary files /dev/null and b/icons/screen/intents.dmi differ
diff --git a/icons/screen/intents_wide.dmi b/icons/screen/intents_wide.dmi
new file mode 100644
index 00000000000..a89c5ee023d
Binary files /dev/null and b/icons/screen/intents_wide.dmi differ
diff --git a/icons/turf/flooring/laminate.dmi b/icons/turf/flooring/laminate.dmi
new file mode 100644
index 00000000000..83d4933c155
Binary files /dev/null and b/icons/turf/flooring/laminate.dmi differ
diff --git a/icons/turf/flooring/mud.dmi b/icons/turf/flooring/mud.dmi
index 738ae2dd4ef..b73fcd5c76f 100644
Binary files a/icons/turf/flooring/mud.dmi and b/icons/turf/flooring/mud.dmi differ
diff --git a/icons/turf/flooring/straw.dmi b/icons/turf/flooring/straw.dmi
new file mode 100644
index 00000000000..f797358bf23
Binary files /dev/null and b/icons/turf/flooring/straw.dmi differ
diff --git a/icons/turf/flooring/wood.dmi b/icons/turf/flooring/wood.dmi
index a93de0fefca..9e17d5cbeb4 100644
Binary files a/icons/turf/flooring/wood.dmi and b/icons/turf/flooring/wood.dmi differ
diff --git a/icons/turf/flooring/wood_alt.dmi b/icons/turf/flooring/wood_alt.dmi
new file mode 100644
index 00000000000..2f55a0fb6c4
Binary files /dev/null and b/icons/turf/flooring/wood_alt.dmi differ
diff --git a/icons/turf/walls/_previews.dmi b/icons/turf/walls/_previews.dmi
index 02e2637c0c7..59e03e52b4d 100644
Binary files a/icons/turf/walls/_previews.dmi and b/icons/turf/walls/_previews.dmi differ
diff --git a/icons/turf/walls/plaster.dmi b/icons/turf/walls/plaster.dmi
new file mode 100644
index 00000000000..ee8b3faf2b4
Binary files /dev/null and b/icons/turf/walls/plaster.dmi differ
diff --git a/icons/turf/walls/reinforced_timber.dmi b/icons/turf/walls/reinforced_timber.dmi
new file mode 100644
index 00000000000..46e537f04e0
Binary files /dev/null and b/icons/turf/walls/reinforced_timber.dmi differ
diff --git a/icons/turf/walls/reinforced_timber_alt_1.dmi b/icons/turf/walls/reinforced_timber_alt_1.dmi
new file mode 100644
index 00000000000..f6eb3a41df3
Binary files /dev/null and b/icons/turf/walls/reinforced_timber_alt_1.dmi differ
diff --git a/icons/turf/walls/reinforced_timber_alt_2.dmi b/icons/turf/walls/reinforced_timber_alt_2.dmi
new file mode 100644
index 00000000000..c06be35cb5f
Binary files /dev/null and b/icons/turf/walls/reinforced_timber_alt_2.dmi differ
diff --git a/icons/turf/walls/reinforced_timber_alt_3.dmi b/icons/turf/walls/reinforced_timber_alt_3.dmi
new file mode 100644
index 00000000000..1ee1a9f4625
Binary files /dev/null and b/icons/turf/walls/reinforced_timber_alt_3.dmi differ
diff --git a/icons/turf/walls/reinforced_timber_alt_4.dmi b/icons/turf/walls/reinforced_timber_alt_4.dmi
new file mode 100644
index 00000000000..ac01d0457a5
Binary files /dev/null and b/icons/turf/walls/reinforced_timber_alt_4.dmi differ
diff --git a/icons/turf/walls/square_shutter.dmi b/icons/turf/walls/square_shutter.dmi
new file mode 100644
index 00000000000..d0729a887be
Binary files /dev/null and b/icons/turf/walls/square_shutter.dmi differ
diff --git a/icons/turf/walls/wattle.dmi b/icons/turf/walls/wattle.dmi
new file mode 100644
index 00000000000..01ee0aadc3e
Binary files /dev/null and b/icons/turf/walls/wattle.dmi differ
diff --git a/icons/turf/walls/wattledaub.dmi b/icons/turf/walls/wattledaub.dmi
new file mode 100644
index 00000000000..126f7829c7e
Binary files /dev/null and b/icons/turf/walls/wattledaub.dmi differ
diff --git a/maps/antag_spawn/ert/ert.dm b/maps/antag_spawn/ert/ert.dm
index 0d16a0f2a8d..0422dfdada6 100644
--- a/maps/antag_spawn/ert/ert.dm
+++ b/maps/antag_spawn/ert/ert.dm
@@ -59,4 +59,7 @@
/area/map_template/rescue_base/start
name = "\improper Response Team Base"
icon_state = "shuttlered"
- base_turf = /turf/unsimulated/floor/rescue_base
\ No newline at end of file
+ base_turf = /turf/unsimulated/floor/rescue_base
+
+// Separated in preparation for making ERTs into a modpack.
+#include "rig.dm"
\ No newline at end of file
diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm
index 30c9701f6a8..703d909d0c3 100644
--- a/maps/antag_spawn/ert/ert_base.dmm
+++ b/maps/antag_spawn/ert/ert_base.dmm
@@ -415,9 +415,6 @@
/obj/item/flash,
/turf/unsimulated/floor/dark,
/area/map_template/rescue_base/base)
-"bs" = (
-/turf/unsimulated/floor/vault,
-/area/map_template/rescue_base/base)
"bt" = (
/obj/machinery/door/airlock/centcom{
name = "Cell 2"
@@ -1198,10 +1195,6 @@
/obj/machinery/vending/medical,
/turf/unsimulated/wall,
/area/map_template/rescue_base/base)
-"dj" = (
-/obj/effect/wingrille_spawn/reinforced/crescent,
-/turf/space,
-/area/map_template/rescue_base/base)
"dk" = (
/obj/machinery/door/airlock/centcom{
name = "EVA"
@@ -1396,9 +1389,6 @@
/obj/structure/bed/chair/office/dark,
/turf/unsimulated/floor/vault,
/area/map_template/rescue_base/base)
-"dP" = (
-/turf/unsimulated/floor/vault,
-/area/map_template/rescue_base/base)
"dQ" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/door/airlock/external/shuttle{
@@ -1466,10 +1456,6 @@
},
/turf/unsimulated/floor/vault,
/area/map_template/rescue_base/base)
-"ec" = (
-/obj/structure/table/reinforced,
-/turf/unsimulated/floor/vault,
-/area/map_template/rescue_base/base)
"ed" = (
/obj/structure/table/reinforced,
/obj/item/radio/intercom{
@@ -1547,7 +1533,7 @@
"et" = (
/obj/structure/rack,
/obj/item/secure_storage/briefcase,
-/obj/item/clothing/head/beret/corp/centcom/captain,
+/obj/item/clothing/head/beret,
/turf/unsimulated/floor/vault,
/area/map_template/rescue_base/base)
"eu" = (
@@ -1555,7 +1541,7 @@
/turf/unsimulated/floor/vault,
/area/map_template/rescue_base/base)
"ev" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/machinery/button/blast_door{
@@ -1567,7 +1553,7 @@
/turf/unsimulated/floor/cult,
/area/map_template/rescue_base/base)
"ew" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/radio/phone{
@@ -1577,7 +1563,7 @@
/turf/unsimulated/floor/cult,
/area/map_template/rescue_base/base)
"ex" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/machinery/button/blast_door{
@@ -1747,7 +1733,7 @@
/turf/unsimulated/floor/dark,
/area/map_template/rescue_base/base)
"eH" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/ashtray,
@@ -1761,7 +1747,7 @@
/turf/unsimulated/floor/cult,
/area/map_template/rescue_base/base)
"eJ" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/turf/unsimulated/floor/cult,
@@ -1833,8 +1819,7 @@
"eV" = (
/obj/machinery/door/blast/regular/open{
id_tag = "rescuebridge";
- name = "Cockpit Blast Shutters";
-
+ name = "Cockpit Blast Shutters"
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -1843,8 +1828,7 @@
"eW" = (
/obj/machinery/door/blast/regular/open{
id_tag = "rescuedock";
- name = "Blast Shutters";
-
+ name = "Blast Shutters"
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -2075,8 +2059,7 @@
/obj/machinery/door/blast/regular/open{
dir = 4;
id_tag = "rescuebridge";
- name = "Cockpit Blast Shutters";
-
+ name = "Cockpit Blast Shutters"
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -2135,8 +2118,7 @@
/obj/machinery/door/blast/regular/open{
dir = 4;
id_tag = "rescueeva";
- name = "Blast Shutters";
-
+ name = "Blast Shutters"
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -2539,8 +2521,7 @@
/obj/machinery/door/blast/regular/open{
dir = 4;
id_tag = "rescuebridge";
- name = "Blast Shutters";
-
+ name = "Blast Shutters"
},
/obj/effect/paint/blue,
/turf/floor/plating,
@@ -2590,8 +2571,7 @@
/obj/machinery/door/blast/regular/open{
dir = 4;
id_tag = "rescueinfirm";
- name = "Blast Shutters";
-
+ name = "Blast Shutters"
},
/obj/effect/paint/blue,
/turf/floor/plating,
@@ -3513,7 +3493,7 @@ ao
ao
dU
ao
-dP
+ao
ad
ac
ac
@@ -4285,7 +4265,7 @@ ar
cH
ar
cS
-dj
+bg
ao
ao
bg
@@ -4350,7 +4330,7 @@ ar
cI
ar
cT
-dj
+bg
ao
ao
bg
@@ -4415,7 +4395,7 @@ ar
ar
ar
cU
-dj
+bg
ao
ao
bg
@@ -4480,7 +4460,7 @@ cy
cJ
cO
cV
-dj
+bg
ao
ao
ad
@@ -4680,7 +4660,7 @@ ao
ao
ad
cR
-dP
+ao
dY
dY
eu
@@ -4988,11 +4968,11 @@ ar
ar
ad
ar
-bs
+ao
ar
ar
ar
-bs
+ao
ar
ad
cq
@@ -5011,7 +4991,7 @@ ao
ao
ao
ao
-ec
+de
ad
bB
eN
@@ -5076,7 +5056,7 @@ ao
ao
ao
ao
-ec
+de
ad
bC
eN
@@ -5136,12 +5116,12 @@ ao
ad
ad
ad
-ec
+de
ao
ao
ao
ao
-ec
+de
ad
bA
eO
@@ -5206,7 +5186,7 @@ ao
ao
ao
ao
-ec
+de
ad
bA
bB
@@ -5271,7 +5251,7 @@ eq
eq
eq
ao
-ec
+de
ad
bB
bC
@@ -5464,9 +5444,9 @@ ac
ac
ac
ad
-ec
+de
eq
-ec
+de
ad
ac
ac
diff --git a/mods/content/corporate/clothing/rigs/ert.dm b/maps/antag_spawn/ert/rig.dm
similarity index 78%
rename from mods/content/corporate/clothing/rigs/ert.dm
rename to maps/antag_spawn/ert/rig.dm
index 650d93c4881..353590e005f 100644
--- a/mods/content/corporate/clothing/rigs/ert.dm
+++ b/maps/antag_spawn/ert/rig.dm
@@ -2,7 +2,7 @@
name = "emergency response command hardsuit control module"
desc = "A hardsuit used by many corporate and governmental emergency response forces. Has blue highlights. Armoured and space ready."
suit_type = "emergency response command"
- icon = 'mods/content/corporate/icons/rigs/commander/rig.dmi'
+ icon = 'icons/clothing/rigs/ert/commander/rig.dmi'
chest = /obj/item/clothing/suit/space/rig/ert
helmet = /obj/item/clothing/head/helmet/space/rig/ert
@@ -53,20 +53,20 @@
/obj/item/clothing/head/helmet/space/rig/ert
camera = /obj/machinery/camera/network/ert
- icon = 'mods/content/corporate/icons/rigs/commander/helmet.dmi'
+ icon = 'icons/clothing/rigs/ert/commander/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert
- icon = 'mods/content/corporate/icons/rigs/commander/chest.dmi'
+ icon = 'icons/clothing/rigs/ert/commander/chest.dmi'
/obj/item/clothing/shoes/magboots/rig/ert
- icon = 'mods/content/corporate/icons/rigs/commander/boots.dmi'
+ icon = 'icons/clothing/rigs/ert/commander/boots.dmi'
/obj/item/clothing/gloves/rig/ert
item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS
- icon = 'mods/content/corporate/icons/rigs/commander/gloves.dmi'
+ icon = 'icons/clothing/rigs/ert/commander/gloves.dmi'
/obj/item/rig/ert/engineer
name = "emergency response engineering hardsuit control module"
desc = "A hardsuit used by many corporate and governmental emergency response forces. Has orange highlights. Armoured and space ready."
suit_type = "emergency response engineer"
- icon = 'mods/content/corporate/icons/rigs/engineer/rig.dmi'
+ icon = 'icons/clothing/rigs/ert/engineer/rig.dmi'
chest = /obj/item/clothing/suit/space/rig/ert/engineer
helmet = /obj/item/clothing/head/helmet/space/rig/ert/engineer
@@ -82,20 +82,20 @@
)
/obj/item/clothing/head/helmet/space/rig/ert/engineer
- icon = 'mods/content/corporate/icons/rigs/engineer/helmet.dmi'
+ icon = 'icons/clothing/rigs/ert/engineer/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert/engineer
- icon = 'mods/content/corporate/icons/rigs/engineer/chest.dmi'
+ icon = 'icons/clothing/rigs/ert/engineer/chest.dmi'
/obj/item/clothing/shoes/magboots/rig/ert/engineer
- icon = 'mods/content/corporate/icons/rigs/engineer/boots.dmi'
+ icon = 'icons/clothing/rigs/ert/engineer/boots.dmi'
/obj/item/clothing/gloves/rig/ert/engineer
- icon = 'mods/content/corporate/icons/rigs/engineer/gloves.dmi'
+ icon = 'icons/clothing/rigs/ert/engineer/gloves.dmi'
siemens_coefficient = 0
/obj/item/rig/ert/janitor
name = "emergency response sanitation hardsuit control module"
desc = "A hardsuit used by many corporate and governmental emergency response forces. Has purple highlights. Armoured and space ready."
suit_type = "emergency response sanitation"
- icon = 'mods/content/corporate/icons/rigs/janitor/rig.dmi'
+ icon = 'icons/clothing/rigs/ert/janitor/rig.dmi'
chest = /obj/item/clothing/suit/space/rig/ert/janitor
helmet = /obj/item/clothing/head/helmet/space/rig/ert/janitor
@@ -112,19 +112,19 @@
)
/obj/item/clothing/head/helmet/space/rig/ert/janitor
- icon = 'mods/content/corporate/icons/rigs/janitor/helmet.dmi'
+ icon = 'icons/clothing/rigs/ert/janitor/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert/janitor
- icon = 'mods/content/corporate/icons/rigs/janitor/chest.dmi'
+ icon = 'icons/clothing/rigs/ert/janitor/chest.dmi'
/obj/item/clothing/shoes/magboots/rig/ert/janitor
- icon = 'mods/content/corporate/icons/rigs/janitor/boots.dmi'
+ icon = 'icons/clothing/rigs/ert/janitor/boots.dmi'
/obj/item/clothing/gloves/rig/ert/janitor
- icon = 'mods/content/corporate/icons/rigs/janitor/gloves.dmi'
+ icon = 'icons/clothing/rigs/ert/janitor/gloves.dmi'
/obj/item/rig/ert/medical
name = "emergency response medical hardsuit control module"
desc = "A hardsuit used by many corporate and governmental emergency response forces. Has white highlights. Armoured and space ready."
suit_type = "emergency response medic"
- icon = 'mods/content/corporate/icons/rigs/medic/rig.dmi'
+ icon = 'icons/clothing/rigs/ert/medic/rig.dmi'
chest = /obj/item/clothing/suit/space/rig/ert/medical
helmet = /obj/item/clothing/head/helmet/space/rig/ert/medical
@@ -140,19 +140,19 @@
)
/obj/item/clothing/head/helmet/space/rig/ert/medical
- icon = 'mods/content/corporate/icons/rigs/medic/helmet.dmi'
+ icon = 'icons/clothing/rigs/ert/medic/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert/medical
- icon = 'mods/content/corporate/icons/rigs/medic/chest.dmi'
+ icon = 'icons/clothing/rigs/ert/medic/chest.dmi'
/obj/item/clothing/shoes/magboots/rig/ert/medical
- icon = 'mods/content/corporate/icons/rigs/medic/boots.dmi'
+ icon = 'icons/clothing/rigs/ert/medic/boots.dmi'
/obj/item/clothing/gloves/rig/ert/medical
- icon = 'mods/content/corporate/icons/rigs/medic/gloves.dmi'
+ icon = 'icons/clothing/rigs/ert/medic/gloves.dmi'
/obj/item/rig/ert/security
name = "emergency response security hardsuit control module"
desc = "A hardsuit used by many corporate and governmental emergency response forces. Has red highlights. Armoured and space ready."
suit_type = "emergency response security"
- icon = 'mods/content/corporate/icons/rigs/security/rig.dmi'
+ icon = 'icons/clothing/rigs/ert/security/rig.dmi'
initial_modules = list(
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
@@ -167,19 +167,19 @@
gloves = /obj/item/clothing/gloves/rig/ert/security
/obj/item/clothing/head/helmet/space/rig/ert/security
- icon = 'mods/content/corporate/icons/rigs/security/helmet.dmi'
+ icon = 'icons/clothing/rigs/ert/security/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert/security
- icon = 'mods/content/corporate/icons/rigs/security/chest.dmi'
+ icon = 'icons/clothing/rigs/ert/security/chest.dmi'
/obj/item/clothing/shoes/magboots/rig/ert/security
- icon = 'mods/content/corporate/icons/rigs/security/boots.dmi'
+ icon = 'icons/clothing/rigs/ert/security/boots.dmi'
/obj/item/clothing/gloves/rig/ert/security
- icon = 'mods/content/corporate/icons/rigs/security/gloves.dmi'
+ icon = 'icons/clothing/rigs/ert/security/gloves.dmi'
/obj/item/rig/ert/assetprotection
name = "heavy emergency response suit control module"
desc = "A heavy, modified version of a common emergency response hardsuit. Has blood red highlights. Armoured and space ready."
suit_type = "heavy emergency response"
- icon = 'mods/content/corporate/icons/rigs/asset_protection/rig.dmi'
+ icon = 'icons/clothing/rigs/ert/asset_protection/rig.dmi'
armor = list(
ARMOR_MELEE = ARMOR_MELEE_VERY_HIGH,
ARMOR_BULLET = ARMOR_BALLISTIC_RESISTANT,
@@ -209,11 +209,11 @@
)
/obj/item/clothing/head/helmet/space/rig/ert/assetprotection
- icon = 'mods/content/corporate/icons/rigs/asset_protection/helmet.dmi'
+ icon = 'icons/clothing/rigs/ert/asset_protection/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert/assetprotection
- icon = 'mods/content/corporate/icons/rigs/asset_protection/chest.dmi'
+ icon = 'icons/clothing/rigs/ert/asset_protection/chest.dmi'
/obj/item/clothing/shoes/magboots/rig/ert/assetprotection
- icon = 'mods/content/corporate/icons/rigs/asset_protection/boots.dmi'
+ icon = 'icons/clothing/rigs/ert/asset_protection/boots.dmi'
/obj/item/clothing/gloves/rig/ert/assetprotection
- icon = 'mods/content/corporate/icons/rigs/asset_protection/gloves.dmi'
+ icon = 'icons/clothing/rigs/ert/asset_protection/gloves.dmi'
siemens_coefficient = 0
diff --git a/maps/antag_spawn/mercenary/mercenary_base.dmm b/maps/antag_spawn/mercenary/mercenary_base.dmm
index 86f6f092e57..f75023f8eb7 100644
--- a/maps/antag_spawn/mercenary/mercenary_base.dmm
+++ b/maps/antag_spawn/mercenary/mercenary_base.dmm
@@ -1209,7 +1209,7 @@
/obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten,
/obj/item/stack/material/ingot/mapped/copper/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/pane/mapped/rglass/fifty,
/obj/item/stack/material/pane/mapped/rborosilicate/ten,
/obj/structure/cable{
@@ -2751,9 +2751,9 @@
/obj/item/stack/material/sheet/mapped/steel/ten,
/obj/item/stack/material/sheet/mapped/steel/ten,
/obj/item/stack/material/sheet/mapped/steel/ten,
-/obj/item/stack/material/rods/ten,
-/obj/item/stack/material/rods/ten,
-/obj/item/stack/material/rods/ten,
+/obj/item/stack/material/rods/mapped/steel/ten,
+/obj/item/stack/material/rods/mapped/steel/ten,
+/obj/item/stack/material/rods/mapped/steel/ten,
/obj/item/stack/material/pane/mapped/glass/ten,
/obj/item/stack/material/pane/mapped/glass/ten,
/obj/item/stack/material/pane/mapped/glass/ten,
diff --git a/maps/antag_spawn/wizard/wizard.dm b/maps/antag_spawn/wizard/wizard.dm
deleted file mode 100644
index 4ca75cd145d..00000000000
--- a/maps/antag_spawn/wizard/wizard.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/datum/map_template/ruin/antag_spawn/wizard
- name = "Wizard Base"
- suffixes = list("wizard/wizard_base.dmm")
- apc_test_exempt_areas = list(
- /area/map_template/wizard_station = NO_SCRUBBER|NO_VENT|NO_APC
- )
-
-/area/map_template/wizard_station
- name = "\improper Wizard's Den"
- icon_state = "yellow"
- requires_power = 0
- dynamic_lighting = FALSE
- req_access = list(access_wizard)
diff --git a/maps/antag_spawn/wizard/wizard_base.dmm b/maps/antag_spawn/wizard/wizard_base.dmm
deleted file mode 100644
index 965c15e71e6..00000000000
--- a/maps/antag_spawn/wizard/wizard_base.dmm
+++ /dev/null
@@ -1,1747 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/space/infinity,
-/area/space)
-"ab" = (
-/turf/unsimulated/wall,
-/area/map_template/wizard_station)
-"ac" = (
-/obj/structure/table/woodentable,
-/obj/item/backpack/cultpack,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"ad" = (
-/turf/unsimulated/wall/fakeglass/alt{
- dir = 8
- },
-/area/map_template/wizard_station)
-"ae" = (
-/turf/unsimulated/wall/fakeglass{
- dir = 4
- },
-/area/map_template/wizard_station)
-"af" = (
-/obj/structure/table/woodentable,
-/obj/item/backpack/satchel/grey/withwallet,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"ag" = (
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"ah" = (
-/obj/structure/undies_wardrobe,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"ai" = (
-/turf/unsimulated/wall/fakeglass{
- dir = 8
- },
-/area/map_template/wizard_station)
-"aj" = (
-/obj/structure/door/wood,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"ak" = (
-/obj/structure/table/woodentable,
-/obj/item/flashlight/lamp/green{
- on = 0;
- pixel_x = -3;
- pixel_y = 8
- },
-/obj/item/chems/drinks/flask/barflask,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"al" = (
-/obj/structure/table/woodentable,
-/obj/item/dice,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"am" = (
-/obj/structure/bed/padded,
-/obj/item/bedsheet/rd,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"an" = (
-/obj/structure/table/woodentable,
-/obj/item/dice/d20,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"ao" = (
-/obj/structure/table/woodentable,
-/obj/item/backpack/satchel/grey/withwallet,
-/obj/item/clothing/glasses/eyepatch/monocle,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"ap" = (
-/mob/living/human/monkey{
- name = "Murphey"
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aq" = (
-/obj/structure/table/woodentable,
-/obj/item/food/chawanmushi,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"ar" = (
-/obj/structure/table/woodentable,
-/obj/abstract/landmark{
- name = "Teleport-Scroll"
- },
-/obj/item/toy/figure/ninja,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"as" = (
-/obj/structure/table/woodentable,
-/obj/item/megaphone,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"at" = (
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"au" = (
-/obj/structure/table/woodentable,
-/obj/item/cash/c1,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"av" = (
-/obj/structure/table/woodentable,
-/obj/machinery/chemical_dispenser/bar_soft/full,
-/obj/item/radio/intercom/wizard{
- dir = 8;
- pixel_x = 22
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aw" = (
-/obj/machinery/vending/magivend,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"ax" = (
-/obj/structure/bed/chair/wood/wings{
- dir = 8
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"ay" = (
-/obj/abstract/landmark/start{
- name = "wizard"
- },
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"az" = (
-/obj/structure/aliumizer,
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"aA" = (
-/obj/item/radio/intercom/wizard{
- dir = 8;
- pixel_x = 22
- },
-/turf/floor/carpet,
-/area/map_template/wizard_station)
-"aB" = (
-/obj/structure/bookcase{
- name = "Forbidden Knowledge"
- },
-/obj/effect/decal/cleanable/cobweb,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aC" = (
-/obj/structure/bookcase{
- name = "bookcase (Tactics)"
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aD" = (
-/obj/structure/bookcase,
-/obj/item/book/manual/nuclear,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aE" = (
-/obj/structure/bookcase{
- name = "Forbidden Knowledge"
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aF" = (
-/turf/unsimulated/wall/fakeglass{
- dir = 1
- },
-/area/map_template/wizard_station)
-"aG" = (
-/turf/unsimulated/floor/water,
-/area/map_template/wizard_station)
-"aH" = (
-/obj/structure/bookcase,
-/obj/item/book/manual/robotics_cyborgs,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aI" = (
-/obj/item/bikehorn/rubberducky,
-/turf/unsimulated/floor/water,
-/area/map_template/wizard_station)
-"aJ" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 8
- },
-/obj/machinery/acting/changer/mirror{
- pixel_y = 32
- },
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"aK" = (
-/obj/structure/hygiene/toilet{
- pixel_y = 8
- },
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"aL" = (
-/obj/structure/table/woodentable,
-/obj/item/radio/intercom/wizard{
- dir = 4;
- pixel_x = -22
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aM" = (
-/obj/structure/closet/coffin,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"aN" = (
-/obj/structure/bed/chair/wood/wings{
- dir = 4
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aO" = (
-/obj/structure/table/woodentable,
-/obj/item/box/cups,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aP" = (
-/obj/structure/closet,
-/obj/item/clothing/suit/wizrobe/red,
-/obj/item/clothing/shoes/sandal,
-/obj/item/clothing/head/wizard/red,
-/obj/item/staff/crystal/beacon,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"aQ" = (
-/obj/structure/table/woodentable,
-/obj/item/bag/cash,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aR" = (
-/obj/structure/closet,
-/obj/item/clothing/suit/wizrobe/marisa,
-/obj/item/clothing/shoes/sandal/marisa,
-/obj/item/clothing/head/wizard/marisa,
-/obj/item/staff/broom,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"aS" = (
-/obj/structure/table/woodentable,
-/obj/item/box/candles,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aT" = (
-/obj/structure/closet,
-/obj/item/clothing/suit/wizrobe/magusblue,
-/obj/item/clothing/head/wizard/magus,
-/obj/item/staff/crystal,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"aU" = (
-/obj/structure/closet,
-/obj/item/chems/drinks/bottle/pwine,
-/obj/item/chems/drinks/bottle/agedwhiskey,
-/obj/item/chems/drinks/bottle/cognac,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"aV" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 8
- },
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"aW" = (
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"aX" = (
-/obj/structure/door/iron,
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"aY" = (
-/obj/structure/table/woodentable,
-/obj/item/box/fancy/donut,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"aZ" = (
-/obj/structure/door/wood,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"ba" = (
-/obj/structure/door/silver,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"bb" = (
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"bc" = (
-/turf/unsimulated/wall/fakeglass,
-/area/map_template/wizard_station)
-"bd" = (
-/obj/item/soap,
-/turf/unsimulated/floor/water,
-/area/map_template/wizard_station)
-"be" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 8
- },
-/obj/item/radio/intercom/wizard{
- dir = 1;
- pixel_y = -30
- },
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"bf" = (
-/obj/structure/hygiene/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/structure/mirror{
- pixel_x = 32
- },
-/turf/unsimulated/floor/freezer,
-/area/map_template/wizard_station)
-"bg" = (
-/obj/structure/table/woodentable,
-/obj/item/chems/glass/bowl/mapped/meatball,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"bh" = (
-/obj/structure/closet,
-/obj/item/clothing/jumpsuit/psysuit,
-/obj/item/clothing/suit/wizrobe/psypurple,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"bi" = (
-/turf/unsimulated/wall/fakeglass/alt{
- dir = 1
- },
-/area/map_template/wizard_station)
-"bj" = (
-/obj/structure/closet,
-/obj/item/clothing/shoes/sandal/marisa{
- desc = "A set of fancy shoes that are as functional as they are comfortable.";
- name = "Gentlemans Shoes"
- },
-/obj/item/clothing/shirt/button/black,
-/obj/item/clothing/suit/jacket/vest/gray,
-/obj/item/clothing/suit/wizrobe/gentlecoat,
-/obj/item/clothing/head/wizard/cap,
-/obj/item/cane/fancy,
-/obj/item/radio/intercom/wizard{
- dir = 1;
- pixel_y = -30
- },
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"bk" = (
-/obj/structure/closet,
-/obj/item/clothing/suit/wizrobe/magusred,
-/obj/item/clothing/head/wizard/magus,
-/obj/item/staff/crystal/beacon,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"bl" = (
-/obj/structure/closet,
-/obj/item/briefcase,
-/turf/unsimulated/floor/lino,
-/area/map_template/wizard_station)
-"bm" = (
-/obj/structure/bookcase,
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"bn" = (
-/obj/item/radio/intercom/wizard{
- dir = 1;
- pixel_y = -30
- },
-/turf/unsimulated/floor/wood,
-/area/map_template/wizard_station)
-"bo" = (
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bp" = (
-/obj/item/radio/intercom/wizard{
- pixel_y = 20
- },
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bq" = (
-/obj/structure/fake_pylon,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"br" = (
-/obj/structure/meat_hook,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bs" = (
-/obj/item/remains/human,
-/turf/unsimulated/floor/lava,
-/area/map_template/wizard_station)
-"bt" = (
-/turf/unsimulated/floor/lava,
-/area/map_template/wizard_station)
-"bu" = (
-/turf/unsimulated/floor/grass,
-/area/map_template/wizard_station)
-"bv" = (
-/obj/structure/flora/bush/fullgrass,
-/turf/unsimulated/floor/grass,
-/area/map_template/wizard_station)
-"bw" = (
-/mob/living/simple_animal/hostile/creature{
- name = "Experiment 35b"
- },
-/turf/unsimulated/floor/lava,
-/area/map_template/wizard_station)
-"bx" = (
-/obj/structure/talisman_altar,
-/obj/item/knife/ritual,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"by" = (
-/obj/structure/table/woodentable,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bz" = (
-/obj/effect/gateway/active/spooky,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bA" = (
-/obj/structure/table/marble,
-/obj/item/flashlight/slime,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bB" = (
-/mob/living/simple_animal/hostile/goat{
- name = "Experiment 97d"
- },
-/turf/unsimulated/floor/grass,
-/area/map_template/wizard_station)
-"bC" = (
-/obj/structure/flora/bush/grassybush,
-/turf/unsimulated/floor/grass,
-/area/map_template/wizard_station)
-"bD" = (
-/obj/structure/flora/pottedplant/unusual,
-/turf/unsimulated/floor/cult,
-/area/map_template/wizard_station)
-"bE" = (
-/turf/unsimulated/floor/asteroid,
-/area/map_template/wizard_station)
-"bF" = (
-/obj/effect/overlay/palmtree_r,
-/turf/unsimulated/floor/asteroid,
-/area/map_template/wizard_station)
-"bG" = (
-/mob/living/simple_animal/crab{
- name = "Experiment 68a"
- },
-/turf/unsimulated/floor/asteroid,
-/area/map_template/wizard_station)
-"bH" = (
-/obj/effect/overlay/coconut,
-/turf/unsimulated/floor/asteroid,
-/area/map_template/wizard_station)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(6,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aF
-bi
-bc
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aG
-aG
-bd
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bs
-bt
-bt
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aI
-aG
-aG
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bt
-bt
-bt
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aJ
-aV
-be
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bt
-bw
-bt
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(12,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aK
-aW
-bf
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bt
-bt
-bs
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(13,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-aX
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aF
-bi
-bc
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aE
-aL
-at
-aw
-aD
-ab
-ab
-aa
-aa
-aa
-ab
-ab
-bq
-bo
-bx
-bo
-bq
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-aB
-at
-at
-at
-at
-at
-bm
-ab
-aF
-bi
-bc
-ab
-aM
-bo
-bo
-bo
-bo
-bo
-bD
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-aa
-ai
-ak
-ar
-ac
-af
-ab
-al
-at
-aN
-as
-aN
-at
-aQ
-ab
-at
-at
-bn
-ab
-bo
-bo
-ai
-ab
-ai
-bo
-bo
-ai
-bE
-bE
-bE
-bH
-ab
-aa
-aa
-aa
-"}
-(17,1,1) = {"
-aa
-aa
-aa
-ad
-am
-ay
-ag
-ag
-aj
-at
-at
-aq
-aY
-bg
-at
-at
-ba
-at
-at
-at
-ba
-bo
-bo
-ad
-bz
-ad
-bo
-by
-ad
-bE
-bE
-bG
-bE
-ab
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-ae
-ao
-az
-aA
-ah
-ab
-an
-ap
-ax
-au
-ax
-at
-aS
-ab
-at
-at
-at
-ab
-bp
-bo
-ae
-ab
-ae
-bo
-bo
-ae
-bE
-bF
-bE
-bE
-ab
-aa
-aa
-aa
-"}
-(19,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-aC
-at
-at
-at
-at
-at
-bm
-ab
-aF
-bi
-bc
-ab
-aM
-bo
-bo
-bo
-bo
-bo
-bD
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-"}
-(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aC
-aO
-at
-av
-aH
-ab
-ab
-aa
-aa
-aa
-ab
-ab
-br
-bo
-bA
-bo
-br
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-aZ
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aF
-bi
-bc
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aP
-bb
-bh
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bu
-bu
-bC
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aR
-bb
-bj
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bu
-bu
-bu
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aT
-bb
-bk
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bu
-bB
-bu
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aU
-bb
-bl
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-bv
-bu
-bu
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(26,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aF
-bi
-bc
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(27,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(28,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(31,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(32,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(33,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
diff --git a/maps/away/bearcat/bearcat-1.dmm b/maps/away/bearcat/bearcat-1.dmm
index 947b876eee6..f5de2128039 100644
--- a/maps/away/bearcat/bearcat-1.dmm
+++ b/maps/away/bearcat/bearcat-1.dmm
@@ -145,7 +145,7 @@
dir = 8;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"aw" = (
@@ -253,11 +253,11 @@
pixel_x = -24;
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"aG" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stool/padded,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
@@ -335,7 +335,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"aP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
@@ -724,7 +724,7 @@
/turf/floor/usedup,
/area/ship/scrap/maintenance/lower)
"bF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/alarm{
dir = 4;
pixel_x = -24;
@@ -830,7 +830,7 @@
/area/ship/scrap/cargo/lower)
"bQ" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/computer/shuttle_control/lift,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
@@ -1111,7 +1111,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"ct" = (
@@ -1283,7 +1283,7 @@
dir = 8;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"cQ" = (
@@ -1540,16 +1540,16 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"dp" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"dq" = (
/obj/machinery/light/small,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"dr" = (
@@ -1561,7 +1561,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"ds" = (
@@ -1957,7 +1957,7 @@
icon_state = "bulb1"
},
/obj/structure/ladder,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/sign/deck/second{
pixel_y = 32
},
@@ -1973,7 +1973,7 @@
dir = 8;
pixel_x = 22
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/usedup,
/area/ship/scrap/maintenance/storage)
"ej" = (
@@ -1983,7 +1983,7 @@
/turf/floor/usedup,
/area/ship/scrap/maintenance/eva)
"ek" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small{
dir = 1;
icon_state = "bulb1"
@@ -2060,7 +2060,7 @@
/obj/effect/floor_decal/corner/yellow{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -2073,7 +2073,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/storage)
"es" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -2090,7 +2090,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/storage)
"eu" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -2130,7 +2130,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/eva)
"ey" = (
@@ -2306,7 +2306,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/storage)
"eK" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -2319,7 +2319,7 @@
/obj/structure/cable{
icon_state = "5-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/usedup,
/area/ship/scrap/maintenance/storage)
"eM" = (
@@ -2330,14 +2330,14 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/usedup,
/area/ship/scrap/maintenance/eva)
"eN" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/eva)
"eO" = (
@@ -2384,7 +2384,7 @@
/obj/item/stack/tape_roll/duct_tape,
/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty,
/obj/item/stack/material/ingot/mapped/copper/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
/obj/item/stack/material/panel/mapped/plastic/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
diff --git a/maps/away/bearcat/bearcat-2.dmm b/maps/away/bearcat/bearcat-2.dmm
index c167b8ef9e0..b6ad7af5d29 100644
--- a/maps/away/bearcat/bearcat-2.dmm
+++ b/maps/away/bearcat/bearcat-2.dmm
@@ -228,7 +228,7 @@
/obj/machinery/computer/cryopod{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aH" = (
/turf/floor/bluegrid/airless,
@@ -289,7 +289,7 @@
/obj/item/backpack/dufflebag/syndie,
/obj/item/box/ammo/shotgunshells,
/obj/item/handcuffs,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aL" = (
/obj/item/bedsheet/captain,
@@ -297,12 +297,12 @@
/obj/item/gun/projectile/pistol/holdout,
/obj/structure/bed/padded,
/obj/abstract/submap_landmark/spawnpoint/captain,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aM" = (
/obj/item/paper_bin,
/obj/item/pen,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/light_switch{
pixel_y = 25
},
@@ -313,7 +313,7 @@
pixel_x = 24;
req_access = newlist()
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aN" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -393,7 +393,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -402,11 +402,11 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aV" = (
/obj/structure/bed/chair/comfy/brown,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"aW" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -466,7 +466,7 @@
},
/obj/structure/window/reinforced/full,
/obj/structure/table/marble,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"bb" = (
/obj/structure/cable{
@@ -476,10 +476,10 @@
dir = 1;
level = 2
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"bc" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable{
icon_state = "0-8"
},
@@ -490,7 +490,7 @@
/obj/item/chems/drinks/glass2/coffeecup/one,
/obj/item/tank/oxygen,
/obj/item/clothing/mask/breath/emergency,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/scrap/command/captain)
"bd" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -587,7 +587,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/dock)
"bo" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -654,7 +654,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/dock)
"bt" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
@@ -773,7 +773,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -912,7 +912,7 @@
/turf/floor/usedup,
/area/ship/scrap/dock)
"bM" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
@@ -1234,7 +1234,7 @@
dir = 8;
icon_state = "twindow"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/white/diagonal,
/turf/floor/tiled/usedup,
/area/ship/scrap/crew/toilets)
@@ -1554,7 +1554,7 @@
dir = 8;
icon_state = "twindow"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/white/diagonal,
/turf/floor/tiled/usedup,
/area/ship/scrap/crew/toilets)
@@ -1571,7 +1571,7 @@
icon_state = "twindow"
},
/obj/structure/window/reinforced/tinted,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable,
/obj/machinery/power/apc/derelict{
dir = 4;
@@ -1592,7 +1592,7 @@
dir = 8;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4;
icon_state = "conpipe-c"
@@ -1608,7 +1608,7 @@
/turf/wall,
/area/ship/scrap/crew/saloon)
"dn" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -1668,7 +1668,7 @@
dir = 4;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/floor/tiled/usedup,
@@ -1824,13 +1824,13 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"dL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/portable_atmospherics/canister/air,
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"dM" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/floor_decal/corner/beige{
dir = 6
@@ -1940,7 +1940,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/crew/hallway/port)
"dX" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/alarm{
dir = 4;
pixel_x = -24;
@@ -1954,7 +1954,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"dZ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -1973,7 +1973,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"eb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small{
dir = 4;
icon_state = "bulb1"
@@ -2055,7 +2055,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/crew/kitchen)
"ek" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
@@ -2173,7 +2173,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"es" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -2386,7 +2386,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"eJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4;
@@ -2418,7 +2418,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"eM" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable,
/obj/machinery/power/apc/derelict{
dir = 4;
@@ -2568,7 +2568,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"fb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/floor_decal/industrial/warning,
/obj/machinery/computer/shuttle_control/lift,
@@ -2585,7 +2585,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/cargo)
"fd" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/floor_decal/industrial/warning,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -2972,7 +2972,7 @@
/area/ship/scrap/cargo)
"fO" = (
/obj/structure/emergency_dispenser/west,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
@@ -3090,7 +3090,7 @@
dir = 4;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
@@ -3348,7 +3348,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/fire)
"gD" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-8"
},
@@ -3486,7 +3486,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/hallway)
"gO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -3756,8 +3756,8 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/engineering)
"ho" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/radio/intercom{
pixel_y = 20
},
@@ -3792,7 +3792,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/engineering)
"hq" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light_switch{
pixel_y = 25
},
@@ -3962,7 +3962,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stool/padded,
/obj/structure/cable{
icon_state = "1-8"
@@ -3981,7 +3981,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -4058,7 +4058,7 @@
/turf/floor/usedup,
/area/ship/scrap/maintenance/power)
"hM" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/obj/structure/lattice,
/turf/space,
/area/ship/scrap/maintenance/atmos)
@@ -4140,7 +4140,7 @@
/turf/floor/tiled/usedup,
/area/ship/scrap/maintenance/engineering)
"hU" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/yellow{
dir = 10
},
@@ -4542,13 +4542,13 @@
/turf/floor/usedup,
/area/ship/scrap/maintenance/power)
"iO" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/mob/living/simple_animal/hostile/carp,
/turf/space,
/area/ship/scrap/maintenance/atmos)
"iP" = (
/obj/item/stack/material/sheet/mapped/steel,
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/ship/scrap/maintenance/atmos)
"iQ" = (
@@ -4686,7 +4686,7 @@
/turf/floor/usedup,
/area/ship/scrap/maintenance/power)
"jc" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/obj/structure/lattice,
/turf/space,
/area/ship/scrap/maintenance/power)
@@ -4861,7 +4861,7 @@
/turf/wall,
/area/ship/scrap/maintenance/power)
"jB" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/space)
"jC" = (
@@ -4939,7 +4939,7 @@
/area/ship/scrap/maintenance/engine/aft)
"jN" = (
/obj/item/stack/material/sheet/mapped/steel,
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/obj/structure/lattice,
/turf/space,
/area/ship/scrap/maintenance/engine/aft)
@@ -5003,7 +5003,7 @@
/turf/floor/plating/airless,
/area/ship/scrap/maintenance/engine/aft)
"jX" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/ship/scrap/maintenance/engine/aft)
"jY" = (
diff --git a/maps/away/bearcat/bearcat.dm b/maps/away/bearcat/bearcat.dm
index d5a20049ae2..37d26d36b55 100644
--- a/maps/away/bearcat/bearcat.dm
+++ b/maps/away/bearcat/bearcat.dm
@@ -3,11 +3,11 @@
#include "bearcat_access.dm"
/obj/abstract/submap_landmark/joinable_submap/bearcat
- name = "FTV Bearcat"
+ name = "FTV Bearcat"
archetype = /decl/submap_archetype/derelict/bearcat
/decl/submap_archetype/derelict/bearcat
- descriptor = "derelict cargo vessel"
+ name = "derelict cargo vessel"
crew_jobs = list(
/datum/job/submap/bearcat_captain,
/datum/job/submap/bearcat_crewman
@@ -125,9 +125,9 @@
shoes = /obj/item/clothing/shoes/color/black
r_pocket = /obj/item/radio
-/decl/outfit/deadcap/post_equip(mob/living/human/H)
+/decl/outfit/deadcap/post_equip(mob/living/wearer)
..()
- var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/uniform = wearer.get_equipped_item(slot_w_uniform_str)
if(uniform)
var/obj/item/clothing/shirt/hawaii/random/eyegore = new()
if(uniform.can_attach_accessory(eyegore))
@@ -135,4 +135,4 @@
else
qdel(eyegore)
var/obj/item/cell/super/C = new()
- H.put_in_hands(C)
+ wearer.put_in_hands(C)
diff --git a/maps/away/bearcat/bearcat_jobs.dm b/maps/away/bearcat/bearcat_jobs.dm
index b479f141065..dce4ece7f44 100644
--- a/maps/away/bearcat/bearcat_jobs.dm
+++ b/maps/away/bearcat/bearcat_jobs.dm
@@ -35,9 +35,9 @@
pda_type = /obj/item/modular_computer/pda/heads/captain
id_type = /obj/item/card/id/bearcat_captain
-/decl/outfit/job/bearcat/captain/post_equip(var/mob/living/human/H)
+/decl/outfit/job/bearcat/captain/post_equip(var/mob/living/wearer)
..()
- var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/uniform = wearer.get_equipped_item(slot_w_uniform_str)
if(uniform)
var/obj/item/clothing/shirt/hawaii/random/eyegore = new()
if(uniform.can_attach_accessory(eyegore))
diff --git a/maps/away/casino/casino.dm b/maps/away/casino/casino.dm
index 504a513e738..466a76e8666 100644
--- a/maps/away/casino/casino.dm
+++ b/maps/away/casino/casino.dm
@@ -101,7 +101,7 @@
/obj/structure/casino/roulette/attack_hand(mob/user)
- if(user.a_intent == I_HURT || !user.check_dexterity(DEXTERITY_SIMPLE_MACHINES, TRUE))
+ if(user.check_intent(I_FLAG_HARM) || !user.check_dexterity(DEXTERITY_SIMPLE_MACHINES, TRUE))
return ..()
if(busy)
diff --git a/maps/away/casino/casino.dmm b/maps/away/casino/casino.dmm
index b1d54db6ab7..f9fa8619ce6 100644
--- a/maps/away/casino/casino.dmm
+++ b/maps/away/casino/casino.dmm
@@ -152,7 +152,7 @@
/area/casino/casino_bridge)
"aw" = (
/obj/item/wirecutters,
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/space)
"ax" = (
@@ -1293,7 +1293,7 @@
/turf/floor/plating,
/area/casino/casino_storage)
"dQ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigar{
pixel_y = 5
},
@@ -1317,7 +1317,7 @@
/turf/floor/plating,
/area/casino/casino_storage)
"dS" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/toolbox/mechanical,
/obj/item/stack/cable_coil,
/turf/floor/plating,
@@ -2244,7 +2244,7 @@
/turf/floor/tiled,
/area/casino/casino_mainfloor)
"gu" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/clothing/mask/smokable/pipe,
/obj/machinery/light{
dir = 1
@@ -2253,7 +2253,7 @@
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"gv" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigar,
/obj/item/box/fancy/cigar{
pixel_y = 5
@@ -2726,13 +2726,13 @@
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"ia" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/plate,
/obj/item/utensil/fork,
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"ib" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"ic" = (
@@ -2855,13 +2855,13 @@
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"iq" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/plate,
/obj/item/food/applepie,
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"ir" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/plate,
/obj/item/food/bigbiteburger,
/turf/floor/carpet,
@@ -3048,7 +3048,7 @@
/turf/floor/tiled,
/area/casino/casino_kitchen)
"iR" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/plate,
/obj/item/utensil/spoon,
/turf/floor/carpet,
@@ -3385,7 +3385,7 @@
/turf/floor/carpet,
/area/casino/casino_mainfloor)
"jJ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray,
/obj/item/food/cubancarp,
/turf/floor/carpet,
@@ -3463,7 +3463,7 @@
/turf/floor/tiled,
/area/casino/casino_mainfloor)
"jU" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/plate,
/obj/item/food/waffles,
/obj/item/chems/drinks/cans/iced_tea,
@@ -3631,7 +3631,7 @@
/turf/floor/tiled,
/area/casino/casino_mainfloor)
"kt" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pizzabox/meat,
/turf/floor/carpet,
/area/casino/casino_mainfloor)
@@ -3795,7 +3795,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_mainfloor)
"kR" = (
/turf/wall,
@@ -3810,7 +3810,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_mainfloor)
"kT" = (
/turf/wall,
@@ -3825,7 +3825,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_mainfloor)
"kV" = (
/turf/wall,
@@ -3882,7 +3882,7 @@
dir = 5
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lh" = (
/obj/structure/cable{
@@ -3891,7 +3891,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"li" = (
/obj/machinery/light{
@@ -3903,7 +3903,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lj" = (
/obj/machinery/media/jukebox,
@@ -3913,7 +3913,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lk" = (
/obj/structure/flora/pottedplant,
@@ -3929,7 +3929,7 @@
name = "east bump";
pixel_x = 24
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"ll" = (
/obj/structure/cable{
@@ -3939,7 +3939,7 @@
dir = 5
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"lm" = (
/obj/structure/cable{
@@ -3948,7 +3948,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"ln" = (
/obj/machinery/light{
@@ -3960,7 +3960,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"lo" = (
/obj/structure/flora/pottedplant,
@@ -3976,7 +3976,7 @@
name = "east bump";
pixel_x = 24
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"lp" = (
/obj/structure/cable{
@@ -3986,7 +3986,7 @@
dir = 5
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"lq" = (
/obj/structure/cable{
@@ -3995,7 +3995,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"lr" = (
/obj/machinery/light{
@@ -4007,7 +4007,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"ls" = (
/obj/structure/flora/pottedplant,
@@ -4023,7 +4023,7 @@
name = "east bump";
pixel_x = 24
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"lt" = (
/obj/machinery/door/firedoor,
@@ -4104,59 +4104,59 @@
/area/casino/casino_crew_atmos)
"lD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lE" = (
/obj/random/ammo,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lF" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood/splatter,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lG" = (
/obj/effect/decal/cleanable/blood/drip,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lH" = (
/obj/item/trash/cigbutt/professionals,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lI" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lJ" = (
/obj/item/secure_storage/safe{
pixel_x = 30
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"lL" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"lM" = (
/obj/item/secure_storage/safe{
pixel_x = 30
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"lN" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"lO" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"lP" = (
/obj/item/secure_storage/safe{
pixel_x = 25
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"lQ" = (
/obj/structure/cable{
@@ -4216,58 +4216,58 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"lZ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigar{
pixel_y = 5
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"ma" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray,
/obj/random/drinkbottle,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"mb" = (
/obj/structure/bed/chair/comfy/red{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"mc" = (
/obj/machinery/light{
dir = 4;
icon_state = "tube1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"md" = (
/obj/structure/bed/chair/comfy/red,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"me" = (
/obj/machinery/light{
dir = 4;
icon_state = "tube1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"mf" = (
/obj/structure/bed/chair/comfy/red,
/obj/item/flame/fuelled/lighter/zippo/random,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"mg" = (
/obj/machinery/light{
dir = 4;
icon_state = "tube1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"mi" = (
/obj/structure/cable{
@@ -4281,7 +4281,7 @@
/turf/floor/tiled/white,
/area/casino/casino_patron_bathroom)
"mj" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/drinks/bottle/agedwhiskey,
/obj/item/clothing/mask/smokable/cigarette/cigar/havana,
/obj/item/clothing/mask/smokable/cigarette/cigar/havana,
@@ -4325,66 +4325,66 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"mq" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/drinkbottle,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"mr" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood,
+/obj/structure/table/laminate,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"ms" = (
/obj/structure/bed/chair/comfy/red{
dir = 8
},
/obj/item/bag/cash,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"mt" = (
/obj/structure/bed,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private_vip)
"mu" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/drinkbottle,
/obj/random/coin,
/obj/random/coin,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"mv" = (
/obj/structure/bed/chair/comfy/red{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"mw" = (
/obj/structure/bed,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private1)
"mx" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/drinkbottle,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"my" = (
/obj/structure/bed/chair/comfy/red{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"mz" = (
/obj/structure/bed,
/obj/random/coin,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/casino/casino_private2)
"mB" = (
/obj/random/coin,
diff --git a/maps/away/errant_pisces/errant_pisces.dm b/maps/away/errant_pisces/errant_pisces.dm
index 97f8bcff3e7..ba006dddf06 100644
--- a/maps/away/errant_pisces/errant_pisces.dm
+++ b/maps/away/errant_pisces/errant_pisces.dm
@@ -66,7 +66,7 @@
/obj/item/food/butchery/meat/fish/shark
desc = "A fillet of cosmoshark meat."
- meat_name = "cosmoshark"
+ butchery_data = /decl/butchery_data/animal/fish/space_carp/shark
color = "#cecece"
center_of_mass = @'{"x":17,"y":13}'
bitesize = 8
@@ -112,9 +112,9 @@
return SPAN_NOTICE("A few strands of \the [src] have been severed.")
/obj/structure/net/attackby(obj/item/W, mob/user)
- if(W.sharp || W.edge)
- var/force = W.get_attack_force(user)
- if (!(W.sharp) || (W.sharp && force < 10))//is not sharp enough or at all
+ if(W.is_sharp() || W.has_edge())
+ var/force = W.expend_attack_force(user)
+ if (!(W.is_sharp()) || (W.is_sharp() && force < 10))//is not sharp enough or at all
to_chat(user,"You can't cut through \the [src] with \the [W], it's too dull.")
return TRUE
visible_message("[user] starts to cut through \the [src] with \the [W]!")
diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm
index 7e62686eb0d..df04d63c3a7 100644
--- a/maps/away/errant_pisces/errant_pisces.dmm
+++ b/maps/away/errant_pisces/errant_pisces.dmm
@@ -2525,27 +2525,27 @@
"gp" = (
/obj/structure/bed/padded,
/obj/item/bedsheet/rainbow,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gq" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gr" = (
/obj/machinery/computer/modular{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gs" = (
/obj/structure/bed/padded,
/obj/item/bedsheet/orange,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gt" = (
/obj/structure/bed/chair/comfy/brown{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gu" = (
/obj/machinery/light{
@@ -2553,20 +2553,20 @@
icon_state = "tube1"
},
/obj/machinery/media/jukebox,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gv" = (
/obj/structure/bed/chair/comfy/brown{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gw" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_pump/on{
level = 2
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gx" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -2664,17 +2664,17 @@
dir = 8;
icon_state = "tube1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gM" = (
/mob/living/simple_animal/hostile/carp/shark,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gN" = (
/obj/structure/closet/cabinet,
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/suit/armor/vest,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gO" = (
/obj/structure/bed/chair/comfy/teal,
@@ -2682,23 +2682,23 @@
dir = 8;
icon_state = "tube1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gP" = (
/obj/structure/filing_cabinet/chestdrawer,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gQ" = (
/obj/structure/table/gamblingtable,
/obj/item/deck/cards,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gR" = (
/obj/structure/bed/chair/comfy/brown{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"gS" = (
/obj/structure/cable/green{
@@ -2742,37 +2742,37 @@
/turf/floor/tiled,
/area/errant_pisces/dorms)
"gZ" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood,
+/obj/structure/table/laminate,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"ha" = (
/obj/structure/closet,
/obj/random/smokes,
/obj/random/projectile,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hb" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/flashlight/lamp,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hc" = (
/obj/structure/closet,
/obj/random/snack,
/obj/random/tool,
/obj/random/suit,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hd" = (
/obj/structure/table/gamblingtable,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"he" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray,
/obj/random/smokes,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hf" = (
/obj/structure/cable/green{
@@ -2784,7 +2784,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hg" = (
/obj/machinery/door/airlock,
@@ -2884,12 +2884,12 @@
/area/errant_pisces/infirmary)
"hr" = (
/obj/machinery/door/airlock,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hs" = (
/obj/abstract/landmark/corpse/bridgeofficer,
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"ht" = (
/obj/structure/bed/chair/comfy/brown,
@@ -2897,7 +2897,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hu" = (
/obj/machinery/vending/coffee,
@@ -2916,14 +2916,14 @@
/area/errant_pisces/dorms)
"hx" = (
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hy" = (
/obj/machinery/light{
dir = 1;
icon_state = "tube1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hz" = (
/obj/machinery/alarm{
@@ -2934,20 +2934,20 @@
/obj/structure/bed/chair/comfy/brown{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hA" = (
/obj/machinery/power/apc{
name = "south bump";
pixel_y = -24
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/smokes,
/obj/structure/cable/green,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/rooms)
"hB" = (
/obj/machinery/vending/games,
@@ -5670,14 +5670,14 @@
/area/errant_pisces/bridge)
"oV" = (
/obj/machinery/door/airlock,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"oW" = (
/obj/machinery/alarm{
alarm_id = "xenobio1_alarm";
pixel_y = 24
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"oX" = (
/obj/machinery/light{
@@ -5689,13 +5689,13 @@
/obj/random/ammo,
/obj/random/cash,
/obj/random/cash,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"oY" = (
/obj/machinery/computer/modular{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"oZ" = (
/obj/machinery/vending/medical{
@@ -5775,17 +5775,17 @@
/turf/floor/tiled,
/area/errant_pisces/bridge)
"pl" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"pm" = (
/obj/structure/bed/chair/office/light{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"pn" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood,
+/obj/structure/table/laminate,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"po" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -5867,12 +5867,12 @@
/area/errant_pisces/bridge)
"pB" = (
/obj/structure/bookcase/manuals/engineering,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"pC" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/toy,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"pD" = (
/obj/machinery/light/small{
@@ -5933,7 +5933,7 @@
/area/errant_pisces/bridge)
"pN" = (
/obj/structure/curtain/open/bed,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"pO" = (
/obj/structure/hygiene/shower{
@@ -6093,7 +6093,7 @@
"qi" = (
/obj/item/bedsheet/captain,
/obj/structure/bed/padded,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/errant_pisces/bridge)
"qj" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
diff --git a/maps/away/liberia/hud.dmi b/maps/away/liberia/hud.dmi
new file mode 100644
index 00000000000..01fe4cbfcd4
Binary files /dev/null and b/maps/away/liberia/hud.dmi differ
diff --git a/maps/away/liberia/liberia.dmm b/maps/away/liberia/liberia.dmm
index 35999ef09ff..fee5cdfb47d 100644
--- a/maps/away/liberia/liberia.dmm
+++ b/maps/away/liberia/liberia.dmm
@@ -869,7 +869,7 @@
/obj/structure/cable/blue{
icon_state = "1-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"bH" = (
/obj/machinery/door/firedoor,
@@ -1095,7 +1095,7 @@
pixel_x = -6;
pixel_y = 28
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
id_tag = "merchant_ship_vent"
},
@@ -1162,7 +1162,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/mule)
"cg" = (
/obj/machinery/door/airlock/hatch{
@@ -1178,7 +1178,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/mule)
"ch" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -1529,7 +1529,7 @@
/obj/machinery/computer/ship/sensors{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/mule)
"cN" = (
/obj/effect/paint/silver,
@@ -1656,7 +1656,7 @@
/turf/floor/tiled/techfloor,
/area/liberia/engineeringengines)
"cZ" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/machinery/chemical_dispenser/bar_coffee{
dir = 1
},
@@ -2340,8 +2340,8 @@
/obj/item/stack/material/pane/mapped/glass/fifty,
/obj/item/stack/material/pane/mapped/glass/fifty,
/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/sheet/reinforced/mapped/plasteel/forty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
@@ -3215,7 +3215,7 @@
dir = 1;
pixel_y = -24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"fI" = (
/obj/structure/closet/emcloset,
@@ -3301,7 +3301,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/turf/floor/carpet,
/area/liberia/bar)
@@ -3322,15 +3322,15 @@
pixel_y = 24
},
/obj/abstract/submap_landmark/spawnpoint/liberia,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"fS" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"fT" = (
/obj/structure/bed/chair/wood/walnut{
@@ -3345,29 +3345,29 @@
icon_state = "0-2"
},
/obj/abstract/submap_landmark/spawnpoint/liberia,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"fU" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/random/drinkbottle,
/obj/random/drinkbottle,
/obj/structure/window/reinforced{
dir = 8
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"fV" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/machinery/chemical_dispenser/bar_soft/full,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"fW" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/machinery/light{
dir = 4
},
/obj/machinery/chemical_dispenser/bar_alc/full,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"fX" = (
/obj/effect/floor_decal/techfloor{
@@ -3486,7 +3486,7 @@
/area/liberia/bar)
"gg" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/deck/cards,
/turf/floor/carpet,
/area/liberia/bar)
@@ -3500,22 +3500,22 @@
/turf/floor/carpet,
/area/liberia/bar)
"gi" = (
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gj" = (
/obj/structure/bed/chair/wood/walnut,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/abstract/submap_landmark/spawnpoint/liberia,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gk" = (
/obj/machinery/door/window/westright,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gl" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/box/glasses/pint,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gm" = (
/obj/structure/extinguisher_cabinet{
@@ -3610,7 +3610,7 @@
/obj/structure/cable/blue{
icon_state = "2-4"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gv" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -3621,7 +3621,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gw" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -3637,10 +3637,10 @@
/obj/structure/cable/blue{
icon_state = "1-2"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gx" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/structure/window/reinforced{
dir = 8
},
@@ -3650,10 +3650,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gy" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/ashtray/glass,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -3662,10 +3662,10 @@
dir = 4
},
/obj/item/clothing/mask/smokable/cigarette/cigar/havana,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gz" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/chems/glass/rag,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -3676,7 +3676,7 @@
/obj/structure/disposalpipe/segment/bent{
dir = 4
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -3833,7 +3833,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"gN" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3842,7 +3842,7 @@
/obj/machinery/light_switch{
pixel_y = 24
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"gO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3859,7 +3859,7 @@
/obj/structure/cable/blue{
icon_state = "0-2"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"gP" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -3874,7 +3874,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"gQ" = (
/obj/machinery/door/airlock{
@@ -3896,7 +3896,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"gR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -3909,7 +3909,7 @@
icon_state = "4-8"
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"gS" = (
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
@@ -3922,7 +3922,7 @@
/obj/structure/cable/blue{
icon_state = "2-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"gT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3934,7 +3934,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"gU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3947,7 +3947,7 @@
/obj/structure/cable/blue{
icon_state = "1-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"gW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3955,7 +3955,7 @@
/obj/structure/cable/blue{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"gX" = (
/obj/item/stool/padded,
@@ -3963,20 +3963,20 @@
dir = 10
},
/obj/abstract/submap_landmark/spawnpoint/liberia,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gY" = (
/obj/item/stool/padded,
/obj/effect/floor_decal/spline/plain/brown,
/obj/abstract/submap_landmark/spawnpoint/liberia,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"gZ" = (
/obj/item/stool/padded,
/obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/spline/plain/brown,
/obj/abstract/submap_landmark/spawnpoint/liberia,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"ha" = (
/obj/machinery/door/airlock/glass{
@@ -3986,7 +3986,7 @@
/obj/structure/cable/blue{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"hb" = (
/obj/machinery/light/small{
@@ -4039,14 +4039,14 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"hh" = (
/obj/effect/floor_decal/spline/plain/brown,
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"hi" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -4054,7 +4054,7 @@
dir = 4
},
/obj/effect/floor_decal/spline/plain/brown,
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"hj" = (
/obj/machinery/door/airlock{
@@ -4067,18 +4067,18 @@
/obj/structure/cable/blue{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/personellroom2)
"hk" = (
/obj/machinery/media/jukebox/old,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"hl" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"hm" = (
/obj/structure/window/reinforced{
@@ -4184,43 +4184,43 @@
/obj/structure/disposalpipe/trunk{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"hz" = (
/obj/machinery/vending/cigarette{
dir = 1;
products = list(/obj/item/box/fancy/cigarettes=10,/obj/item/box/matches=10,/obj/item/flame/fuelled/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2)
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"hA" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/scanner/price,
/obj/item/scanner/price,
/obj/machinery/light/small,
/obj/item/scanner/price,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"hB" = (
/obj/machinery/pipelayer,
/turf/floor/tiled/techfloor/grid,
/area/liberia/engineeringreactor)
"hC" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/ashtray,
/obj/item/box/matches,
/obj/random/smokes,
/turf/floor/carpet/red,
/area/liberia/captain)
"hD" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/mob/living/simple_animal/tindalos{
name = "Eddy"
},
/turf/floor/carpet/red,
/area/liberia/captain)
"hE" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/turf/floor/carpet/red,
/area/liberia/captain)
@@ -4257,7 +4257,7 @@
/turf/floor/carpet,
/area/liberia/personellroom2)
"hI" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
@@ -4312,7 +4312,7 @@
/turf/floor/tiled/techfloor/grid,
/area/liberia/merchantstorage)
"hN" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/random/action_figure,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
@@ -5100,11 +5100,11 @@
/obj/machinery/light/small{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"jO" = (
/obj/structure/bookcase/skill_books/random,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"jP" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -5178,7 +5178,7 @@
/turf/floor/carpet,
/area/liberia/library)
"jX" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/lava/orange,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
@@ -5186,7 +5186,7 @@
/turf/floor/carpet,
/area/liberia/library)
"jY" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/structure/flora/pottedplant/deskleaf{
pixel_x = -5;
pixel_y = 2
@@ -5222,7 +5222,7 @@
/turf/floor/carpet/magenta,
/area/liberia/guestroom2)
"ka" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/structure/flora/pottedplant/smallcactus{
pixel_x = -5;
pixel_y = 9
@@ -5246,7 +5246,7 @@
/turf/floor/carpet,
/area/liberia/library)
"kc" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/box/fancy/donut,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
@@ -5288,7 +5288,7 @@
/obj/structure/disposalpipe/segment/bent{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"ki" = (
/obj/machinery/newscaster{
@@ -5301,7 +5301,7 @@
/obj/structure/disposalpipe/segment/bent{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"kk" = (
/obj/effect/floor_decal/techfloor{
@@ -5424,7 +5424,7 @@
/turf/floor/carpet,
/area/liberia/library)
"kr" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/modular_computer/laptop/preset/custom_loadout/standard{
dir = 8
},
@@ -5472,7 +5472,7 @@
/turf/floor/carpet,
/area/liberia/library)
"ky" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/effect/floor_decal/spline/fancy/wood,
/obj/machinery/power/apc/liberia{
name = "south bump";
@@ -5482,7 +5482,7 @@
/turf/floor/carpet,
/area/liberia/library)
"kz" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/pen,
/obj/machinery/light/small{
@@ -5774,7 +5774,7 @@
pixel_x = -28;
pixel_y = -10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/obj/structure/cable/blue{
icon_state = "1-4"
@@ -6032,7 +6032,7 @@
/turf/floor/carpet/green,
/area/liberia/guestroom1)
"lB" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"lC" = (
/obj/effect/floor_decal/corner_techfloor_grid{
@@ -6121,7 +6121,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"mu" = (
/obj/effect/floor_decal/techfloor{
@@ -6188,7 +6188,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"ns" = (
/obj/structure/cable/blue{
@@ -6231,7 +6231,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"op" = (
/obj/structure/railing/mapped,
@@ -6241,7 +6241,7 @@
/turf/floor/tiled/techfloor/grid,
/area/liberia/merchantstorage)
"os" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/effect/floor_decal/spline/fancy/wood,
/turf/floor/carpet/red,
/area/liberia/traidingroom)
@@ -6421,7 +6421,7 @@
/turf/floor/tiled/techfloor,
/area/liberia/cryo)
"pZ" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/machinery/fabricator/micro/bartender{
pixel_x = 4
},
@@ -6743,7 +6743,7 @@
/obj/structure/disposalpipe/trunk{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"sY" = (
/obj/item/stack/material/panel/mapped/plastic/ten{
@@ -6757,7 +6757,7 @@
pixel_x = 4;
pixel_y = -4
},
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
@@ -6888,7 +6888,7 @@
/obj/structure/cable/blue{
icon_state = "1-2"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/bar)
"wq" = (
/obj/machinery/door/airlock/external{
@@ -7019,7 +7019,7 @@
/obj/machinery/light_switch{
pixel_y = 24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"yC" = (
/obj/effect/floor_decal/techfloor{
@@ -7120,7 +7120,7 @@
/turf/wall/r_wall/prepainted,
/area/liberia/captain)
"Af" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/effect/floor_decal/borderfloor{
dir = 10
},
@@ -7228,7 +7228,7 @@
/turf/floor/tiled/steel_grid,
/area/liberia/atmos)
"BH" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"BJ" = (
/turf/wall/prepainted,
@@ -7255,7 +7255,7 @@
dir = 8;
pixel_x = 24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"DI" = (
/turf/wall/prepainted,
@@ -7523,8 +7523,8 @@
/obj/structure/closet/crate,
/obj/item/stack/material/sheet/mapped/steel/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/panel/mapped/plastic/fifty,
/obj/item/stack/material/sheet/reinforced/mapped/titanium/fifty,
/obj/item/stack/material/sheet/reinforced/mapped/ocp/fifty,
@@ -7570,7 +7570,7 @@
/obj/structure/cable/blue{
icon_state = "1-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/bar)
"Hv" = (
/turf/wall/prepainted,
@@ -7748,7 +7748,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/turf/floor/carpet/blue,
/area/liberia/personellroom1)
"Kh" = (
@@ -7862,7 +7862,7 @@
/turf/wall/r_wall/prepainted,
/area/liberia/officeroom)
"Ml" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/ashtray/glass,
/obj/effect/floor_decal/borderfloor{
dir = 6
@@ -7945,7 +7945,7 @@
/obj/structure/cable/blue{
icon_state = "2-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"Od" = (
/turf/wall/prepainted,
@@ -8106,7 +8106,7 @@
/turf/floor/tiled/techfloor,
/area/liberia/merchantstorage)
"QK" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/effect/floor_decal/borderfloor,
/obj/effect/floor_decal/corner/green{
dir = 5
@@ -8150,7 +8150,7 @@
/area/liberia/merchantstorage)
"RO" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"Sa" = (
/turf/wall/prepainted,
@@ -8160,7 +8160,7 @@
/obj/structure/cable/blue{
icon_state = "1-8"
},
-/turf/floor/wood/ebony,
+/turf/floor/laminate/ebony,
/area/liberia/captain)
"Se" = (
/turf/wall/r_wall/prepainted,
@@ -8237,7 +8237,7 @@
/obj/structure/disposalpipe/segment/bent{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"Tz" = (
/obj/machinery/door/airlock,
@@ -8306,7 +8306,7 @@
/obj/structure/cable/blue{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"Uh" = (
/turf/wall/r_wall/prepainted,
@@ -8402,7 +8402,7 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/liberia/library)
"Wn" = (
/obj/effect/floor_decal/borderfloor{
@@ -8512,7 +8512,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 10
},
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/turf/floor/carpet/blue,
/area/liberia/personellroom1)
diff --git a/maps/away/liberia/liberia_jobs.dm b/maps/away/liberia/liberia_jobs.dm
index 72d4d2ddbb2..34269ce2cd3 100644
--- a/maps/away/liberia/liberia_jobs.dm
+++ b/maps/away/liberia/liberia_jobs.dm
@@ -1,6 +1,6 @@
// Submap datum and archetype.
/decl/submap_archetype/liberia
- descriptor = "merchant ship"
+ name = "merchant ship"
crew_jobs = list(
/datum/job/submap/merchant
)
@@ -11,7 +11,8 @@
info = "You are free traders who have drifted into unknown distances in search of profit. Travel, trade, make profit!"
supervisors = "the invisible hand of the market"
selection_color = "#515151"
-
+ hud_icon = 'maps/away/liberia/hud.dmi'
+ hud_icon_state = "hudmerchant"
ideal_character_age = 20
minimal_player_age = 7
diff --git a/maps/away/lost_supply_base/lost_supply_base.dmm b/maps/away/lost_supply_base/lost_supply_base.dmm
index 94c58cd1b3f..55d86201533 100644
--- a/maps/away/lost_supply_base/lost_supply_base.dmm
+++ b/maps/away/lost_supply_base/lost_supply_base.dmm
@@ -117,14 +117,14 @@
/turf/floor/plating/airless,
/area/space)
"aq" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/space)
"ar" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/sheet/mapped/steel,
/turf/floor/plating/airless,
/area/space)
@@ -760,7 +760,7 @@
/turf/floor/plating/airless,
/area/lost_supply_base)
"cf" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/obj/item/stack/material/sheet/mapped/steel,
/turf/floor/plating/airless,
/area/lost_supply_base)
@@ -1982,7 +1982,7 @@
/turf/unsimulated/mask,
/area/mine/unexplored)
"gu" = (
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"ib" = (
/obj/structure/hygiene/sink{
diff --git a/maps/away/magshield/magshield.dmm b/maps/away/magshield/magshield.dmm
index d6e4edc107a..de625ae9346 100644
--- a/maps/away/magshield/magshield.dmm
+++ b/maps/away/magshield/magshield.dmm
@@ -106,7 +106,7 @@
/turf/floor/plating/airless,
/area/space)
"ao" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/space)
"ap" = (
@@ -529,7 +529,7 @@
/turf/space,
/area/magshield/smes_storage)
"bF" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/magshield/smes_storage)
"bG" = (
@@ -1265,7 +1265,7 @@
/turf/floor/plating/airless,
/area/magshield/north)
"dF" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/floor/plating/airless,
/area/magshield/north)
"dG" = (
@@ -2268,7 +2268,7 @@
/turf/floor/carpet/blue,
/area/magshield/west)
"gH" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 10
},
/obj/item/box/checkers,
@@ -2278,20 +2278,20 @@
/turf/floor/carpet/blue,
/area/magshield/west)
"gI" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 10
},
/obj/item/belt/champion,
/turf/floor/carpet/blue,
/area/magshield/west)
"gJ" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 10
},
/turf/floor/carpet/blue,
/area/magshield/west)
"gK" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 10
},
/obj/item/bible/booze,
@@ -2385,7 +2385,7 @@
/turf/floor/tiled,
/area/magshield/west)
"gY" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/action_figure,
/turf/floor/tiled,
/area/magshield/west)
@@ -2483,7 +2483,7 @@
/turf/floor/tiled,
/area/magshield/west)
"hn" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/sword/replica,
/turf/floor/tiled,
/area/magshield/west)
@@ -2523,7 +2523,7 @@
/turf/floor/plating/airless,
/area/space)
"hw" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/plushie/large,
/turf/floor/tiled,
/area/magshield/west)
@@ -2565,7 +2565,7 @@
/turf/floor/tiled,
/area/magshield/west)
"hC" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/toy/shipmodel,
/turf/floor/tiled,
/area/magshield/west)
@@ -2614,7 +2614,7 @@
/turf/floor/carpet/blue,
/area/magshield/west)
"hK" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/manual/supermatter_engine,
/turf/floor/carpet/blue,
/area/magshield/west)
@@ -2665,7 +2665,7 @@
/turf/floor/carpet/blue,
/area/magshield/west)
"hT" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/manual/evaguide,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -2727,7 +2727,7 @@
/turf/floor/tiled,
/area/magshield/west)
"hZ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/accessory,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -2735,7 +2735,7 @@
/turf/floor/carpet/blue,
/area/magshield/west)
"ia" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flame/fuelled/lighter/zippo/random,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -2743,18 +2743,18 @@
/turf/floor/carpet/blue,
/area/magshield/west)
"ib" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray,
/obj/random/smokes,
/obj/machinery/light,
/turf/floor/carpet/blue,
/area/magshield/west)
"ic" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/floor/tiled/dark,
/area/magshield/west)
"id" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/magshield/west)
"ie" = (
@@ -3769,7 +3769,7 @@
/turf/floor/tiled,
/area/magshield/south)
"lg" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/magshield/south)
"lh" = (
diff --git a/maps/away/mining/mining-asteroid.dmm b/maps/away/mining/mining-asteroid.dmm
index 63713ba4434..89a0612365c 100644
--- a/maps/away/mining/mining-asteroid.dmm
+++ b/maps/away/mining/mining-asteroid.dmm
@@ -6,14 +6,14 @@
/turf/unsimulated/mask,
/area/mine/unexplored)
"af" = (
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"aj" = (
/turf/wall/r_wall,
/area/djstation)
"ak" = (
/obj/random/junk,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"al" = (
/obj/random/trash,
@@ -204,15 +204,15 @@
/area/djstation)
"be" = (
/obj/random/maintenance,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"bf" = (
/obj/effect/overmap/visitable/sector/cluster,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"cb" = (
/obj/effect/shuttle_landmark/cluster/nav5,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"db" = (
/obj/effect/shuttle_landmark/cluster/nav6,
@@ -236,7 +236,7 @@
/area/space)
"ib" = (
/obj/effect/shuttle_landmark/cluster/nav7,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"jb" = (
/obj/machinery/button/access/exterior{
@@ -245,7 +245,7 @@
pixel_y = -24;
dir = 1
},
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"kb" = (
/obj/machinery/door/airlock/external{
@@ -345,7 +345,7 @@
req_access = null;
dir = 4
},
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"wb" = (
/obj/machinery/door/airlock/external{
diff --git a/maps/away/mining/mining-orb.dmm b/maps/away/mining/mining-orb.dmm
index 0f03154da5c..46fc8c21fb4 100644
--- a/maps/away/mining/mining-orb.dmm
+++ b/maps/away/mining/mining-orb.dmm
@@ -14,10 +14,10 @@
/turf/unsimulated/mask,
/area/mine/unexplored)
"ae" = (
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"af" = (
-/turf/floor,
+/turf/floor/barren,
/area/mine/unexplored)
"ag" = (
/turf/wall/natural/random/high_chance,
@@ -250,7 +250,7 @@
/area/mine/explored)
"st" = (
/obj/effect/shuttle_landmark/orb/nav7,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"vc" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -277,7 +277,7 @@
/obj/effect/floor_decal/spline/fancy/wood/corner{
dir = 4
},
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"Aj" = (
/obj/effect/floor_decal/spline/fancy/wood/corner,
diff --git a/maps/away/mining/mining-signal.dmm b/maps/away/mining/mining-signal.dmm
index 9876407c368..867c49b5614 100644
--- a/maps/away/mining/mining-signal.dmm
+++ b/maps/away/mining/mining-signal.dmm
@@ -339,22 +339,22 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bt" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/purple{
dir = 5
},
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bu" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/purple{
dir = 5
},
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small{
dir = 1
},
@@ -377,7 +377,7 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"by" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor,
/area/outpost/abandoned)
"bz" = (
@@ -407,7 +407,7 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bB" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/noticeboard/anomaly{
default_pixel_y = 32
},
@@ -420,22 +420,22 @@
/obj/effect/floor_decal/corner/purple{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bD" = (
/obj/machinery/light/small{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor,
/area/outpost/abandoned)
"bE" = (
/obj/effect/floor_decal/corner/purple{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bF" = (
@@ -459,13 +459,13 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bI" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/cigbutt/cigarbutt,
/turf/floor,
/area/outpost/abandoned)
"bJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bK" = (
@@ -473,8 +473,8 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bL" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bM" = (
@@ -482,7 +482,7 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bN" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/blood,
/turf/floor/tiled/white,
/area/outpost/abandoned)
@@ -497,14 +497,14 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bQ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/purple{
dir = 10
},
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bR" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small,
/turf/floor,
/area/outpost/abandoned)
@@ -525,7 +525,7 @@
/obj/effect/floor_decal/corner/purple{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/outpost/abandoned)
"bV" = (
@@ -570,7 +570,7 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cc" = (
@@ -582,7 +582,7 @@
dir = 1;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cd" = (
@@ -590,8 +590,8 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"ce" = (
@@ -604,7 +604,7 @@
/obj/effect/floor_decal/corner/red/three_quarters{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/ammo_casing/pistol/magnum,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
@@ -612,7 +612,7 @@
/obj/effect/floor_decal/corner/red{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/ammo_casing/pistol/magnum,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
@@ -632,8 +632,8 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"ck" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor,
/area/outpost/abandoned)
"cl" = (
@@ -657,43 +657,43 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cn" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/broken/three,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/broken/three,
/area/outpost/abandoned)
"co" = (
-/obj/structure/table/woodentable,
-/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/laminate,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cp" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/board,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cq" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/loot,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cr" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/broken/two,
+/turf/floor/laminate/broken/two,
/area/outpost/abandoned)
"cs" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate,
/area/outpost/abandoned)
"ct" = (
/obj/machinery/door/airlock/centcom,
@@ -710,13 +710,13 @@
/area/outpost/abandoned)
"cv" = (
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cw" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cx" = (
@@ -730,50 +730,50 @@
/turf/wall/titanium,
/area/outpost/abandoned)
"cG" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/wall/titanium,
/area/outpost/abandoned)
"cH" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cI" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cJ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/broken/four,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/broken/four,
/area/outpost/abandoned)
"cK" = (
/obj/effect/floor_decal/plaque,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
-/turf/floor/wood/broken,
+/turf/floor/laminate/broken,
/area/outpost/abandoned)
"cM" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/outpost/abandoned)
"cN" = (
/obj/structure/filing_cabinet/tall,
/turf/floor/carpet/blue,
/area/outpost/abandoned)
"cO" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/loot,
/turf/floor/carpet/blue,
/area/outpost/abandoned)
@@ -801,19 +801,19 @@
/area/outpost/abandoned)
"cU" = (
/obj/effect/floor_decal/corner/paleblue/three_quarters,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cV" = (
/obj/effect/floor_decal/corner/paleblue{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cW" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cX" = (
@@ -821,7 +821,7 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/loot,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
@@ -829,12 +829,12 @@
/obj/effect/floor_decal/corner/paleblue/three_quarters{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"cZ" = (
/obj/effect/floor_decal/corner/red/three_quarters,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"da" = (
@@ -844,7 +844,7 @@
/obj/effect/floor_decal/corner/red{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"db" = (
@@ -866,7 +866,7 @@
/area/outpost/abandoned)
"dd" = (
/obj/structure/barricade,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor,
/area/outpost/abandoned)
"de" = (
@@ -889,7 +889,7 @@
/area/outpost/abandoned)
"df" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/door/blast/regular{
id_tag = "mars_blast"
},
@@ -899,31 +899,31 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet,
/area/outpost/abandoned)
"dh" = (
/turf/floor/carpet/broken,
/area/outpost/abandoned)
"di" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet/broken,
/area/outpost/abandoned)
"dj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet,
/area/outpost/abandoned)
"dk" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet/broken,
/area/outpost/abandoned)
"dl" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet,
/area/outpost/abandoned)
"dm" = (
@@ -975,13 +975,13 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 10
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/loot,
/turf/floor/carpet,
/area/outpost/abandoned)
"dx" = (
/obj/effect/floor_decal/spline/fancy/wood,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet,
/area/outpost/abandoned)
"dy" = (
@@ -994,7 +994,7 @@
/area/outpost/abandoned)
"dz" = (
/obj/effect/floor_decal/spline/fancy/wood,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/loot,
/turf/floor/carpet/broken,
/area/outpost/abandoned)
@@ -1002,7 +1002,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet,
/area/outpost/abandoned)
"dC" = (
@@ -1021,7 +1021,7 @@
/obj/item/shard{
icon_state = "shardlarge"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"dF" = (
@@ -1032,7 +1032,7 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"dG" = (
@@ -1100,7 +1100,7 @@
/turf/wall/titanium,
/area/outpost/abandoned)
"dR" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
icon_state = "solid_flip0"
},
/turf/floor/carpet/blue,
@@ -1121,16 +1121,16 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"dV" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating/broken,
/area/outpost/abandoned)
"dW" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"dY" = (
@@ -1143,7 +1143,7 @@
dir = 4;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"dZ" = (
@@ -1154,18 +1154,18 @@
/turf/wall/titanium,
/area/outpost/abandoned)
"ea" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/mapped_fluid/fuel,
/obj/abstract/landmark/mapped_fluid/fuel,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"eb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/mop,
/turf/floor/plating/broken/two,
/area/outpost/abandoned)
"ec" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/mapped_fluid/fuel,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
@@ -1199,7 +1199,7 @@
/turf/floor/barren,
/area/mine/explored)
"ej" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/barren,
/area/mine/explored)
"ek" = (
@@ -1244,13 +1244,13 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"es" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"et" = (
@@ -1260,15 +1260,15 @@
dir = 1
},
/obj/item/shard,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"eu" = (
/obj/abstract/landmark/mapped_fluid/fuel,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/mob/living/bot/medbot,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
@@ -1289,13 +1289,13 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"ez" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating/broken/one,
/area/outpost/abandoned)
"eA" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/gibspawner/human,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
@@ -1322,7 +1322,7 @@
/area/outpost/abandoned)
"eF" = (
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
@@ -1340,7 +1340,7 @@
/turf/floor/plating,
/area/outpost/abandoned)
"eI" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/door/airlock/external,
/turf/floor/plating,
/area/outpost/abandoned)
@@ -1348,27 +1348,27 @@
/obj/item/shard{
icon_state = "shardsmall"
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"eK" = (
/obj/item/shard{
icon_state = "piecesmall"
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"eL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"eM" = (
/obj/effect/floor_decal/corner/paleblue{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"eO" = (
@@ -1381,7 +1381,7 @@
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"eP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating/broken/four,
/area/outpost/abandoned)
"eQ" = (
@@ -1423,15 +1423,15 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"eV" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
/turf/floor/plating/broken/one,
/area/outpost/abandoned)
"eW" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/mapped_fluid/fuel,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
@@ -1439,9 +1439,9 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"eX" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/generic,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
@@ -1449,8 +1449,8 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"eY" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/wrench,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
@@ -1458,7 +1458,7 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"eZ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
@@ -1472,7 +1472,7 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"fb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
@@ -1481,7 +1481,7 @@
/turf/floor/plating/broken/one,
/area/outpost/abandoned)
"fc" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/blood,
/obj/item/ammo_magazine/pistol/small,
/turf/floor/tiled/airless,
@@ -1495,25 +1495,25 @@
/turf/floor/tiled/airless,
/area/mine/explored)
"ff" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
/turf/floor/barren,
/area/mine/explored)
"fg" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning/cee,
/turf/floor/plating,
/area/outpost/abandoned)
"fh" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"fi" = (
/obj/item/pen,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"fj" = (
@@ -1539,8 +1539,8 @@
/area/outpost/abandoned)
"fo" = (
/obj/random/medical,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"fq" = (
@@ -1560,33 +1560,33 @@
/turf/floor/fake_grass,
/area/outpost/abandoned)
"fs" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/vomit/mapped,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"ft" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/medical,
/turf/floor/plating/broken/four,
/area/outpost/abandoned)
"fu" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/mopbucket,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"fv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/remains,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"fw" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/floor/plating/broken/one,
/area/outpost/abandoned)
"fx" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/ammo_magazine/pistol/small,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
@@ -1638,8 +1638,8 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"fG" = (
@@ -1647,8 +1647,8 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"fH" = (
@@ -1659,7 +1659,7 @@
/turf/floor/fake_grass,
/area/outpost/abandoned)
"fJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/window/basic{
dir = 4
},
@@ -1695,7 +1695,7 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"fO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
dir = 4;
icon_state = "0-2"
@@ -1707,7 +1707,7 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"fP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small/emergency,
/obj/structure/cable{
dir = 4;
@@ -1720,7 +1720,7 @@
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"fR" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/mine/explored)
"fS" = (
@@ -1729,7 +1729,7 @@
/turf/floor/tiled/dark,
/area/outpost/abandoned)
"fT" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/firealarm{
dir = 1;
icon_state = "firex";
@@ -1783,7 +1783,7 @@
/obj/structure/bed/chair{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"gb" = (
@@ -1791,7 +1791,7 @@
/area/mine/explored)
"gc" = (
/obj/item/solar_assembly,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/barren,
/area/mine/explored)
"gd" = (
@@ -1822,17 +1822,17 @@
/turf/floor/plating,
/area/outpost/abandoned)
"gi" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/proc_caller/floor_breaker,
/turf/floor/tiled/airless/broken,
/area/mine/explored)
"gj" = (
/obj/machinery/door/airlock/hatch,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/outpost/abandoned)
"gk" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/power/terminal{
dir = 1
},
@@ -1849,7 +1849,7 @@
/turf/floor/plating/broken/two,
/area/outpost/abandoned)
"gn" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning{
dir = 4;
icon_state = "warning"
@@ -1891,16 +1891,16 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/barren,
/area/mine/explored)
"gt" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/barren,
/area/mine/explored)
"gu" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/outpost/abandoned)
"gv" = (
@@ -1927,7 +1927,7 @@
/turf/floor/plating,
/area/outpost/abandoned)
"gy" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small/emergency{
dir = 8;
icon_state = "bulb1"
@@ -1966,7 +1966,7 @@
/area/outpost/abandoned)
"gE" = (
/obj/effect/decal/cleanable/blood/tracks/footprints,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/airless,
/area/outpost/abandoned)
"gF" = (
@@ -1996,8 +1996,8 @@
/turf/floor/plating,
/area/outpost/abandoned)
"gK" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable/orange{
icon_state = "2-8"
},
@@ -2012,7 +2012,7 @@
/turf/floor/barren,
/area/mine/explored)
"gN" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/door/firedoor,
/obj/structure/cable/orange{
icon_state = "1-2"
@@ -2021,7 +2021,7 @@
/area/outpost/abandoned)
"gO" = (
/obj/effect/decal/cleanable/blood/tracks/footprints,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/firedoor_assembly{
anchored = 1
},
@@ -2040,7 +2040,7 @@
/turf/floor/barren,
/area/outpost/abandoned)
"gR" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable/orange{
icon_state = "1-2"
},
@@ -2210,7 +2210,7 @@
/turf/floor/plating,
/area/outpost/abandoned)
"hp" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/mapped_fluid/fuel,
/turf/floor/plating,
/area/outpost/abandoned)
@@ -2311,7 +2311,7 @@
/area/outpost/abandoned)
"hD" = (
/obj/random/junk,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/mapped_fluid/fuel,
/turf/floor/plating,
/area/outpost/abandoned)
@@ -2339,7 +2339,7 @@
/turf/floor/plating,
/area/outpost/abandoned)
"hL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/overmap/visitable/sector/away,
/turf/floor/tiled/white,
/area/outpost/abandoned)
@@ -2382,7 +2382,7 @@
/obj/effect/floor_decal/corner/red{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/ammo_casing/pistol/magnum,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/dark,
@@ -2392,9 +2392,9 @@
dir = 4
},
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/ammo_casing/pistol/magnum,
/turf/floor/tiled/dark,
/area/outpost/abandoned)
@@ -2428,11 +2428,11 @@
/obj/machinery/atmospherics/pipe/simple/hidden/red{
dir = 4
},
-/obj/effect/decal/cleanable/vomit,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/vomit/mapped,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor,
/area/outpost/abandoned)
"wb" = (
@@ -2454,7 +2454,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/red{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small/emergency{
dir = 4;
icon_state = "bulb1"
@@ -2462,8 +2462,8 @@
/turf/floor/tiled/white,
/area/outpost/abandoned)
"HD" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/airless,
/area/outpost/abandoned)
"IX" = (
diff --git a/maps/away/mining/mining_areas.dm b/maps/away/mining/mining_areas.dm
index 94d5e15d978..3dd6da72529 100644
--- a/maps/away/mining/mining_areas.dm
+++ b/maps/away/mining/mining_areas.dm
@@ -3,7 +3,7 @@
icon_state = "mining"
ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg')
sound_env = ASTEROID
- base_turf = /turf/floor
+ base_turf = /turf/floor/barren
area_flags = AREA_FLAG_IS_BACKGROUND | AREA_FLAG_HIDE_FROM_HOLOMAP
/area/mine/explored
diff --git a/maps/away/slavers/icons/abolitionist.dmi b/maps/away/slavers/icons/abolitionist.dmi
deleted file mode 100644
index b56da3bc706..00000000000
Binary files a/maps/away/slavers/icons/abolitionist.dmi and /dev/null differ
diff --git a/maps/away/slavers/icons/areas.dmi b/maps/away/slavers/icons/areas.dmi
deleted file mode 100644
index cc911c14cd2..00000000000
Binary files a/maps/away/slavers/icons/areas.dmi and /dev/null differ
diff --git a/maps/away/slavers/icons/uniform.dmi b/maps/away/slavers/icons/uniform.dmi
deleted file mode 100644
index 841007db55f..00000000000
Binary files a/maps/away/slavers/icons/uniform.dmi and /dev/null differ
diff --git a/maps/away/slavers/slavers_base.dm b/maps/away/slavers/slavers_base.dm
deleted file mode 100644
index 697a24856d3..00000000000
--- a/maps/away/slavers/slavers_base.dm
+++ /dev/null
@@ -1,185 +0,0 @@
-#include "slavers_base_areas.dm"
-#include "../mining/mining_areas.dm"
-
-/obj/effect/overmap/visitable/sector/slavers_base
- name = "large asteroid"
- desc = "Sensor array is reading an artificial structure inside the asteroid."
- icon_state = "object"
- initial_generic_waypoints = list(
- "nav_slavers_base_1",
- "nav_slavers_base_2",
- "nav_slavers_base_3",
- "nav_slavers_base_4",
- "nav_slavers_base_5",
- "nav_slavers_base_6",
- "nav_slavers_base_antag"
- )
-
-/datum/map_template/ruin/away_site/slavers
- name = "Slavers' Base"
- description = "Asteroid with slavers base inside."
- suffixes = list("slavers/slavers_base.dmm")
- cost = 1
- level_data_type = /datum/level_data/mining_level
- area_usage_test_exempted_root_areas = list(/area/slavers_base)
- apc_test_exempt_areas = list(
- /area/slavers_base/hangar = NO_SCRUBBER
- )
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav1
- name = "Slavers Base Navpoint #1"
- landmark_tag = "nav_slavers_base_1"
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav2
- name = "Slavers Base Navpoint #2"
- landmark_tag = "nav_slavers_base_2"
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav3
- name = "Slavers Base Navpoint #3"
- landmark_tag = "nav_slavers_base_3"
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav4
- name = "Slavers Base Navpoint #4"
- landmark_tag = "nav_slavers_base_4"
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav5
- name = "Slavers Base Navpoint #5"
- landmark_tag = "nav_slavers_base_5"
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav6
- name = "Slavers Base Navpoint #6"
- landmark_tag = "nav_slavers_base_6"
-
-/obj/effect/shuttle_landmark/nav_slavers_base/nav7
- name = "Slavers Base Navpoint #7"
- landmark_tag = "nav_slavers_base_antag"
-
-/decl/outfit/corpse
- name = "Corpse Clothing"
- abstract_type = /decl/outfit/corpse
-
-/decl/outfit/corpse/slavers_base
- name = "Basic slaver output"
-
-/obj/abstract/landmark/corpse/slavers_base
- abstract_type = /obj/abstract/landmark/corpse/slavers_base
-
-/obj/abstract/landmark/corpse/slavers_base/slaver1
- name = "Slaver"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slaver1)
-
-/decl/outfit/corpse/slavers_base/slaver1
- name = "Dead Slaver 1"
- uniform = /obj/item/clothing/jumpsuit/johnny
- shoes = /obj/item/clothing/shoes/color/black
- glasses = /obj/item/clothing/glasses/sunglasses
-
-/obj/abstract/landmark/corpse/slavers_base/slaver2
- name = "Slaver"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slaver2)
-
-/decl/outfit/corpse/slavers_base/slaver2
- name = "Dead Slaver 2"
- uniform = /obj/item/clothing/jumpsuit/johnny
- shoes = /obj/item/clothing/shoes/color/blue
-
-/obj/abstract/landmark/corpse/slavers_base/slaver3
- name = "Slaver"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slaver3)
-
-/decl/outfit/corpse/slavers_base/slaver3
- name = "Dead Slaver 3"
- uniform = /obj/item/clothing/costume/pirate
- shoes = /obj/item/clothing/shoes/color/brown
-
-/obj/abstract/landmark/corpse/slavers_base/slaver4
- name = "Slaver"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slaver4)
-
-/decl/outfit/corpse/slavers_base/slaver4
- name = "Dead Slaver 4"
- uniform = /obj/item/clothing/costume/redcoat
- shoes = /obj/item/clothing/shoes/color/brown
-
-/obj/abstract/landmark/corpse/slavers_base/slaver5
- name = "Slaver"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slaver5)
-
-/decl/outfit/corpse/slavers_base/slaver5
- name = "Dead Slaver 5"
- uniform = /obj/item/clothing/jumpsuit/sterile
- shoes = /obj/item/clothing/shoes/color/orange
- mask = /obj/item/clothing/mask/surgical
-
-/obj/abstract/landmark/corpse/slavers_base/slaver6
- name = "Slaver"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slaver6)
-
-/decl/outfit/corpse/slavers_base/slaver6
- name = "Dead Slaver 6"
- uniform = /obj/item/clothing/shirt/flannel/red/outfit
- shoes = /obj/item/clothing/shoes/color/orange
-
-/obj/abstract/landmark/corpse/slavers_base/slave
- name = "Slave"
- corpse_outfits = list(/decl/outfit/corpse/slavers_base/slave)
-
-/decl/outfit/corpse/slavers_base/slave
- name = "Dead Slave"
- uniform = /obj/item/clothing/jumpsuit/orange
- shoes = /obj/item/clothing/shoes/jackboots/tactical
-
-/mob/living/simple_animal/hostile/abolition_extremist
- name = "abolition extremist"
- desc = "Vigiliant fighter against slavery."
- icon = 'maps/away/slavers/icons/abolitionist.dmi'
-
- max_health = 100
- natural_weapon = /obj/item/natural_weapon/punch
- unsuitable_atmos_damage = 15
- projectilesound = 'sound/weapons/laser.ogg'
- projectiletype = /obj/item/projectile/beam
- faction = "extremist abolitionists"
- ai = /datum/mob_controller/abolitionist
- var/corpse = /obj/abstract/landmark/corpse/abolitionist
- var/weapon = /obj/item/gun/energy/laser
-
-/mob/living/simple_animal/hostile/abolition_extremist/has_ranged_attack()
- return TRUE
-
-/datum/mob_controller/abolitionist
- speak_chance = 0
- turns_per_wander = 10
- stop_wander_when_pulled = 0
- can_escape_buckles = TRUE
-
-/mob/living/simple_animal/hostile/abolition_extremist/death(gibbed)
- . = ..()
- if(. && !gibbed)
- if(corpse)
- new corpse(loc)
- if(weapon)
- new weapon(loc)
- qdel(src)
-
-/obj/abstract/landmark/corpse/abolitionist
- name = "abolitionist"
- corpse_outfits = list(/decl/outfit/corpse/abolitionist)
-
-/decl/outfit/corpse/abolitionist
- name = "Dead abolitionist"
- uniform = /obj/item/clothing/jumpsuit/abolitionist
- shoes = /obj/item/clothing/shoes/jackboots
- head = /obj/item/clothing/head/helmet/merc
-
-/obj/item/clothing/jumpsuit/abolitionist
- name = "abolitionist combat suit"
- desc = "Lightly armored suit worn by abolition extremists during raids. It has green patches on the right sleeve and the chest. There is big green \"A\" on the back."
- icon = 'maps/away/slavers/icons/uniform.dmi'
- body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS
- armor = list(
- ARMOR_MELEE = ARMOR_MELEE_KNIVES,
- ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL,
- ARMOR_LASER = ARMOR_LASER_MINOR,
- ARMOR_ENERGY = ARMOR_ENERGY_MINOR
- )
diff --git a/maps/away/slavers/slavers_base.dmm b/maps/away/slavers/slavers_base.dmm
deleted file mode 100644
index f9648ba2863..00000000000
--- a/maps/away/slavers/slavers_base.dmm
+++ /dev/null
@@ -1,44306 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/space,
-/area/space)
-"ab" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav2,
-/turf/space,
-/area/space)
-"ac" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav3,
-/turf/space,
-/area/space)
-"ad" = (
-/turf/unsimulated/mask,
-/area/mine/unexplored)
-"ae" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav1,
-/turf/space,
-/area/space)
-"af" = (
-/turf/wall/natural,
-/area/space)
-"ag" = (
-/turf/floor,
-/area/space)
-"ah" = (
-/turf/wall,
-/area/slavers_base/mort)
-"ai" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav4,
-/turf/space,
-/area/space)
-"aj" = (
-/obj/structure/ore_box{
- desc = "A heavy box covered with dried blood.";
- name = "Big dirty box"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"ak" = (
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"al" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"am" = (
-/obj/structure/morgue,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"an" = (
-/obj/effect/decal/cleanable/ash,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"ao" = (
-/obj/structure/table,
-/obj/item/wirecutters,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"ap" = (
-/obj/structure/table,
-/obj/abstract/landmark/corpse/slavers_base/slave,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aq" = (
-/obj/structure/table,
-/obj/item/paper{
- info = "If they'll keep having fun with cargo in such manner, we'll run out of freezers to keep what's left from it.";
- name = "Note"
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"ar" = (
-/obj/structure/table,
-/obj/item/utensil/knife,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"as" = (
-/obj/structure/rack,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"at" = (
-/obj/effect/gibspawner/human,
-/turf/floor,
-/area/space)
-"au" = (
-/obj/structure/rack,
-/obj/item/wirecutters,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"av" = (
-/obj/item/tool/shovel,
-/turf/floor,
-/area/space)
-"aw" = (
-/obj/item/remains/human,
-/turf/floor,
-/area/space)
-"ax" = (
-/obj/item/remains/human,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"ay" = (
-/obj/item/bodybag,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"az" = (
-/obj/item/utensil/knife,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aA" = (
-/obj/structure/rack,
-/obj/item/tool/axe/hatchet,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aB" = (
-/obj/structure/closet/crate/freezer,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aC" = (
-/obj/effect/gibspawner/human,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aD" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aE" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/power/apc{
- dir = 4;
- name = "Slaves Mortuary";
- pixel_x = 24
- },
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aF" = (
-/obj/machinery/light/small,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aG" = (
-/obj/machinery/gibber,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aH" = (
-/obj/structure/meat_hook,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aI" = (
-/obj/structure/meat_hook,
-/obj/machinery/light/small,
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aK" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aL" = (
-/obj/machinery/door/airlock{
- name = "Mortuary backyard"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/mort)
-"aM" = (
-/turf/wall,
-/area/slavers_base/cells)
-"aN" = (
-/obj/machinery/door/airlock{
- name = "Slaves mortuary"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"aO" = (
-/obj/structure/hygiene/toilet{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aP" = (
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aQ" = (
-/obj/machinery/light/small/red{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aR" = (
-/obj/structure/mattress/dirty,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aS" = (
-/obj/structure/mattress/dirty,
-/obj/item/chems/glass/rag,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"aU" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"aV" = (
-/obj/random/trash,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aW" = (
-/obj/item/chems/glass/rag,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aX" = (
-/obj/structure/hygiene/shower{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aY" = (
-/obj/item/chems/glass/rag,
-/obj/random/trash,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"aZ" = (
-/obj/structure/mattress/dirty,
-/obj/item/chems/drinks/cans/waterbottle,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"ba" = (
-/obj/item/remains/human,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bb" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bc" = (
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/obj/item/chems/glass/rag,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bd" = (
-/obj/structure/mattress/dirty,
-/obj/item/trash/liquidfood,
-/obj/abstract/landmark/corpse/slavers_base/slave,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"be" = (
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bf" = (
-/obj/item/chems/drinks/cans/waterbottle,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bg" = (
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/obj/random/trash,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bh" = (
-/obj/structure/mattress/dirty,
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bi" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bj" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan{
- icon_state = "0-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bk" = (
-/obj/machinery/door/window/brigdoor/southright,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bl" = (
-/obj/machinery/door/window/brigdoor/southright,
-/obj/random/trash,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bm" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bn" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/cyan{
- icon_state = "2-4"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bo" = (
-/obj/machinery/door/airlock{
- name = "Cell block B"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bp" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"br" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bs" = (
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bt" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bu" = (
-/obj/structure/mattress/dirty,
-/obj/abstract/landmark/corpse/slavers_base/slave,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bv" = (
-/obj/structure/closet/crate/plastic/rations,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bw" = (
-/obj/item/paper{
- info = "Tonight, when lights are out. Prepare shivs, pieces of glass, whatever you might find.";
- name = "Note"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bx" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"by" = (
-/obj/machinery/atmospherics/pipe/manifold/visible/black,
-/obj/abstract/landmark/allowed_leak,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"bz" = (
-/obj/structure/closet/crate/plastic/rations,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bA" = (
-/obj/random/trash,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bB" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/remains/human,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bC" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bD" = (
-/obj/random/shoes,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bE" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bF" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bG" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bH" = (
-/obj/machinery/door/window/brigdoor/northright,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bI" = (
-/obj/random/trash,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bJ" = (
-/obj/item/bag/trash,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bK" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan{
- icon_state = "0-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bL" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan{
- icon_state = "2-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "0-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bM" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan{
- icon_state = "0-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bN" = (
-/obj/machinery/door/airlock{
- name = "Den B"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bO" = (
-/obj/machinery/light/small/red,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bP" = (
-/obj/machinery/light/small/red,
-/obj/structure/mattress/dirty,
-/obj/abstract/landmark/corpse/slavers_base/slave,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bQ" = (
-/obj/structure/mattress/dirty,
-/obj/random/junk,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"bR" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bS" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "1-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-4"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-4"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bU" = (
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bV" = (
-/obj/random/trash,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-4"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bW" = (
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/item/ammo_casing/shotgun/beanbag{
- pixel_x = -8;
- pixel_y = -4
- },
-/obj/item/ammo_casing/shotgun/beanbag{
- pixel_y = 5;
- pixel_z = 7
- },
-/obj/item/ammo_casing/shotgun/beanbag,
-/obj/item/ammo_casing/shotgun/beanbag,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bX" = (
-/obj/machinery/door/airlock{
- name = "Dens block"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bY" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/obj/abstract/landmark/corpse/slavers_base/slaver4,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"bZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood,
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"ca" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan{
- icon_state = "1-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "0-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cb" = (
-/obj/machinery/door/airlock{
- name = "Den A"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cc" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cd" = (
-/obj/structure/hygiene/toilet{
- dir = 4
- },
-/obj/item/food/junk/liquidfood,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"ce" = (
-/obj/machinery/light/small/red{
- dir = 1
- },
-/obj/structure/mattress/dirty,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cf" = (
-/obj/structure/mattress/dirty,
-/obj/random/snack,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cg" = (
-/obj/machinery/light/small/red{
- dir = 1
- },
-/obj/random/medical/lite,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"ch" = (
-/obj/structure/mattress/dirty,
-/obj/item/remains/human,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"ci" = (
-/obj/random/junk,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"ck" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cl" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/item/flashlight,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cm" = (
-/turf/wall,
-/area/slavers_base/hangar)
-"cn" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/ammo_casing/shotgun/beanbag,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/cyan{
- icon_state = "2-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"co" = (
-/obj/machinery/door/airlock{
- name = "Cell block A"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cp" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cr" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/obj/structure/cable/cyan{
- icon_state = "2-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cs" = (
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"ct" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cu" = (
-/obj/machinery/door/blast/regular{
- id_tag = "service_hangar"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cv" = (
-/obj/abstract/landmark/corpse/slavers_base/slave,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cw" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/ammo_casing/shotgun/beanbag,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cx" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cy" = (
-/obj/random/medical/lite,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cz" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cA" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc{
- dir = 4;
- name = "Slavers holding area";
- pixel_x = 24
- },
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/cells)
-"cB" = (
-/obj/machinery/door/window/brigdoor/northright,
-/obj/item/chems/glass/rag,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cC" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 9;
- icon_state = "warning"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cD" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1;
- icon_state = "warning"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cE" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 5;
- icon_state = "warning"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cF" = (
-/obj/item/paper,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cG" = (
-/obj/item/trash/liquidfood,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cH" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cI" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 4;
- icon_state = "warning"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"cJ" = (
-/obj/item/paper{
- info = "Doc who checked us told implants won't explode our heads. Gotta make guys know. Seems I see a silver lining.";
- name = "Note"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cK" = (
-/obj/machinery/light/small/red,
-/obj/item/remains/human,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cL" = (
-/obj/random/snack,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cM" = (
-/obj/structure/mattress/dirty,
-/obj/item/chems/drinks/cans/waterbottle,
-/obj/random/junk,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cN" = (
-/obj/machinery/light/small/red,
-/obj/random/trash,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cO" = (
-/obj/structure/mattress/dirty,
-/obj/item/chems/glass/rag,
-/obj/item/chems/drinks/cans/waterbottle,
-/obj/abstract/landmark/corpse/slavers_base/slave,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cP" = (
-/obj/structure/hygiene/toilet{
- dir = 4
- },
-/obj/item/trash/liquidfood,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cQ" = (
-/obj/machinery/light/small/red,
-/obj/structure/mattress/dirty,
-/obj/item/chems/glass/rag,
-/turf/floor/plating/airless,
-/area/slavers_base/cells)
-"cR" = (
-/turf/wall,
-/area/slavers_base/powatm)
-"cS" = (
-/turf/wall,
-/area/slavers_base/secwing)
-"cT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/airlock{
- name = "Slave hold hallway"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"cU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock{
- name = "Slave hold hallway"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"cV" = (
-/turf/wall,
-/area/slavers_base/med)
-"cW" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav7,
-/turf/space,
-/area/space)
-"cX" = (
-/obj/machinery/atmospherics/unary/tank/air,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"cY" = (
-/obj/machinery/atmospherics/unary/tank/air,
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"cZ" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"da" = (
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"db" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dc" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dd" = (
-/obj/structure/bed,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"de" = (
-/obj/structure/closet,
-/obj/random/snack,
-/obj/random/projectile,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"df" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"dg" = (
-/obj/structure/bed,
-/obj/random/projectile,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"dh" = (
-/obj/structure/closet,
-/obj/random/smokes,
-/obj/random/masks,
-/obj/random/suit,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"di" = (
-/obj/structure/rack,
-/obj/item/flashlight,
-/obj/random/medical/lite,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dj" = (
-/obj/structure/rack,
-/obj/machinery/light{
- dir = 1
- },
-/obj/item/box/handcuffs,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dk" = (
-/obj/structure/rack,
-/obj/item/baton,
-/obj/item/baton,
-/obj/item/baton,
-/obj/random/tool,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dl" = (
-/obj/structure/rack,
-/obj/item/flash,
-/obj/random/ammo,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dm" = (
-/obj/structure/rack,
-/obj/item/box/ammo/stunshells,
-/obj/item/gun/projectile/shotgun/pump,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dn" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"do" = (
-/obj/structure/cable{
- icon_state = "0-6"
- },
-/obj/machinery/power/smes/buildable,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dp" = (
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dq" = (
-/obj/structure/cable/cyan{
- icon_state = "0-4"
- },
-/obj/machinery/power/smes/buildable,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dr" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"ds" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable/cyan{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"dt" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable/cyan{
- icon_state = "1-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"du" = (
-/obj/machinery/door/airlock{
- name = "Slave processing"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dv" = (
-/obj/machinery/flasher{
- id_tag = "permentryflash";
- name = "Floor mounted flash"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dw" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc{
- dir = 1;
- name = "Medical room";
- pixel_y = 24
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dx" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dy" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dz" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/hygiene/shower{
- pixel_y = 30
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dA" = (
-/obj/machinery/door/airlock{
- name = "Storage"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dB" = (
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"dC" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"dD" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"dE" = (
-/obj/structure/closet/crate/plastic/rations,
-/obj/item/food/junk/liquidfood,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"dF" = (
-/obj/structure/closet/crate/plastic/rations,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"dG" = (
-/obj/machinery/atmospherics/pipe/manifold/visible/yellow{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dH" = (
-/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dI" = (
-/obj/machinery/atmospherics/pipe/manifold/visible/yellow,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dJ" = (
-/obj/machinery/atmospherics/pipe/simple/visible/yellow{
- dir = 10
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dK" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"dL" = (
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"dM" = (
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dN" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dO" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dP" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/structure/cable/green{
- icon_state = "0-4"
- },
-/obj/structure/cable/green{
- icon_state = "0-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dQ" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-9"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dR" = (
-/obj/structure/table/steel,
-/obj/item/box/ammo/stunshells,
-/obj/item/baton,
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/structure/cable/green{
- icon_state = "0-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"dS" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"dT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/ammo_casing/shotgun/beanbag,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"dU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"dV" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dW" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/random/junk,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dX" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/random/medical/lite,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dY" = (
-/obj/structure/bed,
-/obj/item/remains/human,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"dZ" = (
-/obj/item/food/junk/liquidfood,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"ea" = (
-/obj/structure/closet/crate/trashcart,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"eb" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 10;
- icon_state = "warning"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"ec" = (
-/obj/effect/floor_decal/industrial/warning,
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"ed" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 6
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"ee" = (
-/obj/machinery/atmospherics/binary/pump{
- dir = 1;
- name = "waste pump"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"ef" = (
-/obj/machinery/atmospherics/binary/pump,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eg" = (
-/obj/machinery/atmospherics/pipe/simple/visible/yellow,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eh" = (
-/obj/random/junk,
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"ei" = (
-/obj/random/junk,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"ej" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"ek" = (
-/mob/living/simple_animal/hostile/abolition_extremist,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"el" = (
-/obj/abstract/landmark/corpse/slavers_base/slaver6,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"em" = (
-/obj/random/junk,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"en" = (
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eo" = (
-/obj/structure/bed/chair/office/dark{
- dir = 4
- },
-/obj/effect/decal/cleanable/blood,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"ep" = (
-/obj/structure/table/steel,
-/obj/item/flash,
-/obj/item/radio/shortwave,
-/obj/item/paper{
- info = "If this fuck from A-3 keeps thinking he's better then piece of meat, throw him to hangar and show how little pressure turns diamonds into shit.";
- name = "Note"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eq" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"er" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"es" = (
-/obj/item/ammo_casing/shotgun/beanbag,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"et" = (
-/obj/structure/window/basic{
- dir = 1
- },
-/obj/item/clothing/gloves/latex,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eu" = (
-/obj/structure/window/basic{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/abstract/landmark/corpse/slavers_base/slaver5,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"ev" = (
-/obj/structure/window/basic{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"ew" = (
-/obj/structure/window/basic{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"ex" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/ammo_casing/shotgun/beanbag,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"ey" = (
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"ez" = (
-/obj/structure/bed,
-/obj/item/handcuffs,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eA" = (
-/obj/item/beartrap,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"eB" = (
-/obj/item/mop,
-/obj/structure/mopbucket,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"eC" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume,
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"eD" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 1
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eE" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eF" = (
-/obj/random/tool,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eG" = (
-/obj/machinery/atmospherics/binary/pump{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eH" = (
-/obj/machinery/atmospherics/pipe/simple/visible/yellow{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eI" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eK" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"eL" = (
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"eM" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"eN" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Slave hold hallway"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"eO" = (
-/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eP" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eQ" = (
-/obj/machinery/computer/modular{
- name = "Cameras console"
- },
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eR" = (
-/obj/machinery/computer/modular{
- name = "Riot control console"
- },
-/obj/machinery/power/apc{
- name = "Slavers security wing";
- pixel_y = -24
- },
-/obj/structure/cable,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eS" = (
-/obj/structure/table/steel,
-/obj/item/handcuffs,
-/turf/floor/tiled,
-/area/slavers_base/secwing)
-"eT" = (
-/obj/item/gun/projectile/shotgun/pump,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"eU" = (
-/obj/machinery/optable,
-/obj/item/scalpel,
-/obj/effect/decal/cleanable/blood,
-/obj/machinery/light,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eV" = (
-/obj/structure/window/basic{
- dir = 4
- },
-/obj/structure/table,
-/obj/item/implanter,
-/obj/item/implantcase/tracking,
-/obj/item/surgicaldrill,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eW" = (
-/obj/machinery/optable,
-/obj/effect/decal/cleanable/blood,
-/obj/item/screwdriver,
-/obj/machinery/light,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eX" = (
-/obj/structure/window/basic{
- dir = 4
- },
-/obj/structure/table,
-/obj/item/implantpad,
-/obj/item/chems/pill/antibiotics,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eY" = (
-/obj/structure/table,
-/obj/item/firstaid/empty,
-/obj/item/handcuffs,
-/obj/item/baton,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"eZ" = (
-/obj/structure/table,
-/obj/item/firstaid/o2,
-/obj/item/folder/cyan,
-/obj/item/paper{
- info = "Seems they don't really look over my shoulder anymore. We have now maybe a dozen of them with inactive implants. Hope they will pick right moment to flip the lid. I'll kill few bastards myself soon as I have a chance.";
- name = "Note"
- },
-/obj/item/pen,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"fa" = (
-/obj/structure/table,
-/obj/item/firstaid/regular,
-/obj/item/tool/axe/hatchet,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"fb" = (
-/obj/item/roller,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"fc" = (
-/obj/structure/bed,
-/turf/floor/tiled/airless,
-/area/slavers_base/med)
-"fd" = (
-/obj/structure/table,
-/obj/item/box/handcuffs,
-/obj/item/box/handcuffs,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"fe" = (
-/obj/structure/table,
-/obj/item/box/bodybags,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"ff" = (
-/obj/structure/table,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"fg" = (
-/obj/structure/reagent_dispensers/water_cooler,
-/turf/floor/plating/airless,
-/area/slavers_base/med)
-"fh" = (
-/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"fi" = (
-/obj/machinery/atmospherics/pipe/simple/visible/cyan{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"fj" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc{
- name = "Slavers hangar";
- pixel_y = -24
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"fk" = (
-/obj/machinery/light/small,
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"fl" = (
-/obj/effect/decal/cleanable/generic,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fm" = (
-/obj/effect/decal/cleanable/generic,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fn" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/airlock{
- name = "Slave hold hallway"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/secwing)
-"fo" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fp" = (
-/obj/machinery/door/airlock/external,
-/obj/machinery/atmospherics/pipe/simple/visible/cyan,
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"fq" = (
-/obj/machinery/door/airlock/external,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/hangar)
-"fr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fs" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"ft" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Power/atmos"
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/plating/airless,
-/area/slavers_base/hallway)
-"fu" = (
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
-/obj/structure/cable/green,
-/obj/structure/cable/green{
- icon_state = "0-8"
- },
-/obj/structure/cable/green{
- icon_state = "0-2"
- },
-/obj/structure/cable/green{
- icon_state = "0-4"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "West hallway"
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fx" = (
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fz" = (
-/obj/machinery/door/airlock{
- name = "Transit area"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/maint)
-"fA" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/power/terminal,
-/obj/structure/cable/green{
- icon_state = "0-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fE" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fF" = (
-/obj/machinery/atmospherics/binary/pump{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fG" = (
-/obj/machinery/atmospherics/pipe/simple/visible/cyan{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fH" = (
-/obj/machinery/atmospherics/pipe/simple/visible/cyan{
- dir = 9
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fI" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fJ" = (
-/turf/wall,
-/area/slavers_base/maint)
-"fK" = (
-/obj/machinery/atmospherics/unary/tank/carbon_dioxide,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fL" = (
-/obj/machinery/atmospherics/pipe/simple/visible/black{
- dir = 6
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fM" = (
-/obj/machinery/atmospherics/pipe/simple/visible/yellow,
-/obj/machinery/atmospherics/pipe/simple/visible/black{
- dir = 4
- },
-/obj/abstract/landmark/allowed_leak,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fN" = (
-/obj/machinery/atmospherics/pipe/simple/visible/black{
- dir = 10
- },
-/obj/abstract/landmark/allowed_leak,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fO" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fP" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fQ" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"fR" = (
-/obj/machinery/door/airlock{
- name = "Power/atmos"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/plating/airless,
-/area/slavers_base/hallway)
-"fS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fT" = (
-/obj/item/wrench,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fU" = (
-/obj/machinery/light,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fV" = (
-/obj/machinery/door/airlock{
- name = "West hallway"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"fX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fY" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/smes/buildable,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"fZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"ga" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gb" = (
-/obj/machinery/atmospherics/pipe/manifold/visible/black{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gc" = (
-/obj/machinery/atmospherics/pipe/manifold/visible/black,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gd" = (
-/obj/machinery/atmospherics/pipe/simple/visible/black{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"ge" = (
-/obj/machinery/atmospherics/omni/filter{
- dir = 8
- },
-/obj/abstract/landmark/allowed_leak,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal{
- dir = 4
- },
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gh" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc{
- dir = 4;
- name = "Slavers atmos and power room";
- pixel_x = 24
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gi" = (
-/turf/wall,
-/area/slavers_base/dorms)
-"gj" = (
-/obj/machinery/door/airlock{
- name = "Mess"
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gk" = (
-/obj/machinery/door/airlock{
- name = "Southern hallway"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"gl" = (
-/obj/machinery/door/airlock{
- name = "Southern hallway"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"gm" = (
-/obj/machinery/door/airlock{
- name = "Slave trade area"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gn" = (
-/obj/machinery/atmospherics/binary/pump,
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"go" = (
-/obj/machinery/portable_atmospherics/canister,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gp" = (
-/obj/item/crowbar,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gq" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gr" = (
-/obj/structure/table/steel,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/item/stock_parts/circuitboard/broken,
-/obj/item/poster,
-/obj/item/radio/shortwave,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gs" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"gt" = (
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gu" = (
-/obj/machinery/vending/wallmed2{
- pixel_y = 30
- },
-/obj/structure/table,
-/obj/random/cash,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gv" = (
-/obj/structure/bed,
-/obj/machinery/light{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gw" = (
-/obj/structure/closet,
-/obj/random/smokes,
-/obj/random/loot,
-/obj/random/contraband,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gx" = (
-/obj/structure/table,
-/obj/random/coin,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gy" = (
-/obj/structure/bed,
-/obj/random/plushie,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gz" = (
-/obj/structure/closet,
-/obj/random/smokes,
-/obj/random/loot,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gA" = (
-/obj/structure/table,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gB" = (
-/obj/structure/closet,
-/obj/random/loot,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gC" = (
-/obj/structure/table,
-/obj/random/contraband,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gD" = (
-/obj/structure/bed,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gE" = (
-/obj/structure/closet,
-/obj/random/smokes,
-/obj/random/cash,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gF" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"gG" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"gH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gI" = (
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gJ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gK" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gL" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 1
- },
-/obj/machinery/portable_atmospherics/canister,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gM" = (
-/obj/structure/table/steel,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/item/toolbox/mechanical,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gN" = (
-/obj/random/junk,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"gO" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gQ" = (
-/obj/random/junk,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc{
- name = "Slavers Maintenance";
- pixel_y = -24
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gT" = (
-/obj/machinery/door/airlock{
- name = "Exchange tunnel"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gU" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gV" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"gW" = (
-/obj/machinery/floodlight,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gX" = (
-/obj/structure/table/steel,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"gY" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"gZ" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"ha" = (
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hb" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"hc" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"hd" = (
-/turf/wall,
-/area/slavers_base/demo)
-"he" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"hf" = (
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"hg" = (
-/obj/item/coilgun_assembly,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hh" = (
-/obj/random/junk,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hk" = (
-/obj/structure/table,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hl" = (
-/obj/structure/bed,
-/obj/item/radio/shortwave,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hm" = (
-/obj/structure/closet,
-/obj/random/projectile,
-/obj/random/loot,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hn" = (
-/obj/structure/table,
-/obj/random/loot,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"ho" = (
-/obj/structure/table,
-/obj/random/gloves,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hp" = (
-/obj/structure/closet,
-/obj/random/loot,
-/obj/random/contraband,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hq" = (
-/obj/structure/closet,
-/obj/random/projectile,
-/obj/random/ammo,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hr" = (
-/obj/structure/safe,
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"hs" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/safe,
-/obj/item/bag/cash,
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"ht" = (
-/obj/structure/safe,
-/obj/item/bag/cash,
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"hu" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hv" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hw" = (
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hx" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hy" = (
-/obj/random/junk,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"hz" = (
-/obj/machinery/vending/engineering{
- req_access = list()
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hA" = (
-/obj/item/stock_parts/computer/card_slot,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hB" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hC" = (
-/obj/machinery/power/smes/buildable,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/airlock{
- name = "Slave hold hallway"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"hE" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"hF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"hG" = (
-/obj/machinery/door/airlock{
- name = "Safe room"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"hH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"hI" = (
-/obj/random/coin,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"hJ" = (
-/obj/machinery/door/airlock{
- name = "Cashier room"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"hK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hL" = (
-/obj/structure/bed/chair{
- dir = 4
- },
-/obj/item/radio/shortwave,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hM" = (
-/obj/structure/table/reinforced,
-/obj/random/coin,
-/obj/machinery/door/blast/regular/open{
- id_tag = "SC BD"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hN" = (
-/obj/structure/bed/chair/comfy/beige{
- dir = 4
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hO" = (
-/obj/structure/table/woodentable,
-/obj/item/radio/shortwave,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hP" = (
-/obj/structure/table/woodentable,
-/obj/item/secure_storage/briefcase/money,
-/obj/random/cash,
-/obj/random/cash,
-/obj/random/cash,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hQ" = (
-/obj/structure/bed/chair/comfy/beige{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"hR" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/structure/cable/green{
- icon_state = "0-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"hS" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hT" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hU" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hV" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/vending/dinnerware,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hW" = (
-/obj/machinery/cooker/oven,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hX" = (
-/obj/structure/table,
-/obj/machinery/microwave,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hY" = (
-/obj/structure/table,
-/obj/random/snack,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"hZ" = (
-/obj/structure/table,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"ia" = (
-/obj/structure/table,
-/obj/machinery/light{
- dir = 1
- },
-/obj/item/plate,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"ib" = (
-/obj/structure/closet/secure_closet/freezer/fridge,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"ic" = (
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"id" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"ie" = (
-/obj/structure/closet/secure_closet/guncabinet,
-/obj/random/projectile,
-/obj/random/projectile,
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"if" = (
-/obj/structure/closet/secure_closet/guncabinet,
-/obj/random/projectile,
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"ig" = (
-/obj/random/coin,
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"ih" = (
-/turf/floor/plating/airless,
-/area/slavers_base/demo)
-"ii" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"ij" = (
-/obj/structure/table/woodentable,
-/obj/item/bag/cash,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"ik" = (
-/obj/structure/table/woodentable,
-/obj/random/cash,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"il" = (
-/obj/structure/ore_box,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"in" = (
-/obj/structure/closet/crate,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"io" = (
-/obj/structure/closet/crate,
-/obj/machinery/light/small,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"iq" = (
-/obj/machinery/port_gen/pacman/super,
-/obj/structure/cable/green{
- icon_state = "0-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"ir" = (
-/obj/machinery/port_gen/pacman/super,
-/obj/structure/cable/green{
- icon_state = "0-4"
- },
-/obj/structure/cable/green{
- icon_state = "0-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"is" = (
-/obj/machinery/port_gen/pacman/super,
-/obj/structure/cable/green{
- icon_state = "0-4"
- },
-/obj/structure/cable/green{
- icon_state = "0-8"
- },
-/obj/machinery/light/small,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"it" = (
-/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-"iu" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iv" = (
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"ix" = (
-/obj/machinery/vending/snack,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iy" = (
-/obj/structure/table/woodentable,
-/obj/item/paper{
- info = " Contract This contract describes exchanging of monetary pieces for the right o? the ownership for following examples: <*> Human, age 17. Price - 1500cr. <*> Human, age 49. Price - 1100cr. <*> Human, age 28. Good fist fighter. Price - 2400cr. <*> Human, age 34. Expirienced medic. Price - 6800cr. Overall price: 11800cr Place for signatures";
- name = "Contract"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iz" = (
-/obj/structure/table/woodentable,
-/obj/random/coin,
-/obj/item/pen,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iA" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/structure/bed/chair,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/bed/chair,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/structure/bed/chair,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iE" = (
-/mob/living/simple_animal/hostile/abolition_extremist,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iF" = (
-/obj/machinery/vending/fitness,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iG" = (
-/obj/random/junk,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"iH" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"iI" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iJ" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iK" = (
-/obj/item/clothing/suit/nun,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iL" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/item/clothing/suit/robe/yellowed,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iM" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/apc{
- name = "Slavers Dorms";
- pixel_y = -24
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iN" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iO" = (
-/obj/structure/table,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/item/chems/condiment/small/peppermill,
-/obj/item/chems/condiment/small/saltshaker{
- pixel_x = 3;
- pixel_y = 10
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iP" = (
-/obj/structure/table,
-/obj/random/smokes,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iQ" = (
-/obj/structure/table,
-/obj/random/drinkbottle,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iR" = (
-/obj/structure/table,
-/obj/item/plate,
-/obj/item/utensil/fork,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iS" = (
-/obj/structure/table,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iT" = (
-/obj/random/junk,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iU" = (
-/obj/item/utensil/fork,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iV" = (
-/obj/machinery/vending/cola,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"iW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"iX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"iY" = (
-/obj/machinery/door/airlock{
- name = "Scene"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"iZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"ja" = (
-/obj/item/clothing/shoes/color/brown,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"jb" = (
-/obj/item/clothing/pants/pj/blue,
-/obj/item/clothing/shirt/pj/blue,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"jc" = (
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"jd" = (
-/obj/machinery/light,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"je" = (
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/dorms)
-"jf" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/wall,
-/area/slavers_base/dorms)
-"jg" = (
-/obj/structure/table,
-/obj/random/projectile,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jh" = (
-/obj/structure/table,
-/obj/random/drinkbottle,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"ji" = (
-/obj/structure/table,
-/obj/item/plate,
-/obj/random/snack,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jj" = (
-/obj/structure/table,
-/obj/item/utensil/fork,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jk" = (
-/obj/structure/table,
-/obj/random/smokes,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jl" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/vending/cigarette,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jm" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"jn" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"jo" = (
-/obj/machinery/door/airlock{
- name = "Private office"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"jp" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/dorms)
-"jq" = (
-/obj/structure/table,
-/obj/item/radio/shortwave,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/dorms)
-"jr" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"js" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/apc{
- dir = 8;
- name = "west bump";
- pixel_x = -24
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"ju" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"jv" = (
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jw" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jx" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jy" = (
-/obj/structure/cable/green,
-/obj/machinery/power/terminal{
- dir = 4
- },
-/turf/floor/plating/airless,
-/area/slavers_base/dorms)
-"jz" = (
-/obj/structure/cable,
-/obj/machinery/power/smes/buildable,
-/turf/floor/plating/airless,
-/area/slavers_base/dorms)
-"jA" = (
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jB" = (
-/obj/machinery/light,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jC" = (
-/obj/item/paper{
- info = "We made over 200 grands for two last weeks. We should stay low-key for month or so, or we'll get our base discovered by fucking marshalls so shut your whining and relax, I'l l get you three crates of booze and some cargo to play with.";
- name = "Note"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jD" = (
-/obj/random/snack,
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jE" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/floor/tiled,
-/area/slavers_base/dorms)
-"jF" = (
-/obj/machinery/door/airlock{
- name = "Mess"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"jG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"jH" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"jI" = (
-/obj/structure/table,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jJ" = (
-/obj/structure/table,
-/obj/item/megaphone,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jK" = (
-/obj/structure/table,
-/obj/item/clothing/mask/smokable/cigarette,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jL" = (
-/obj/structure/table,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jM" = (
-/obj/structure/table,
-/obj/item/scanner/health,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jN" = (
-/obj/structure/table,
-/obj/random/drinkbottle,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jO" = (
-/obj/structure/table,
-/obj/item/pen,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jP" = (
-/obj/machinery/door/airlock{
- name = "Restroom"
- },
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/airless,
-/area/slavers_base/dorms)
-"jQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/airlock{
- name = "Southern hallway"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"jR" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jS" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jT" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jU" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/item/secure_storage/briefcase/money,
-/obj/random/cash,
-/obj/random/cash,
-/obj/random/cash,
-/obj/random/cash,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jV" = (
-/obj/structure/bed/chair{
- dir = 4
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jW" = (
-/obj/structure/table,
-/obj/item/clothing/mask/smokable/cigarette/professionals,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"jX" = (
-/obj/structure/hygiene/shower{
- dir = 4
- },
-/turf/floor/tiled/white/airless,
-/area/slavers_base/dorms)
-"jY" = (
-/obj/machinery/door/airlock{
- name = "Shower"
- },
-/turf/floor/tiled/white/airless,
-/area/slavers_base/dorms)
-"jZ" = (
-/obj/abstract/landmark/corpse/slavers_base/slaver3,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"ka" = (
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"kb" = (
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"kc" = (
-/obj/abstract/landmark/corpse/slavers_base/slaver1,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"kd" = (
-/obj/machinery/door/airlock{
- name = "Toilet"
- },
-/turf/floor/tiled/white/airless,
-/area/slavers_base/dorms)
-"ke" = (
-/obj/structure/hygiene/toilet{
- dir = 8
- },
-/obj/random/junk,
-/turf/floor/tiled/white/airless,
-/area/slavers_base/dorms)
-"kf" = (
-/turf/wall,
-/area/slavers_base/hallway)
-"kg" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"kh" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"ki" = (
-/obj/machinery/door/airlock{
- name = "Slave trade area"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"kj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kk" = (
-/mob/living/simple_animal/hostile/abolition_extremist,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kl" = (
-/obj/effect/decal/cleanable/generic,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"km" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kn" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"ko" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"kp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"kq" = (
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"kr" = (
-/obj/machinery/door/airlock{
- name = "Slave trade area"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"ks" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/apc{
- name = "south bump";
- pixel_y = -24
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kt" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"ku" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kv" = (
-/obj/structure/table,
-/obj/item/box/glass_extras,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kw" = (
-/obj/structure/table,
-/obj/machinery/chemical_dispenser/bar_alc,
-/turf/floor/tiled,
-/area/slavers_base/demo)
-"kz" = (
-/mob/living/simple_animal/hostile/abolition_extremist,
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"kA" = (
-/obj/machinery/door/airlock{
- name = "Customers entry"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"kB" = (
-/obj/machinery/door/airlock{
- name = "Customers entry"
- },
-/turf/floor/tiled/airless,
-/area/slavers_base/hallway)
-"kC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kE" = (
-/obj/machinery/door/airlock{
- name = "Exchange area"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kF" = (
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/generic,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kH" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kI" = (
-/obj/machinery/atmospherics/pipe/simple/visible/universal,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kJ" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kK" = (
-/obj/machinery/door/airlock{
- name = "Exchange point"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kL" = (
-/obj/machinery/atmospherics/binary/pump,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kM" = (
-/obj/structure/table,
-/obj/item/radio/shortwave,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kN" = (
-/obj/structure/table,
-/obj/random/handgun,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kO" = (
-/obj/machinery/door/airlock/external,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kP" = (
-/obj/machinery/door/airlock/external,
-/obj/machinery/atmospherics/pipe/simple/visible/cyan,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kQ" = (
-/obj/structure/table,
-/obj/random/junk,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kR" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kS" = (
-/obj/machinery/atmospherics/pipe/simple/visible/cyan,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kT" = (
-/obj/structure/table,
-/obj/random/loot,
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kU" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 1;
- id_tag = "solar_port_pump"
- },
-/turf/floor/plating/airless,
-/area/slavers_base/maint)
-"kW" = (
-/obj/effect/overmap/visitable/sector/slavers_base,
-/turf/space,
-/area/space)
-"kX" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav5,
-/turf/space,
-/area/space)
-"kY" = (
-/obj/effect/shuttle_landmark/nav_slavers_base/nav6,
-/turf/space,
-/area/space)
-"lb" = (
-/obj/structure/hygiene/sink{
- pixel_y = -20
- },
-/obj/structure/mirror{
- pixel_y = -35
- },
-/obj/abstract/landmark/corpse/slavers_base/slaver2,
-/obj/effect/decal/cleanable/blood,
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"mb" = (
-/obj/structure/hygiene/sink{
- pixel_y = -20
- },
-/obj/structure/mirror{
- pixel_y = -35
- },
-/turf/floor/tiled/white,
-/area/slavers_base/dorms)
-"nm" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/tiled/airless,
-/area/slavers_base/demo)
-"EJ" = (
-/obj/machinery/atmospherics/pipe/simple/visible/black{
- dir = 4
- },
-/obj/abstract/landmark/allowed_leak,
-/turf/floor/plating/airless,
-/area/slavers_base/powatm)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(6,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(12,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(13,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(17,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(19,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(26,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(27,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(28,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ai
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(31,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(32,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(33,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(34,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(35,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(36,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(37,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(38,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(39,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(40,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(41,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(42,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(43,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-kX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(44,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(45,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(46,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(47,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(48,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(49,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(50,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(51,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(52,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cX
-dG
-ee
-eD
-da
-da
-fK
-gb
-gn
-gL
-gW
-gW
-hz
-da
-il
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(53,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cX
-dH
-ef
-eE
-da
-da
-fK
-gc
-go
-go
-da
-da
-da
-da
-il
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(54,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cX
-dI
-da
-da
-da
-da
-da
-gd
-da
-go
-da
-hg
-da
-da
-in
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(55,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cY
-dI
-da
-eF
-da
-da
-fL
-by
-da
-da
-da
-da
-da
-da
-io
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(56,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cZ
-dJ
-eg
-dG
-eg
-eg
-fM
-ge
-gp
-da
-da
-da
-hA
-da
-in
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(57,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-da
-da
-cZ
-eG
-da
-da
-fN
-ge
-da
-eF
-da
-hh
-da
-da
-iq
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(58,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-cZ
-cZ
-da
-eH
-da
-da
-da
-EJ
-da
-da
-da
-da
-da
-da
-ir
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(59,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-db
-cZ
-da
-eI
-fl
-da
-fO
-gf
-da
-da
-eF
-da
-da
-da
-is
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(60,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-dc
-dK
-da
-eJ
-fm
-fr
-fP
-gg
-gq
-gq
-gq
-gq
-hB
-da
-ir
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(61,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cR
-dc
-da
-dK
-eK
-da
-fs
-fQ
-gh
-gr
-gM
-gX
-gX
-hC
-hR
-it
-cR
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(62,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ah
-ah
-ah
-ah
-ah
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-cS
-cS
-cS
-cS
-cS
-cS
-ft
-fR
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(63,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-aj
-aj
-ak
-ak
-ak
-aM
-aO
-aX
-bi
-aP
-aP
-aP
-aP
-aM
-bR
-aM
-aP
-aP
-aP
-aP
-bi
-aX
-aO
-cS
-dd
-dL
-dL
-eL
-fn
-fu
-fS
-gj
-gs
-gs
-gY
-gs
-gs
-hS
-iu
-iA
-iu
-je
-jp
-jy
-gi
-jX
-gi
-jX
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(64,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-aj
-ak
-ak
-aM
-aP
-aP
-aP
-aR
-aV
-aP
-aP
-aM
-aU
-aM
-aW
-aZ
-aP
-cv
-ba
-aW
-aP
-cS
-de
-dL
-eh
-eM
-cS
-fv
-fo
-gi
-gi
-gi
-gi
-gi
-gi
-hT
-ic
-ic
-iM
-jf
-jq
-jz
-gi
-jY
-gi
-jY
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(65,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-ak
-aj
-ak
-aM
-aP
-aY
-aW
-be
-aP
-aR
-aW
-bK
-aU
-bK
-aP
-aP
-aP
-be
-aP
-aP
-cJ
-cS
-df
-dL
-dL
-eM
-cS
-fv
-fo
-gi
-gt
-gt
-gZ
-hj
-hD
-hU
-iv
-ic
-iN
-gi
-gi
-gi
-gi
-jZ
-kn
-kb
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(66,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-al
-aj
-ak
-ak
-aF
-aM
-aQ
-aP
-aR
-aP
-aP
-aP
-aP
-bL
-bS
-ca
-aP
-aP
-aP
-ch
-aP
-aP
-bO
-cS
-dg
-dL
-ei
-eM
-cS
-fv
-fT
-gi
-gu
-gt
-gt
-hk
-gi
-hT
-ic
-ic
-iN
-ic
-ic
-jA
-jP
-ka
-kb
-lb
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(67,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-ax
-ak
-ak
-aM
-aP
-aP
-ba
-aP
-aW
-aP
-aP
-bM
-bq
-bM
-aP
-aP
-aP
-aP
-aP
-cv
-aP
-cS
-dh
-dL
-dL
-eM
-cS
-fv
-fU
-gi
-gv
-gt
-gt
-hl
-gi
-hV
-ic
-iv
-iN
-ic
-ic
-jB
-gi
-kb
-kb
-mb
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(68,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-ak
-ak
-aB
-aM
-aP
-aZ
-aP
-aV
-aW
-aP
-aP
-aM
-bq
-aM
-aP
-aR
-aV
-aV
-aP
-cF
-aP
-cS
-cS
-cS
-cS
-eN
-cS
-fv
-fo
-gi
-gw
-gN
-gt
-hm
-gi
-hW
-iw
-iB
-iO
-jg
-jr
-ic
-gi
-kc
-ko
-kz
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(69,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-an
-an
-ak
-ak
-aM
-aP
-aP
-aR
-aP
-bu
-aP
-aP
-bK
-bq
-bK
-aP
-aP
-aP
-aP
-aP
-aP
-bf
-cS
-di
-dM
-ej
-eO
-cS
-fv
-fo
-gi
-gx
-gt
-gt
-hn
-gi
-hX
-ic
-iC
-iP
-jh
-jr
-ic
-gi
-kd
-gi
-kd
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(70,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-am
-an
-ak
-ak
-aB
-aM
-aP
-aP
-aP
-be
-aP
-aP
-aP
-bL
-bT
-ca
-aP
-aP
-aP
-be
-aP
-aR
-aP
-cS
-dj
-dN
-ek
-eP
-cS
-fv
-fo
-gi
-gy
-gt
-ha
-gD
-gi
-hX
-ic
-iC
-iQ
-ji
-jr
-ic
-gi
-ke
-gi
-ke
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(71,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-an
-ak
-ak
-aB
-ak
-aM
-aP
-aP
-aP
-aP
-aV
-aW
-ba
-bM
-bU
-bM
-ci
-aP
-aW
-ci
-aP
-aP
-aP
-cS
-dk
-dN
-dp
-dp
-cS
-fv
-fo
-gi
-gz
-gt
-gt
-gz
-gi
-hY
-ic
-iC
-iR
-jj
-jr
-ic
-gi
-gi
-gi
-gi
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(72,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-ay
-aC
-ay
-aM
-aR
-aP
-ba
-aR
-aP
-aP
-aP
-aM
-bq
-aM
-aP
-aP
-aP
-aP
-aP
-aP
-aP
-cS
-dl
-dO
-el
-dp
-cS
-fv
-fo
-gi
-gA
-gt
-gt
-ho
-gi
-hZ
-ic
-iD
-iS
-jk
-jr
-ic
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(73,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ao
-ak
-ak
-ay
-aG
-aM
-aS
-aP
-aP
-aP
-aV
-aP
-aP
-bK
-bq
-bK
-aP
-aP
-ch
-aP
-ch
-ch
-aP
-cS
-dm
-dN
-em
-dp
-cS
-fv
-fU
-gi
-gv
-gt
-gN
-gD
-gi
-ia
-ic
-ic
-iN
-ic
-ic
-jB
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(74,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ap
-ak
-az
-ak
-aH
-aM
-aS
-aP
-aP
-aP
-bv
-aP
-aP
-bL
-bV
-ca
-aP
-aP
-aP
-aP
-cy
-aP
-aP
-cS
-dn
-dN
-en
-dp
-cS
-fv
-fo
-gi
-gB
-gt
-gt
-hp
-gi
-ib
-ic
-ic
-iT
-iv
-ic
-jC
-gi
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(75,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-aq
-ak
-ak
-ak
-aI
-aM
-aQ
-ba
-aP
-be
-aP
-bD
-aP
-bM
-bq
-bM
-aP
-aV
-aP
-be
-bJ
-aP
-cK
-cS
-do
-dP
-en
-eQ
-cS
-fv
-fo
-gi
-gC
-gt
-gN
-gA
-gi
-ib
-ic
-iE
-iN
-ic
-ic
-ic
-gi
-ad
-ad
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(76,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ar
-ak
-ak
-aC
-aH
-aM
-aP
-aP
-aP
-aP
-bw
-aP
-aP
-aM
-bq
-aM
-aR
-aP
-aR
-aP
-aP
-cG
-cL
-cS
-dp
-dQ
-eo
-eR
-cS
-fv
-fo
-gi
-gD
-gt
-gt
-gy
-gi
-ic
-ic
-ic
-iU
-iv
-ic
-jD
-gi
-ad
-ad
-fJ
-gI
-gI
-kH
-gI
-kO
-kH
-gI
-kO
-ag
-ag
-ag
-ag
-ag
-ag
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(77,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-ak
-ak
-ak
-aM
-aP
-aP
-aR
-aP
-aP
-bE
-bI
-bN
-bW
-cb
-cj
-ck
-aP
-aP
-aW
-aP
-bv
-cS
-dq
-dR
-ep
-eS
-cS
-fv
-fo
-gi
-gE
-gt
-gt
-hq
-gi
-ic
-ix
-iF
-iV
-jl
-js
-jE
-gi
-ad
-ad
-fJ
-kC
-kG
-kI
-kL
-kP
-kS
-kU
-kO
-ag
-ag
-ag
-ag
-ag
-ag
-kW
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(78,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-ak
-ak
-ak
-aD
-aJ
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-bX
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-cS
-dr
-dS
-eq
-eq
-cS
-fw
-fV
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-gi
-jF
-gi
-kf
-kf
-fJ
-fC
-gI
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(79,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ah
-as
-au
-aA
-aE
-aK
-aN
-aT
-bb
-bb
-bm
-bb
-bF
-bb
-bb
-bY
-cc
-bb
-cl
-bm
-cw
-cz
-bb
-bb
-cT
-ds
-dT
-er
-er
-er
-fx
-fW
-gk
-gF
-er
-hb
-er
-er
-er
-er
-hb
-er
-er
-jt
-jG
-jQ
-kg
-kp
-kA
-kD
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(80,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-ah
-ah
-ah
-ah
-ah
-aL
-aM
-aU
-aU
-aU
-bn
-bx
-bx
-bx
-bx
-bZ
-bx
-bx
-bx
-cn
-bx
-cA
-bx
-bx
-cU
-dt
-dU
-es
-eT
-fo
-fy
-fo
-gl
-gG
-fo
-fo
-fo
-fo
-id
-fo
-iG
-fo
-fo
-ju
-jH
-gl
-kh
-kq
-kB
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(81,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-ag
-ag
-ag
-ag
-aM
-aM
-aM
-aM
-bo
-cx
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-co
-cx
-aM
-aM
-aM
-cV
-du
-cV
-cV
-cV
-cV
-fz
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-hd
-hd
-hd
-hd
-ki
-kr
-hd
-kE
-kE
-fJ
-fJ
-fJ
-fJ
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(82,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-at
-at
-ag
-ag
-aM
-aO
-aV
-bj
-bp
-bz
-bG
-aW
-aO
-aM
-cd
-aP
-bj
-cp
-bz
-bG
-aP
-aO
-cV
-dv
-dV
-et
-eU
-cV
-fA
-fX
-gm
-gH
-gO
-hc
-gH
-hE
-gH
-gH
-iH
-iW
-hd
-jv
-jv
-jR
-kj
-ks
-hd
-gI
-gI
-kJ
-kM
-kQ
-kT
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(83,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-at
-ag
-ag
-av
-ag
-aM
-aQ
-bc
-bk
-bq
-aU
-bH
-be
-bO
-aM
-ce
-be
-bk
-bq
-aU
-cB
-be
-bO
-cV
-dw
-dx
-eu
-eV
-cV
-fB
-fY
-fJ
-gI
-gP
-gI
-gI
-hF
-gI
-gI
-gI
-iX
-hd
-jv
-jv
-jv
-jv
-kt
-hd
-gJ
-gI
-kJ
-kN
-kR
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(84,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-aM
-aP
-bd
-bj
-br
-bx
-bG
-aR
-aP
-aM
-aP
-aP
-bj
-cq
-bx
-bG
-aP
-cM
-cV
-dx
-dx
-ev
-eW
-cV
-fC
-fZ
-fJ
-gI
-gQ
-hd
-hd
-hG
-hd
-hd
-hd
-iY
-hd
-jw
-jv
-jv
-jv
-kt
-hd
-gI
-gI
-kJ
-gI
-hf
-kF
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(85,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-ag
-ag
-ag
-at
-ag
-ag
-ag
-aM
-aM
-aM
-aM
-bs
-aU
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-bs
-aU
-aM
-aM
-aM
-cV
-dy
-dx
-ew
-eX
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-hr
-hH
-ie
-hd
-nm
-iZ
-jm
-jx
-jI
-jS
-jx
-ku
-hd
-kE
-kE
-fJ
-gI
-fJ
-fJ
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(86,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-ag
-ag
-ag
-ag
-aM
-aO
-aP
-bj
-br
-bA
-bG
-bJ
-aO
-aM
-aO
-ch
-bj
-cq
-bx
-bG
-aP
-aO
-cV
-dz
-dx
-dx
-eY
-cV
-fD
-fZ
-fJ
-gJ
-gR
-hd
-hs
-hH
-if
-hd
-iJ
-ja
-jn
-jv
-jJ
-jT
-kk
-jv
-hd
-gI
-gI
-kK
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(87,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-av
-ag
-ag
-ag
-aM
-aQ
-be
-bk
-bq
-aU
-bH
-be
-bP
-aM
-aQ
-be
-bk
-bq
-aU
-bH
-be
-cN
-cV
-dz
-dW
-ex
-eZ
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-hr
-hH
-ig
-hd
-iI
-jb
-jn
-jv
-jK
-jT
-jv
-jv
-hd
-kF
-gI
-fJ
-fJ
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(88,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-ag
-ag
-ag
-aM
-aV
-bf
-bj
-br
-bx
-bG
-aV
-aW
-aM
-aP
-aP
-bj
-cq
-bx
-bG
-ch
-aW
-cV
-dx
-dX
-dx
-fa
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-hr
-hI
-ig
-hd
-iK
-iI
-jn
-jv
-jL
-jT
-kl
-jv
-hd
-gI
-kF
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(89,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-ag
-ag
-ag
-ag
-ag
-aM
-aM
-aM
-aM
-bs
-bB
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-bs
-aU
-aM
-aM
-aM
-cV
-dx
-dx
-ey
-fb
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-ht
-hH
-ih
-hd
-iI
-iI
-jn
-jv
-jM
-jT
-jv
-jv
-hd
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(90,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-ag
-ag
-aM
-aO
-aP
-bj
-br
-bx
-bG
-aP
-aO
-aM
-aO
-aP
-bj
-cq
-bx
-bG
-aP
-aO
-cV
-dx
-dY
-ez
-fc
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-hd
-hJ
-hd
-hd
-iI
-iI
-jn
-jv
-jL
-jT
-jv
-jv
-hd
-gI
-kF
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(91,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-ag
-ag
-aM
-aQ
-bg
-bk
-bq
-aU
-bH
-be
-bO
-aM
-aQ
-be
-bk
-bq
-aU
-bH
-be
-bO
-cV
-dA
-cV
-cV
-cV
-cV
-fD
-fZ
-fJ
-gK
-gR
-hd
-hu
-hK
-ii
-hd
-iL
-iI
-jn
-jv
-jN
-jT
-jv
-jv
-hd
-gJ
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(92,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-ag
-ag
-aw
-ag
-aM
-aR
-aP
-bj
-br
-bx
-bG
-aP
-bQ
-aM
-cf
-aP
-bj
-cq
-bx
-bG
-aP
-cO
-cV
-dB
-dB
-eA
-fd
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-hv
-hL
-hw
-hd
-iI
-iI
-jn
-jv
-jO
-jU
-jv
-jv
-hd
-hy
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(93,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-ag
-ag
-ag
-ag
-ag
-aM
-aM
-aM
-aM
-bs
-aU
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-bs
-aU
-aM
-aM
-aM
-cV
-dC
-dB
-dB
-fe
-cV
-fC
-fZ
-fJ
-gI
-gS
-hd
-hd
-hM
-hd
-hd
-hd
-hd
-hd
-jw
-jv
-jv
-jv
-jv
-hd
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(94,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-aw
-ag
-ag
-ag
-aM
-aO
-aP
-bj
-br
-bx
-bG
-aV
-aO
-aM
-aO
-aP
-bj
-cq
-bx
-bG
-aP
-cP
-cV
-dD
-dB
-dB
-ff
-cV
-fC
-fZ
-fJ
-gI
-gR
-hd
-hw
-hw
-hw
-hw
-hw
-hw
-hd
-jv
-jv
-jv
-jv
-jv
-hd
-kF
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(95,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-af
-ag
-ag
-ag
-aM
-aQ
-bh
-bl
-bq
-aU
-bH
-be
-bO
-aM
-cg
-be
-bk
-bq
-aU
-bH
-be
-cQ
-cV
-dE
-dZ
-dB
-dB
-cV
-fE
-fZ
-fJ
-gI
-gR
-hd
-hw
-hN
-hN
-hN
-hw
-jc
-hd
-jv
-jv
-jV
-jV
-jV
-hd
-kF
-hy
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(96,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-af
-ag
-ag
-aM
-aW
-aW
-bj
-bt
-bC
-bG
-aW
-aR
-aM
-ch
-bf
-bj
-cr
-bC
-bG
-aP
-aV
-cV
-dF
-ea
-eB
-fg
-cV
-fF
-fZ
-fJ
-gJ
-gR
-hd
-hx
-hO
-ij
-iy
-hw
-jd
-hd
-jv
-jv
-jW
-jN
-jL
-hd
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(97,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-af
-af
-af
-af
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-aM
-cV
-cV
-cV
-cV
-cV
-cV
-fG
-fZ
-fJ
-gI
-gR
-hd
-hw
-hP
-ik
-iz
-hw
-hw
-hd
-jv
-jv
-jL
-jv
-jv
-hd
-gK
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(98,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-eC
-fh
-fp
-fH
-fZ
-fJ
-gI
-gR
-hd
-hw
-hQ
-hQ
-hQ
-hw
-hw
-hd
-jv
-jv
-jN
-jv
-kv
-hd
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-kY
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(99,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-eC
-fi
-fq
-fI
-ga
-fJ
-gI
-gR
-hd
-hw
-hw
-hw
-hw
-hw
-hw
-jo
-jv
-jv
-jv
-km
-kw
-hd
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(100,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cC
-cH
-cH
-cH
-cH
-eb
-cs
-fj
-cm
-fJ
-fJ
-fJ
-fJ
-gT
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-hd
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(101,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-ct
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-fk
-cm
-ad
-ad
-fJ
-gI
-gU
-he
-gI
-gI
-hy
-gI
-gI
-gI
-gI
-gI
-gI
-gI
-gI
-gI
-gI
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(102,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-fJ
-gI
-gV
-hf
-hy
-gI
-gI
-gI
-gI
-gI
-hf
-gI
-gI
-gI
-hy
-gI
-hf
-gI
-gI
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(103,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-fJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(104,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(105,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(106,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(107,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(108,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(109,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-ct
-cs
-cD
-cs
-cs
-cs
-cs
-ec
-cs
-fk
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(110,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cE
-cI
-cI
-cI
-cI
-ed
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(111,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-cs
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(112,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-cm
-cu
-cu
-cu
-cu
-cu
-cu
-cu
-cu
-cu
-cu
-cm
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(113,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(114,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(115,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(116,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(117,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(118,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(119,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(120,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(121,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(122,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(123,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(124,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(125,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(126,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(127,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(128,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(129,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(130,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(131,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(132,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(133,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(134,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(135,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(136,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(137,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(138,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(139,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(140,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(141,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(142,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(143,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(144,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(145,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(146,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-ad
-ad
-ad
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(147,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(148,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(149,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(150,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(151,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(152,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(153,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(154,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(155,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(156,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(157,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(158,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(159,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(160,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(161,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(162,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(163,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(164,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-cW
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(165,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(166,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(167,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(168,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(169,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(170,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(171,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(172,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(173,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(174,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(175,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(176,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(177,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(178,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(179,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(180,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(181,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(182,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(183,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(184,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(185,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(186,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(187,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(188,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(189,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(190,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(191,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(192,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(193,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(194,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(195,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(196,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(197,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(198,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(199,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(200,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
diff --git a/maps/away/slavers/slavers_base_areas.dm b/maps/away/slavers/slavers_base_areas.dm
deleted file mode 100644
index be7805597bb..00000000000
--- a/maps/away/slavers/slavers_base_areas.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/area/slavers_base
- icon = 'maps/away/slavers/icons/areas.dmi'
-
-/area/slavers_base/maint
- name = "\improper Slavers Base Maintenance"
- icon_state = "maint"
-
-/area/slavers_base/dorms
- name = "\improper Slavers Dorms"
- icon_state = "dorms"
-
-/area/slavers_base/secwing
- name = "\improper Slavers Base Security Wing"
- icon_state = "secwing"
-
-/area/slavers_base/mort
- name = "\improper Slaves Mortuary"
- icon_state = "mort"
-
-/area/slavers_base/cells
- name = "\improper Slaves Cells"
- icon_state = "cells"
-
-/area/slavers_base/hallway
- name = "\improper Slavers Base Hallways"
- icon_state = "hallway"
-
-/area/slavers_base/med
- name = "\improper Slaves Medical Examination Room"
- icon_state = "med"
-
-/area/slavers_base/demo
- name = "\improper Slaves Demonstration room"
- icon_state = "demo"
-
-/area/slavers_base/powatm
- name = "\improper Slavers Base power and atmos room"
- icon_state = "powatm"
-
-/area/slavers_base/hangar
- name = "\improper Slavers Base Hangar"
- icon_state = "hangar"
\ No newline at end of file
diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm
index 808d13e1443..a0dbd796036 100644
--- a/maps/away/smugglers/smugglers.dmm
+++ b/maps/away/smugglers/smugglers.dmm
@@ -3,7 +3,7 @@
/turf/space,
/area/space)
"ab" = (
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"ac" = (
/turf/unsimulated/mask,
@@ -24,7 +24,7 @@
/turf/floor,
/area/smugglers/base)
"ah" = (
-/turf/floor,
+/turf/floor/barren,
/area/space)
"aj" = (
/obj/item/ammo_casing/pistol/magnum{
@@ -37,11 +37,11 @@
pixel_y = -5
},
/obj/effect/decal/cleanable/blood,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"ak" = (
/obj/effect/decal/cleanable/blood,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"al" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -98,7 +98,7 @@
pixel_y = 7
},
/obj/item/flashlight/flare/glowstick/yellow,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"av" = (
/obj/effect/decal/cleanable/blood/drip,
@@ -204,7 +204,7 @@
/turf/floor,
/area/smugglers/base)
"aF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 4
},
@@ -281,11 +281,11 @@
pixel_x = -25;
pixel_y = 25
},
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"aM" = (
/obj/random/trash,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"aN" = (
/obj/machinery/light/small{
@@ -367,7 +367,7 @@
/turf/floor,
/area/smugglers/base)
"aW" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor,
/area/smugglers/base)
"aX" = (
@@ -432,7 +432,7 @@
/obj/item/tool/xeno/hand{
pixel_x = -15
},
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"bh" = (
/obj/effect/floor_decal/industrial/warning{
@@ -476,7 +476,7 @@
/area/smugglers/base)
"bn" = (
/obj/structure/boulder,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"bo" = (
/obj/item/stack/material/ore/silver,
@@ -484,7 +484,7 @@
pixel_x = 10;
pixel_y = -5
},
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"bp" = (
/obj/structure/cable{
@@ -607,11 +607,11 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/office)
"bD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper,
/obj/item/pen,
/obj/item/flashlight/lamp,
@@ -661,11 +661,11 @@
/turf/floor,
/area/smugglers/base)
"bJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/office)
"bK" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/coin{
pixel_x = -5;
pixel_y = -3
@@ -777,8 +777,8 @@
/turf/wall,
/area/smugglers/dorms)
"cd" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -788,7 +788,7 @@
/obj/structure/noticeboard{
default_pixel_y = 30
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/table,
/obj/machinery/microwave{
pixel_y = 10
@@ -796,7 +796,7 @@
/turf/floor/tiled,
/area/smugglers/dorms)
"cf" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/closet/crate,
/obj/random/snack,
/obj/random/snack,
@@ -806,21 +806,21 @@
/turf/floor/tiled,
/area/smugglers/dorms)
"cg" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/closet/crate,
/obj/random/drinkbottle,
/obj/random/drinkbottle,
/turf/floor/tiled,
/area/smugglers/dorms)
"ch" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/computer/arcade,
/turf/floor/tiled,
/area/smugglers/dorms)
"ci" = (
/obj/structure/closet/crate/plastic/rations,
/obj/effect/decal/cleanable/cobweb2,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/dorms)
"cj" = (
@@ -828,8 +828,8 @@
/turf/floor/plating/airless,
/area/smugglers/dorms)
"cl" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable,
/obj/machinery/power/apc{
dir = 8;
@@ -839,12 +839,12 @@
/turf/floor/tiled,
/area/smugglers/dorms)
"cm" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/dorms)
"cn" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/dorms)
"co" = (
@@ -854,7 +854,7 @@
/turf/floor,
/area/smugglers/dorms)
"cp" = (
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/random/medical/lite,
/turf/floor/plating/airless,
/area/smugglers/dorms)
@@ -874,7 +874,7 @@
/area/smugglers/dorms)
"cs" = (
/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/paper/smug_3,
/obj/item/flame/fuelled/lighter,
/obj/random/coin,
@@ -882,7 +882,7 @@
/area/smugglers/dorms)
"ct" = (
/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/cash/c10,
/obj/random/smokes,
/obj/random/snack,
@@ -897,7 +897,7 @@
/area/smugglers/dorms)
"cv" = (
/obj/structure/closet,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/medical,
/obj/random/medical,
/obj/random/tech_supply,
@@ -910,29 +910,29 @@
/area/smugglers/dorms)
"cx" = (
/obj/structure/bed,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/dorms)
"cy" = (
/obj/structure/closet/smuggler,
/obj/random/suit,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/dorms)
"cz" = (
/obj/structure/bed,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/mob/living/simple_animal/hostile/malf_drone,
/turf/floor/tiled,
/area/smugglers/dorms)
"cA" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/floor/tiled,
/area/smugglers/dorms)
"cB" = (
/obj/machinery/light/small,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/smugglers/dorms)
"cC" = (
@@ -946,7 +946,7 @@
"db" = (
/obj/effect/decal/cleanable/blood,
/obj/abstract/landmark/corpse/doctor,
-/turf/floor,
+/turf/floor/barren,
/area/mine/explored)
"eb" = (
/obj/machinery/light/small{
diff --git a/maps/away/unishi/unishi-2.dmm b/maps/away/unishi/unishi-2.dmm
index b63e93afd20..f31f2097fe4 100644
--- a/maps/away/unishi/unishi-2.dmm
+++ b/maps/away/unishi/unishi-2.dmm
@@ -13,7 +13,7 @@
/turf/wall/titanium,
/area/space)
"ae" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/advdevice,
/obj/item/flashlight/lamp,
/turf/floor/carpet/red,
@@ -32,7 +32,7 @@
/turf/floor/carpet/red,
/area/unishi/library)
"ai" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp,
/turf/floor/carpet/red,
/area/unishi/library)
@@ -960,18 +960,18 @@
/turf/floor/tiled,
/area/unishi/meeting)
"cN" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/pen/fancy,
/turf/floor/tiled,
/area/unishi/meeting)
"cO" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pen/fancy,
/turf/floor/tiled,
/area/unishi/meeting)
"cP" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/folder/yellow,
/obj/item/pen/green,
/turf/floor/tiled,
@@ -1023,7 +1023,7 @@
/turf/floor/tiled,
/area/unishi/meeting)
"cX" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -1033,7 +1033,7 @@
/turf/floor/tiled,
/area/unishi/meeting)
"cY" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -1042,7 +1042,7 @@
/turf/floor/tiled,
/area/unishi/meeting)
"cZ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -1982,7 +1982,7 @@
/turf/floor/tiled/dark,
/area/unishi/common)
"fy" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/snack,
/obj/item/flashlight/lamp,
/turf/floor/tiled/dark,
@@ -2008,7 +2008,7 @@
/turf/floor/tiled/dark,
/area/unishi/common)
"fC" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/flashlight/lamp,
/turf/floor/tiled/dark,
@@ -2283,7 +2283,7 @@
/turf/space,
/area/unishi/smresearch)
"go" = (
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/item/defibrillator,
/turf/floor/tiled/techfloor,
/area/unishi/smresearch)
@@ -2397,7 +2397,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 4
},
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm
index 8ad33994f7d..df8752f14c5 100644
--- a/maps/away/unishi/unishi-3.dmm
+++ b/maps/away/unishi/unishi-3.dmm
@@ -639,7 +639,7 @@
/area/unishi/med)
"cd" = (
/obj/structure/bed/chair/armchair/black,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"ce" = (
/obj/machinery/vending/tool,
@@ -757,7 +757,7 @@
/obj/structure/cable{
icon_state = "0-2"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cr" = (
/obj/structure/cable{
@@ -842,17 +842,17 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cy" = (
/obj/machinery/vending/games,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cz" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cA" = (
/obj/effect/wingrille_spawn/reinforced,
@@ -893,24 +893,24 @@
/obj/structure/bed/chair/armchair/beige{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/cell/crap,
/obj/item/stock_parts/circuitboard/gyrotron_control,
/obj/item/paper_bin,
/obj/machinery/light/small{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cI" = (
/obj/effect/shuttle_landmark/nav_unishi/nav1,
/turf/space,
/area/space)
"cJ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/trash/raisins,
/obj/item/pizzabox/margherita,
/obj/random/advdevice,
@@ -920,22 +920,22 @@
/turf/floor/tiled,
/area/unishi/living)
"cK" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/dice,
/obj/item/deck/cards,
/obj/item/pen/fancy,
/obj/random/tech_supply,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cL" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/board,
/obj/item/book/manual/mass_spectrometry,
/obj/item/book/fluff/stasis,
/turf/floor/tiled,
/area/unishi/living)
"cM" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
@@ -970,7 +970,7 @@
/obj/structure/bed/chair/armchair/black{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/lounge)
"cQ" = (
/obj/structure/bed/chair/padded/brown{
@@ -1024,7 +1024,7 @@
/turf/floor/tiled,
/area/unishi/living)
"cY" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/trash/raisins,
/obj/item/book/manual/nuclear,
/turf/floor/tiled,
@@ -1091,7 +1091,7 @@
/turf/floor/tiled,
/area/unishi/kitchen)
"dg" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/trash/candy,
/obj/machinery/recharger,
/turf/floor/tiled,
@@ -1268,7 +1268,7 @@
/turf/floor/tiled,
/area/unishi/living)
"dD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/cane/fancy/sword,
/obj/item/clothing/suit/radiation,
/turf/floor/tiled,
@@ -1441,7 +1441,7 @@
/turf/floor/tiled,
/area/unishi/living)
"eb" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/poster,
/obj/item/grooming/comb/colorable/random,
/obj/random/advdevice,
@@ -1625,11 +1625,11 @@
/obj/random/clothing,
/obj/random/clothing,
/obj/random/hat,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"ey" = (
/obj/structure/bed/padded,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"ez" = (
/obj/structure/closet/toolcloset,
@@ -1638,17 +1638,17 @@
"eA" = (
/obj/structure/bed/padded,
/obj/item/bedsheet/rd,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eB" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
/obj/item/toy/plushie/lizard,
/obj/random/advdevice,
/obj/random/drinkbottle,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eC" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -1657,7 +1657,7 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eD" = (
/obj/machinery/door/airlock{
@@ -1711,22 +1711,22 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eI" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eJ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/grooming/brush,
/obj/item/cosmetics/lipstick/black,
/obj/item/cosmetics/lipstick/green,
/obj/item/cosmetics/lipstick/violet,
/obj/random/drinkbottle,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eK" = (
/obj/structure/bed/chair/office,
@@ -1734,7 +1734,7 @@
dir = 4;
icon_state = "bulb1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eL" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -1750,10 +1750,10 @@
/obj/machinery/light/small{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eN" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -1777,28 +1777,28 @@
/obj/structure/bed/chair/office/comfy/black{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eS" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pen/fancy,
/obj/random/drinkbottle,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eV" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -1809,7 +1809,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eX" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -1820,7 +1820,7 @@
/obj/machinery/light{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eY" = (
/obj/structure/safe,
@@ -1837,7 +1837,7 @@
/obj/item/cash/c200,
/obj/item/cash/c200,
/obj/item/grenade/supermatter,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"eZ" = (
/obj/structure/safe,
@@ -1850,14 +1850,14 @@
/obj/item/cash/c500,
/obj/item/pen/reagent/sleepy,
/obj/random/hardsuit,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"fa" = (
/obj/machinery/light/small{
dir = 4;
icon_state = "bulb1"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"fb" = (
/obj/effect/wallframe_spawn/reinforced/hull,
@@ -1865,7 +1865,7 @@
/area/unishi/living)
"fc" = (
/obj/structure/bed/chair/armchair/black,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"fd" = (
/obj/structure/table/reinforced,
@@ -1873,7 +1873,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"fe" = (
/obj/abstract/map_data{
@@ -1936,7 +1936,7 @@
/obj/random/contraband,
/obj/random/clothing,
/obj/random/hat,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"qS" = (
/obj/structure/closet/secure_closet/personal/cabinet,
@@ -1944,12 +1944,12 @@
/obj/random/drinkbottle,
/obj/random/clothing,
/obj/random/hat,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"sS" = (
/obj/structure/closet/secure_closet/personal/cabinet,
/obj/random/clothing,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"ur" = (
/obj/machinery/hologram/holopad/longrange/remoteship,
@@ -1975,7 +1975,7 @@
/obj/random/contraband,
/obj/random/clothing,
/obj/random/hat,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/unishi/living)
"AF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
diff --git a/maps/away/unishi/unishi.dm b/maps/away/unishi/unishi.dm
index e82bfab4257..0b7112c782b 100644
--- a/maps/away/unishi/unishi.dm
+++ b/maps/away/unishi/unishi.dm
@@ -1,13 +1,14 @@
#include "unishi_areas.dm"
#include "unishi_jobs.dm"
#include "../../../mods/content/xenobiology/_xenobiology.dme"
+#include "../../../mods/content/supermatter/_supermatter.dme"
/obj/abstract/submap_landmark/joinable_submap/unishi
- name = "SRV Verne"
+ name = "SRV Verne"
archetype = /decl/submap_archetype/derelict/unishi
/decl/submap_archetype/derelict/unishi
- descriptor = "derelict research vessel"
+ name = "derelict research vessel"
crew_jobs = list(
/datum/job/submap/unishi_crew,
/datum/job/submap/unishi_researcher
diff --git a/maps/away/yacht/yacht.dmm b/maps/away/yacht/yacht.dmm
index 3e56a19c9e6..87f0973c888 100644
--- a/maps/away/yacht/yacht.dmm
+++ b/maps/away/yacht/yacht.dmm
@@ -15,8 +15,8 @@
/turf/floor/tiled/airless/broken,
/area/yacht/bridge)
"ae" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"af" = (
/obj/effect/shuttle_landmark/nav_yacht/nav2,
@@ -30,60 +30,60 @@
/turf/wall/titanium,
/area/yacht/bridge)
"ai" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/computer/ship/helm,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"aj" = (
/obj/machinery/computer/ship/sensors{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"ak" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/structure/bed/chair/comfy/captain,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"al" = (
/obj/machinery/computer/ship/engines{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"am" = (
/obj/item/folder/blue,
/obj/item/form_printer,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/drinks/glass2/coffeecup,
/obj/item/newspaper,
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/energy,
/obj/item/paper{
info = "I used up all of my energy. I am hopelessly lost. This ship has become my grave. They did it. The intelligence agency that no one ever talks about. Sol Gov wanted their revenge, and they got it. They easily could have killed me on my ship, or tortured me, but they knew that floating here through space would be the worst possible torture. "
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"an" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/mob/living/simple_animal/hostile/giant_spider/hunter,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"ao" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/maintenance/clean,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"ap" = (
/obj/structure/filing_cabinet/chestdrawer,
/obj/effect/decal/cleanable/cobweb2,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"aq" = (
/obj/machinery/light{
@@ -94,16 +94,16 @@
/obj/item/rig/medical/equipped,
/obj/item/gun/energy/captain,
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"ar" = (
/obj/machinery/alarm{
dir = 1;
pixel_y = -22
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"as" = (
/obj/structure/cable{
@@ -111,8 +111,8 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"at" = (
/obj/structure/cable{
@@ -122,8 +122,8 @@
name = "Yacht bridge";
pixel_y = -24
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"au" = (
/obj/machinery/light{
@@ -131,8 +131,8 @@
icon_state = "tube1"
},
/obj/structure/reagent_dispensers/water_cooler,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/yacht/bridge)
"av" = (
/obj/structure/mirror,
@@ -145,7 +145,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/door/airlock,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/bridge)
"ax" = (
/turf/wall/walnut,
@@ -179,7 +179,7 @@
/obj/structure/hygiene/shower{
pixel_y = 20
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/freezer,
/area/yacht/living)
"aE" = (
@@ -188,15 +188,15 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aF" = (
/obj/structure/bed/chair/wood/wings{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aG" = (
/obj/machinery/light{
@@ -205,29 +205,29 @@
/obj/structure/table/marble,
/obj/item/trash/snack_bowl,
/obj/machinery/reagentgrinder/juicer,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/paper{
info = "Tonight I woke up to a sound I hoped to have never heard, a small explosion. I rushed to the bridge to diagnose the damage and saw the worst possible news. My solar tracker is gone, and so is the fucking computer. No way to override the settings now, because the assholes EMPd the computer. No way to charge my SMES reliably, and no way to heat the fuel. I am stuck in the water! Unheated, this gas will not be enough to get absolutely anywhere near a port. This is bad. Real bad. The current charge on SMES is 20 percent, so I'll just try and orient the ship to hit the current star at maximum efficiency so we will charge at 100, and maybe make it to the next solar system. The next port is in the orbit of a Gas giant named Duma. Maybe I can dock there and repair my array. I freaking knew I needed to get a generator. I spent all of the money the Terrans gave me, and this piece of shit is all I could get. "
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aH" = (
/obj/machinery/disposal,
/obj/structure/disposalpipe/trunk{
dir = 1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aI" = (
/obj/item/towel/random,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/freezer,
/area/yacht/living)
"aJ" = (
/obj/structure/hygiene/toilet{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/freezer,
/area/yacht/living)
"aK" = (
@@ -239,24 +239,24 @@
/obj/machinery/light{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aL" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aM" = (
/obj/structure/table/marble,
/obj/item/pizzabox/vegetable,
/obj/item/chems/glass/rag,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aN" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/junk,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aO" = (
/obj/machinery/vending/wallmed1,
@@ -264,25 +264,25 @@
/area/yacht/living)
"aP" = (
/obj/machinery/door/airlock,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/yacht/living)
"aQ" = (
/obj/structure/table/marble,
/obj/item/deck/cards,
/obj/item/dice,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aR" = (
/obj/effect/decal/cleanable/blood/gibs/robot/up,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aS" = (
/obj/structure/table/marble,
/obj/machinery/microwave,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aT" = (
/obj/effect/decal/cleanable/cobweb,
@@ -296,7 +296,7 @@
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/spider/stickyweb,
/mob/living/simple_animal/hostile/giant_spider/hunter,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/living)
"aV" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -307,7 +307,7 @@
},
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/spider/stickyweb,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/living)
"aW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -319,7 +319,7 @@
/obj/structure/emergency_dispenser/north,
/obj/effect/decal/cleanable/blood/drip,
/obj/machinery/door/airlock,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aX" = (
/obj/structure/cable{
@@ -327,8 +327,8 @@
},
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aY" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -337,8 +337,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"aZ" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -350,9 +350,9 @@
/obj/structure/table/marble,
/obj/item/book/manual/chef_recipes,
/obj/item/chems/drinks/pitcher,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/drinkbottle,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"ba" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
@@ -360,8 +360,8 @@
},
/obj/effect/decal/cleanable/blood/gibs/robot/down,
/obj/effect/decal/cleanable/blood/gibs/robot/up,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bb" = (
/obj/machinery/light{
@@ -369,8 +369,8 @@
icon_state = "tube1"
},
/obj/machinery/vending/dinnerware,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bc" = (
/obj/structure/bed/padded,
@@ -380,17 +380,17 @@
/area/yacht/living)
"bd" = (
/obj/effect/spider/stickyweb,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/living)
"bf" = (
/obj/effect/decal/cleanable/blood/gibs/robot/limb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bg" = (
/obj/structure/closet/secure_closet/freezer/fridge,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bh" = (
/obj/structure/cable{
@@ -399,8 +399,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bk" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -419,7 +419,7 @@
/area/yacht/living)
"bn" = (
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/freezer,
/area/yacht/living)
"bo" = (
@@ -427,11 +427,11 @@
/turf/floor/tiled/freezer,
/area/yacht/living)
"bp" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/paper{
info = "I have accepted my fate. I will go into EVA with one of the cyanide pills in my mouth, and I will float off. I want a military funeral, and I will arrange it myself. Good bye all. I have earned and sealed my fate. "
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bq" = (
/obj/structure/bookcase,
@@ -454,8 +454,8 @@
dir = 4;
icon_state = "tube1"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bu" = (
/turf/floor/carpet/purple,
@@ -478,7 +478,7 @@
/turf/floor/rock/sand/water,
/area/yacht/living)
"bz" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/freezer,
/area/yacht/living)
"bA" = (
@@ -492,8 +492,8 @@
dir = 8
},
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bB" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -503,8 +503,8 @@
dir = 4
},
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bC" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -514,7 +514,7 @@
dir = 4
},
/obj/machinery/door/airlock,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -540,7 +540,7 @@
},
/obj/item/bible,
/obj/item/pen/blue,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper{
info = "Let me introduce myself. My name is Commander Archibald McKinley, although the Fleet fucks think that I do not deserve the title. Well, fuck them. They accused me of facilitating a destruction of the ship I was CO of. A small missile cruiser, with zero to fucking none point defenses was attacked, and they first accuse me of escaping before any of my crew. What kind of person wouldn't expect someone to escape when their ship is on fire? It's lunacy. But it only got worse. Then they said that I helped the Terrans take the ship. Well fuck them, they are wrong. That's non sense. I have no connection to the Terrans. They said that I got a large sum of money from them in order to betray my ship's position, which is once again total nonsense. I've got about 20 years of life left here, and I know that I will be safe with my ship here. I need to resupply once every 5 years, given how much food and fuel I have, and I've got enough range to go to pretty much any known part of the galaxy, in complete silence, as we are totally solar powered. I wish I could afford ion thrusters to not have to rely on gas for propulsion, but, our gas heaters should provide us with enough pressure to get anywhere in relative decent speed. Also, I got a robot butler who cooks delicious food for me! No more crappy lance corporal food, eh"
},
@@ -556,7 +556,7 @@
"bI" = (
/obj/machinery/light,
/obj/item/clothing/shoes/swimmingfins,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/freezer,
/area/yacht/living)
"bJ" = (
@@ -566,14 +566,14 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/blood/gibs/robot/limb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bK" = (
/obj/effect/decal/cleanable/blood/gibs/robot/down,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/floodlight,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bL" = (
/obj/machinery/light/small,
@@ -596,7 +596,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/blood/gibs/robot/down,
/obj/machinery/door/airlock,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bP" = (
/turf/wall/walnut,
@@ -609,24 +609,24 @@
/area/yacht/engine)
"bR" = (
/obj/machinery/atmospherics/unary/tank/air,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"bS" = (
/obj/structure/tank_rack/oxygen,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"bT" = (
/obj/item/cell/hyper,
/obj/item/book/manual/engineering_guide,
/obj/item/rcd,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/computer/ship/engines,
/turf/floor/plating,
/area/yacht/engine)
"bU" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/power/smes/buildable,
/obj/structure/cable{
icon_state = "0-4"
@@ -645,40 +645,40 @@
name = "Yacht engine";
pixel_y = 24
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"bW" = (
/obj/item/chems/spray/extinguisher,
/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bX" = (
/obj/machinery/vending/hydronutrients,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bY" = (
/obj/machinery/seed_storage/garden,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"bZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/visible/supply,
/turf/floor/plating,
/area/yacht/engine)
"ca" = (
/obj/structure/closet/secure_closet/freezer/kitchen,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cb" = (
/obj/machinery/atmospherics/binary/pump,
/obj/machinery/space_heater,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cc" = (
@@ -691,14 +691,14 @@
/area/yacht/engine)
"cd" = (
/obj/structure/closet/crate/hydroponics,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"ce" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stock_parts/circuitboard/broken,
/turf/floor/plating,
/area/yacht/engine)
@@ -728,8 +728,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cj" = (
/obj/structure/cable{
@@ -739,20 +739,20 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"ck" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cl" = (
/obj/structure/janitorialcart,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cm" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -762,21 +762,21 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cn" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"co" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/portable_atmospherics/powered/pump,
/turf/floor/plating,
/area/yacht/engine)
@@ -843,7 +843,7 @@
/turf/floor/plating/airless,
/area/yacht/engine)
"cu" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -857,30 +857,30 @@
pixel_x = -24
},
/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cE" = (
/obj/effect/spider/stickyweb,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cF" = (
/obj/structure/reagent_dispensers/watertank,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cJ" = (
@@ -904,12 +904,12 @@
/area/yacht/engine)
"cN" = (
/obj/structure/closet/toolcloset,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cQ" = (
@@ -921,8 +921,8 @@
pixel_x = -23
},
/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cR" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -931,32 +931,32 @@
},
/obj/item/tool/spade,
/obj/item/chems/glass/bucket,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cS" = (
/obj/machinery/light,
/obj/structure/reagent_dispensers/beerkeg,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cW" = (
/obj/structure/closet/secure_closet/freezer/kitchen,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"cY" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"cZ" = (
@@ -966,7 +966,7 @@
"da" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/item/caution/cone,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"db" = (
@@ -975,13 +975,13 @@
/area/yacht/engine)
"dc" = (
/obj/structure/closet/wardrobe/pjs,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"dd" = (
/obj/structure/closet/wardrobe/suit,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
"df" = (
/obj/structure/closet/secure_closet/bar,
@@ -989,7 +989,7 @@
/area/yacht/engine)
"dg" = (
/obj/structure/closet/crate/plastic/rations,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"dh" = (
@@ -997,7 +997,7 @@
dir = 1;
level = 2
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"di" = (
@@ -1010,11 +1010,11 @@
/area/yacht/engine)
"dk" = (
/obj/machinery/atmospherics/unary/heater,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"dm" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1;
level = 2
@@ -1025,7 +1025,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"do" = (
@@ -1034,7 +1034,7 @@
dir = 4;
pixel_y = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/meter,
/turf/floor/plating,
/area/yacht/engine)
@@ -1080,7 +1080,7 @@
/area/yacht/engine)
"dt" = (
/obj/machinery/atmospherics/pipe/manifold4w/visible/black,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/meter,
/obj/machinery/light/small{
dir = 8
@@ -1088,7 +1088,7 @@
/turf/floor/plating,
/area/yacht/engine)
"du" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 10
},
@@ -1096,21 +1096,21 @@
/area/yacht/engine)
"dv" = (
/obj/machinery/atmospherics/pipe/simple/visible/black,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"dw" = (
/obj/machinery/atmospherics/unary/heater{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"dx" = (
/turf/floor/reinforced/carbon_dioxide,
/area/yacht/engine)
"dy" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/visible/black,
/turf/floor/plating,
/area/yacht/engine)
@@ -1119,7 +1119,7 @@
dir = 8
},
/obj/structure/window/reinforced,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"dA" = (
@@ -1127,7 +1127,7 @@
dir = 10
},
/obj/structure/window/reinforced,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/recharge_station,
/turf/floor/plating,
/area/yacht/engine)
@@ -1168,13 +1168,13 @@
/obj/item/clothing/suit/det_trench/grey,
/obj/item/clothing/gloves/ring/cti,
/obj/item/clothing/costume/oldman,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/effect/spider/stickyweb,
/obj/random/cash,
/obj/random/cash,
/obj/random/cash,
/obj/random/projectile,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/yacht/living)
"fb" = (
/obj/machinery/button/access/exterior{
@@ -1188,7 +1188,7 @@
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/constructable_frame/computerframe,
/obj/machinery/button/access/interior{
id_tag = "yacht_airlock";
@@ -1205,7 +1205,7 @@
icon_state = "0-2"
},
/obj/item/toolbox/electrical,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -1218,7 +1218,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
@@ -1228,7 +1228,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/door/airlock/external/bolted{
id_tag = "yacht_outer"
},
@@ -1238,7 +1238,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
id_tag = "yacht_airlock";
pixel_y = 24;
@@ -1262,7 +1262,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -1278,7 +1278,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 1
},
@@ -1288,7 +1288,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/binary/pump{
dir = 8
},
@@ -1298,8 +1298,8 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/visible/universal{
dir = 4
},
@@ -1311,7 +1311,7 @@
dir = 8;
pixel_x = 24
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
@@ -1324,7 +1324,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/red{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"rb" = (
@@ -1334,7 +1334,7 @@
/turf/floor/plating,
/area/yacht/engine)
"sb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
@@ -1342,7 +1342,7 @@
/area/yacht/engine)
"tb" = (
/obj/structure/closet/firecloset,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
@@ -1350,14 +1350,14 @@
/area/yacht/engine)
"ub" = (
/obj/structure/closet/secure_closet/freezer/meat,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/yacht/engine)
"vb" = (
/obj/machinery/atmospherics/portables_connector{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/floor/plating,
/area/yacht/engine)
@@ -1369,7 +1369,7 @@
pixel_y = 20
},
/obj/item/bikehorn/rubberducky,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/soap,
/turf/floor/tiled/freezer,
/area/yacht/living)
@@ -1378,7 +1378,7 @@
/area/yacht/living)
"Hj" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
@@ -1386,9 +1386,9 @@
/area/yacht/engine)
"Ty" = (
/obj/structure/closet/secure_closet/freezer/meat,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/yew,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/yew,
/area/yacht/living)
(1,1,1) = {"
diff --git a/maps/away_sites_testing/away_sites_testing.dm b/maps/away_sites_testing/away_sites_testing.dm
index 3f324d268ea..ab5e2b12a3d 100644
--- a/maps/away_sites_testing/away_sites_testing.dm
+++ b/maps/away_sites_testing/away_sites_testing.dm
@@ -17,7 +17,6 @@
#include "../away/mining/mining.dm"
#include "../away/mobius_rift/mobius_rift.dm"
#include "../away/smugglers/smugglers.dm"
- #include "../away/slavers/slavers_base.dm"
#include "../away/unishi/unishi.dm"
#include "../away/yacht/yacht.dm"
#include "../away/liberia/liberia.dm"
diff --git a/maps/away_sites_testing/away_sites_testing_define.dm b/maps/away_sites_testing/away_sites_testing_define.dm
index 6f3a96274ee..fd1868d5c2a 100644
--- a/maps/away_sites_testing/away_sites_testing_define.dm
+++ b/maps/away_sites_testing/away_sites_testing_define.dm
@@ -4,10 +4,14 @@
full_name = "Away Sites Testing Land"
path = "away_sites_testing"
overmap_ids = list(OVERMAP_ID_SPACE)
+ votable = FALSE
allowed_latejoin_spawns = list()
default_spawn = null
+/datum/map/away_sites_testing/validate()
+ return TRUE // Do not check for level lists, this is not a playable map.
+
// Set the observer spawn to include every flag so that CI flag checks pass.
/decl/spawnpoint/observer
spawn_flags = (SPAWN_FLAG_GHOSTS_CAN_SPAWN | SPAWN_FLAG_JOBS_CAN_SPAWN | SPAWN_FLAG_PRISONERS_CAN_SPAWN | SPAWN_FLAG_PERSISTENCE_CAN_SPAWN)
@@ -16,10 +20,10 @@
var/list/unsorted_sites = list_values(SSmapping.get_templates_by_category(MAP_TEMPLATE_CATEGORY_AWAYSITE))
var/list/sorted_sites = sortTim(unsorted_sites, /proc/cmp_sort_templates_tallest_to_shortest)
for (var/datum/map_template/A in sorted_sites)
- A.load_new_z(centered = FALSE)
+ A.load_new_z()
testing("Spawning [A] in [english_list(SSmapping.get_connected_levels(world.maxz))]")
if(A.template_flags & TEMPLATE_FLAG_TEST_DUPLICATES)
- A.load_new_z(centered = FALSE)
+ A.load_new_z()
testing("Spawning [A] in [english_list(SSmapping.get_connected_levels(world.maxz))]")
/proc/cmp_sort_templates_tallest_to_shortest(var/datum/map_template/a, var/datum/map_template/b)
diff --git a/maps/example/example-3.dmm b/maps/example/example-3.dmm
index 5b89fac02e5..abffda753cc 100644
--- a/maps/example/example-3.dmm
+++ b/maps/example/example-3.dmm
@@ -227,9 +227,8 @@
/turf/floor,
/area/example/third)
"MO" = (
-/obj/abstract/level_data_spawner/main_level{
+/obj/abstract/level_data_spawner/admin_level{
name = "Example Third Deck";
-
},
/turf/space,
/area/space)
diff --git a/maps/example/example_define.dm b/maps/example/example_define.dm
index 9c48d50899f..5f8a3a80c16 100644
--- a/maps/example/example_define.dm
+++ b/maps/example/example_define.dm
@@ -2,6 +2,7 @@
name = "Testing"
full_name = "Testing Site"
path = "example"
+ votable = FALSE
lobby_screens = list(
'maps/example/example_lobby.png'
diff --git a/maps/example/example_jobs.dm b/maps/example/example_jobs.dm
index e3ad5c0c488..28d5cf504c6 100644
--- a/maps/example/example_jobs.dm
+++ b/maps/example/example_jobs.dm
@@ -1,7 +1,6 @@
/datum/map/example
default_job_type = /datum/job/example
default_department_type = /decl/department/example
- id_hud_icons = 'maps/example/hud.dmi'
/datum/job/example
title = "Tourist"
@@ -13,9 +12,10 @@
access = list()
minimal_access = list()
outfit_type = /decl/outfit/job/tourist
+ hud_icon = 'maps/example/hud.dmi'
department_types = list(
/decl/department/example
- )
+ )
/decl/outfit/job/tourist
name = "Job - Testing Site Tourist"
diff --git a/maps/example/example_unit_testing.dm b/maps/example/example_unit_testing.dm
index 6c4c9380ab3..df857c78a41 100644
--- a/maps/example/example_unit_testing.dm
+++ b/maps/example/example_unit_testing.dm
@@ -9,3 +9,11 @@
/obj/abstract/map_data/example
height = 3
+
+// Enforce that this map must not have any modpacks, to ensure core code compiles on its own.
+// I'd do this in setup_map on the example map datum but that happens before modpack init.
+// This catches any modpacks accidentally included by core code, default away sites, space/planet ruin maps, etc.
+/datum/controller/subsystem/modpacks/Initialize()
+ . = ..()
+ if(length(loaded_modpacks))
+ CRASH("Example map had the following modpacks loaded: [json_encode(loaded_modpacks)]")
\ No newline at end of file
diff --git a/maps/example/hud.dmi b/maps/example/hud.dmi
index 89dd2f9a079..c2c456e9d50 100644
Binary files a/maps/example/hud.dmi and b/maps/example/hud.dmi differ
diff --git a/maps/exodus/exodus-1.dmm b/maps/exodus/exodus-1.dmm
index c76876085ba..bd953735089 100644
--- a/maps/exodus/exodus-1.dmm
+++ b/maps/exodus/exodus-1.dmm
@@ -430,7 +430,7 @@
/obj/item/deck/cards{
pixel_y = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/sub/port)
"bn" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
@@ -441,7 +441,7 @@
"bo" = (
/obj/structure/table/gamblingtable,
/obj/random/coin,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/sub/port)
"bp" = (
/obj/random/obstruction,
@@ -464,7 +464,7 @@
/obj/structure/bed/chair/wood/wings{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/sub/port)
"bt" = (
/obj/structure/bed/chair/wood/wings{
@@ -2424,7 +2424,7 @@
/turf/floor/plating,
/area/exodus/maintenance/sub/central)
"gJ" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/space,
/area/space)
"gK" = (
@@ -3496,8 +3496,7 @@
department = "Atmospherics";
name = "Atmos RC";
pixel_y = 32;
- dir = 1;
-
+ dir = 1
},
/obj/structure/table/steel,
/turf/floor/tiled/steel_grid,
@@ -5467,6 +5466,10 @@
},
/turf/floor/lino,
/area/exodus/maintenance/telecomms)
+"rd" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"rj" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/machinery/camera/network/command{
@@ -16599,7 +16602,7 @@ aa
aa
aa
aa
-aa
+rd
aa
aa
aa
@@ -44175,7 +44178,7 @@ aa
aa
aa
aa
-aa
+rd
aa
aa
aa
@@ -49205,7 +49208,7 @@ aa
aa
aa
aa
-aa
+rd
aa
aa
aa
diff --git a/maps/exodus/exodus-2.dmm b/maps/exodus/exodus-2.dmm
index 7db00f89826..093c3433310 100644
--- a/maps/exodus/exodus-2.dmm
+++ b/maps/exodus/exodus-2.dmm
@@ -60,7 +60,7 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/security/detectives_office)
"aae" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/drinks/flask/barflask{
pixel_x = -4;
pixel_y = 8
@@ -200,7 +200,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/security/range)
"aaD" = (
-/obj/structure/target_stake,
+/obj/structure/target_stake/steel,
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/floor/tiled/steel_grid,
/area/exodus/security/range)
@@ -344,11 +344,11 @@
/area/exodus/security/range)
"aaV" = (
/obj/structure/closet/crate,
-/obj/item/target,
-/obj/item/target,
-/obj/item/target,
-/obj/item/target,
-/obj/item/target,
+/obj/item/training_dummy,
+/obj/item/training_dummy,
+/obj/item/training_dummy,
+/obj/item/training_dummy,
+/obj/item/training_dummy,
/obj/machinery/light,
/turf/floor/tiled/steel_grid,
/area/exodus/security/range)
@@ -1539,7 +1539,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/security/meeting)
"adu" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flame/candle{
pixel_x = -5;
pixel_y = 5
@@ -3537,7 +3537,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/security/main)
"ahH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/megaphone,
/obj/item/radio/off,
/turf/floor/tiled/dark,
@@ -3591,7 +3591,7 @@
/turf/floor/carpet,
/area/exodus/crew_quarters/heads/hos)
"ahO" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/keycard_auth{
dir = 8
},
@@ -3794,7 +3794,7 @@
/turf/floor/carpet,
/area/exodus/crew_quarters/heads/hos)
"air" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable/green{
icon_state = "1-4"
},
@@ -3809,7 +3809,7 @@
name = "east bump";
pixel_x = 24
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/recharger{
pixel_y = 4
},
@@ -3989,7 +3989,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/security/main)
"aiP" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/taperecorder,
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/heads/hos)
@@ -3997,7 +3997,7 @@
/turf/floor/carpet,
/area/exodus/crew_quarters/heads/hos)
"aiR" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -4008,7 +4008,7 @@
dir = 8;
pixel_x = 24
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = -3;
pixel_y = 7
@@ -4218,7 +4218,7 @@
pixel_y = -32;
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"ajm" = (
/obj/structure/window/reinforced{
@@ -4511,7 +4511,7 @@
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/heads/hos)
"ajL" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/newscaster{
pixel_x = 28;
pixel_y = 1
@@ -4955,7 +4955,7 @@
/turf/floor/lino,
/area/exodus/security/detectives_office)
"akD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/obj/item/secure_storage/safe{
pixel_x = 6;
@@ -4990,7 +4990,7 @@
/obj/machinery/alarm{
pixel_y = 22
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flash,
/obj/item/clothing/glasses/sunglasses,
/obj/item/chems/spray/pepper,
@@ -5136,7 +5136,7 @@
/turf/floor/carpet,
/area/exodus/security/detectives_office)
"akU" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray/plastic,
/obj/item/box/fancy/cigarettes/dromedaryco,
/obj/item/clothing/gloves/forensic,
@@ -5499,7 +5499,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/button/alternate/door{
id_tag = "detdoor";
name = "Office Door"
@@ -6354,7 +6354,7 @@
/obj/item/secure_storage/safe{
pixel_x = -23
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/turf/floor/lino,
/area/exodus/security/detectives_office)
@@ -6366,7 +6366,7 @@
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/button/alternate/door{
id_tag = "detdoor";
name = "Office Door"
@@ -6623,7 +6623,7 @@
dir = 8;
pixel_x = 22
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/photo_album{
pixel_y = -10
},
@@ -6736,7 +6736,7 @@
/turf/floor/carpet,
/area/exodus/security/detectives_office)
"aof" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flash,
/obj/item/chems/spray/pepper,
/obj/item/clothing/glasses/sunglasses,
@@ -7142,7 +7142,7 @@
/obj/machinery/light/small{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"apb" = (
/obj/structure/cable{
@@ -7429,11 +7429,11 @@
/turf/floor/tiled/steel_grid,
/area/exodus/security/lobby)
"apF" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"apG" = (
/obj/structure/bed/chair/wood/wings,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"apH" = (
/obj/machinery/hologram/holopad,
@@ -7850,14 +7850,14 @@
/obj/structure/table/gamblingtable,
/obj/item/board,
/obj/item/box/checkers/chess/red,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"aqu" = (
/obj/structure/table/gamblingtable,
/obj/item/deck/cards{
pixel_y = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"aqv" = (
/obj/structure/bed/chair{
@@ -7920,7 +7920,7 @@
/area/exodus/maintenance/dormitory)
"aqC" = (
/obj/item/stool/padded,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"aqD" = (
/turf/wall/r_wall/prepainted,
@@ -8045,7 +8045,7 @@
"aqP" = (
/obj/structure/table,
/obj/item/dice,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"aqQ" = (
/obj/machinery/light/small{
@@ -8415,7 +8415,7 @@
/obj/machinery/light/small{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"arx" = (
/turf/wall/prepainted,
@@ -8476,7 +8476,7 @@
"arD" = (
/obj/structure/table/gamblingtable,
/obj/item/box/checkers/chess,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"arE" = (
/turf/wall/prepainted,
@@ -8547,7 +8547,7 @@
/obj/machinery/vending/cigarette{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"arO" = (
/obj/machinery/door/blast/regular/open{
@@ -8675,7 +8675,7 @@
/obj/structure/bed/chair/wood/wings{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"asb" = (
/obj/structure/bed/chair{
@@ -9749,13 +9749,13 @@
/obj/item/bedsheet/mime,
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"auA" = (
/obj/structure/bed/padded,
/obj/item/bedsheet/mime,
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"auB" = (
/obj/machinery/alarm{
@@ -10030,7 +10030,7 @@
pixel_x = -22
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"avh" = (
/obj/structure/cable/green{
@@ -10215,7 +10215,7 @@
dir = 4
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"avC" = (
/obj/effect/floor_decal/corner/grey{
@@ -10558,7 +10558,7 @@
/turf/floor/plating,
/area/exodus/maintenance/library)
"awj" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"awk" = (
/obj/structure/bed/chair{
@@ -10752,7 +10752,7 @@
dir = 5
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"awG" = (
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{
@@ -10926,7 +10926,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"awZ" = (
/obj/structure/cable{
@@ -11020,7 +11020,7 @@
dir = 8
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"axj" = (
/obj/machinery/light_switch{
@@ -11030,7 +11030,7 @@
/obj/structure/bed/padded,
/obj/item/bedsheet/mime,
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"axk" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -11332,7 +11332,7 @@
dir = 1
},
/obj/structure/closet/secure_closet/personal,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"axT" = (
/turf/floor/tiled/dark,
@@ -11343,7 +11343,7 @@
pixel_x = 24
},
/obj/structure/closet/secure_closet/personal,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"axV" = (
/obj/structure/cable/green{
@@ -11372,7 +11372,7 @@
/turf/floor/plating,
/area/exodus/maintenance/security_port)
"axY" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/clothing/glasses/threedglasses,
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/sleep)
@@ -11385,7 +11385,7 @@
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/sleep)
"aya" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/coin,
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/sleep)
@@ -11395,7 +11395,7 @@
/area/exodus/crew_quarters/fitness)
"ayc" = (
/obj/machinery/hologram/holopad,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"ayd" = (
/obj/effect/floor_decal/industrial/warning{
@@ -11801,7 +11801,7 @@
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/sleep)
"ayQ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paicard,
/obj/structure/cable/green{
icon_state = "4-8"
@@ -11814,7 +11814,7 @@
/turf/floor/tiled/dark,
/area/exodus/crew_quarters/sleep)
"ayR" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -12341,7 +12341,7 @@
dir = 8
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"azW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -12392,7 +12392,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"aAc" = (
/obj/structure/disposalpipe/segment{
@@ -12444,7 +12444,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"aAi" = (
/obj/structure/cable{
@@ -13349,7 +13349,7 @@
pixel_y = 10
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"aCl" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
@@ -13683,7 +13683,7 @@
dir = 1
},
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"aCZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -13768,11 +13768,11 @@
/turf/floor/tiled/dark,
/area/shuttle/arrival/station)
"aDi" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/fabricator/book,
/obj/item/stack/material/panel/mapped/plastic/ten,
/obj/item/stack/material/plank/mapped/wood/ten,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aDj" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
@@ -13803,7 +13803,7 @@
/area/exodus/engineering/sublevel_access)
"aDm" = (
/obj/structure/reagent_dispensers/beerkeg,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aDn" = (
/obj/effect/floor_decal/industrial/warning{
@@ -13895,13 +13895,13 @@
/obj/machinery/status_display{
pixel_y = 32
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = 1;
pixel_y = 9
},
/obj/item/stack/package_wrap,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aDx" = (
/obj/structure/reagent_dispensers/peppertank{
@@ -14110,7 +14110,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aDW" = (
/obj/abstract/landmark{
@@ -14228,14 +14228,14 @@
/turf/floor/tiled/dark/monotile,
/area/exodus/gateway)
"aEh" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/reagentgrinder,
/obj/item/chems/drinks/shaker,
/obj/item/stack/package_wrap,
/obj/machinery/camera/network/civilian_east{
c_tag = "Bar Backroom"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aEi" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -14352,10 +14352,10 @@
/turf/floor/plating,
/area/exodus/maintenance/bar)
"aEv" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/gun/projectile/shotgun/doublebarrel,
/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aEw" = (
/obj/machinery/door/airlock{
@@ -14467,13 +14467,13 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/maintenance/auxsolarport)
"aEF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/item/stack/tape_roll/duct_tape,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aEG" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -14566,7 +14566,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aEQ" = (
/obj/structure/disposalpipe/segment{
@@ -14576,7 +14576,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aER" = (
/obj/structure/disposalpipe/segment{
@@ -14591,7 +14591,7 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aES" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -15006,7 +15006,7 @@
pixel_x = 24
},
/obj/structure/cable/green,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aFH" = (
/obj/machinery/network/requests_console{
@@ -15394,11 +15394,11 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/hologram/holopad,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aGp" = (
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aGq" = (
/obj/machinery/light{
@@ -15580,13 +15580,13 @@
/turf/floor/plating,
/area/exodus/maintenance/library)
"aGM" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/dice/d20,
/obj/item/dice,
/obj/item/radio/intercom{
pixel_y = 20
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aGN" = (
/obj/machinery/hologram/holopad,
@@ -16043,7 +16043,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aHI" = (
/obj/machinery/alarm{
@@ -16366,7 +16366,7 @@
"aIf" = (
/obj/machinery/disposal,
/obj/structure/disposalpipe/trunk,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aIg" = (
/turf/wall/prepainted,
@@ -16650,7 +16650,7 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/hallway/secondary/entry/starboard)
"aIN" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/recharger,
/turf/floor/tiled/dark,
@@ -16809,7 +16809,7 @@
/turf/wall/r_wall/prepainted,
/area/exodus/hallway/primary/central_two)
"aJj" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = -2;
pixel_y = 5
@@ -16823,7 +16823,7 @@
dir = 4;
icon_state = "pipe-c"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aJl" = (
/turf/wall/prepainted,
@@ -16870,7 +16870,7 @@
pixel_x = -12;
pixel_y = 2
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar/cabin)
"aJt" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -17023,12 +17023,12 @@
/area/exodus/hallway/secondary/entry/starboard)
"aJI" = (
/obj/structure/filing_cabinet,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aJJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aJK" = (
/obj/machinery/light{
@@ -17058,14 +17058,14 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aJN" = (
/obj/structure/disposalpipe/segment{
dir = 8;
icon_state = "pipe-c"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aJO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -17165,7 +17165,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aJX" = (
/obj/structure/reagent_dispensers/watertank,
@@ -17215,7 +17215,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aKc" = (
/obj/machinery/power/apc{
@@ -17662,7 +17662,7 @@
/turf/wall/prepainted,
/area/exodus/crew_quarters/kitchen)
"aLa" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp{
pixel_y = 10
},
@@ -17673,7 +17673,7 @@
/turf/floor/lino,
/area/exodus/chapel/office)
"aLb" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/nullrod,
/obj/item/eftpos{
eftpos_name = "Chapel EFTPOS scanner"
@@ -17681,7 +17681,7 @@
/turf/floor/lino,
/area/exodus/chapel/office)
"aLc" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pen,
/obj/item/chems/drinks/bottle/holywater,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -17743,26 +17743,26 @@
/obj/machinery/camera/network/civilian_east{
c_tag = "Library North"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aLj" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aLk" = (
/obj/structure/table,
/turf/floor/tiled/dark,
/area/exodus/chapel/main)
"aLl" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/folder/yellow,
/obj/item/pen,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aLm" = (
/obj/structure/bed/chair{
@@ -17778,7 +17778,7 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aLq" = (
/obj/machinery/light{
@@ -18151,7 +18151,7 @@
/obj/structure/bed/chair/office/dark{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aMh" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -18170,7 +18170,7 @@
pixel_y = 28
},
/obj/machinery/smartfridge/drinks,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aMk" = (
/obj/machinery/light{
@@ -18225,7 +18225,7 @@
/obj/structure/bed/chair/office/dark{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aMr" = (
/obj/structure/closet/secure_closet/freezer/meat,
@@ -18462,7 +18462,7 @@
dir = 4;
pixel_x = -22
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aMQ" = (
/obj/machinery/light{
@@ -18475,9 +18475,9 @@
/turf/floor/tiled/dark,
/area/exodus/chapel/main)
"aMR" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/recharger,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aMS" = (
/obj/structure/closet/crate,
@@ -18502,7 +18502,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aMV" = (
/turf/wall/titanium,
@@ -18545,7 +18545,7 @@
/turf/floor/carpet,
/area/exodus/crew_quarters/bar)
"aNa" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green{
pixel_x = 1;
pixel_y = 5
@@ -18637,7 +18637,7 @@
/obj/structure/bed/chair/office/dark{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aNk" = (
/turf/floor/tiled/steel_grid,
@@ -19131,10 +19131,10 @@
dir = 1
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aOg" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/food/junk/chips,
/obj/random/single{
name = "randomly spawned cola";
@@ -19449,13 +19449,13 @@
/turf/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/entry/port)
"aOL" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/disposalpipe/segment,
/obj/item/deck/cards,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aOM" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray/plastic{
pixel_x = -1;
pixel_y = 1
@@ -20131,7 +20131,7 @@
/turf/floor/plating,
/area/exodus/maintenance/arrivals)
"aQj" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigarettes{
pixel_y = 2
},
@@ -20224,8 +20224,8 @@
/area/exodus/security/prison/restroom)
"aQw" = (
/obj/machinery/photocopier,
-/obj/structure/table/woodentable,
-/turf/floor/wood/walnut,
+/obj/structure/table/laminate,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aQx" = (
/obj/structure/hygiene/sink{
@@ -20412,7 +20412,7 @@
/obj/machinery/door/window/westright{
name = "Library Desk Door"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aQU" = (
/obj/effect/floor_decal/corner/purple/full,
@@ -20540,7 +20540,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/library)
"aRm" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = -3;
pixel_y = 7
@@ -20661,7 +20661,7 @@
/turf/floor/carpet,
/area/exodus/crew_quarters/bar)
"aRx" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/single{
name = "randomly spawned deck of cards";
spawn_object = /obj/item/deck/cards
@@ -20776,7 +20776,7 @@
/obj/structure/bookcase{
name = "bookcase (Religious)"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aRL" = (
/turf/floor/carpet,
@@ -20930,7 +20930,7 @@
/obj/machinery/camera/network/civilian_east{
c_tag = "Bar East"
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/pen/blue{
pixel_x = -3;
@@ -20943,7 +20943,7 @@
/obj/structure/noticeboard{
default_pixel_y = 27
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aSg" = (
/obj/structure/disposalpipe/segment{
@@ -21166,7 +21166,7 @@
/area/exodus/quartermaster/miningdock)
"aSD" = (
/obj/machinery/computer/modular/preset/cardslot/command,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"aSE" = (
/obj/machinery/button/access/interior{
@@ -21295,28 +21295,28 @@
/obj/structure/bed/chair/wood/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aSQ" = (
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aSR" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aSS" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aST" = (
/obj/machinery/newscaster{
pixel_y = 32
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aSU" = (
/obj/structure/cable/green{
@@ -21444,13 +21444,13 @@
/obj/machinery/light/small{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aTi" = (
/obj/machinery/light/small{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aTj" = (
/obj/machinery/door/airlock/external/bolted{
@@ -21466,7 +21466,7 @@
/obj/structure/bed/chair/wood/walnut{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aTl" = (
/obj/machinery/conveyor{
@@ -21797,7 +21797,7 @@
/area/exodus/library)
"aTX" = (
/obj/item/stool/bar/padded,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aTY" = (
/obj/machinery/door/blast/regular/open{
@@ -21852,7 +21852,7 @@
/obj/machinery/computer/modular/telescreen/preset/generic{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUg" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -21909,14 +21909,14 @@
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUo" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/table/woodentable,
-/turf/floor/wood/walnut,
+/obj/structure/table/laminate,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUp" = (
/turf/wall/r_wall/prepainted,
@@ -21973,7 +21973,7 @@
dir = 4
},
/obj/item/stool/bar/padded,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUw" = (
/obj/structure/closet/secure_closet/freezer/kitchen,
@@ -21986,7 +21986,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUy" = (
/obj/effect/floor_decal/corner/brown/diagonal{
@@ -22029,25 +22029,25 @@
/obj/machinery/light{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUE" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUG" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUH" = (
/obj/machinery/hologram/holopad,
@@ -22057,13 +22057,13 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUI" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUJ" = (
/obj/effect/floor_decal/corner/brown/diagonal{
@@ -22172,7 +22172,7 @@
pixel_x = -25;
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aUV" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
@@ -22229,11 +22229,11 @@
/obj/structure/bookcase{
name = "bookcase (Fiction)"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aVd" = (
/obj/structure/bookcase/skill_books/random,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aVf" = (
/obj/machinery/embedded_controller/radio/airlock/docking_port{
@@ -22271,7 +22271,7 @@
/turf/floor/plating,
/area/exodus/maintenance/bar)
"aVi" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet,
/area/exodus/chapel/main)
"aVj" = (
@@ -22403,7 +22403,7 @@
dir = 8;
pixel_x = 22
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aVy" = (
/obj/abstract/landmark{
@@ -22562,7 +22562,7 @@
/area/exodus/bridge)
"aVS" = (
/obj/structure/bed/chair/wood/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aVT" = (
/obj/structure/closet/emcloset,
@@ -22588,12 +22588,12 @@
icon_state = "1-4"
},
/obj/structure/bed/chair/wood/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aVX" = (
/obj/structure/bed/chair/wood/walnut,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aVY" = (
/obj/structure/cable/green{
@@ -22627,7 +22627,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/bed/chair/wood/walnut,
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aWb" = (
/obj/machinery/chem_master/condimaster{
@@ -22654,19 +22654,19 @@
icon_state = "4-8"
},
/obj/item/stool/bar/padded,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aWe" = (
/obj/item/chems/condiment/small/peppermill{
pixel_x = 2;
pixel_y = 6
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/condiment/small/saltshaker{
pixel_x = -2;
pixel_y = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aWf" = (
/obj/structure/cable/green{
@@ -22702,8 +22702,8 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/table/woodentable,
-/turf/floor/wood/walnut,
+/obj/structure/table/laminate,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aWi" = (
/obj/structure/cable/green{
@@ -22741,13 +22741,13 @@
/area/exodus/crew_quarters/kitchen)
"aWl" = (
/obj/structure/bed/chair/comfy/black,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aWm" = (
/obj/structure/cable/green{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aWn" = (
/obj/structure/cable/green{
@@ -22835,14 +22835,14 @@
c_tag = "Library Central";
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aWz" = (
/obj/abstract/landmark/start{
name = "Librarian"
},
/obj/structure/bed/chair/office/dark,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aWA" = (
/obj/effect/floor_decal/industrial/warning{
@@ -22893,17 +22893,17 @@
/obj/machinery/newscaster{
pixel_y = 32
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aWH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/light/small{
dir = 4
},
/obj/machinery/light_switch{
pixel_y = 28
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aWI" = (
/obj/machinery/door/firedoor,
@@ -23268,10 +23268,10 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/research/mixing)
"aXz" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/utensil/fork,
/obj/item/utensil/fork,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aXA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -23281,15 +23281,15 @@
/turf/floor/tiled/white,
/area/exodus/crew_quarters/kitchen)
"aXB" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/board,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aXD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/checkers/chess/red,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aXE" = (
/obj/structure/cable/green{
@@ -23310,9 +23310,9 @@
/area/exodus/crew_quarters/kitchen)
"aXF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aXG" = (
/obj/machinery/status_display{
@@ -23321,7 +23321,7 @@
/obj/machinery/camera/network/command{
c_tag = "Bridge Conference Room"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"aXH" = (
/obj/effect/floor_decal/corner/brown/diagonal{
@@ -23399,7 +23399,7 @@
"aXP" = (
/obj/structure/table/gamblingtable,
/obj/item/box/checkers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/maintenance/dormitory)
"aXQ" = (
/obj/effect/floor_decal/corner/blue/three_quarters{
@@ -23562,7 +23562,7 @@
/obj/structure/bookcase{
name = "bookcase (Adult)"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aYk" = (
/obj/effect/floor_decal/industrial/warning{
@@ -23571,12 +23571,12 @@
/turf/floor/plating,
/area/exodus/hallway/secondary/entry/port)
"aYl" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green{
pixel_x = 1;
pixel_y = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aYm" = (
/obj/machinery/door/airlock/external/bolted{
@@ -23631,7 +23631,7 @@
/obj/structure/bed/chair/comfy/black{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aYu" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -23686,7 +23686,7 @@
c_tag = "Bar West";
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aYz" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -23755,9 +23755,9 @@
/turf/floor/tiled/steel_grid,
/area/exodus/crew_quarters/locker)
"aYF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/checkers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aYG" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
@@ -24126,8 +24126,8 @@
/turf/floor/tiled/white,
/area/exodus/crew_quarters/kitchen)
"aZm" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood/walnut,
+/obj/structure/table/laminate,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aZn" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -24153,10 +24153,10 @@
/area/exodus/crew_quarters/kitchen)
"aZp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/disposalpipe/segment,
/obj/item/camera,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aZq" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -24173,7 +24173,7 @@
/obj/structure/bed/chair/wood/walnut{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aZs" = (
/obj/machinery/alarm{
@@ -24248,7 +24248,7 @@
/obj/structure/bed/chair/wood/walnut{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aZB" = (
/obj/machinery/power/apc{
@@ -24269,9 +24269,9 @@
/turf/floor/carpet,
/area/exodus/library)
"aZD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aZE" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -24281,16 +24281,16 @@
/obj/structure/bed/chair/wood/walnut{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aZF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/camera_film,
/obj/item/camera_film,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aZG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pen/red{
pixel_x = 2;
pixel_y = 6
@@ -24299,19 +24299,19 @@
pixel_x = 5;
pixel_y = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aZH" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood/walnut,
+/obj/structure/table/laminate,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aZI" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = 1;
pixel_y = 9
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"aZK" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -24321,7 +24321,7 @@
/obj/structure/bed/chair/wood/walnut{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"aZL" = (
/obj/structure/bed/chair{
@@ -24959,7 +24959,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/crew_quarters/locker)
"bbd" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/condiment/small/peppermill{
pixel_x = 2;
pixel_y = 6
@@ -24968,7 +24968,7 @@
pixel_x = -2;
pixel_y = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bbe" = (
/obj/structure/cable/green{
@@ -24988,14 +24988,14 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/hallway/primary/starboard)
"bbg" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/utensil/fork,
/obj/item/utensil/fork,
/obj/item/utensil/fork,
/obj/item/utensil/fork,
/obj/item/utensil/fork,
/obj/item/utensil/fork,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bbh" = (
/obj/structure/table/marble,
@@ -25018,7 +25018,7 @@
dir = 1
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bbk" = (
/obj/structure/cable/green{
@@ -25060,9 +25060,9 @@
/turf/floor/tiled/steel_grid,
/area/exodus/hallway/primary/starboard)
"bbo" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flame/candle,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bbp" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
@@ -25097,7 +25097,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"bbt" = (
/obj/item/radio/intercom{
@@ -25193,7 +25193,7 @@
/obj/structure/bed/chair/comfy/black{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"bbF" = (
/obj/structure/table,
@@ -25514,7 +25514,7 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"bcn" = (
/obj/machinery/computer/guestpass{
@@ -25686,7 +25686,7 @@
/obj/structure/disposalpipe/trunk{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bcH" = (
/obj/structure/disposalpipe/segment,
@@ -25745,14 +25745,14 @@
"bcM" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bcN" = (
/obj/machinery/light,
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bcO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -25760,7 +25760,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bcP" = (
/obj/structure/flora/bush/brflowers,
@@ -26371,13 +26371,13 @@
/area/exodus/chapel/main)
"bef" = (
/obj/machinery/computer/arcade,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"beg" = (
/obj/machinery/vending/cola{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"beh" = (
/obj/effect/floor_decal/corner/yellow{
@@ -26398,7 +26398,7 @@
/obj/structure/bed/chair/wood/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bej" = (
/obj/machinery/firealarm{
@@ -26406,7 +26406,7 @@
pixel_y = -24
},
/obj/machinery/light,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bek" = (
/obj/effect/floor_decal/chapel,
@@ -26518,7 +26518,7 @@
/obj/machinery/vending/coffee{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"bez" = (
/obj/item/box,
@@ -26537,9 +26537,9 @@
/turf/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
"beA" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pen,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"beB" = (
/obj/machinery/atmospherics/unary/tank/air{
@@ -26558,7 +26558,7 @@
/turf/floor/carpet,
/area/exodus/crew_quarters/captain)
"beD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green{
pixel_x = 1;
pixel_y = 5
@@ -26567,7 +26567,7 @@
dir = 1;
pixel_y = -22
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"beE" = (
/obj/structure/bed/chair/comfy/brown{
@@ -26760,7 +26760,7 @@
/obj/structure/flora/pottedplant{
icon_state = "plant-22"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bfa" = (
/obj/structure/cable/green{
@@ -26902,7 +26902,7 @@
/area/exodus/quartermaster/office)
"bfn" = (
/obj/machinery/photocopier,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bfo" = (
/obj/machinery/door/airlock/command{
@@ -26920,7 +26920,7 @@
/obj/machinery/newscaster{
pixel_y = 32
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bfq" = (
/obj/machinery/door/firedoor,
@@ -26940,7 +26940,7 @@
/obj/structure/cable/green{
icon_state = "0-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bfs" = (
/obj/machinery/light_switch{
@@ -26949,7 +26949,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bft" = (
/obj/structure/disposalpipe/segment{
@@ -26964,14 +26964,14 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bfu" = (
/obj/machinery/disposal,
/obj/structure/disposalpipe/trunk{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bfv" = (
/turf/floor/bluegrid,
@@ -27002,7 +27002,7 @@
c_tag = "Library South";
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"bfz" = (
/obj/machinery/power/terminal{
@@ -27034,7 +27034,7 @@
/obj/structure/disposalpipe/trunk{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bfD" = (
/obj/structure/disposalpipe/segment{
@@ -27046,13 +27046,13 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bfE" = (
/obj/machinery/light_switch{
pixel_y = 28
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bfF" = (
/obj/machinery/ai_status_display{
@@ -27062,9 +27062,9 @@
/area/exodus/crew_quarters/captain)
"bfG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/checkers/chess,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bfH" = (
/obj/machinery/status_display{
@@ -27081,11 +27081,11 @@
/obj/structure/cable/green{
icon_state = "0-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bfJ" = (
/obj/machinery/computer/arcade,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bfK" = (
/obj/item/radio/intercom{
@@ -27422,7 +27422,7 @@
dir = 8
},
/obj/machinery/papershredder,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bgw" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
@@ -27451,7 +27451,7 @@
dir = 8
},
/obj/structure/flora/pottedplant,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bgA" = (
/obj/machinery/navbeacon/CHW,
@@ -27551,7 +27551,7 @@
name = "Security Shutters";
pixel_y = 24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bgN" = (
/obj/structure/disposalpipe/segment{
@@ -27570,7 +27570,7 @@
/turf/floor/plating,
/area/exodus/maintenance/locker)
"bgO" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bgP" = (
/turf/floor/carpet,
@@ -27594,7 +27594,7 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bgT" = (
/obj/machinery/door/firedoor,
@@ -27679,13 +27679,13 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bhc" = (
/obj/structure/cable/green{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bhd" = (
/obj/structure/bed/chair/comfy/black{
@@ -27716,13 +27716,13 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bhh" = (
/obj/structure/flora/pottedplant{
icon_state = "plant-10"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bhi" = (
/obj/machinery/firealarm{
@@ -28102,7 +28102,7 @@
/turf/floor/bluegrid,
/area/exodus/turret_protected/ai)
"bhU" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/donut,
/obj/structure/cable/green{
icon_state = "4-8"
@@ -28112,7 +28112,7 @@
"bhV" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/machinery/papershredder,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bhW" = (
/obj/structure/cable{
@@ -28296,20 +28296,20 @@
/obj/item/eftpos{
eftpos_name = "Bridge EFTPOS scanner"
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable/green{
icon_state = "4-8"
},
/obj/machinery/light{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bip" = (
/obj/structure/cable/green{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"biq" = (
/obj/machinery/light{
@@ -28319,14 +28319,14 @@
/area/exodus/quartermaster/storage)
"bir" = (
/obj/item/folder/red,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable/green{
icon_state = "4-8"
},
/turf/floor/carpet,
/area/exodus/bridge/meeting_room)
"bis" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -28352,12 +28352,12 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"biv" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/faxmachine/mapped,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"biw" = (
/obj/structure/window/reinforced{
@@ -28392,15 +28392,15 @@
/area/exodus/bridge)
"biA" = (
/obj/machinery/vending/coffee,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"biB" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"biC" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"biD" = (
/obj/structure/window/reinforced,
@@ -28411,7 +28411,7 @@
/turf/floor/bluegrid,
/area/exodus/turret_protected/ai)
"biE" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random_multi/single_item/captains_spare_id,
/turf/floor/carpet,
/area/exodus/crew_quarters/captain)
@@ -28431,7 +28431,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"biH" = (
/obj/structure/cable{
@@ -29037,12 +29037,12 @@
pixel_y = 7
},
/obj/item/pen,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet,
/area/exodus/bridge/meeting_room)
"bjJ" = (
/obj/item/folder/blue,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet,
/area/exodus/bridge/meeting_room)
"bjK" = (
@@ -29062,14 +29062,14 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bjM" = (
/obj/structure/reagent_dispensers/water_cooler,
/obj/machinery/light{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bjN" = (
/obj/structure/extinguisher_cabinet{
@@ -29140,7 +29140,7 @@
/area/exodus/hallway/primary/starboard)
"bjT" = (
/obj/machinery/vending/cigarette,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bjU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -29149,7 +29149,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bjV" = (
/turf/wall/prepainted,
@@ -29173,7 +29173,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bjY" = (
/obj/abstract/landmark{
@@ -29524,14 +29524,14 @@
/turf/floor/carpet,
/area/exodus/bridge/meeting_room)
"bkH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/recharger{
pixel_y = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bkI" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = -3;
pixel_y = 7
@@ -29548,7 +29548,7 @@
dir = 4;
pixel_x = -22
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bkJ" = (
/obj/structure/disposalpipe/segment,
@@ -29563,7 +29563,7 @@
pixel_x = 29;
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bkK" = (
/obj/machinery/door/window{
@@ -29581,7 +29581,7 @@
dir = 4;
pixel_x = -22
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bkM" = (
/obj/machinery/door/window{
@@ -29597,7 +29597,7 @@
/turf/floor/bluegrid,
/area/exodus/turret_protected/ai)
"bkN" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/recharger{
pixel_y = 4
},
@@ -29614,7 +29614,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bkO" = (
/obj/machinery/teleport/station,
@@ -29869,7 +29869,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"blt" = (
/obj/item/radio/intercom{
@@ -29927,7 +29927,7 @@
/area/exodus/maintenance/cargo)
"bly" = (
/obj/machinery/vending/coffee,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"blz" = (
/obj/structure/window/reinforced{
@@ -29989,7 +29989,7 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/hallway/primary/central_one)
"blG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/folder/blue,
/obj/item/stamp/captain{
pixel_x = -4;
@@ -30001,7 +30001,7 @@
pixel_x = 4;
pixel_y = 3
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"blH" = (
/obj/structure/table{
@@ -30014,19 +30014,19 @@
/turf/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
"blI" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"blJ" = (
/obj/machinery/hologram/holopad,
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"blK" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pinpointer,
/obj/item/disk/nuclear,
/obj/item/secure_storage/safe{
@@ -30035,7 +30035,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"blL" = (
/obj/machinery/firealarm{
@@ -30492,9 +30492,9 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/donut,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/bridge/meeting_room)
"bmF" = (
/obj/machinery/disposal,
@@ -30589,7 +30589,7 @@
dir = 8
},
/obj/structure/filing_cabinet,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bmP" = (
/turf/floor/tiled/dark,
@@ -30603,17 +30603,17 @@
/obj/machinery/computer/modular/preset/civilian{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"bmR" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/eftpos{
eftpos_name = "Captain EFTPOS scanner"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bmS" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/whip/chainofcommand,
/obj/machinery/alarm{
dir = 8;
@@ -30622,7 +30622,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/random_multi/single_item/captains_spare_id,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bmT" = (
/obj/structure/disposalpipe/segment,
@@ -30747,7 +30747,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bng" = (
/obj/item/book/manual/robotics_cyborgs{
@@ -30773,7 +30773,7 @@
/obj/machinery/fabricator/imprinter{
id_tag = "science"
},
-/obj/item/chems/glass/beaker/sulphuric,
+/obj/item/chems/glass/beaker/sulfuric,
/obj/structure/reagent_dispensers/acid{
density = 0;
pixel_y = 32
@@ -30936,7 +30936,7 @@
pixel_x = 15;
pixel_y = 39
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bnx" = (
/obj/machinery/firealarm{
@@ -31356,7 +31356,7 @@
/obj/abstract/landmark/start{
name = "Captain"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bov" = (
/obj/structure/morgue{
@@ -31415,7 +31415,7 @@
"boC" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"boD" = (
/obj/machinery/power/apc{
@@ -31444,10 +31444,10 @@
/area/exodus/research/chargebay)
"boF" = (
/obj/machinery/faxmachine/mapped,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"boH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -31969,11 +31969,11 @@
/turf/floor/plating,
/area/exodus/storage/emergency)
"bpG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random_multi/single_item/captains_spare_id{
weight = 10
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bpH" = (
/obj/structure/table,
@@ -32064,7 +32064,7 @@
pixel_x = 29;
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bpO" = (
/obj/structure/disposaloutlet,
@@ -32395,7 +32395,7 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/research/robotics)
"bqw" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/turf/floor/carpet,
/area/exodus/crew_quarters/captain)
@@ -32435,13 +32435,13 @@
dir = 8
},
/obj/random_multi/single_item/captains_spare_id,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bqA" = (
/obj/machinery/keycard_auth{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bqB" = (
/obj/structure/cable{
@@ -32457,13 +32457,13 @@
/area/exodus/maintenance/research_shuttle)
"bqC" = (
/obj/machinery/light,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bqD" = (
/obj/structure/cable/green{
icon_state = "1-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bqE" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -32592,7 +32592,7 @@
/obj/machinery/fabricator/imprinter{
id_tag = "science"
},
-/obj/item/chems/glass/beaker/sulphuric,
+/obj/item/chems/glass/beaker/sulfuric,
/turf/floor/tiled/dark,
/area/exodus/research/lab)
"bqQ" = (
@@ -32881,7 +32881,7 @@
icon_state = "right";
name = "Captain's Desk Door"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"brw" = (
/obj/machinery/conveyor{
@@ -33876,14 +33876,14 @@
dir = 1;
pixel_y = -30
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/deck/cards{
pixel_y = 4
},
/obj/machinery/computer/modular/telescreen/preset/generic{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"btB" = (
/obj/machinery/button/blast_door{
@@ -35586,7 +35586,7 @@
/turf/floor/tiled/white,
/area/exodus/medical/medbay2)
"bwU" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/matches,
/obj/item/clothing/mask/smokable/cigarette/cigar,
/obj/item/chems/drinks/flask{
@@ -35753,7 +35753,7 @@
/turf/floor/tiled/white,
/area/exodus/medical/medbay2)
"bxn" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/camera,
/obj/item/photo_album{
pixel_y = -10
@@ -39993,7 +39993,7 @@
/area/exodus/maintenance/cargo)
"bFM" = (
/obj/machinery/network/relay,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"bFN" = (
/obj/structure/disposalpipe/sortjunction/untagged{
@@ -41092,7 +41092,7 @@
/obj/machinery/computer/modular/preset/cardslot/command{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/captain)
"bHK" = (
/obj/structure/extinguisher_cabinet{
@@ -47707,7 +47707,7 @@
/area/exodus/medical/patient_wing)
"bUX" = (
/obj/machinery/vending/cigarette,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bUY" = (
/obj/structure/bed/chair{
@@ -47751,9 +47751,9 @@
/turf/floor/tiled/techfloor/grid,
/area/exodus/medical/patient_wing)
"bVc" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/dice,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bVd" = (
/obj/machinery/door/firedoor,
@@ -47785,9 +47785,9 @@
/turf/floor/tiled/white,
/area/exodus/research/misc_lab)
"bVf" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bVg" = (
/obj/structure/table/reinforced,
@@ -48001,7 +48001,7 @@
/turf/floor/plating,
/area/exodus/engineering/engine_waste)
"bVC" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/manual/engineering_guide{
pixel_x = 3;
pixel_y = 2
@@ -48010,20 +48010,20 @@
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bVD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/manual/engineering_construction,
/obj/item/book/manual/evaguide{
pixel_x = -2;
pixel_y = 7
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bVE" = (
/obj/structure/bookcase/manuals/engineering,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bVF" = (
/obj/machinery/hologram/holopad,
@@ -48571,7 +48571,7 @@
/turf/floor/tiled/white,
/area/exodus/research)
"bWO" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/clipboard,
/obj/item/folder/blue{
@@ -48603,7 +48603,7 @@
pixel_x = 29;
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bWS" = (
/obj/machinery/air_sensor{
@@ -48705,7 +48705,7 @@
/obj/machinery/computer/modular/telescreen/preset/generic{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bXd" = (
/obj/machinery/computer/modular/preset/engineering,
@@ -49461,7 +49461,7 @@
/turf/floor/reinforced,
/area/exodus/research/mixing)
"bYx" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/manual/supermatter_engine{
pixel_x = -3
},
@@ -49660,7 +49660,7 @@
/turf/floor/carpet,
/area/exodus/engineering/break_room)
"bYR" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = -3;
pixel_y = 7
@@ -49683,7 +49683,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"bYU" = (
/obj/structure/cable/green{
@@ -50301,12 +50301,12 @@
/turf/floor/tiled/steel_grid,
/area/exodus/engineering/engine_smes)
"caj" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/folder/yellow,
/turf/floor/carpet,
/area/exodus/engineering/break_room)
"cak" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/food/junk/chips,
/turf/floor/carpet,
/area/exodus/engineering/break_room)
@@ -50317,7 +50317,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cam" = (
/obj/structure/disposalpipe/segment{
@@ -50519,23 +50519,23 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/medical/psych)
"caG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/medical/psych)
"caH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/computer/modular/preset/medical,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/medical/psych)
"caI" = (
/turf/wall/prepainted,
@@ -51070,7 +51070,7 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/medical/psych)
"cbQ" = (
/obj/machinery/alarm{
@@ -51972,7 +51972,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cdz" = (
/obj/machinery/firealarm{
@@ -52059,7 +52059,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cdG" = (
/obj/structure/cable{
@@ -52170,7 +52170,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cdR" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -52256,7 +52256,7 @@
c_tag = "Engineering Break Room";
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cec" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -52283,7 +52283,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cef" = (
/obj/machinery/atmospherics/pipe/simple/visible/black{
@@ -52324,8 +52324,8 @@
/turf/floor/tiled/steel_grid,
/area/exodus/engineering/engine_eva)
"cei" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood,
+/obj/structure/table/laminate,
+/turf/floor/laminate,
/area/exodus/medical/psych)
"cej" = (
/turf/wall/prepainted,
@@ -52340,7 +52340,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cel" = (
/obj/structure/bed/chair/office/dark{
@@ -52365,7 +52365,7 @@
pixel_x = -34;
pixel_y = 7
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/exodus/medical/psych)
"cem" = (
/obj/structure/cable/green{
@@ -52373,7 +52373,7 @@
},
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"cen" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -53092,7 +53092,7 @@
/area/exodus/engineering/foyer)
"cfS" = (
/obj/structure/closet/secure_closet/personal,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/sleep/bedrooms)
"cfT" = (
/obj/machinery/computer/modular/preset/cardslot/command,
@@ -53347,7 +53347,7 @@
/turf/floor/tiled/white,
/area/exodus/medical/virology)
"cgu" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/recharger,
/turf/floor/carpet,
/area/exodus/hallway/secondary/entry/starboard)
@@ -56626,7 +56626,7 @@
/turf/wall/prepainted,
/area/exodus/maintenance/arrivals)
"cnn" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/taperecorder,
/obj/item/camera,
/obj/item/eftpos{
@@ -63723,6 +63723,10 @@
},
/turf/floor/tiled/steel_grid,
/area/ship/exodus_pod_research)
+"eYg" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"eZK" = (
/obj/effect/floor_decal/corner/purple,
/obj/machinery/light,
@@ -63861,7 +63865,7 @@
/obj/machinery/conveyor_switch{
id_tag = "cargo_mining_conveyor"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/floor/tiled/steel_grid,
/area/exodus/quartermaster/miningdock)
@@ -64067,7 +64071,7 @@
/turf/floor/bluegrid,
/area/exodus/turret_protected/ai_upload)
"hLX" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"hOb" = (
/obj/structure/cable/green{
@@ -64511,7 +64515,7 @@
/obj/machinery/vending/coffee{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/crew_quarters/bar)
"kVV" = (
/obj/structure/cable{
@@ -64791,7 +64795,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/entry/starboard)
"nIv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -65121,7 +65125,7 @@
/area/ship/exodus_pod_mining)
"qlX" = (
/obj/machinery/hologram/holopad,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"qmC" = (
/obj/effect/floor_decal/corner_steel_grid{
@@ -66034,7 +66038,7 @@
/obj/machinery/hologram/holopad{
holopad_id = "Library Rec Area"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/library)
"wqh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -66179,7 +66183,7 @@
/turf/floor/tiled/techfloor/grid,
/area/ship/exodus_pod_research)
"xpO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/fabricator/industrial,
/obj/item/stack/material/ingot/mapped/osmium/ten,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -66190,7 +66194,7 @@
/turf/floor/tiled/steel_grid,
/area/exodus/quartermaster/miningdock)
"xrP" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/exodus/engineering/break_room)
"xva" = (
/obj/structure/window/reinforced{
@@ -76795,7 +76799,7 @@ cLU
cLU
cLU
cLU
-cLU
+eYg
cLU
cLU
cLU
@@ -88722,7 +88726,7 @@ cLU
cLU
cLU
cLU
-cLU
+eYg
cLU
cLU
cLU
@@ -108695,7 +108699,7 @@ cLU
cLU
cLU
cLU
-cLU
+eYg
cLU
cLU
cLU
@@ -116645,7 +116649,7 @@ cLU
cLU
cLU
cLU
-cLU
+eYg
cLU
cLU
cLU
diff --git a/maps/exodus/exodus-admin.dmm b/maps/exodus/exodus-admin.dmm
index 1816f10ba2e..5d94162873e 100644
--- a/maps/exodus/exodus-admin.dmm
+++ b/maps/exodus/exodus-admin.dmm
@@ -1403,7 +1403,7 @@
/obj/structure/bed/chair/wood/wings{
dir = 4
},
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aMT" = (
/obj/machinery/hologram/holopad,
@@ -1440,50 +1440,50 @@
/turf/unsimulated/floor/steel,
/area/centcom/holding)
"aMY" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/amanita_pie,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aMZ" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/bigbiteburger,
/obj/machinery/camera/network/crescent{
c_tag = "Crescent Bar Center"
},
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNa" = (
/obj/structure/bed/chair/wood/wings{
dir = 8
},
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNb" = (
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNc" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNh" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/chems/glass/bowl/mapped/stew,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNj" = (
/obj/structure/closet/secure_closet/bar,
/turf/unsimulated/floor/lino,
/area/centcom/holding)
"aNk" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/book/manual/barman_recipes,
@@ -1491,14 +1491,14 @@
/turf/unsimulated/floor/lino,
/area/centcom/holding)
"aNl" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/machinery/chemical_dispenser/bar_alc/full,
/turf/unsimulated/floor/lino,
/area/centcom/holding)
"aNm" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/machinery/chemical_dispenser/bar_soft/full,
@@ -1536,32 +1536,32 @@
/turf/floor/tiled/monotile,
/area/shuttle/escape_shuttle)
"aNB" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/boiledrice,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNC" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/chems/glass/bowl/mapped/beet,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNI" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/stuffing,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNJ" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/soylenviridians,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aNK" = (
/obj/machinery/door/airlock/glass{
@@ -1667,7 +1667,7 @@
/area/shuttle/escape_shuttle)
"aPa" = (
/obj/machinery/hologram/holopad,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aPH" = (
/obj/machinery/camera/network/crescent{
@@ -1713,34 +1713,34 @@
/turf/floor/tiled/techfloor/grid,
/area/shuttle/escape_shuttle)
"aPR" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/chems/glass/bowl/mapped/blood,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aPS" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/skewer/tofu,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aRl" = (
/turf/unsimulated/wall,
/area/centcom/holding)
"aRm" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/poppypretzel,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"aZb" = (
/obj/structure/bed/chair/comfy/brown{
dir = 1
},
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/clothing/pants/slacks/outfit,
@@ -1754,13 +1754,13 @@
/obj/structure/bed/chair/comfy/brown{
dir = 1
},
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/turf/unsimulated/floor/lino,
/area/centcom/holding)
"bgJ" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/turf/unsimulated/floor/lino,
@@ -1831,11 +1831,11 @@
/turf/floor/tiled/dark/monotile,
/area/shuttle/escape_shuttle)
"bvb" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/spesslaw,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"bwE" = (
/obj/effect/floor_decal/industrial/warning,
@@ -1845,18 +1845,18 @@
/turf/floor/tiled,
/area/shuttle/escape_shuttle)
"byb" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/candiedapple,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"bzm" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/chems/glass/bowl/mapped/mushroom,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"bDh" = (
/obj/structure/table,
@@ -1864,15 +1864,15 @@
/turf/unsimulated/floor/lino,
/area/tdome/tdomeadmin)
"bMb" = (
-/obj/structure/table/woodentable{
+/obj/structure/table/laminate{
dir = 5
},
/obj/item/food/meatsteak,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"cnP" = (
/obj/item/stool/padded,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/centcom/holding)
"cxx" = (
/obj/effect/floor_decal/industrial/warning{
@@ -2422,7 +2422,8 @@
/turf/unsimulated/floor/vault,
/area/tdome)
"lSj" = (
-/obj/effect/forcefield{
+/obj/effect{
+ density = 1;
desc = "You can't get in. Heh.";
name = "Blocker"
},
@@ -2434,7 +2435,8 @@
/turf/unsimulated/floor/dark,
/area/tdome)
"mgi" = (
-/obj/effect/forcefield{
+/obj/effect{
+ density = 1;
desc = "You can't get in. Heh.";
name = "Blocker"
},
@@ -2799,7 +2801,8 @@
/turf/floor/tiled,
/area/shuttle/escape_shuttle)
"xSD" = (
-/obj/effect/forcefield{
+/obj/effect{
+ density = 1;
desc = "You can't get in. Heh.";
name = "Blocker"
},
diff --git a/maps/exodus/exodus.dm b/maps/exodus/exodus.dm
index c07b1b1d114..d6c189490f2 100644
--- a/maps/exodus/exodus.dm
+++ b/maps/exodus/exodus.dm
@@ -1,22 +1,15 @@
#if !defined(USING_MAP_DATUM)
- #include "../../mods/gamemodes/cult/_cult.dme"
- #include "../../mods/gamemodes/deity/_deity.dme"
- #include "../../mods/gamemodes/heist/_heist.dme"
- #include "../../mods/gamemodes/meteor/_meteor.dme"
- #include "../../mods/gamemodes/ninja/_ninja.dme"
- #include "../../mods/gamemodes/revolution/_revolution.dme"
- #include "../../mods/gamemodes/traitor/_traitor.dme"
- #include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
- #include "../../mods/gamemodes/mixed/_mixed.dme"
-
#include "../../mods/content/mundane.dm"
+
#include "../../mods/content/baychems/_baychems.dme"
+
#include "../../mods/content/corporate/_corporate.dme"
#include "../../mods/content/government/_government.dme"
#include "../../mods/content/matchmaking/_matchmaking.dme"
#include "../../mods/content/modern_earth/_modern_earth.dme"
#include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
+
#include "../../mods/content/polaris/_polaris.dme"
#include "../../mods/content/scaling_descriptors.dm"
#include "../../mods/content/xenobiology/_xenobiology.dme"
@@ -27,6 +20,19 @@
// Must come after borers for compatibility.
#include "../../mods/content/psionics/_psionics.dme"
+ #include "../../mods/content/standard_jobs/_standard_jobs.dme"
+ #include "../../mods/content/supermatter/_supermatter.dme"
+ #include "../../mods/content/tabloids/_tabloids.dme"
+
+ #include "../../mods/gamemodes/cult/_cult.dme"
+ #include "../../mods/gamemodes/heist/_heist.dme"
+ #include "../../mods/gamemodes/meteor/_meteor.dme"
+ #include "../../mods/gamemodes/ninja/_ninja.dme"
+ #include "../../mods/gamemodes/revolution/_revolution.dme"
+ #include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
+ #include "../../mods/gamemodes/traitor/_traitor.dme"
+ #include "../../mods/gamemodes/mixed.dm"
+
#include "../../mods/species/skrell/_skrell.dme"
#include "../../mods/species/tajaran/_tajaran.dme"
#include "../../mods/species/unathi/_unathi.dme"
@@ -47,34 +53,16 @@
#include "../away/mining/mining.dm"
#include "../away/mobius_rift/mobius_rift.dm"
#include "../away/smugglers/smugglers.dm"
- #include "../away/slavers/slavers_base.dm"
#include "../away/unishi/unishi.dm"
#include "../away/yacht/yacht.dm"
- #include "jobs/_goals.dm"
- #include "jobs/captain.dm"
- #include "jobs/civilian.dm"
- #include "jobs/engineering.dm"
- #include "jobs/medical.dm"
- #include "jobs/science.dm"
- #include "jobs/security.dm"
- #include "jobs/synthetics.dm"
-
- #include "outfits/_pda.dm"
- #include "outfits/cargo.dm"
- #include "outfits/civilian.dm"
- #include "outfits/command.dm"
- #include "outfits/engineering.dm"
- #include "outfits/medical.dm"
- #include "outfits/science.dm"
- #include "outfits/security.dm"
+ #include "exodus_goals.dm"
#include "exodus_announcements.dm"
#include "exodus_antagonism.dm"
#include "exodus_cameras.dm"
#include "exodus_areas.dm"
#include "exodus_elevator.dm"
- #include "exodus_departments.dm"
#include "exodus_jobs.dm"
#include "exodus_loadout.dm"
#include "exodus_overmap.dm"
diff --git a/maps/exodus/exodus_antagonism.dm b/maps/exodus/exodus_antagonism.dm
index 92660ef3608..e09d2ddc900 100644
--- a/maps/exodus/exodus_antagonism.dm
+++ b/maps/exodus/exodus_antagonism.dm
@@ -1,25 +1,16 @@
/decl/special_role/traitor/Initialize()
. = ..()
LAZYINITLIST(protected_jobs)
- protected_jobs |= list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/lawyer, /datum/job/hos)
-
-/decl/special_role/godcultist/Initialize()
- . = ..()
- LAZYINITLIST(restricted_jobs)
- restricted_jobs |= list(/datum/job/lawyer, /datum/job/captain, /datum/job/hos)
- LAZYINITLIST(protected_jobs)
- protected_jobs |= list(/datum/job/officer, /datum/job/warden, /datum/job/detective)
- LAZYINITLIST(blacklisted_jobs)
- blacklisted_jobs |= /datum/job/chaplain
+ protected_jobs |= list(/datum/job/standard/officer, /datum/job/standard/warden, /datum/job/standard/detective, /datum/job/standard/captain, /datum/job/standard/lawyer, /datum/job/standard/hos)
/decl/special_role/cultist/Initialize()
. = ..()
LAZYINITLIST(restricted_jobs)
- restricted_jobs |= list(/datum/job/lawyer, /datum/job/captain, /datum/job/hos)
+ restricted_jobs |= list(/datum/job/standard/lawyer, /datum/job/standard/captain, /datum/job/standard/hos)
LAZYINITLIST(protected_jobs)
- protected_jobs |= list(/datum/job/officer, /datum/job/warden, /datum/job/detective)
+ protected_jobs |= list(/datum/job/standard/officer, /datum/job/standard/warden, /datum/job/standard/detective)
LAZYINITLIST(blacklisted_jobs)
- blacklisted_jobs |= list(/datum/job/chaplain, /datum/job/counselor)
+ blacklisted_jobs |= list(/datum/job/standard/chaplain, /datum/job/standard/counselor)
/decl/special_role/loyalist
command_department_id = /decl/department/command
diff --git a/maps/exodus/exodus_define.dm b/maps/exodus/exodus_define.dm
index 0cdfc436956..03a9f450fab 100644
--- a/maps/exodus/exodus_define.dm
+++ b/maps/exodus/exodus_define.dm
@@ -12,8 +12,6 @@
company_short = "NT"
system_name = "Nyx"
- default_law_type = /datum/ai_laws/nanotrasen
-
overmap_ids = list(OVERMAP_ID_SPACE)
num_exoplanets = 3
away_site_budget = 3
diff --git a/maps/exodus/exodus_departments.dm b/maps/exodus/exodus_departments.dm
deleted file mode 100644
index c3d9ae44720..00000000000
--- a/maps/exodus/exodus_departments.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-/decl/department/engineering
- name = "Engineering"
- colour = "#ffa500"
- display_priority = 4
- display_color = "#fff5cc"
-
-/obj/item/robot_module/engineering
- associated_department = /decl/department/engineering
-
-/obj/machinery/network/pager/engineering
- department = /decl/department/engineering
-
-/decl/department/security
- name = "Security"
- colour = "#dd0000"
- display_priority = 3
- display_color = "#ffddf0"
-
-/obj/item/robot_module/security
- associated_department = /decl/department/security
-
-/obj/machinery/network/pager/security
- department = /decl/department/security
-
-/decl/department/medical
- name = "Medical"
- goals = list(/datum/goal/department/medical_fatalities)
- colour = "#008000"
- display_priority = 2
- display_color = "#ffeef0"
-
-/obj/item/robot_module/medical
- associated_department = /decl/department/medical
-
-/obj/machinery/network/pager/medical
- department = /decl/department/medical
-
-/decl/department/science
- name = "Science"
- goals = list(/datum/goal/department/extract_slime_cores)
- colour = "#a65ba6"
- display_color = "#e79fff"
-
-/obj/item/robot_module/research
- associated_department = /decl/department/science
-
-/obj/machinery/network/pager/science
- department = /decl/department/science
-
-/decl/department/civilian
- name = "Civilian"
- display_priority = 1
- display_color = "#dddddd"
-
-/decl/department/command
- name = "Command"
- colour = "#800080"
- display_priority = 5
- display_color = "#ccccff"
-
-/obj/machinery/network/pager
- department = /decl/department/command
-
-/decl/department/miscellaneous
- name = "Misc"
- display_priority = -1
- display_color = "#ccffcc"
-
-/decl/department/service
- name = "Service"
- colour = "#88b764"
- display_color = "#d0f0c0"
-
-/decl/department/supply
- name = "Supply"
- colour = "#bb9040"
- display_color = "#f0e68c"
-
-/obj/machinery/network/pager/cargo
- department = /decl/department/supply
-
-/decl/department/support
- name = "Support"
- colour = "#800080"
- display_color = "#87ceeb"
-
-/decl/department/exploration
- name = "Exploration"
- colour = "#68099e"
- display_color = "#b784a7"
diff --git a/maps/exodus/jobs/_goals.dm b/maps/exodus/exodus_goals.dm
similarity index 87%
rename from maps/exodus/jobs/_goals.dm
rename to maps/exodus/exodus_goals.dm
index 72c324b5c1d..8275bc4173b 100644
--- a/maps/exodus/jobs/_goals.dm
+++ b/maps/exodus/exodus_goals.dm
@@ -29,12 +29,12 @@ var/global/list/exodus_paperwork_end_areas = list()
/datum/goal/department/paperwork/exodus
paperwork_types = list(/obj/item/paperwork/exodus)
signatory_job_list = list(
- /datum/job/captain,
- /datum/job/hop,
- /datum/job/cmo,
- /datum/job/chief_engineer,
- /datum/job/rd,
- /datum/job/hos
+ /datum/job/standard/captain,
+ /datum/job/standard/hop,
+ /datum/job/standard/cmo,
+ /datum/job/standard/chief_engineer,
+ /datum/job/standard/rd,
+ /datum/job/standard/hos
)
/datum/goal/department/paperwork/exodus/get_paper_spawn_turfs()
diff --git a/maps/exodus/exodus_jobs.dm b/maps/exodus/exodus_jobs.dm
index 68f1d5b8e67..1e09ef50b52 100644
--- a/maps/exodus/exodus_jobs.dm
+++ b/maps/exodus/exodus_jobs.dm
@@ -7,40 +7,40 @@
spawn_decl = /decl/spawnpoint/gateway
/datum/map/exodus
- default_job_type = /datum/job/assistant
+ default_job_type = /datum/job/standard/assistant
default_department_type = /decl/department/civilian
- id_hud_icons = 'maps/exodus/hud.dmi'
allowed_jobs = list(
- /datum/job/captain,
- /datum/job/hop,
- /datum/job/chaplain,
- /datum/job/bartender,
- /datum/job/chef,
- /datum/job/hydro,
- /datum/job/qm,
- /datum/job/cargo_tech,
- /datum/job/mining,
- /datum/job/janitor,
- /datum/job/librarian,
- /datum/job/lawyer,
- /datum/job/chief_engineer,
- /datum/job/engineer,
- /datum/job/cmo,
- /datum/job/doctor,
- /datum/job/chemist,
- /datum/job/counselor,
- /datum/job/rd,
- /datum/job/scientist,
- /datum/job/roboticist,
- /datum/job/hos,
- /datum/job/detective,
- /datum/job/warden,
- /datum/job/officer,
- /datum/job/robot,
- /datum/job/computer
+ /datum/job/standard/captain,
+ /datum/job/standard/hop,
+ /datum/job/standard/chaplain,
+ /datum/job/standard/bartender,
+ /datum/job/standard/chef,
+ /datum/job/standard/hydro,
+ /datum/job/standard/qm,
+ /datum/job/standard/cargo_tech,
+ /datum/job/standard/mining,
+ /datum/job/standard/janitor,
+ /datum/job/standard/librarian,
+ /datum/job/standard/lawyer,
+ /datum/job/standard/chief_engineer,
+ /datum/job/standard/engineer,
+ /datum/job/standard/cmo,
+ /datum/job/standard/doctor,
+ /datum/job/standard/chemist,
+ /datum/job/standard/counselor,
+ /datum/job/standard/rd,
+ /datum/job/standard/scientist,
+ /datum/job/standard/roboticist,
+ /datum/job/standard/hos,
+ /datum/job/standard/detective,
+ /datum/job/standard/warden,
+ /datum/job/standard/officer,
+ /datum/job/standard/robot,
+ /datum/job/standard/computer
)
-#define HUMAN_ONLY_JOBS /datum/job/captain, /datum/job/hop, /datum/job/hos
+#define HUMAN_ONLY_JOBS /datum/job/standard/captain, /datum/job/standard/hop, /datum/job/standard/hos
+
species_to_job_blacklist = list(
/decl/species/unathi = list(
HUMAN_ONLY_JOBS
diff --git a/maps/exodus/exodus_loadout.dm b/maps/exodus/exodus_loadout.dm
index 107fa0ae8c9..d5f70fdf957 100644
--- a/maps/exodus/exodus_loadout.dm
+++ b/maps/exodus/exodus_loadout.dm
@@ -2,7 +2,7 @@
name = "religious insignia"
path = /obj/item/clothing/insignia
cost = 1
- allowed_roles = list(/datum/job/chaplain)
+ allowed_roles = list(/datum/job/standard/chaplain)
uid = "gear_accessory_insignia"
/decl/loadout_option/accessory/insignia/Initialize()
diff --git a/maps/exodus/exodus_overrides.dm b/maps/exodus/exodus_overrides.dm
index 947cbd184c1..c2babeabe95 100644
--- a/maps/exodus/exodus_overrides.dm
+++ b/maps/exodus/exodus_overrides.dm
@@ -9,3 +9,6 @@
/decl/background_category/heritage = /decl/background_detail/heritage/hidden/cultist,
/decl/background_category/faction = /decl/background_detail/faction/other
)
+
+/datum/map/exodus
+ default_law_type = /datum/ai_laws/nanotrasen
diff --git a/maps/exodus/hud.dmi b/maps/exodus/hud.dmi
deleted file mode 100644
index 952d808b00e..00000000000
Binary files a/maps/exodus/hud.dmi and /dev/null differ
diff --git a/maps/ministation/hud.dmi b/maps/ministation/hud.dmi
index d4fed05d840..8a3e91cf3a7 100644
Binary files a/maps/ministation/hud.dmi and b/maps/ministation/hud.dmi differ
diff --git a/maps/ministation/jobs/civilian.dm b/maps/ministation/jobs/civilian.dm
index 432d3455d21..18024cc2379 100644
--- a/maps/ministation/jobs/civilian.dm
+++ b/maps/ministation/jobs/civilian.dm
@@ -1,26 +1,14 @@
-/datum/job/ministation/assistant
+/datum/job/standard/assistant/ministation
title = "Recruit"
- total_positions = -1
- spawn_positions = -1
supervisors = "absolutely everyone"
- economic_power = 1
- access = list()
- minimal_access = list()
- hud_icon = "hudassistant"
alt_titles = list("Technical Recruit","Medical Recruit","Research Recruit","Visitor")
outfit_type = /decl/outfit/job/ministation_assistant
- department_types = list(/decl/department/civilian)
event_categories = list(ASSIGNMENT_GARDENER)
-/datum/job/ministation/assistant/get_access()
- if(get_config_value(/decl/config/toggle/assistant_maint))
- return list(access_maint_tunnels)
- return list()
-
/decl/outfit/job/ministation_assistant
name = "Job - Ministation Assistant"
-/datum/job/ministation/bartender
+/datum/job/standard/bartender/ministation
title = "Bartender"
alt_titles = list("Cook","Barista")
supervisors = "the Lieutenant and the Captain"
@@ -30,16 +18,6 @@
department_types = list(/decl/department/service)
selection_color = "#3fbe4a"
economic_power = 5
- access = list(
- access_hydroponics,
- access_bar,
- access_kitchen
- )
- minimal_access = list(
- access_hydroponics,
- access_bar,
- access_kitchen
- )
min_skill = list(
SKILL_COOKING = SKILL_ADEPT,
SKILL_BOTANY = SKILL_BASIC,
@@ -51,14 +29,13 @@
)
skill_points = 30
-/datum/job/ministation/cargo
+/datum/job/standard/cargo_tech/ministation
title = "Cargo Technician"
alt_titles = list("Shaft Miner","Drill Technician","Prospector")
supervisors = "the Lieutenant and the Captain"
total_positions = 3
spawn_positions = 1
outfit_type = /decl/outfit/job/ministation/cargo
- department_types = list(/decl/department/service)
selection_color = "#8a7c00"
economic_power = 5
access = list(
@@ -94,57 +71,24 @@
SKILL_FINANCE = SKILL_MAX
)
skill_points = 30
- software_on_spawn = list(
- /datum/computer_file/program/supply,
- /datum/computer_file/program/deck_management,
- /datum/computer_file/program/reports
- )
-/datum/job/ministation/janitor
- title = "Janitor"
- event_categories = list(ASSIGNMENT_JANITOR)
- department_types = list(/decl/department/service)
+/datum/job/standard/janitor/ministation
total_positions = 2
- spawn_positions = 1
supervisors = "the Lieutenant and the Captain"
economic_power = 3
selection_color = "#940088"
- access = list(
- access_janitor,
- access_maint_tunnels,
- access_engine,
- access_research,
- access_sec_doors,
- access_medical
- )
- minimal_access = list(
- access_janitor,
- access_maint_tunnels,
- access_engine,
- access_research,
- access_sec_doors,
- access_medical
- )
- alt_titles = list(
- "Custodian",
- "Sanitation Technician"
- )
outfit_type = /decl/outfit/job/ministation/janitor
min_skill = list(
SKILL_HAULING = SKILL_BASIC
)
skill_points = 28
-/datum/job/ministation/librarian
- title = "Librarian"
- department_types = list(/decl/department/service)
- total_positions = 1
+/datum/job/standard/librarian/ministation
spawn_positions = 2
supervisors = "the Lieutenant, the Captain, and the smell of old paper"
economic_power = 5
selection_color = "#008800"
access = list(access_library)
- minimal_access = list(access_library)
alt_titles = list(
"Curator",
"Archivist"
diff --git a/maps/ministation/jobs/command.dm b/maps/ministation/jobs/command.dm
index 7424f7724a5..1a27ff0736d 100644
--- a/maps/ministation/jobs/command.dm
+++ b/maps/ministation/jobs/command.dm
@@ -1,7 +1,7 @@
-/datum/job/ministation/captain
- title = "Captain"
+/datum/job/standard/captain/ministation
supervisors = "your profit margin, your conscience, and the watchful eye of the Tradehouse Rep"
outfit_type = /decl/outfit/job/ministation/captain
+ hud_icon = 'maps/ministation/hud.dmi'
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
SKILL_WEAPONS = SKILL_ADEPT,
@@ -13,30 +13,12 @@
SKILL_WEAPONS = SKILL_MAX
)
skill_points = 40
- head_position = 1
- department_types = list(/decl/department/command)
- total_positions = 1
- spawn_positions = 1
- selection_color = "#1d1d4f"
- hud_icon = "hudcaptain"
- req_admin_notify = 1
- access = list()
- minimal_access = list()
- minimal_player_age = 14
- economic_power = 20
- ideal_character_age = 70
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
-/datum/job/ministation/captain/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
+/datum/job/standard/captain/ministation/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
. = ..()
if(H)
H.verbs |= /mob/proc/freetradeunion_rename_company
-/datum/job/ministation/captain/get_access()
- return get_all_station_access()
-
/mob/proc/freetradeunion_rename_company()
set name = "Defect from Tradehouse"
set category = "Captain's Powers"
@@ -52,113 +34,11 @@
command_announcement.Announce("Congratulations to all members of [capitalize(global.using_map.company_name)] on the new name. Their rebranding has changed the [global.using_map.company_short] market value by [0.01*rand(-10,10)]%.", "Trade Union Name Change")
verbs -= /mob/proc/freetradeunion_rename_company
-/datum/job/ministation/hop
+/datum/job/standard/hop/ministation
title = "Lieutenant"
- supervisors = "the Captain"
outfit_type = /decl/outfit/job/ministation/hop
- head_position = 1
- department_types = list(
- /decl/department/command,
- /decl/department/civilian
- )
- total_positions = 1
- spawn_positions = 1
- selection_color = "#2f2f7f"
- hud_icon = "hudlieutenant"
- req_admin_notify = 1
- minimal_player_age = 14
- economic_power = 10
- ideal_character_age = 50
- guestbanned = 1
- not_random_selectable = 1
- access = list(
- access_security,
- access_sec_doors,
- access_brig,
- access_forensics_lockers,
- access_armory,
- access_heads,
- access_medical,
- access_engine,
- access_atmospherics,
- access_change_ids,
- access_ai_upload,
- access_eva,
- access_bridge,
- access_all_personal_lockers,
- access_maint_tunnels,
- access_bar,
- access_janitor,
- access_construction,
- access_morgue,
- access_crematorium,
- access_kitchen,
- access_mining,
- access_xenobiology,
- access_robotics,
- access_engine_equip,
- access_cargo,
- access_cargo_bot,
- access_mailsorting,
- access_qm,
- access_hydroponics,
- access_lawyer,
- access_chapel_office,
- access_library,
- access_research,
- access_mining,
- access_heads_vault,
- access_mining_station,
- access_hop,
- access_RC_announce,
- access_keycard_auth,
- access_gateway,
- access_cameras
- )
- minimal_access = list(
- access_security,
- access_sec_doors,
- access_brig,
- access_forensics_lockers,
- access_armory,
- access_heads,
- access_medical,
- access_engine,
- access_atmospherics,
- access_change_ids,
- access_ai_upload,
- access_eva,
- access_bridge,
- access_all_personal_lockers,
- access_maint_tunnels,
- access_bar,
- access_janitor,
- access_construction,
- access_mining,
- access_xenobiology,
- access_robotics,
- access_engine_equip,
- access_morgue,
- access_crematorium,
- access_kitchen,
- access_cargo,
- access_cargo_bot,
- access_mailsorting,
- access_qm,
- access_hydroponics,
- access_lawyer,
- access_chapel_office,
- access_library,
- access_research,
- access_mining,
- access_heads_vault,
- access_mining_station,
- access_hop,
- access_RC_announce,
- access_keycard_auth,
- access_gateway,
- access_cameras
- )
+ hud_icon = 'maps/ministation/hud.dmi'
+ hud_icon_state = "hudlieutenant"
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
SKILL_WEAPONS = SKILL_BASIC,
diff --git a/maps/ministation/jobs/engineering.dm b/maps/ministation/jobs/engineering.dm
index b3d12fd6afa..a3cb57fbc0a 100644
--- a/maps/ministation/jobs/engineering.dm
+++ b/maps/ministation/jobs/engineering.dm
@@ -1,12 +1,9 @@
-/datum/job/ministation/engineer
+/datum/job/standard/engineer/ministation
title = "Station Engineer"
supervisors = "the Head Engineer"
total_positions = 2
spawn_positions = 2
outfit_type = /decl/outfit/job/ministation/engineer
- department_types = list(/decl/department/engineering)
- selection_color = "#5b4d20"
- economic_power = 5
minimal_player_age = 3
access = list(
access_eva,
@@ -32,42 +29,11 @@
access_emergency_storage,
access_cameras
)
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_BASIC,
- SKILL_EVA = SKILL_BASIC,
- SKILL_CONSTRUCTION = SKILL_ADEPT,
- SKILL_ELECTRICAL = SKILL_BASIC,
- SKILL_ATMOS = SKILL_BASIC,
- SKILL_ENGINES = SKILL_BASIC
- )
- max_skill = list(
- SKILL_CONSTRUCTION = SKILL_MAX,
- SKILL_ELECTRICAL = SKILL_MAX,
- SKILL_ATMOS = SKILL_MAX,
- SKILL_ENGINES = SKILL_MAX
- )
skill_points = 30
alt_titles = list("Atmospheric Technician", "Electrician", "Maintenance Technician")
- event_categories = list(ASSIGNMENT_ENGINEER)
-/datum/job/ministation/engineer/head
+/datum/job/standard/chief_engineer/ministation
title = "Head Engineer"
- head_position = 1
- department_types = list(
- /decl/department/engineering,
- /decl/department/command
- )
- total_positions = 1
- spawn_positions = 1
- selection_color = "#7f6e2c"
- req_admin_notify = 1
- economic_power = 10
- ideal_character_age = 50
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
- hud_icon = "hudchiefengineer"
access = list(
access_engine,
access_engine_equip,
@@ -116,24 +82,6 @@
access_ai_upload,
access_cameras
)
- minimal_player_age = 14
- supervisors = "the Captain"
outfit_type = /decl/outfit/job/ministation/chief_engineer
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_ADEPT,
- SKILL_EVA = SKILL_ADEPT,
- SKILL_CONSTRUCTION = SKILL_ADEPT,
- SKILL_ELECTRICAL = SKILL_ADEPT,
- SKILL_ATMOS = SKILL_ADEPT,
- SKILL_ENGINES = SKILL_EXPERT
- )
- max_skill = list(
- SKILL_CONSTRUCTION = SKILL_MAX,
- SKILL_ELECTRICAL = SKILL_MAX,
- SKILL_ATMOS = SKILL_MAX,
- SKILL_ENGINES = SKILL_MAX
- )
skill_points = 40
alt_titles = list("Chief of Engineering")
- event_categories = list(ASSIGNMENT_ENGINEER)
\ No newline at end of file
diff --git a/maps/ministation/jobs/medical.dm b/maps/ministation/jobs/medical.dm
index 00c298a4c01..1dd568c8176 100644
--- a/maps/ministation/jobs/medical.dm
+++ b/maps/ministation/jobs/medical.dm
@@ -1,7 +1,5 @@
-/datum/job/ministation/doctor
+/datum/job/standard/doctor/ministation
title = "Medical Doctor"
- department_types = list(/decl/department/medical)
- head_position = 0
supervisors = "the Head Doctor"
total_positions = 2
spawn_positions = 2
@@ -18,8 +16,6 @@
SKILL_ANATOMY = SKILL_MAX,
SKILL_CHEMISTRY = SKILL_MAX
)
- selection_color = "#013d3b"
- economic_power = 7
access = list(
access_medical,
access_medical_equip,
@@ -38,29 +34,13 @@
access_cameras
)
outfit_type = /decl/outfit/job/ministation/doctor
- minimal_player_age = 3
- event_categories = list(ASSIGNMENT_MEDICAL)
-/datum/job/ministation/doctor/head
+/datum/job/standard/cmo/ministation
title = "Head Doctor"
- head_position = 1
- department_types = list(
- /decl/department/medical,
- /decl/department/command
- )
supervisors = "the Captain and your own ethics"
outfit_type = /decl/outfit/job/ministation/doctor/head
alt_titles = list("Chief Medical Officer", "Head Surgeon")
- total_positions = 1
- spawn_positions = 1
skill_points = 38
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
- selection_color = "#026865"
- req_admin_notify = 1
- economic_power = 10
- hud_icon = "hudheaddoctor"
access = list(
access_medical,
access_medical_equip,
@@ -113,6 +93,3 @@
access_external_airlocks,
access_cameras
)
- minimal_player_age = 14
- ideal_character_age = 50
- event_categories = list(ASSIGNMENT_MEDICAL)
\ No newline at end of file
diff --git a/maps/ministation/jobs/science.dm b/maps/ministation/jobs/science.dm
index f9bcb575468..7b8e61e4591 100644
--- a/maps/ministation/jobs/science.dm
+++ b/maps/ministation/jobs/science.dm
@@ -1,49 +1,14 @@
-/datum/job/ministation/scientist
+/datum/job/standard/scientist/ministation
title = "Researcher"
alt_titles = list("Scientist","Xenobiologist","Roboticist","Xenobotanist")
supervisors = "the Head Researcher"
spawn_positions = 1
total_positions = 2
- department_types = list(/decl/department/science)
outfit_type = /decl/outfit/job/ministation/scientist
- hud_icon = "hudscientist"
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_BASIC,
- SKILL_DEVICES = SKILL_BASIC,
- SKILL_SCIENCE = SKILL_ADEPT
- )
- max_skill = list(
- SKILL_ANATOMY = SKILL_MAX,
- SKILL_DEVICES = SKILL_MAX,
- SKILL_SCIENCE = SKILL_MAX
- )
skill_points = 34
- access = list(
- access_robotics,
- access_tox,
- access_tox_storage,
- access_research,
- access_xenobiology,
- access_xenoarch
- )
- minimal_access = list(
- access_robotics,
- access_tox,
- access_tox_storage,
- access_research,
- access_xenobiology,
- access_xenoarch
- )
- selection_color = "#633d63"
- economic_power = 7
- event_categories = list(ASSIGNMENT_SCIENTIST)
-/datum/job/ministation/scientist/head
+/datum/job/standard/rd/ministation
title = "Research Director"
- supervisors = "the Captain"
- spawn_positions = 1
- total_positions = 1
alt_titles = list("Head Researcher", "Chief Researcher")
outfit_type = /decl/outfit/job/ministation/scientist/head
min_skill = list(
@@ -61,15 +26,6 @@
SKILL_SCIENCE = SKILL_MAX
)
skill_points = 40
- head_position = 1
- department_types = list(
- /decl/department/science,
- /decl/department/command
- )
- selection_color = "#ad6bad"
- req_admin_notify = 1
- economic_power = 15
- hud_icon = "hudheadscientist"
access = list(
access_rd,
access_bridge,
@@ -124,10 +80,3 @@
access_network,
access_cameras
)
- minimal_player_age = 14
- ideal_character_age = 50
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
- event_categories = list(ASSIGNMENT_SCIENTIST)
-
diff --git a/maps/ministation/jobs/security.dm b/maps/ministation/jobs/security.dm
index ac68182cff2..242c665e7f3 100644
--- a/maps/ministation/jobs/security.dm
+++ b/maps/ministation/jobs/security.dm
@@ -1,14 +1,10 @@
-/datum/job/ministation/security
+/datum/job/standard/officer/ministation
title = "Security Officer"
alt_titles = list("Warden")
- supervisors = "the Head of Security"
spawn_positions = 1
total_positions = 2
outfit_type = /decl/outfit/job/ministation/security
- department_types = list(/decl/department/security)
- selection_color = "#990000"
economic_power = 7
- minimal_player_age = 7
access = list(
access_security,
access_brig,
@@ -24,28 +20,14 @@
access_brig,
access_cameras
)
- min_skill = list(
- SKILL_LITERACY = SKILL_BASIC,
- SKILL_COMPUTER = SKILL_BASIC,
- SKILL_COMBAT = SKILL_BASIC,
- SKILL_WEAPONS = SKILL_BASIC
- )
- max_skill = list(
- SKILL_COMBAT = SKILL_MAX,
- SKILL_WEAPONS = SKILL_MAX
- )
skill_points = 30
- event_categories = list(ASSIGNMENT_SECURITY)
-/datum/job/ministation/detective
- title = "Detective"
+/datum/job/standard/detective/ministation
alt_titles = list("Inspector")
supervisors = "Justice... and the Trademaster"
spawn_positions = 1
total_positions = 1
outfit_type = /decl/outfit/job/ministation/detective
- department_types = list(/decl/department/security)
- selection_color = "#630000"
economic_power = 7
minimal_player_age = 3
access = list(
@@ -71,32 +53,10 @@
SKILL_WEAPONS = SKILL_BASIC,
SKILL_FORENSICS = SKILL_ADEPT
)
- max_skill = list(
- SKILL_COMBAT = SKILL_MAX,
- SKILL_WEAPONS = SKILL_MAX,
- SKILL_FORENSICS = SKILL_MAX
- )
skill_points = 34
-/datum/job/ministation/security/head
- title = "Head of Security"
- supervisors = "the Captain"
+/datum/job/standard/hos/ministation
outfit_type = /decl/outfit/job/ministation/security/head
- head_position = 1
- department_types = list(
- /decl/department/security,
- /decl/department/command
- )
- total_positions = 1
- spawn_positions = 1
- selection_color = "#9d2300"
- req_admin_notify = 1
- minimal_player_age = 14
- economic_power = 10
- ideal_character_age = 50
- guestbanned = 1
- not_random_selectable = 1
- hud_icon = "hudhos"
access = list(
access_security,
access_sec_doors,
@@ -139,9 +99,5 @@
SKILL_COMBAT = SKILL_ADEPT,
SKILL_WEAPONS = SKILL_ADEPT
)
- max_skill = list(
- SKILL_COMBAT = SKILL_MAX,
- SKILL_WEAPONS = SKILL_MAX
- )
skill_points = 40
alt_titles = list("Security Commander")
diff --git a/maps/ministation/jobs/synthetics.dm b/maps/ministation/jobs/synthetics.dm
deleted file mode 100644
index 1aea5738c90..00000000000
--- a/maps/ministation/jobs/synthetics.dm
+++ /dev/null
@@ -1,79 +0,0 @@
-/datum/job/ministation/robot
- title = "Robot"
- event_categories = list(ASSIGNMENT_ROBOT)
- total_positions = 1
- spawn_positions = 1
- supervisors = "your laws, the Lieutenant, and the Captain"
- selection_color = "#254c25"
- minimal_player_age = 7
- account_allowed = 0
- economic_power = 0
- loadout_allowed = FALSE
- outfit_type = /decl/outfit/job/silicon/cyborg
- hud_icon = "hudblank"
- skill_points = 0
- no_skill_buffs = TRUE
- guestbanned = 1
- not_random_selectable = 1
- skip_loadout_preview = TRUE
- department_types = list(/decl/department/miscellaneous)
-
-/datum/job/ministation/robot/handle_variant_join(var/mob/living/human/H, var/alt_title)
- if(H)
- return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title))
-
-/datum/job/ministation/robot/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
- return !!H
-
-/datum/job/ministation/robot/New()
- ..()
- alt_titles = SSrobots.robot_alt_titles.Copy()
- alt_titles -= title
-
-/datum/job/computer
- title = "Computer"
- event_categories = list(ASSIGNMENT_COMPUTER)
- total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm
- spawn_positions = 1
- selection_color = "#3f823f"
- supervisors = "your laws"
- req_admin_notify = 1
- minimal_player_age = 7
- account_allowed = 0
- economic_power = 0
- outfit_type = /decl/outfit/job/silicon/ai
- loadout_allowed = FALSE
- hud_icon = "hudblank"
- skill_points = 0
- no_skill_buffs = TRUE
- guestbanned = 1
- not_random_selectable = 1
- skip_loadout_preview = TRUE
- department_types = list(/decl/department/miscellaneous)
-
-/datum/job/computer/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
- return !!H
-
-/datum/job/computer/is_position_available()
- return (empty_playable_ai_cores.len != 0)
-
-/datum/job/computer/handle_variant_join(var/mob/living/human/H, var/alt_title)
- return H
-
-/datum/job/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin)
- character = character.AIize(move = FALSE)
-
- // is_available for AI checks that there is an empty core available in this list
- var/obj/structure/aicore/deactivated/C = empty_playable_ai_cores[1]
- empty_playable_ai_cores -= C
-
- character.forceMove(C.loc)
- var/mob/living/silicon/ai/A = character
- A.on_mob_init()
-
- if(latejoin)
- new_player_mob.AnnounceCyborg(character, title, "has been downloaded to the empty core in \the [get_area_name(src)]")
- SSticker.mode.handle_latejoin(character)
-
- qdel(C)
- return TRUE
diff --git a/maps/ministation/jobs/tradehouse.dm b/maps/ministation/jobs/tradehouse.dm
index ed057b4fb20..daa715dddd5 100644
--- a/maps/ministation/jobs/tradehouse.dm
+++ b/maps/ministation/jobs/tradehouse.dm
@@ -1,7 +1,8 @@
-/datum/job/ministation/tradehouse/rep
+/datum/job/tradehouse_rep
title = "Tradehouse Representative"
alt_titles = list("Narc")
- hud_icon = "hudnarc"
+ hud_icon_state = "hudnarc"
+ hud_icon = 'maps/ministation/hud.dmi'
spawn_positions = 1
total_positions = 2
req_admin_notify = 1
diff --git a/maps/ministation/ministation-0.dmm b/maps/ministation/ministation-0.dmm
index c715e45dc03..35b21cdc415 100644
--- a/maps/ministation/ministation-0.dmm
+++ b/maps/ministation/ministation-0.dmm
@@ -31,7 +31,7 @@
/turf/wall/natural/random/ministation,
/area/space)
"ai" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/pool,
/area/ministation/dorms)
"ak" = (
@@ -104,7 +104,7 @@
/obj/structure/disposalpipe/junction{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"aG" = (
/obj/structure/table,
@@ -179,7 +179,7 @@
/area/ministation/eva)
"aZ" = (
/obj/structure/fitness/punchingbag,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"bb" = (
/obj/effect/floor_decal/corner/blue,
@@ -422,7 +422,7 @@
/turf/floor/tiled,
/area/ministation/cargo)
"cd" = (
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/turf/floor/plating/airless,
/area/space)
"ce" = (
@@ -455,7 +455,7 @@
/turf/floor/plating/airless,
/area/space)
"cl" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/loading{
dir = 8
},
@@ -469,7 +469,7 @@
/turf/floor/plating/airless,
/area/space)
"cp" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "2-4"
},
@@ -486,7 +486,7 @@
dir = 8
},
/obj/machinery/computer/modular/preset/engineering,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"cv" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -609,7 +609,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"cM" = (
/obj/machinery/conveyor{
@@ -753,7 +753,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"dw" = (
/obj/structure/cable{
@@ -815,7 +815,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/cargo)
"dF" = (
@@ -891,7 +891,7 @@
/obj/item/clothing/suit/jacket/winter,
/obj/item/clothing/suit/cloak,
/obj/item/clothing/suit/cloak,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"dR" = (
/obj/structure/reagent_dispensers/fueltank,
@@ -944,7 +944,7 @@
/turf/floor/tiled,
/area/ministation/janitor)
"ej" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/cargo)
"ek" = (
@@ -1103,7 +1103,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/junction,
/obj/structure/cable{
icon_state = "2-8"
@@ -1267,7 +1267,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/floor/tiled,
/area/ministation/cargo)
@@ -1319,7 +1319,7 @@
/turf/floor/plating,
/area/ministation/engine)
"ft" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/hologram/holopad,
/obj/item/radio/intercom/locked{
dir = 4;
@@ -1506,7 +1506,7 @@
/turf/floor/plating,
/area/ministation/ai_sat)
"fW" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden,
/turf/floor/tiled,
/area/ministation/engine)
@@ -1592,7 +1592,7 @@
/turf/floor/tiled,
/area/ministation/cargo)
"gk" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -1601,7 +1601,7 @@
/area/ministation/cargo)
"gl" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -1727,7 +1727,7 @@
/turf/floor/reinforced/airmix,
/area/ministation/atmospherics)
"gF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/light{
dir = 4
},
@@ -1823,7 +1823,7 @@
/obj/abstract/landmark/start{
name = "Recruit"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"gY" = (
/obj/machinery/atmospherics/pipe/simple/visible/green{
@@ -1860,7 +1860,7 @@
/obj/machinery/computer/modular/preset/civilian{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"hf" = (
/turf/floor/plating,
@@ -1903,7 +1903,7 @@
/turf/floor/tiled,
/area/ministation/cargo)
"hq" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -1936,7 +1936,7 @@
dir = 1;
pixel_y = -22
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -2059,7 +2059,7 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -2093,7 +2093,7 @@
"ia" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"ie" = (
/obj/machinery/door/airlock/external/bolted{
@@ -2225,11 +2225,11 @@
dir = 2;
icon_state = "pipe-c"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"iU" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/binary/pump/on{
target_pressure = 200;
dir = 8
@@ -2260,7 +2260,7 @@
"je" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"jf" = (
/obj/machinery/atmospherics/binary/circulator{
@@ -2277,7 +2277,7 @@
dir = 4;
pixel_x = -24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"jn" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
@@ -2352,7 +2352,7 @@
/obj/machinery/vending/games{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"jC" = (
/obj/effect/floor_decal/corner/white{
@@ -2502,7 +2502,7 @@
/obj/machinery/vending/hotfood{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"kb" = (
/obj/machinery/meter,
@@ -2569,7 +2569,7 @@
/turf/floor/tiled/techfloor,
/area/ministation/atmospherics)
"kw" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -2634,7 +2634,7 @@
/obj/structure/window/reinforced/tinted{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/start{
name = "Deck Hand"
},
@@ -2698,7 +2698,7 @@
/area/ministation/janitor)
"lb" = (
/obj/structure/undies_wardrobe,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"le" = (
/obj/machinery/atmospherics/pipe/simple/visible/green,
@@ -2747,7 +2747,7 @@
/turf/floor/tiled,
/area/ministation/hall/n)
"ln" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/turf/floor/tiled,
/area/ministation/engine)
@@ -2767,7 +2767,7 @@
/turf/floor/tiled,
/area/ministation/cargo)
"lr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -2814,7 +2814,7 @@
/obj/structure/bed/chair/comfy/black{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"lB" = (
/obj/structure/railing/mapped{
@@ -3167,7 +3167,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"nf" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
@@ -3183,7 +3183,7 @@
dir = 1
},
/obj/structure/window/reinforced/tinted,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random_multi/single_item/captains_spare_id,
/obj/structure/window/reinforced/tinted{
dir = 8
@@ -3248,7 +3248,7 @@
},
/obj/item/clothing/suit/jacket/winter,
/obj/item/clothing/suit/jacket/winter,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"nw" = (
/obj/structure/window/reinforced{
@@ -3288,7 +3288,7 @@
"nE" = (
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"nG" = (
/obj/effect/floor_decal/industrial/custodial{
@@ -3311,7 +3311,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"nM" = (
/obj/machinery/atmospherics/pipe/simple/visible/green{
@@ -3323,7 +3323,7 @@
"nN" = (
/obj/structure/curtain/open/bed,
/obj/machinery/recharge_station,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"nO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3374,7 +3374,7 @@
/area/ministation/maint/westatmos)
"ob" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"oc" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3389,7 +3389,7 @@
/obj/structure/bed/chair/comfy/black{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"oi" = (
/obj/machinery/atmospherics/binary/pump/on{
@@ -3700,7 +3700,7 @@
/turf/floor/plating,
/area/ministation/maint/l1central)
"qe" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"qf" = (
/obj/machinery/atmospherics/pipe/simple/visible/yellow,
@@ -3715,10 +3715,10 @@
pixel_y = 30
},
/obj/effect/floor_decal/industrial/hatch/red,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"qo" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
@@ -3756,11 +3756,11 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"qu" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3908,7 +3908,7 @@
dir = 8
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"rc" = (
/obj/structure/cable{
@@ -4091,7 +4091,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"sc" = (
/obj/abstract/turbolift_spawner/ministation{
@@ -4268,8 +4268,8 @@
/obj/structure/closet/crate,
/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty,
/obj/item/stack/material/ingot/mapped/copper/fifty,
/obj/item/stack/material/pane/mapped/glass/fifty,
@@ -4438,7 +4438,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"tB" = (
/obj/structure/cable{
@@ -4474,7 +4474,7 @@
/obj/abstract/landmark/start{
name = "Recruit"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"tK" = (
/obj/structure/disposalpipe/segment,
@@ -4500,7 +4500,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"tQ" = (
/turf/floor/plating,
@@ -4681,7 +4681,7 @@
/obj/structure/bed/chair/comfy/black{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"uK" = (
/turf/wall,
@@ -4695,7 +4695,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/door/firedoor,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"uM" = (
/obj/machinery/light/small{
@@ -4755,7 +4755,7 @@
/turf/floor/tiled/monotile,
/area/ministation/atmospherics)
"va" = (
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/pane/mapped/glass/fifty,
/obj/item/stock_parts/circuitboard/airlock_electronics,
/obj/item/stock_parts/circuitboard/airlock_electronics,
@@ -4861,7 +4861,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ministation/maint/eastatmos)
"vz" = (
@@ -4874,7 +4874,7 @@
/area/ministation/maint/westatmos)
"vB" = (
/obj/machinery/vending/fitness,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"vC" = (
/obj/structure/table,
@@ -4926,7 +4926,7 @@
/area/ministation/engine)
"vK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/bed/chair/wood{
dir = 8
},
@@ -4938,7 +4938,7 @@
"vL" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"vM" = (
/obj/machinery/floodlight,
@@ -5028,7 +5028,7 @@
dir = 8;
pixel_x = 24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"wm" = (
/obj/structure/closet/secure_closet/quartermaster{
@@ -5047,7 +5047,7 @@
/area/ministation/atmospherics)
"wp" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"ws" = (
/obj/structure/cable{
@@ -5060,13 +5060,13 @@
/turf/floor/plating,
/area/ministation/maint/l1ne)
"wt" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate,
/area/ministation/engine)
"wu" = (
/obj/structure/fitness/punchingbag,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"wv" = (
/obj/machinery/door/window/southleft,
@@ -5121,7 +5121,7 @@
/obj/item/gun/launcher/foam/revolver,
/obj/item/gun/launcher/foam,
/obj/item/gun/launcher/foam,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"wD" = (
/obj/machinery/door/airlock/hatch/maintenance,
@@ -5186,7 +5186,7 @@
/area/ministation/janitor)
"wT" = (
/obj/structure/closet/lasertag/blue,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"wZ" = (
/obj/item/mollusc/barnacle{
@@ -5203,7 +5203,7 @@
name = "Recruit"
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"xj" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -5231,7 +5231,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"xo" = (
/obj/machinery/emitter,
@@ -5252,7 +5252,7 @@
/turf/floor/plating,
/area/ministation/maint/l1central)
"xr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/sign/department/eva{
pixel_y = 30
},
@@ -5275,7 +5275,7 @@
/turf/floor/plating,
/area/ministation/maint/westatmos)
"xE" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
@@ -5490,7 +5490,7 @@
/obj/structure/disposalpipe/junction{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"yL" = (
/obj/machinery/light/small{
@@ -5556,6 +5556,10 @@
},
/turf/floor/tiled/monotile,
/area/ministation/atmospherics)
+"yY" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"yZ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -5695,7 +5699,7 @@
dir = 4
},
/obj/structure/railing/mapped,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"zW" = (
/turf/wall,
@@ -5768,7 +5772,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Aj" = (
/obj/machinery/light{
@@ -6011,7 +6015,7 @@
dir = 4;
pixel_x = 24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Ba" = (
/obj/machinery/alarm{
@@ -6025,7 +6029,7 @@
/obj/structure/railing/mapped{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Bd" = (
/turf/floor/plating/airless,
@@ -6051,7 +6055,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Bh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -6143,7 +6147,7 @@
/obj/structure/railing/mapped{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Bx" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -6272,7 +6276,7 @@
/obj/structure/closet,
/obj/item/clothing/suit/jacket/winter,
/obj/item/clothing/suit/jacket/winter,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"BV" = (
/obj/machinery/atmospherics/portables_connector,
@@ -6323,7 +6327,7 @@
/obj/abstract/landmark/start{
name = "Recruit"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Cg" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -6449,7 +6453,7 @@
/area/ministation/eva)
"CB" = (
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"CC" = (
/obj/item/stool/padded,
@@ -6541,13 +6545,13 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"CW" = (
/obj/machinery/door/airlock,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"CZ" = (
/obj/machinery/atmospherics/omni/filter{
@@ -6722,7 +6726,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "2-8"
},
@@ -7037,7 +7041,7 @@
/turf/floor/tiled,
/area/ministation/hall/s1)
"Eg" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
@@ -7062,7 +7066,7 @@
dir = 1;
pixel_x = -1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"Ej" = (
/obj/machinery/conveyor_switch{
@@ -7095,7 +7099,7 @@
/turf/floor/tiled,
/area/ministation/engine)
"En" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/engine)
"Eo" = (
@@ -7123,7 +7127,7 @@
/obj/abstract/landmark/start{
name = "Atmospheric Technician"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Es" = (
/obj/machinery/power/terminal{
@@ -7139,7 +7143,7 @@
/obj/abstract/landmark/start{
name = "Station Engineer"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Et" = (
/obj/effect/floor_decal/industrial/warning/corner{
@@ -7149,7 +7153,7 @@
/obj/abstract/landmark/start{
name = "Atmospheric Technician"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Eu" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
@@ -7188,13 +7192,13 @@
/obj/abstract/landmark/start{
name = "Station Engineer"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"EB" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"EE" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -7243,7 +7247,7 @@
/area/ministation/engine)
"EK" = (
/obj/effect/decal/cleanable/blood/oil,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
@@ -7260,15 +7264,15 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"EM" = (
/obj/item/boombox,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/table/woodentable_reinforced/walnut/maple,
-/turf/floor/wood,
+/obj/structure/table/laminate/reinforced/walnut/maple,
+/turf/floor/laminate,
/area/ministation/engine)
"EN" = (
/obj/structure/cable{
@@ -7277,11 +7281,11 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/structure/table/woodentable_reinforced/walnut/maple,
+/obj/structure/table/laminate/reinforced/walnut/maple,
/obj/item/chems/chem_disp_cartridge/coffee{
name = "coffee canister"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"EO" = (
/obj/item/food/old/pizza,
@@ -7289,8 +7293,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/table/woodentable_reinforced/walnut/maple,
-/turf/floor/wood,
+/obj/structure/table/laminate/reinforced/walnut/maple,
+/turf/floor/laminate,
/area/ministation/engine)
"EP" = (
/obj/machinery/vending/materials{
@@ -7317,12 +7321,12 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = 1;
pixel_y = 9
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"ET" = (
/obj/effect/floor_decal/corner/yellow/three_quarters,
@@ -7343,7 +7347,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 2;
icon_state = "pipe-c"
@@ -7400,13 +7404,13 @@
/obj/abstract/landmark/start{
name = "Station Engineer"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Fc" = (
/obj/item/wrench,
/obj/item/clothing/gloves/insulated,
-/obj/structure/table/woodentable_reinforced/walnut/maple,
-/turf/floor/wood,
+/obj/structure/table/laminate/reinforced/walnut/maple,
+/turf/floor/laminate,
/area/ministation/engine)
"Fd" = (
/obj/structure/cable{
@@ -7414,9 +7418,9 @@
},
/obj/item/stack/tape_roll/barricade_tape/atmos,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/table/woodentable_reinforced/walnut/maple,
+/obj/structure/table/laminate/reinforced/walnut/maple,
/obj/item/chems/spray/cleaner,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Fe" = (
/obj/structure/cable{
@@ -7424,21 +7428,21 @@
},
/obj/item/chems/drinks/glass2/coffeecup/metal,
/obj/item/chems/drinks/glass2/coffeecup/metal,
-/obj/structure/table/woodentable_reinforced/walnut/maple,
+/obj/structure/table/laminate/reinforced/walnut/maple,
/obj/item/chems/drinks/glass2/coffeecup/tall,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Ff" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/mob/living/simple_animal/opossum/poppy,
/obj/item/stool/padded,
/obj/abstract/landmark/start{
name = "Station Engineer"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Fg" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -7491,8 +7495,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate,
/area/ministation/engine)
"Fn" = (
/obj/machinery/space_heater,
@@ -7552,19 +7556,19 @@
dir = 10
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Fv" = (
/obj/structure/cable{
icon_state = "2-4"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Fw" = (
/obj/structure/cable{
icon_state = "1-8"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/engine)
"Fx" = (
/obj/machinery/vending/engivend{
@@ -7935,7 +7939,7 @@
/area/ministation/trash)
"Ge" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/floor/tiled,
/area/ministation/engine)
@@ -8088,7 +8092,7 @@
/area/ministation/engine)
"Gy" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/engine)
"Gz" = (
@@ -8339,7 +8343,7 @@
/obj/structure/window/reinforced{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/engine)
"Hd" = (
@@ -8383,7 +8387,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/engine)
"Hj" = (
@@ -8434,7 +8438,7 @@
/obj/item/clothing/shoes/sandal,
/obj/item/clothing/jumpsuit,
/obj/item/clothing/jumpsuit,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Ho" = (
/obj/structure/transit_tube,
@@ -8511,7 +8515,7 @@
/obj/effect/floor_decal/corner/yellow{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light{
dir = 1
},
@@ -8526,7 +8530,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-4"
},
@@ -8567,7 +8571,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/engine)
"HD" = (
@@ -8632,7 +8636,7 @@
/obj/structure/table,
/obj/item/folder/yellow,
/obj/item/clothing/head/earmuffs,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/cash/scavbucks,
/turf/floor/tiled,
/area/ministation/engine)
@@ -8848,7 +8852,7 @@
/turf/floor/plating,
/area/ministation/ai_sat)
"Iq" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "2-8"
},
@@ -8913,7 +8917,7 @@
/obj/machinery/camera/autoname{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"IF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -9018,7 +9022,7 @@
/obj/item/backpack,
/obj/item/backpack,
/obj/item/backpack,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"IQ" = (
/obj/structure/cable{
@@ -10311,14 +10315,14 @@
dir = 8
},
/obj/effect/floor_decal/industrial/hatch/red,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"MB" = (
/obj/abstract/landmark/start{
name = "Recruit"
},
/obj/item/stool/padded,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"MC" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -10483,7 +10487,7 @@
/area/ministation/atmospherics)
"Ne" = (
/obj/structure/closet/lasertag/red,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Nf" = (
/obj/effect/wallframe_spawn/reinforced,
@@ -10506,7 +10510,7 @@
pixel_x = -32;
pixel_y = -32
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
@@ -10574,7 +10578,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"Nw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -10888,7 +10892,7 @@
/area/ministation/maint/l1central)
"Oo" = (
/obj/structure/fitness/weightlifter,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Or" = (
/obj/machinery/light/small{
@@ -11145,7 +11149,7 @@
/turf/floor,
/area/ministation/maint/eastatmos)
"OY" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/turf/floor/tiled,
/area/ministation/hall/n)
@@ -11185,7 +11189,7 @@
/turf/floor/plating,
/area/ministation/ai_upload)
"Pe" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/floor/tiled,
/area/ministation/cargo)
@@ -11200,7 +11204,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"Pi" = (
/obj/machinery/drone_fabricator/maintenance,
@@ -11246,7 +11250,7 @@
/turf/space,
/area/ministation/supply_dock)
"Pq" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/table,
/obj/item/megaphone,
/obj/item/box,
@@ -11366,7 +11370,7 @@
/obj/machinery/vending/snix{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"PO" = (
/obj/machinery/camera/autoname{
@@ -11376,7 +11380,7 @@
dir = 1
},
/obj/machinery/disposal,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"PQ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -11561,7 +11565,7 @@
/area/ministation/smcontrol)
"QG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/s1)
"QH" = (
@@ -11588,7 +11592,7 @@
dir = 1;
level = 2
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"QO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -11629,7 +11633,7 @@
/obj/machinery/vending/coffee{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"QV" = (
/obj/structure/lattice,
@@ -11709,7 +11713,7 @@
dir = 4;
pixel_x = -22
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"Rh" = (
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
@@ -11756,7 +11760,7 @@
/turf/floor/tiled,
/area/ministation/cargo)
"Ro" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/clothing/mask/snorkel,
/obj/item/clothing/mask/snorkel,
/obj/machinery/light{
@@ -11776,7 +11780,7 @@
/turf/floor/plating/airless,
/area/ministation/mining)
"Rr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/s1)
"Rs" = (
@@ -11790,7 +11794,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/s1)
"Ru" = (
@@ -11824,7 +11828,7 @@
/area/ministation/supermatter)
"RA" = (
/obj/structure/closet/boxinggloves,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"RB" = (
/obj/item/radio/intercom{
@@ -11858,7 +11862,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"RE" = (
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
@@ -11964,7 +11968,7 @@
/mob/living/simple_animal/hostile/parrot/Poly,
/obj/structure/table/reinforced,
/obj/item/chems/drinks/glass2/coffeecup/one,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"Sa" = (
/obj/machinery/atmospherics/binary/pump/on{
@@ -12006,7 +12010,7 @@
level = 2
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Sg" = (
/obj/structure/closet/crate/solar,
@@ -12020,7 +12024,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -12039,7 +12043,7 @@
/area/ministation/atmospherics)
"So" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/n)
"Sp" = (
@@ -12062,7 +12066,7 @@
/turf/floor,
/area/ministation/maint/eastatmos)
"Ss" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -12081,7 +12085,7 @@
"Sv" = (
/obj/item/toy/ringbell,
/obj/structure/table/steel,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Sw" = (
/obj/structure/cable,
@@ -12106,7 +12110,7 @@
/obj/effect/floor_decal/corner/yellow{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/black{
dir = 10
},
@@ -12117,7 +12121,7 @@
name = "Recruit"
},
/obj/machinery/camera/autoname,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"SF" = (
/obj/structure/cable{
@@ -12197,7 +12201,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -12338,7 +12342,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Tv" = (
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
@@ -12404,7 +12408,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"TB" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
@@ -12497,7 +12501,7 @@
/turf/floor/tiled,
/area/ministation/engine)
"TP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
@@ -12544,7 +12548,7 @@
/turf/space,
/area/space)
"Ua" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/clothing/mask/snorkel,
/obj/item/clothing/mask/snorkel,
/turf/floor/pool,
@@ -12564,12 +12568,12 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Ue" = (
/obj/structure/table/gamblingtable,
/obj/machinery/chemical_dispenser/bar_alc/full,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/engine)
"Ug" = (
/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
@@ -12609,7 +12613,7 @@
/turf/floor/tiled,
/area/ministation/engine)
"Ul" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -12671,7 +12675,7 @@
dir = 1;
pixel_y = -23
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"UA" = (
/obj/machinery/light{
@@ -12745,7 +12749,7 @@
/turf/floor/tiled,
/area/ministation/engine)
"UT" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/binary/pump/on{
target_pressure = 200;
dir = 1
@@ -12804,7 +12808,7 @@
/obj/machinery/firealarm{
pixel_y = 24
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Vc" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
@@ -12821,7 +12825,7 @@
/obj/structure/curtain/open/bed,
/obj/structure/bed/padded,
/obj/item/bedsheet/ce,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Vj" = (
/obj/machinery/light{
@@ -12844,7 +12848,7 @@
},
/obj/item/clothing/suit/jacket/winter,
/obj/item/clothing/suit/jacket/winter,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Vm" = (
/obj/structure/cable/yellow{
@@ -12927,7 +12931,7 @@
/turf/floor/plating,
/area/ministation/supermatter)
"VF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/turf/floor/tiled,
/area/ministation/hall/s1)
@@ -13000,7 +13004,7 @@
"VT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"VV" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -13068,7 +13072,7 @@
dir = 1;
icon_state = "pipe-c"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Wi" = (
/obj/structure/disposaloutlet,
@@ -13117,7 +13121,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ministation/maint/eastatmos)
"Wn" = (
@@ -13212,7 +13216,7 @@
"WM" = (
/obj/machinery/door/airlock/double/glass/civilian,
/obj/machinery/door/firedoor,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"WO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -13261,7 +13265,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -13274,7 +13278,7 @@
/turf/space,
/area/space)
"Xb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
@@ -13344,7 +13348,7 @@
dir = 1
},
/obj/structure/window/reinforced/tinted,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
@@ -13358,7 +13362,7 @@
/area/ministation/dorms)
"Xo" = (
/obj/structure/table/reinforced,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Xt" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -13384,7 +13388,7 @@
/turf/floor/plating,
/area/ministation/mining)
"Xx" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/n)
"Xz" = (
@@ -13581,7 +13585,7 @@
/turf/floor/plating,
/area/ministation/engine)
"Yu" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "2-8"
},
@@ -13591,7 +13595,7 @@
/obj/structure/railing/mapped{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Yx" = (
/obj/effect/floor_decal/industrial/custodial{
@@ -13765,7 +13769,7 @@
dir = 2;
icon_state = "pipe-c"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"YW" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
@@ -13830,10 +13834,10 @@
dir = 4
},
/obj/machinery/camera/autoname,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/poster,
/obj/item/pen,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Zh" = (
/obj/machinery/light{
@@ -13898,7 +13902,7 @@
dir = 4
},
/obj/structure/disposalpipe/segment,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/dorms)
"Zv" = (
/obj/structure/ladder,
@@ -14017,7 +14021,7 @@
/area/ministation/engine)
"ZR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/turf/floor/tiled,
/area/ministation/hall/s1)
@@ -33009,7 +33013,7 @@ aa
aa
aa
aa
-aa
+yY
aa
aa
aa
@@ -49102,7 +49106,7 @@ aa
aa
aa
aa
-aa
+yY
aa
aa
aa
@@ -57125,7 +57129,7 @@ aa
aa
aa
aa
-aa
+yY
aa
aa
aa
diff --git a/maps/ministation/ministation-1.dmm b/maps/ministation/ministation-1.dmm
index ce6e50124ac..6646873ff83 100644
--- a/maps/ministation/ministation-1.dmm
+++ b/maps/ministation/ministation-1.dmm
@@ -242,7 +242,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/mob/living/simple_animal/passive/mouse/brown/Tom,
/turf/floor/lino,
/area/ministation/cafe)
@@ -271,7 +271,7 @@
pixel_y = 26
},
/obj/machinery/camera/network/security,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"by" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -329,7 +329,7 @@
/turf/floor/tiled,
/area/ministation/hall/w2)
"bJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/railing/mapped{
dir = 1
},
@@ -434,7 +434,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ministation/maint/l2centrals)
"cq" = (
@@ -474,7 +474,7 @@
/turf/floor/plating,
/area/ministation/hop)
"cA" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green,
/obj/machinery/firealarm{
dir = 4;
@@ -611,7 +611,7 @@
/area/ministation/hall/w2)
"dn" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/hygiene/drain,
/turf/floor/tiled/stone,
/area/ministation/hall/e2)
@@ -895,7 +895,7 @@
/turf/floor/plating,
/area/ministation/maint/l2centrals)
"ey" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
@@ -999,7 +999,7 @@
/turf/floor/tiled/dark,
/area/ministation/security)
"fm" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/borderfloorblack{
dir = 8
},
@@ -1218,7 +1218,7 @@
/turf/open,
/area/ministation/hall/e2)
"gB" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/item/pen/blue,
/turf/floor/carpet/red,
/area/ministation/security)
@@ -1264,7 +1264,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"gL" = (
/obj/effect/floor_decal/corner/paleblue/diagonal,
@@ -1500,7 +1500,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"hC" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/item/scanner/spectrometer,
/obj/item/handcuffs,
@@ -1633,7 +1633,7 @@
/turf/floor/tiled,
/area/ministation/security)
"id" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = -3;
pixel_y = 7
@@ -1673,7 +1673,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"in" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -1715,7 +1715,7 @@
dir = 4;
pixel_x = -22
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
@@ -1952,7 +1952,7 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"jl" = (
/obj/machinery/porta_turret{
@@ -2453,7 +2453,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/w2)
"lN" = (
@@ -2713,6 +2713,10 @@
},
/turf/floor/tiled,
/area/ministation/hall/w2)
+"nt" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"nu" = (
/obj/effect/floor_decal/carpet{
dir = 8
@@ -3020,7 +3024,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"pf" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/floor/tiled,
/area/ministation/hall/w2)
@@ -3052,7 +3056,7 @@
/turf/floor/plating/airless,
/area/space)
"ps" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/wall,
/area/ministation/hall/w2)
"pu" = (
@@ -3069,7 +3073,7 @@
/turf/floor/plating,
/area/ministation/maint/l2centraln)
"px" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/glass/beaker,
/turf/floor/lino,
/area/ministation/cafe)
@@ -3081,7 +3085,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/structure/window/reinforced{
dir = 4
},
@@ -3269,7 +3273,7 @@
/turf/floor/tiled/white,
/area/ministation/detective)
"qe" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/tiled,
/area/ministation/hall/w2)
"qf" = (
@@ -3644,7 +3648,7 @@
/turf/open,
/area/ministation/hall/w2)
"rA" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
@@ -3678,7 +3682,7 @@
/turf/floor/tiled,
/area/ministation/hop)
"rE" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
@@ -3910,7 +3914,7 @@
/area/ministation/medical)
"ss" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/w2)
"st" = (
@@ -4291,7 +4295,7 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/e2)
"tE" = (
@@ -4383,7 +4387,7 @@
dir = 4;
pixel_x = -22
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/cooker/fryer,
/turf/floor/lino,
/area/ministation/cafe)
@@ -4473,7 +4477,7 @@
/turf/floor/tiled,
/area/ministation/hall/w2)
"ub" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -4497,7 +4501,7 @@
/area/ministation/hall/w2)
"ud" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/ss13/l6,
/turf/floor/tiled,
/area/ministation/hall/w2)
@@ -4562,7 +4566,7 @@
/area/ministation/hall/e2)
"uq" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/stone,
/area/ministation/hall/e2)
"us" = (
@@ -4628,7 +4632,7 @@
/area/ministation/hall/w2)
"uD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/w2)
"uG" = (
@@ -4864,7 +4868,7 @@
/turf/floor/plating,
/area/ministation/medical)
"vq" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/manual/detective,
/turf/floor/carpet/red,
/area/ministation/detective)
@@ -4900,7 +4904,7 @@
/area/ministation/cafe)
"vw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/corner/paleblue/diagonal,
/turf/floor/tiled/dark,
@@ -5006,7 +5010,7 @@
/turf/floor/tiled/dark,
/area/ministation/medical)
"vO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning,
/obj/machinery/light{
dir = 8
@@ -5093,7 +5097,7 @@
/turf/space,
/area/space)
"wk" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/paleblue/diagonal,
/turf/floor/tiled/dark,
/area/ministation/cafe)
@@ -5234,7 +5238,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"wD" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/e2)
"wE" = (
@@ -5415,7 +5419,7 @@
/turf/floor/plating,
/area/ministation/maint/l2centrals)
"xn" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/item/paper_bin,
/turf/floor/carpet/red,
/area/ministation/security)
@@ -5488,7 +5492,7 @@
/turf/floor/tiled,
/area/ministation/hydro)
"xy" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/green/half{
dir = 1
},
@@ -5597,7 +5601,7 @@
/area/ministation/security)
"xQ" = (
/obj/item/stool/padded,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/paleblue/diagonal,
/turf/floor/tiled/dark,
/area/ministation/cafe)
@@ -5793,7 +5797,7 @@
/turf/floor/tiled/dark,
/area/ministation/cafe)
"yw" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -5807,7 +5811,7 @@
/obj/machinery/camera/autoname{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
@@ -6062,7 +6066,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/structure/window/reinforced{
dir = 8
},
@@ -6132,7 +6136,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/lino,
/area/ministation/cafe)
"zF" = (
@@ -6150,7 +6154,7 @@
pixel_x = -3;
pixel_y = 6
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/button/blast_door{
id_tag = "Kitchen1";
name = "Kitchen Shutter";
@@ -6173,7 +6177,7 @@
/turf/floor/lino,
/area/ministation/cafe)
"zK" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/floor/lino,
@@ -6237,14 +6241,14 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"zZ" = (
/obj/structure/bed/chair/comfy/beige{
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/w2)
"Ae" = (
@@ -6446,7 +6450,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/stone,
/area/ministation/hall/e2)
"AJ" = (
@@ -6473,7 +6477,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"AK" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
@@ -6523,7 +6527,7 @@
/turf/floor/plating,
/area/ministation/hall/w2)
"Bk" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin{
pixel_x = 1;
pixel_y = 9
@@ -6533,7 +6537,7 @@
/turf/floor/carpet,
/area/ministation/hall/w2)
"Bm" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/lino,
/area/ministation/cafe)
"Br" = (
@@ -6627,7 +6631,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"BJ" = (
/obj/machinery/door/firedoor,
@@ -6708,8 +6712,10 @@
pixel_y = -24;
dir = 1
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/reagent_temperature,
+/obj/item/chems/cooking_vessel/pot,
+/obj/item/chems/cooking_vessel/skillet,
/turf/floor/lino,
/area/ministation/cafe)
"Ct" = (
@@ -6776,7 +6782,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"CL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -6873,7 +6879,7 @@
/turf/floor/tiled/dark,
/area/ministation/security)
"Dj" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/condiment/enzyme,
/obj/item/mollusc/clam,
/obj/item/mollusc/clam,
@@ -7240,7 +7246,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"Ft" = (
-/obj/structure/target_stake,
+/obj/structure/target_stake/steel,
/turf/floor/tiled,
/area/ministation/security)
"Fy" = (
@@ -7274,7 +7280,7 @@
/turf/floor/tiled,
/area/ministation/hydro)
"FJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -7411,7 +7417,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/borderfloorblack{
dir = 8
},
@@ -7476,7 +7482,7 @@
/turf/floor/tiled,
/area/ministation/hall/w2)
"GZ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/w2)
"Hd" = (
@@ -7489,7 +7495,7 @@
/obj/effect/floor_decal/industrial/firstaid{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/ministation/hall/e2)
"Hn" = (
@@ -7508,7 +7514,7 @@
/turf/floor/tiled,
/area/ministation/hydro)
"Hx" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/reagent_temperature/cooler,
/turf/floor/lino,
/area/ministation/cafe)
@@ -7563,7 +7569,7 @@
dir = 1
},
/obj/item/clothing/head/beret/corp/sec,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"HG" = (
/obj/structure/table,
@@ -7639,7 +7645,7 @@
/turf/floor/tiled/dark,
/area/ministation/security)
"Ia" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/machinery/faxmachine/mapped,
/turf/floor/carpet/red,
/area/ministation/security)
@@ -7800,7 +7806,7 @@
/turf/floor/tiled/white,
/area/ministation/medical)
"IX" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -7832,7 +7838,7 @@
/turf/floor/fake_grass,
/area/ministation/hydro)
"Jj" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/camera/autoname{
dir = 8
},
@@ -7879,7 +7885,7 @@
/turf/floor/tiled/dark,
/area/ministation/security)
"Jo" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigarettes,
/obj/item/pen,
/obj/structure/cable{
@@ -7903,7 +7909,7 @@
/area/ministation/hall/e2)
"Jz" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/railing/mapped,
/obj/effect/floor_decal/borderfloorblack/corner{
dir = 4
@@ -7929,7 +7935,7 @@
/turf/floor/tiled,
/area/ministation/hall/e2)
"JJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/visible/universal{
dir = 4
},
@@ -8195,7 +8201,7 @@
/turf/floor/tiled,
/area/ministation/security)
"Lk" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/item/pen/multi,
/turf/floor/carpet/red,
/area/ministation/security)
@@ -8214,7 +8220,7 @@
/turf/floor/tiled,
/area/ministation/security)
"Lr" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/reagentgrinder/juicer,
/obj/item/chems/glass/beaker,
/turf/floor/lino,
@@ -8269,7 +8275,7 @@
/turf/floor/carpet/red,
/area/ministation/security)
"LM" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/knife/kitchen/cleaver,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
@@ -8356,18 +8362,18 @@
/area/ministation/medical)
"Me" = (
/obj/structure/rack,
-/obj/item/target,
-/obj/item/target/alien,
-/obj/item/target/syndicate,
+/obj/item/training_dummy,
+/obj/item/training_dummy/alien,
+/obj/item/training_dummy/syndicate,
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/item/target/syndicate,
-/obj/item/target/syndicate,
-/obj/item/target/syndicate,
-/obj/item/target/alien,
-/obj/item/target/alien,
-/obj/item/target/alien,
+/obj/item/training_dummy/syndicate,
+/obj/item/training_dummy/syndicate,
+/obj/item/training_dummy/syndicate,
+/obj/item/training_dummy/alien,
+/obj/item/training_dummy/alien,
+/obj/item/training_dummy/alien,
/turf/floor/tiled,
/area/ministation/security)
"Mp" = (
@@ -8530,7 +8536,7 @@
/turf/floor/fake_grass,
/area/ministation/hall/e2)
"Nh" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/effect/floor_decal/industrial/warning/corner{
dir = 4;
@@ -8903,7 +8909,7 @@
/turf/floor/plating,
/area/ministation/medical)
"Pd" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigarettes{
pixel_y = 2
},
@@ -8961,7 +8967,7 @@
"Ps" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/ministation/cafe)
"Pw" = (
@@ -9215,7 +9221,7 @@
/turf/floor/tiled,
/area/ministation/hall/e2)
"QH" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/item/pen,
/turf/floor/carpet/red,
/area/ministation/security)
@@ -9259,7 +9265,7 @@
/area/ministation/hall/w2)
"QO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/lino,
/area/ministation/cafe)
"QP" = (
@@ -9329,7 +9335,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/lino,
/area/ministation/cafe)
"Rx" = (
@@ -9471,7 +9477,7 @@
/turf/floor/plating,
/area/ministation/arrival)
"Sy" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/obj/effect/floor_decal/industrial/warning{
dir = 1;
@@ -9520,7 +9526,7 @@
/turf/floor/plating,
/area/ministation/arrival)
"SF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/ss13/l4,
/turf/floor/tiled,
@@ -9623,7 +9629,7 @@
/turf/floor/tiled/dark,
/area/ministation/security)
"To" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/corner/paleblue/diagonal,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -9755,15 +9761,15 @@
/turf/floor/tiled,
/area/ministation/security)
"TX" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/eftpos,
/obj/item/chems/spray/cleaner,
+/obj/item/chems/packet/honey_fake,
+/obj/item/chems/packet/honey_fake,
/obj/item/chems/packet/honey,
/obj/item/chems/packet/honey,
/obj/item/chems/packet/honey,
-/obj/item/chems/packet/honey,
-/obj/item/chems/packet/honey,
-/obj/item/chems/packet/honey,
+/obj/item/chems/packet/honey_fake,
/obj/item/chems/packet/honey,
/turf/floor/lino,
/area/ministation/cafe)
@@ -9775,7 +9781,7 @@
/turf/floor/tiled/dark,
/area/ministation/cafe)
"Ug" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/railing/mapped,
/obj/structure/cable{
icon_state = "4-8"
@@ -9816,7 +9822,7 @@
/turf/floor/plating,
/area/ministation/maint/secmaint)
"Ur" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/turf/floor/carpet/red,
/area/ministation/security)
"Ut" = (
@@ -10132,7 +10138,7 @@
/turf/floor/plating,
/area/ministation/medical)
"Wa" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp/green{
pixel_x = 1;
pixel_y = 5
@@ -10194,7 +10200,7 @@
dir = 4;
pixel_x = -23
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ministation/detective)
"Wm" = (
/obj/effect/floor_decal/industrial/warning{
@@ -10239,7 +10245,7 @@
/turf/floor/plating,
/area/ministation/arrival)
"WC" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
@@ -10446,12 +10452,12 @@
/turf/floor/tiled/white,
/area/ministation/detective)
"XK" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/ss13/l14,
/turf/floor/tiled,
/area/ministation/hall/w2)
"XW" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/ammo/beanbags,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
@@ -10515,7 +10521,7 @@
pixel_x = 32;
pixel_y = 32
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
@@ -54008,7 +54014,7 @@ aa
aa
aa
aa
-aa
+nt
aa
aa
aa
@@ -54341,7 +54347,7 @@ aa
aa
aa
aa
-aa
+nt
aa
aa
aa
diff --git a/maps/ministation/ministation-2.dmm b/maps/ministation/ministation-2.dmm
index 722f234f11f..e7fbc07d968 100644
--- a/maps/ministation/ministation-2.dmm
+++ b/maps/ministation/ministation-2.dmm
@@ -177,7 +177,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/bridge)
"aU" = (
/obj/machinery/atmospherics/portables_connector,
@@ -204,7 +204,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/bridge)
"aX" = (
/obj/structure/cable{
@@ -345,11 +345,11 @@
/obj/abstract/landmark/start{
name = "Captain"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/bridge)
"bt" = (
/obj/item/flashlight/lamp/green,
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
@@ -359,7 +359,7 @@
/obj/item/stack/material/bow_ammo/rod,
/obj/item/cell/crap,
/obj/item/mollusc/clam,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/bridge)
"bu" = (
/obj/machinery/shipsensors{
@@ -493,15 +493,15 @@
initial_access = null;
req_access = list("ACCESS_CAMERAS")
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/bridge)
"bI" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/item/modular_computer/tablet/lease/preset/command,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/bridge)
"bK" = (
/obj/machinery/alarm{
@@ -781,7 +781,7 @@
},
/obj/item/med_pouch/trauma,
/obj/item/stack/tape_roll/duct_tape,
-/obj/item/shield/buckler,
+/obj/item/shield/crafted/buckler,
/obj/item/gps/explorer,
/obj/item/belt/holster/machete,
/obj/item/tool/machete/deluxe,
@@ -790,7 +790,7 @@
/area/ministation/science)
"cJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/turf/floor/tiled,
/area/ministation/hall/n3)
@@ -899,7 +899,7 @@
/turf/floor/tiled,
/area/ministation/bridge)
"dn" = (
-/obj/structure/table/woodentable_reinforced/walnut,
+/obj/structure/table/laminate/reinforced/walnut,
/obj/item/paper_bin,
/obj/item/pen/retractable,
/turf/floor/carpet/red,
@@ -1122,7 +1122,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/n3)
"et" = (
@@ -1362,7 +1362,7 @@
/turf/floor/tiled/white,
/area/ministation/science)
"fi" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/small{
dir = 4
},
@@ -1455,7 +1455,7 @@
dir = 4;
pixel_x = 1
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"fW" = (
/obj/machinery/light,
@@ -1627,7 +1627,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/turf/floor/tiled,
/area/ministation/hall/n3)
@@ -1655,7 +1655,7 @@
dir = 8
},
/obj/structure/bookcase/skill_books/random,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"hd" = (
/obj/machinery/light{
@@ -2163,7 +2163,7 @@
"js" = (
/obj/structure/table,
/obj/item/chems/glass/beaker/large,
-/obj/item/chems/glass/beaker/sulphuric,
+/obj/item/chems/glass/beaker/sulfuric,
/obj/item/chems/dropper,
/obj/effect/floor_decal/corner/purple{
dir = 8
@@ -2274,7 +2274,7 @@
},
/obj/item/med_pouch/trauma,
/obj/item/stack/tape_roll/duct_tape,
-/obj/item/shield/buckler,
+/obj/item/shield/crafted/buckler,
/obj/item/gps/explorer,
/obj/item/flashlight/lantern,
/obj/item/bladed/polearm/spear/improvised/steel,
@@ -2330,7 +2330,7 @@
/turf/floor/plating,
/area/ministation/maint/l3se)
"kk" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"kn" = (
/obj/effect/floor_decal/industrial/warning{
@@ -2590,7 +2590,7 @@
/obj/item/clothing/suit/jacket/charcoal,
/obj/item/clothing/shoes/sandal,
/obj/item/multitool,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"ll" = (
/obj/structure/cable{
@@ -2732,7 +2732,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"mf" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -2946,7 +2946,7 @@
/obj/machinery/camera/autoname{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"mY" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
@@ -3061,7 +3061,7 @@
/turf/floor/plating,
/area/ministation/hall/s3)
"nL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/network/relay{
initial_network_id = "molluscnet"
},
@@ -3206,7 +3206,7 @@
/turf/floor/tiled/white,
/area/ministation/science)
"oN" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/s3)
"oP" = (
@@ -3222,10 +3222,10 @@
dir = 1;
level = 2
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"oR" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -3262,7 +3262,7 @@
/turf/floor/tiled,
/area/ministation/bridge)
"pi" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -3294,12 +3294,12 @@
/turf/floor,
/area/ministation/science)
"ps" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/laminate/ebony,
/obj/item/paper_bundle,
/obj/effect/floor_decal/stoneborder{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"pz" = (
/obj/machinery/power/apc{
@@ -3344,7 +3344,7 @@
/turf/floor/plating,
/area/ministation/maint/l3nw)
"qj" = (
-/obj/structure/target_stake,
+/obj/structure/target_stake/steel,
/obj/item/toy/figure/clown,
/turf/floor/reinforced/airless,
/area/space)
@@ -3508,7 +3508,7 @@
/turf/space,
/area/space)
"sh" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -3536,6 +3536,10 @@
},
/turf/floor/reinforced,
/area/ministation/science)
+"sq" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"sr" = (
/turf/floor/tiled/dark/monotile/telecomms,
/area/ministation/telecomms)
@@ -3560,7 +3564,7 @@
/obj/machinery/camera/autoname{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"sB" = (
/obj/structure/cable{
@@ -3631,7 +3635,7 @@
/obj/structure/bed,
/obj/item/bedsheet/purple,
/obj/random/plushie,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"sW" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
@@ -3847,7 +3851,7 @@
/obj/effect/floor_decal/stoneborder{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"uN" = (
/obj/machinery/door/airlock/glass/science,
@@ -3997,7 +4001,7 @@
/turf/floor/tiled/white,
/area/ministation/science)
"vJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/power/apc{
dir = 1;
name = "_North APC";
@@ -4087,7 +4091,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"wH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -4128,14 +4132,14 @@
/turf/floor/lino,
/area/ministation/hall/s3)
"wY" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/laminate/ebony,
/obj/item/pen/fancy,
/obj/item/box/fancy/crayons,
/obj/effect/floor_decal/stoneborder{
dir = 6
},
/obj/item/box/candles,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"xc" = (
/obj/structure/lattice,
@@ -4150,7 +4154,7 @@
/turf/floor/lino,
/area/ministation/telecomms)
"xr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -4163,11 +4167,11 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"xH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
@@ -4221,14 +4225,14 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"yc" = (
/obj/machinery/camera/autoname{
dir = 8;
req_access = list("ACCESS_CAMERAS")
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"yd" = (
/obj/machinery/door/firedoor,
@@ -4251,7 +4255,7 @@
/obj/machinery/camera/autoname{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"ym" = (
/turf/floor/tiled,
@@ -4373,7 +4377,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
@@ -4430,7 +4434,7 @@
/obj/machinery/light,
/obj/item/med_pouch/trauma,
/obj/item/stack/tape_roll/duct_tape,
-/obj/item/shield/buckler,
+/obj/item/shield/crafted/buckler,
/obj/item/gps/explorer,
/obj/item/flashlight/lantern,
/obj/item/bladed/polearm/spear/improvised/steel,
@@ -4480,7 +4484,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"Al" = (
/obj/machinery/button/blast_door{
@@ -4535,10 +4539,10 @@
dir = 1;
icon_state = "pipe-c"
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"AH" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/wall,
/area/ministation/hall/n3)
"AK" = (
@@ -4559,7 +4563,7 @@
/obj/effect/floor_decal/stoneborder{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"AS" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -4650,7 +4654,7 @@
/turf/floor/plating,
/area/ministation/maint/l3central)
"Bk" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -4813,7 +4817,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"BZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -4971,7 +4975,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/floor/plating,
/area/ministation/maint/l3sw)
@@ -5274,12 +5278,12 @@
/turf/floor/plating,
/area/ministation/maint/l3central)
"DD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/stack/material/panel/mapped/plastic/ten,
/obj/item/stack/material/plank/mapped/wood/ten,
/obj/item/stack/material/plank/mapped/wood/ten,
/obj/item/stack/material/panel/mapped/plastic/ten,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"DF" = (
/obj/machinery/camera/autoname{
@@ -5294,7 +5298,7 @@
/turf/floor/tiled/white,
/area/ministation/science)
"DQ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pill_bottle/dice,
/turf/floor/carpet/green,
/area/ministation/library)
@@ -5327,14 +5331,14 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ministation/maint/l3sw)
"Ee" = (
/turf/floor/plating,
/area/ministation/maint/l3nw)
"Ef" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/carpet/green,
/area/ministation/library)
"Eg" = (
@@ -5521,7 +5525,7 @@
/obj/machinery/computer/modular/preset/civilian{
dir = 1
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"FH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -5547,13 +5551,13 @@
/turf/floor/tiled/white,
/area/ministation/science)
"FV" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/mollusc/clam,
/obj/machinery/light/small,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Gh" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
@@ -5665,12 +5669,12 @@
/turf/floor/tiled,
/area/ministation/hall/s3)
"Hl" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/laminate/ebony,
/obj/item/paper_bin,
/obj/effect/floor_decal/stoneborder{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"Ho" = (
/obj/structure/cable{
@@ -5686,7 +5690,7 @@
/turf/wall/r_wall/prepainted,
/area/space)
"HB" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ministation/maint/l3sw)
"HK" = (
@@ -5699,7 +5703,7 @@
/obj/machinery/light{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"HN" = (
/obj/structure/cable{
@@ -5799,7 +5803,7 @@
/turf/floor/carpet/green,
/area/ministation/tradehouse_rep)
"Ir" = (
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Ix" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -5829,7 +5833,7 @@
/obj/machinery/alarm{
pixel_y = 23
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"IC" = (
/turf/floor/carpet/green,
@@ -5899,7 +5903,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Jo" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -5940,7 +5944,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"JF" = (
/obj/structure/disposalpipe/segment{
@@ -6063,7 +6067,7 @@
/turf/floor/carpet/green,
/area/ministation/library)
"Le" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/drinks/cans/waterbottle,
/turf/floor/carpet/green,
/area/ministation/library)
@@ -6097,7 +6101,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"LC" = (
/obj/structure/disposalpipe/segment,
@@ -6127,7 +6131,7 @@
/turf/floor/tiled,
/area/ministation/hall/n3)
"LM" = (
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"LN" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -6178,7 +6182,7 @@
/obj/structure/bed/chair/armchair/black{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"LW" = (
/obj/structure/cable{
@@ -6263,7 +6267,7 @@
dir = 8;
pixel_x = 22
},
-/obj/structure/table/woodentable_reinforced/walnut,
+/obj/structure/table/laminate/reinforced/walnut,
/obj/item/folder,
/turf/floor/carpet/red,
/area/ministation/court)
@@ -6326,7 +6330,7 @@
/obj/structure/disposalpipe/trunk{
dir = 8
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"MU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -6400,7 +6404,7 @@
/obj/machinery/light_switch{
pixel_y = 32
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Ne" = (
/obj/structure/table,
@@ -6426,7 +6430,7 @@
/area/ministation/maint/l3se)
"Nk" = (
/obj/machinery/photocopier,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Nm" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
@@ -6459,7 +6463,7 @@
pixel_y = -32;
dir = 1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"ND" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -6468,10 +6472,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"NF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -6490,7 +6494,7 @@
/turf/floor/tiled,
/area/ministation/bridge)
"NJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/flora/pottedplant/aquatic,
/turf/floor/lino,
@@ -6558,7 +6562,7 @@
/obj/structure/bed/chair/wood/walnut{
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Ok" = (
/obj/structure/shuttle/engine/heater{
@@ -6596,9 +6600,9 @@
/turf/floor/tiled,
/area/ministation/hall/s3)
"Ov" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate/walnut,
/obj/machinery/light,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Oy" = (
/obj/machinery/atmospherics/binary/pump/on{
@@ -6668,7 +6672,7 @@
/obj/effect/floor_decal/stoneborder{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"ON" = (
/obj/structure/cable{
@@ -6730,10 +6734,10 @@
/turf/floor/tiled,
/area/ministation/hall/s3)
"Pk" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate/walnut,
/obj/item/folder/blue,
/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Pn" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
@@ -6757,17 +6761,17 @@
/area/space)
"Pw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/techfloor/orange,
/turf/floor/tiled,
/area/ministation/hall/n3)
"Px" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate/walnut,
/obj/item/folder/red,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Pz" = (
/obj/machinery/door/firedoor,
@@ -6802,13 +6806,13 @@
/obj/abstract/landmark/start{
name = "Librarian"
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"PE" = (
/obj/structure/bed/chair/armchair/black{
dir = 8
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"PL" = (
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
@@ -6838,11 +6842,11 @@
/turf/floor/plating,
/area/ministation/maint/l3sw)
"PR" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/n3)
"PT" = (
-/obj/structure/table/woodentable_reinforced/walnut,
+/obj/structure/table/laminate/reinforced/walnut,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -6905,7 +6909,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Qk" = (
/obj/machinery/power/apc{
@@ -6973,18 +6977,18 @@
/turf/floor/tiled,
/area/ministation/shuttle/outgoing)
"QD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/book/printable_red,
/obj/item/pen,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"QF" = (
/turf/wall,
/area/space)
"QG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment,
/turf/floor/tiled,
/area/ministation/hall/s3)
@@ -7005,7 +7009,7 @@
pixel_y = 30
},
/obj/effect/floor_decal/industrial/hatch/red,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"QT" = (
/obj/machinery/computer/design_console{
@@ -7022,8 +7026,8 @@
/obj/machinery/firealarm{
pixel_y = 24
},
-/obj/structure/table/woodentable,
-/turf/floor/wood/mahogany,
+/obj/structure/table/laminate,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Re" = (
/obj/machinery/power/apc{
@@ -7060,7 +7064,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Rl" = (
/obj/structure/cable{
@@ -7097,7 +7101,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/s3)
"Rv" = (
@@ -7159,7 +7163,7 @@
/area/ministation/shuttle/outgoing)
"RG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"RI" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -7203,7 +7207,7 @@
/obj/effect/floor_decal/stoneborder{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"RS" = (
/obj/machinery/power/smes/buildable/max_cap_in_out{
@@ -7270,11 +7274,11 @@
/turf/floor/tiled,
/area/ministation/tradehouse_rep)
"Sf" = (
-/obj/structure/table/woodentable/walnut,
+/obj/structure/table/laminate/walnut,
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Sh" = (
/obj/structure/window/reinforced{
@@ -7298,7 +7302,7 @@
/area/ministation/science)
"So" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/n3)
"Sq" = (
@@ -7346,7 +7350,7 @@
/area/ministation/science)
"SP" = (
/obj/item/stool/padded,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"SS" = (
/obj/machinery/computer/ship/engines{
@@ -7374,8 +7378,8 @@
/turf/floor/plating,
/area/ministation/maint/l3ne)
"Tk" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood/mahogany,
+/obj/structure/table/laminate,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Tm" = (
/obj/effect/floor_decal/carpet/green{
@@ -7384,7 +7388,7 @@
/obj/effect/floor_decal/stoneborder{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"Tn" = (
/obj/machinery/shipsensors{
@@ -7423,7 +7427,7 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/laminate/ebony,
/obj/item/pen,
/obj/item/pen/blue,
/obj/item/pen/retractable,
@@ -7431,7 +7435,7 @@
/obj/item/pen/retractable/blue,
/obj/item/pen/multi,
/obj/effect/floor_decal/stoneborder/corner,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"Tx" = (
/obj/machinery/light_switch{
@@ -7483,7 +7487,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"TG" = (
/obj/machinery/atmospherics/binary/pump/high_power{
@@ -7501,7 +7505,7 @@
/turf/floor/tiled,
/area/ministation/bridge)
"TI" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/cash,
/obj/item/chems/drinks/cans/waterbottle,
/turf/floor/carpet/green,
@@ -7599,7 +7603,7 @@
/obj/structure/reagent_dispensers/water_cooler{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"Uo" = (
/obj/item/radio/intercom{
@@ -7617,7 +7621,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Uq" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -7627,11 +7631,11 @@
dir = 2;
icon_state = "pipe-c"
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Uw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"UB" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -7644,7 +7648,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"UE" = (
/obj/structure/closet/crate/uranium,
@@ -7657,7 +7661,7 @@
dir = 4
},
/obj/structure/bookcase/skill_books/random,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"UH" = (
/obj/machinery/alarm{
@@ -7681,7 +7685,7 @@
/turf/floor/tiled/white,
/area/ministation/science)
"UK" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/portables_connector{
pixel_x = -3
},
@@ -7734,7 +7738,7 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/knife/kitchen,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -7743,15 +7747,15 @@
/obj/item/mollusc/clam,
/obj/item/mollusc/clam,
/obj/item/mollusc/clam,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Vl" = (
/obj/structure/bookcase/manuals,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Vq" = (
/obj/structure/bookcase/skill_books/random,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Vt" = (
/obj/structure/cable{
@@ -7787,7 +7791,7 @@
/turf/floor/carpet/red,
/area/ministation/court)
"Vw" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/deck/cards,
/turf/floor/carpet/green,
/area/ministation/library)
@@ -7864,9 +7868,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/fabricator/book,
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"VX" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
@@ -7971,7 +7975,7 @@
dir = 1;
level = 2
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Wx" = (
/obj/machinery/door/airlock/hatch/maintenance,
@@ -8032,7 +8036,7 @@
/obj/effect/floor_decal/stoneborder{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"WT" = (
/obj/structure/bed/padded,
@@ -8076,7 +8080,7 @@
dir = 4
},
/obj/machinery/light,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Xi" = (
/obj/machinery/newscaster{
@@ -8113,7 +8117,7 @@
/turf/floor/tiled/white,
/area/ministation/science)
"XA" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/obj/effect/floor_decal/industrial/warning,
/obj/structure/railing/mapped,
@@ -8132,7 +8136,7 @@
/obj/effect/floor_decal/stoneborder/corner{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"XJ" = (
/obj/structure/closet,
@@ -8222,7 +8226,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ministation/maint/l3sw)
"Yj" = (
@@ -8296,7 +8300,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"YJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -8377,7 +8381,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"YX" = (
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
@@ -8438,7 +8442,7 @@
/turf/floor/plating,
/area/ministation/maint/l3sw)
"Zj" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
/turf/floor/plating,
/area/ministation/maint/l3sw)
@@ -8484,7 +8488,7 @@
/obj/machinery/firealarm{
pixel_y = 25
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ministation/court)
"Zu" = (
/obj/structure/cable{
@@ -8499,7 +8503,7 @@
/obj/machinery/alarm{
pixel_y = 22
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"Zv" = (
/turf/wall,
@@ -8515,7 +8519,7 @@
/area/ministation/bridge)
"ZH" = (
/obj/effect/floor_decal/carpet/green,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ministation/library)
"ZJ" = (
/obj/machinery/door/firedoor,
@@ -8541,7 +8545,7 @@
/area/ministation/court)
"ZR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ministation/hall/s3)
"ZS" = (
@@ -8580,10 +8584,10 @@
/obj/machinery/light/small{
dir = 4
},
-/turf/floor/wood/mahogany,
+/turf/floor/laminate/mahogany,
/area/ministation/library)
"ZZ" = (
-/obj/structure/table/woodentable_reinforced/walnut,
+/obj/structure/table/laminate/reinforced/walnut,
/obj/item/bell,
/turf/floor/carpet/red,
/area/ministation/court)
@@ -29552,7 +29556,7 @@ vA
vA
vA
vA
-vA
+sq
vA
vA
vA
@@ -45788,7 +45792,7 @@ vA
vA
vA
vA
-vA
+sq
vA
vA
vA
@@ -52136,7 +52140,7 @@ vA
vA
vA
vA
-vA
+sq
vA
vA
vA
diff --git a/maps/ministation/ministation-3.dmm b/maps/ministation/ministation-3.dmm
index cbdd8abb538..e5b68a7fe20 100644
--- a/maps/ministation/ministation-3.dmm
+++ b/maps/ministation/ministation-3.dmm
@@ -88,6 +88,10 @@
},
/turf/floor/plating,
/area/ministation/maint/l4central)
+"kH" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"kV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal{
dir = 4
@@ -40459,7 +40463,7 @@ aa
aa
aa
aa
-aa
+kH
aa
aa
aa
diff --git a/maps/ministation/ministation.dm b/maps/ministation/ministation.dm
index cd027156fa9..fca80d6d647 100644
--- a/maps/ministation/ministation.dm
+++ b/maps/ministation/ministation.dm
@@ -15,30 +15,39 @@ Twice...
#include "../../code/unit_tests/offset_tests.dm"
#endif
+ #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm"
+
+ #include "../../mods/content/mundane.dm"
+ #include "../../mods/content/scaling_descriptors.dm"
+
+ #include "../../mods/content/bigpharma/_bigpharma.dme"
+ #include "../../mods/content/corporate/_corporate.dme"
+ #include "../../mods/content/government/_government.dme"
+ #include "../../mods/content/matchmaking/_matchmaking.dme"
+ #include "../../mods/content/modern_earth/_modern_earth.dme"
+ #include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
+ #include "../../mods/content/pheromones/_pheromones.dme"
+ #include "../../mods/content/psionics/_psionics.dme"
+ #include "../../mods/content/standard_jobs/_standard_jobs.dme"
+ #include "../../mods/content/supermatter/_supermatter.dme"
+ #include "../../mods/content/xenobiology/_xenobiology.dme"
+
#include "../../mods/gamemodes/cult/_cult.dme"
#include "../../mods/gamemodes/heist/_heist.dme"
#include "../../mods/gamemodes/ninja/_ninja.dme"
#include "../../mods/gamemodes/revolution/_revolution.dme"
#include "../../mods/gamemodes/traitor/_traitor.dme"
#include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
- #include "../../mods/gamemodes/mixed/_mixed.dme"
+ #include "../../mods/gamemodes/mixed.dm"
- #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm"
+ #include "../../mods/mobs/dionaea/_dionaea.dme"
+ #include "../../mods/mobs/borers/_borers.dme"
- #include "../../mods/content/xenobiology/_xenobiology.dme"
- #include "../../mods/content/corporate/_corporate.dme"
- #include "../../mods/content/matchmaking/_matchmaking.dme"
+ #include "../../mods/content/tabloids/_tabloids.dme"
#include "../../mods/species/ascent/_ascent.dme"
+ #include "../../mods/species/bayliens/_bayliens.dme"
#include "../../mods/species/neoavians/_neoavians.dme"
- #include "../../mods/content/pheromones/_pheromones.dme"
#include "../../mods/species/serpentid/_serpentid.dme"
- #include "../../mods/species/bayliens/_bayliens.dme"
- #include "../../mods/content/mundane.dm"
- #include "../../mods/content/bigpharma/_bigpharma.dme"
- #include "../../mods/content/government/_government.dme"
- #include "../../mods/content/modern_earth/_modern_earth.dme"
- #include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
- #include "../../mods/content/scaling_descriptors.dm"
#include "ministation_antagonists.dm"
#include "ministation_areas.dm"
@@ -65,17 +74,10 @@ Twice...
#include "../away/mining/mining.dm"
#include "../away/mobius_rift/mobius_rift.dm"
#include "../away/smugglers/smugglers.dm"
- #include "../away/slavers/slavers_base.dm"
#include "../away/unishi/unishi.dm"
#include "../away/yacht/yacht.dm"
#include "../away/liberia/liberia.dm"
- #include "../../mods/mobs/dionaea/_dionaea.dme"
- #include "../../mods/mobs/borers/_borers.dme"
-
- // Must come after borers for compatibility.
- #include "../../mods/content/psionics/_psionics.dme"
-
#include "ministation_overmap.dm"
#include "jobs/command.dm"
@@ -85,7 +87,6 @@ Twice...
#include "jobs/security.dm"
#include "jobs/science.dm"
#include "jobs/tradehouse.dm"
- #include "jobs/synthetics.dm"
#include "outfits/_outfits.dm"
#include "outfits/command.dm"
diff --git a/maps/ministation/ministation_define.dm b/maps/ministation/ministation_define.dm
index d415969ed0b..b47a6b47024 100644
--- a/maps/ministation/ministation_define.dm
+++ b/maps/ministation/ministation_define.dm
@@ -13,8 +13,6 @@
company_name = "Tradehouse Administration"
company_short = "Admin"
- default_law_type = /datum/ai_laws/nanotrasen
-
lobby_screens = list('maps/ministation/ministation_lobby.png')
overmap_ids = list(OVERMAP_ID_SPACE)
diff --git a/maps/ministation/ministation_departments.dm b/maps/ministation/ministation_departments.dm
index 06aa658ad79..206042093ee 100644
--- a/maps/ministation/ministation_departments.dm
+++ b/maps/ministation/ministation_departments.dm
@@ -1,78 +1,6 @@
-/decl/department/service
- name = "Service"
- announce_channel = "Service"
- colour = "#88b764"
- display_color = "#d0f0c0"
-
-/decl/department/command
- name = "Command"
- colour = "#800080"
- display_priority = 5
- display_color = "#ccccff"
-
-/obj/machinery/network/pager
- department = /decl/department/command
-
-/decl/department/civilian
- name = "Civilian"
- display_priority = 1
- display_color = "#dddddd"
-
-/decl/department/engineering
- name = "Engineering"
- announce_channel = "Engineering"
- colour = "#ffa500"
- display_priority = 2
- display_color = "#fff5cc"
-
-/decl/department/medical
- name = "Medical"
- goals = list(/datum/goal/department/medical_fatalities)
- announce_channel = "Medical"
- colour = "#008000"
- display_priority = 3
- display_color = "#ffeef0"
-
-/obj/item/robot_module/medical
- associated_department = /decl/department/medical
-
-/obj/machinery/network/pager/medical
- department = /decl/department/medical
-
-/decl/department/science
- name = "Science"
- goals = list(/datum/goal/department/extract_slime_cores)
- announce_channel = "Science"
- colour = "#a65ba6"
- display_color = "#e79fff"
-
-/obj/item/robot_module/research
- associated_department = /decl/department/science
-
-/obj/machinery/network/pager/science
- department = /decl/department/science
-
-/decl/department/security
- name = "Security"
- announce_channel = "Security"
- colour = "#dd0000"
- display_priority = 4
- display_color = "#ffddf0"
-
-/obj/item/robot_module/security
- associated_department = /decl/department/security
-
-/obj/machinery/network/pager/security
- department = /decl/department/security
-
-/decl/department/miscellaneous
- name = "Misc"
- display_priority = -1
- display_color = "#ccffcc"
-
/decl/department/tradehouse
name = "Tradehouse"
announce_channel = "Tradehouse"
colour = "#b98f03"
display_priority = 4
- display_color = "#ffddf0"
\ No newline at end of file
+ display_color = "#ffddf0"
diff --git a/maps/ministation/ministation_jobs.dm b/maps/ministation/ministation_jobs.dm
index b8db846a435..17bb28b7b9e 100644
--- a/maps/ministation/ministation_jobs.dm
+++ b/maps/ministation/ministation_jobs.dm
@@ -1,25 +1,24 @@
/datum/map/ministation
- default_job_type = /datum/job/ministation/assistant
+ default_job_type = /datum/job/standard/assistant/ministation
default_department_type = /decl/department/civilian
- id_hud_icons = 'maps/ministation/hud.dmi'
allowed_jobs = list(
- /datum/job/ministation/assistant,
- /datum/job/ministation/bartender,
- /datum/job/ministation/captain,
- /datum/job/ministation/cargo,
- /datum/job/ministation/robot,
- /datum/job/computer,
- /datum/job/ministation/detective,
- /datum/job/ministation/doctor,
- /datum/job/ministation/doctor/head,
- /datum/job/ministation/engineer,
- /datum/job/ministation/engineer/head,
- /datum/job/ministation/hop,
- /datum/job/ministation/janitor,
- /datum/job/ministation/scientist,
- /datum/job/ministation/scientist/head,
- /datum/job/ministation/security,
- /datum/job/ministation/security/head,
- /datum/job/ministation/librarian,
- /datum/job/ministation/tradehouse/rep
+ /datum/job/standard/assistant/ministation,
+ /datum/job/standard/bartender/ministation,
+ /datum/job/standard/captain/ministation,
+ /datum/job/standard/cargo_tech/ministation,
+ /datum/job/standard/robot,
+ /datum/job/standard/computer,
+ /datum/job/standard/detective/ministation,
+ /datum/job/standard/doctor/ministation,
+ /datum/job/standard/cmo/ministation,
+ /datum/job/standard/engineer/ministation,
+ /datum/job/standard/chief_engineer/ministation,
+ /datum/job/standard/hop/ministation,
+ /datum/job/standard/janitor/ministation,
+ /datum/job/standard/scientist/ministation,
+ /datum/job/standard/rd/ministation,
+ /datum/job/standard/officer/ministation,
+ /datum/job/standard/hos/ministation,
+ /datum/job/standard/librarian/ministation,
+ /datum/job/tradehouse_rep
)
\ No newline at end of file
diff --git a/maps/ministation/ministation_overrides.dm b/maps/ministation/ministation_overrides.dm
index 508fbdaab31..709065f74aa 100644
--- a/maps/ministation/ministation_overrides.dm
+++ b/maps/ministation/ministation_overrides.dm
@@ -8,3 +8,7 @@
/datum/computer_file/program/wordprocessor,
/datum/computer_file/program/supply
)
+
+// This has to be here rather than ministation_define.dm because it's from a modpack.
+/datum/map/ministation
+ default_law_type = /datum/ai_laws/nanotrasen
\ No newline at end of file
diff --git a/maps/ministation/outfits/command.dm b/maps/ministation/outfits/command.dm
index 20e77a64d8c..4ac5c896f09 100644
--- a/maps/ministation/outfits/command.dm
+++ b/maps/ministation/outfits/command.dm
@@ -14,12 +14,12 @@
backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/backpack/satchel/cap
backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/backpack/messenger/com
-/decl/outfit/job/ministation/captain/post_equip(var/mob/living/human/H)
+/decl/outfit/job/ministation/captain/post_equip(mob/living/wearer)
..()
- if(H.get_age() > 20)
+ if(wearer.get_age() > 20)
// Since we can have something other than the default uniform at this
// point, check if we can actually attach the medal
- var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/uniform = wearer.get_equipped_item(slot_w_uniform_str)
if(istype(uniform))
var/obj/item/clothing/medal/gold/medal = new
if(uniform.can_attach_accessory(medal))
diff --git a/maps/modpack_testing/modpack_testing.dm b/maps/modpack_testing/modpack_testing.dm
index 0e75223cde4..33b776920fb 100644
--- a/maps/modpack_testing/modpack_testing.dm
+++ b/maps/modpack_testing/modpack_testing.dm
@@ -3,45 +3,47 @@
#include "modpack_testing_lobby.dm"
#include "blank.dmm"
- #include "../../mods/gamemodes/cult/_cult.dme"
- #include "../../mods/gamemodes/deity/_deity.dme"
- #include "../../mods/gamemodes/heist/_heist.dme"
- #include "../../mods/gamemodes/meteor/_meteor.dme"
- #include "../../mods/gamemodes/ninja/_ninja.dme"
- #include "../../mods/gamemodes/revolution/_revolution.dme"
- #include "../../mods/gamemodes/traitor/_traitor.dme"
- #include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
- #include "../../mods/gamemodes/mixed/_mixed.dme"
-
#include "../../mods/content/mundane.dm"
#include "../../mods/content/scaling_descriptors.dm"
+ #include "../../mods/content/standard_jobs/_standard_jobs.dme"
+ #include "../../mods/content/tabloids/_tabloids.dme"
- #include "../../mods/content/dungeon_loot/_dungeon_loot.dme"
#include "../../mods/content/bigpharma/_bigpharma.dme"
#include "../../mods/content/byond_membership/_byond_membership.dm"
#include "../../mods/content/corporate/_corporate.dme"
+ #include "../../mods/content/dungeon_loot/_dungeon_loot.dme"
+ #include "../../mods/content/fantasy/_fantasy.dme"
#include "../../mods/content/generic_shuttles/_generic_shuttles.dme"
#include "../../mods/content/government/_government.dme"
+ #include "../../mods/content/inertia/_inertia.dme"
#include "../../mods/content/matchmaking/_matchmaking.dme"
#include "../../mods/content/modern_earth/_modern_earth.dme"
#include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
+ #include "../../mods/content/pheromones/_pheromones.dme"
+ #include "../../mods/content/psionics/_psionics.dme"
#include "../../mods/content/shackles/_shackles.dme"
+ #include "../../mods/content/supermatter/_supermatter.dme"
#include "../../mods/content/xenobiology/_xenobiology.dme"
- #include "../../mods/content/pheromones/_pheromones.dme"
- #include "../../mods/species/drakes/_drakes.dme" // include before _fantasy.dme so overrides work
- #include "../../mods/content/fantasy/_fantasy.dme"
+ #include "../../mods/content/item_sharpening/_item_sharpening.dme"
- #include "../../mods/mobs/dionaea/_dionaea.dme"
- #include "../../mods/mobs/borers/_borers.dme"
+ #include "../../mods/gamemodes/cult/_cult.dme"
+ #include "../../mods/gamemodes/heist/_heist.dme"
+ #include "../../mods/gamemodes/meteor/_meteor.dme"
+ #include "../../mods/gamemodes/ninja/_ninja.dme"
+ #include "../../mods/gamemodes/revolution/_revolution.dme"
+ #include "../../mods/gamemodes/traitor/_traitor.dme"
+ #include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
+ #include "../../mods/gamemodes/mixed.dm"
- // Must come after borers for compatibility.
- #include "../../mods/content/psionics/_psionics.dme"
+ #include "../../mods/mobs/borers/_borers.dme"
+ #include "../../mods/mobs/dionaea/_dionaea.dme"
- #include "../../mods/species/serpentid/_serpentid.dme"
#include "../../mods/species/ascent/_ascent.dme"
+ #include "../../mods/species/bayliens/_bayliens.dme"
+ #include "../../mods/species/drakes/_drakes.dme"
#include "../../mods/species/neoavians/_neoavians.dme"
+ #include "../../mods/species/serpentid/_serpentid.dme"
#include "../../mods/species/utility_frames/_utility_frames.dme"
- #include "../../mods/species/bayliens/_bayliens.dme"
#include "../../mods/species/vox/_vox.dme"
#define USING_MAP_DATUM /datum/map/modpack_testing
diff --git a/maps/modpack_testing/modpack_testing_define.dm b/maps/modpack_testing/modpack_testing_define.dm
index f5b09decd1f..8ed4837727c 100644
--- a/maps/modpack_testing/modpack_testing_define.dm
+++ b/maps/modpack_testing/modpack_testing_define.dm
@@ -4,3 +4,7 @@
path = "modpack_testing"
allowed_latejoin_spawns = list()
default_spawn = null
+ votable = FALSE
+
+/datum/map/modpack_testing/validate()
+ return TRUE // Do not check for level lists, this is not a playable map.
diff --git a/maps/planets/test_planet/neutralia-2.dmm b/maps/planets/test_planet/neutralia-2.dmm
index 8b5e82e76e8..cc84b991ea8 100644
--- a/maps/planets/test_planet/neutralia-2.dmm
+++ b/maps/planets/test_planet/neutralia-2.dmm
@@ -3,11 +3,11 @@
/turf/unsimulated/mineral,
/area/exoplanet/underground/neutralia)
"b" = (
-/turf/floor,
+/turf/floor/barren,
/area/exoplanet/underground/neutralia)
"c" = (
/obj/abstract/level_data_spawner/neutralia/underground,
-/turf/floor,
+/turf/floor/barren,
/area/exoplanet/underground/neutralia)
(1,1,1) = {"
diff --git a/maps/planets/test_planet/neutralia-3.dmm b/maps/planets/test_planet/neutralia-3.dmm
index 768772a0f91..f7d1ff768ee 100644
--- a/maps/planets/test_planet/neutralia-3.dmm
+++ b/maps/planets/test_planet/neutralia-3.dmm
@@ -1,6 +1,6 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
-/turf/floor,
+/turf/floor/barren,
/area/exoplanet/neutralia)
"b" = (
/turf/unsimulated/mineral,
@@ -17,15 +17,15 @@
/area/exoplanet/neutralia)
"j" = (
/obj/abstract/landmark/exoplanet_spawn/large_plant,
-/turf/floor,
+/turf/floor/barren,
/area/exoplanet/neutralia)
"o" = (
/obj/abstract/landmark/exoplanet_spawn/animal,
-/turf/floor,
+/turf/floor/barren,
/area/exoplanet/neutralia)
"x" = (
/obj/abstract/landmark/exoplanet_spawn/plant,
-/turf/floor,
+/turf/floor/barren,
/area/exoplanet/neutralia)
(1,1,1) = {"
diff --git a/maps/planets/test_planet/test_planet.dm b/maps/planets/test_planet/test_planet.dm
index 159722fde19..83c42703e65 100644
--- a/maps/planets/test_planet/test_planet.dm
+++ b/maps/planets/test_planet/test_planet.dm
@@ -131,14 +131,14 @@
name = "neutralia surface"
level_id = NEUTRALIA_SURFACE_LEVEL_ID
base_area = /area/exoplanet/neutralia
- base_turf = /turf/floor
+ base_turf = /turf/floor/barren
border_filler = /turf/unsimulated/dark_filler
/datum/level_data/planetoid/neutralia/underground
name = "neutralia underground"
level_id = "neutralia_underground"
base_area = /area/exoplanet/underground/neutralia
- base_turf = /turf/floor
+ base_turf = /turf/floor/barren
border_filler = /turf/unsimulated/mineral
/datum/level_data/planetoid/neutralia/underground/bottom
diff --git a/maps/planets_testing/planets_testing_define.dm b/maps/planets_testing/planets_testing_define.dm
index c82359943fd..8380842377f 100644
--- a/maps/planets_testing/planets_testing_define.dm
+++ b/maps/planets_testing/planets_testing_define.dm
@@ -3,8 +3,12 @@
full_name = "Planets Testing"
path = "planets_testing"
overmap_ids = list(OVERMAP_ID_SPACE)
- allowed_latejoin_spawns = list()
default_spawn = null
+ votable = FALSE
+ allowed_latejoin_spawns = list()
+
+/datum/map/planet_testing/validate()
+ return FALSE // Testing map, do not validate levels.
// Set the observer spawn to include every flag so that CI flag checks pass.
/decl/spawnpoint/observer
diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm
index 62b11f8ae72..7eb021cf0cb 100644
--- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm
+++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm
@@ -1,17 +1,17 @@
/datum/map_template/ruin/exoplanet/crashed_pod
- name = "crashed survival pod"
- description = "A crashed survival pod from a destroyed ship."
- suffixes = list("crashed_pod/crashed_pod.dmm")
- cost = 2
+ name = "crashed survival pod"
+ description = "A crashed survival pod from a destroyed ship."
+ suffixes = list("crashed_pod/crashed_pod.dmm")
+ cost = 2
template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS
- template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK
+ template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK
/area/map_template/crashed_pod
- name = "\improper Crashed Survival Pod"
+ name = "\improper Crashed Survival Pod"
icon_state = "blue"
/decl/submap_archetype/crashed_pod
- descriptor = "crashed survival pod"
+ name = "crashed survival pod"
crew_jobs = list(/datum/job/submap/pod)
/datum/submap/crashed_pod/sync_cell(var/obj/effect/overmap/visitable/cell)
diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm
index 421efa39271..c7ef24bae56 100644
--- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm
+++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm
@@ -55,18 +55,18 @@
pixel_x = -25
},
/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"ai" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/raisins,
/obj/item/chems/drinks/glass2/fitnessflask,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"aj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"ak" = (
@@ -77,8 +77,8 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"al" = (
@@ -88,21 +88,21 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"am" = (
/obj/machinery/atmospherics/pipe/simple/visible/cyan{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"an" = (
/obj/machinery/atmospherics/omni/filter,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
@@ -110,16 +110,16 @@
/obj/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/tastybread,
/obj/item/chems/drinks/cans/speer,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"ap" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/effect/decal/cleanable/filth,
/obj/structure/curtain/open/shower/engineering,
/obj/structure/hygiene/toilet{
@@ -134,7 +134,7 @@
"aq" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/closet/hydrant{
pixel_x = -27;
dir = 4
@@ -147,7 +147,7 @@
icon_state = "4-8"
},
/obj/machinery/space_heater,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"as" = (
@@ -160,7 +160,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/filth,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/turf/floor/tiled/techfloor,
@@ -169,7 +169,7 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/power/smes/buildable{
charge = 50000;
inputting = 1;
@@ -182,13 +182,13 @@
dir = 8
},
/obj/structure/reagent_dispensers/fueltank,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"av" = (
/obj/machinery/atmospherics/omni/filter,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
@@ -196,7 +196,7 @@
/obj/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
@@ -217,7 +217,7 @@
/obj/machinery/door/airlock/engineering,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"aB" = (
@@ -233,7 +233,7 @@
/obj/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"aD" = (
@@ -261,7 +261,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"aG" = (
@@ -285,7 +285,7 @@
/obj/item/clothing/costume/savage_hunter,
/obj/item/clothing/costume/savage_hunter/female,
/obj/item/clothing/jumpsuit/wetsuit,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/candy/proteinbar,
/obj/item/trash/liquidfood,
/obj/item/stock_parts/matter_bin/super,
@@ -303,7 +303,7 @@
dir = 8
},
/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aI" = (
@@ -313,8 +313,8 @@
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aJ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/filth,
/obj/structure/curtain/open/shower/engineering,
/obj/structure/hygiene/shower{
@@ -334,7 +334,7 @@
dir = 1
},
/obj/item/mop,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/candy/proteinbar,
/obj/item/trash/liquidfood,
/obj/item/box/detergent,
@@ -348,7 +348,7 @@
/obj/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/crashed_pod)
"aM" = (
@@ -366,19 +366,19 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aP" = (
/obj/machinery/atmospherics/pipe/simple/hidden/cyan,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/filth,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
@@ -388,7 +388,7 @@
/area/map_template/crashed_pod)
"aQ" = (
/obj/machinery/atmospherics/pipe/manifold/hidden,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aR" = (
@@ -407,7 +407,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/tastybread,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
@@ -418,16 +418,16 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aV" = (
/obj/machinery/atmospherics/binary/pump{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aW" = (
@@ -435,7 +435,7 @@
dir = 1
},
/obj/machinery/portable_atmospherics/canister/empty,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aX" = (
@@ -443,14 +443,14 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/visible/red,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aY" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/civilian,
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"aZ" = (
@@ -462,13 +462,13 @@
/obj/machinery/light{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark/monotile,
/area/map_template/crashed_pod)
"ba" = (
/obj/machinery/atmospherics/pipe/manifold/hidden,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bb" = (
@@ -479,7 +479,7 @@
"bc" = (
/obj/abstract/submap_landmark/spawnpoint/crashed_pod_survivor,
/obj/structure/bed/chair/shuttle/black,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark/monotile,
/area/map_template/crashed_pod)
"bd" = (
@@ -490,7 +490,7 @@
/obj/item/radio,
/obj/item/radio,
/obj/random/plushie,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark/monotile,
/area/map_template/crashed_pod)
"be" = (
@@ -502,7 +502,7 @@
pixel_x = -27;
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bf" = (
@@ -514,14 +514,14 @@
/obj/machinery/light{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark/monotile,
/area/map_template/crashed_pod)
"bg" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bh" = (
@@ -529,37 +529,37 @@
dir = 8
},
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bi" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bj" = (
/obj/structure/table/steel_reinforced,
/obj/machinery/recharger,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/chems/drinks/glass2/coffeecup/metal,
/turf/floor/tiled/dark/monotile,
/area/map_template/crashed_pod)
"bk" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bl" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bm" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/candy/proteinbar,
/obj/item/trash/liquidfood,
/turf/floor/tiled/dark,
@@ -569,12 +569,12 @@
dir = 4
},
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bo" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bp" = (
@@ -603,7 +603,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bu" = (
@@ -627,7 +627,7 @@
/area/map_template/crashed_pod)
"bw" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bx" = (
@@ -639,14 +639,14 @@
/obj/structure/bed/chair{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"by" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bz" = (
@@ -662,7 +662,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bB" = (
@@ -679,9 +679,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bD" = (
@@ -695,8 +695,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bF" = (
@@ -713,7 +713,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/filth,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
@@ -745,13 +745,13 @@
/obj/machinery/light/small,
/obj/effect/decal/cleanable/ash,
/obj/item/trash/cigbutt/cigarbutt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bL" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/crashed_pod)
"bM" = (
@@ -782,7 +782,7 @@
/obj/item/clothing/jumpsuit/orange,
/obj/item/clothing/jumpsuit/blackjumpshorts,
/obj/item/clothing/jumpsuit/black,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bN" = (
@@ -793,10 +793,10 @@
/obj/effect/floor_decal/industrial/warning,
/obj/structure/table/steel_reinforced,
/obj/item/binoculars,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/candy/proteinbar,
/obj/item/chems/drinks/cans/speer,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bP" = (
@@ -830,16 +830,16 @@
/obj/item/clothing/jumpsuit/orange,
/obj/item/clothing/jumpsuit/blackjumpshorts,
/obj/item/clothing/jumpsuit/black,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bR" = (
/obj/structure/table/steel_reinforced,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/tastybread,
/obj/item/geiger,
/obj/item/geiger,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bS" = (
@@ -884,7 +884,7 @@
/obj/item/clothing/jumpsuit/orange,
/obj/item/clothing/jumpsuit/blackjumpshorts,
/obj/item/clothing/jumpsuit/black,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
"bV" = (
@@ -979,7 +979,7 @@
/obj/item/ashtray,
/obj/item/paper_bin,
/obj/item/chems/drinks/cans/speer,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/pen,
/turf/floor/tiled/dark,
/area/map_template/crashed_pod)
diff --git a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm
index f88a3a7043a..1552d243610 100644
--- a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm
+++ b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm
@@ -184,7 +184,7 @@
/turf/floor/tiled/white,
/area/template_noop)
"aM" = (
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/item/chems/glass/paint/random,
/obj/structure/closet/medical_wall/filled{
pixel_y = 32
diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm
index 80a681620a6..c3b5df5467f 100644
--- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm
+++ b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm
@@ -29,24 +29,24 @@
/turf/floor/wood,
/area/template_noop)
"h" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/board,
/turf/floor/wood,
/area/template_noop)
"i" = (
/obj/item/flashlight/lamp/green,
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/turf/floor/carpet/green,
/area/template_noop)
"j" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/clothing/mask/smokable/pipe/cobpipe,
/obj/item/chewables/rollable/generic,
/obj/item/ashtray,
/turf/floor/carpet/green,
/area/template_noop)
"k" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/utensil/fork/plastic,
/obj/item/utensil/fork/plastic,
/obj/item/utensil/fork/plastic,
@@ -57,7 +57,7 @@
/turf/floor/tiled/monotile,
/area/template_noop)
"l" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/utensil/knife,
/obj/item/utensil/knife,
/obj/effect/floor_decal/spline/fancy/wood{
@@ -93,7 +93,7 @@
/turf/floor/wood,
/area/template_noop)
"q" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/book/manual/detective,
/obj/item/ashtray,
/obj/item/deck/cards,
@@ -106,7 +106,7 @@
/turf/floor/wood,
/area/template_noop)
"s" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood/drip,
@@ -126,7 +126,7 @@
/turf/floor/wood/usedup,
/area/template_noop)
"x" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/flashlight/lamp,
/obj/effect/floor_decal/spline/fancy/wood,
/turf/floor/tiled/monotile,
@@ -154,7 +154,7 @@
/turf/floor/wood,
/area/template_noop)
"C" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/machinery/computer/central_atmos/laptop{
desc = "A cheap, beat-up old laptop.";
name = "old laptop"
diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm
index 29714944a16..13485f43f12 100644
--- a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm
+++ b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm
@@ -3,11 +3,11 @@
/turf/template_noop,
/area/template_noop)
"ac" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/turf/template_noop,
/area/template_noop)
"ad" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/obj/item/stack/material/sheet/reinforced/mapped/ocp,
/turf/template_noop,
/area/template_noop)
diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm
index 624c04bfc64..c210e95884c 100644
--- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm
+++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm
@@ -455,7 +455,7 @@
/area/map_template/colony/command)
"bl" = (
/obj/structure/curtain/black,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/map_template/colony/command)
"bm" = (
/obj/machinery/door/firedoor,
@@ -922,7 +922,7 @@
/area/map_template/colony/atmospherics)
"cf" = (
/obj/structure/catwalk,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/emitter/gyrotron,
/turf/floor/concrete,
/area/template_noop)
@@ -1415,7 +1415,7 @@
"dn" = (
/obj/structure/catwalk,
/obj/machinery/rad_collector,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"do" = (
@@ -1466,7 +1466,7 @@
/area/map_template/colony)
"ds" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"dt" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -1559,7 +1559,7 @@
/obj/item/clothing/head/cowboy_hat,
/obj/item/clothing/head/cowboy_hat,
/obj/item/clothing/suit/det_trench,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"dE" = (
/obj/machinery/door/firedoor,
@@ -1576,7 +1576,7 @@
/obj/machinery/light/spot{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/surgery)
"dG" = (
@@ -1635,7 +1635,7 @@
/area/map_template/colony/surgery)
"dM" = (
/obj/structure/curtain/black,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/map_template/colony/dorms)
"dN" = (
/obj/structure/table/steel_reinforced,
@@ -1809,7 +1809,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"ee" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -1853,7 +1853,7 @@
"eh" = (
/obj/structure/catwalk,
/obj/structure/closet/crate/solar_assembly,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"ei" = (
@@ -1947,7 +1947,7 @@
dir = 8;
icon_state = "bulb1"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"er" = (
/obj/machinery/atmospherics/pipe/simple/visible,
@@ -2075,8 +2075,8 @@
/area/map_template/colony/messhall)
"eD" = (
/obj/structure/catwalk,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/command)
"eE" = (
@@ -2228,7 +2228,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"eR" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
@@ -2256,7 +2256,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"eU" = (
/obj/machinery/atmospherics/pipe/manifold/visible{
@@ -2342,8 +2342,8 @@
/area/map_template/colony/medbay)
"eZ" = (
/obj/structure/catwalk,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"fa" = (
@@ -2361,7 +2361,7 @@
/area/map_template/colony)
"fc" = (
/obj/structure/catwalk,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"fd" = (
@@ -2377,7 +2377,7 @@
/turf/floor/tiled/techfloor/grid,
/area/map_template/colony/engineering)
"fe" = (
-/obj/structure/table/woodentable_reinforced,
+/obj/structure/table/wood/reinforced,
/obj/structure/flora/pottedplant/smallcactus{
pixel_y = 12
},
@@ -2387,7 +2387,7 @@
/obj/item/chems/condiment/small/peppermill,
/obj/item/chems/condiment/small/saltshaker,
/obj/item/chems/condiment/small/sugar,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"ff" = (
/obj/machinery/atmospherics/portables_connector{
@@ -2422,7 +2422,7 @@
dir = 8;
icon_state = "bulb1"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"fk" = (
/obj/machinery/alarm{
@@ -2437,7 +2437,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fl" = (
/obj/machinery/meter,
@@ -2474,7 +2474,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fo" = (
/obj/structure/bed/chair/comfy/brown{
@@ -2486,7 +2486,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fp" = (
/obj/structure/cable{
@@ -2557,7 +2557,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fv" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -2701,10 +2701,10 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fI" = (
-/obj/structure/table/woodentable_reinforced,
+/obj/structure/table/wood/reinforced,
/obj/item/box/fancy/donut,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
@@ -2712,7 +2712,7 @@
/obj/item/chems/condiment/small/peppermill,
/obj/item/chems/condiment/small/saltshaker,
/obj/item/chems/condiment/small/sugar,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -2734,7 +2734,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"fL" = (
/obj/machinery/door/firedoor,
@@ -2973,7 +2973,7 @@
dir = 8
},
/obj/item/chems/drinks/pitcher,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"gc" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3204,7 +3204,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet/green,
/area/map_template/colony/messhall)
"gt" = (
@@ -3273,7 +3273,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"gB" = (
/obj/effect/floor_decal/techfloor{
@@ -3349,7 +3349,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"gJ" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -3411,7 +3411,7 @@
/turf/floor/tiled/techfloor,
/area/map_template/colony/atmospherics)
"gP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/carpet/green,
/area/map_template/colony/messhall)
"gQ" = (
@@ -3429,7 +3429,7 @@
/turf/floor/tiled/steel_ridged,
/area/map_template/colony/airlock)
"gR" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
id_tag = "playablecolonymain_pump_out_external"
},
@@ -3487,7 +3487,7 @@
icon_state = "0-8"
},
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"gZ" = (
/obj/machinery/atmospherics/unary/heat_exchanger{
@@ -3679,7 +3679,7 @@
"hs" = (
/obj/item/stool/bar/padded,
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"ht" = (
/obj/effect/floor_decal/techfloor,
@@ -3730,7 +3730,7 @@
dir = 1;
pixel_y = -30
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"hy" = (
/obj/machinery/alarm{
@@ -3740,7 +3740,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"hz" = (
/obj/machinery/vending/cola{
@@ -3750,7 +3750,7 @@
},
/obj/machinery/light,
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"hA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3802,7 +3802,7 @@
name = "hacked Getmore Chocolate Corp"
},
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"hE" = (
/obj/machinery/vending/fitness{
@@ -3838,7 +3838,7 @@
/area/map_template/colony/messhall)
"hI" = (
/obj/item/stool/bar/padded,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"hJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3855,7 +3855,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/item/stool/bar/padded,
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"hL" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3937,7 +3937,7 @@
/obj/structure/casino/roulette_chart{
density = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"hT" = (
/obj/machinery/power/apc{
@@ -3948,14 +3948,14 @@
/obj/structure/cable,
/obj/item/stool/bar/padded,
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"hU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/messhall)
"hV" = (
/obj/machinery/door/firedoor,
@@ -4085,7 +4085,7 @@
icon_state = "4-8"
},
/obj/machinery/door/airlock/glass/civilian,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/map_template/colony/commons)
"ih" = (
/obj/machinery/door/firedoor,
@@ -4137,7 +4137,7 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"in" = (
/obj/effect/floor_decal/techfloor{
@@ -4472,14 +4472,14 @@
"iO" = (
/obj/structure/table/gamblingtable,
/obj/item/ashtray/glass,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"iP" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/item/stool/bar/padded,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"iQ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -4502,7 +4502,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"iS" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -4605,14 +4605,14 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jc" = (
/obj/structure/sign/warning/smoking{
pixel_y = -28
},
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jd" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
@@ -4633,7 +4633,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jf" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
@@ -4699,7 +4699,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jk" = (
/obj/structure/hygiene/toilet{
@@ -4708,7 +4708,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 5
},
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/turf/floor/tiled/white/monotile,
/area/map_template/colony/bathroom)
"jl" = (
@@ -4724,8 +4724,8 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jm" = (
/obj/effect/floor_decal/techfloor,
@@ -4796,8 +4796,8 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/floor/wood/walnut,
+/obj/effect/decal/cleanable/dirt/visible,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jt" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -4809,7 +4809,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"ju" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -4817,7 +4817,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jv" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -4825,7 +4825,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -4927,7 +4927,7 @@
dir = 1;
pixel_y = -30
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jF" = (
/obj/machinery/door/airlock/civilian,
@@ -4937,7 +4937,7 @@
/obj/structure/table/gamblingtable,
/obj/machinery/light,
/obj/effect/floor_decal/spline/fancy/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"jH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -4981,7 +4981,7 @@
/obj/machinery/light/spot{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/messhall)
"jL" = (
@@ -5200,7 +5200,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/commons)
"kb" = (
/obj/effect/floor_decal/techfloor{
@@ -5556,7 +5556,7 @@
/obj/item/clothing/webbing/drop_pouches/brown,
/obj/item/clothing/webbing/drop_pouches/white,
/obj/item/clothing/webbing/drop_pouches/white,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"kI" = (
/obj/machinery/door/airlock/hatch,
@@ -5586,11 +5586,11 @@
/obj/effect/floor_decal/industrial/loading{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"kL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"kM" = (
@@ -5598,7 +5598,7 @@
id_tag = "playablecolony_crematorium"
},
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"kN" = (
@@ -5607,7 +5607,7 @@
pixel_y = 25;
req_access = list()
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/table/steel_reinforced,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/recharger,
@@ -5713,15 +5713,15 @@
/area/map_template/colony/airlock)
"kZ" = (
/obj/structure/table/steel_reinforced,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/railing/mapped{
dir = 8
},
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"la" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lb" = (
@@ -5771,7 +5771,7 @@
/area/map_template/colony)
"lg" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lh" = (
@@ -5792,7 +5792,7 @@
id_tag = "colonymine"
},
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/steel_ridged,
/area/map_template/colony/mineralprocessing)
"lj" = (
@@ -5839,7 +5839,7 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lo" = (
@@ -5879,7 +5879,7 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lu" = (
@@ -5890,12 +5890,12 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lv" = (
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lw" = (
@@ -5934,8 +5934,8 @@
dir = 8
},
/obj/structure/table/steel_reinforced,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lA" = (
@@ -5946,7 +5946,7 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lB" = (
@@ -5976,7 +5976,7 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lD" = (
@@ -5984,7 +5984,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lG" = (
@@ -6026,8 +6026,8 @@
/turf/floor/tiled/white,
/area/map_template/colony/bathroom)
"lJ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
cycle_to_external_air = 1;
id_tag = "playablecolonymain";
@@ -6070,7 +6070,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
id_tag = "playablecolonymain_pump";
power_rating = 25000
@@ -6127,7 +6127,7 @@
dir = 8;
icon_state = "warning"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/colony/airlock)
"lR" = (
@@ -6142,7 +6142,7 @@
name = "Colonial suit cycler";
req_access = list()
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/colony/airlock)
"lS" = (
@@ -6150,13 +6150,13 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lT" = (
/obj/structure/catwalk,
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lU" = (
@@ -6164,15 +6164,15 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lV" = (
/obj/effect/floor_decal/industrial/warning/dust{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"lW" = (
@@ -6205,7 +6205,7 @@
/area/map_template/colony)
"lX" = (
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/item/radio/intercom{
dir = 8;
@@ -6232,8 +6232,8 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"ma" = (
@@ -6256,8 +6256,8 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -6268,8 +6268,8 @@
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"mb" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold4w/hidden,
/turf/floor/tiled/techfloor,
/area/map_template/colony/airlock)
@@ -6319,7 +6319,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/colony/airlock)
"mh" = (
@@ -6329,7 +6329,7 @@
/obj/machinery/door/airlock/external{
id_tag = "playablecolonymain_interior_door"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/colony/airlock)
"mi" = (
@@ -6353,7 +6353,7 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"ml" = (
@@ -6385,8 +6385,8 @@
/obj/structure/railing/mapped{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"mo" = (
@@ -6422,14 +6422,14 @@
dir = 8;
icon_state = "warning"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor/grid,
/area/map_template/colony/airlock)
"ms" = (
/obj/effect/floor_decal/techfloor{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/binary/pump/high_power/on{
dir = 8;
target_pressure = 500
@@ -6521,8 +6521,8 @@
name = "Hard Equipment Storage";
pixel_y = 28
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/command)
"mD" = (
@@ -6683,19 +6683,19 @@
/obj/effect/floor_decal/techfloor{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/colony/airlock)
"mP" = (
/obj/structure/table/steel_reinforced,
/obj/machinery/cell_charger,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/flashlight/lamp/floodlamp,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"mQ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/railing/mapped,
/obj/structure/railing/mapped{
dir = 8
@@ -6711,7 +6711,7 @@
/turf/floor/tiled/techfloor,
/area/map_template/colony)
"mS" = (
-/obj/structure/table/woodentable_reinforced,
+/obj/structure/table/wood/reinforced,
/obj/effect/floor_decal/techfloor{
dir = 6
},
@@ -6789,7 +6789,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 5
},
@@ -7208,9 +7208,9 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 8;
id_tag = "playablecolonymain_pump_out_internal";
@@ -7262,8 +7262,8 @@
icon_state = "4-8"
},
/obj/machinery/light,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 1;
id_tag = "playablecolonymain_pump";
@@ -7283,7 +7283,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 1;
id_tag = "playablecolonymain_pump";
@@ -7306,7 +7306,7 @@
dir = 8;
icon_state = "warning"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/floor/tiled/techfloor/grid,
/area/map_template/colony/airlock)
@@ -7348,7 +7348,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/colony/airlock)
"ob" = (
@@ -7361,7 +7361,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/map_template/colony/airlock)
"oc" = (
@@ -7374,7 +7374,7 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/radio/intercom{
dir = 8;
pixel_x = 22
@@ -7388,43 +7388,43 @@
/obj/effect/floor_decal/industrial/loading{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oe" = (
/obj/structure/railing/mapped,
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"of" = (
/obj/structure/railing/mapped,
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"og" = (
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oh" = (
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oi" = (
/obj/structure/railing/mapped,
/obj/effect/floor_decal/industrial/warning/dust,
/obj/structure/rack,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/tool/pickaxe,
/obj/item/tool/pickaxe,
/obj/item/tool/shovel,
@@ -7506,9 +7506,9 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
@@ -7520,9 +7520,9 @@
dir = 1
},
/obj/effect/floor_decal/industrial/warning/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
@@ -7539,9 +7539,9 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
@@ -7560,7 +7560,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"oq" = (
@@ -7568,7 +7568,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"or" = (
@@ -7579,7 +7579,7 @@
/obj/structure/sign/warning/high_voltage{
pixel_y = 28
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"os" = (
@@ -7587,7 +7587,7 @@
icon_state = "4-8"
},
/obj/structure/catwalk,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"ot" = (
@@ -7595,16 +7595,16 @@
/obj/machinery/light/spot{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/map_template/colony/hydroponics)
"ou" = (
/obj/effect/floor_decal/industrial/warning/dust{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -7621,8 +7621,8 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -7646,9 +7646,9 @@
/obj/effect/floor_decal/industrial/warning/dust{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 8;
id_tag = "playablecolonymain_pump_out_internal";
@@ -7661,38 +7661,38 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 1
},
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oz" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 5
},
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oA" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/catwalk,
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oB" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
},
/turf/floor/concrete,
/area/map_template/colony/mineralprocessing)
"oC" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 5
},
@@ -7814,8 +7814,8 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"vt" = (
@@ -7894,7 +7894,7 @@
dir = 4;
pixel_x = -22
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"GU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -7936,9 +7936,9 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/concrete,
/area/template_noop)
"Kn" = (
@@ -7954,7 +7954,7 @@
/area/map_template/colony/hydroponics)
"Kz" = (
/obj/structure/catwalk,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light/spot{
dir = 1
},
@@ -8003,7 +8003,7 @@
/area/map_template/colony/hydroponics)
"Nh" = (
/obj/structure/curtain/black,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/map_template/colony/dorms)
"Og" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm b/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm
index e27736fd251..d0b72f2445f 100644
--- a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm
+++ b/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm
@@ -1,18 +1,18 @@
#include "../../../../mods/mobs/dionaea/_dionaea.dme"
/datum/map_template/ruin/exoplanet/playablecolony
- name = "established colony"
- description = "a fully functional colony on the frontier of settled space"
- suffixes = list("playablecolony/colony.dmm")
- cost = 2
+ name = "established colony"
+ description = "a fully functional colony on the frontier of settled space"
+ suffixes = list("playablecolony/colony.dmm")
+ cost = 2
template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS
- template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_HABITAT
+ template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_HABITAT
apc_test_exempt_areas = list(
/area/map_template/colony/mineralprocessing = NO_SCRUBBER|NO_VENT
)
/decl/submap_archetype/playablecolony
- descriptor = "established colony"
+ name = "established colony"
crew_jobs = list(/datum/job/submap/colonist)
/datum/job/submap/colonist
diff --git a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm
index dd4f13ac109..c3c28c3bdc9 100644
--- a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm
+++ b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm
@@ -83,7 +83,7 @@
/obj/effect/decal/cleanable/blood,
/obj/item/shard,
/obj/effect/decal/cleanable/blood/drip,
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/turf/floor/tiled/techfloor,
/area/template_noop)
"q" = (
@@ -242,7 +242,7 @@
/obj/effect/spider/stickyweb,
/obj/random/voidsuit,
/obj/random/loot,
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/structure/extinguisher_cabinet{
pixel_x = -29;
dir = 4
diff --git a/maps/random_ruins/space_ruins/space_ruins.dm b/maps/random_ruins/space_ruins/space_ruins.dm
index 6310e536a7e..460f5a6995a 100644
--- a/maps/random_ruins/space_ruins/space_ruins.dm
+++ b/maps/random_ruins/space_ruins/space_ruins.dm
@@ -5,6 +5,7 @@
material = /decl/material/solid/gemstone/diamond
/datum/map_template/ruin/space
+ abstract_type = /datum/map_template/ruin/space
template_categories = list(MAP_TEMPLATE_CATEGORY_SPACE)
prefix = "maps/random_ruins/space_ruins/"
cost = 1
diff --git a/maps/shaded_hills/areas/_areas.dm b/maps/shaded_hills/areas/_areas.dm
index b33bf376d84..e31eff6ce28 100644
--- a/maps/shaded_hills/areas/_areas.dm
+++ b/maps/shaded_hills/areas/_areas.dm
@@ -20,13 +20,6 @@
)
sound_env = GENERIC
ambience = list()
- var/list/additional_fishing_results
-
-/area/shaded_hills/Initialize()
- if(additional_fishing_results)
- for(var/fish in additional_fishing_results)
- fishing_results[fish] = additional_fishing_results[fish]
- . = ..()
/area/shaded_hills/outside
name = "\improper Grasslands"
diff --git a/maps/shaded_hills/areas/grassland.dm b/maps/shaded_hills/areas/grassland.dm
index 46c25332644..803f9a5e920 100644
--- a/maps/shaded_hills/areas/grassland.dm
+++ b/maps/shaded_hills/areas/grassland.dm
@@ -34,12 +34,15 @@
color = COLOR_BLUE
description = "The soft susurration of running water mingles with the hum of insects and croak of frogs."
area_blurb_category = /area/shaded_hills/outside/river
- additional_fishing_results = list(
+
+/area/shaded_hills/outside/river/get_additional_fishing_results()
+ var/static/list/additional_fishing_results = list(
/mob/living/simple_animal/aquatic/fish/large = 5,
/mob/living/simple_animal/aquatic/fish/large/salmon = 5,
/mob/living/simple_animal/aquatic/fish/large/trout = 5,
/mob/living/simple_animal/aquatic/fish/large/pike = 3
)
+ return additional_fishing_results
/area/shaded_hills/caves
name = "\improper Deep Tunnels"
@@ -53,6 +56,16 @@
area_blurb_category = /area/shaded_hills/caves
sound_env = CAVE
area_flags = AREA_FLAG_IS_BACKGROUND
+ fishing_results = list(
+ /mob/living/simple_animal/aquatic/fish/large/cave = 13,
+ /mob/living/simple_animal/aquatic/fish/large/lantern = 7,
+ /obj/item/mollusc = 5,
+ /obj/item/mollusc/barnacle/fished = 5,
+ /obj/item/mollusc/clam/fished/pearl = 3,
+ /obj/item/trash/mollusc_shell/clam = 1,
+ /obj/item/trash/mollusc_shell/barnacle = 1,
+ /obj/item/trash/mollusc_shell = 1
+ )
/area/shaded_hills/caves/deep
name = "\improper Deep Caverns"
diff --git a/maps/shaded_hills/areas/woods.dm b/maps/shaded_hills/areas/woods.dm
index 0fd8dca0685..73c262300a6 100644
--- a/maps/shaded_hills/areas/woods.dm
+++ b/maps/shaded_hills/areas/woods.dm
@@ -4,13 +4,16 @@
/area/shaded_hills/outside/river/lake
name = "Woodland Lake"
- additional_fishing_results = list(
- /mob/living/simple_animal/aquatic/fish/large/bass = 5,
- /mob/living/simple_animal/aquatic/fish/large/trout = 5,
- /mob/living/simple_animal/aquatic/fish/large/javelin = 5,
- /mob/living/simple_animal/hostile/aquatic/carp = 3,
- /mob/living/simple_animal/aquatic/fish/large/koi = 1
+
+/area/shaded_hills/outside/river/lake/get_additional_fishing_results()
+ var/static/list/additional_fishing_results = list(
+ /mob/living/simple_animal/aquatic/fish/large/bass = 5,
+ /mob/living/simple_animal/aquatic/fish/large/trout = 5,
+ /mob/living/simple_animal/aquatic/fish/large/javelin = 5,
+ /mob/living/simple_animal/hostile/aquatic/carp = 3,
+ /mob/living/simple_animal/aquatic/fish/large/koi = 1
)
+ return additional_fishing_results
/area/shaded_hills/outside/woods
name = "Woodlands"
diff --git a/maps/shaded_hills/icons/hud.dmi b/maps/shaded_hills/icons/hud.dmi
deleted file mode 100644
index c8c2fcf8bd1..00000000000
Binary files a/maps/shaded_hills/icons/hud.dmi and /dev/null differ
diff --git a/maps/shaded_hills/jobs/_jobs.dm b/maps/shaded_hills/jobs/_jobs.dm
index 638c6ff7bf5..7eb2719f661 100644
--- a/maps/shaded_hills/jobs/_jobs.dm
+++ b/maps/shaded_hills/jobs/_jobs.dm
@@ -1,6 +1,5 @@
/datum/map/shaded_hills
- id_hud_icons = 'maps/shaded_hills/icons/hud.dmi'
- allowed_jobs = list(
+ allowed_jobs = list(
/datum/job/shaded_hills/visitor/traveller,
/datum/job/shaded_hills/visitor/traveller/learned,
/datum/job/shaded_hills/visitor/beggar_knight,
@@ -48,6 +47,7 @@
/datum/job/shaded_hills
abstract_type = /datum/job/shaded_hills
+ hud_icon_state = "hudblank"
department_types = list(
/decl/department/shaded_hills/locals
)
diff --git a/maps/shaded_hills/levels/_levels.dm b/maps/shaded_hills/levels/_levels.dm
index 9150072af91..dc2d59ddcc5 100644
--- a/maps/shaded_hills/levels/_levels.dm
+++ b/maps/shaded_hills/levels/_levels.dm
@@ -1,11 +1,11 @@
/obj/abstract/map_data/shaded_hills
height = 2
-/datum/level_data/player_level/shaded_hills
+/datum/level_data/main_level/shaded_hills
use_global_exterior_ambience = FALSE
base_area = null
base_turf = /turf/floor/dirt
- abstract_type = /datum/level_data/player_level/shaded_hills
+ abstract_type = /datum/level_data/main_level/shaded_hills
ambient_light_level = 1
ambient_light_color = "#f3e6ca"
strata = /decl/strata/shaded_hills
@@ -16,10 +16,6 @@
daycycle_type = /datum/daycycle/shaded_hills
daycycle_id = "daycycle_shaded_hills"
template_edge_padding = 0 // we use a strictly delineated subarea, no need for this guard
- var/submap_budget = 0
- var/submap_category = null
- var/submap_area
- var/list/mobs_to_spawn = list()
/datum/daycycle/shaded_hills
cycle_duration = 2 HOURS // 1 hour of daylight, 1 hour of night
@@ -29,33 +25,7 @@
time_in_cycle = rand(cycle_duration)
..()
-/datum/level_data/player_level/shaded_hills/get_subtemplate_areas(template_category, blacklist, whitelist)
- return submap_area ? (islist(submap_area) ? submap_area : list(submap_area)) : null
-
-/datum/level_data/player_level/shaded_hills/get_subtemplate_budget()
- return submap_budget
-
-/datum/level_data/player_level/shaded_hills/get_subtemplate_category()
- return submap_category
-
-/datum/level_data/player_level/shaded_hills/after_generate_level()
- . = ..()
- if(length(mobs_to_spawn))
- for(var/list/mob_category in mobs_to_spawn)
- var/list/mob_types = mob_category[1]
- var/mob_turf = mob_category[2]
- var/mob_count = mob_category[3]
- var/sanity = 1000
- while(mob_count && sanity)
- sanity--
- var/turf/place_mob_at = locate(rand(level_inner_min_x, level_inner_max_x), rand(level_inner_min_y, level_inner_max_y), level_z)
- if(istype(place_mob_at, mob_turf) && !(locate(/mob/living) in place_mob_at))
- var/mob_type = pickweight(mob_types)
- new mob_type(place_mob_at)
- mob_count--
- CHECK_TICK
-
-/datum/level_data/player_level/shaded_hills/grassland
+/datum/level_data/main_level/shaded_hills/grassland
name = "Shaded Hills - Grassland"
level_id = "shaded_hills_grassland"
level_generators = list(
@@ -68,11 +38,12 @@
"shaded_hills_swamp" = SOUTH,
"shaded_hills_downlands" = EAST
)
- submap_budget = 5
- submap_category = MAP_TEMPLATE_CATEGORY_SH_GRASSLAND
- submap_area = /area/shaded_hills/outside/poi
+ subtemplate_budget = 5
+ subtemplate_category = MAP_TEMPLATE_CATEGORY_FANTASY_GRASSLAND
+ subtemplate_area = /area/shaded_hills/outside/poi
- mobs_to_spawn = list(
+/datum/level_data/main_level/shaded_hills/grassland/get_mobs_to_populate_level()
+ var/static/list/mobs_to_spawn = list(
list(
list(
/mob/living/simple_animal/passive/mouse = 9,
@@ -85,9 +56,9 @@
10
)
)
+ return mobs_to_spawn
-
-/datum/level_data/player_level/shaded_hills/swamp
+/datum/level_data/main_level/shaded_hills/swamp
name = "Shaded Hills - Swamp"
level_id = "shaded_hills_swamp"
connected_levels = list(
@@ -97,11 +68,12 @@
/datum/random_map/noise/shaded_hills/swamp,
/datum/random_map/noise/forage/shaded_hills/swamp
)
- submap_budget = 5
- submap_category = MAP_TEMPLATE_CATEGORY_SH_SWAMP
- submap_area = /area/shaded_hills/outside/swamp/poi
+ subtemplate_budget = 5
+ subtemplate_category = MAP_TEMPLATE_CATEGORY_FANTASY_SWAMP
+ subtemplate_area = /area/shaded_hills/outside/swamp/poi
- mobs_to_spawn = list(
+/datum/level_data/main_level/shaded_hills/swamp/get_mobs_to_populate_level()
+ var/static/list/mobs_to_spawn = list(
list(
list(
/mob/living/simple_animal/passive/mouse = 6,
@@ -127,8 +99,9 @@
10
)
)
+ return mobs_to_spawn
-/datum/level_data/player_level/shaded_hills/woods
+/datum/level_data/main_level/shaded_hills/woods
name = "Shaded Hills - Woods"
level_id = "shaded_hills_woods"
connected_levels = list(
@@ -138,11 +111,12 @@
/datum/random_map/noise/shaded_hills/woods,
/datum/random_map/noise/forage/shaded_hills/woods
)
- submap_budget = 5
- submap_category = MAP_TEMPLATE_CATEGORY_SH_WOODS
- submap_area = /area/shaded_hills/outside/woods/poi
+ subtemplate_budget = 5
+ subtemplate_category = MAP_TEMPLATE_CATEGORY_FANTASY_WOODS
+ subtemplate_area = /area/shaded_hills/outside/woods/poi
- mobs_to_spawn = list(
+/datum/level_data/main_level/shaded_hills/woods/get_mobs_to_populate_level()
+ var/static/list/mobs_to_spawn = list(
list(
list(
/mob/living/simple_animal/passive/mouse = 6,
@@ -162,8 +136,9 @@
5
)
)
+ return mobs_to_spawn
-/datum/level_data/player_level/shaded_hills/downlands
+/datum/level_data/main_level/shaded_hills/downlands
name = "Shaded Hills - Downlands"
level_id = "shaded_hills_downlands"
level_generators = list(
@@ -173,50 +148,50 @@
connected_levels = list(
"shaded_hills_grassland" = WEST
)
- submap_budget = 5
- submap_category = MAP_TEMPLATE_CATEGORY_SH_DOWNLANDS
- submap_area = /area/shaded_hills/outside/downlands/poi
+ subtemplate_budget = 5
+ subtemplate_category = MAP_TEMPLATE_CATEGORY_FANTASY_DOWNLANDS
+ subtemplate_area = /area/shaded_hills/outside/downlands/poi
-/datum/level_data/player_level/shaded_hills/caverns
+/datum/level_data/main_level/shaded_hills/caverns
name = "Shaded Hills - Caverns"
level_id = "shaded_hills_caverns"
connected_levels = list(
"shaded_hills_dungeon" = EAST
)
- submap_budget = 5
- submap_category = MAP_TEMPLATE_CATEGORY_SH_CAVERNS
- submap_area = /area/shaded_hills/caves/deep/poi
+ subtemplate_budget = 5
+ subtemplate_category = MAP_TEMPLATE_CATEGORY_FANTASY_CAVERNS
+ subtemplate_area = /area/shaded_hills/caves/deep/poi
level_generators = list(
/datum/random_map/automata/cave_system/shaded_hills,
/datum/random_map/noise/ore/rich
)
base_turf = /turf/floor/rock/basalt
-/datum/level_data/player_level/shaded_hills/dungeon
+/datum/level_data/main_level/shaded_hills/dungeon
name = "Shaded Hills - Dungeon"
level_id = "shaded_hills_dungeon"
connected_levels = list(
"shaded_hills_caverns" = WEST
)
- submap_budget = 5
- submap_category = MAP_TEMPLATE_CATEGORY_SH_DUNGEON
- submap_area = /area/shaded_hills/caves/dungeon/poi
+ subtemplate_budget = 5
+ subtemplate_category = MAP_TEMPLATE_CATEGORY_FANTASY_DUNGEON
+ subtemplate_area = /area/shaded_hills/caves/dungeon/poi
base_turf = /turf/floor/rock/basalt
/obj/abstract/level_data_spawner/shaded_hills_grassland
- level_data_type = /datum/level_data/player_level/shaded_hills/grassland
+ level_data_type = /datum/level_data/main_level/shaded_hills/grassland
/obj/abstract/level_data_spawner/shaded_hills_swamp
- level_data_type = /datum/level_data/player_level/shaded_hills/swamp
+ level_data_type = /datum/level_data/main_level/shaded_hills/swamp
/obj/abstract/level_data_spawner/shaded_hills_woods
- level_data_type = /datum/level_data/player_level/shaded_hills/woods
+ level_data_type = /datum/level_data/main_level/shaded_hills/woods
/obj/abstract/level_data_spawner/shaded_hills_downlands
- level_data_type = /datum/level_data/player_level/shaded_hills/downlands
+ level_data_type = /datum/level_data/main_level/shaded_hills/downlands
/obj/abstract/level_data_spawner/shaded_hills_caverns
- level_data_type = /datum/level_data/player_level/shaded_hills/caverns
+ level_data_type = /datum/level_data/main_level/shaded_hills/caverns
/obj/abstract/level_data_spawner/shaded_hills_dungeon
- level_data_type = /datum/level_data/player_level/shaded_hills/dungeon
+ level_data_type = /datum/level_data/main_level/shaded_hills/dungeon
diff --git a/maps/shaded_hills/outfits/_outfits.dm b/maps/shaded_hills/outfits/_outfits.dm
index e4de3be1343..49b61a0ec63 100644
--- a/maps/shaded_hills/outfits/_outfits.dm
+++ b/maps/shaded_hills/outfits/_outfits.dm
@@ -4,13 +4,14 @@
id_type = null
pda_type = null
l_ear = null
- uniform = /obj/item/clothing/pants/trousers/jerkin
shoes = /obj/item/clothing/shoes/craftable/boots
+ uniform = list(
+ /obj/item/clothing/pants/trousers,
+ /obj/item/clothing/shirt/jerkin
+ )
backpack_contents = list(
/obj/item/rock/flint/striker,
/obj/item/bladed/folding/iron,
/obj/item/flame/torch
)
- l_pocket = /obj/item/rock/flint/striker
- r_pocket = /obj/item/bladed/folding/iron
outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL
diff --git a/maps/shaded_hills/outfits/shrine.dm b/maps/shaded_hills/outfits/shrine.dm
index 1df7dd8b0a9..4f47ac02e62 100644
--- a/maps/shaded_hills/outfits/shrine.dm
+++ b/maps/shaded_hills/outfits/shrine.dm
@@ -11,4 +11,4 @@
/decl/outfit/job/shaded_hills/shrine/keeper
name = "Shaded Hills - Shrine Keeper"
suit = /obj/item/clothing/suit/mantle
- mask = /obj/item/clothing/neck/necklace/prayer_beads/basalt
+ mask = /obj/item/clothing/neck/prayer_beads/basalt
diff --git a/maps/shaded_hills/outfits/visitors.dm b/maps/shaded_hills/outfits/visitors.dm
index 5d89949bbff..ca0204ce1a7 100644
--- a/maps/shaded_hills/outfits/visitors.dm
+++ b/maps/shaded_hills/outfits/visitors.dm
@@ -8,7 +8,7 @@
backpack_contents = list(
/obj/item/stack/medical/bandage/crafted/five = 1,
/obj/item/stack/medical/ointment/crafted/five = 1,
- /obj/item/chems/waterskin/crafted/wine = 1
+ /obj/item/chems/glass/waterskin/crafted/wine = 1
)
/decl/outfit/job/shaded_hills/traveller/scholar
diff --git a/maps/shaded_hills/shaded_hills-dungeon.dmm b/maps/shaded_hills/shaded_hills-dungeon.dmm
index e9cfce36153..6d1ab918e6f 100644
--- a/maps/shaded_hills/shaded_hills-dungeon.dmm
+++ b/maps/shaded_hills/shaded_hills-dungeon.dmm
@@ -21,11 +21,11 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"ce" = (
-/obj/structure/table/woodentable_reinforced/ebony/walnut,
+/obj/structure/table/wood/reinforced/ebony/walnut,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"cp" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/knife,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -42,13 +42,13 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"dP" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/flame/torch,
/obj/item/flame/torch,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"dT" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/knife/kitchen/cleaver/bronze,
/turf/floor/path/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -57,10 +57,14 @@
/turf/floor/path/basalt/water/deep,
/area/shaded_hills/caves/dungeon/poi)
"fD" = (
-/obj/structure/table/woodentable_reinforced/ebony/walnut,
+/obj/structure/table/wood/reinforced/ebony/walnut,
/obj/item/ancient_surgery/bonesaw,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
+"fF" = (
+/obj/random/dungeon_bookcase,
+/turf/floor/rock/basalt,
+/area/shaded_hills/caves/dungeon/poi)
"fW" = (
/obj/structure/bed/chair/bench/ebony{
dir = 8
@@ -69,11 +73,11 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
"gy" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"hd" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/stack/material/brick/mapped/graphite/fifteen,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -133,12 +137,12 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"kI" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/flame/candle,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"kL" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/bladed/folding,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -191,24 +195,24 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"nJ" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/food/grown/dried_tobacco/fine,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"nT" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/stack/material/ore/diamond,
/obj/item/stack/material/ore/diamond,
/obj/item/stack/material/ore/diamond,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
"nV" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/folding,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"ob" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/knife,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -284,7 +288,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"rP" = (
-/obj/structure/table/woodentable_reinforced/ebony/walnut,
+/obj/structure/table/wood/reinforced/ebony/walnut,
/obj/item/ancient_surgery/forceps,
/obj/item/ancient_surgery/retractor,
/turf/floor/path/running_bond/basalt,
@@ -323,7 +327,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"vN" = (
-/obj/structure/table/woodentable_reinforced/ebony/walnut,
+/obj/structure/table/wood/reinforced/ebony/walnut,
/obj/item/remains/human,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -345,7 +349,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"wP" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/tool/hammer,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -364,7 +368,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"yM" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/tool/pickaxe/iron,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -372,7 +376,7 @@
/obj/structure/wall_sconce{
dir = 8
},
-/obj/structure/table/woodentable_reinforced/ebony/walnut,
+/obj/structure/table/wood/reinforced/ebony/walnut,
/obj/item/ancient_surgery/bonesetter,
/obj/item/ancient_surgery/sutures,
/turf/floor/path/running_bond/basalt,
@@ -400,7 +404,7 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
"BG" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/stack/material/thread/mapped/cotton/thirty,
/obj/item/bladed/knife,
/turf/floor/path/running_bond/basalt,
@@ -430,7 +434,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"DW" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/folding,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -457,13 +461,11 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Gu" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/turf/floor/path/basalt,
/area/shaded_hills/caves/dungeon/poi)
"GA" = (
/obj/structure/door/ebony,
-/obj/structure/door/ebony,
-/obj/structure/door/ebony,
/obj/abstract/landmark/lock_preset{
lock_preset_id = "sunken keep";
name = "sunken keep locked door"
@@ -478,7 +480,7 @@
/turf/floor/path/basalt/water,
/area/shaded_hills/caves/dungeon/poi)
"Hs" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/flame/candle,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -486,13 +488,13 @@
/turf/floor/rock/basalt,
/area/shaded_hills/caves/dungeon)
"HO" = (
-/obj/structure/table/woodentable_reinforced/ebony/walnut,
+/obj/structure/table/wood/reinforced/ebony/walnut,
/obj/item/ancient_surgery/cautery,
/obj/item/ancient_surgery/scalpel,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Ie" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/mortar,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -532,7 +534,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Ky" = (
-/obj/structure/bookcase/ebony,
+/obj/random/dungeon_bookcase,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Kz" = (
@@ -543,12 +545,12 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/inn)
"Ln" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/tool/hammer/sledge,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
"LB" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"ME" = (
@@ -559,7 +561,7 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
"MW" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/rock/flint/striker,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -571,7 +573,7 @@
/turf/floor/mud/water,
/area/shaded_hills/caves/dungeon/poi)
"Oq" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Pb" = (
@@ -602,7 +604,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Rm" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/stack/material/ore/diamond,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -650,7 +652,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Vk" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/food/grown/dried_tobacco/bad,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -667,7 +669,7 @@
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
"Yi" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/stack/material/thread/mapped/dried_gut/thirty,
/turf/floor/path/running_bond/basalt,
/area/shaded_hills/caves/dungeon/poi)
@@ -18051,7 +18053,7 @@ Ky
Ky
bD
bD
-Ua
+fF
Ky
bD
bD
@@ -18200,11 +18202,11 @@ Ky
bD
Ua
Ky
+Ky
bD
bD
-bD
-Ua
-Ua
+fF
+fF
bD
ok
bD
@@ -18351,12 +18353,12 @@ Ky
Ky
bD
Ua
-Ua
-bD
+fF
+Ky
bD
Ua
hU
-Ua
+fF
bD
bD
bD
@@ -18503,12 +18505,12 @@ Ky
Ky
Ua
bD
-bD
+Ky
hU
Ua
bD
hU
-Ua
+fF
Ua
bD
bD
diff --git a/maps/shaded_hills/shaded_hills-grassland.dmm b/maps/shaded_hills/shaded_hills-grassland.dmm
index b52be725117..3adbafa7443 100644
--- a/maps/shaded_hills/shaded_hills-grassland.dmm
+++ b/maps/shaded_hills/shaded_hills-grassland.dmm
@@ -67,7 +67,7 @@
/area/shaded_hills/outside)
"kr" = (
/obj/item/tool/pickaxe/iron,
-/obj/item/tool/axe,
+/obj/item/tool/axe/iron,
/obj/abstract/exterior_marker/inside,
/obj/structure/closet/crate/chest/ebony,
/turf/floor/woven,
@@ -110,14 +110,14 @@
"nl" = (
/obj/structure/door/walnut,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/outside)
"oo" = (
/obj/item/stack/material/ore/handful/sand,
/turf/floor/rock/basalt,
/area/shaded_hills/outside)
"pU" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/rock/hematite,
/obj/item/rock/flint,
/obj/item/flame/torch,
@@ -125,17 +125,25 @@
/obj/item/bag/sack,
/turf/floor/woven,
/area/shaded_hills/caves/unexplored/south)
+"qj" = (
+/obj/abstract/force_fluid_flow/north,
+/turf/floor/mud/water/deep,
+/area/shaded_hills/outside/river)
"qy" = (
/turf/wall/natural/basalt/shaded_hills,
/area/shaded_hills/caves/river)
"se" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/basket,
/turf/floor/woven,
/area/shaded_hills/caves/unexplored/south)
"sS" = (
/turf/floor/mud/water,
/area/shaded_hills/caves/unexplored/south)
+"sT" = (
+/obj/abstract/force_fluid_flow/north,
+/turf/floor/mud/water/deep,
+/area/shaded_hills/outside/river)
"te" = (
/turf/unsimulated/mask,
/area/shaded_hills/caves/unexplored/south)
@@ -144,7 +152,7 @@
/area/shaded_hills/caves/unexplored)
"ul" = (
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/outside)
"vX" = (
/turf/floor/path/running_bond/basalt,
@@ -159,7 +167,7 @@
/turf/floor/dirt,
/area/shaded_hills/outside)
"xC" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/outside)
"yA" = (
/obj/abstract/landmark/latejoin/observer,
@@ -188,7 +196,7 @@
/turf/floor/woven,
/area/shaded_hills/outside)
"EE" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/outside/river)
"EL" = (
/obj/abstract/exterior_marker/inside,
@@ -19512,7 +19520,7 @@ Gh
Gh
My
My
-My
+sT
lC
lC
lC
@@ -19529,8 +19537,8 @@ lC
lC
lC
lC
-My
-My
+qj
+sT
My
Gh
Gh
@@ -19572,12 +19580,12 @@ My
My
My
My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -19662,9 +19670,9 @@ Gh
Gh
Gh
My
-My
-My
-My
+sT
+sT
+sT
lC
lC
lC
@@ -19681,9 +19689,9 @@ lC
lC
lC
lC
-My
-My
-My
+sT
+sT
+sT
My
My
Gh
@@ -19717,23 +19725,23 @@ Gh
Gh
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
Gh
@@ -19753,14 +19761,14 @@ JN
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -19771,15 +19779,15 @@ My
Gh
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
Gh
Gh
@@ -19814,9 +19822,9 @@ My
My
My
My
-My
-My
-My
+sT
+sT
+sT
lC
lC
lC
@@ -19833,11 +19841,11 @@ lC
lC
lC
lC
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
My
My
Gh
@@ -19867,27 +19875,27 @@ Gh
Gh
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -19901,38 +19909,38 @@ Gh
Xd
vX
Xd
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -19960,15 +19968,15 @@ My
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
lC
lC
lC
@@ -19986,12 +19994,12 @@ lC
lC
lC
My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -20017,6 +20025,13 @@ Gh
Gh
Gh
My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -20028,20 +20043,13 @@ My
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -20053,42 +20061,42 @@ My
Xd
vX
Xd
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
Gh
Gh
@@ -20107,19 +20115,19 @@ My
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
lC
lC
@@ -20140,15 +20148,15 @@ lC
Gh
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -20170,10 +20178,10 @@ Gh
Gh
My
My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
My
My
Gh
@@ -20190,57 +20198,57 @@ Gh
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
EE
EE
Xd
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
Gh
Gh
@@ -20252,21 +20260,21 @@ zp
zp
Gh
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -20299,18 +20307,18 @@ My
My
My
My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
My
Gh
Gh
@@ -20345,38 +20353,38 @@ Gh
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
JN
EE
EE
EE
JN
+sT
+sT
My
My
My
+sT
+sT
+sT
My
My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
Gh
My
@@ -20404,14 +20412,14 @@ zp
Gh
Gh
My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
My
My
@@ -20456,14 +20464,14 @@ My
My
My
My
-My
-My
-My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
+sT
+sT
+sT
My
Gh
Gh
@@ -20501,15 +20509,15 @@ My
My
My
My
-My
-My
-My
-My
-My
+sT
+sT
+sT
+sT
+sT
EE
vX
EE
-My
+sT
My
My
Gh
@@ -20524,9 +20532,9 @@ My
My
My
My
-My
-My
-My
+sT
+sT
+sT
My
My
Gh
diff --git a/maps/shaded_hills/shaded_hills-inn.dmm b/maps/shaded_hills/shaded_hills-inn.dmm
index 0f8e896ad49..7dc097ab79b 100644
--- a/maps/shaded_hills/shaded_hills-inn.dmm
+++ b/maps/shaded_hills/shaded_hills-inn.dmm
@@ -24,7 +24,7 @@
/area/shaded_hills/outside/downlands)
"bu" = (
/obj/structure/table/desk/dresser,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/stable)
"bv" = (
/obj/structure/bed/chair/rustic{
@@ -37,7 +37,7 @@
/turf/floor/path/basalt,
/area/shaded_hills/general_store)
"bW" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/cooking_vessel/skillet/iron,
/obj/item/chems/glass/handmade/bowl/wood,
/obj/item/chems/glass/handmade/bowl/wood,
@@ -45,14 +45,14 @@
/obj/item/chems/glass/handmade/cup/wood,
/obj/item/chems/glass/handmade/cup/wood,
/obj/item/chems/glass/handmade/cup/wood,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"cl" = (
-/obj/structure/table/woodentable/ebony,
-/turf/floor/wood/walnut,
+/obj/structure/table/wood/ebony,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"cq" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/bowl/wood,
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
@@ -61,10 +61,6 @@
unique_merge_identifier = "outer wall"
},
/area/shaded_hills/outside/downlands)
-"cy" = (
-/obj/structure/reagent_dispensers/barrel/ebony/water,
-/turf/floor/wood/walnut,
-/area/shaded_hills/shrine/kitchen)
"cT" = (
/obj/structure/railing/mapped/wooden/walnut{
dir = 1
@@ -92,12 +88,12 @@
/turf/wall/log/walnut/shutter,
/area/shaded_hills/general_store)
"dK" = (
-/obj/structure/table/woodentable/ebony,
-/turf/floor/wood/walnut,
+/obj/structure/table/wood/ebony,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"dL" = (
/obj/structure/reagent_dispensers/barrel/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/storehouse)
"dN" = (
/obj/structure/wall_sconce/lantern{
@@ -111,7 +107,7 @@
/area/shaded_hills/shrine)
"eD" = (
/obj/structure/working/loom/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"eG" = (
/obj/structure/door/walnut,
@@ -149,11 +145,11 @@
/turf/wall/brick/basalt/shutter,
/area/shaded_hills/slaughterhouse)
"fK" = (
-/obj/structure/reagent_dispensers/barrel/ebony/water,
+/obj/structure/cask_rack/large/mapped,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn/kitchen)
"fR" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/storehouse)
"fS" = (
/obj/structure/table/marble,
@@ -180,14 +176,14 @@
/turf/floor/path/basalt,
/area/shaded_hills/slaughterhouse)
"ge" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"gg" = (
/obj/structure/wall_sconce/lantern{
dir = 4
},
-/obj/structure/table/woodentable/ebony,
-/turf/floor/wood/walnut,
+/obj/structure/table/wood/ebony,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"gn" = (
/obj/item/flame/candle/handmade,
@@ -204,7 +200,7 @@
/obj/structure/wall_sconce/lantern{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
/area/shaded_hills/shrine)
"gA" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -216,7 +212,7 @@
/obj/structure/wall_sconce/lantern{
start_lit = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"gL" = (
/obj/structure/reagent_dispensers/barrel/ebony/oil,
@@ -250,7 +246,7 @@
/obj/structure/bed/chair/bench/ebony{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse/porch)
"hu" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -260,7 +256,7 @@
dir = 1;
pixel_y = 10
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"hE" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -271,7 +267,7 @@
/area/shaded_hills/outside/downlands)
"hJ" = (
/obj/item/stool/rustic,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"hU" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -284,10 +280,10 @@
dir = 1;
pixel_y = 10
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"id" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/bottle/beer,
/obj/item/chems/glass/handmade/bottle/beer,
/obj/item/chems/glass/handmade/bottle/beer,
@@ -317,6 +313,12 @@
/obj/abstract/landmark/lock_preset/shaded_hills/inn_interior,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn)
+"iJ" = (
+/obj/structure/wall_sconce/lantern{
+ dir = 4
+ },
+/turf/floor/wood/rough/walnut,
+/area/shaded_hills/shrine)
"iK" = (
/turf/wall/brick/basalt{
unique_merge_identifier = "shrine wall"
@@ -333,17 +335,17 @@
/obj/structure/wall_sconce/lantern{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/stable)
"jk" = (
/obj/structure/bed/chair/bench/pew/mahogany{
dir = 1
},
/obj/abstract/landmark/start/shaded_hills/cleric,
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
/area/shaded_hills/shrine)
"js" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/stable)
"jx" = (
/obj/structure/reagent_dispensers/barrel/ebony,
@@ -361,7 +363,7 @@
"jA" = (
/obj/structure/bed/simple/ebony,
/obj/item/bedsheet/furs,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/stable)
"jI" = (
/obj/structure/wall_sconce/lantern{
@@ -385,11 +387,11 @@
/obj/structure/banner_frame/wall/ebony/green{
pixel_y = 32
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"kE" = (
/obj/structure/door/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/stable)
"kI" = (
/obj/structure/bed/chair/bench/pew/ebony{
@@ -398,7 +400,7 @@
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"lz" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/knife/kitchen/cleaver/bronze,
/turf/floor/path/basalt,
/area/shaded_hills/slaughterhouse)
@@ -409,7 +411,7 @@
/obj/structure/railing/mapped/wooden/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"lE" = (
/obj/abstract/level_data_spawner/shaded_hills_downlands,
@@ -423,7 +425,7 @@
dir = 1
},
/obj/abstract/landmark/start/shaded_hills/farmer,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse/porch)
"me" = (
/obj/structure/reagent_dispensers/barrel/ebony,
@@ -440,15 +442,15 @@
/turf/floor/dirt,
/area/shaded_hills/outside/downlands)
"ml" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/shears,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"mG" = (
/obj/structure/railing/mapped/wooden/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse/porch)
"mJ" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -458,8 +460,14 @@
dir = 1;
pixel_y = 10
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
+"mK" = (
+/obj/structure/door/walnut{
+ dir = 4
+ },
+/turf/floor/wood/rough/walnut,
+/area/shaded_hills/farmhouse)
"nn" = (
/turf/wall/log/walnut,
/area/shaded_hills/stable)
@@ -481,7 +489,7 @@
/turf/floor/carpet/rustic,
/area/shaded_hills/inn)
"nN" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/chems/glass/bucket/wood,
/turf/floor/path/basalt,
/area/shaded_hills/slaughterhouse)
@@ -511,10 +519,10 @@
/obj/structure/bed/chair/bench/pew/mahogany{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
/area/shaded_hills/shrine)
"pi" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/stack/medical/ointment/crafted/five,
/obj/item/stack/medical/bandage/crafted/five,
/turf/floor/path/herringbone/basalt,
@@ -526,19 +534,19 @@
/obj/structure/bed/simple/ebony,
/obj/abstract/landmark/start/shaded_hills/shrine_attendant,
/obj/item/bedsheet/furs,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"qf" = (
/obj/structure/railing/mapped/wooden/walnut{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"qG" = (
/turf/wall/brick/basalt,
/area/shaded_hills/inn)
"qL" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/ancient_surgery/bonesetter,
/obj/item/ancient_surgery/retractor,
/obj/item/ancient_surgery/sutures,
@@ -557,10 +565,10 @@
},
/area/shaded_hills/outside/downlands/poi)
"ra" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/mortar,
/obj/item/rock/basalt,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"rc" = (
/obj/structure/railing/mapped/wooden/walnut,
@@ -587,7 +595,7 @@
/turf/floor/carpet,
/area/shaded_hills/inn)
"rv" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/bottle,
/obj/item/chems/glass/handmade/bottle/tall,
/obj/item/chems/glass/handmade/bottle/wide,
@@ -600,7 +608,7 @@
/obj/structure/railing/mapped/wooden/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"rC" = (
/obj/structure/table/marble,
@@ -618,7 +626,7 @@
/obj/structure/wall_sconce/lantern{
start_lit = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"rY" = (
/obj/effect/floor_decal/spline/fancy/wood/corner/walnut,
@@ -629,12 +637,16 @@
/obj/abstract/landmark/lock_preset/shaded_hills/inn_interior,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn/kitchen)
+"sz" = (
+/obj/structure/door/walnut,
+/turf/floor/wood/rough/walnut,
+/area/shaded_hills/shrine)
"sJ" = (
/obj/structure/closet/cabinet/wooden/ebony,
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"sM" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/turf/floor/wood/walnut,
/area/shaded_hills/general_store)
"th" = (
@@ -651,7 +663,7 @@
/obj/effect/floor_decal/spline/fancy/wood/walnut{
dir = 1
},
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/chems/glass/handmade/cup/wood,
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
@@ -676,7 +688,7 @@
/obj/structure/bed/chair/rustic{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"uk" = (
/obj/structure/bed/chair/bench/pew/ebony{
@@ -714,13 +726,13 @@
dir = 1;
pixel_y = 10
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"vz" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/cooking_vessel/baking_dish/earthenware,
/obj/item/chems/cooking_vessel/baking_dish/earthenware,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"vA" = (
/obj/structure/table/marble,
@@ -735,7 +747,7 @@
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"wg" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/ancient_surgery/bonesaw,
/obj/item/ancient_surgery/forceps,
/turf/floor/path/herringbone/basalt,
@@ -759,16 +771,12 @@
/obj/structure/closet/crate/chest/ebony,
/turf/floor/path/basalt,
/area/shaded_hills/general_store)
-"wA" = (
-/obj/abstract/exterior_marker/inside,
-/turf/floor/dirt,
-/area/shaded_hills/outside/downlands)
"xh" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/condiment/large/salt,
/obj/item/chems/condiment/flour,
/obj/item/chems/condiment/sugar,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"xk" = (
/obj/structure/flora/tree/dead/mahogany,
@@ -793,7 +801,7 @@
/area/shaded_hills/outside/downlands)
"ya" = (
/obj/structure/reagent_dispensers/barrel/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"yn" = (
/obj/structure/door/walnut,
@@ -811,7 +819,7 @@
/obj/item/seeds/extracted/cabbage,
/obj/item/seeds/extracted/cabbage,
/obj/item/seeds/extracted/cabbage,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/storehouse)
"yx" = (
/obj/structure/table/marble,
@@ -826,11 +834,11 @@
dir = 1
},
/obj/abstract/landmark/start/shaded_hills/farmer,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"yN" = (
/obj/structure/closet/crate/chest/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"yY" = (
/turf/floor/grass,
@@ -870,7 +878,7 @@
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"zQ" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/general_store/porch)
"Ak" = (
/turf/floor/path/basalt,
@@ -882,7 +890,8 @@
/area/shaded_hills/inn)
"Aq" = (
/obj/structure/working/loom/ebony,
-/turf/floor/wood/walnut,
+/obj/structure/wall_sconce/lantern,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"Aw" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -909,9 +918,9 @@
/turf/floor/path/basalt,
/area/shaded_hills/shrine)
"AG" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bag/sack,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"AW" = (
/obj/structure/railing/mapped/wooden/walnut,
@@ -922,11 +931,11 @@
/obj/structure/wall_sconce/lantern{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
/area/shaded_hills/shrine)
"Bp" = (
/obj/structure/working/butter_churn/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"Br" = (
/turf/floor/path/basalt,
@@ -939,10 +948,6 @@
"By" = (
/turf/floor/grass,
/area/shaded_hills/outside/shrine)
-"BD" = (
-/obj/structure/reagent_dispensers/barrel/ebony/wine,
-/turf/floor/wood/walnut,
-/area/shaded_hills/shrine/kitchen)
"BG" = (
/obj/structure/bed/chair/bench/ebony{
dir = 1
@@ -960,7 +965,7 @@
/area/shaded_hills/general_store)
"BX" = (
/obj/structure/wall_sconce/lantern,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse/porch)
"Cj" = (
/obj/item/stack/material/log/mapped/walnut/twenty,
@@ -972,10 +977,13 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/shrine/kitchen)
"CR" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
+/area/shaded_hills/shrine)
+"CV" = (
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"Dl" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse/porch)
"Dn" = (
/obj/structure/reagent_dispensers/barrel/ebony,
@@ -987,7 +995,7 @@
/obj/item/seeds/extracted/wheat,
/obj/item/seeds/extracted/wheat,
/obj/item/seeds/extracted/wheat,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/storehouse)
"Dr" = (
/obj/structure/bed/simple/ebony/cloth,
@@ -998,7 +1006,7 @@
/obj/structure/bed/simple/ebony/cloth,
/obj/abstract/landmark/start/shaded_hills/shrine_keeper,
/obj/item/bedsheet/furs,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"Ee" = (
/turf/wall/log/walnut,
@@ -1023,7 +1031,7 @@
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"Ev" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/structure/wall_sconce/lantern{
dir = 1;
pixel_y = 10;
@@ -1043,12 +1051,18 @@
dir = 4;
start_lit = 1
},
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn)
"EV" = (
/turf/floor/path/basalt,
/area/shaded_hills/outside/downlands)
+"Ff" = (
+/obj/structure/wall_sconce/lantern{
+ dir = 8
+ },
+/turf/floor/wood/rough/walnut,
+/area/shaded_hills/shrine/kitchen)
"FD" = (
/obj/structure/reagent_dispensers/barrel/ebony,
/obj/item/seeds/extracted/rice,
@@ -1084,7 +1098,7 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn/kitchen)
"Gj" = (
-/obj/structure/table/woodentable_reinforced/mahogany,
+/obj/structure/table/wood/reinforced/mahogany,
/turf/floor/carpet/red,
/area/shaded_hills/shrine)
"Gq" = (
@@ -1095,7 +1109,7 @@
/obj/structure/railing/mapped/wooden/walnut{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/general_store/porch)
"Gu" = (
/obj/structure/table/marble,
@@ -1107,7 +1121,7 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn/kitchen)
"Gw" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/bag/sack,
/turf/floor/path/basalt,
/area/shaded_hills/slaughterhouse)
@@ -1155,7 +1169,7 @@
/area/shaded_hills/stable)
"HF" = (
/obj/structure/working/spinning_wheel/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"HI" = (
/turf/floor/grass,
@@ -1177,7 +1191,7 @@
/obj/item/flame/candle/handmade{
pixel_y = 12
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/stable)
"Ic" = (
/turf/floor/path/running_bond/basalt,
@@ -1186,7 +1200,7 @@
/obj/structure/door/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"Im" = (
/obj/structure/wall_sconce/lantern{
@@ -1194,14 +1208,10 @@
},
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
-"Iz" = (
-/obj/abstract/exterior_marker/inside,
-/turf/wall/brick/basalt,
-/area/shaded_hills/outside/downlands)
"IB" = (
/obj/structure/door/walnut,
/obj/abstract/landmark/lock_preset/shaded_hills/shrine,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"IC" = (
/obj/structure/bookcase/ebony,
@@ -1211,7 +1221,7 @@
/obj/structure/door/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/storehouse)
"IQ" = (
/turf/wall/log/walnut/shutter/open,
@@ -1248,11 +1258,11 @@
/area/shaded_hills/inn)
"Jt" = (
/obj/structure/closet/cabinet/wooden/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"Jw" = (
/obj/structure/bed/chair/rustic,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"Jz" = (
/obj/structure/door/walnut{
@@ -1262,19 +1272,20 @@
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"JK" = (
-/obj/structure/table/woodentable_reinforced/mahogany,
+/obj/structure/table/wood/reinforced/mahogany,
/obj/item/flame/candle/handmade,
/turf/floor/carpet/red,
/area/shaded_hills/shrine)
"JM" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/ancient_surgery/cautery,
/obj/item/ancient_surgery/scalpel,
+/obj/structure/wall_sconce/lantern,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/shrine)
"JU" = (
/obj/structure/railing/mapped/wooden/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"Ka" = (
/mob/living/simple_animal/cow,
@@ -1305,8 +1316,7 @@
/turf/floor/path/basalt,
/area/shaded_hills/outside/downlands)
"Lj" = (
-/obj/structure/reagent_dispensers/well/mapped,
-/obj/abstract/exterior_marker/inside,
+/obj/structure/reagent_dispensers/well/mapped/covered,
/turf/floor/dirt,
/area/shaded_hills/outside/downlands)
"Ly" = (
@@ -1317,9 +1327,9 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn)
"LH" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/bucket/wood,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse)
"LK" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -1357,6 +1367,9 @@
pixel_x = 12;
pixel_y = 8
},
+/obj/item/hourglass{
+ pixel_y = 12
+ },
/turf/floor/carpet,
/area/shaded_hills/inn)
"MT" = (
@@ -1367,14 +1380,14 @@
/turf/open,
/area/shaded_hills/inn/kitchen)
"NF" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn)
"NH" = (
/turf/unsimulated/mask,
/area/shaded_hills/outside/downlands/poi)
"NZ" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/bottle/tall/wine,
/obj/item/chems/glass/handmade/bottle/tall/wine,
/obj/item/chems/glass/handmade/bottle/tall/wine,
@@ -1389,9 +1402,9 @@
/turf/floor/path/basalt,
/area/shaded_hills/slaughterhouse)
"Ot" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/cooking_vessel/pot/iron,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"ON" = (
/obj/structure/table/marble,
@@ -1423,7 +1436,7 @@
/area/shaded_hills/stable)
"PG" = (
/obj/structure/door/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
/area/shaded_hills/shrine)
"PQ" = (
/obj/item/food/butchery/meat/beef,
@@ -1435,7 +1448,7 @@
/area/shaded_hills/slaughterhouse)
"PS" = (
/obj/structure/reagent_dispensers/barrel/ebony/oil,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/storehouse)
"Qb" = (
/turf/floor/carpet,
@@ -1463,7 +1476,7 @@
dir = 8;
start_lit = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"QQ" = (
/turf/wall/log/walnut,
@@ -1472,7 +1485,7 @@
/obj/structure/railing/mapped/wooden/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/general_store/porch)
"QW" = (
/turf/floor/path/herringbone/basalt,
@@ -1535,11 +1548,11 @@
/obj/structure/bed/chair/rustic{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"Sy" = (
/obj/structure/working/spinning_wheel/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"SB" = (
/obj/structure/door/walnut{
@@ -1592,7 +1605,7 @@
/turf/floor/wood/walnut,
/area/shaded_hills/farmhouse)
"Tr" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/effect/floor_decal/spline/fancy/wood/walnut{
dir = 1
},
@@ -1607,13 +1620,13 @@
/turf/floor/dirt,
/area/shaded_hills/outside/downlands)
"TM" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/food/grown/potato,
/obj/item/food/grown/potato,
/obj/item/food/grown/carrot,
/obj/item/food/grown/carrot,
/obj/item/food/grown/cabbage,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"TR" = (
/turf/floor/dirt,
@@ -1623,10 +1636,15 @@
/obj/abstract/landmark/lock_preset/shaded_hills/shrine,
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/shrine)
+"Ue" = (
+/obj/structure/door/walnut,
+/obj/abstract/landmark/lock_preset/shaded_hills/farmhouse,
+/turf/floor/wood/rough/walnut,
+/area/shaded_hills/farmhouse)
"UD" = (
/obj/item/flame/candle/handmade,
/obj/structure/table/end/alt,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine)
"US" = (
/obj/structure/bed/chair/rustic{
@@ -1647,8 +1665,8 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/shrine)
"VE" = (
-/obj/structure/reagent_dispensers/barrel/ebony/beer,
-/turf/floor/wood/walnut,
+/obj/structure/cask_rack/large/mapped,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"VM" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -1656,11 +1674,14 @@
},
/turf/floor/dirt,
/area/shaded_hills/outside/shrine)
+"VO" = (
+/turf/floor/wood/rough/walnut,
+/area/shaded_hills/farmhouse)
"VU" = (
/obj/structure/railing/mapped/wooden/walnut{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/farmhouse/porch)
"VW" = (
/obj/structure/table/marble,
@@ -1676,10 +1697,10 @@
/turf/wall/log/walnut,
/area/shaded_hills/general_store)
"Wh" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/mortar,
/obj/item/rock/basalt,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/shrine/kitchen)
"Wk" = (
/obj/structure/railing/mapped/wooden/walnut{
@@ -1688,7 +1709,7 @@
/turf/floor/straw,
/area/shaded_hills/stable)
"Wl" = (
-/obj/structure/table/woodentable_reinforced/ebony,
+/obj/structure/table/wood/reinforced/ebony,
/obj/item/chems/glass/handmade/cup/wood,
/obj/effect/floor_decal/spline/fancy/wood/walnut{
dir = 1
@@ -1703,7 +1724,7 @@
/obj/structure/railing/mapped/wooden/walnut{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"WE" = (
/obj/structure/reagent_dispensers/barrel/ebony,
@@ -1743,7 +1764,7 @@
/turf/floor/path/herringbone/basalt,
/area/shaded_hills/inn/kitchen)
"WY" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/turf/floor/wood/walnut,
/area/shaded_hills/inn)
"Xr" = (
@@ -1761,7 +1782,7 @@
pixel_y = 10;
start_lit = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/mahogany,
/area/shaded_hills/shrine)
"XM" = (
/turf/floor/carpet/red,
@@ -1773,7 +1794,7 @@
/turf/wall/brick/basalt,
/area/shaded_hills/shrine)
"Yg" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/inn/porch)
"Yj" = (
/obj/structure/meat_hook,
@@ -7805,9 +7826,9 @@ HI
HI
HI
TR
-Iz
-Iz
-Iz
+TR
+TR
+TR
TR
TR
EV
@@ -7957,9 +7978,9 @@ HI
HI
TR
TR
-wA
-wA
-wA
+TR
+TR
+TR
TR
TR
EV
@@ -8109,9 +8130,9 @@ HI
HI
TR
TR
-wA
+TR
Lj
-wA
+TR
TR
TR
EV
@@ -8261,9 +8282,9 @@ HI
HI
TR
TR
-wA
-wA
-wA
+TR
+TR
+TR
TR
TR
TR
@@ -8413,9 +8434,9 @@ HI
HI
HI
TR
-Iz
-Iz
-Iz
+TR
+TR
+TR
TR
TR
EV
@@ -13288,8 +13309,8 @@ EV
TR
LN
cl
-qP
-qP
+VO
+VO
yN
LN
TR
@@ -13441,7 +13462,7 @@ TR
IQ
LH
yJ
-qP
+VO
yN
LN
TR
@@ -13592,8 +13613,8 @@ EV
TR
LN
ml
-qP
-qP
+VO
+VO
gB
LN
TR
@@ -13744,8 +13765,8 @@ EV
TR
LN
AG
-qP
-qP
+VO
+VO
ya
LN
zH
@@ -13896,7 +13917,7 @@ VU
VU
LN
LN
-Ti
+mK
LN
LN
LN
@@ -14047,8 +14068,8 @@ Ic
Dl
BX
LN
-qP
-qP
+VO
+VO
hJ
Bp
IQ
@@ -14198,12 +14219,12 @@ EV
EV
Dl
Dl
-WO
-qP
-qP
-qP
-qP
-WO
+Ue
+VO
+VO
+VO
+VO
+Ue
TR
Rl
GW
@@ -14352,9 +14373,9 @@ Dl
lL
LN
hJ
-qP
-qP
-qP
+VO
+VO
+VO
LN
xW
Rl
@@ -18705,7 +18726,7 @@ By
iK
QB
Dt
-CR
+CV
QB
QB
QB
@@ -18857,13 +18878,13 @@ By
iK
QB
Jt
-CR
-PG
-CR
-CR
-AX
-CR
-CR
+CV
+sz
+CV
+CV
+iJ
+CV
+CV
IB
CR
CR
@@ -19163,10 +19184,10 @@ iK
kv
kv
Kh
-CR
+CV
rS
QB
-CR
+CV
rS
QB
CR
@@ -19622,7 +19643,7 @@ RG
dx
QW
ge
-ge
+Ff
ge
QB
CR
@@ -20379,9 +20400,9 @@ iK
kv
By
px
-cy
+ge
VE
-BD
+ge
Sy
Aq
QB
diff --git a/maps/shaded_hills/shaded_hills-swamp.dmm b/maps/shaded_hills/shaded_hills-swamp.dmm
index a4aa7292a65..bbd09a8b228 100644
--- a/maps/shaded_hills/shaded_hills-swamp.dmm
+++ b/maps/shaded_hills/shaded_hills-swamp.dmm
@@ -3,7 +3,7 @@
/turf/wall/log/walnut/shutter/open,
/area/shaded_hills/witch_hut)
"bg" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"cE" = (
/turf/floor/mud/water,
@@ -12,7 +12,7 @@
/obj/structure/bed/chair/wood/ebony{
dir = 8
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"fG" = (
/obj/item/seeds/extracted/aloe,
@@ -27,7 +27,7 @@
/obj/item/seeds/extracted/yarrow,
/obj/item/seeds/extracted/yarrow,
/obj/item/seeds/extracted/yarrow,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"hT" = (
/turf/floor/mud/water/deep,
@@ -55,7 +55,7 @@
/obj/structure/closet/crate/chest/ebony,
/obj/item/rock/hematite,
/obj/item/rock/flint,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"oF" = (
/turf/unsimulated/dark_filler,
@@ -65,7 +65,7 @@
/area/shaded_hills/caves/swamp)
"pl" = (
/obj/structure/drying_rack/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"rP" = (
/obj/structure/reagent_dispensers/barrel/ebony/water,
@@ -86,7 +86,7 @@
start_lit = 1
},
/obj/structure/table/end/alt/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"vZ" = (
/turf/floor/mud/water,
@@ -110,7 +110,7 @@
/obj/structure/door/walnut{
dir = 4
},
-/turf/floor/path/basalt,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"BY" = (
/obj/machinery/portable_atmospherics/hydroponics/soil,
@@ -118,7 +118,7 @@
/area/shaded_hills/outside/swamp)
"Dh" = (
/obj/item/stool/rustic,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"Do" = (
/turf/unsimulated/dark_filler,
@@ -130,19 +130,19 @@
/turf/unsimulated/mask,
/area/shaded_hills/outside/swamp)
"Hi" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/teapot,
/obj/item/chems/glass/handmade/cup/wood,
/obj/item/chems/glass/handmade/cup/wood,
/obj/item/chems/glass/bucket/wood,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"Ic" = (
/turf/floor/clay,
/area/shaded_hills/outside/river/swamp)
"KA" = (
/obj/abstract/landmark/start/shaded_hills/herbalist,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"LF" = (
/turf/wall/natural/basalt/shaded_hills,
@@ -156,7 +156,7 @@
/area/shaded_hills/outside/swamp)
"SE" = (
/obj/structure/door/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"Ty" = (
/obj/abstract/landmark/start/shaded_hills/traveller,
@@ -172,7 +172,7 @@
/obj/structure/table/desk/ebony,
/obj/item/chems/glass/mortar,
/obj/item/rock/basalt,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"Vl" = (
/obj/structure/wall_sconce/lantern{
@@ -180,7 +180,7 @@
start_lit = 1
},
/obj/structure/closet/crate/chest/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
"VA" = (
/turf/wall/brick/basalt,
@@ -198,7 +198,7 @@
/obj/structure/bed/simple/ebony,
/obj/item/bedsheet/furs,
/obj/abstract/landmark/start/shaded_hills/herbalist,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/witch_hut)
(1,1,1) = {"
diff --git a/maps/shaded_hills/shaded_hills-woods.dmm b/maps/shaded_hills/shaded_hills-woods.dmm
index 569bfe9a2d1..06a9695d634 100644
--- a/maps/shaded_hills/shaded_hills-woods.dmm
+++ b/maps/shaded_hills/shaded_hills-woods.dmm
@@ -9,7 +9,7 @@
/area/shaded_hills/outside/woods)
"cN" = (
/obj/item/bladed/knife,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"dp" = (
/turf/wall/log/walnut,
@@ -41,7 +41,7 @@
/turf/wall/natural/basalt/shaded_hills,
/area/shaded_hills/caves/river/woods)
"lb" = (
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"lC" = (
/turf/unsimulated/dark_filler,
@@ -54,7 +54,7 @@
/area/shaded_hills/outside/river/lake)
"mo" = (
/obj/structure/door/walnut,
-/turf/floor/path/basalt,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"nl" = (
/turf/wall/natural/basalt/shaded_hills,
@@ -71,16 +71,13 @@
"te" = (
/turf/floor/rock/basalt,
/area/shaded_hills/outside/woods)
-"ul" = (
-/turf/floor/mud/water,
-/area/shaded_hills/outside/river/woods)
"uA" = (
/turf/unsimulated/dark_filler,
/area/shaded_hills/outside/river/woods)
"wD" = (
/obj/item/fishing_rod,
/obj/structure/table/end/alt/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"xn" = (
/turf/unsimulated/mask,
@@ -99,7 +96,7 @@
/area/shaded_hills/caves/unexplored/woods)
"AN" = (
/obj/structure/railing/mapped/wooden/walnut,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/outside/river/woods)
"Co" = (
/obj/abstract/landmark/start/shaded_hills/traveller/learned,
@@ -112,6 +109,9 @@
"DX" = (
/turf/floor/mud/water/deep,
/area/shaded_hills/caves/river/woods)
+"En" = (
+/turf/floor/mud/water,
+/area/shaded_hills/outside/river/woods)
"ES" = (
/turf/floor/grass,
/area/shaded_hills/outside/river/woods)
@@ -124,7 +124,7 @@
"Fz" = (
/obj/structure/fire_source/stove,
/obj/item/stack/material/log/mapped/walnut/ten,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"GB" = (
/turf/floor/carpet/rustic,
@@ -139,17 +139,17 @@
/obj/structure/bed/simple/ebony,
/obj/item/bedsheet/furs,
/obj/abstract/landmark/start/shaded_hills/forester,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"JI" = (
/obj/structure/railing/mapped/wooden/walnut{
dir = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/outside/river/woods)
"JJ" = (
/obj/structure/meat_hook,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"LJ" = (
/turf/floor/path/running_bond/basalt,
@@ -159,7 +159,7 @@
/obj/item/stack/material/bundle/grass/dry{
amount = 5
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"My" = (
/turf/floor/grass,
@@ -168,24 +168,25 @@
/obj/structure/wall_sconce/lantern{
start_lit = 1
},
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"MU" = (
/turf/wall/log/walnut/shutter/open,
/area/shaded_hills/forester_hut)
"Oi" = (
/obj/structure/closet/crate/chest/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"PO" = (
+/obj/abstract/force_fluid_flow/north,
/turf/floor/mud/water/deep,
-/area/shaded_hills/outside/river/woods)
+/area/shaded_hills/outside/river/lake)
"SI" = (
/turf/wall/log/walnut,
/area/shaded_hills/forester_hut)
"TP" = (
/obj/structure/table/desk/dresser/ebony,
-/turf/floor/wood/walnut,
+/turf/floor/wood/rough/walnut,
/area/shaded_hills/forester_hut)
"Uz" = (
/obj/effect/departure_signpost/north,
@@ -199,6 +200,10 @@
/obj/abstract/landmark/start/shaded_hills/traveller,
/turf/floor/barren,
/area/shaded_hills/caves/woods)
+"Wo" = (
+/obj/abstract/force_fluid_flow/north,
+/turf/floor/mud/water/deep,
+/area/shaded_hills/outside/river/woods)
"Xt" = (
/turf/floor/mud,
/area/shaded_hills/caves/woods)
@@ -209,6 +214,9 @@
"YO" = (
/turf/unsimulated/mask,
/area/shaded_hills/outside/river/woods)
+"Zo" = (
+/turf/floor/mud/water/deep,
+/area/shaded_hills/outside/river/woods)
"Zs" = (
/obj/structure/wall_sconce/lantern{
dir = 1;
@@ -15657,11 +15665,11 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
zp
zp
zp
@@ -15806,21 +15814,21 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -15953,29 +15961,29 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
kx
kx
@@ -16103,32 +16111,32 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
dp
JI
AN
@@ -16254,34 +16262,34 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
JI
AN
zp
@@ -16405,35 +16413,35 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
JI
AN
zp
@@ -16556,39 +16564,39 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
JI
AN
-ul
+En
zp
zp
zp
@@ -16707,41 +16715,41 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
dp
JI
AN
dp
-ul
+En
zp
zp
zp
@@ -16857,44 +16865,44 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+En
+En
+En
+En
JI
AN
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
@@ -17008,45 +17016,45 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+En
JI
AN
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
@@ -17158,49 +17166,49 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
JI
AN
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
zp
zp
zp
@@ -17310,50 +17318,50 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
dp
JI
AN
dp
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
zp
zp
zp
@@ -17460,54 +17468,54 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+Zo
+En
+En
+Zo
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
JI
AN
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Zo
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -17611,57 +17619,57 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
JI
AN
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -17748,7 +17756,7 @@ ma
ma
ma
ma
-ul
+En
zp
zp
zp
@@ -17762,60 +17770,60 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
JI
AN
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Wo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -17834,9 +17842,9 @@ zp
zp
zp
zp
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
@@ -17901,9 +17909,9 @@ ma
ma
ma
ma
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
@@ -17913,63 +17921,63 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
dp
JI
AN
dp
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Wo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -17983,15 +17991,15 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18053,78 +18061,78 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
zp
zp
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
JI
AN
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18132,19 +18140,19 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18206,40 +18214,40 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18250,55 +18258,55 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
JI
AN
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
uA
@@ -18359,37 +18367,37 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18402,56 +18410,56 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
+En
+En
+En
+En
+En
+En
+Zo
+Zo
JI
AN
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
uA
uA
@@ -18512,35 +18520,35 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18555,56 +18563,56 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
dp
JI
AN
dp
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
uA
uA
uA
@@ -18664,34 +18672,34 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -18707,56 +18715,56 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
JI
AN
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
uA
uA
uA
@@ -18817,30 +18825,30 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
zp
zp
zp
@@ -18861,54 +18869,54 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
JI
AN
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
uA
uA
uA
@@ -18969,30 +18977,30 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19014,53 +19022,53 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
+En
+En
+En
+En
JI
AN
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
+En
+En
+En
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+En
+En
+En
uA
uA
uA
@@ -19112,8 +19120,8 @@ hT
hT
hT
hT
-hT
-hT
+PO
+PO
hT
hT
ma
@@ -19122,28 +19130,28 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19168,51 +19176,51 @@ zp
zp
zp
zp
-ul
+En
dp
JI
AN
dp
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+Zo
+En
+En
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
uA
uA
uA
@@ -19262,40 +19270,40 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-ma
-ma
-ma
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
PO
PO
PO
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
+hT
+hT
+hT
+ma
+ma
+ma
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19324,47 +19332,47 @@ zp
zp
JI
AN
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
uA
uA
uA
@@ -19413,24 +19421,6 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-ul
-ul
-ul
-PO
-PO
PO
PO
PO
@@ -19441,12 +19431,30 @@ PO
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
-ul
+hT
+hT
+hT
+En
+En
+En
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19477,46 +19485,46 @@ zp
JI
AN
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-ul
-ul
-ul
-PO
-PO
-PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Zo
+Zo
+En
+En
+En
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
uA
uA
uA
@@ -19564,20 +19572,6 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
PO
PO
PO
@@ -19592,12 +19586,26 @@ PO
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
-ul
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19631,44 +19639,44 @@ AN
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
+Wo
+Wo
uA
uA
uA
@@ -19716,20 +19724,6 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
PO
PO
PO
@@ -19743,13 +19737,27 @@ PO
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+PO
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19784,43 +19792,43 @@ dp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
-PO
-PO
+En
+En
+En
+En
+En
+En
+En
+Zo
+Zo
+Wo
uA
uA
uA
@@ -19868,20 +19876,6 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
PO
PO
PO
@@ -19894,13 +19888,27 @@ PO
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+PO
+PO
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Wo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19940,16 +19948,16 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -19965,14 +19973,14 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-PO
+En
+En
+En
+En
+En
+En
+En
+Zo
uA
uA
uA
@@ -20020,19 +20028,6 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
PO
PO
PO
@@ -20044,14 +20039,27 @@ PO
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+PO
+PO
+Wo
+Wo
+Zo
+Zo
+Zo
+Wo
+Wo
+Wo
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -20095,9 +20103,9 @@ zp
zp
zp
zp
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
@@ -20119,12 +20127,12 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
uA
uA
uA
@@ -20173,36 +20181,36 @@ hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
-hT
PO
PO
-ul
-ul
-ul
PO
PO
PO
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+PO
+PO
+PO
+PO
+PO
+hT
+hT
+Zo
+Zo
+En
+En
+En
+Zo
+Zo
+Zo
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -20273,10 +20281,10 @@ zp
zp
zp
zp
-ul
-ul
-ul
-ul
+En
+En
+En
+En
uA
uA
uA
@@ -20326,35 +20334,35 @@ hT
hT
hT
hT
+PO
+PO
+PO
+PO
+PO
hT
hT
hT
hT
hT
-hT
-hT
-hT
-hT
-hT
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -20427,8 +20435,8 @@ zp
zp
zp
zp
-ul
-ul
+En
+En
uA
uA
uA
@@ -20480,7 +20488,7 @@ hT
hT
hT
hT
-hT
+PO
hT
hT
ma
@@ -20488,24 +20496,24 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -20639,23 +20647,23 @@ ma
ma
ma
ma
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -20791,22 +20799,22 @@ ma
ma
ma
ma
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
-ul
+En
+En
+En
+En
+En
+En
+En
+En
+En
+En
zp
zp
zp
@@ -20942,8 +20950,8 @@ ma
ma
ma
ma
-ul
-ul
+En
+En
zp
zp
zp
@@ -20951,9 +20959,9 @@ zp
zp
zp
zp
-ul
-ul
-ul
+En
+En
+En
zp
zp
zp
@@ -21093,8 +21101,8 @@ ma
ma
ma
ma
-ul
-ul
+En
+En
zp
zp
zp
@@ -21244,7 +21252,7 @@ ma
ma
ma
ma
-ul
+En
zp
zp
zp
diff --git a/maps/shaded_hills/shaded_hills.dm b/maps/shaded_hills/shaded_hills.dm
index 139e602c13b..ae5cb32e946 100644
--- a/maps/shaded_hills/shaded_hills.dm
+++ b/maps/shaded_hills/shaded_hills.dm
@@ -1,9 +1,11 @@
#if !defined(USING_MAP_DATUM)
#include "../../mods/content/matchmaking/_matchmaking.dme"
+ #include "../../mods/content/dungeon_loot/_dungeon_loot.dme"
#include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
#include "../../mods/content/scaling_descriptors.dm"
#include "../../mods/species/drakes/_drakes.dme" // include before _fantasy.dme so overrides work
+ #include "../../mods/content/item_sharpening/_item_sharpening.dme"
#include "../../mods/content/fantasy/_fantasy.dme"
#include "areas/_areas.dm"
@@ -19,18 +21,6 @@
#include "jobs/visitors.dm"
#include "jobs/wilderness.dm"
- #include "submaps/_submaps.dm"
- #include "submaps/downlands/_downlands.dm"
- #include "submaps/grassland/_grassland.dm"
- #include "submaps/swamp/_swamp.dm"
- #include "submaps/woods/_woods.dm"
- #include "submaps/woods/bear_den/bear_den.dm"
- #include "submaps/woods/chemistry_shack/chemistry_shack.dm"
- #include "submaps/woods/fairy_rings/fairy_rings.dm"
- #include "submaps/woods/fox_den/fox_den.dm"
- #include "submaps/woods/hunter_camp/hunter_camp.dm"
- #include "submaps/woods/old_cabin/old_cabin.dm"
-
#include "levels/_levels.dm"
#include "levels/random_map.dm"
#include "levels/strata.dm"
diff --git a/maps/shaded_hills/shaded_hills_currency.dm b/maps/shaded_hills/shaded_hills_currency.dm
index f1c06d4735e..7c3efd6cbea 100644
--- a/maps/shaded_hills/shaded_hills_currency.dm
+++ b/maps/shaded_hills/shaded_hills_currency.dm
@@ -1,7 +1,7 @@
/datum/map/shaded_hills
starting_cash_choices = list(
- /decl/starting_cash_choice/none,
- /decl/starting_cash_choice/cash
+ /decl/starting_cash_choice/cash,
+ /decl/starting_cash_choice/none
)
default_currency = /decl/currency/imperial
salary_modifier = 0.05 // turn the 300-400 base into 15-20 base
diff --git a/maps/shaded_hills/shaded_hills_define.dm b/maps/shaded_hills/shaded_hills_define.dm
index bfb694d4ee6..6266ab2a09e 100644
--- a/maps/shaded_hills/shaded_hills_define.dm
+++ b/maps/shaded_hills/shaded_hills_define.dm
@@ -14,11 +14,13 @@
allowed_latejoin_spawns = list(
/decl/spawnpoint/arrivals
)
- map_tech_level = MAP_TECH_LEVEL_MEDIEVAL
- survival_box_choices = list()
- passport_type = null
- _available_backpacks = list(
- /decl/backpack_outfit/sack
+ map_tech_level = MAP_TECH_LEVEL_MEDIEVAL
+ survival_box_choices = list()
+ passport_type = null
+ _available_backpacks = list(
+ /decl/backpack_outfit/sack,
+ /decl/backpack_outfit/backpack/crafted,
+ /decl/backpack_outfit/haversack
)
lobby_tracks = list(
/decl/music_track/dhaka,
@@ -29,6 +31,7 @@
'sound/music/Miris-Magic-Dance.ogg'
)
game_year = -914 // in 2024, the year should be 1110, roughly a century after the fall of the Imperial Aegis
+ security_state = /decl/security_state/none
char_preview_bgstate_options = list(
"000",
@@ -47,3 +50,6 @@
/datum/map/shaded_hills/get_map_info()
return "You're in the [station_name] of the [system_name], nestled between the mountains and the river and bisected by the decaying Queens' Road. On all sides, you are surrounded by untamed wilds, with only a small ruined fort, rebuilt into an inn, to the east as a sign of civilisation. \
Far from the control of [boss_name], you are free to carve forward a path to survival for yourself and your comrades however you wish. Strike the earth!"
+
+/datum/map/shaded_hills/get_available_submap_archetypes()
+ return null // Return list of decl instances when relevant submaps exist.
diff --git a/maps/shaded_hills/shaded_hills_map.dm b/maps/shaded_hills/shaded_hills_map.dm
index 5e3cda3b8bc..09bf988942e 100644
--- a/maps/shaded_hills/shaded_hills_map.dm
+++ b/maps/shaded_hills/shaded_hills_map.dm
@@ -1,5 +1,5 @@
/datum/map/shaded_hills
- default_liquid_fuel_type = /decl/material/liquid/nutriment/plant_oil
+ default_liquid_fuel_type = /decl/material/liquid/oil
default_species = SPECIES_KOBALOI
loadout_categories = list(
/decl/loadout_category/fantasy/clothing,
diff --git a/maps/shaded_hills/submaps/_submaps.dm b/maps/shaded_hills/submaps/_submaps.dm
deleted file mode 100644
index 14b3948c927..00000000000
--- a/maps/shaded_hills/submaps/_submaps.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-#define MAP_TEMPLATE_CATEGORY_SH_GRASSLAND "template_sh_grassland"
-#define MAP_TEMPLATE_CATEGORY_SH_SWAMP "template_sh_swamp"
-#define MAP_TEMPLATE_CATEGORY_SH_WOODS "template_sh_woods"
-#define MAP_TEMPLATE_CATEGORY_SH_DOWNLANDS "template_sh_downlands"
-#define MAP_TEMPLATE_CATEGORY_SH_DUNGEON "template_sh_dungeon"
-#define MAP_TEMPLATE_CATEGORY_SH_CAVERNS "template_sh_caverns"
-
-/datum/map_template/shaded_hills
- abstract_type = /datum/map_template/shaded_hills
- template_parent_type = /datum/map_template/shaded_hills
- template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS
- area_usage_test_exempted_root_areas = list(
- /area/shaded_hills/outside/point_of_interest
- )
- var/cost = 1
-
-/datum/map_template/shaded_hills/get_template_cost()
- return cost
-
-/area/shaded_hills/outside/point_of_interest
- name = "Point Of Interest"
- description = null
- area_blurb_category = /area/shaded_hills/outside/point_of_interest
diff --git a/maps/shaded_hills/submaps/downlands/_downlands.dm b/maps/shaded_hills/submaps/downlands/_downlands.dm
deleted file mode 100644
index 22721f265b8..00000000000
--- a/maps/shaded_hills/submaps/downlands/_downlands.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/datum/map_template/shaded_hills/downlands
- abstract_type = /datum/map_template/shaded_hills/downlands
- template_categories = list(MAP_TEMPLATE_CATEGORY_SH_DOWNLANDS)
- template_parent_type = /datum/map_template/shaded_hills/downlands
-
-/datum/map_template/shaded_hills/dungeon
- abstract_type = /datum/map_template/shaded_hills/dungeon
- template_categories = list(MAP_TEMPLATE_CATEGORY_SH_DUNGEON)
- template_parent_type = /datum/map_template/shaded_hills/dungeon
diff --git a/maps/shaded_hills/submaps/grassland/_grassland.dm b/maps/shaded_hills/submaps/grassland/_grassland.dm
deleted file mode 100644
index 39f0722666b..00000000000
--- a/maps/shaded_hills/submaps/grassland/_grassland.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/datum/map_template/shaded_hills/grassland
- abstract_type = /datum/map_template/shaded_hills/grassland
- template_categories = list(MAP_TEMPLATE_CATEGORY_SH_GRASSLAND)
- template_parent_type = /datum/map_template/shaded_hills/grassland
-
-/datum/map_template/shaded_hills/cavern
- abstract_type = /datum/map_template/shaded_hills/cavern
- template_categories = list(MAP_TEMPLATE_CATEGORY_SH_CAVERNS)
- template_parent_type = /datum/map_template/shaded_hills/cavern
\ No newline at end of file
diff --git a/maps/shaded_hills/submaps/swamp/_swamp.dm b/maps/shaded_hills/submaps/swamp/_swamp.dm
deleted file mode 100644
index 9f4f963c1ee..00000000000
--- a/maps/shaded_hills/submaps/swamp/_swamp.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/map_template/shaded_hills/swamp
- abstract_type = /datum/map_template/shaded_hills/swamp
- template_categories = list(MAP_TEMPLATE_CATEGORY_SH_SWAMP)
- template_parent_type = /datum/map_template/shaded_hills/swamp
\ No newline at end of file
diff --git a/maps/shaded_hills/submaps/woods/_woods.dm b/maps/shaded_hills/submaps/woods/_woods.dm
deleted file mode 100644
index 0baea8f75c5..00000000000
--- a/maps/shaded_hills/submaps/woods/_woods.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/map_template/shaded_hills/woods
- abstract_type = /datum/map_template/shaded_hills/woods
- template_categories = list(MAP_TEMPLATE_CATEGORY_SH_WOODS)
- template_parent_type = /datum/map_template/shaded_hills/woods
diff --git a/maps/shaded_hills/submaps/woods/bear_den/bear_den.dm b/maps/shaded_hills/submaps/woods/bear_den/bear_den.dm
deleted file mode 100644
index ee4d7f30849..00000000000
--- a/maps/shaded_hills/submaps/woods/bear_den/bear_den.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/map_template/shaded_hills/woods/bear_den
- name = "bear den"
- mappaths = list("maps/shaded_hills/submaps/woods/bear_den/bear_den.dmm")
-
-/area/shaded_hills/outside/point_of_interest/bear_den
- name = "Point of Interest - Bear Den"
diff --git a/maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dm b/maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dm
deleted file mode 100644
index 19de9faa978..00000000000
--- a/maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/map_template/shaded_hills/woods/chemistry_shack
- name = "chemistry shack"
- mappaths = list("maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dmm")
-
-/area/shaded_hills/outside/point_of_interest/chemistry_shack
- name = "Point of Interest - Chemistry Shack"
diff --git a/maps/shaded_hills/submaps/woods/fairy_rings/fairy_rings.dm b/maps/shaded_hills/submaps/woods/fairy_rings/fairy_rings.dm
deleted file mode 100644
index 89ec23e18dc..00000000000
--- a/maps/shaded_hills/submaps/woods/fairy_rings/fairy_rings.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/datum/map_template/shaded_hills/woods/fairy_ring
- name = "fairy ring"
- mappaths = list("maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring.dmm")
- template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_ALLOW_DUPLICATES | TEMPLATE_FLAG_GENERIC_REPEATABLE
- template_categories = list(
- MAP_TEMPLATE_CATEGORY_SH_WOODS
- )
- area_coherency_test_exempt_areas = list(/area/shaded_hills/outside/point_of_interest/fairy_ring)
-
-/datum/map_template/shaded_hills/woods/fairy_ring/glowing
- name = "glowing fairy ring"
- mappaths = list("maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring_glowing.dmm")
-
-/area/shaded_hills/outside/point_of_interest/fairy_ring
- name = "Point of Interest - Fairy Ring"
diff --git a/maps/shaded_hills/submaps/woods/fox_den/fox_den.dm b/maps/shaded_hills/submaps/woods/fox_den/fox_den.dm
deleted file mode 100644
index de7b5dcfd5f..00000000000
--- a/maps/shaded_hills/submaps/woods/fox_den/fox_den.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/map_template/shaded_hills/woods/fox_den
- name = "fox den"
- mappaths = list("maps/shaded_hills/submaps/woods/fox_den/fox_den.dmm")
-
-/area/shaded_hills/outside/point_of_interest/fox_den
- name = "Point of Interest - Fox Den"
diff --git a/maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dm b/maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dm
deleted file mode 100644
index 3cf4e2edc68..00000000000
--- a/maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/map_template/shaded_hills/woods/hunter_camp
- name = "hunter camp"
- mappaths = list("maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dmm")
-
-/area/shaded_hills/outside/point_of_interest/hunter_camp
- name = "Point of Interest - Hunter Camp"
diff --git a/maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dm b/maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dm
deleted file mode 100644
index 2d56e5161b3..00000000000
--- a/maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/map_template/shaded_hills/woods/old_cabin
- name = "old cabin"
- mappaths = list("maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dmm")
-
-/area/shaded_hills/outside/point_of_interest/old_cabin
- name = "Point of Interest - Old Cabin"
diff --git a/maps/tradeship/jobs/_goals.dm b/maps/tradeship/jobs/_goals.dm
index c0c13ad937d..ac7cc4422dc 100644
--- a/maps/tradeship/jobs/_goals.dm
+++ b/maps/tradeship/jobs/_goals.dm
@@ -25,7 +25,10 @@ var/global/list/tradeship_paperwork_end_areas = list()
/datum/goal/department/paperwork/tradeship
paperwork_types = list(/obj/item/paperwork/tradeship)
- signatory_job_list = list(/datum/job/tradeship_captain, /datum/job/tradeship_first_mate)
+ signatory_job_list = list(
+ /datum/job/standard/captain/tradeship,
+ /datum/job/tradeship_first_mate
+ )
/datum/goal/department/paperwork/tradeship/get_paper_spawn_turfs()
return global.tradeship_paperwork_spawn_turfs
diff --git a/maps/tradeship/jobs/civilian.dm b/maps/tradeship/jobs/civilian.dm
index c15bb5c5a77..edb03def44a 100644
--- a/maps/tradeship/jobs/civilian.dm
+++ b/maps/tradeship/jobs/civilian.dm
@@ -1,21 +1,10 @@
-/datum/job/tradeship_deckhand
+/datum/job/standard/assistant/tradeship
title = "Deck Hand"
- total_positions = -1
- spawn_positions = -1
supervisors = "literally everyone, you bottom feeder"
outfit_type = /decl/outfit/job/tradeship/hand
alt_titles = list(
"Cook" = /decl/outfit/job/tradeship/hand/cook,
"Cargo Hand",
- "Passenger")
- department_types = list(/decl/department/civilian)
- economic_power = 1
- access = list()
- minimal_access = list()
+ "Passenger"
+ )
event_categories = list(ASSIGNMENT_GARDENER, ASSIGNMENT_JANITOR)
-
-/datum/job/tradeship_deckhand/get_access()
- if(get_config_value(/decl/config/toggle/assistant_maint))
- return list(access_maint_tunnels)
- else
- return list()
diff --git a/maps/tradeship/jobs/command.dm b/maps/tradeship/jobs/command.dm
index a6d37fe665e..3647a632760 100644
--- a/maps/tradeship/jobs/command.dm
+++ b/maps/tradeship/jobs/command.dm
@@ -1,4 +1,4 @@
-/datum/job/tradeship_captain
+/datum/job/standard/captain/tradeship
title = "Captain"
supervisors = "your profit margin, your conscience, and the Trademaster"
outfit_type = /decl/outfit/job/tradeship/captain
@@ -8,36 +8,15 @@
SKILL_SCIENCE = SKILL_ADEPT,
SKILL_PILOT = SKILL_ADEPT
)
- max_skill = list(
- SKILL_PILOT = SKILL_MAX,
- SKILL_WEAPONS = SKILL_MAX
- )
- skill_points = 30
- head_position = 1
- department_types = list(/decl/department/command)
- total_positions = 1
- spawn_positions = 1
- selection_color = "#1d1d4f"
- req_admin_notify = 1
- access = list()
- minimal_access = list()
- minimal_player_age = 14
- economic_power = 20
ideal_character_age = 70
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
forced_spawnpoint = /decl/spawnpoint/cryo/captain
-/datum/job/tradeship_captain/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
+/datum/job/standard/captain/tradeship/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
. = ..()
if(H)
H.verbs |= /mob/proc/tradehouse_rename_ship
H.verbs |= /mob/proc/tradehouse_rename_company
-/datum/job/tradeship_captain/get_access()
- return get_all_station_access()
-
/mob/proc/tradehouse_rename_ship()
set name = "Rename Tradeship"
set category = "Captain's Powers"
@@ -76,6 +55,7 @@
/datum/job/tradeship_first_mate
title = "First Mate"
supervisors = "the Captain"
+ hud_icon = 'maps/tradeship/hud.dmi'
outfit_type = /decl/outfit/job/tradeship/mate
head_position = 1
department_types = list(
diff --git a/maps/tradeship/jobs/engineering.dm b/maps/tradeship/jobs/engineering.dm
index 1586944c1bf..62a9c6659c4 100644
--- a/maps/tradeship/jobs/engineering.dm
+++ b/maps/tradeship/jobs/engineering.dm
@@ -1,126 +1,10 @@
-/datum/job/tradeship_engineer
+/datum/job/standard/engineer/tradeship
title = "Junior Engineer"
supervisors = "the Head Engineer"
outfit_type = /decl/outfit/job/tradeship/hand/engine
- department_types = list(/decl/department/engineering)
- total_positions = 8
- spawn_positions = 7
- selection_color = "#5b4d20"
- economic_power = 5
- minimal_player_age = 7
- access = list(
- access_eva,
- access_engine,
- access_engine_equip,
- access_tech_storage,
- access_maint_tunnels,
- access_external_airlocks,
- access_construction,
- access_atmospherics,
- access_emergency_storage
- )
- minimal_access = list(
- access_eva,
- access_engine,
- access_engine_equip,
- access_tech_storage,
- access_maint_tunnels,
- access_external_airlocks,
- access_construction,
- access_atmospherics,
- access_emergency_storage
- )
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_BASIC,
- SKILL_EVA = SKILL_BASIC,
- SKILL_CONSTRUCTION = SKILL_ADEPT,
- SKILL_ELECTRICAL = SKILL_BASIC,
- SKILL_ATMOS = SKILL_BASIC,
- SKILL_ENGINES = SKILL_BASIC
- )
- max_skill = list(
- SKILL_CONSTRUCTION = SKILL_MAX,
- SKILL_ELECTRICAL = SKILL_MAX,
- SKILL_ATMOS = SKILL_MAX,
- SKILL_ENGINES = SKILL_MAX
- )
- skill_points = 20
alt_titles = list()
- event_categories = list(ASSIGNMENT_ENGINEER)
-/datum/job/tradeship_engineer/head
+/datum/job/standard/chief_engineer/tradeship
title = "Head Engineer"
- head_position = 1
- department_types = list(
- /decl/department/engineering,
- /decl/department/command
- )
- total_positions = 1
- spawn_positions = 1
- selection_color = "#7f6e2c"
- req_admin_notify = 1
- economic_power = 10
- ideal_character_age = 50
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
- access = list(
- access_engine,
- access_engine_equip,
- access_tech_storage,
- access_maint_tunnels,
- access_heads,
- access_teleporter,
- access_external_airlocks,
- access_atmospherics,
- access_emergency_storage,
- access_eva,
- access_bridge,
- access_construction, access_sec_doors,
- access_ce,
- access_RC_announce,
- access_keycard_auth,
- access_tcomsat,
- access_ai_upload
- )
- minimal_access = list(
- access_engine,
- access_engine_equip,
- access_tech_storage,
- access_maint_tunnels,
- access_heads,
- access_teleporter,
- access_external_airlocks,
- access_atmospherics,
- access_emergency_storage,
- access_eva,
- access_bridge,
- access_construction,
- access_sec_doors,
- access_ce, access_RC_announce,
- access_keycard_auth,
- access_tcomsat,
- access_ai_upload
- )
- minimal_player_age = 14
- supervisors = "the Captain"
outfit_type = /decl/outfit/job/tradeship/chief_engineer
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_ADEPT,
- SKILL_EVA = SKILL_ADEPT,
- SKILL_CONSTRUCTION = SKILL_ADEPT,
- SKILL_ELECTRICAL = SKILL_ADEPT,
- SKILL_ATMOS = SKILL_ADEPT,
- SKILL_ENGINES = SKILL_EXPERT
- )
- max_skill = list(
- SKILL_CONSTRUCTION = SKILL_MAX,
- SKILL_ELECTRICAL = SKILL_MAX,
- SKILL_ATMOS = SKILL_MAX,
- SKILL_ENGINES = SKILL_MAX
- )
- skill_points = 30
alt_titles = list()
- event_categories = list(ASSIGNMENT_ENGINEER)
diff --git a/maps/tradeship/jobs/medical.dm b/maps/tradeship/jobs/medical.dm
index 55ff9ea2f1c..bedcf558453 100644
--- a/maps/tradeship/jobs/medical.dm
+++ b/maps/tradeship/jobs/medical.dm
@@ -1,9 +1,8 @@
-/datum/job/tradeship_doctor
+/datum/job/standard/doctor/tradeship
title = "Junior Doctor"
- department_types = list(/decl/department/medical)
- head_position = 0
supervisors = "the Head Doctor and the Captain"
alt_titles = list()
+ // Slightly beefier skills due to smaller crew.
skill_points = 24
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
@@ -16,11 +15,6 @@
SKILL_ANATOMY = SKILL_MAX,
SKILL_CHEMISTRY = SKILL_MAX
)
- minimal_player_age = 3
- total_positions = 5
- spawn_positions = 3
- selection_color = "#013d3b"
- economic_power = 7
access = list(
access_medical,
access_medical_equip,
@@ -39,61 +33,10 @@
outfit_type = /decl/outfit/job/tradeship/doc/junior
event_categories = list(ASSIGNMENT_MEDICAL)
-/datum/job/tradeship_doctor/head
+/datum/job/standard/cmo/tradeship
title = "Head Doctor"
- head_position = 1
- department_types = list(
- /decl/department/medical,
- /decl/department/command
- )
supervisors = "the Captain and your own ethics"
outfit_type = /decl/outfit/job/tradeship/doc
alt_titles = list("Surgeon")
- total_positions = 1
- spawn_positions = 1
+ // Slightly beefier skills due to smaller crew.
skill_points = 28
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
- selection_color = "#026865"
- req_admin_notify = 1
- economic_power = 10
- access = list(
- access_medical,
- access_medical_equip,
- access_morgue,
- access_bridge,
- access_heads,
- access_chemistry,
- access_virology,
- access_cmo,
- access_surgery,
- access_RC_announce,
- access_keycard_auth,
- access_sec_doors,
- access_psychiatrist,
- access_eva,
- access_maint_tunnels,
- access_external_airlocks
- )
- minimal_access = list(
- access_medical,
- access_medical_equip,
- access_morgue,
- access_bridge,
- access_heads,
- access_chemistry,
- access_virology,
- access_cmo,
- access_surgery,
- access_RC_announce,
- access_keycard_auth,
- access_sec_doors,
- access_psychiatrist,
- access_eva,
- access_maint_tunnels,
- access_external_airlocks
- )
- minimal_player_age = 14
- ideal_character_age = 50
- event_categories = list(ASSIGNMENT_MEDICAL)
diff --git a/maps/tradeship/jobs/science.dm b/maps/tradeship/jobs/science.dm
index 4c6e5555d8e..d941587b27d 100644
--- a/maps/tradeship/jobs/science.dm
+++ b/maps/tradeship/jobs/science.dm
@@ -1,119 +1,14 @@
-/datum/job/tradeship_researcher
+/datum/job/standard/scientist/tradeship
title = "Junior Researcher"
supervisors = "the Head Researcher and the Captain"
total_positions = 2
spawn_positions = 1
alt_titles = list()
outfit_type = /decl/outfit/job/tradeship/hand/researcher/junior
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_BASIC,
- SKILL_DEVICES = SKILL_BASIC,
- SKILL_SCIENCE = SKILL_ADEPT
- )
- max_skill = list(
- SKILL_ANATOMY = SKILL_MAX,
- SKILL_DEVICES = SKILL_MAX,
- SKILL_SCIENCE = SKILL_MAX
- )
+ // Smaller crew, more points.
skill_points = 24
- department_types = list(/decl/department/science)
- selection_color = "#633d63"
- economic_power = 7
- minimal_player_age = 7
- access = list(
- access_robotics,
- access_tox,
- access_tox_storage,
- access_research,
- access_xenobiology,
- access_xenoarch
- )
- minimal_access = list(
- access_robotics,
- access_tox,
- access_tox_storage,
- access_research,
- access_xenobiology,
- access_xenoarch
- )
- event_categories = list(ASSIGNMENT_SCIENTIST)
-/datum/job/tradeship_researcher/head
+/datum/job/standard/rd/tradeship
title = "Head Researcher"
- supervisors = "the Captain"
- spawn_positions = 1
- total_positions = 1
alt_titles = list()
outfit_type = /decl/outfit/job/tradeship/hand/researcher
- min_skill = list(
- SKILL_LITERACY = SKILL_ADEPT,
- SKILL_COMPUTER = SKILL_BASIC,
- SKILL_FINANCE = SKILL_ADEPT,
- SKILL_BOTANY = SKILL_BASIC,
- SKILL_ANATOMY = SKILL_BASIC,
- SKILL_DEVICES = SKILL_BASIC,
- SKILL_SCIENCE = SKILL_ADEPT
- )
- max_skill = list(
- SKILL_ANATOMY = SKILL_MAX,
- SKILL_DEVICES = SKILL_MAX,
- SKILL_SCIENCE = SKILL_MAX
- )
- skill_points = 30
- head_position = 1
- department_types = list(
- /decl/department/science,
- /decl/department/command
- )
- selection_color = "#ad6bad"
- req_admin_notify = 1
- economic_power = 15
- access = list(
- access_rd,
- access_bridge,
- access_tox,
- access_morgue,
- access_tox_storage,
- access_teleporter,
- access_sec_doors,
- access_heads,
- access_research,
- access_robotics,
- access_xenobiology,
- access_ai_upload,
- access_tech_storage,
- access_RC_announce,
- access_keycard_auth,
- access_tcomsat,
- access_gateway,
- access_xenoarch,
- access_network
- )
- minimal_access = list(
- access_rd,
- access_bridge,
- access_tox,
- access_morgue,
- access_tox_storage,
- access_teleporter,
- access_sec_doors,
- access_heads,
- access_research,
- access_robotics,
- access_xenobiology,
- access_ai_upload,
- access_tech_storage,
- access_RC_announce,
- access_keycard_auth,
- access_tcomsat,
- access_gateway,
- access_xenoarch,
- access_network
- )
- minimal_player_age = 14
- ideal_character_age = 50
- guestbanned = 1
- must_fill = 1
- not_random_selectable = 1
- event_categories = list(ASSIGNMENT_SCIENTIST)
diff --git a/maps/tradeship/jobs/synthetics.dm b/maps/tradeship/jobs/synthetics.dm
deleted file mode 100644
index e10101d48a2..00000000000
--- a/maps/tradeship/jobs/synthetics.dm
+++ /dev/null
@@ -1,31 +0,0 @@
-/datum/job/tradeship_robot
- title = "Robot"
- event_categories = list(ASSIGNMENT_ROBOT)
- total_positions = 1
- spawn_positions = 1
- supervisors = "your laws and the Captain"
- selection_color = "#254c25"
- minimal_player_age = 7
- account_allowed = 0
- economic_power = 0
- loadout_allowed = FALSE
- outfit_type = /decl/outfit/job/silicon/cyborg
- hud_icon = "hudblank"
- skill_points = 0
- no_skill_buffs = TRUE
- guestbanned = 1
- not_random_selectable = 1
- skip_loadout_preview = TRUE
- department_types = list(/decl/department/miscellaneous)
-
-/datum/job/tradeship_robot/handle_variant_join(var/mob/living/human/H, var/alt_title)
- if(H)
- return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title))
-
-/datum/job/tradeship_robot/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
- return !!H
-
-/datum/job/tradeship_robot/New()
- ..()
- alt_titles = SSrobots.robot_alt_titles.Copy()
- alt_titles -= title
diff --git a/maps/tradeship/outfits/_outfits.dm b/maps/tradeship/outfits/_outfits.dm
index f5764c3254d..44f0a65873a 100644
--- a/maps/tradeship/outfits/_outfits.dm
+++ b/maps/tradeship/outfits/_outfits.dm
@@ -9,7 +9,7 @@
/decl/outfit/job/tradeship/hand
name = "Tradeship - Job - Deck Hand"
-/decl/outfit/job/tradeship/hand/pre_equip(mob/living/human/H)
+/decl/outfit/job/tradeship/hand/pre_equip(mob/living/wearer)
..()
uniform = pick(list(
/obj/item/clothing/pants/mustard/overalls,
diff --git a/maps/tradeship/outfits/command.dm b/maps/tradeship/outfits/command.dm
index 46a28429118..8755b97c555 100644
--- a/maps/tradeship/outfits/command.dm
+++ b/maps/tradeship/outfits/command.dm
@@ -7,9 +7,9 @@
id_type = /obj/item/card/id/gold
l_ear = /obj/item/radio/headset/heads/captain
-/decl/outfit/job/tradeship/captain/post_equip(var/mob/living/human/H)
+/decl/outfit/job/tradeship/captain/post_equip(var/mob/living/wearer)
..()
- var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/uniform = wearer.get_equipped_item(slot_w_uniform_str)
if(uniform)
var/obj/item/clothing/shirt/hawaii/random/eyegore = new()
if(uniform.can_attach_accessory(eyegore))
diff --git a/maps/tradeship/tradeship-0.dmm b/maps/tradeship/tradeship-0.dmm
index 4ff16d85d3a..625326ea625 100644
--- a/maps/tradeship/tradeship-0.dmm
+++ b/maps/tradeship/tradeship-0.dmm
@@ -33,12 +33,12 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"ae" = (
/obj/effect/decal/cleanable/generic,
/obj/item/stool/wood,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"af" = (
/obj/structure/disposalpipe/up,
@@ -108,7 +108,7 @@
/turf/floor/tiled/steel_grid,
/area/ship/trade/loading_bay)
"ap" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -188,7 +188,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/button/access/interior{
dir = 1;
id_tag = "lower_cargo";
@@ -198,7 +198,7 @@
/area/ship/trade/loading_bay)
"ax" = (
/obj/item/stool/padded,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -322,7 +322,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/steel_grid,
/area/ship/trade/loading_bay)
"aI" = (
@@ -598,7 +598,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/loading_bay)
"bj" = (
@@ -609,7 +609,7 @@
/area/ship/trade/fore_port_underside_maint)
"bk" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/table,
/obj/item/paicard,
/turf/floor,
@@ -618,7 +618,7 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
level = 2
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/trash/mollusc_shell/clam,
/turf/floor,
/area/ship/trade/disused)
@@ -741,7 +741,7 @@
/obj/machinery/light{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/loading_bay)
"bG" = (
@@ -752,7 +752,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/vending/cola{
dir = 4
},
@@ -886,7 +886,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/loading_bay)
"bW" = (
@@ -1000,7 +1000,7 @@
dir = 8;
flickering = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -1009,10 +1009,10 @@
"dN" = (
/obj/machinery/portable_atmospherics/hydroponics/soil,
/obj/item/tool/hoe/mini,
-/turf/floor,
+/turf/floor/plating/dirt,
/area/ship/trade/aft_port_underside_maint)
"en" = (
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"eu" = (
/obj/structure/window/basic,
@@ -1061,7 +1061,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/hygiene/drain,
/turf/floor/tiled,
/area/ship/trade/loading_bay)
@@ -1074,8 +1074,8 @@
/area/ship/trade/disused)
"hc" = (
/obj/item/radio,
-/obj/structure/table/woodentable/walnut,
-/turf/floor/wood/walnut,
+/obj/structure/table/laminate/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"hf" = (
/obj/structure/lattice,
@@ -1083,7 +1083,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"hg" = (
/obj/machinery/door/airlock/hatch/autoname/general,
@@ -1101,7 +1101,7 @@
/turf/floor,
/area/ship/trade/loading_bay)
"iy" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -1122,7 +1122,7 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"jk" = (
/obj/item/mollusc/barnacle{
@@ -1156,7 +1156,7 @@
/area/ship/trade/loading_bay)
"lg" = (
/obj/item/stool/bar/padded,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -1179,10 +1179,10 @@
icon_state = "4-8"
},
/obj/machinery/portable_atmospherics/hydroponics/soil,
-/turf/floor,
+/turf/floor/plating/dirt,
/area/ship/trade/aft_port_underside_maint)
"lv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/bluegrid,
/area/ship/trade/undercomms)
"lA" = (
@@ -1197,6 +1197,10 @@
/obj/item/stack/cable_coil/random/three,
/turf/floor,
/area/ship/trade/loading_bay)
+"lG" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"ne" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -1227,11 +1231,11 @@
/area/ship/trade/fore_port_underside_maint)
"oo" = (
/obj/machinery/portable_atmospherics/hydroponics/soil,
-/turf/floor,
+/turf/floor/plating/dirt,
/area/ship/trade/aft_starboard_underside_maint)
"or" = (
/obj/machinery/portable_atmospherics/hydroponics/soil,
-/turf/floor,
+/turf/floor/plating/dirt,
/area/ship/trade/aft_port_underside_maint)
"os" = (
/obj/structure/lattice,
@@ -1248,7 +1252,7 @@
/obj/machinery/light{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/disused)
"oO" = (
@@ -1280,7 +1284,7 @@
/turf/floor,
/area/ship/trade/loading_bay)
"pi" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/loading_bay)
"pG" = (
@@ -1301,7 +1305,7 @@
/turf/floor/plating,
/area/ship/trade/loading_bay)
"qt" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/disused)
"qK" = (
@@ -1319,7 +1323,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/backpack/dufflebag,
/obj/item/chems/glass/rag,
/obj/item/chems/glass/bucket,
@@ -1479,7 +1483,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor,
+/turf/floor/plating/dirt,
/area/ship/trade/aft_port_underside_maint)
"xP" = (
/obj/structure/disposalpipe/segment{
@@ -1530,7 +1534,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-8"
},
@@ -1637,7 +1641,7 @@
/turf/floor/tiled/steel_grid,
/area/ship/trade/loading_bay)
"DT" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -1651,7 +1655,7 @@
dir = 4
},
/obj/effect/decal/cleanable/generic,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/disused)
"Ff" = (
@@ -1659,7 +1663,7 @@
/turf/floor/carpet/red,
/area/ship/trade/disused)
"Ft" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -1669,7 +1673,7 @@
/turf/floor,
/area/ship/trade/undercomms)
"Fy" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/loot_pile/maint/trash,
/turf/floor/tiled,
/area/ship/trade/disused)
@@ -1751,7 +1755,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/disused)
"Iv" = (
@@ -1773,7 +1777,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"II" = (
/obj/structure/stairs/long/west,
@@ -1861,7 +1865,7 @@
/obj/structure/bed,
/obj/item/bedsheet/rainbow,
/obj/structure/curtain/open/bed,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"LH" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -2017,9 +2021,9 @@
/turf/floor,
/area/ship/trade/aft_starboard_underside_maint)
"Qh" = (
-/obj/structure/table/woodentable/mahogany,
+/obj/structure/table/laminate/mahogany,
/obj/item/cell/crap/empty,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"Qv" = (
/obj/effect/floor_decal/industrial/warning{
@@ -2030,7 +2034,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24
@@ -2049,12 +2053,12 @@
/obj/machinery/light{
dir = 4
},
-/turf/floor,
+/turf/floor/plating/dirt,
/area/ship/trade/aft_starboard_underside_maint)
"QW" = (
/obj/item/stack/tile/floor/five,
/obj/item/crowbar/red,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stool/padded,
/turf/floor,
/area/ship/trade/disused)
@@ -2094,7 +2098,7 @@
/obj/item/radio/intercom{
pixel_y = 20
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/loot_pile/maint/junk,
/turf/floor,
/area/ship/trade/disused)
@@ -2121,7 +2125,7 @@
/area/ship/trade/loading_bay)
"VT" = (
/obj/machinery/hologram/holopad/longrange,
-/turf/floor/wood/walnut,
+/turf/floor/laminate/walnut,
/area/ship/trade/disused)
"Xe" = (
/turf/wall,
@@ -3507,7 +3511,7 @@ aa
aa
aa
aa
-aa
+lG
aa
aa
aa
@@ -7360,7 +7364,7 @@ aa
aa
aa
aa
-aa
+lG
aa
aa
aa
diff --git a/maps/tradeship/tradeship-1.dmm b/maps/tradeship/tradeship-1.dmm
index e72c0805f17..fd28e95fb89 100644
--- a/maps/tradeship/tradeship-1.dmm
+++ b/maps/tradeship/tradeship-1.dmm
@@ -292,7 +292,7 @@
/turf/floor/plating,
/area/ship/trade/cargo/lower)
"aH" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/portables_connector{
dir = 8
},
@@ -486,7 +486,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ship/trade/maintenance/lower)
"bd" = (
@@ -655,7 +655,7 @@
/obj/structure/cable{
icon_state = "6-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/cargo/lower)
"bw" = (
@@ -739,7 +739,7 @@
/turf/floor/tiled,
/area/ship/trade/maintenance/lower)
"bJ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/alarm{
dir = 4;
pixel_x = -24
@@ -828,7 +828,7 @@
/area/ship/trade/cargo/lower)
"bV" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/portable_atmospherics/powered/scrubber,
/turf/floor/tiled/steel_grid,
/area/ship/trade/cargo/lower)
@@ -1024,7 +1024,7 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/steel_grid,
/area/ship/trade/cargo/lower)
"cC" = (
@@ -1144,7 +1144,7 @@
dir = 8;
icon_state = "bulb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/railing/mapped{
dir = 4
},
@@ -1337,11 +1337,11 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/steel_grid,
/area/ship/trade/cargo/lower)
"du" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/cargo/lower)
"dv" = (
@@ -1357,7 +1357,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning/corner{
dir = 1;
icon_state = "warningcorner"
@@ -1400,14 +1400,14 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/ship/trade/drunk_tank)
"dB" = (
/obj/structure/table,
/obj/random/plushie,
/obj/item/synthesized_instrument/violin,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/ship/trade/drunk_tank)
"dD" = (
@@ -1608,7 +1608,7 @@
icon_state = "bulb1"
},
/obj/structure/ladder,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/sign/deck/second{
pixel_y = 32
},
@@ -1619,7 +1619,7 @@
dir = 8;
pixel_x = 22
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/firealarm{
pixel_y = 24
},
@@ -1638,7 +1638,7 @@
/turf/floor/plating,
/area/ship/trade/maintenance/eva)
"ep" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light{
dir = 1;
icon_state = "bulb1"
@@ -1687,7 +1687,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/techstorage)
"ew" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -1714,7 +1714,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/techstorage)
"ez" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -1751,7 +1751,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/eva)
"eD" = (
@@ -1763,6 +1763,10 @@
},
/turf/floor/plating,
/area/ship/trade/maintenance/eva)
+"eH" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"eJ" = (
/obj/machinery/vending/materials{
dir = 4
@@ -1776,7 +1780,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/techstorage)
"eQ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/light_switch{
pixel_x = 24;
@@ -1795,14 +1799,14 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/ship/trade/maintenance/eva)
"eS" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/eva)
"eV" = (
@@ -1849,7 +1853,7 @@
/turf/floor/plating,
/area/ship/trade/maintenance/storage)
"fa" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/ship/trade/drunk_tank)
"fb" = (
@@ -1981,7 +1985,7 @@
/turf/floor,
/area/ship/trade/science/fabricaton)
"hI" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning{
dir = 1;
icon_state = "warning"
@@ -2151,7 +2155,7 @@
/obj/machinery/conveyor_switch{
id_tag = "con"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/floor/tiled,
/area/ship/trade/cargo/lower)
@@ -2340,7 +2344,7 @@
/turf/wall/r_wall/hull,
/area/ship/trade/maintenance/techstorage)
"rB" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/iron,
/obj/item/stack/material/ore/coal{
pixel_x = 3;
@@ -2443,7 +2447,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/techstorage)
"un" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/fabricator/industrial,
/obj/item/stack/material/ingot/mapped/osmium/ten,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -2562,7 +2566,7 @@
},
/obj/item/bedsheet/mime,
/obj/effect/decal/cleanable/cobweb2,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/dark,
/area/ship/trade/drunk_tank)
"xa" = (
@@ -2672,7 +2676,7 @@
/turf/floor/tiled/dark,
/area/ship/trade/crew/dorms1)
"Bq" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/beige{
dir = 5
},
@@ -2737,7 +2741,7 @@
dir = 4;
level = 2
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/cargo/lower)
"DQ" = (
@@ -2864,7 +2868,7 @@
/area/ship/trade/science/fabricaton)
"IU" = (
/obj/structure/window/reinforced,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/beige{
dir = 5
},
@@ -2948,7 +2952,7 @@
/turf/floor/lino,
/area/ship/trade/crew/dorms2)
"Lx" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stool/padded,
/turf/floor/tiled,
/area/ship/trade/cargo/lower)
@@ -2968,7 +2972,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/techstorage)
"LN" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/beige{
dir = 5
},
@@ -2991,7 +2995,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/maintenance/lower)
"Mx" = (
@@ -2999,7 +3003,7 @@
/turf/wall,
/area/ship/trade/escape_port)
"Nb" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/radio/intercom{
pixel_y = 20
},
@@ -3161,7 +3165,7 @@
dir = 1;
pixel_y = -21
},
-/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/vomit/mapped,
/obj/structure/hygiene/toilet{
dir = 1
},
@@ -3279,7 +3283,7 @@
/obj/item/stack/tape_roll/duct_tape,
/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty,
/obj/item/stack/material/ingot/mapped/copper/fifty,
-/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/mapped/steel/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
/obj/item/stack/material/panel/mapped/plastic/fifty,
/obj/item/stack/material/sheet/mapped/steel/fifty,
@@ -3376,7 +3380,7 @@
/turf/floor/tiled/white,
/area/ship/trade/science/fabricaton)
"Zv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/alarm{
dir = 4;
@@ -4589,7 +4593,7 @@ aa
aa
aa
aa
-aa
+eH
aa
aa
aa
@@ -8689,7 +8693,7 @@ aa
aa
aa
aa
-aa
+eH
aa
aa
aa
diff --git a/maps/tradeship/tradeship-2.dmm b/maps/tradeship/tradeship-2.dmm
index 5861bc931e5..0084e4d8d71 100644
--- a/maps/tradeship/tradeship-2.dmm
+++ b/maps/tradeship/tradeship-2.dmm
@@ -58,14 +58,14 @@
"af" = (
/obj/item/paper_bin,
/obj/item/pen,
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/light_switch{
pixel_y = 25
},
/obj/random/action_figure,
/obj/random_multi/single_item/captains_spare_id,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/captain)
"ag" = (
/obj/item/bedsheet/captain,
@@ -76,7 +76,7 @@
dir = 8;
pixel_x = 21
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/captain)
"ah" = (
/obj/item/radio/intercom{
@@ -275,7 +275,7 @@
/turf/floor/tiled/white,
/area/ship/trade/crew/medbay/chemistry)
"aB" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/closet/emcloset,
/obj/random/voidsuit,
/obj/random/voidhelmet,
@@ -404,7 +404,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/fmate)
"aR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -528,7 +528,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -645,7 +645,7 @@
/turf/wall/r_wall,
/area/ship/trade/dock)
"bn" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/alarm{
dir = 4;
pixel_x = -21
@@ -676,7 +676,7 @@
/turf/floor/plating,
/area/ship/trade/shuttle/outgoing/general)
"br" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/emergency_dispenser/north,
/turf/floor/tiled/monotile,
/area/ship/trade/dock)
@@ -733,7 +733,7 @@
"bv" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -820,7 +820,7 @@
/turf/floor/plating,
/area/ship/trade/dock)
"bB" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/sign/warning/vacuum{
dir = 4;
pixel_x = -34
@@ -828,7 +828,7 @@
/turf/floor/tiled/monotile,
/area/ship/trade/dock)
"bC" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -990,7 +990,7 @@
/turf/floor/tiled/monotile,
/area/ship/trade/dock)
"bO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/steeldecal/steel_decals6,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8;
@@ -1282,7 +1282,7 @@
/obj/machinery/recharger,
/obj/structure/sign/poster{
pixel_x = 32;
- dir = 8
+ dir = 4
},
/obj/item/plate/tray,
/obj/item/circular_saw,
@@ -1340,7 +1340,7 @@
dir = 8;
icon_state = "twindow"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/start{
name = "Deck Hand"
},
@@ -1647,7 +1647,7 @@
dir = 8;
icon_state = "twindow"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random_multi/single_item/captains_spare_id,
/turf/floor/tiled/freezer,
/area/ship/trade/crew/toilets)
@@ -1664,7 +1664,7 @@
icon_state = "twindow"
},
/obj/structure/window/reinforced/tinted,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable,
/obj/machinery/power/apc{
dir = 4;
@@ -1681,7 +1681,7 @@
/turf/floor/tiled/freezer,
/area/ship/trade/crew/toilets)
"dO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/disposalpipe/segment{
dir = 4;
icon_state = "conpipe-c"
@@ -1700,7 +1700,7 @@
/turf/wall,
/area/ship/trade/crew/saloon)
"dQ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/beige{
dir = 9
},
@@ -1730,7 +1730,7 @@
/turf/floor/tiled,
/area/ship/trade/crew/saloon)
"dV" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
@@ -1869,7 +1869,7 @@
/area/ship/trade/crew/kitchen)
"ez" = (
/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/ship/trade/crew/kitchen)
"eA" = (
@@ -1920,7 +1920,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/cargo)
"eF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-8"
},
@@ -1933,7 +1933,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/cargo)
"eH" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light{
dir = 4;
icon_state = "bulb1"
@@ -2002,10 +2002,19 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/item/chems/glass/beaker{
+ pixel_x = 5
+ },
+/obj/item/chems/condiment/small/peppermill{
+ pixel_x = 3
+ },
+/obj/item/chems/condiment/enzyme,
+/obj/item/chems/glass/rag,
+/obj/item/chems/cooking_vessel/pot,
/turf/floor/tiled,
/area/ship/trade/crew/kitchen)
"eQ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
@@ -2223,7 +2232,7 @@
/turf/floor/tiled/white,
/area/ship/trade/crew/medbay)
"fp" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/catwalk,
/turf/open,
/area/ship/trade/cargo)
@@ -2499,7 +2508,7 @@
/obj/structure/cable{
icon_state = "6-8"
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"ge" = (
/obj/machinery/light_switch{
@@ -2516,7 +2525,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"gg" = (
/obj/effect/paint/brown,
@@ -2624,7 +2633,7 @@
/area/ship/trade/cargo)
"gt" = (
/obj/structure/emergency_dispenser/west,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
@@ -2642,7 +2651,7 @@
dir = 4;
pixel_x = -21
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"gw" = (
/obj/effect/decal/cleanable/generic,
@@ -2657,14 +2666,14 @@
level = 2
},
/obj/item/synthesized_instrument/trumpet,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"gx" = (
/obj/item/radio/intercom{
dir = 8;
pixel_x = 22
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"gz" = (
/obj/structure/lattice,
@@ -2716,7 +2725,7 @@
pixel_x = 32;
dir = 4
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"gL" = (
/obj/structure/disposalpipe/segment,
@@ -2817,7 +2826,7 @@
/turf/floor/tiled,
/area/ship/trade/garden)
"hi" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "1-8"
},
@@ -2904,7 +2913,7 @@
/turf/floor/plating,
/area/ship/trade/crew/hallway/starboard)
"ht" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -3187,7 +3196,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/engineering)
"hV" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/light_switch{
pixel_y = 25
},
@@ -3345,7 +3354,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/engineering)
"ij" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -3365,7 +3374,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stool/padded,
/obj/structure/cable{
icon_state = "1-8"
@@ -3387,7 +3396,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -3532,7 +3541,7 @@
/turf/floor/tiled/techfloor,
/area/ship/trade/maintenance/engineering)
"iz" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/corner/yellow{
dir = 10
},
@@ -3654,7 +3663,7 @@
/area/ship/trade/maintenance/atmos)
"iN" = (
/obj/machinery/light,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techmaint,
/area/ship/trade/maintenance/hallway)
"iQ" = (
@@ -4684,14 +4693,8 @@
"nH" = (
/obj/structure/table,
/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/chems/glass/beaker{
- pixel_x = 5
- },
-/obj/item/chems/condiment/small/peppermill{
- pixel_x = 3
- },
-/obj/item/chems/condiment/enzyme,
-/obj/item/chems/glass/rag,
+/obj/machinery/reagent_temperature,
+/obj/item/chems/cooking_vessel/skillet,
/turf/floor/tiled,
/area/ship/trade/crew/kitchen)
"nR" = (
@@ -4863,8 +4866,8 @@
/turf/floor/plating,
/area/ship/trade/shieldbay)
"pT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/radio/intercom{
pixel_y = 20
},
@@ -4973,7 +4976,7 @@
/turf/floor/plating,
/area/ship/trade/shuttle/rescue)
"qO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/computer/modular/preset/merchant/tradeship,
/obj/machinery/light_switch{
@@ -5078,7 +5081,7 @@
/area/ship/trade/shuttle/outgoing/general)
"rR" = (
/obj/item/flashlight,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"rT" = (
/obj/machinery/computer/modular/preset/engineering,
@@ -5412,6 +5415,10 @@
},
/turf/floor/plating/airless,
/area/ship/trade/maintenance/engine/aft)
+"vN" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"vP" = (
/obj/machinery/light{
dir = 8;
@@ -5425,7 +5432,7 @@
/obj/item/boombox,
/obj/item/stack/tape_roll/barricade_tape/bureaucracy,
/obj/machinery/keycard_auth,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/captain)
"vS" = (
/turf/floor/tiled/freezer,
@@ -5903,7 +5910,7 @@
pixel_y = -2;
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/fmate)
"Cb" = (
/obj/machinery/atmospherics/pipe/simple/visible/green{
@@ -6060,7 +6067,7 @@
},
/obj/structure/cable,
/obj/machinery/icecream_vat,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"Dq" = (
/obj/effect/paint/brown,
@@ -6185,7 +6192,7 @@
/obj/item/briefcase/crimekit,
/obj/item/taperecorder,
/obj/item/camera,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/fmate)
"Ec" = (
/obj/structure/closet/crate,
@@ -6414,7 +6421,7 @@
pixel_x = 30;
pixel_y = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techmaint,
/area/ship/trade/maintenance/hallway)
"GO" = (
@@ -6475,7 +6482,7 @@
/area/ship/trade/crew/hallway/port)
"Hs" = (
/obj/machinery/light,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"HA" = (
/obj/structure/cable{
@@ -6638,7 +6645,7 @@
/obj/abstract/landmark/start{
name = "First Mate"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/fmate)
"Jn" = (
/obj/effect/floor_decal/corner/beige{
@@ -6659,7 +6666,7 @@
/area/ship/trade/crew/saloon)
"Jp" = (
/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/meat_hook,
/obj/machinery/newscaster{
pixel_y = -32;
@@ -7077,7 +7084,7 @@
dir = 4
},
/obj/structure/bookcase/skill_books/random,
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"NM" = (
/obj/effect/floor_decal/corner/beige{
@@ -7125,7 +7132,7 @@
/obj/item/clothing/shoes/color/brown,
/obj/random/plushie,
/mob/living/simple_animal/corgi/Ian,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/fmate)
"Oc" = (
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -7135,7 +7142,7 @@
/obj/machinery/network/relay{
initial_network_id = "tradenet"
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"Og" = (
/obj/structure/cable{
@@ -7277,7 +7284,7 @@
/turf/floor/bluegrid,
/area/ship/trade/command/bridge)
"Qc" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
@@ -7359,11 +7366,11 @@
dir = 1;
pixel_y = -24
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techmaint,
/area/ship/trade/maintenance/hallway)
"Rb" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/structure/cable{
icon_state = "0-8"
},
@@ -7388,7 +7395,7 @@
dir = 8;
pixel_x = -21
},
-/turf/floor/wood/yew,
+/turf/floor/laminate/yew,
/area/ship/trade/unused)
"Rg" = (
/obj/structure/railing/mapped{
@@ -7420,7 +7427,7 @@
/turf/floor/carpet/blue,
/area/ship/trade/command/captain)
"Rv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/start{
name = "Cargo Technician"
},
@@ -7699,7 +7706,7 @@
/turf/wall/titanium,
/area/ship/trade/shuttle/outgoing/general)
"UV" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/ship/trade/dock)
"UY" = (
@@ -7742,7 +7749,7 @@
/area/ship/trade/garden)
"Vd" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/fmate)
"Vl" = (
/obj/structure/handrail{
@@ -7847,7 +7854,7 @@
dir = 8;
pixel_x = 24
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/ship/trade/command/captain)
"WE" = (
/obj/machinery/door/firedoor,
@@ -7918,7 +7925,7 @@
/turf/floor/tiled,
/area/ship/trade/shuttle/outgoing/general)
"Xz" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/techmaint,
/area/ship/trade/maintenance/hallway)
"XG" = (
@@ -7951,7 +7958,7 @@
/turf/floor/plating,
/area/ship/trade/maintenance/engine/aft)
"Ya" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/warning,
/obj/structure/catwalk,
/obj/structure/railing/mapped,
@@ -9045,7 +9052,7 @@ aa
aa
aa
aa
-aa
+vN
aa
aa
aa
@@ -9259,7 +9266,7 @@ aa
aa
aa
aa
-aa
+vN
aa
aa
aa
@@ -13196,7 +13203,7 @@ aa
aa
aa
aa
-aa
+vN
aa
aa
aa
@@ -13639,7 +13646,7 @@ aa
aa
aa
aa
-aa
+vN
aa
aa
aa
diff --git a/maps/tradeship/tradeship-3.dmm b/maps/tradeship/tradeship-3.dmm
index eba7b7f15ab..bc596cfeecd 100644
--- a/maps/tradeship/tradeship-3.dmm
+++ b/maps/tradeship/tradeship-3.dmm
@@ -870,7 +870,7 @@
/turf/floor/tiled/techfloor/grid,
/area/ship/trade/comms)
"yM" = (
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/floor/plating,
/area/ship/trade/bridge_unused)
@@ -1181,6 +1181,10 @@
/obj/machinery/commsrelay,
/turf/floor/bluegrid,
/area/ship/trade/comms)
+"UX" = (
+/obj/effect/shuttle_landmark/automatic,
+/turf/space,
+/area/space)
"UY" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -2382,7 +2386,7 @@ aa
aa
aa
aa
-aa
+UX
aa
aa
aa
@@ -6665,7 +6669,7 @@ aa
aa
aa
aa
-aa
+UX
aa
aa
aa
diff --git a/maps/tradeship/tradeship.dm b/maps/tradeship/tradeship.dm
index 4a39fccb330..d747204cc30 100644
--- a/maps/tradeship/tradeship.dm
+++ b/maps/tradeship/tradeship.dm
@@ -4,42 +4,43 @@
#include "../../code/unit_tests/offset_tests.dm"
#endif
- #include "../../mods/gamemodes/cult/_cult.dme"
- #include "../../mods/gamemodes/heist/_heist.dme"
- #include "../../mods/gamemodes/ninja/_ninja.dme"
- #include "../../mods/gamemodes/revolution/_revolution.dme"
- #include "../../mods/gamemodes/traitor/_traitor.dme"
- #include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
- #include "../../mods/gamemodes/mixed/_mixed.dme"
+ #include "../../mods/content/tabloids/_tabloids.dme"
#include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm"
#include "../../mods/content/government/away_sites/icarus/icarus.dm"
#include "../../mods/content/corporate/away_sites/lar_maria/lar_maria.dm"
- #include "../../mods/content/dungeon_loot/_dungeon_loot.dme"
#include "../../mods/content/mundane.dm"
#include "../../mods/content/baychems/_baychems.dme"
+
#include "../../mods/content/bigpharma/_bigpharma.dme"
#include "../../mods/content/corporate/_corporate.dme"
+ #include "../../mods/content/dungeon_loot/_dungeon_loot.dme"
#include "../../mods/content/government/_government.dme"
+ #include "../../mods/content/matchmaking/_matchmaking.dme"
#include "../../mods/content/modern_earth/_modern_earth.dme"
#include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
- #include "../../mods/content/scaling_descriptors.dm"
- #include "../../mods/content/xenobiology/_xenobiology.dme"
- #include "../../mods/content/matchmaking/_matchmaking.dme"
#include "../../mods/content/pheromones/_pheromones.dme"
+ #include "../../mods/content/psionics/_psionics.dme"
+ #include "../../mods/content/standard_jobs/_standard_jobs.dme"
+ #include "../../mods/content/supermatter/_supermatter.dme"
+ #include "../../mods/content/xenobiology/_xenobiology.dme"
- #include "../../mods/mobs/dionaea/_dionaea.dme"
- #include "../../mods/mobs/borers/_borers.dme"
+ #include "../../mods/gamemodes/cult/_cult.dme"
+ #include "../../mods/gamemodes/heist/_heist.dme"
+ #include "../../mods/gamemodes/ninja/_ninja.dme"
+ #include "../../mods/gamemodes/revolution/_revolution.dme"
+ #include "../../mods/gamemodes/spyvspy/_spyvspy.dme"
+ #include "../../mods/gamemodes/traitor/_traitor.dme"
+ #include "../../mods/gamemodes/mixed.dm"
- // Must come after borers for compatibility.
- #include "../../mods/content/psionics/_psionics.dme"
+ #include "../../mods/mobs/borers/_borers.dme"
+ #include "../../mods/mobs/dionaea/_dionaea.dme"
+ #include "../../mods/species/bayliens/_bayliens.dme"
#include "../../mods/species/drakes/_drakes.dme"
// #include "../../mods/species/utility_frames/_utility_frames.dme"
- #include "../../mods/species/neoavians/_neoavians.dme"
- #include "../../mods/species/bayliens/_bayliens.dme"
#include "../../mods/species/vox/_vox.dme"
#include "../../mods/content/polaris/_polaris.dme"
@@ -53,14 +54,12 @@
#include "../away/mining/mining.dm"
#include "../away/mobius_rift/mobius_rift.dm"
#include "../away/smugglers/smugglers.dm"
- #include "../away/slavers/slavers_base.dm"
#include "../away/unishi/unishi.dm"
#include "../away/yacht/yacht.dm"
#include "../away/liberia/liberia.dm"
#include "tradeship_antagonists.dm"
#include "tradeship_areas.dm"
- #include "tradeship_departments.dm"
#include "tradeship_documents.dm"
#include "tradeship_jobs.dm"
#include "tradeship_loadouts.dm"
@@ -80,7 +79,6 @@
#include "jobs/engineering.dm"
#include "jobs/medical.dm"
#include "jobs/science.dm"
- #include "jobs/synthetics.dm"
#include "outfits/_outfits.dm"
#include "outfits/command.dm"
diff --git a/maps/tradeship/tradeship_jobs.dm b/maps/tradeship/tradeship_jobs.dm
index 37acc966563..71ba7143cc3 100644
--- a/maps/tradeship/tradeship_jobs.dm
+++ b/maps/tradeship/tradeship_jobs.dm
@@ -1,19 +1,18 @@
/datum/map/tradeship
- default_job_type = /datum/job/tradeship_deckhand
+ default_job_type = /datum/job/standard/assistant/tradeship
default_department_type = /decl/department/civilian
default_law_type = /datum/ai_laws/corporate
- id_hud_icons = 'maps/tradeship/hud.dmi'
allowed_jobs = list(
- /datum/job/tradeship_deckhand,
- /datum/job/tradeship_captain,
+ /datum/job/standard/assistant/tradeship,
+ /datum/job/standard/captain/tradeship,
/datum/job/tradeship_first_mate,
- /datum/job/tradeship_doctor/head,
- /datum/job/tradeship_doctor,
- /datum/job/tradeship_engineer/head,
- /datum/job/tradeship_engineer,
- /datum/job/tradeship_researcher/head,
- /datum/job/tradeship_researcher,
- /datum/job/tradeship_robot
+ /datum/job/standard/cmo/tradeship,
+ /datum/job/standard/doctor/tradeship,
+ /datum/job/standard/chief_engineer/tradeship,
+ /datum/job/standard/engineer/tradeship,
+ /datum/job/standard/rd/tradeship,
+ /datum/job/standard/scientist/tradeship,
+ /datum/job/standard/robot
)
/obj/machinery/suit_cycler/tradeship
@@ -39,4 +38,4 @@
/obj/item/clothing/head/helmet/space/void/excavation,
/obj/item/clothing/head/helmet/space/void/engineering/salvage
))
- . = ..()
\ No newline at end of file
+ . = ..()
diff --git a/maps/tradeship/tradeship_spawnpoints.dm b/maps/tradeship/tradeship_spawnpoints.dm
index 054216b46fe..36e4d8acdb7 100644
--- a/maps/tradeship/tradeship_spawnpoints.dm
+++ b/maps/tradeship/tradeship_spawnpoints.dm
@@ -9,7 +9,7 @@
/decl/spawnpoint/cryo
name = "Port Cryogenic Storage"
spawn_announcement = "has completed revival in the port cryogenics bay"
- disallow_job = list(/datum/job/tradeship_robot)
+ disallow_job = list(/datum/job/standard/robot)
/decl/spawnpoint/cryo/two
name = "Starboard Cryogenic Storage"
@@ -22,7 +22,7 @@
/decl/spawnpoint/cryo/captain
name = "Captain Compartment"
spawn_announcement = "has completed revival in the captain compartment"
- restrict_job = list(/datum/job/tradeship_captain)
+ restrict_job = list(/datum/job/standard/captain/tradeship)
uid = "spawn_cryo_captain"
/obj/abstract/landmark/latejoin/cryo_captain
diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm
index 2db88925f64..ee1696d6e61 100644
--- a/maps/~mapsystem/maps.dm
+++ b/maps/~mapsystem/maps.dm
@@ -1,21 +1,30 @@
-var/global/datum/map/using_map = new USING_MAP_DATUM
-var/global/list/all_maps = list()
+var/global/datum/map/using_map = new USING_MAP_DATUM
+var/global/list/all_maps = list()
+var/global/list/votable_maps = list()
var/global/const/MAP_HAS_BRANCH = 1 //Branch system for occupations, togglable
-var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
-
-/hook/startup/proc/initialise_map_list()
- for(var/type in subtypesof(/datum/map))
- var/datum/map/M
- if(type == global.using_map.type)
- M = global.using_map
- M.setup_map()
- else
- M = new type
- if(!M.path)
- log_error("Map '[M]' ([type]) does not have a defined path, not adding to map list!")
+var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
+
+/proc/initialise_map_list()
+ for(var/map_type in subtypesof(/datum/map))
+
+ var/datum/map/map_instance = map_type
+ if(TYPE_IS_ABSTRACT(map_instance))
+ continue
+
+ if(map_type == global.using_map.type)
+ map_instance = global.using_map
+ map_instance.setup_map()
+ else if(map_instance::path)
+ map_instance = new map_instance
else
- global.all_maps[M.path] = M
+ log_error("Map '[map_type]' does not have a defined path, not adding to map list!")
+ continue
+
+ global.all_maps[map_instance.path] = map_instance
+ if(map_instance.votable)
+ global.votable_maps[map_instance.path] = map_instance
+
return 1
/datum/map
@@ -104,7 +113,9 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
var/default_law_type = /datum/ai_laws/asimov // The default lawset use by synth units, if not overriden by their laws var.
var/security_state = /decl/security_state/default // The default security state system to use.
- var/id_hud_icons = 'icons/mob/hud.dmi' // Used by the ID HUD (primarily sechud) overlay.
+ var/hud_icons = 'icons/screen/hud.dmi' // Used by the ID HUD (primarily sechud) overlay.
+ var/implant_hud_icons = 'icons/screen/hud_implants.dmi'
+ var/med_hud_icons = 'icons/screen/hud_med.dmi'
var/num_exoplanets = 0
var/force_exoplanet_type // Used to override exoplanet weighting and always pick the same exoplanet.
@@ -127,6 +138,9 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
var/default_species = SPECIES_HUMAN
+ // Can this map be voted for by players?
+ var/votable = TRUE
+
var/list/available_background_info = list(
/decl/background_category/homeworld = list(/decl/background_detail/location/other),
/decl/background_category/faction = list(/decl/background_detail/faction/other),
@@ -188,6 +202,12 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
)
+ var/default_ui_style
+
+/datum/map/New()
+ ..()
+ default_ui_style ||= DEFAULT_UI_STYLE
+
/datum/map/proc/get_background_categories()
if(!background_categories_generated)
if(isnull(_background_categories))
@@ -262,10 +282,9 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
if(!allowed_jobs)
allowed_jobs = list()
- for(var/jtype in subtypesof(/datum/job))
- var/datum/job/job = jtype
- if(initial(job.available_by_default))
- allowed_jobs += jtype
+ for(var/datum/job/job as anything in subtypesof(/datum/job))
+ if(!TYPE_IS_ABSTRACT(job) && job::available_by_default)
+ allowed_jobs += job
if(ispath(default_job_type, /datum/job))
var/datum/job/J = default_job_type
@@ -533,3 +552,25 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
/datum/map/proc/finalize_map_generation()
return
+
+/datum/map/proc/validate()
+ . = TRUE
+ if(!length(SSmapping.player_levels))
+ log_error("[name] has no player levels!")
+ . = FALSE
+ if(!length(SSmapping.station_levels))
+ log_error("[name] has no station levels!")
+ . = FALSE
+ // TODO: add an admin level loaded from template for maps like tradeship (generic admin level modpack?)
+ /*
+ if(!length(SSmapping.admin_levels))
+ log_error("[name] has no admin levels!")
+ . = FALSE
+ */
+ if(!length(SSmapping.contact_levels))
+ log_error("[name] has no contact levels!")
+ . = FALSE
+
+/datum/map/proc/get_available_submap_archetypes()
+ return decls_repository.get_decls_of_subtype_unassociated(/decl/submap_archetype)
+
diff --git a/mods/_modpack.dm b/mods/_modpack.dm
index 279002ba251..0fb1d5d7908 100644
--- a/mods/_modpack.dm
+++ b/mods/_modpack.dm
@@ -6,7 +6,13 @@
/// A string with authors of this modpack.
var/author
var/secrets_directory
- var/list/dreams //! A list of strings to be added to the random dream proc.
+ /// The folder to load additional NanoUI templates from. Must be relative to the DME's location (root game folder).
+ var/nanoui_directory
+
+ var/list/dreams //! A list of strings to be added to the random dream proc.
+
+ var/list/tabloid_headlines //! A list of headline and article data used by the tabloids modpack.
+ var/list/tabloid_publishers //! A list of name strings used by the tabloids modpack.
var/list/credits_other //! A list of strings that are used by the end of round credits roll.
var/list/credits_adventure_names //! A list of strings that are used by the end of round credits roll.
@@ -32,6 +38,15 @@
if(!fexists(secrets_directory))
return "Modpack secrets_directory does not exist."
SSsecrets.load_directories |= secrets_directory
+ if(nanoui_directory)
+ nanoui_directory = trim(lowertext(nanoui_directory))
+ if(!length(nanoui_directory))
+ return "Modpack nanoui_directory is zero length after trim."
+ if(copytext(nanoui_directory, -1) != "/")
+ nanoui_directory = "[nanoui_directory]/"
+ if(!fexists(nanoui_directory))
+ return "Modpack nanoui_directory does not exist."
+ SSmodpacks.modpack_nanoui_directories |= nanoui_directory
/decl/modpack/proc/initialize()
return
@@ -56,6 +71,10 @@
if(length(credits_nouns))
SSlore.credits_nouns |= credits_nouns
+/// This runs on-roundstart after roundstart characters have been created.
+/decl/modpack/proc/on_roundstart()
+ return
+
/decl/modpack/proc/get_membership_perks()
return
@@ -70,11 +89,11 @@
. = "
Modpacks List
"
for(var/modpack in SSmodpacks.loaded_modpacks)
var/decl/modpack/M = SSmodpacks.loaded_modpacks[modpack]
-
+
if(M.name)
. += ""
. += " [M.name]"
-
+
if(M.desc || M.author)
. += " "
if(M.desc)
diff --git a/mods/content/baychems/reactions.dm b/mods/content/baychems/reactions.dm
index 0528696a19f..ff2acecd05a 100644
--- a/mods/content/baychems/reactions.dm
+++ b/mods/content/baychems/reactions.dm
@@ -44,7 +44,7 @@
result = /decl/material/liquid/painkillers/strong
required_reagents = list(
/decl/material/liquid/painkillers = 1,
- /decl/material/liquid/ethanol = 1,
+ /decl/material/liquid/alcohol/ethanol = 1,
/decl/material/liquid/acetone = 1
)
result_amount = 3
@@ -52,7 +52,7 @@
/decl/chemical_reaction/drug/oxycodone
name = "Oxycodone"
result = /decl/material/liquid/painkillers/oxycodone
- required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/painkillers/strong = 1)
+ required_reagents = list(/decl/material/liquid/alcohol/ethanol = 1, /decl/material/liquid/painkillers/strong = 1)
catalysts = list(/decl/material/solid/phoron = 5)
result_amount = 1
diff --git a/mods/content/corporate/_corporate.dme b/mods/content/corporate/_corporate.dme
index 3a62ba3a912..390348d3603 100644
--- a/mods/content/corporate/_corporate.dme
+++ b/mods/content/corporate/_corporate.dme
@@ -15,7 +15,6 @@
#include "clothing\head\ert.dm"
#include "clothing\head\helmets.dm"
#include "clothing\masks\rubber.dm"
-#include "clothing\rigs\ert.dm"
#include "clothing\suit\armour.dm"
#include "clothing\suit\captain.dm"
#include "clothing\suit\hoodies.dm"
@@ -40,9 +39,11 @@
#include "items\cups.dm"
#include "items\documents.dm"
#include "items\medals.dm"
+#include "items\random.dm"
#include "items\stamps.dm"
#include "items\wristcomp.dm"
#include "machines\machines.dm"
+#include "random_ruins\exoplanet_ruins\oldpod\oldpod.dm"
#include "structures\lockers.dm"
// END_INCLUDE
#endif
diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm
index cc042aa3f94..68f05027666 100644
--- a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm
+++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm
@@ -694,37 +694,37 @@
/turf/floor/plating,
/area/lar_maria/atmos)
"bV" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"bW" = (
/obj/machinery/door/firedoor,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"bX" = (
/obj/machinery/alarm{
dir = 1;
pixel_y = -25
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"bY" = (
/obj/machinery/light{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"bZ" = (
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"ca" = (
/obj/abstract/landmark/corpse/lar_maria/virologist,
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cb" = (
/obj/structure/closet/emcloset,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cc" = (
/obj/machinery/light{
@@ -798,12 +798,12 @@
/area/lar_maria/dorms)
"cp" = (
/obj/machinery/door/airlock,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cq" = (
/obj/machinery/door/airlock,
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cr" = (
/obj/structure/bookcase,
@@ -854,35 +854,35 @@
/turf/floor/plating,
/area/lar_maria/atmos)
"cD" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood,
+/obj/structure/table/laminate,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cE" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/smokes,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/toy,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/glowsticks,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/smokes,
/obj/random/drinkbottle,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cI" = (
/obj/machinery/computer/modular{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cJ" = (
/obj/structure/window/basic{
@@ -1009,32 +1009,32 @@
/obj/structure/bed/chair/comfy/purple{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"cZ" = (
/obj/abstract/landmark/corpse/lar_maria/test_subject,
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"da" = (
/obj/structure/bookcase/manuals/medical,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"db" = (
/obj/structure/bed/chair/comfy/black{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dc" = (
/mob/living/simple_animal/hostile/lar_maria/guard/ranged,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"de" = (
/obj/structure/bed/chair/comfy/brown{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"df" = (
/obj/structure/closet,
@@ -1042,11 +1042,11 @@
/obj/random/smokes,
/obj/random/snack,
/obj/random/snack,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dg" = (
/obj/structure/bookcase/manuals/engineering,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dh" = (
/obj/structure/window/basic,
@@ -1118,31 +1118,31 @@
/area/lar_maria/atmos)
"ds" = (
/mob/living/simple_animal/hostile/lar_maria/virologist,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dt" = (
/obj/structure/bed/padded,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"du" = (
/obj/machinery/light,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dv" = (
/obj/structure/closet,
/obj/random/masks,
/obj/random/accessory,
/obj/random/smokes,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dw" = (
/obj/random/closet,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dx" = (
/obj/structure/bed/padded,
/obj/random/plushie,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dy" = (
/obj/structure/window/basic,
@@ -1212,7 +1212,7 @@
/obj/machinery/light{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dJ" = (
/obj/structure/window/basic{
@@ -1316,18 +1316,18 @@
"dX" = (
/obj/structure/bed/padded,
/obj/random/plushie/large,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dY" = (
/obj/structure/closet,
/obj/random/loot,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"dZ" = (
/obj/structure/closet,
/obj/random/shoes,
/obj/random/snack,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"ea" = (
/obj/structure/table,
@@ -1387,40 +1387,40 @@
/area/lar_maria/library)
"ei" = (
/obj/structure/bed/chair/comfy/beige,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"ej" = (
/obj/machinery/botany,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"ek" = (
/obj/structure/bed/chair/comfy/brown,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"el" = (
/obj/abstract/landmark/corpse/lar_maria/virologist_female,
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"em" = (
/obj/machinery/suit_cycler,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"en" = (
/obj/structure/closet,
/obj/random/loot,
/obj/random/accessory,
/obj/item/clothing/head/soft/zhp_cap,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"eo" = (
/obj/structure/bed/chair/comfy/green,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"ep" = (
/obj/structure/closet,
/obj/random/accessory,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"eq" = (
/turf/wall/r_wall,
@@ -1482,7 +1482,7 @@
/turf/floor/tiled,
/area/lar_maria/office)
"eC" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper_bin,
/obj/item/pen/blue,
/turf/floor/tiled,
@@ -1498,20 +1498,20 @@
/turf/floor/tiled,
/area/lar_maria/office)
"eF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/handcuffs,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"eG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/smokes,
/obj/random/snack,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"eH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/beakers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"eI" = (
/obj/structure/hygiene/toilet,
@@ -1588,7 +1588,7 @@
/turf/floor/tiled,
/area/lar_maria/office)
"eU" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/tiled,
/area/lar_maria/office)
"eV" = (
@@ -1642,7 +1642,7 @@
"fh" = (
/obj/machinery/door/firedoor,
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fi" = (
/obj/machinery/alarm{
@@ -1650,7 +1650,7 @@
pixel_y = -25
},
/obj/effect/decal/cleanable/blood,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fj" = (
/obj/machinery/light/small{
@@ -1812,31 +1812,31 @@
/turf/floor/tiled,
/area/lar_maria/office)
"fF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/cane/aluminium,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fG" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/clothing/head/soft/zhp_cap,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fH" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/drinkbottle,
/obj/random/contraband,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fI" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/toolbox,
/obj/item/scalpel,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fJ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/snack,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fK" = (
/obj/machinery/door/airlock,
@@ -1905,25 +1905,25 @@
/obj/machinery/vending/engivend{
req_access = list()
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fV" = (
/mob/living/simple_animal/hostile/lar_maria/guard,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fW" = (
/obj/structure/bookcase,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fX" = (
/mob/living/simple_animal/hostile/lar_maria/virologist/female,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fY" = (
/obj/structure/closet,
/obj/random/handgun,
/obj/random/powercell,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"fZ" = (
/obj/structure/hygiene/shower{
@@ -2012,7 +2012,7 @@
dir = 4;
pixel_x = -25
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"gn" = (
/obj/machinery/power/apc{
@@ -2024,12 +2024,12 @@
/obj/structure/cable{
icon_state = "0-2"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"go" = (
/obj/structure/bed/padded,
/obj/abstract/landmark/corpse/lar_maria/virologist,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/dorms)
"gp" = (
/obj/random/trash,
@@ -2067,7 +2067,7 @@
/obj/machinery/door/airlock,
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/mess_hall)
"gw" = (
/obj/machinery/door/airlock,
@@ -2076,7 +2076,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/lar_maria/mess_hall)
"gx" = (
/turf/wall/r_wall,
diff --git a/mods/content/corporate/clothing/outfits.dm b/mods/content/corporate/clothing/outfits.dm
index 9760a72d148..3d2d3824662 100644
--- a/mods/content/corporate/clothing/outfits.dm
+++ b/mods/content/corporate/clothing/outfits.dm
@@ -46,15 +46,15 @@
/decl/outfit/death_command
name = "Spec Ops - Death commando"
-/decl/outfit/death_command/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
+/decl/outfit/death_command/equip_outfit(mob/living/wearer, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
var/decl/special_role/deathsquad = GET_DECL(/decl/special_role/deathsquad)
- deathsquad.equip_role(H)
+ deathsquad.equip_role(wearer)
return 1
/decl/outfit/syndicate_command
name = "Spec Ops - Syndicate commando"
-/decl/outfit/syndicate_command/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
+/decl/outfit/syndicate_command/equip_outfit(mob/living/wearer, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
var/decl/special_role/commandos = GET_DECL(/decl/special_role/deathsquad/mercenary)
- commandos.equip_role(H)
+ commandos.equip_role(wearer)
return 1
diff --git a/mods/content/corporate/datum/antagonists/commando.dm b/mods/content/corporate/datum/antagonists/commando.dm
index f36ce069786..3aac5874e4b 100644
--- a/mods/content/corporate/datum/antagonists/commando.dm
+++ b/mods/content/corporate/datum/antagonists/commando.dm
@@ -26,15 +26,3 @@
/obj/item/gun/energy/laser,
/obj/item/energy_blade/sword
)
-
-/obj/item/encryptionkey/hacked
- can_decrypt = list(access_hacked)
- origin_tech = @'{"esoteric":3}'
-
-/obj/item/encryptionkey/hacked/Initialize(ml, material_key)
- . = ..()
- can_decrypt |= get_all_station_access()
-
-/obj/item/radio/headset/hacked
- origin_tech = @'{"esoteric":3}'
- encryption_keys = list(/obj/item/encryptionkey/hacked)
diff --git a/mods/content/corporate/datum/robolimbs.dm b/mods/content/corporate/datum/robolimbs.dm
index 8c3c7cc009b..a103424c166 100644
--- a/mods/content/corporate/datum/robolimbs.dm
+++ b/mods/content/corporate/datum/robolimbs.dm
@@ -16,7 +16,7 @@
desc = "This limb has a white polymer casing with blue holo-displays."
icon_base = 'mods/content/corporate/icons/cyberlimbs/bishop/bishop_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -28,7 +28,7 @@
icon_base = 'mods/content/corporate/icons/cyberlimbs/bishop/bishop_rook.dmi'
has_eyes = FALSE
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/steel
+ organ_material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/metal/stainlesssteel = MATTER_AMOUNT_SECONDARY
)
@@ -39,7 +39,7 @@
desc = "This limb has a white polymer casing with blue holo-displays."
icon_base = 'mods/content/corporate/icons/cyberlimbs/bishop/bishop_glyph.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/steel
+ organ_material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/metal/stainlesssteel = MATTER_AMOUNT_SECONDARY
)
@@ -59,7 +59,7 @@
desc = "This limb has cheap plastic panels mounted on grey metal."
icon_base = 'mods/content/corporate/icons/cyberlimbs/cybersolutions/cybersolutions_wight.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -87,7 +87,7 @@
desc = "This limb is lightweight with a sleek high-contrast design."
icon_base = 'mods/content/corporate/icons/cyberlimbs/einstein/einstein_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -135,6 +135,10 @@
has_limbs = list(
BP_HEAD = list("path" = /obj/item/organ/external/head),
)
+ organ_material = /decl/material/solid/metal/aluminium
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
+ )
/decl/bodytype/prosthetic/wardtakahashi
@@ -143,7 +147,7 @@
icon_base = 'mods/content/corporate/icons/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi'
body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -154,7 +158,7 @@
desc = "This limb has a sleek black and white polymer finish."
icon_base = 'mods/content/corporate/icons/cyberlimbs/zenghu/zenghu_spirit.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -180,7 +184,7 @@
desc = "This limb is simple and functional; no effort has been made to make it look human."
icon_base = 'mods/content/corporate/icons/cyberlimbs/morpheus/morpheus_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/steel
+ organ_material = /decl/material/solid/metal/steel
uid = "bodytype_prosthetic_morpheus"
/decl/bodytype/prosthetic/morpheus/zenith
@@ -218,7 +222,7 @@
body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
bodytype_category = BODYTYPE_HUMANOID
// todo: add synthflesh material?
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -242,7 +246,7 @@
desc = "This limb has a minimalist black and red casing."
icon_base = 'mods/content/corporate/icons/cyberlimbs/xion/xion_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/aluminium
+ organ_material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
@@ -287,7 +291,7 @@
desc = "A simple but efficient polymer robotic limb, created by NanoTrasen."
icon_base = 'mods/content/corporate/icons/cyberlimbs/nanotrasen/nanotrasen_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/organic/plastic
+ organ_material = /decl/material/solid/organic/plastic
uid = "bodytype_prosthetic_nanotrasen"
/decl/bodytype/prosthetic/nanotrasen/metro
@@ -311,7 +315,7 @@
appearance_flags = HAS_SKIN_TONE_NORMAL | HAS_UNDERWEAR | HAS_EYE_COLOR
body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/organic/plastic
+ organ_material = /decl/material/solid/organic/plastic
uid = "bodytype_prosthetic_zenghu_fem"
/decl/bodytype/prosthetic/zenghu/masculine
@@ -325,7 +329,7 @@
desc = "This limb seems meticulously hand-crafted, and distinctly Unathi in design."
icon_base = 'mods/content/corporate/icons/cyberlimbs/uesseka/uesseka_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/metal/steel
+ organ_material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/metal/stainlesssteel = MATTER_AMOUNT_SECONDARY
)
diff --git a/mods/content/corporate/icons/banner.dmi b/mods/content/corporate/icons/banner.dmi
deleted file mode 100644
index cc4c3c95e9e..00000000000
Binary files a/mods/content/corporate/icons/banner.dmi and /dev/null differ
diff --git a/mods/content/corporate/icons/banner_symbols.dmi b/mods/content/corporate/icons/banner_symbols.dmi
new file mode 100644
index 00000000000..8d534a69a48
Binary files /dev/null and b/mods/content/corporate/icons/banner_symbols.dmi differ
diff --git a/mods/content/corporate/items/clutter.dm b/mods/content/corporate/items/clutter.dm
index 4de07358d1b..19ba76ee455 100644
--- a/mods/content/corporate/items/clutter.dm
+++ b/mods/content/corporate/items/clutter.dm
@@ -23,14 +23,19 @@
/obj/item/banner/nanotrasen
name = "\improper NanoTrasen banner"
hung_desc = "The banner is emblazoned with the NanoTrasen logo."
- icon = 'mods/content/corporate/icons/banner.dmi'
desc = "A banner emblazoned with the NanoTrasen logo."
material_alteration = MAT_FLAG_ALTERATION_NONE
color = COLOR_NAVY_BLUE
+ trim_color = COLOR_GOLD
decals = list(
- "banner_trim" = COLOR_GOLD,
- "banner_nanotrasen" = COLOR_WHITE
+ /decl/banner_symbol/nanotrasen = COLOR_WHITE
)
/obj/structure/banner_frame/nanotrasen
banner = /obj/item/banner/nanotrasen
+
+/decl/banner_symbol/nanotrasen
+ icon = 'mods/content/corporate/icons/banner_symbols.dmi'
+ name = "NanoTrasen logo"
+ icon_state = "nanotrasen"
+ uid = "symbol_corporate_nanotrasen"
diff --git a/mods/content/corporate/items/random.dm b/mods/content/corporate/items/random.dm
new file mode 100644
index 00000000000..54dde92f9ce
--- /dev/null
+++ b/mods/content/corporate/items/random.dm
@@ -0,0 +1,10 @@
+/obj/random/maintenance/security/spawn_choices()
+ var/static/injected = FALSE
+ . = ..()
+ if(!injected)
+ .[/obj/item/clothing/head/soft/sec/corp] = 4
+ .[/obj/item/clothing/head/beret/corp/sec] = 3
+ .[/obj/item/clothing/head/beret/corp/sec/corporate/hos] = 3
+ .[/obj/item/clothing/head/beret/corp/sec/navy/officer] = 3
+ .[/obj/item/clothing/suit/armor/vest/security] = 2
+ injected = TRUE
\ No newline at end of file
diff --git a/mods/content/corporate/items/stamps.dm b/mods/content/corporate/items/stamps.dm
index cfc6df4dbbf..35b35829728 100644
--- a/mods/content/corporate/items/stamps.dm
+++ b/mods/content/corporate/items/stamps.dm
@@ -4,7 +4,7 @@
/obj/item/stamp/hop
name = "head of personnel's rubber stamp"
- icon = 'icons/obj/items/stamps/stamp_xo.dmi'
+ icon = 'icons/obj/items/stamps/stamp_cap.dmi'
/obj/item/stamp/ce
name = "chief engineer's rubber stamp"
@@ -32,7 +32,7 @@
/obj/item/stamp/ward
name = "warden's rubber stamp"
- icon = 'icons/obj/items/stamps/stamp_cos.dmi'
+ icon = 'icons/obj/items/stamps/stamp_brig.dmi'
/obj/item/stamp/internalaffairs
name = "internal affairs' rubber stamp"
diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm b/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dm
similarity index 87%
rename from maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm
rename to mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dm
index 0ea139fdbc7..4175cd8f17c 100644
--- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm
+++ b/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dm
@@ -1,8 +1,7 @@
-#include "../../../../mods/content/corporate/_corporate.dme"
-
/datum/map_template/ruin/exoplanet/oldpod
name = "old pod"
description = "A now unused, crashed escape pod."
+ prefix = "mods/content/corporate/random_ruins/exoplanet_ruins/"
suffixes = list("oldpod/oldpod.dmm")
cost = 0.5
template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS
diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm b/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm
similarity index 73%
rename from maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm
rename to mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm
index ed155d0788a..1edbe07fd68 100644
--- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm
+++ b/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm
@@ -40,13 +40,13 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/plating,
/area/map_template/oldpod)
"ai" = (
/obj/effect/decal/cleanable/filth,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aj" = (
@@ -65,25 +65,25 @@
/obj/structure/bed,
/obj/abstract/landmark/corpse/doctor,
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"al" = (
/obj/structure/bed,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"am" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"an" = (
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"ao" = (
@@ -93,7 +93,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"ap" = (
@@ -103,7 +103,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aq" = (
@@ -112,8 +112,8 @@
dir = 8
},
/obj/effect/decal/cleanable/blood/drip,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/filth,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
@@ -121,30 +121,30 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"as" = (
/obj/effect/decal/cleanable/filth,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"at" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"au" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
@@ -152,8 +152,8 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/allowed_leak,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
@@ -162,52 +162,52 @@
dir = 4
},
/obj/effect/decal/cleanable/filth,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"ax" = (
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced/hull,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/map_template/oldpod)
"ay" = (
/obj/item/frame/air_alarm,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stock_parts/circuitboard/air_alarm,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"az" = (
/obj/effect/decal/cleanable/blood/drip,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aA" = (
/obj/random/firstaid,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aB" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/filth,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aC" = (
/obj/item/clothing/head/helmet/space/emergency,
/obj/item/clothing/suit/space/emergency,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aD" = (
@@ -223,26 +223,26 @@
/obj/random/tech_supply,
/obj/random/tech_supply,
/obj/item/tool/pickaxe,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aE" = (
/obj/structure/window/reinforced{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/table,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aF" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aG" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aH" = (
@@ -250,7 +250,7 @@
icon_state = "0-4"
},
/obj/item/frame/apc,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/cell/crap/empty,
/obj/item/stock_parts/circuitboard/apc,
/turf/floor/tiled/monotile,
@@ -260,29 +260,29 @@
icon_state = "2-8"
},
/obj/effect/decal/cleanable/filth,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aJ" = (
/obj/abstract/landmark/corpse/pirate,
/obj/item/gun/energy/captain,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aK" = (
/obj/effect/decal/cleanable/blood/drip,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aL" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood/drip,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aM" = (
@@ -290,17 +290,17 @@
/obj/item/baton/cattleprod,
/obj/item/shard,
/obj/effect/decal/cleanable/blood,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aN" = (
/obj/machinery/door/firedoor,
/obj/structure/wall_frame/hull,
/obj/structure/grille,
-/obj/item/stack/material/rods,
-/obj/item/stack/material/rods,
-/obj/item/stack/material/rods,
-/obj/item/stack/material/rods,
+/obj/item/stack/material/rods/mapped/steel,
+/obj/item/stack/material/rods/mapped/steel,
+/obj/item/stack/material/rods/mapped/steel,
+/obj/item/stack/material/rods/mapped/steel,
/obj/item/shard,
/obj/item/shard,
/obj/item/shard,
@@ -327,7 +327,7 @@
/turf/floor/plating,
/area/map_template/oldpod)
"aQ" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/monotile,
/area/map_template/oldpod)
"aR" = (
@@ -345,16 +345,16 @@
name = "plastic table frame"
},
/obj/item/firstaid/surgery,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"aS" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"aT" = (
@@ -366,7 +366,7 @@
dir = 1
},
/obj/structure/closet/crate/plastic/rations,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/gun/projectile/zipgun,
/obj/item/gun/projectile/zipgun,
/obj/item/gun/projectile/zipgun,
@@ -411,16 +411,16 @@
dir = 8
},
/obj/machinery/optable,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/blood,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"aY" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"aZ" = (
@@ -433,7 +433,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"ba" = (
@@ -475,14 +475,14 @@
},
/obj/random/firstaid,
/obj/random/firstaid,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"bf" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
"bg" = (
@@ -493,9 +493,9 @@
dir = 6;
icon_state = "warning"
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white/monotile,
/area/map_template/oldpod)
diff --git a/mods/content/corporate/structures/lockers.dm b/mods/content/corporate/structures/lockers.dm
index 33c3cbf1eab..5116f72e02c 100644
--- a/mods/content/corporate/structures/lockers.dm
+++ b/mods/content/corporate/structures/lockers.dm
@@ -51,3 +51,6 @@
/obj/structure/closet/secure_closet/hop/WillContain()
. = ..() + /obj/item/clothing/suit/armor/vest/nt
+
+/obj/structure/closet/secure_closet/pilot
+ jumpsuit_type = /obj/item/clothing/jumpsuit/pilot
\ No newline at end of file
diff --git a/mods/content/dungeon_loot/_dungeon_loot.dm b/mods/content/dungeon_loot/_dungeon_loot.dm
index 176ce11422b..0591781ed1c 100644
--- a/mods/content/dungeon_loot/_dungeon_loot.dm
+++ b/mods/content/dungeon_loot/_dungeon_loot.dm
@@ -17,4 +17,4 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/decl/modpack/dungeon_loot
name = "Dungeon Loot"
- dreams = list("Packrats")
+ dreams = list("packrats")
diff --git a/mods/content/dungeon_loot/_dungeon_loot.dme b/mods/content/dungeon_loot/_dungeon_loot.dme
index 18e66276b2f..ae3880c4164 100644
--- a/mods/content/dungeon_loot/_dungeon_loot.dme
+++ b/mods/content/dungeon_loot/_dungeon_loot.dme
@@ -3,6 +3,7 @@
// BEGIN_INCLUDE
#include "_dungeon_loot.dm"
#include "loot_pile.dm"
+#include "subtypes\bookcase.dm"
#include "subtypes\exosuit.dm"
#include "subtypes\maint.dm"
#include "subtypes\surface.dm"
diff --git a/mods/content/dungeon_loot/loot_pile.dm b/mods/content/dungeon_loot/loot_pile.dm
index b488fd95abf..5289e4ea5aa 100644
--- a/mods/content/dungeon_loot/loot_pile.dm
+++ b/mods/content/dungeon_loot/loot_pile.dm
@@ -62,7 +62,7 @@
return TRUE
//You already searched this one
- if(!allow_multiple_looting && LAZYISIN(user.ckey, searched_by))
+ if(!allow_multiple_looting && LAZYISIN(searched_by, user.ckey))
to_chat(L, SPAN_WARNING("You can't find anything else vaguely useful in \the [src]. Another set of eyes might, however."))
return TRUE
diff --git a/mods/content/dungeon_loot/subtypes/bookcase.dm b/mods/content/dungeon_loot/subtypes/bookcase.dm
new file mode 100644
index 00000000000..4752b9d4bbf
--- /dev/null
+++ b/mods/content/dungeon_loot/subtypes/bookcase.dm
@@ -0,0 +1,92 @@
+// Contains generic mundane/fantasy loot.
+/obj/structure/loot_pile/bookcase
+ name = "bookcase"
+ desc = "A bookcase that has long since fallen into disrepair. It may still have some useful things left on its shelves..."
+ icon = 'icons/obj/structures/bookcase.dmi'
+ icon_state = "bookcase-damaged" // preview
+ material = /decl/material/solid/organic/wood/walnut
+ color = /decl/material/solid/organic/wood/walnut::color
+ material_alteration = MAT_FLAG_ALTERATION_ALL
+ /// 1-indexed, pick a random overlay to add corresponding to "loot[rand(1, loot_states)]".
+ var/loot_states = 3
+ /// A text string corresponding to the icon_state of the loot overlay we're using.
+ var/loot_state
+
+/obj/structure/loot_pile/bookcase/update_material_name(override_name)
+ . = ..()
+ SetName("[pick("ruined", "destroyed", "dilapidated")] [name]")
+
+/obj/structure/loot_pile/bookcase/ebony
+ material = /decl/material/solid/organic/wood/ebony
+ color = /decl/material/solid/organic/wood/ebony::color
+
+/obj/structure/loot_pile/bookcase/get_icon_states_to_use()
+ var/static/list/icon_states_to_use = list("bookcase-damaged", "fancy-damaged")
+ return icon_states_to_use
+
+/obj/structure/loot_pile/bookcase/Initialize(ml, _mat, _reinf_mat)
+ if(isnum(loot_states) && loot_states > 0)
+ loot_state = "loot[rand(1, loot_states)]"
+ . = ..()
+
+/obj/structure/loot_pile/bookcase/on_update_icon()
+ . = ..()
+ if(loot_state)
+ add_overlay(overlay_image(icon, loot_state, null, RESET_COLOR|RESET_ALPHA))
+
+/obj/structure/loot_pile/bookcase/get_common_loot()
+ var/static/list/common_loot = list(
+ /obj/item/paper/scroll,
+ /obj/item/paper/scroll,
+ /obj/item/paper/scroll,
+ /obj/item/pen/fancy/quill,
+ /obj/item/pen/fancy/quill,
+ /obj/item/clothing/neck/prayer_beads/random,
+ /obj/item/hourglass,
+ )
+ return common_loot
+
+/obj/structure/loot_pile/bookcase/get_uncommon_loot()
+ var/static/list/uncommon_loot = list(
+ /obj/item/chems/glass/inkwell,
+ /obj/item/clothing/glasses/prescription/pincenez,
+ /obj/item/chems/drinks/bottle/wine,
+ /obj/item/stack/medical/ointment/crafted,
+ /obj/item/stack/medical/bandage/crafted,
+ )
+ return uncommon_loot
+
+/obj/structure/loot_pile/bookcase/get_rare_loot()
+ var/static/list/rare_loot = list(
+ /obj/item/bone/skull, // unlucky!
+ /obj/item/pen/fancy/quill/goose,
+ /obj/item/clothing/gloves/ring/seal/signet,
+ /obj/item/chems/drinks/bottle/champagne,
+ /obj/item/chems/drinks/bottle/premiumwine,
+ )
+ return rare_loot
+
+/// This spawns either a normal bookcase (20%), a damaged normal bookcase (60%), or a lootable decaying bookcase (20%).
+/// There's also 20% chance to just spawn nothing.
+/obj/random/dungeon_bookcase
+ name = "random dungeon bookcase"
+ icon = 'icons/obj/structures/bookcase.dmi'
+ icon_state = "bookcase-random"
+ spawn_nothing_percentage = 20
+
+/obj/random/dungeon_bookcase/spawn_choices()
+ var/static/list/spawnable_choices = list(
+ /obj/structure/bookcase/ebony = 40,
+ /obj/structure/bookcase/fancy/ebony = 40,
+ /obj/structure/loot_pile/bookcase/ebony = 20
+ )
+ return spawnable_choices
+
+/obj/random/dungeon_bookcase/spawn_item()
+ . = ..()
+ for(var/obj/structure/bookcase/bookcase in .)
+ if(prob(25))
+ continue
+ var/bookcase_max_health = bookcase.get_max_health()
+ bookcase.take_damage(bookcase_max_health * rand(51, 70)/100)
+ bookcase.update_icon()
\ No newline at end of file
diff --git a/mods/content/dungeon_loot/subtypes/maint.dm b/mods/content/dungeon_loot/subtypes/maint.dm
index 1063d1d165f..cea9732ac81 100644
--- a/mods/content/dungeon_loot/subtypes/maint.dm
+++ b/mods/content/dungeon_loot/subtypes/maint.dm
@@ -146,7 +146,7 @@
/obj/item/food/old/hotdog,
/obj/item/food/old/pizza,
/obj/item/ammo_casing,
- /obj/item/stack/material/rods/ten,
+ /obj/item/stack/material/rods/mapped/steel/ten,
/obj/item/stack/material/sheet/mapped/steel/five,
/obj/item/stack/material/cardstock/mapped/cardboard/five,
/obj/item/poster,
diff --git a/mods/content/fantasy/_fantasy.dme b/mods/content/fantasy/_fantasy.dme
index 3cd8559ddf0..87b99cb04e9 100644
--- a/mods/content/fantasy/_fantasy.dme
+++ b/mods/content/fantasy/_fantasy.dme
@@ -28,13 +28,25 @@
#include "datum\kobaloi\species.dm"
#include "items\material_overrides.dm"
#include "items\clothing\_loadout.dm"
+#include "items\clothing\_overrides.dm"
#include "items\clothing\_recipes.dm"
#include "items\clothing\armor.dm"
+#include "items\clothing\cloak.dm"
#include "items\clothing\glasses.dm"
#include "items\clothing\jerkin.dm"
#include "items\clothing\loincloth.dm"
-#include "items\clothing\overrides.dm"
#include "items\clothing\trousers.dm"
#include "props\signpost.dm"
+#include "submaps\_submaps.dm"
+#include "submaps\downlands\_downlands.dm"
+#include "submaps\grassland\_grassland.dm"
+#include "submaps\swamp\_swamp.dm"
+#include "submaps\woods\_woods.dm"
+#include "submaps\woods\bear_den\bear_den.dm"
+#include "submaps\woods\chemistry_shack\chemistry_shack.dm"
+#include "submaps\woods\fairy_rings\fairy_rings.dm"
+#include "submaps\woods\fox_den\fox_den.dm"
+#include "submaps\woods\hunter_camp\hunter_camp.dm"
+#include "submaps\woods\old_cabin\old_cabin.dm"
// END_INCLUDE
#endif
diff --git a/mods/content/fantasy/datum/hnoll/bodytypes.dm b/mods/content/fantasy/datum/hnoll/bodytypes.dm
index b5da3ed52b5..1edda9e8e99 100644
--- a/mods/content/fantasy/datum/hnoll/bodytypes.dm
+++ b/mods/content/fantasy/datum/hnoll/bodytypes.dm
@@ -16,6 +16,7 @@
base_color = "#ae7d32"
base_eye_color = "#00aa00"
uid = "bodytype_hnoll"
+ footprints_icon = 'icons/mob/footprints/footprints_paw.dmi'
default_sprite_accessories = list(
SAC_HAIR = list(
@@ -55,21 +56,21 @@
)
/decl/bodytype/hnoll/Initialize()
- if(!equip_adjust)
- equip_adjust = list(
- slot_glasses_str = list(
+ if(!_equip_adjust)
+ _equip_adjust = list(
+ (slot_glasses_str) = list(
"[NORTH]" = list( 0, 2),
"[EAST]" = list( 0, 2),
"[SOUTH]" = list( 0, 2),
"[WEST]" = list( 0, 2)
),
- slot_wear_mask_str = list(
+ (slot_wear_mask_str) = list(
"[NORTH]" = list( 0, 2),
"[EAST]" = list( 2, 2),
"[SOUTH]" = list( 0, 2),
"[WEST]" = list(-2, 2)
),
- slot_head_str = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 0, 2),
"[EAST]" = list( 0, 2),
"[SOUTH]" = list( 0, 2),
diff --git a/mods/content/fantasy/datum/hnoll/species.dm b/mods/content/fantasy/datum/hnoll/species.dm
index 31ebc61a61e..8bb1cd7496e 100644
--- a/mods/content/fantasy/datum/hnoll/species.dm
+++ b/mods/content/fantasy/datum/hnoll/species.dm
@@ -30,13 +30,6 @@
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
base_external_prosthetics_model = null
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/sharp
- )
-
available_background_info = list(
/decl/background_category/homeworld = list(
/decl/background_detail/location/fantasy,
diff --git a/mods/content/fantasy/datum/kobaloi/bodytypes.dm b/mods/content/fantasy/datum/kobaloi/bodytypes.dm
index 3e87eafcf54..72740539a49 100644
--- a/mods/content/fantasy/datum/kobaloi/bodytypes.dm
+++ b/mods/content/fantasy/datum/kobaloi/bodytypes.dm
@@ -32,87 +32,87 @@
uid = "bodytype_kobaloi"
/decl/bodytype/kobaloi/Initialize()
- if(!equip_adjust)
- equip_adjust = list(
- BP_R_HAND = list(
+ if(!_equip_adjust)
+ _equip_adjust = list(
+ (BP_R_HAND) = list(
"[NORTH]" = list( 1, -4),
"[EAST]" = list( 0, -4),
"[SOUTH]" = list(-1, -4),
"[WEST]" = list(-1, -4)
),
- BP_L_HAND = list(
+ (BP_L_HAND) = list(
"[NORTH]" = list(-1, -4),
"[EAST]" = list( 1, -4),
"[SOUTH]" = list( 1, -4),
"[WEST]" = list( 0, -4)
),
- slot_w_uniform_str = list(
+ (slot_w_uniform_str) = list(
"[NORTH]" = list( 0, -6),
"[EAST]" = list( 1, -6),
"[SOUTH]" = list( 0, -6),
"[WEST]" = list(-1, -6)
),
- slot_belt_str = list(
+ (slot_belt_str) = list(
"[NORTH]" = list( 0, -6),
"[EAST]" = list( 1, -6),
"[SOUTH]" = list( 0, -6),
"[WEST]" = list(-1, -6)
),
- slot_handcuffed_str = list(
+ (slot_handcuffed_str) = list(
"[NORTH]" = list(-1, -4),
"[EAST]" = list( 1, -4),
"[SOUTH]" = list( 1, -4),
"[WEST]" = list( 0, -4)
),
- slot_wear_id_str = list(
+ (slot_wear_id_str) = list(
"[NORTH]" = list( 0, -6),
"[EAST]" = list( 1, -6),
"[SOUTH]" = list( 0, -6),
"[WEST]" = list(-1, -6)
),
- slot_gloves_str = list(
+ (slot_gloves_str) = list(
"[NORTH]" = list(-1, -4),
"[EAST]" = list( 1, -4),
"[SOUTH]" = list( 1, -4),
"[WEST]" = list( 0, -4)
),
- slot_wear_suit_str = list(
+ (slot_wear_suit_str) = list(
"[NORTH]" = list( 0, -6),
"[EAST]" = list( 1, -6),
"[SOUTH]" = list( 0, -6),
"[WEST]" = list(-1, -6)
),
- slot_back_str = list(
+ (slot_back_str) = list(
"[NORTH]" = list( 0, -5),
"[EAST]" = list( 1, -5),
"[SOUTH]" = list( 0, -5),
"[WEST]" = list(-1, -5)
),
- slot_glasses_str = list(
+ (slot_glasses_str) = list(
"[NORTH]" = list( 0, -6),
"[EAST]" = list( 3, -6),
"[SOUTH]" = list( 0, -6),
"[WEST]" = list(-3, -6)
),
- slot_wear_mask_str = list(
+ (slot_wear_mask_str) = list(
"[NORTH]" = list( 0, -7),
"[EAST]" = list( 5, -7),
"[SOUTH]" = list( 0, -7),
"[WEST]" = list(-5, -7)
),
- slot_head_str = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 0, -5),
"[EAST]" = list( 3, -5),
"[SOUTH]" = list( 0, -5),
"[WEST]" = list(-3, -5)
),
- slot_l_ear_str = list(
+ (slot_l_ear_str) = list(
"[NORTH]" = list( 0, -5),
"[EAST]" = list( 3, -5),
"[SOUTH]" = list( 0, -5),
"[WEST]" = list(-3, -5)
),
- slot_r_ear_str = list(
+ (slot_r_ear_str) = list(
"[NORTH]" = list( 0, -5),
"[EAST]" = list( 3, -5),
"[SOUTH]" = list( 0, -5),
diff --git a/mods/content/fantasy/datum/kobaloi/clothing.dm b/mods/content/fantasy/datum/kobaloi/clothing.dm
index 1bd63942fbf..71346517d9c 100644
--- a/mods/content/fantasy/datum/kobaloi/clothing.dm
+++ b/mods/content/fantasy/datum/kobaloi/clothing.dm
@@ -1,4 +1,2 @@
-/obj/item/bag/sack/Initialize()
- . = ..()
- if(!(BODYTYPE_KOBALOI in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_KOBALOI, 'mods/content/fantasy/icons/clothing/sack_kobaloi.dmi')
\ No newline at end of file
+/obj/item/bag/sack
+ _kobaloi_onmob_icon = 'mods/content/fantasy/icons/clothing/sack_kobaloi.dmi'
diff --git a/mods/content/fantasy/datum/outfits.dm b/mods/content/fantasy/datum/outfits.dm
index 1697f5eb44f..3b65521921b 100644
--- a/mods/content/fantasy/datum/outfits.dm
+++ b/mods/content/fantasy/datum/outfits.dm
@@ -1,7 +1,10 @@
/decl/outfit/job/generic/fantasy
- name = "Fantasy Outfit"
- id_type = null
- pda_type = null
- l_ear = null
- uniform = /obj/item/clothing/pants/trousers/jerkin
- shoes = /obj/item/clothing/shoes/craftable/boots
\ No newline at end of file
+ name = "Fantasy Outfit"
+ id_type = null
+ pda_type = null
+ l_ear = null
+ shoes = /obj/item/clothing/shoes/craftable/boots
+ uniform = list(
+ /obj/item/clothing/pants/trousers,
+ /obj/item/clothing/shirt/jerkin
+ )
diff --git a/mods/content/fantasy/datum/overrides.dm b/mods/content/fantasy/datum/overrides.dm
index 0726866427d..08b4b54f4de 100644
--- a/mods/content/fantasy/datum/overrides.dm
+++ b/mods/content/fantasy/datum/overrides.dm
@@ -31,28 +31,33 @@
/decl/background_category/religion = /decl/background_detail/religion/other
)
-// Rename grafadreka
-/decl/species/grafadreka
- name = "Meredrake"
- name_plural = "Meredrakes"
- description = "Meredrakes, sometimes called mire-drakes, are large reptillian pack predators, widely assumed to be cousins to true dragons. \
- They are commonly found living in caves or burrows bordering grassland or forest, and while they prefer to hunt deer or rabbits, they will sometimes attack travellers if pickings are slim enough. \
- While they are not domesticated, they can be habituated and trained as working animals if captured young enough."
-
-/decl/sprite_accessory/marking/grafadreka
- species_allowed = list("Meredrake")
-
-/decl/language/grafadreka
- desc = "Hiss hiss, feed me rabbits."
-
-/decl/material/liquid/sifsap
- name = "drake spittle"
- lore_text = "A complex chemical slurry brewed up in the gullet of meredrakes."
-
-/obj/aura/sifsap_salve
- name = "Drakespittle Salve"
- descriptor = "glowing spittle"
-
// Rename wooden prostheses
/decl/bodytype/prosthetic/wooden
name = "carved wooden" // weird to call it 'crude' when it's cutting-edge for the setting
+
+// Just some fun overrides for when robot debris shows up in maint.
+/obj/effect/decal/cleanable/blood/gibs/robot
+ name = "mysterious debris"
+ desc = "Some kind of complex, oily detritus. What could it be?"
+
+/obj/item/remains/robot
+ name = "mysterious remains"
+ desc = "The oily remains of some complex, metallic object. What could they be from?"
+
+// Override to remove non-fantasy stuff.
+/obj/random/trash/spawn_choices()
+ var/static/list/spawnable_choices = list(
+ /obj/item/remains/lizard,
+ /obj/effect/decal/cleanable/blood/gibs/robot,
+ /obj/effect/decal/cleanable/spiderling_remains,
+ /obj/item/remains/mouse,
+ /obj/effect/decal/cleanable/vomit,
+ /obj/effect/decal/cleanable/blood/splatter,
+ /obj/effect/decal/cleanable/ash,
+ /obj/effect/decal/cleanable/generic,
+ /obj/effect/decal/cleanable/flour,
+ /obj/effect/decal/cleanable/filth,
+ /obj/effect/decal/cleanable/dirt/visible,
+ /obj/item/remains/robot
+ )
+ return spawnable_choices
diff --git a/mods/content/fantasy/datum/skills.dm b/mods/content/fantasy/datum/skills.dm
index 164ade162b6..30736399780 100644
--- a/mods/content/fantasy/datum/skills.dm
+++ b/mods/content/fantasy/datum/skills.dm
@@ -73,7 +73,7 @@
/decl/skill/crafting/artifice
name = "Artifice"
uid = "skill_crafting_artifice"
- desc = "Your ability to create, install, and comprehend complex devices and mechanisms, as well as your ability to create finely-detailed objects."
+ desc = "Your ability to create, install, and comprehend complex devices and mechanisms, as well as your ability to create finely-detailed objects like cut gems or jewellery."
levels = list(
"Unskilled" = "You know that gears turn together when intermeshed and that axles are used to connect spinning things, but you've never done more work on a machine than hitting it if it's broken. You struggle with the precision needed to work on finely-detailed objects.",
"Basic" = "You know some basic mechanical principles, like the construction of a basic pulley, or how to put a wheel on an axle. You could fix a broken or stuck well winch, but you'd struggle to deal with a malfunctioning windmill or granary. You have a steadier hand than most, able to place small gems on jewelry and connect small mechanisms.",
@@ -220,6 +220,7 @@
/decl/skill/service/husbandry
name = "Animal Husbandry"
+ uid = "skill_husbandry"
desc = "Your ability to raise and care for animals."
levels = list(
"Unskilled" = "You know next to nothing about animals. You can feed and clean up after them, but you know nothing about their biology, their behavior, or raising their young.",
@@ -306,3 +307,9 @@
"Experienced" = "You work as an pharmacist, or else you are a doctor with training in chemistry. If you are a pharmacist, you can make most medications. At this stage, you're working mostly by-the-book. - You can examine held containers for some reagents.",
"Master" = "You specialized in chemistry or pharmaceuticals; you are either a medical researcher or professional chemist. You can create custom mixes and make even the trickiest of medications easily. You understand how your pharmaceuticals interact with the bodies of your patients. You are probably the originator of at least one new chemical innovation. - You can examine held containers for all reagents."
)
+
+/datum/lock
+ lockpicking_skill = SKILL_ARTIFICE
+
+/obj/item/gemstone
+ work_skill = SKILL_ARTIFICE
diff --git a/mods/content/fantasy/icons/areas.dmi b/mods/content/fantasy/icons/areas.dmi
new file mode 100644
index 00000000000..9849d6f87d8
Binary files /dev/null and b/mods/content/fantasy/icons/areas.dmi differ
diff --git a/mods/content/fantasy/icons/clothing/jerkin.dmi b/mods/content/fantasy/icons/clothing/jerkin.dmi
index bbcf50e66de..158ce68fbeb 100644
Binary files a/mods/content/fantasy/icons/clothing/jerkin.dmi and b/mods/content/fantasy/icons/clothing/jerkin.dmi differ
diff --git a/mods/content/fantasy/icons/clothing/trousers.dmi b/mods/content/fantasy/icons/clothing/trousers.dmi
index 2e76069619a..72c80d25259 100644
Binary files a/mods/content/fantasy/icons/clothing/trousers.dmi and b/mods/content/fantasy/icons/clothing/trousers.dmi differ
diff --git a/mods/content/fantasy/items/clothing/_loadout.dm b/mods/content/fantasy/items/clothing/_loadout.dm
index 28468c54941..c9d6b1e2125 100644
--- a/mods/content/fantasy/items/clothing/_loadout.dm
+++ b/mods/content/fantasy/items/clothing/_loadout.dm
@@ -34,10 +34,26 @@
slot = slot_w_uniform_str
uid = "gear_fantasy_loincloth"
+/decl/loadout_option/fantasy/uniform/shirt
+ name = "shirt"
+ path = /obj/item/clothing/shirt/crafted
+ uid = "gear_fantasy_shirt"
+ available_materials = list(
+ /decl/material/solid/organic/cloth,
+ /decl/material/solid/organic/cloth/wool,
+ /decl/material/solid/organic/cloth/hemp,
+ /decl/material/solid/organic/cloth/linen
+ )
+
/decl/loadout_option/fantasy/uniform/jerkin
name = "jerkin"
path = /obj/item/clothing/shirt/jerkin
uid = "gear_fantasy_jerkin"
+ available_materials = list(
+ /decl/material/solid/organic/leather,
+ /decl/material/solid/organic/skin/feathers,
+ /decl/material/solid/organic/skin/fur
+ )
/decl/loadout_option/fantasy/uniform/tunic
name = "tunic"
@@ -102,6 +118,11 @@
path = /obj/item/clothing/suit/hooded_cloak
uid = "gear_fantasy_cloak_hooded"
+/decl/loadout_option/fantasy/suit/winter_cloak
+ name = "cloak, winter"
+ path = /obj/item/clothing/suit/hooded_cloak/winter
+ uid = "gear_fantasy_cloak_hooded_winter"
+
/decl/loadout_option/fantasy/suit/poncho
name = "poncho"
path = /obj/item/clothing/suit/poncho/colored
@@ -168,7 +189,7 @@
slot = slot_shoes_str
available_materials = list(
/decl/material/solid/organic/leather,
- /decl/material/solid/organic/wood,
+ /decl/material/solid/organic/wood/oak,
/decl/material/solid/organic/wood/mahogany,
/decl/material/solid/organic/wood/maple,
/decl/material/solid/organic/wood/ebony,
@@ -182,7 +203,7 @@
/decl/loadout_option/fantasy/neck/prayer_beads
name = "prayer beads"
- path = /obj/item/clothing/neck/necklace/prayer_beads
+ path = /obj/item/clothing/neck/prayer_beads
available_materials = list(
/decl/material/solid/organic/bone,
/decl/material/solid/stone/marble,
@@ -243,7 +264,7 @@
name = "shovel"
path = /obj/item/tool/shovel/one_material
available_materials = list(
- /decl/material/solid/organic/wood,
+ /decl/material/solid/organic/wood/oak,
/decl/material/solid/organic/wood/mahogany,
/decl/material/solid/organic/wood/maple,
/decl/material/solid/organic/wood/ebony,
@@ -265,7 +286,7 @@
/decl/loadout_option/fantasy/utility/waterskin
name = "waterskin selection"
- path = /obj/item/chems/waterskin
+ path = /obj/item/chems/glass/waterskin
available_materials = null
apply_to_existing_if_possible = TRUE // overwrite beggar knight's wineskin
uid = "gear_fantasy_waterskin"
@@ -273,21 +294,33 @@
/decl/loadout_option/fantasy/utility/waterskin/get_gear_tweak_options()
. = ..()
LAZYDISTINCTADD(.[/datum/gear_tweak/path], list(
- "crafted leather waterskin" = /obj/item/chems/waterskin/crafted,
- "dried stomach waterskin" = /obj/item/chems/waterskin,
+ "crafted leather waterskin" = /obj/item/chems/glass/waterskin/crafted,
+ "dried stomach waterskin" = /obj/item/chems/glass/waterskin,
))
LAZYDISTINCTADD(.[/datum/gear_tweak/reagents], list(
- "ale" = /decl/material/liquid/ethanol/ale,
- "apple cider" = /decl/material/liquid/ethanol/cider_apple,
- "beer" = /decl/material/liquid/ethanol/beer,
- "kvass" = /decl/material/liquid/ethanol/kvass,
- "pear cider" = /decl/material/liquid/ethanol/cider_pear,
- "red wine" = /decl/material/liquid/ethanol/wine,
- "sake" = /decl/material/liquid/ethanol/sake,
+ "ale" = /decl/material/liquid/alcohol/ale,
+ "apple cider" = /decl/material/liquid/alcohol/cider_apple,
+ "beer" = /decl/material/liquid/alcohol/beer,
+ "kvass" = /decl/material/liquid/alcohol/kvass,
+ "pear cider" = /decl/material/liquid/alcohol/cider_pear,
+ "red wine" = /decl/material/liquid/alcohol/wine,
+ "sake" = /decl/material/liquid/alcohol/sake,
"water" = /decl/material/liquid/water,
- "white wine" = /decl/material/liquid/ethanol/wine/premium,
+ "white wine" = /decl/material/liquid/alcohol/wine/premium,
))
+/decl/loadout_option/fantasy/utility/crutch
+ name = "crutch"
+ path = /obj/item/crutch/wooden/padded
+ available_materials = list(
+ /decl/material/solid/organic/wood/oak,
+ /decl/material/solid/organic/wood/mahogany,
+ /decl/material/solid/organic/wood/maple,
+ /decl/material/solid/organic/wood/ebony,
+ /decl/material/solid/organic/wood/walnut
+ )
+ uid = "gear_fantasy_crutch"
+
/decl/loadout_option/fantasy/eyes
abstract_type = /decl/loadout_option/fantasy/eyes
slot = slot_glasses_str
diff --git a/mods/content/fantasy/items/clothing/_overrides.dm b/mods/content/fantasy/items/clothing/_overrides.dm
new file mode 100644
index 00000000000..0ecd3b43e1c
--- /dev/null
+++ b/mods/content/fantasy/items/clothing/_overrides.dm
@@ -0,0 +1,15 @@
+/obj/item
+ var/_kobaloi_onmob_icon
+ var/_hnoll_onmob_icon
+
+/obj/item/setup_sprite_sheets()
+ . = ..()
+ if(_kobaloi_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_KOBALOI, _kobaloi_onmob_icon)
+ if(_hnoll_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_HNOLL, _hnoll_onmob_icon)
+
+/obj/item/clothing/gloves/setup_equip_flags()
+ . = ..()
+ if(!isnull(bodytype_equip_flags) && !(bodytype_equip_flags & BODY_EQUIP_FLAG_EXCLUDE))
+ bodytype_equip_flags |= BODY_EQUIP_FLAG_HNOLL
\ No newline at end of file
diff --git a/mods/content/fantasy/items/clothing/_recipes.dm b/mods/content/fantasy/items/clothing/_recipes.dm
index 219a875f5bd..99942d8918e 100644
--- a/mods/content/fantasy/items/clothing/_recipes.dm
+++ b/mods/content/fantasy/items/clothing/_recipes.dm
@@ -1,5 +1,5 @@
/decl/stack_recipe/textiles/jerkin
- result_type = /obj/item/clothing/shirt/jerkin
+ result_type = /obj/item/clothing/shirt/crafted
category = "clothing"
/decl/stack_recipe/textiles/gown
diff --git a/mods/content/fantasy/items/clothing/armor.dm b/mods/content/fantasy/items/clothing/armor.dm
index fd475c07f32..22651d3243d 100644
--- a/mods/content/fantasy/items/clothing/armor.dm
+++ b/mods/content/fantasy/items/clothing/armor.dm
@@ -1,3 +1,3 @@
// Override of the base item to add lore to the desc.
/obj/item/clothing/suit/armor/forged/banded
- desc = "A suit of overlapping armoured plates that covers the upper and lower body. Favoured by the Aegis and many Splinter Kingdoms."
+ desc = "A suit of overlapping armoured plates that covers the upper and lower body. Historically favoured by the Aegis and loyally adopted by many Splinter Kingdoms."
diff --git a/mods/content/fantasy/items/clothing/cloak.dm b/mods/content/fantasy/items/clothing/cloak.dm
new file mode 100644
index 00000000000..f61d886efe5
--- /dev/null
+++ b/mods/content/fantasy/items/clothing/cloak.dm
@@ -0,0 +1,17 @@
+// TODO: big fuckoff fur collar icons
+/obj/item/clothing/head/hood/cloak/winter
+ min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
+ material = /decl/material/solid/organic/cloth/wool
+
+/obj/item/clothing/suit/hooded_cloak/winter
+ cold_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_ARMS|SLOT_LEGS|SLOT_HANDS|SLOT_FEET
+ min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
+ hood = /obj/item/clothing/head/hood/cloak/winter
+ protects_against_weather = TRUE
+ material = /decl/material/solid/organic/cloth/wool
+
+/obj/item/clothing/suit/robe/sleeved/shrine
+ material = /decl/material/solid/organic/cloth/linen
+ paint_color = COLOR_DARK_RED
+ markings_color = COLOR_OFF_WHITE
+ markings_state_modifier = "_sleeves"
diff --git a/mods/content/fantasy/items/clothing/jerkin.dm b/mods/content/fantasy/items/clothing/jerkin.dm
index 4944bae1976..942a871a81c 100644
--- a/mods/content/fantasy/items/clothing/jerkin.dm
+++ b/mods/content/fantasy/items/clothing/jerkin.dm
@@ -2,6 +2,18 @@
name = "jerkin"
desc = "A sturdy jerkin, worn on the upper body."
icon = 'mods/content/fantasy/icons/clothing/jerkin.dmi'
- sprite_sheets = list(BODYTYPE_HNOLL = 'mods/content/fantasy/icons/clothing/jerkin_hnoll.dmi')
+ _hnoll_onmob_icon = 'mods/content/fantasy/icons/clothing/jerkin_hnoll.dmi'
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
material = /decl/material/solid/organic/leather
+
+/obj/item/clothing/shirt/crafted
+ desc = "A simple shirt, worn on the upper body."
+ icon = 'mods/content/fantasy/icons/clothing/jerkin.dmi' // TODO state with sleeves
+ sprite_sheets = list(BODYTYPE_HNOLL = 'mods/content/fantasy/icons/clothing/jerkin_hnoll.dmi')
+ material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
+
+/obj/item/clothing/shirt/crafted/wool
+ material = /decl/material/solid/organic/cloth/wool
+
+/obj/item/clothing/shirt/crafted/linen
+ material = /decl/material/solid/organic/cloth/linen
diff --git a/mods/content/fantasy/items/clothing/loincloth.dm b/mods/content/fantasy/items/clothing/loincloth.dm
index 168127ba6ad..5cb8288038e 100644
--- a/mods/content/fantasy/items/clothing/loincloth.dm
+++ b/mods/content/fantasy/items/clothing/loincloth.dm
@@ -3,7 +3,7 @@
gender = NEUTER
desc = "A simple garment that is worn around the legs and lower body."
icon = 'mods/content/fantasy/icons/clothing/loincloth.dmi'
- sprite_sheets = list(BODYTYPE_HNOLL = 'mods/content/fantasy/icons/clothing/loincloth_hnoll.dmi')
+ _hnoll_onmob_icon = 'mods/content/fantasy/icons/clothing/loincloth_hnoll.dmi'
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
material = /decl/material/solid/organic/skin/fur
diff --git a/mods/content/fantasy/items/clothing/overrides.dm b/mods/content/fantasy/items/clothing/overrides.dm
deleted file mode 100644
index 8ca8f71eea1..00000000000
--- a/mods/content/fantasy/items/clothing/overrides.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/obj/item/clothing/gloves/setup_equip_flags()
- . = ..()
- if(!isnull(bodytype_equip_flags) && !(bodytype_equip_flags & BODY_EQUIP_FLAG_EXCLUDE))
- bodytype_equip_flags |= BODY_EQUIP_FLAG_HNOLL
\ No newline at end of file
diff --git a/mods/content/fantasy/items/clothing/trousers.dm b/mods/content/fantasy/items/clothing/trousers.dm
index 37d757d3abe..4fac34236e9 100644
--- a/mods/content/fantasy/items/clothing/trousers.dm
+++ b/mods/content/fantasy/items/clothing/trousers.dm
@@ -5,21 +5,14 @@
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
material = /decl/material/solid/organic/leather
color = /decl/material/solid/organic/leather::color
- sprite_sheets = list(
- BODYTYPE_HNOLL = 'mods/content/fantasy/icons/clothing/trousers_hnoll.dmi'
- )
+ _hnoll_onmob_icon = 'mods/content/fantasy/icons/clothing/trousers_hnoll.dmi'
-/obj/item/clothing/pants/trousers/jerkin/Initialize()
- . = ..()
- var/obj/item/clothing/shirt/jerkin/jerkin = new
- attach_accessory(null, jerkin)
- if(!(jerkin in accessories))
- qdel(jerkin)
+/obj/item/clothing/pants/trousers/linen
+ material = /decl/material/solid/organic/cloth/linen
+ color = /decl/material/solid/organic/cloth/linen::color
/obj/item/clothing/pants/trousers/braies
name = "braies"
desc = "Some short trousers. Comfortable and easy to wear."
icon = 'mods/content/fantasy/icons/clothing/braies.dmi'
- sprite_sheets = list(
- BODYTYPE_HNOLL = 'mods/content/fantasy/icons/clothing/braies_hnoll.dmi'
- )
+ _hnoll_onmob_icon = 'mods/content/fantasy/icons/clothing/braies_hnoll.dmi'
diff --git a/mods/content/fantasy/items/material_overrides.dm b/mods/content/fantasy/items/material_overrides.dm
index d761bae31b7..cd5699e37b4 100644
--- a/mods/content/fantasy/items/material_overrides.dm
+++ b/mods/content/fantasy/items/material_overrides.dm
@@ -7,8 +7,32 @@
color = /decl/material/solid/organic/wood/walnut::color
// FRANCE ISN'T REAL
-/decl/material/liquid/ethanol/champagne
+/obj/item/chems/drinks/bottle/champagne
+ name = "sparkling wine bottle"
+
+/decl/material/liquid/alcohol/champagne
name = "sparkling wine"
glass_name = "sparkling wine"
glass_desc = "Sparkling white wine, a favourite at noble and merchant parties."
lore_text = "Sparkling white wine, a favourite at noble and merchant parties."
+
+/obj/item/chems/drinks/bottle/premiumwine
+ name = "vintage Imperial white wine"
+ desc = "An expensive-looking bottle of white wine, no doubt predating the fall of the Aegis, with the name of the city or settlement that produced it written on it."
+ aged_min = 98
+ aged_max = 420
+
+/obj/item/chems/drinks/bottle/premiumwine/make_random_name()
+ var/decl/language/hnoll/hnoll_language = GET_DECL(/decl/language/hnoll)
+ return "bottle of vintage [hnoll_language.get_random_name(FEMALE, name_count = prob(20) ? 2 : 1)]"
+
+/obj/item/chems/drinks/bottle/wine
+ name = "bottle of red wine"
+ desc = "A bottle of locally-produced red wine."
+ var/place_of_origin
+
+/obj/item/chems/drinks/bottle/wine/Initialize()
+ . = ..()
+ var/decl/language/hnoll/hnoll_language = GET_DECL(/decl/language/hnoll)
+ place_of_origin = hnoll_language.get_random_name(FEMALE, name_count = prob(20) ? 2 : 1)
+ desc += " It has a label that reads '[place_of_origin]'."
\ No newline at end of file
diff --git a/mods/content/fantasy/submaps/_submaps.dm b/mods/content/fantasy/submaps/_submaps.dm
new file mode 100644
index 00000000000..64c03240f4b
--- /dev/null
+++ b/mods/content/fantasy/submaps/_submaps.dm
@@ -0,0 +1,52 @@
+#define MAP_TEMPLATE_CATEGORY_FANTASY_GRASSLAND "template_fantasy_grassland"
+#define MAP_TEMPLATE_CATEGORY_FANTASY_SWAMP "template_fantasy_swamp"
+#define MAP_TEMPLATE_CATEGORY_FANTASY_WOODS "template_fantasy_woods"
+#define MAP_TEMPLATE_CATEGORY_FANTASY_DOWNLANDS "template_fantasy_downlands"
+#define MAP_TEMPLATE_CATEGORY_FANTASY_DUNGEON "template_fantasy_dungeon"
+#define MAP_TEMPLATE_CATEGORY_FANTASY_CAVERNS "template_fantasy_caverns"
+
+/datum/map_template/fantasy
+ abstract_type = /datum/map_template/fantasy
+ template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS
+ area_usage_test_exempted_root_areas = list(
+ /area/fantasy/outside/point_of_interest
+ )
+ var/cost = 1
+
+/datum/map_template/fantasy/get_template_cost()
+ return cost
+
+/datum/map/New()
+ LAZYSET(apc_test_exempt_areas, /area/fantasy, NO_SCRUBBER|NO_VENT|NO_APC)
+ ..()
+
+/area/fantasy
+ abstract_type = /area/fantasy
+ allow_xenoarchaeology_finds = FALSE
+ icon = 'mods/content/fantasy/icons/areas.dmi'
+ icon_state = "area"
+ base_turf = /turf/floor/rock/basalt
+ sound_env = GENERIC
+ ambience = list()
+
+/area/fantasy/outside
+ name = "\improper Wilderness"
+ abstract_type = /area/fantasy/outside
+ color = COLOR_GREEN
+ is_outside = OUTSIDE_YES
+ sound_env = PLAIN
+ ambience = list(
+ 'sound/effects/wind/wind_2_1.ogg',
+ 'sound/effects/wind/wind_2_2.ogg',
+ 'sound/effects/wind/wind_3_1.ogg',
+ 'sound/effects/wind/wind_4_1.ogg',
+ 'sound/effects/wind/wind_4_2.ogg',
+ 'sound/effects/wind/wind_5_1.ogg'
+ )
+ interior_ambient_light_modifier = -0.3
+ area_flags = AREA_FLAG_EXTERNAL | AREA_FLAG_IS_BACKGROUND
+
+/area/fantasy/outside/point_of_interest
+ name = "Point Of Interest"
+ description = null
+ area_blurb_category = /area/fantasy/outside/point_of_interest
diff --git a/mods/content/fantasy/submaps/downlands/_downlands.dm b/mods/content/fantasy/submaps/downlands/_downlands.dm
new file mode 100644
index 00000000000..5086d54dc54
--- /dev/null
+++ b/mods/content/fantasy/submaps/downlands/_downlands.dm
@@ -0,0 +1,7 @@
+/datum/map_template/fantasy/downlands
+ abstract_type = /datum/map_template/fantasy/downlands
+ template_categories = list(MAP_TEMPLATE_CATEGORY_FANTASY_DOWNLANDS)
+
+/datum/map_template/fantasy/dungeon
+ abstract_type = /datum/map_template/fantasy/dungeon
+ template_categories = list(MAP_TEMPLATE_CATEGORY_FANTASY_DUNGEON)
diff --git a/mods/content/fantasy/submaps/grassland/_grassland.dm b/mods/content/fantasy/submaps/grassland/_grassland.dm
new file mode 100644
index 00000000000..19b70b9367f
--- /dev/null
+++ b/mods/content/fantasy/submaps/grassland/_grassland.dm
@@ -0,0 +1,7 @@
+/datum/map_template/fantasy/grassland
+ abstract_type = /datum/map_template/fantasy/grassland
+ template_categories = list(MAP_TEMPLATE_CATEGORY_FANTASY_GRASSLAND)
+
+/datum/map_template/fantasy/cavern
+ abstract_type = /datum/map_template/fantasy/cavern
+ template_categories = list(MAP_TEMPLATE_CATEGORY_FANTASY_CAVERNS)
\ No newline at end of file
diff --git a/mods/content/fantasy/submaps/swamp/_swamp.dm b/mods/content/fantasy/submaps/swamp/_swamp.dm
new file mode 100644
index 00000000000..6a3c2054ea9
--- /dev/null
+++ b/mods/content/fantasy/submaps/swamp/_swamp.dm
@@ -0,0 +1,3 @@
+/datum/map_template/fantasy/swamp
+ abstract_type = /datum/map_template/fantasy/swamp
+ template_categories = list(MAP_TEMPLATE_CATEGORY_FANTASY_SWAMP)
\ No newline at end of file
diff --git a/mods/content/fantasy/submaps/woods/_woods.dm b/mods/content/fantasy/submaps/woods/_woods.dm
new file mode 100644
index 00000000000..dc1429ef559
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/_woods.dm
@@ -0,0 +1,3 @@
+/datum/map_template/fantasy/woods
+ abstract_type = /datum/map_template/fantasy/woods
+ template_categories = list(MAP_TEMPLATE_CATEGORY_FANTASY_WOODS)
diff --git a/mods/content/fantasy/submaps/woods/bear_den/bear_den.dm b/mods/content/fantasy/submaps/woods/bear_den/bear_den.dm
new file mode 100644
index 00000000000..cb4da036c7c
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/bear_den/bear_den.dm
@@ -0,0 +1,6 @@
+/datum/map_template/fantasy/woods/bear_den
+ name = "bear den"
+ mappaths = list("mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm")
+
+/area/fantasy/outside/point_of_interest/bear_den
+ name = "Point of Interest - Bear Den"
diff --git a/maps/shaded_hills/submaps/woods/bear_den/bear_den.dmm b/mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm
similarity index 76%
rename from maps/shaded_hills/submaps/woods/bear_den/bear_den.dmm
rename to mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm
index 01ac1b5988a..021df578e9b 100644
--- a/maps/shaded_hills/submaps/woods/bear_den/bear_den.dmm
+++ b/mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm
@@ -8,19 +8,19 @@
"k" = (
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"n" = (
/turf/floor/rock/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"o" = (
/turf/floor/grass,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"p" = (
/turf/floor/grass,
/area/template_noop)
"r" = (
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"w" = (
/obj/item/bladed/knife,
/obj/item/cash/imperial/crown,
@@ -29,20 +29,20 @@
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/floor/rock/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"y" = (
/obj/abstract/exterior_marker/inside,
/turf/floor/rock/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"z" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/natural/dirt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"C" = (
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/floor/rock/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"G" = (
/obj/item/bone/skull/deer,
/obj/item/food/butchery/stomach,
@@ -50,7 +50,7 @@
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"J" = (
/turf/floor/grass/wild,
/area/template_noop)
@@ -61,16 +61,16 @@
/mob/living/simple_animal/hostile/bear,
/obj/abstract/exterior_marker/inside,
/turf/floor/rock/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"O" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/natural/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"U" = (
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/wall/natural/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"V" = (
/obj/item/cash/imperial/quin,
/obj/item/cash/imperial/quin,
@@ -79,12 +79,12 @@
/obj/item/cash/imperial/crown,
/obj/abstract/exterior_marker/inside,
/turf/floor/rock/basalt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
"W" = (
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/wall/natural/dirt,
-/area/shaded_hills/outside/point_of_interest/bear_den)
+/area/fantasy/outside/point_of_interest/bear_den)
(1,1,1) = {"
K
diff --git a/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dm b/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dm
new file mode 100644
index 00000000000..158824c417b
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dm
@@ -0,0 +1,6 @@
+/datum/map_template/fantasy/woods/chemistry_shack
+ name = "chemistry shack"
+ mappaths = list("mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm")
+
+/area/fantasy/outside/point_of_interest/chemistry_shack
+ name = "Point of Interest - Chemistry Shack"
diff --git a/maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dmm b/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm
similarity index 66%
rename from maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dmm
rename to mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm
index 9c04e479e74..6ed42c83589 100644
--- a/maps/shaded_hills/submaps/woods/chemistry_shack/chemistry_shack.dmm
+++ b/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm
@@ -4,8 +4,8 @@
/obj/structure/door/walnut{
dir = 4
},
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"h" = (
/obj/abstract/exterior_marker/inside,
/obj/item/rock/hematite{
@@ -33,20 +33,20 @@
},
/obj/structure/table/desk/ebony,
/turf/floor/path/herringbone/basalt,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"k" = (
/obj/abstract/exterior_marker/inside,
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/cooking_vessel/pot/iron,
/obj/item/chems/glass/handmade/teapot,
/obj/abstract/landmark/organize/vertical,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"m" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/reagent_dispensers/barrel/ebony/oil,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"n" = (
/obj/structure/wall_sconce/lantern{
dir = 1;
@@ -56,11 +56,11 @@
/area/template_noop)
"p" = (
/obj/abstract/exterior_marker/inside,
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/mortar,
/obj/item/rock/basalt,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"q" = (
/obj/structure/drying_rack/ebony,
/turf/floor/dirt,
@@ -69,68 +69,68 @@
/obj/abstract/exterior_marker/inside,
/obj/structure/filter_stand/mapped,
/turf/floor/path/herringbone/basalt,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"s" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/log/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"z" = (
/turf/template_noop,
/area/template_noop)
"C" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/door/walnut,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"F" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/brick/basalt,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"H" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/brick/basalt/shutter,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"I" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/reagent_dispensers/barrel/ebony/water,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"J" = (
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"K" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/bed/simple/ebony/cloth,
/obj/item/bedsheet/furs,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"L" = (
/obj/abstract/exterior_marker/inside,
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/knife,
/obj/item/food/grown/potato,
/obj/item/food/grown/potato,
/obj/item/food/grown/carrot,
/obj/item/food/grown/carrot,
/obj/item/kitchen/rollingpin,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"M" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/reagent_dispensers/barrel/ebony/wine,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"N" = (
/obj/abstract/exterior_marker/inside,
/turf/floor/path/herringbone/basalt,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"R" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/closet/crate/chest/ebony,
/obj/random/jewelry,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"U" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/wall_sconce/lantern{
@@ -149,19 +149,19 @@
pixel_y = 9
},
/turf/floor/path/herringbone/basalt,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"W" = (
/turf/floor/dirt,
/area/template_noop)
"X" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/log/walnut/shutter,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/area/fantasy/outside/point_of_interest/chemistry_shack)
"Y" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/fire_source/stove,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/chemistry_shack)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/chemistry_shack)
(1,1,1) = {"
W
diff --git a/maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring.dmm b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm
similarity index 75%
rename from maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring.dmm
rename to mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm
index b3c1314f552..2611fe47b34 100644
--- a/maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring.dmm
+++ b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm
@@ -1,14 +1,14 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/floor/fake_grass,
-/area/shaded_hills/outside/point_of_interest/fairy_ring)
+/area/fantasy/outside/point_of_interest/fairy_ring)
"w" = (
/obj/structure/flora/plant/random_mushroom,
/turf/floor/fake_grass,
-/area/shaded_hills/outside/point_of_interest/fairy_ring)
+/area/fantasy/outside/point_of_interest/fairy_ring)
"D" = (
/turf/floor/grass/wild,
-/area/shaded_hills/outside/point_of_interest/fairy_ring)
+/area/fantasy/outside/point_of_interest/fairy_ring)
"N" = (
/turf/template_noop,
/area/template_noop)
diff --git a/maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring_glowing.dmm b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring_glowing.dmm
similarity index 75%
rename from maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring_glowing.dmm
rename to mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring_glowing.dmm
index bbd7d2ae036..b86a4adcb0f 100644
--- a/maps/shaded_hills/submaps/woods/fairy_rings/fairy_ring_glowing.dmm
+++ b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring_glowing.dmm
@@ -4,14 +4,14 @@
/area/template_noop)
"h" = (
/turf/floor/grass,
-/area/shaded_hills/outside/point_of_interest/fairy_ring)
+/area/fantasy/outside/point_of_interest/fairy_ring)
"j" = (
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/fairy_ring)
+/area/fantasy/outside/point_of_interest/fairy_ring)
"A" = (
/obj/structure/flora/plant/random_mushroom/glowing,
/turf/floor/grass,
-/area/shaded_hills/outside/point_of_interest/fairy_ring)
+/area/fantasy/outside/point_of_interest/fairy_ring)
(1,1,1) = {"
a
diff --git a/mods/content/fantasy/submaps/woods/fairy_rings/fairy_rings.dm b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_rings.dm
new file mode 100644
index 00000000000..76140bdb759
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_rings.dm
@@ -0,0 +1,15 @@
+/datum/map_template/fantasy/woods/fairy_ring
+ name = "fairy ring"
+ mappaths = list("mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm")
+ template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_ALLOW_DUPLICATES | TEMPLATE_FLAG_GENERIC_REPEATABLE
+ template_categories = list(
+ MAP_TEMPLATE_CATEGORY_FANTASY_WOODS
+ )
+ area_coherency_test_exempt_areas = list(/area/fantasy/outside/point_of_interest/fairy_ring)
+
+/datum/map_template/fantasy/woods/fairy_ring/glowing
+ name = "glowing fairy ring"
+ mappaths = list("mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring_glowing.dmm")
+
+/area/fantasy/outside/point_of_interest/fairy_ring
+ name = "Point of Interest - Fairy Ring"
diff --git a/mods/content/fantasy/submaps/woods/fox_den/fox_den.dm b/mods/content/fantasy/submaps/woods/fox_den/fox_den.dm
new file mode 100644
index 00000000000..894f6f7fb50
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/fox_den/fox_den.dm
@@ -0,0 +1,6 @@
+/datum/map_template/fantasy/woods/fox_den
+ name = "fox den"
+ mappaths = list("mods/content/fantasy/submaps/woods/fox_den/fox_den.dmm")
+
+/area/fantasy/outside/point_of_interest/fox_den
+ name = "Point of Interest - Fox Den"
diff --git a/maps/shaded_hills/submaps/woods/fox_den/fox_den.dmm b/mods/content/fantasy/submaps/woods/fox_den/fox_den.dmm
similarity index 82%
rename from maps/shaded_hills/submaps/woods/fox_den/fox_den.dmm
rename to mods/content/fantasy/submaps/woods/fox_den/fox_den.dmm
index 6e1c6e5ce94..8053ead1e47 100644
--- a/maps/shaded_hills/submaps/woods/fox_den/fox_den.dmm
+++ b/mods/content/fantasy/submaps/woods/fox_den/fox_den.dmm
@@ -9,7 +9,7 @@
/mob/living/simple_animal/passive/fox,
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"x" = (
/turf/floor/grass/wild,
/area/template_noop)
@@ -23,7 +23,7 @@
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"B" = (
/turf/floor/grass,
/area/template_noop)
@@ -31,32 +31,32 @@
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/wall/natural/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"O" = (
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"P" = (
/obj/item/food/butchery/offal/small,
/obj/item/stack/material/bone/mapped/bone,
/obj/abstract/exterior_marker/inside,
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"S" = (
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"W" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/natural/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
"Y" = (
/obj/item/seeds/extracted/foxglove,
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/fox_den)
+/area/fantasy/outside/point_of_interest/fox_den)
(1,1,1) = {"
n
diff --git a/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dm b/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dm
new file mode 100644
index 00000000000..262e1b71d55
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dm
@@ -0,0 +1,6 @@
+/datum/map_template/fantasy/woods/hunter_camp
+ name = "hunter camp"
+ mappaths = list("mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm")
+
+/area/fantasy/outside/point_of_interest/hunter_camp
+ name = "Point of Interest - Hunter Camp"
diff --git a/maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dmm b/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm
similarity index 69%
rename from maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dmm
rename to mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm
index 0d8357987fe..b269d8d4cdd 100644
--- a/maps/shaded_hills/submaps/woods/hunter_camp/hunter_camp.dmm
+++ b/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm
@@ -1,93 +1,93 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/floor/grass/wild,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"b" = (
/obj/structure/drying_rack,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"e" = (
/turf/floor/grass,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"h" = (
/obj/structure/flora/tree/hardwood/ebony,
/turf/floor/grass,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"j" = (
/obj/item/stack/material/skin/mapped/leather/twenty,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"k" = (
/obj/item/food/butchery/offal/beef,
/obj/item/food/butchery/offal/small/beef,
/obj/structure/pit,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"n" = (
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"q" = (
/obj/structure/closet/crate/chest/ebony,
/obj/item/food/butchery/haunch/shoulder/beef,
/obj/item/food/butchery/haunch/side/beef,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"A" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/log/walnut,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"B" = (
/obj/structure/flora/stump/tree/ebony,
/turf/floor/grass/wild,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"C" = (
/obj/structure/flora/stump/tree/ebony,
/turf/floor/grass,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"D" = (
/obj/abstract/exterior_marker/inside,
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"E" = (
/obj/structure/reagent_dispensers/barrel/ebony/water,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"F" = (
/obj/structure/drying_rack,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"I" = (
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"J" = (
/obj/structure/flora/tree/hardwood/ebony,
/turf/floor/grass/wild,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"K" = (
/turf/template_noop,
/area/template_noop)
"P" = (
/obj/structure/flora/tree/hardwood/mahogany,
/turf/floor/grass/wild,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"Q" = (
/obj/structure/bed/bedroll/fur,
/obj/abstract/exterior_marker/inside,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"S" = (
/obj/structure/fire_source/firepit/basalt,
/obj/item/stack/material/log/mapped/walnut/fifteen,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"U" = (
/obj/abstract/exterior_marker/inside,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
"Z" = (
/obj/item/bladed/knife,
/turf/floor/barren,
-/area/shaded_hills/outside/point_of_interest/hunter_camp)
+/area/fantasy/outside/point_of_interest/hunter_camp)
(1,1,1) = {"
K
diff --git a/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dm b/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dm
new file mode 100644
index 00000000000..4a2130efce2
--- /dev/null
+++ b/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dm
@@ -0,0 +1,6 @@
+/datum/map_template/fantasy/woods/old_cabin
+ name = "old cabin"
+ mappaths = list("mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm")
+
+/area/fantasy/outside/point_of_interest/old_cabin
+ name = "Point of Interest - Old Cabin"
diff --git a/maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dmm b/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm
similarity index 58%
rename from maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dmm
rename to mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm
index cb9a478a093..18e12175274 100644
--- a/maps/shaded_hills/submaps/woods/old_cabin/old_cabin.dmm
+++ b/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm
@@ -2,108 +2,108 @@
"a" = (
/obj/structure/door/walnut,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"g" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/table/end,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"h" = (
/turf/template_noop,
/area/template_noop)
"i" = (
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/area/fantasy/outside/point_of_interest/old_cabin)
"k" = (
/obj/structure/closet/crate/chest/ebony,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"o" = (
/obj/structure/drying_rack/ebony,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"u" = (
/obj/structure/reagent_dispensers/barrel/ebony/beer,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"x" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/flame/torch,
/obj/item/flame/torch,
/obj/item/rock/flint,
/obj/item/rock/hematite,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"z" = (
/obj/effect/spider/spiderling/mundane,
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/structure/wall_sconce/torch{
dir = 1;
pixel_y = 24
},
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"B" = (
/obj/effect/decal/cleanable/blood,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"D" = (
/obj/effect/spider/spiderling/mundane,
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/food/grown/carrot,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"G" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/log/walnut/shutter,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/area/fantasy/outside/point_of_interest/old_cabin)
"H" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/knife,
/obj/item/food/grown/potato,
/obj/item/food/grown/potato,
/obj/item/food/grown/carrot,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"I" = (
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"L" = (
/obj/effect/spider/spiderling/mundane,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"M" = (
/obj/abstract/exterior_marker/inside,
/turf/wall/log/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/area/fantasy/outside/point_of_interest/old_cabin)
"N" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/coatrack/ebony,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"T" = (
/obj/abstract/exterior_marker/inside,
/obj/structure/table/desk/dresser,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
"W" = (
/obj/structure/wall_sconce/torch{
dir = 1;
pixel_y = 24
},
/turf/floor/dirt,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/area/fantasy/outside/point_of_interest/old_cabin)
"Z" = (
/obj/item/remains/human,
/obj/structure/bed/simple/ebony/cloth,
@@ -111,8 +111,8 @@
/obj/effect/decal/cleanable/blood,
/obj/random/jewelry,
/obj/abstract/exterior_marker/inside,
-/turf/floor/wood/walnut,
-/area/shaded_hills/outside/point_of_interest/old_cabin)
+/turf/floor/wood/rough/walnut,
+/area/fantasy/outside/point_of_interest/old_cabin)
(1,1,1) = {"
i
diff --git a/maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm b/mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm
similarity index 93%
rename from maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm
rename to mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm
index e3e6c1ed4f4..1629e04adaf 100644
--- a/maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm
+++ b/mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm
@@ -28,7 +28,7 @@
/turf/floor/wood/walnut,
/area/template_noop)
"q" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/cup/wood,
/turf/floor/wood/walnut,
/area/template_noop)
@@ -42,7 +42,7 @@
/turf/floor/path/basalt,
/area/template_noop)
"t" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/bladed/knife,
/turf/floor/path/basalt,
/area/template_noop)
@@ -69,7 +69,7 @@
/turf/floor/wood/walnut,
/area/template_noop)
"E" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/teapot,
/turf/floor/wood/walnut,
/area/template_noop)
@@ -78,7 +78,7 @@
/turf/floor/path/basalt,
/area/template_noop)
"J" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/food/grown/potato,
/obj/item/chems/cooking_vessel/pot/iron,
/turf/floor/path/basalt,
@@ -104,11 +104,11 @@
/turf/floor/path/basalt,
/area/template_noop)
"R" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/turf/floor/wood/walnut,
/area/template_noop)
"S" = (
-/obj/structure/table/woodentable/ebony,
+/obj/structure/table/wood/ebony,
/obj/item/chems/glass/handmade/bowl/wood,
/obj/item/chems/glass/handmade/bowl/wood,
/obj/item/chems/glass/handmade/cup/wood,
diff --git a/mods/content/government/away_sites/icarus/icarus-1.dmm b/mods/content/government/away_sites/icarus/icarus-1.dmm
index b04503e9333..fc98131743c 100644
--- a/mods/content/government/away_sites/icarus/icarus-1.dmm
+++ b/mods/content/government/away_sites/icarus/icarus-1.dmm
@@ -26,11 +26,11 @@
/turf/floor/plating,
/area/icarus/vessel)
"aj" = (
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"ak" = (
/obj/item/stack/material/ore/slag,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"al" = (
/obj/structure/flora/bush/palebush,
@@ -38,20 +38,20 @@
/area/icarus/open)
"am" = (
/obj/structure/bed/chair/comfy/black,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"an" = (
/obj/structure/bed/chair/comfy/captain,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"ao" = (
/obj/structure/bed/chair/comfy/black,
/obj/item/secure_storage/briefcase,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"ap" = (
/obj/random/trash,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aq" = (
/turf/wall/r_wall,
@@ -65,21 +65,21 @@
/area/icarus/vessel)
"at" = (
/obj/structure/closet/gmcloset,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"au" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flame/fuelled/lighter/zippo/random,
/obj/random/smokes,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"av" = (
-/obj/structure/table/woodentable,
-/turf/floor/wood,
+/obj/structure/table/laminate,
+/turf/floor/laminate,
/area/icarus/vessel)
"aw" = (
/obj/machinery/papershredder,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"ax" = (
/obj/item/stack/material/ore/slag,
@@ -87,55 +87,55 @@
/area/icarus/open)
"ay" = (
/obj/item/shreddedp,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"az" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/smokes,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aA" = (
/obj/machinery/photocopier,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aB" = (
/obj/structure/bed/chair/comfy/black{
dir = 1
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/lunchbox/mars,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aE" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/photo_album,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/drinkbottle,
/obj/random/drinkbottle,
/obj/random/snack,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aG" = (
/obj/machinery/light,
/obj/structure/filing_cabinet/tall,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aH" = (
/obj/structure/filing_cabinet/tall,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aI" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4;
level = 2
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -144,25 +144,25 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aK" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aL" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/fancy/cigar,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aM" = (
/obj/machinery/door/airlock,
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/floor/wood,
+/turf/floor/laminate,
/area/icarus/vessel)
"aN" = (
/obj/structure/ladder,
@@ -221,23 +221,23 @@
/turf/wall,
/area/icarus/vessel)
"aY" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"aZ" = (
/obj/random/obstruction,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"ba" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
/area/icarus/vessel)
"bb" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"bc" = (
@@ -395,7 +395,7 @@
/area/icarus/vessel)
"bE" = (
/obj/random/trash,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"bF" = (
@@ -405,21 +405,21 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"bH" = (
/obj/structure/hygiene/shower{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"bI" = (
/obj/structure/hygiene/shower{
dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"bJ" = (
@@ -514,7 +514,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"bX" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"bY" = (
@@ -528,14 +528,14 @@
dir = 4
},
/obj/random/trash,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"ca" = (
/obj/effect/floor_decal/corner/grey/diagonal{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/blood/splatter,
/turf/floor/tiled/white,
/area/icarus/vessel)
@@ -625,7 +625,7 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"cq" = (
@@ -633,7 +633,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"cr" = (
@@ -652,7 +652,7 @@
/obj/effect/floor_decal/corner/grey/diagonal{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"ct" = (
@@ -699,7 +699,7 @@
/obj/effect/floor_decal/corner/grey/diagonal{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/abstract/landmark/corpse/chef,
/obj/effect/decal/cleanable/blood/splatter,
/turf/floor/tiled/white,
@@ -784,7 +784,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cN" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"cO" = (
@@ -878,14 +878,14 @@
/obj/structure/broken_cryo/icarus{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"dd" = (
/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
@@ -921,8 +921,8 @@
"dj" = (
/obj/structure/table,
/obj/item/towel,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
@@ -937,7 +937,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"dm" = (
@@ -971,7 +971,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"dr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/wall,
/area/icarus/vessel)
"ds" = (
@@ -983,13 +983,13 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"du" = (
/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"dv" = (
@@ -1030,13 +1030,13 @@
dir = 4;
icon_state = "tube1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"dC" = (
/obj/structure/table,
/obj/random/accessory,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
@@ -1098,7 +1098,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -1125,7 +1125,7 @@
/area/icarus/open)
"dR" = (
/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/open)
"dS" = (
@@ -1136,7 +1136,7 @@
/turf/floor/tiled,
/area/icarus/open)
"dU" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"dV" = (
@@ -1145,7 +1145,7 @@
/turf/floor/tiled,
/area/icarus/open)
"dW" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/abstract/landmark/allowed_leak,
@@ -1204,41 +1204,41 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"ee" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ef" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/icarus/open)
"eg" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/icarus/open)
"eh" = (
/obj/random/tank,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/open)
"ei" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ej" = (
/obj/random/trash,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"ek" = (
@@ -1246,38 +1246,38 @@
/turf/floor/tiled,
/area/icarus/open)
"el" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"em" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/icarus/open)
"en" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eo" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/open)
"ep" = (
/obj/structure/filing_cabinet/tall,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"eq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating/airless/broken,
/area/icarus/open)
"er" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/blood/splatter,
/turf/floor/tiled,
/area/icarus/open)
@@ -1290,7 +1290,7 @@
/area/icarus/open)
"eu" = (
/obj/item/clothing/mask/smokable/cigarette/killthroat,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"ev" = (
@@ -1298,9 +1298,9 @@
/turf/floor/tiled,
/area/icarus/open)
"ew" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/clothing/mask/breath/emergency,
/turf/unsimulated/floor/sand,
/area/icarus/open)
@@ -1314,394 +1314,394 @@
/turf/floor/tiled,
/area/icarus/open)
"ez" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating/airless/broken,
/area/icarus/open)
"eA" = (
/turf/floor/plating/airless/broken,
/area/icarus/open)
"eB" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/scalpel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eC" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eD" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/bedsheet/orange,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/icarus/open)
"eF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/grass/wild,
/area/icarus/open)
"eG" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/clothing/mask/surgical,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eH" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eI" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/plate,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eJ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/utensil/knife,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eK" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/bed/padded,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eL" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/snack,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eM" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eN" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/plate,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eO" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/bed/chair{
dir = 1
},
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eP" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/ash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eQ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eR" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eS" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/ash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eV" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eW" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/snack,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eX" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eY" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/ash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"eZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fa" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/pill_bottle/antibiotics,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fb" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fc" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/bag/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fd" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fe" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ff" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fg" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fh" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/chems/drinks/cans/waterbottle,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fi" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fk" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/ash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fl" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fm" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fn" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/ash,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fo" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/material,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fp" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/material/rods,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/item/stack/material/rods/mapped/steel,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/ash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/material,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fs" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ft" = (
/obj/effect/icarus/irradiate,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"fv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating,
/area/icarus/open)
"fw" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/plating/airless/broken,
/area/icarus/open)
"fx" = (
@@ -1714,13 +1714,13 @@
/turf/floor/tiled,
/area/icarus/open)
"fz" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/vessel)
"fA" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/vessel)
"fB" = (
@@ -1736,10 +1736,10 @@
/turf/floor/tiled,
/area/icarus/vessel)
"fE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/vessel)
"fF" = (
@@ -1747,12 +1747,12 @@
/turf/floor/plating,
/area/icarus/vessel)
"fG" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/vessel)
"fH" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/vessel)
@@ -1904,10 +1904,10 @@
/turf/floor/plating,
/area/icarus/vessel)
"gj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/vessel)
@@ -1931,7 +1931,7 @@
/turf/floor/plating,
/area/icarus/vessel)
"go" = (
-/obj/structure/target_stake,
+/obj/structure/target_stake/steel,
/turf/floor/plating,
/area/icarus/vessel)
"gp" = (
@@ -2478,7 +2478,7 @@
/area/icarus/vessel)
"hW" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"hX" = (
@@ -2487,8 +2487,8 @@
/area/icarus/open)
"hY" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"hZ" = (
@@ -2505,17 +2505,17 @@
/area/icarus/vessel)
"ib" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ic" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"id" = (
@@ -2525,52 +2525,52 @@
/turf/wall/r_wall,
/area/icarus/open)
"ie" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"if" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ig" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ih" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/vehicle/train/cargo/trolley,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ii" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"ij" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/engine{
anchored = 0
},
@@ -2578,28 +2578,28 @@
/area/icarus/open)
"ik" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"il" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/sand,
/area/icarus/open)
"im" = (
/obj/effect/decal/cleanable/ash,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/item/stack/material/ore/slag,
/turf/unsimulated/floor/sand,
/area/icarus/open)
@@ -2608,8 +2608,8 @@
/turf/floor/grass/wild,
/area/icarus/open)
"ip" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/grass/wild,
/area/icarus/open)
"jb" = (
@@ -2654,7 +2654,7 @@
pixel_y = 2
},
/obj/random/soap,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled/white,
/area/icarus/vessel)
"rK" = (
diff --git a/mods/content/government/away_sites/icarus/icarus-2.dmm b/mods/content/government/away_sites/icarus/icarus-2.dmm
index e32afe37e27..57e1757f4eb 100644
--- a/mods/content/government/away_sites/icarus/icarus-2.dmm
+++ b/mods/content/government/away_sites/icarus/icarus-2.dmm
@@ -27,7 +27,7 @@
/turf/floor/plating,
/area/icarus/vessel)
"ai" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"aj" = (
@@ -45,7 +45,7 @@
/area/icarus/vessel)
"am" = (
/obj/item/stack/material/ore/slag,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"an" = (
@@ -86,13 +86,13 @@
/turf/floor/tiled,
/area/icarus/vessel)
"au" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/decal/cleanable/blood,
/turf/floor/tiled,
/area/icarus/vessel)
"av" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"aw" = (
@@ -122,7 +122,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"aB" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/overmap/visitable/sector/icarus,
/turf/floor/tiled,
/area/icarus/vessel)
@@ -143,7 +143,7 @@
/area/icarus/vessel)
"aG" = (
/obj/random/loot,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"aH" = (
@@ -462,7 +462,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"bF" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
@@ -484,12 +484,12 @@
/turf/floor/tiled,
/area/icarus/vessel)
"bI" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/loot,
/turf/floor/tiled,
/area/icarus/vessel)
"bJ" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/turf/floor/tiled,
/area/icarus/vessel)
"bK" = (
@@ -585,7 +585,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cc" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
@@ -635,7 +635,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cj" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
@@ -647,7 +647,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cl" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/backpack/captain,
/obj/machinery/alarm{
alarm_id = "xenobio3_alarm";
@@ -657,7 +657,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cm" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/paper/icarus/crew_roster,
/obj/item/folder/blue,
/turf/floor/tiled,
@@ -678,7 +678,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cp" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
@@ -751,7 +751,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cA" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/drinks/bottle/whiskey,
/turf/floor/tiled,
/area/icarus/vessel)
@@ -768,12 +768,12 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cD" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/toy/ship_model,
/turf/floor/tiled,
/area/icarus/vessel)
"cE" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/action_figure,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -781,8 +781,8 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cF" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
@@ -903,7 +903,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"cW" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/disk/secret_project/science,
/turf/floor/tiled,
/area/icarus/vessel)
@@ -1054,7 +1054,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"dr" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/floor/tiled,
@@ -1075,7 +1075,7 @@
/turf/floor/tiled,
/area/icarus/vessel)
"du" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/flashlight/lamp,
/turf/floor/tiled,
/area/icarus/vessel)
@@ -1114,7 +1114,7 @@
dir = 4;
icon_state = "tube1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/vessel)
"dC" = (
@@ -1176,7 +1176,7 @@
/turf/wall,
/area/icarus/open)
"dL" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/random/trash,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -1209,7 +1209,7 @@
/turf/floor/tiled,
/area/icarus/open)
"dP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"dQ" = (
@@ -1249,7 +1249,7 @@
/turf/floor/tiled,
/area/icarus/open)
"dX" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
@@ -1285,9 +1285,9 @@
/turf/floor/plating,
/area/icarus/open)
"ed" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"ee" = (
@@ -1296,8 +1296,8 @@
/turf/floor/tiled,
/area/icarus/open)
"ef" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/floor/tiled,
/area/icarus/open)
"eg" = (
diff --git a/mods/content/government/icons/banner.dmi b/mods/content/government/icons/banner.dmi
deleted file mode 100644
index 88a40994837..00000000000
Binary files a/mods/content/government/icons/banner.dmi and /dev/null differ
diff --git a/mods/content/government/icons/banner_symbols.dmi b/mods/content/government/icons/banner_symbols.dmi
new file mode 100644
index 00000000000..ae958dd1f6d
Binary files /dev/null and b/mods/content/government/icons/banner_symbols.dmi differ
diff --git a/mods/content/government/items/clutter.dm b/mods/content/government/items/clutter.dm
index d59c38172e6..a59be6eed6e 100644
--- a/mods/content/government/items/clutter.dm
+++ b/mods/content/government/items/clutter.dm
@@ -18,13 +18,12 @@
/obj/item/banner/solgov
name = "\improper SolGov banner"
desc = "A banner emblazoned with the solar seal."
- icon = 'mods/content/government/icons/banner.dmi'
hung_desc = "The banner is emblazoned with a golden SolGov seal."
material_alteration = MAT_FLAG_ALTERATION_NONE
color = COLOR_NAVY_BLUE
+ trim_color = COLOR_GOLD
decals = list(
- "banner_trim" = COLOR_GOLD,
- "banner_solgov" = COLOR_WHITE
+ /decl/banner_symbol/government/sol = COLOR_WHITE
)
/obj/structure/banner_frame/virgov
@@ -37,10 +36,23 @@
name = "\improper VirGov banner"
hung_desc = "The banner is emblazoned with a white VirGov seal."
desc = "A banner emblazoned with the VirGov seal."
- icon = 'mods/content/government/icons/banner.dmi'
material_alteration = MAT_FLAG_ALTERATION_NONE
color = COLOR_NAVY_BLUE
+ trim_color = COLOR_GOLD
decals = list(
- "banner_trim" = COLOR_GOLD,
- "banner_virgov" = COLOR_WHITE
+ /decl/banner_symbol/government/vir = COLOR_WHITE
)
+
+/decl/banner_symbol/government
+ icon = 'mods/content/government/icons/banner_symbols.dmi'
+ abstract_type = /decl/banner_symbol/government
+
+/decl/banner_symbol/government/sol
+ name = "Sol insignia"
+ icon_state = "sol"
+ uid = "symbol_government_sol"
+
+/decl/banner_symbol/government/vir
+ name = "Vir insignia"
+ icon_state = "vir"
+ uid = "symbol_government_vir"
diff --git a/mods/content/inertia/_inertia.dm b/mods/content/inertia/_inertia.dm
new file mode 100644
index 00000000000..585525241f1
--- /dev/null
+++ b/mods/content/inertia/_inertia.dm
@@ -0,0 +1,4 @@
+/decl/modpack/inertia
+ name = "Ship Inertia Content"
+ desc = "This modpack adds support for inertia (throwing unsecured mobs) when ship thrusters fire, and adds an inertial dampener machine to counteract this."
+ nanoui_directory = "mods/content/inertia/nano_templates/"
\ No newline at end of file
diff --git a/mods/content/inertia/_inertia.dme b/mods/content/inertia/_inertia.dme
new file mode 100644
index 00000000000..2407851eca3
--- /dev/null
+++ b/mods/content/inertia/_inertia.dme
@@ -0,0 +1,13 @@
+#ifndef MODPACK_SHIP_INERTIA
+#define MODPACK_SHIP_INERTIA
+// BEGIN_INCLUDE
+#include "_inertia.dm"
+#include "fabrication.dm"
+#include "inertia_controller.dm"
+#include "inertia_failure.dm"
+#include "inertial_damper.dm"
+#include "ship_inertia.dm"
+#include "supplies.dm"
+#include "wires.dm"
+// END_INCLUDE
+#endif
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm b/mods/content/inertia/fabrication.dm
similarity index 80%
rename from code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm
rename to mods/content/inertia/fabrication.dm
index 3bf3f65219e..72a1837b513 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm
+++ b/mods/content/inertia/fabrication.dm
@@ -10,4 +10,7 @@
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/keyboard = 1,
/obj/item/stock_parts/power/apc/buildable = 1
- )
\ No newline at end of file
+ )
+
+/datum/fabricator_recipe/imprinter/circuit/inertial_damper
+ path = /obj/item/stock_parts/circuitboard/inertial_damper
diff --git a/icons/obj/machines/inertial_damper.dmi b/mods/content/inertia/icons/inertial_damper.dmi
similarity index 100%
rename from icons/obj/machines/inertial_damper.dmi
rename to mods/content/inertia/icons/inertial_damper.dmi
diff --git a/mods/content/inertia/inertia_controller.dm b/mods/content/inertia/inertia_controller.dm
new file mode 100644
index 00000000000..6b020a67b60
--- /dev/null
+++ b/mods/content/inertia/inertia_controller.dm
@@ -0,0 +1,24 @@
+/// A list of all inertial dampers in existence. This is only used for assigning them to ships at roundstart.
+var/global/list/ship_inertial_dampers = list()
+
+/datum/ship_inertial_damper
+ var/name = "ship inertial damper"
+ var/obj/machinery/holder
+
+/datum/ship_inertial_damper/proc/get_damping_strength(var/reliable)
+ return 0
+
+/datum/ship_inertial_damper/New(var/obj/machinery/_holder)
+ ..()
+ holder = _holder
+ global.ship_inertial_dampers += src
+
+/datum/ship_inertial_damper/Destroy()
+ global.ship_inertial_dampers -= src
+ // This may need some future optimization for servers with lots of ships.
+ // Just track what ship we're assigned to somehow, and then use that here.
+ // You'd also have to register it to clear that ref if/when the ship object is destroyed.
+ for(var/obj/effect/overmap/visitable/ship/S in SSshuttle.ships)
+ S.inertial_dampers -= src
+ holder = null
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/events/inertial_damper.dm b/mods/content/inertia/inertia_failure.dm
similarity index 78%
rename from code/modules/events/inertial_damper.dm
rename to mods/content/inertia/inertia_failure.dm
index e8d14585967..ce7d147f770 100644
--- a/code/modules/events/inertial_damper.dm
+++ b/mods/content/inertia/inertia_failure.dm
@@ -1,7 +1,18 @@
+// TODO: This should either be removed, or reworked to announce to specifically only the affected ship or its associated map.
/datum/event/inertial_damper
announceWhen = 5
check_proc = /proc/inertial_dampener_event_can_fire
+/datum/event_container/moderate/New()
+ ..()
+ available_events += new /datum/event_meta(
+ EVENT_LEVEL_MODERATE,
+ "Inertial Damper Recalibration",
+ /datum/event/inertial_damper,
+ 75,
+ list(ASSIGNMENT_ENGINEER = 25)
+ )
+
/datum/event/inertial_damper/setup()
endWhen = rand(45, 120)
diff --git a/code/modules/inertial_damper/inertial_damper.dm b/mods/content/inertia/inertial_damper.dm
similarity index 88%
rename from code/modules/inertial_damper/inertial_damper.dm
rename to mods/content/inertia/inertial_damper.dm
index 60eea516044..4cb9905a95c 100644
--- a/code/modules/inertial_damper/inertial_damper.dm
+++ b/mods/content/inertia/inertial_damper.dm
@@ -1,28 +1,6 @@
-#define WARNING_DELAY 80 //seconds between warnings.
-var/global/list/ship_inertial_dampers = list()
-
-/datum/ship_inertial_damper
- var/name = "ship inertial damper"
- var/obj/machinery/holder
-
-/datum/ship_inertial_damper/proc/get_damping_strength(var/reliable)
- return 0
-
-/datum/ship_inertial_damper/New(var/obj/machinery/_holder)
- ..()
- holder = _holder
- global.ship_inertial_dampers += src
-
-/datum/ship_inertial_damper/Destroy()
- global.ship_inertial_dampers -= src
- for(var/obj/effect/overmap/visitable/ship/S in SSshuttle.ships)
- S.inertial_dampers -= src
- holder = null
- . = ..()
-
/obj/machinery/inertial_damper
name = "inertial damper"
- icon = 'icons/obj/machines/inertial_damper.dmi'
+ icon = 'mods/content/inertia/icons/inertial_damper.dmi'
desc = "An inertial damper, a very large machine that balances against engine thrust to prevent harm to the crew."
density = TRUE
icon_state = "damper_on"
@@ -67,6 +45,9 @@ var/global/list/ship_inertial_dampers = list()
var/width = 3
var/height = 2
+ /// The cooldown between announcements that the inertial damping system is off.
+ var/const/WARNING_DELAY = 8 SECONDS
+
/obj/machinery/inertial_damper/Initialize()
. = ..()
SetBounds()
@@ -117,8 +98,10 @@ var/global/list/ship_inertial_dampers = list()
/obj/machinery/inertial_damper/proc/is_on()
return active
-/obj/machinery/inertial_damper/proc/get_damping_strength(var/reliable)
- if(hacked && !reliable)
+/// Returns either the true damping strength including modifiers (include_modifiers == TRUE),
+/// or just the value the damper is set to (include_modifiers == FALSE).
+/obj/machinery/inertial_damper/proc/get_damping_strength(var/include_modifiers)
+ if(hacked && !include_modifiers)
return initial(damping_strength)
return damping_strength + damping_modifier
@@ -203,5 +186,3 @@ var/global/list/ship_inertial_dampers = list()
/obj/machinery/inertial_damper/dismantle()
if((. = ..()))
update_nearby_tiles(locs)
-
-#undef WARNING_DELAY
\ No newline at end of file
diff --git a/nano/templates/inertial_damper.tmpl b/mods/content/inertia/nano_templates/inertial_damper.tmpl
similarity index 100%
rename from nano/templates/inertial_damper.tmpl
rename to mods/content/inertia/nano_templates/inertial_damper.tmpl
diff --git a/mods/content/inertia/ship_inertia.dm b/mods/content/inertia/ship_inertia.dm
new file mode 100644
index 00000000000..d903ef02aa1
--- /dev/null
+++ b/mods/content/inertia/ship_inertia.dm
@@ -0,0 +1,44 @@
+/obj/effect/overmap/visitable/ship
+ /// Whether or not this ship throws mobs on acceleration if dampers are inactive.
+ var/needs_dampers = FALSE
+ /// A list of inertial damping controller datums associated with this ship.
+ var/list/datum/ship_inertial_damper/inertial_dampers = list()
+ /// The current damping strength from all inertial dampers, recalculated every tick in the ship's Process().
+ var/tmp/damping_strength = null
+
+/obj/effect/overmap/visitable/ship/populate_sector_objects()
+ ..()
+ for(var/datum/ship_inertial_damper/I in global.ship_inertial_dampers)
+ if(check_ownership(I.holder))
+ inertial_dampers |= I
+
+// Theoretically there's no need to recalculate this every tick,
+// instead it should be recalculated any time damping strength changes
+// based only on the damper that changed.
+/obj/effect/overmap/visitable/ship/Process(wait, tick)
+ . = ..()
+ damping_strength = 0
+ for(var/datum/ship_inertial_damper/I in inertial_dampers)
+ var/obj/machinery/inertial_damper/ID = I.holder
+ damping_strength += ID.get_damping_strength(TRUE)
+
+/obj/effect/overmap/visitable/ship/adjust_speed(n_x, n_y)
+ . = ..()
+ var/magnitude = norm(n_x, n_y)
+ var/inertia_dir = magnitude >= 0 ? turn(fore_dir, 180) : fore_dir
+ var/inertia_strength = magnitude * 1e3
+ if(needs_dampers && damping_strength < inertia_strength)
+ var/list/areas_by_name = area_repository.get_areas_by_z_level()
+ for(var/area_name in areas_by_name)
+ var/area/A = areas_by_name[area_name]
+ if(area_belongs_to_zlevels(A, map_z))
+ A.throw_unbuckled_occupants(inertia_strength+2, inertia_strength, inertia_dir)
+
+// Add additional data to the engine console.
+/obj/machinery/computer/ship/engines/modify_ship_ui_data(list/ui_data)
+ var/damping_strength = 0
+ for(var/datum/ship_inertial_damper/inertia_controller in linked.inertial_dampers)
+ var/obj/machinery/inertial_damper/damper = inertia_controller.holder
+ damping_strength += damper.get_damping_strength(FALSE) // get only the level it's set to, not the actual level
+ ui_data["damping_strength"] = damping_strength
+ ui_data["needs_dampers"] = linked.needs_dampers
\ No newline at end of file
diff --git a/mods/content/inertia/supplies.dm b/mods/content/inertia/supplies.dm
new file mode 100644
index 00000000000..fbe975ab7cb
--- /dev/null
+++ b/mods/content/inertia/supplies.dm
@@ -0,0 +1,6 @@
+/decl/hierarchy/supply_pack/engineering/inertial_damper
+ name = "Equipment - inertial damper construction kit"
+ contains = list(/obj/item/stock_parts/circuitboard/inertial_damper, /obj/item/stock_parts/capacitor, /obj/item/stock_parts/micro_laser, /obj/item/stock_parts/console_screen)
+ containertype = /obj/structure/closet/crate/secure
+ containername = "inertial damper construction kit crate"
+ access = access_engine
\ No newline at end of file
diff --git a/code/datums/wires/inertial_damper.dm b/mods/content/inertia/wires.dm
similarity index 71%
rename from code/datums/wires/inertial_damper.dm
rename to mods/content/inertia/wires.dm
index 4ea708f73be..4cc74f8bc94 100644
--- a/code/datums/wires/inertial_damper.dm
+++ b/mods/content/inertia/wires.dm
@@ -7,11 +7,10 @@
new /datum/wire_description(DAMPER_WIRE_CONTROL, "This wire connects to the main control panel."),
new /datum/wire_description(DAMPER_WIRE_AICONTROL, "This wire connects to automated control systems.")
)
-
-var/global/const/DAMPER_WIRE_POWER = 1 // Cut to disable power input into the generator. Pulse does nothing. Mend to restore.
-var/global/const/DAMPER_WIRE_HACK = 2 // Pulse to hack the dampener, causing false display on engine consoles. Cut to unhack. Mend does nothing.
-var/global/const/DAMPER_WIRE_CONTROL = 4 // Cut to lock controls. Mend to unlock them. Pulse does nothing.
-var/global/const/DAMPER_WIRE_AICONTROL = 8 // Cut to disable AI control. Mend to restore.
+ var/const/DAMPER_WIRE_POWER = 1 // Cut to disable power input into the generator. Pulse does nothing. Mend to restore.
+ var/const/DAMPER_WIRE_HACK = 2 // Pulse to hack the dampener, causing false display on engine consoles. Cut to unhack. Mend does nothing.
+ var/const/DAMPER_WIRE_CONTROL = 4 // Cut to lock controls. Mend to unlock them. Pulse does nothing.
+ var/const/DAMPER_WIRE_AICONTROL = 8 // Cut to disable AI control. Mend to restore.
/datum/wires/inertial_damper/CanUse()
var/obj/machinery/inertial_damper/I = holder
diff --git a/mods/content/item_sharpening/_item_sharpening.dm b/mods/content/item_sharpening/_item_sharpening.dm
new file mode 100644
index 00000000000..3807839161b
--- /dev/null
+++ b/mods/content/item_sharpening/_item_sharpening.dm
@@ -0,0 +1,8 @@
+#define IE_PAR_SHARP_DAM_MULT "sharp_dam_mult"
+
+/decl/modpack/item_sharpening
+ name = "Item Sharpening"
+
+/obj/proc/get_sharpening_material()
+ RETURN_TYPE(/decl/material)
+ return get_material()
diff --git a/mods/content/item_sharpening/_item_sharpening.dme b/mods/content/item_sharpening/_item_sharpening.dme
new file mode 100644
index 00000000000..c9af243f5e9
--- /dev/null
+++ b/mods/content/item_sharpening/_item_sharpening.dme
@@ -0,0 +1,11 @@
+#ifndef MODPACK_ITEM_SHARPENING
+#define MODPACK_ITEM_SHARPENING
+// BEGIN_INCLUDE
+#include "_item_sharpening.dm"
+#include "blade_sharpen.dm"
+#include "effect_sharpen.dm"
+#include "grindstone.dm"
+#include "item_sharpen.dm"
+#include "whetstone.dm"
+//END_INCLUDE
+#endif
diff --git a/mods/content/item_sharpening/blade_sharpen.dm b/mods/content/item_sharpening/blade_sharpen.dm
new file mode 100644
index 00000000000..a46b8d69033
--- /dev/null
+++ b/mods/content/item_sharpening/blade_sharpen.dm
@@ -0,0 +1,24 @@
+/obj/item/bladed/proc/get_sharpened_effect_params()
+ return list(
+ (IE_CAT_DAMAGE) = list(
+ (IE_PAR_USES) = max(1, max(1, rand(round(10 * 0.3), round(20 * 0.6)))),
+ (IE_PAR_MAX_USES) = 30,
+ (IE_PAR_SHARP_DAM_MULT) = 0.25
+ ),
+ (IE_CAT_EXAMINE)
+ )
+
+/obj/item/bladed/Initialize(ml, material_key, _hilt_mat, _guard_mat, _pommel_mat)
+ var/list/sharpened_params = get_sharpened_effect_params()
+ if(length(sharpened_params))
+ add_item_effect(/decl/item_effect/sharpened, sharpened_params)
+ . = ..()
+ if(length(sharpened_params))
+ update_attack_force()
+ update_name()
+
+/obj/item/bladed/folding/try_sharpen_with(mob/user, obj/sharpening_with)
+ if(!open)
+ to_chat(user, SPAN_WARNING("You cannot sharpen \the [src] while it's closed!"))
+ return FALSE
+ return ..()
diff --git a/mods/content/item_sharpening/effect_sharpen.dm b/mods/content/item_sharpening/effect_sharpen.dm
new file mode 100644
index 00000000000..5847ac347b3
--- /dev/null
+++ b/mods/content/item_sharpening/effect_sharpen.dm
@@ -0,0 +1,21 @@
+/decl/item_effect/sharpened/modify_attack_damage(base_damage, obj/item/used_item, mob/user, list/parameters)
+ var/uses = LAZYACCESS(parameters, IE_PAR_USES)
+ if(uses <= 0)
+ return base_damage
+ . = (1 + ((uses / max(1, LAZYACCESS(parameters, IE_PAR_MAX_USES))) * LAZYACCESS(parameters, IE_PAR_SHARP_DAM_MULT)))
+
+/decl/item_effect/sharpened/expend_attack_use(obj/item/used_item, mob/user, list/parameters)
+ var/uses = LAZYACCESS(parameters, IE_PAR_USES)
+ uses = max(0, uses-1)
+ used_item.set_item_effect_parameter(src, IE_CAT_DAMAGE, IE_PAR_USES, uses)
+ if(uses == 0) // We've gone dull!
+ used_item.update_attack_force()
+ used_item.update_name()
+
+/decl/item_effect/sharpened/on_examined(obj/item/item, mob/user, distance, list/parameters)
+ if(distance <= 1)
+ var/uses = item.get_item_effect_parameter(src, IE_CAT_DAMAGE, IE_PAR_USES)
+ if(uses > 0)
+ to_chat(user, SPAN_NOTICE("\The [item] has been honed to a keen edge."))
+ else
+ to_chat(user, SPAN_NOTICE("\The [item] in need of sharpening."))
diff --git a/mods/content/item_sharpening/grindstone.dm b/mods/content/item_sharpening/grindstone.dm
new file mode 100644
index 00000000000..13d8f126052
--- /dev/null
+++ b/mods/content/item_sharpening/grindstone.dm
@@ -0,0 +1,46 @@
+// TODO: better sound effects for working.
+/obj/structure/working/grindstone
+ name = "grindstone"
+ desc = "A rotating section of coarse stone used to polish and sharpen metalwork like blades."
+ icon = 'mods/content/item_sharpening/icons/grindstone.dmi'
+ material_alteration = MAT_FLAG_ALTERATION_COLOR // Name and desc handled manually.
+ var/decl/material/stone_material = /decl/material/solid/quartz
+
+/obj/structure/working/grindstone/Initialize()
+ stone_material = GET_DECL(stone_material)
+ . = ..()
+ update_material_name()
+ update_material_desc()
+
+/obj/structure/working/grindstone/update_material_name(override_name)
+ . = ..()
+ if(stone_material)
+ SetName("[stone_material.adjective_name] [name]")
+
+/obj/structure/working/grindstone/update_material_desc(override_desc)
+ . = ..()
+ if(stone_material && istype(material))
+ desc = "[desc] This one is made from [stone_material.solid_name] with \a [material.adjective_name] frame."
+
+/obj/structure/working/grindstone/on_update_icon()
+ . = ..()
+ underlays = list(
+ overlay_image(icon, "[icon_state]-grindstone", stone_material.color, RESET_COLOR),
+ overlay_image(icon, "[initial(icon_state)]-backdrop")
+ )
+
+// Slightly wonky override, but this basically intercepts items being used on the grindstone.
+/obj/structure/working/grindstone/try_take_input(obj/item/used_item, mob/user, silent)
+ if(working)
+ if(!silent)
+ to_chat(user, SPAN_WARNING("\The [src] is already in use, please wait for it to be free."))
+ else
+ start_working()
+ used_item.try_sharpen_with(user, src)
+ if(!QDELETED(src) && working)
+ stop_working()
+ return TRUE
+
+/obj/structure/working/grindstone/get_sharpening_material()
+ RETURN_TYPE(/decl/material)
+ return stone_material
diff --git a/mods/content/item_sharpening/icons/grindstone.dmi b/mods/content/item_sharpening/icons/grindstone.dmi
new file mode 100644
index 00000000000..70b311b63b5
Binary files /dev/null and b/mods/content/item_sharpening/icons/grindstone.dmi differ
diff --git a/mods/content/item_sharpening/item_sharpen.dm b/mods/content/item_sharpening/item_sharpen.dm
new file mode 100644
index 00000000000..a72e928e5e8
--- /dev/null
+++ b/mods/content/item_sharpening/item_sharpen.dm
@@ -0,0 +1,49 @@
+/obj/item/update_name()
+ . = ..()
+ if(has_item_effect(/decl/item_effect/sharpened, IE_CAT_EXAMINE) && get_item_effect_parameter(/decl/item_effect/sharpened, IE_CAT_DAMAGE, IE_PAR_USES) <= 0)
+ SetName("dulled [name]")
+
+/obj/item/proc/can_sharpen_with(obj/sharpening_with)
+ if(!has_item_effect(/decl/item_effect/sharpened, IE_CAT_DAMAGE) || !material || !istype(sharpening_with))
+ return FALSE
+ var/list/params = get_item_effect_parameters(/decl/item_effect/sharpened, IE_CAT_DAMAGE)
+ if(!islist(params) || params[IE_PAR_USES] >= params[IE_PAR_MAX_USES])
+ return FALSE
+ return material.hardness <= sharpening_with.get_sharpening_material()?.hardness
+
+/obj/item/proc/sharpen_with(mob/user, obj/sharpen_with)
+ if(!has_item_effect(/decl/item_effect/sharpened, IE_CAT_DAMAGE))
+ return FALSE
+ var/list/params = get_item_effect_parameters(/decl/item_effect/sharpened, IE_CAT_DAMAGE)
+ if(!islist(params))
+ return FALSE
+ var/max_uses = params[IE_PAR_MAX_USES]
+ if(max_uses <= 0)
+ return FALSE
+ var/uses = params[IE_PAR_USES] || 0
+ if(uses >= max_uses)
+ return FALSE
+ set_item_effect_parameter(/decl/item_effect/sharpened, IE_CAT_DAMAGE, IE_PAR_USES, max_uses)
+ if(uses == 0) // We've sharpened up from dull.
+ update_attack_force()
+ update_name()
+ return TRUE
+
+/obj/item/proc/try_sharpen_with(mob/user, obj/sharpening_with)
+ if(!has_item_effect(/decl/item_effect/sharpened, IE_CAT_DAMAGE))
+ return FALSE
+ if(can_sharpen_with(sharpening_with))
+ user.visible_message("\The [user] begins sharpening \the [src] with \the [sharpening_with].")
+ playsound(loc, 'sound/foley/knife1.ogg', 50) // metallic scrape, TODO better sound
+ if(user.do_skilled(10 SECONDS, SKILL_WEAPONS, src, check_holding = TRUE) && !QDELETED(sharpening_with) && can_sharpen_with(sharpening_with) && sharpen_with(user, sharpening_with))
+ playsound(loc, 'sound/foley/knife1.ogg', 50)
+ user.visible_message("\The [user] sharpens \the [src] with \the [sharpening_with].")
+ else
+ to_chat(user, SPAN_WARNING("\The [src] cannot be [initial(sharp) ? "further sharpened" : "sharpened"] with \the [sharpening_with]."))
+ return TRUE
+
+// We don't override sharp because it's probably still pointy even if it isn't sharpened.
+/obj/item/has_edge()
+ . = ..()
+ if(. && has_item_effect(/decl/item_effect/sharpened, IE_CAT_DAMAGE))
+ return get_item_effect_parameter(/decl/item_effect/sharpened, IE_CAT_DAMAGE, IE_PAR_USES) > 0
diff --git a/mods/content/item_sharpening/whetstone.dm b/mods/content/item_sharpening/whetstone.dm
new file mode 100644
index 00000000000..cdfbb09eea5
--- /dev/null
+++ b/mods/content/item_sharpening/whetstone.dm
@@ -0,0 +1,18 @@
+/obj/item/whetstone
+ name = "whetstone"
+ desc = "A worn-down lozenge used to sharpen blades."
+ icon = 'icons/obj/items/striker.dmi' // TODO unique icon?
+ w_class = ITEM_SIZE_TINY
+ material_alteration = MAT_FLAG_ALTERATION_ALL
+ material = /decl/material/solid/quartz
+
+/obj/item/attackby(obj/item/used_item, mob/user)
+ if(istype(used_item, /obj/item/whetstone))
+ return try_sharpen_with(user, used_item)
+ return ..()
+
+/decl/loadout_option/utility/whetstone
+ name = "whetstone"
+ path = /obj/item/whetstone
+ loadout_flags = null
+ uid = "gear_utility_whetstone"
diff --git a/mods/content/matchmaking/matchmaker.dm b/mods/content/matchmaking/matchmaker.dm
index 0892ba4c827..ee7d49c6be8 100644
--- a/mods/content/matchmaking/matchmaker.dm
+++ b/mods/content/matchmaking/matchmaker.dm
@@ -1,14 +1,12 @@
-var/global/datum/matchmaker/matchmaker = new()
-
-/hook/roundstart/proc/matchmaking()
- matchmaker.do_matchmaking()
- return TRUE
+/decl/modpack/matchmaking/on_roundstart()
+ do_matchmaking()
-/datum/matchmaker/matchmaker/New()
+// It doesn't really matter when this registers during init as long as it's before roundstart.
+/decl/modpack/matchmaking/post_initialize()
. = ..()
events_repository.register_global(/decl/observ/player_latejoin, src, PROC_REF(matchmake_latejoiner))
-/datum/matchmaker/proc/matchmake_latejoiner(mob/living/character, datum/job/job)
+/decl/modpack/matchmaking/proc/matchmake_latejoiner(mob/living/character, datum/job/job)
if(character.mind && character.client?.prefs.relations.len)
for(var/T in character.client.prefs.relations)
var/TT = relation_types[T]
@@ -30,17 +28,17 @@ var/global/datum/matchmaker/matchmaker = new()
QDEL_NULL_LIST(known_connections)
. = ..()
-/datum/matchmaker
+/decl/modpack/matchmaking
var/list/relation_types = list()
var/list/relations = list()
-/datum/matchmaker/New()
- ..()
+/decl/modpack/matchmaking/Initialize()
+ . = ..()
for(var/T in subtypesof(/datum/relation/))
var/datum/relation/R = T
relation_types[initial(R.name)] = T
-/datum/matchmaker/proc/do_matchmaking()
+/decl/modpack/matchmaking/proc/do_matchmaking()
var/list/to_warn = list()
for(var/datum/relation/R in relations)
if(R.other)
@@ -51,13 +49,13 @@ var/global/datum/matchmaker/matchmaker = new()
for(var/mob/M in to_warn)
to_chat(M," You have new connections. Use \"See Relationship Info\" to view and finalize them.")
-/datum/matchmaker/proc/get_relationships(datum/mind/M, finalized_only)
+/decl/modpack/matchmaking/proc/get_relationships(datum/mind/M, finalized_only)
. = list()
for(var/datum/relation/R in relations)
if(R.holder == M && R.other && (R.finalized || !finalized_only))
. += R
-/datum/matchmaker/proc/get_relationships_between(datum/mind/holder, datum/mind/target, finalized_only)
+/decl/modpack/matchmaking/proc/get_relationships_between(datum/mind/holder, datum/mind/target, finalized_only)
. = list()
for(var/datum/relation/R in relations)
if(R.holder == holder && R.other && R.other.holder == target && (R.finalized || !finalized_only))
@@ -68,6 +66,7 @@ var/global/datum/matchmaker/matchmaker = new()
return
if(!source.mind || !user.mind || source.name != source.real_name)
return
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
if(!length(matchmaker.get_relationships_between(user.mind, source.mind, TRUE)))
return
return " You know them. More..."
@@ -89,10 +88,12 @@ var/global/datum/matchmaker/matchmaker = new()
..()
if(!can_connect_to)
can_connect_to = list(type)
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
matchmaker.relations += src
/datum/relation/proc/get_candidates()
.= list()
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
for(var/datum/relation/R in matchmaker.relations)
if(!valid_candidate(R.holder) || !can_connect(R))
continue
@@ -112,6 +113,7 @@ var/global/datum/matchmaker/matchmaker = new()
return TRUE
/datum/relation/proc/can_connect(var/datum/relation/R)
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
for(var/datum/relation/D in matchmaker.relations) //have to check all connections between us and them
if(D.holder == R.holder && D.other && D.other.holder == holder)
if(D.type in incompatible)
@@ -141,6 +143,7 @@ var/global/datum/matchmaker/matchmaker = new()
to_chat(holder.current," Your connection with [other.holder] is no more.")
to_chat(other.holder.current," Your connection with [holder] is no more.")
other.other = null
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
matchmaker.relations -= other
matchmaker.relations -= src
qdel(other)
@@ -187,6 +190,7 @@ var/global/datum/matchmaker/matchmaker = new()
set desc = "See what connections between people you know of."
set category = "IC"
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
var/list/relations = matchmaker.get_relationships(mind)
var/list/dat = list()
var/editable = 0
@@ -221,6 +225,7 @@ var/global/datum/matchmaker/matchmaker = new()
/mob/living/proc/see_relationship_info_with(var/mob/living/other)
if(!other.mind)
return
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
var/list/relations = matchmaker.get_relationships(mind,other.mind,TRUE)
var/list/dat = list(" [other]")
if(mind.gen_relations_info)
@@ -268,11 +273,12 @@ var/global/datum/matchmaker/matchmaker = new()
var/ok = "Close anyway"
ok = alert("HEY! You have some non-finalized relationships. You can terminate them if they do not fit your character, or edit the info tidbit that the other party is given. THIS IS YOUR ONLY CHANCE to do so - after you close the window, they won't be editable.","Finalize relationships","Return to edit", "Close anyway")
if(ok == "Close anyway")
+ var/decl/modpack/matchmaking/matchmaker = IMPLIED_DECL
var/list/relations = matchmaker.get_relationships(mind)
for(var/datum/relation/R in relations)
R.finalize()
- show_browser(usr,null, "window=relations")
+ show_browser(src,null, "window=relations")
else
- show_browser(usr,null, "window=relations")
+ show_browser(src,null, "window=relations")
return TOPIC_HANDLED
return ..()
\ No newline at end of file
diff --git a/mods/content/psionics/_psionics.dm b/mods/content/psionics/_psionics.dm
index 9092fd88ae6..fa58ed18f58 100644
--- a/mods/content/psionics/_psionics.dm
+++ b/mods/content/psionics/_psionics.dm
@@ -30,3 +30,12 @@
var/datum/ability_handler/psionics/psi = !is_preview_copy && istype(character) && character.get_ability_handler(/datum/ability_handler/psionics)
if(psi)
psi.update()
+
+/decl/ability/can_use_ability(mob/user, list/metadata, silent = FALSE)
+ . = ..()
+ if(. && is_supernatural)
+ var/spell_leech = user.disrupts_psionics()
+ if(spell_leech)
+ if(!silent)
+ to_chat(user, SPAN_WARNING("You try to marshal your energy, but find it leeched away by \the [spell_leech]!"))
+ return FALSE
diff --git a/mods/content/psionics/_psionics.dme b/mods/content/psionics/_psionics.dme
index 7bf5f2f680d..d52fd095516 100644
--- a/mods/content/psionics/_psionics.dme
+++ b/mods/content/psionics/_psionics.dme
@@ -9,7 +9,6 @@
#include "datum\jobs.dm"
#include "datum\mind.dm"
#include "datum\security_state.dm"
-#include "datum\spells.dm"
#include "datum\surgery.dm"
#include "datum\uplink.dm"
#include "datum\antagonists\foundation.dm"
@@ -17,6 +16,7 @@
#include "items\_items.dm"
#include "items\brain.dm"
#include "items\cerebro_enhancers.dm"
+#include "items\clothing.dm"
#include "items\coffee_cup.dm"
#include "items\foundation_implanter.dm"
#include "items\foundation_labcoat.dm"
@@ -26,7 +26,6 @@
#include "items\literature.dm"
#include "items\null_ammo.dm"
#include "items\nullrod.dm"
-#include "items\soulstone.dm"
#include "machines\psimeter.dm"
#include "machines\psimonitor.dm"
#include "system\subsystem_psi.dm"
@@ -53,7 +52,6 @@
#include "system\psionics\interface\ui.dm"
#include "system\psionics\interface\ui_hub.dm"
#include "system\psionics\interface\ui_toggles.dm"
-#include "system\psionics\mob\borer_power.dm"
#include "system\psionics\mob\mob.dm"
#include "system\psionics\mob\mob_assay.dm"
#include "system\psionics\mob\mob_interactions.dm"
diff --git a/mods/content/psionics/datum/antagonists/paramount.dm b/mods/content/psionics/datum/antagonists/paramount.dm
index 5d4da1a8775..d00ab6c5c97 100644
--- a/mods/content/psionics/datum/antagonists/paramount.dm
+++ b/mods/content/psionics/datum/antagonists/paramount.dm
@@ -17,7 +17,7 @@
name = "Special Role - Paramount Grandmaster"
head = /obj/item/clothing/head/helmet/space/psi_amp
uniform = /obj/item/clothing/jumpsuit/psysuit
- suit = /obj/item/clothing/suit/wizrobe/psypurple
+ suit = /obj/item/clothing/suit/paramount
shoes = /obj/item/clothing/shoes/jackboots
back = /obj/item/backpack/satchel
gloves = /obj/item/clothing/gloves/grey
diff --git a/mods/content/psionics/datum/chems.dm b/mods/content/psionics/datum/chems.dm
index c19db16e091..e859f0dc515 100644
--- a/mods/content/psionics/datum/chems.dm
+++ b/mods/content/psionics/datum/chems.dm
@@ -1,38 +1,7 @@
/decl/material/liquid/crystal_agent/do_material_check(var/mob/living/M)
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- . = (M.get_ability_handler(/datum/ability_handler/psionics) || (M.mind && wizards.is_antagonist(M.mind))) ? /decl/material/nullglass : ..()
+ . = !!M.get_ability_handler(/datum/ability_handler/psionics) ? /decl/material/nullglass : ..()
-/decl/material/liquid/glowsap/gleam/affect_overdose(mob/living/M, total_dose)
+/decl/material/liquid/glowsap/gleam/affect_overdose(mob/living/victim, total_dose)
..()
- var/datum/ability_handler/psionics/psi = M.get_ability_handler(/datum/ability_handler/psionics)
+ var/datum/ability_handler/psionics/psi = victim.get_ability_handler(/datum/ability_handler/psionics)
psi?.check_latency_trigger(30, "a [name] overdose")
-
-/decl/chemical_reaction/synthesis/nullglass
- name = "Soulstone"
- result = null
- required_reagents = list(/decl/material/liquid/blood = 15, /decl/material/liquid/crystal_agent = 1)
- result_amount = 1
-
-// TODO: #if defined(GAMEMODE_PACK_CULT) && defined(GAMEMODE_PACK_WIZARD)
-// once wizard is modpacked
-#ifdef GAMEMODE_PACK_CULT
-/decl/chemical_reaction/synthesis/nullglass/get_alternate_reaction_indicator(var/datum/reagents/holder)
- var/list/blood_data = REAGENT_DATA(holder, /decl/material/liquid/blood)
- var/weakref/donor_ref = LAZYACCESS(blood_data, DATA_BLOOD_DONOR)
- var/mob/living/donor = donor_ref?.resolve()
- var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard)
- . = (istype(donor) && (!!donor.get_ability_handler(/datum/ability_handler/psionics) || (donor.mind && wizards.is_antagonist(donor.mind))))
-#endif
-
-/decl/chemical_reaction/synthesis/nullglass/on_reaction(datum/reagents/holder, created_volume, reaction_flags, list/reaction_data)
- var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
- if(reaction_flags)
- #ifdef GAMEMODE_PACK_CULT
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/soulstone(location)
- #else
- CRASH("Nullglass alternate reaction triggered in [holder.my_atom] without cult modpack loaded!")
- #endif
- else
- for(var/i = 1, i <= created_volume*2, i++)
- new /obj/item/shard(location, /decl/material/solid/gemstone/crystal)
\ No newline at end of file
diff --git a/mods/content/psionics/datum/spells.dm b/mods/content/psionics/datum/spells.dm
deleted file mode 100644
index 7c02c352000..00000000000
--- a/mods/content/psionics/datum/spells.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/spell/cast_check(skipcharge = 0,mob/user = usr, var/list/targets) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
- var/spell_leech = user.disrupts_psionics()
- if(spell_leech)
- to_chat(user, SPAN_WARNING("You try to marshal your energy, but find it leeched away by \the [spell_leech]!"))
- return 0
- . = ..()
-
\ No newline at end of file
diff --git a/mods/content/psionics/items/clothing.dm b/mods/content/psionics/items/clothing.dm
new file mode 100644
index 00000000000..32e5786c244
--- /dev/null
+++ b/mods/content/psionics/items/clothing.dm
@@ -0,0 +1,16 @@
+/obj/item/clothing/suit/paramount
+ name = "purple robes"
+ desc = "Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash."
+ icon = 'icons/clothing/suits/wizard/psy.dmi'
+ gender = PLURAL
+ permeability_coefficient = 0.01
+ armor = list(
+ ARMOR_MELEE = ARMOR_MELEE_RESISTANT,
+ ARMOR_BULLET = ARMOR_BALLISTIC_SMALL,
+ ARMOR_LASER = ARMOR_LASER_SMALL,
+ ARMOR_ENERGY = ARMOR_ENERGY_SMALL,
+ ARMOR_BOMB = ARMOR_BOMB_PADDED,
+ ARMOR_BIO = ARMOR_BIO_MINOR,
+ ARMOR_RAD = ARMOR_RAD_MINOR
+ )
+ siemens_coefficient = 0.8
\ No newline at end of file
diff --git a/mods/content/psionics/items/soulstone.dm b/mods/content/psionics/items/soulstone.dm
deleted file mode 100644
index 3d984a0711c..00000000000
--- a/mods/content/psionics/items/soulstone.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifdef GAMEMODE_PACK_CULT
-/obj/item/soulstone/disrupts_psionics()
- . = !full ? src : FALSE
-
-/obj/item/soulstone/shatter()
- for(var/i=1 to rand(2,5))
- new /obj/item/shard(get_turf(src), /decl/material/nullglass)
- . = ..()
-
-/obj/item/soulstone/withstand_psi_stress(var/stress, var/atom/source)
- . = ..(stress, source)
- if(. > 0)
- . = max(0, . - rand(2,5))
- shatter()
-#endif
\ No newline at end of file
diff --git a/mods/content/psionics/system/psionics/complexus/complexus.dm b/mods/content/psionics/system/psionics/complexus/complexus.dm
index 990edecd13e..0ce5f4cfc18 100644
--- a/mods/content/psionics/system/psionics/complexus/complexus.dm
+++ b/mods/content/psionics/system/psionics/complexus/complexus.dm
@@ -1,5 +1,4 @@
/datum/ability_handler/psionics
-
var/announced = FALSE // Whether or not we have been announced to our holder yet.
var/suppressed = TRUE // Whether or not we are suppressing our psi powers.
var/use_psi_armour = TRUE // Whether or not we should automatically deflect/block incoming damage.
diff --git a/mods/content/psionics/system/psionics/equipment/psipower.dm b/mods/content/psionics/system/psionics/equipment/psipower.dm
index 3d850f27cf2..8aa0afca352 100644
--- a/mods/content/psionics/system/psionics/equipment/psipower.dm
+++ b/mods/content/psionics/system/psionics/equipment/psipower.dm
@@ -15,7 +15,9 @@
. = ..()
/obj/item/ability/psionic/attack_self(var/mob/user)
- sound_to(owner, 'sound/effects/psi/power_fail.ogg')
+ var/mob/owner = owner_ref?.resolve()
+ if(istype(owner))
+ sound_to(owner, 'sound/effects/psi/power_fail.ogg')
. = ..()
/obj/item/ability/psionic/use_on_mob(mob/living/target, mob/living/user, animate = TRUE)
@@ -31,6 +33,7 @@
. = ..(target, user, proximity)
/obj/item/ability/psionic/Process()
+ var/mob/living/owner = owner_ref?.resolve()
var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics)
psi?.spend_power(maintain_cost, backblast_on_failure = FALSE)
if((!owner || owner.do_psionics_check(maintain_cost, owner) || loc != owner || !(src in owner.get_held_items())) && !QDELETED(src))
diff --git a/mods/content/psionics/system/psionics/equipment/psipower_blade.dm b/mods/content/psionics/system/psionics/equipment/psipower_blade.dm
index fd8b4f947c8..94163e32012 100644
--- a/mods/content/psionics/system/psionics/equipment/psipower_blade.dm
+++ b/mods/content/psionics/system/psionics/equipment/psipower_blade.dm
@@ -1,8 +1,8 @@
/obj/item/ability/psionic/psiblade
name = "psychokinetic slash"
_base_attack_force = 10
- sharp = 1
- edge = 1
+ sharp = TRUE
+ edge = TRUE
maintain_cost = 1
icon_state = "psiblade_short"
diff --git a/mods/content/psionics/system/psionics/equipment/psipower_tk.dm b/mods/content/psionics/system/psionics/equipment/psipower_tk.dm
index 787d2a59050..ee529a0d922 100644
--- a/mods/content/psionics/system/psionics/equipment/psipower_tk.dm
+++ b/mods/content/psionics/system/psionics/equipment/psipower_tk.dm
@@ -9,6 +9,7 @@
. = ..()
/obj/item/ability/psionic/telekinesis/Process()
+ var/mob/living/owner = owner_ref?.resolve()
var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics)
if(!focus || !isturf(focus.loc) || get_dist(get_turf(focus), get_turf(owner)) > psi?.get_rank(PSI_PSYCHOKINESIS))
owner.drop_from_inventory(src)
@@ -30,6 +31,7 @@
else
return FALSE
+ var/mob/living/owner = owner_ref?.resolve()
var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics)
if(_focus.anchored || (check_paramount && psi?.get_rank(PSI_PSYCHOKINESIS) < PSI_RANK_PARAMOUNT))
focus = _focus
@@ -88,7 +90,7 @@
else
if(!focus.anchored)
var/user_rank = psi?.get_rank(PSI_PSYCHOKINESIS)
- focus.throw_at(target, user_rank*2, user_rank*10, owner)
+ focus.throw_at(target, user_rank*2, user_rank*10, owner_ref?.resolve())
sleep(1)
sparkle()
@@ -104,5 +106,4 @@
O.icon = 'icons/effects/effects.dmi'
O.icon_state = "nothing"
flick("empdisable",O)
- sleep(5)
- qdel(O)
+ QDEL_IN(src, 0.5 SECONDS)
diff --git a/mods/content/psionics/system/psionics/faculties/_faculty.dm b/mods/content/psionics/system/psionics/faculties/_faculty.dm
index 8c31791010a..03d9fc7a236 100644
--- a/mods/content/psionics/system/psionics/faculties/_faculty.dm
+++ b/mods/content/psionics/system/psionics/faculties/_faculty.dm
@@ -1,11 +1,16 @@
/decl/psionic_faculty
var/id
var/name
- var/associated_intent
+ var/associated_intent_flag
var/list/armour_types = list()
var/list/powers = list()
+/decl/psionic_faculty/validate()
+ . = ..()
+ if(!isnull(associated_intent_flag) && !isnum(associated_intent_flag))
+ . += "non-bitflag associated_intent_flag value set"
+
/decl/psionic_faculty/Initialize()
. = ..()
for(var/atype in armour_types)
- SSpsi.armour_faculty_by_type[atype] = id
\ No newline at end of file
+ SSpsi.armour_faculty_by_type[atype] = id
diff --git a/mods/content/psionics/system/psionics/faculties/coercion.dm b/mods/content/psionics/system/psionics/faculties/coercion.dm
index 0cddc48bf32..8a92f058ad1 100644
--- a/mods/content/psionics/system/psionics/faculties/coercion.dm
+++ b/mods/content/psionics/system/psionics/faculties/coercion.dm
@@ -1,7 +1,7 @@
/decl/psionic_faculty/coercion
id = PSI_COERCION
name = "Coercion"
- associated_intent = I_DISARM
+ associated_intent_flag = I_FLAG_DISARM
armour_types = list(PSIONIC)
/decl/psionic_power/coercion
@@ -179,7 +179,7 @@
return TRUE
if(accepted_glamour == "Yes")
- to_chat(user, SPAN_DANGER("You layer a glamour across the \the [target]'s senses, beguiling them to unwittingly follow your commands."))
+ to_chat(user, SPAN_DANGER("You layer a glamour across \the [target]'s senses, beguiling them to unwittingly follow your commands."))
to_chat(target, SPAN_DANGER("You have been ensnared by \the [user]'s glamour!"))
beguiled.add_antagonist(target.mind, new_controller = user)
else
diff --git a/mods/content/psionics/system/psionics/faculties/energistics.dm b/mods/content/psionics/system/psionics/faculties/energistics.dm
index 4deb52912db..2396a1e7119 100644
--- a/mods/content/psionics/system/psionics/faculties/energistics.dm
+++ b/mods/content/psionics/system/psionics/faculties/energistics.dm
@@ -1,7 +1,7 @@
/decl/psionic_faculty/energistics
id = PSI_ENERGISTICS
name = "Energistics"
- associated_intent = I_HURT
+ associated_intent_flag = I_FLAG_HARM
armour_types = list(ARMOR_BOMB, ARMOR_LASER, ARMOR_ENERGY)
/decl/psionic_power/energistics
diff --git a/mods/content/psionics/system/psionics/faculties/psychokinesis.dm b/mods/content/psionics/system/psionics/faculties/psychokinesis.dm
index 8ab5976c74f..8d0dd5c61f8 100644
--- a/mods/content/psionics/system/psionics/faculties/psychokinesis.dm
+++ b/mods/content/psionics/system/psionics/faculties/psychokinesis.dm
@@ -1,7 +1,7 @@
/decl/psionic_faculty/psychokinesis
id = PSI_PSYCHOKINESIS
name = "Psychokinesis"
- associated_intent = I_GRAB
+ associated_intent_flag = I_FLAG_GRAB
armour_types = list(ARMOR_MELEE, ARMOR_BULLET)
/decl/psionic_power/psychokinesis
@@ -19,7 +19,7 @@
admin_log = FALSE
/decl/psionic_power/psychokinesis/psiblade/invoke(var/mob/living/user, var/mob/living/target)
- if((target && user != target) || user.a_intent != I_HURT)
+ if((target && user != target) || !user.check_intent(I_FLAG_HARM))
return FALSE
. = ..()
if(.)
@@ -43,7 +43,7 @@
admin_log = FALSE
/decl/psionic_power/psychokinesis/tinker/invoke(var/mob/living/user, var/mob/living/target)
- if((target && user != target) || user.a_intent != I_HELP)
+ if((target && user != target) || !user.check_intent(I_FLAG_HELP))
return FALSE
. = ..()
if(.)
@@ -64,7 +64,7 @@
)
/decl/psionic_power/psychokinesis/telekinesis/invoke(var/mob/living/user, var/mob/living/target)
- if(user.a_intent != I_GRAB)
+ if(!user.check_intent(I_FLAG_GRAB))
return FALSE
. = ..()
if(.)
diff --git a/mods/content/psionics/system/psionics/faculties/redaction.dm b/mods/content/psionics/system/psionics/faculties/redaction.dm
index 97354f41a05..8879259a72a 100644
--- a/mods/content/psionics/system/psionics/faculties/redaction.dm
+++ b/mods/content/psionics/system/psionics/faculties/redaction.dm
@@ -1,7 +1,7 @@
/decl/psionic_faculty/redaction
id = PSI_REDACTION
name = "Redaction"
- associated_intent = I_HELP
+ associated_intent_flag = I_FLAG_HELP
armour_types = list(ARMOR_BIO, ARMOR_RAD)
/decl/psionic_power/redaction
diff --git a/mods/content/psionics/system/psionics/interface/ui.dm b/mods/content/psionics/system/psionics/interface/ui.dm
index 4e8adfa83bd..3d8255b2030 100644
--- a/mods/content/psionics/system/psionics/interface/ui.dm
+++ b/mods/content/psionics/system/psionics/interface/ui.dm
@@ -1,14 +1,17 @@
/obj/screen/psi
icon = 'mods/content/psionics/icons/psi.dmi'
requires_ui_style = FALSE
+ apply_screen_overlay = FALSE
var/hidden = TRUE
+ var/can_hide = TRUE
/obj/screen/psi/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat)
. = ..()
update_icon()
/obj/screen/psi/on_update_icon()
- if(hidden)
+ ..()
+ if(hidden && can_hide)
set_invisibility(INVISIBILITY_ABSTRACT)
else
set_invisibility(INVISIBILITY_NONE)
\ No newline at end of file
diff --git a/mods/content/psionics/system/psionics/interface/ui_hub.dm b/mods/content/psionics/system/psionics/interface/ui_hub.dm
index cd87e528211..97c5ba41adc 100644
--- a/mods/content/psionics/system/psionics/interface/ui_hub.dm
+++ b/mods/content/psionics/system/psionics/interface/ui_hub.dm
@@ -6,6 +6,7 @@
maptext_x = 6
maptext_y = -8
requires_ui_style = FALSE
+ can_hide = FALSE
var/image/on_cooldown
var/list/components
@@ -19,6 +20,7 @@
START_PROCESSING(SSprocessing, src)
/obj/screen/psi/hub/on_update_icon()
+ ..()
var/mob/living/owner = owner_ref?.resolve()
var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics)
icon_state = psi?.suppressed ? "psi_suppressed" : "psi_active"
diff --git a/mods/content/psionics/system/psionics/interface/ui_toggles.dm b/mods/content/psionics/system/psionics/interface/ui_toggles.dm
index 5585ac5d802..93c34b82a27 100644
--- a/mods/content/psionics/system/psionics/interface/ui_toggles.dm
+++ b/mods/content/psionics/system/psionics/interface/ui_toggles.dm
@@ -29,6 +29,7 @@
name = "Show/Hide Psi UI"
icon_state = "arrow_left"
requires_ui_style = FALSE
+ can_hide = FALSE
var/obj/screen/psi/hub/controller
/obj/screen/psi/toggle_psi_menu/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat, obj/screen/psi/hub/_controller)
@@ -43,6 +44,7 @@
controller.update_icon()
/obj/screen/psi/toggle_psi_menu/on_update_icon()
+ ..()
if(hidden)
icon_state = "arrow_left"
else
diff --git a/mods/content/psionics/system/psionics/mob/mob.dm b/mods/content/psionics/system/psionics/mob/mob.dm
index c85902acde4..15cc7914742 100644
--- a/mods/content/psionics/system/psionics/mob/mob.dm
+++ b/mods/content/psionics/system/psionics/mob/mob.dm
@@ -1,4 +1,5 @@
/datum/ability_handler/psionics/refresh_login()
+ . = ..()
update(TRUE)
if(!suppressed)
show_auras()
diff --git a/mods/content/psionics/system/psionics/mob/mob_interactions.dm b/mods/content/psionics/system/psionics/mob/mob_interactions.dm
index fcc01c79fa6..aba8eeb102c 100644
--- a/mods/content/psionics/system/psionics/mob/mob_interactions.dm
+++ b/mods/content/psionics/system/psionics/mob/mob_interactions.dm
@@ -6,8 +6,6 @@
power.handle_post_power(user, target); \
if(istype(result)) { \
sound_to(user, sound('sound/effects/psi/power_evoke.ogg')); \
- LAZYADD(ability_items, result); \
- user.put_in_hands(result); \
} \
return TRUE; \
} \
@@ -25,18 +23,22 @@
return TRUE
/datum/ability_handler/psionics/do_grabbed_invocation(mob/user, atom/target)
- INVOKE_PSI_POWERS(user, get_grab_powers(SSpsi.faculties_by_intent[user.a_intent]), target)
+ INVOKE_PSI_POWERS(user, get_grab_powers(SSpsi.get_faculty_by_intent(user.get_intent())), target)
/datum/ability_handler/psionics/can_do_melee_invocation(mob/user, atom/target)
+ SHOULD_CALL_PARENT(FALSE)
return TRUE
/datum/ability_handler/psionics/do_melee_invocation(mob/user, atom/target)
- INVOKE_PSI_POWERS(user, get_melee_powers(SSpsi.faculties_by_intent[user.a_intent]), target)
+ SHOULD_CALL_PARENT(FALSE)
+ INVOKE_PSI_POWERS(user, get_melee_powers(SSpsi.get_faculty_by_intent(user.get_intent())), target)
/datum/ability_handler/psionics/can_do_ranged_invocation(mob/user, atom/target)
+ SHOULD_CALL_PARENT(FALSE)
return TRUE
/datum/ability_handler/psionics/do_ranged_invocation(mob/user, atom/target)
- INVOKE_PSI_POWERS(user, get_ranged_powers(SSpsi.faculties_by_intent[user.a_intent]), target)
+ SHOULD_CALL_PARENT(FALSE)
+ INVOKE_PSI_POWERS(user, get_ranged_powers(SSpsi.get_faculty_by_intent(user.get_intent())), target)
-#undef INVOKE_PSI_POWERS
\ No newline at end of file
+#undef INVOKE_PSI_POWERS
diff --git a/mods/content/psionics/system/subsystem_psi.dm b/mods/content/psionics/system/subsystem_psi.dm
index 806f911873b..e6621835ce9 100644
--- a/mods/content/psionics/system/subsystem_psi.dm
+++ b/mods/content/psionics/system/subsystem_psi.dm
@@ -5,13 +5,27 @@ PROCESSING_SUBSYSTEM_DEF(psi)
priority = SS_PRIORITY_PSYCHICS
flags = SS_POST_FIRE_TIMING | SS_BACKGROUND
- var/list/faculties_by_id = list()
- var/list/faculties_by_name = list()
- var/list/all_aura_images = list()
- var/list/psi_dampeners = list()
- var/list/psi_monitors = list()
+ var/list/faculties_by_id = list()
+ var/list/faculties_by_name = list()
+ var/list/all_aura_images = list()
+ var/list/psi_dampeners = list()
+ var/list/psi_monitors = list()
var/list/armour_faculty_by_type = list()
- var/list/faculties_by_intent = list()
+ var/list/faculties_by_intent = new(I_FLAG_ALL)
+
+/datum/controller/subsystem/processing/psi/proc/get_faculty_by_intent(decl/intent/intent)
+ var/static/list/intent_flags = list(
+ I_FLAG_HELP,
+ I_FLAG_DISARM,
+ I_FLAG_GRAB,
+ I_FLAG_HARM
+ )
+ . = faculties_by_intent[intent.intent_flags]
+ if(!.)
+ for(var/flag in intent_flags)
+ if(flag & intent.intent_flags)
+ . = faculties_by_intent[flag]
+ faculties_by_intent[intent.intent_flags] = .
/datum/controller/subsystem/processing/psi/proc/get_faculty(var/faculty)
return faculties_by_name[faculty] || faculties_by_id[faculty]
@@ -24,7 +38,7 @@ PROCESSING_SUBSYSTEM_DEF(psi)
var/decl/psionic_faculty/faculty = faculties[ftype]
faculties_by_id[faculty.id] = faculty
faculties_by_name[faculty.name] = faculty
- faculties_by_intent[faculty.associated_intent] = faculty.id
+ faculties_by_intent[faculty.associated_intent_flag] = faculty.id
var/list/powers = decls_repository.get_decls_of_subtype(/decl/psionic_power)
for(var/ptype in powers)
diff --git a/mods/content/standard_jobs/_standard_jobs.dm b/mods/content/standard_jobs/_standard_jobs.dm
new file mode 100644
index 00000000000..f19759923d4
--- /dev/null
+++ b/mods/content/standard_jobs/_standard_jobs.dm
@@ -0,0 +1,2 @@
+/decl/modpack/standard_jobs
+ name = "Standard SS13 Jobs"
diff --git a/mods/content/standard_jobs/_standard_jobs.dme b/mods/content/standard_jobs/_standard_jobs.dme
new file mode 100644
index 00000000000..a17a75892bb
--- /dev/null
+++ b/mods/content/standard_jobs/_standard_jobs.dme
@@ -0,0 +1,31 @@
+#ifndef MODPACK_STANDARD_JOBS
+#define MODPACK_STANDARD_JOBS
+// BEGIN_INCLUDE
+#include "_standard_jobs.dm"
+#include "departments\civilian.dm"
+#include "departments\command.dm"
+#include "departments\engineering.dm"
+#include "departments\medical.dm"
+#include "departments\miscellaneous.dm"
+#include "departments\science.dm"
+#include "departments\security.dm"
+#include "departments\service.dm"
+#include "departments\supply.dm"
+#include "jobs\_job.dm"
+#include "jobs\captain.dm"
+#include "jobs\civilian.dm"
+#include "jobs\engineering.dm"
+#include "jobs\medical.dm"
+#include "jobs\science.dm"
+#include "jobs\security.dm"
+#include "jobs\synthetics.dm"
+#include "outfits\cargo.dm"
+#include "outfits\civilian.dm"
+#include "outfits\command.dm"
+#include "outfits\engineering.dm"
+#include "outfits\medical.dm"
+#include "outfits\pda.dm"
+#include "outfits\science.dm"
+#include "outfits\security.dm"
+// END_INCLUDE
+#endif
diff --git a/mods/content/standard_jobs/departments/civilian.dm b/mods/content/standard_jobs/departments/civilian.dm
new file mode 100644
index 00000000000..3cda485f4bb
--- /dev/null
+++ b/mods/content/standard_jobs/departments/civilian.dm
@@ -0,0 +1,4 @@
+/decl/department/civilian
+ name = "Civilian"
+ display_priority = 1
+ display_color = "#dddddd"
diff --git a/mods/content/standard_jobs/departments/command.dm b/mods/content/standard_jobs/departments/command.dm
new file mode 100644
index 00000000000..fa842fb881c
--- /dev/null
+++ b/mods/content/standard_jobs/departments/command.dm
@@ -0,0 +1,14 @@
+/decl/department/command
+ name = "Command"
+ colour = "#800080"
+ display_priority = 5
+ display_color = "#ccccff"
+
+/obj/machinery/network/pager
+ department = /decl/department/command
+
+/decl/department/support
+ name = "Support"
+ announce_channel = "Command"
+ colour = "#800080"
+ display_color = "#87ceeb"
diff --git a/mods/content/standard_jobs/departments/engineering.dm b/mods/content/standard_jobs/departments/engineering.dm
new file mode 100644
index 00000000000..252b4de16a6
--- /dev/null
+++ b/mods/content/standard_jobs/departments/engineering.dm
@@ -0,0 +1,12 @@
+/decl/department/engineering
+ name = "Engineering"
+ announce_channel = "Engineering"
+ colour = "#ffa500"
+ display_priority = 4
+ display_color = "#fff5cc"
+
+/obj/item/robot_module/engineering
+ associated_department = /decl/department/engineering
+
+/obj/machinery/network/pager/engineering
+ department = /decl/department/engineering
diff --git a/mods/content/standard_jobs/departments/medical.dm b/mods/content/standard_jobs/departments/medical.dm
new file mode 100644
index 00000000000..01506ddd5d4
--- /dev/null
+++ b/mods/content/standard_jobs/departments/medical.dm
@@ -0,0 +1,13 @@
+/decl/department/medical
+ name = "Medical"
+ goals = list(/datum/goal/department/medical_fatalities)
+ announce_channel = "Medical"
+ colour = "#008000"
+ display_priority = 2
+ display_color = "#ffeef0"
+
+/obj/item/robot_module/medical
+ associated_department = /decl/department/medical
+
+/obj/machinery/network/pager/medical
+ department = /decl/department/medical
diff --git a/mods/content/standard_jobs/departments/miscellaneous.dm b/mods/content/standard_jobs/departments/miscellaneous.dm
new file mode 100644
index 00000000000..19149216fdb
--- /dev/null
+++ b/mods/content/standard_jobs/departments/miscellaneous.dm
@@ -0,0 +1,4 @@
+/decl/department/miscellaneous
+ name = "Misc"
+ display_priority = -1
+ display_color = "#ccffcc"
diff --git a/mods/content/standard_jobs/departments/science.dm b/mods/content/standard_jobs/departments/science.dm
new file mode 100644
index 00000000000..47ebb9c2130
--- /dev/null
+++ b/mods/content/standard_jobs/departments/science.dm
@@ -0,0 +1,18 @@
+/decl/department/science
+ name = "Science"
+ goals = list(/datum/goal/department/extract_slime_cores)
+ announce_channel = "Science"
+ colour = "#a65ba6"
+ display_color = "#e79fff"
+
+/obj/item/robot_module/research
+ associated_department = /decl/department/science
+
+/obj/machinery/network/pager/science
+ department = /decl/department/science
+
+/decl/department/exploration
+ name = "Exploration"
+ announce_channel = "Exploration"
+ colour = "#68099e"
+ display_color = "#b784a7"
diff --git a/mods/content/standard_jobs/departments/security.dm b/mods/content/standard_jobs/departments/security.dm
new file mode 100644
index 00000000000..e758218721b
--- /dev/null
+++ b/mods/content/standard_jobs/departments/security.dm
@@ -0,0 +1,12 @@
+/decl/department/security
+ name = "Security"
+ announce_channel = "Security"
+ colour = "#dd0000"
+ display_priority = 3
+ display_color = "#ffddf0"
+
+/obj/item/robot_module/security
+ associated_department = /decl/department/security
+
+/obj/machinery/network/pager/security
+ department = /decl/department/security
diff --git a/mods/content/standard_jobs/departments/service.dm b/mods/content/standard_jobs/departments/service.dm
new file mode 100644
index 00000000000..b82c1c6deaf
--- /dev/null
+++ b/mods/content/standard_jobs/departments/service.dm
@@ -0,0 +1,6 @@
+
+/decl/department/service
+ name = "Service"
+ announce_channel = "Service"
+ colour = "#88b764"
+ display_color = "#d0f0c0"
diff --git a/mods/content/standard_jobs/departments/supply.dm b/mods/content/standard_jobs/departments/supply.dm
new file mode 100644
index 00000000000..c71d4327554
--- /dev/null
+++ b/mods/content/standard_jobs/departments/supply.dm
@@ -0,0 +1,8 @@
+/decl/department/supply
+ name = "Supply"
+ announce_channel = "Supply"
+ colour = "#bb9040"
+ display_color = "#f0e68c"
+
+/obj/machinery/network/pager/cargo
+ department = /decl/department/supply
diff --git a/mods/content/standard_jobs/icons/hud.dmi b/mods/content/standard_jobs/icons/hud.dmi
new file mode 100644
index 00000000000..ccea1d4a211
Binary files /dev/null and b/mods/content/standard_jobs/icons/hud.dmi differ
diff --git a/mods/content/standard_jobs/jobs/_job.dm b/mods/content/standard_jobs/jobs/_job.dm
new file mode 100644
index 00000000000..6869734493a
--- /dev/null
+++ b/mods/content/standard_jobs/jobs/_job.dm
@@ -0,0 +1,3 @@
+/datum/job/standard
+ abstract_type = /datum/job/standard
+ hud_icon = 'mods/content/standard_jobs/icons/hud.dmi'
diff --git a/maps/exodus/jobs/captain.dm b/mods/content/standard_jobs/jobs/captain.dm
similarity index 93%
rename from maps/exodus/jobs/captain.dm
rename to mods/content/standard_jobs/jobs/captain.dm
index c0782377252..d7abb62e0cd 100644
--- a/maps/exodus/jobs/captain.dm
+++ b/mods/content/standard_jobs/jobs/captain.dm
@@ -1,5 +1,6 @@
-/datum/job/captain
+/datum/job/standard/captain
title = "Captain"
+ hud_icon_state = "hudcaptain"
head_position = 1
department_types = list(/decl/department/command)
total_positions = 1
@@ -33,16 +34,17 @@
/datum/computer_file/program/reports
)
-/datum/job/captain/equip_job(var/mob/living/human/H)
+/datum/job/standard/captain/equip_job(var/mob/living/human/H)
. = ..()
if(.)
H.implant_loyalty(src)
-/datum/job/captain/get_access()
+/datum/job/standard/captain/get_access()
return get_all_station_access()
-/datum/job/hop
+/datum/job/standard/hop
title = "Head of Personnel"
+ hud_icon_state = "hudhop"
head_position = 1
department_types = list(
/decl/department/command,
diff --git a/maps/exodus/jobs/civilian.dm b/mods/content/standard_jobs/jobs/civilian.dm
similarity index 89%
rename from maps/exodus/jobs/civilian.dm
rename to mods/content/standard_jobs/jobs/civilian.dm
index 90d800d0b6b..1ce8eeb39d0 100644
--- a/maps/exodus/jobs/civilian.dm
+++ b/mods/content/standard_jobs/jobs/civilian.dm
@@ -1,5 +1,6 @@
-/datum/job/assistant
+/datum/job/standard/assistant
title = "Assistant"
+ hud_icon_state = "hudassistant"
total_positions = -1
spawn_positions = -1
supervisors = "absolutely everyone"
@@ -10,13 +11,14 @@
outfit_type = /decl/outfit/job/generic/assistant
department_types = list(/decl/department/civilian)
-/datum/job/assistant/get_access()
+/datum/job/standard/assistant/get_access()
if(get_config_value(/decl/config/toggle/assistant_maint))
return list(access_maint_tunnels)
return list()
-/datum/job/chaplain
+/datum/job/standard/chaplain
title = "Chaplain"
+ hud_icon_state = "hudchaplain" // TODO: not always a crucifix
department_types = list(/decl/department/civilian)
total_positions = 1
spawn_positions = 1
@@ -42,9 +44,10 @@
software_on_spawn = list(/datum/computer_file/program/reports)
//Food
-/datum/job/bartender
+/datum/job/standard/bartender
title = "Bartender"
department_types = list(/decl/department/service)
+ hud_icon_state = "hudbartender"
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
@@ -53,6 +56,11 @@
access_bar,
access_kitchen
)
+ minimal_access = list(
+ access_hydroponics,
+ access_bar,
+ access_kitchen
+ )
minimal_access = list(access_bar)
alt_titles = list("Barista")
outfit_type = /decl/outfit/job/service/bartender
@@ -63,8 +71,9 @@
SKILL_CHEMISTRY = SKILL_BASIC
)
-/datum/job/chef
+/datum/job/standard/chef
title = "Chef"
+ hud_icon_state = "hudchef"
department_types = list(/decl/department/service)
total_positions = 2
spawn_positions = 2
@@ -84,8 +93,9 @@
SKILL_CHEMISTRY = SKILL_BASIC
)
-/datum/job/hydro
+/datum/job/standard/hydro
title = "Gardener"
+ hud_icon_state = "hudgardener"
department_types = list(/decl/department/service)
total_positions = 2
spawn_positions = 1
@@ -106,8 +116,9 @@
event_categories = list(ASSIGNMENT_GARDENER)
//Cargo
-/datum/job/qm
+/datum/job/standard/qm
title = "Quartermaster"
+ hud_icon_state = "hudqm"
department_types = list(/decl/department/supply)
total_positions = 1
spawn_positions = 1
@@ -151,11 +162,12 @@
/datum/computer_file/program/reports
)
-/datum/job/cargo_tech
+/datum/job/standard/cargo_tech
title = "Cargo Technician"
department_types = list(/decl/department/supply)
total_positions = 2
spawn_positions = 2
+ hud_icon_state = "hudcargo"
supervisors = "the quartermaster and the head of personnel"
access = list(
access_maint_tunnels,
@@ -187,8 +199,9 @@
/datum/computer_file/program/reports
)
-/datum/job/mining
+/datum/job/standard/mining
title = "Shaft Miner"
+ hud_icon_state = "hudminer"
department_types = list(/decl/department/supply)
total_positions = 3
spawn_positions = 3
@@ -222,11 +235,12 @@
SKILL_PILOT = SKILL_MAX
)
-/datum/job/janitor
+/datum/job/standard/janitor
title = "Janitor"
department_types = list(/decl/department/service)
total_positions = 1
spawn_positions = 1
+ hud_icon_state = "hudjanitor"
supervisors = "the head of personnel"
access = list(
access_janitor,
@@ -256,8 +270,9 @@
event_categories = list(ASSIGNMENT_JANITOR)
//More or less assistants
-/datum/job/librarian
+/datum/job/standard/librarian
title = "Librarian"
+ hud_icon_state = "hudlibrarian"
department_types = list(/decl/department/civilian)
total_positions = 1
spawn_positions = 1
@@ -276,8 +291,9 @@
skill_points = 20
software_on_spawn = list(/datum/computer_file/program/reports)
-/datum/job/lawyer
+/datum/job/standard/lawyer
title = "Internal Affairs Agent"
+ hud_icon_state = "hudia"
department_types = list(/decl/department/support)
total_positions = 2
spawn_positions = 2
@@ -303,7 +319,7 @@
skill_points = 20
software_on_spawn = list(/datum/computer_file/program/reports)
-/datum/job/lawyer/equip_job(var/mob/living/human/H)
+/datum/job/standard/lawyer/equip_job(var/mob/living/human/H)
. = ..()
if(.)
H.implant_loyalty(H)
diff --git a/maps/exodus/jobs/engineering.dm b/mods/content/standard_jobs/jobs/engineering.dm
similarity index 86%
rename from maps/exodus/jobs/engineering.dm
rename to mods/content/standard_jobs/jobs/engineering.dm
index 40cba546489..84630cb60ba 100644
--- a/maps/exodus/jobs/engineering.dm
+++ b/mods/content/standard_jobs/jobs/engineering.dm
@@ -1,5 +1,6 @@
-/datum/job/chief_engineer
+/datum/job/standard/chief_engineer
title = "Chief Engineer"
+ hud_icon_state = "hudce"
head_position = 1
department_types = list(
/decl/department/engineering,
@@ -69,16 +70,15 @@
max_skill = list(
SKILL_CONSTRUCTION = SKILL_MAX,
- SKILL_ELECTRICAL = SKILL_MAX,
- SKILL_ATMOS = SKILL_MAX,
- SKILL_ENGINES = SKILL_MAX
+ SKILL_ELECTRICAL = SKILL_MAX,
+ SKILL_ATMOS = SKILL_MAX,
+ SKILL_ENGINES = SKILL_MAX
)
skill_points = 30
software_on_spawn = list(
/datum/computer_file/program/comm,
/datum/computer_file/program/network_monitor,
/datum/computer_file/program/power_monitor,
- /datum/computer_file/program/supermatter_monitor,
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/atmos_control,
/datum/computer_file/program/rcon_console,
@@ -88,10 +88,10 @@
)
event_categories = list(ASSIGNMENT_ENGINEER)
-/datum/job/engineer
+/datum/job/standard/engineer
title = "Engineer"
department_types = list(/decl/department/engineering)
-
+ hud_icon_state = "hudengineer"
total_positions = 8
spawn_positions = 7
supervisors = "the chief engineer"
@@ -130,22 +130,21 @@
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
SKILL_COMPUTER = SKILL_BASIC,
- SKILL_EVA = SKILL_BASIC,
- SKILL_CONSTRUCTION = SKILL_ADEPT,
- SKILL_ELECTRICAL = SKILL_BASIC,
- SKILL_ATMOS = SKILL_BASIC,
- SKILL_ENGINES = SKILL_BASIC
+ SKILL_EVA = SKILL_BASIC,
+ SKILL_CONSTRUCTION = SKILL_ADEPT,
+ SKILL_ELECTRICAL = SKILL_BASIC,
+ SKILL_ATMOS = SKILL_BASIC,
+ SKILL_ENGINES = SKILL_BASIC
)
max_skill = list(
SKILL_CONSTRUCTION = SKILL_MAX,
- SKILL_ELECTRICAL = SKILL_MAX,
- SKILL_ATMOS = SKILL_MAX,
- SKILL_ENGINES = SKILL_MAX
+ SKILL_ELECTRICAL = SKILL_MAX,
+ SKILL_ATMOS = SKILL_MAX,
+ SKILL_ENGINES = SKILL_MAX
)
skill_points = 20
software_on_spawn = list(
/datum/computer_file/program/power_monitor,
- /datum/computer_file/program/supermatter_monitor,
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/atmos_control,
/datum/computer_file/program/rcon_console,
diff --git a/maps/exodus/jobs/medical.dm b/mods/content/standard_jobs/jobs/medical.dm
similarity index 93%
rename from maps/exodus/jobs/medical.dm
rename to mods/content/standard_jobs/jobs/medical.dm
index 3ec1f0e1a72..1d281434a51 100644
--- a/maps/exodus/jobs/medical.dm
+++ b/mods/content/standard_jobs/jobs/medical.dm
@@ -1,5 +1,6 @@
-/datum/job/cmo
+/datum/job/standard/cmo
title = "Chief Medical Officer"
+ hud_icon_state = "hudcmo"
head_position = 1
department_types = list(
/decl/department/medical,
@@ -74,8 +75,9 @@
)
event_categories = list(ASSIGNMENT_MEDICAL)
-/datum/job/doctor
+/datum/job/standard/doctor
title = "Medical Doctor"
+ hud_icon_state = "hudmed"
department_types = list(/decl/department/medical)
minimal_player_age = 3
total_positions = 5
@@ -127,11 +129,11 @@
/datum/computer_file/program/camera_monitor
)
skill_points = 22
- title = "Paramedic"
event_categories = list(ASSIGNMENT_MEDICAL)
-/datum/job/chemist
+/datum/job/standard/chemist
title = "Pharmacist"
+ hud_icon_state = "hudpharmacist"
department_types = list(/decl/department/medical)
minimal_player_age = 7
total_positions = 2
@@ -165,8 +167,9 @@
)
skill_points = 16
-/datum/job/counselor
+/datum/job/standard/counselor
title = "Counselor"
+ hud_icon_state = "hudmed"
alt_titles = list("Mentalist")
department_types = list(/decl/department/medical)
total_positions = 1
@@ -203,13 +206,6 @@
)
give_psionic_implant_on_join = FALSE
-/datum/job/counselor/equip_job(var/mob/living/human/H)
- if(H.mind.role_alt_title == "Counselor")
- psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT)
- if(H.mind.role_alt_title == "Mentalist")
- psi_faculties = list("[PSI_COERCION]" = PSI_RANK_OPERANT)
- return ..()
-
// Department-flavor IDs
/obj/item/card/id/medical
name = "identification card"
diff --git a/maps/exodus/jobs/science.dm b/mods/content/standard_jobs/jobs/science.dm
similarity index 95%
rename from maps/exodus/jobs/science.dm
rename to mods/content/standard_jobs/jobs/science.dm
index a7a074efbce..548f9147ea7 100644
--- a/maps/exodus/jobs/science.dm
+++ b/mods/content/standard_jobs/jobs/science.dm
@@ -1,10 +1,11 @@
-/datum/job/rd
+/datum/job/standard/rd
title = "Chief Science Officer"
head_position = 1
department_types = list(
/decl/department/science,
/decl/department/command
)
+ hud_icon_state = "hudrd"
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
@@ -74,13 +75,14 @@
skill_points = 30
event_categories = list(ASSIGNMENT_SCIENTIST)
-/datum/job/scientist
+/datum/job/standard/scientist
title = "Scientist"
department_types = list(/decl/department/science)
total_positions = 6
spawn_positions = 4
supervisors = "the Chief Science Officer"
selection_color = "#633d63"
+ hud_icon_state = "hudscientist"
economic_power = 7
access = list(
access_robotics,
@@ -122,8 +124,9 @@
skill_points = 20
event_categories = list(ASSIGNMENT_SCIENTIST)
-/datum/job/roboticist
+/datum/job/standard/roboticist
title = "Roboticist"
+ hud_icon_state = "hudroboticist"
department_types = list(/decl/department/science)
total_positions = 2
spawn_positions = 2
diff --git a/maps/exodus/jobs/security.dm b/mods/content/standard_jobs/jobs/security.dm
similarity index 95%
rename from maps/exodus/jobs/security.dm
rename to mods/content/standard_jobs/jobs/security.dm
index f58305f7ae2..345f595a635 100644
--- a/maps/exodus/jobs/security.dm
+++ b/mods/content/standard_jobs/jobs/security.dm
@@ -1,5 +1,6 @@
-/datum/job/hos
+/datum/job/standard/hos
title = "Head of Security"
+ hud_icon_state = "hudhos"
head_position = 1
department_types = list(
/decl/department/security,
@@ -87,14 +88,15 @@
)
event_categories = list(ASSIGNMENT_SECURITY)
-/datum/job/hos/equip_job(var/mob/living/human/H)
+/datum/job/standard/hos/equip_job(var/mob/living/human/H)
. = ..()
if(.)
H.implant_loyalty(H)
-/datum/job/warden
+/datum/job/standard/warden
title = "Warden"
department_types = list(/decl/department/security)
+ hud_icon_state = "hudwarden"
total_positions = 1
spawn_positions = 1
supervisors = "the head of security"
@@ -142,10 +144,10 @@
/datum/computer_file/program/camera_monitor
)
-/datum/job/detective
+/datum/job/standard/detective
title = "Detective"
department_types = list(/decl/department/security)
-
+ hud_icon_state = "huddetective"
total_positions = 2
spawn_positions = 2
supervisors = "the head of security"
@@ -192,8 +194,9 @@
/datum/computer_file/program/camera_monitor
)
-/datum/job/officer
+/datum/job/standard/officer
title = "Security Officer"
+ hud_icon_state = "hudsec"
department_types = list(/decl/department/security)
total_positions = 4
spawn_positions = 4
diff --git a/maps/exodus/jobs/synthetics.dm b/mods/content/standard_jobs/jobs/synthetics.dm
similarity index 74%
rename from maps/exodus/jobs/synthetics.dm
rename to mods/content/standard_jobs/jobs/synthetics.dm
index e787da9e011..fa023f0a0d0 100644
--- a/maps/exodus/jobs/synthetics.dm
+++ b/mods/content/standard_jobs/jobs/synthetics.dm
@@ -1,4 +1,4 @@
-/datum/job/computer
+/datum/job/standard/computer
title = "Computer"
event_categories = list(ASSIGNMENT_COMPUTER)
total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm
@@ -11,7 +11,8 @@
economic_power = 0
outfit_type = /decl/outfit/job/silicon/ai
loadout_allowed = FALSE
- hud_icon = "hudblank"
+ hud_icon_state = "hudblank"
+ hud_icon = null
skill_points = 0
no_skill_buffs = TRUE
guestbanned = 1
@@ -19,16 +20,16 @@
skip_loadout_preview = TRUE
department_types = list(/decl/department/miscellaneous)
-/datum/job/computer/equip_job(var/mob/living/human/H)
+/datum/job/standard/computer/equip_job(var/mob/living/human/H)
return !!H
-/datum/job/computer/is_position_available()
+/datum/job/standard/computer/is_position_available()
return (empty_playable_ai_cores.len != 0)
-/datum/job/computer/handle_variant_join(var/mob/living/human/H, var/alt_title)
+/datum/job/standard/computer/handle_variant_join(var/mob/living/human/H, var/alt_title)
return H
-/datum/job/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin)
+/datum/job/standard/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin)
character = character.AIize() // AIize the character, but don't move them yet
// is_available for AI checks that there is an empty core available in this list
@@ -46,7 +47,7 @@
qdel(C)
return TRUE
-/datum/job/robot
+/datum/job/standard/robot
title = "Robot"
event_categories = list(ASSIGNMENT_ROBOT)
total_positions = 2
@@ -58,7 +59,8 @@
economic_power = 0
loadout_allowed = FALSE
outfit_type = /decl/outfit/job/silicon/cyborg
- hud_icon = "hudblank"
+ hud_icon_state = "hudblank"
+ hud_icon = null
skill_points = 0
no_skill_buffs = TRUE
guestbanned = 1
@@ -66,14 +68,14 @@
skip_loadout_preview = TRUE
department_types = list(/decl/department/miscellaneous)
-/datum/job/robot/handle_variant_join(var/mob/living/human/H, var/alt_title)
+/datum/job/standard/robot/handle_variant_join(var/mob/living/human/H, var/alt_title)
if(H)
return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title))
-/datum/job/robot/equip_job(var/mob/living/human/H)
+/datum/job/standard/robot/equip_job(var/mob/living/human/H)
return !!H
-/datum/job/robot/New()
+/datum/job/standard/robot/New()
..()
alt_titles = SSrobots.robot_alt_titles.Copy()
alt_titles -= title // So the unit test doesn't flip out if a mob or brain type is declared for our main title.
diff --git a/maps/exodus/outfits/cargo.dm b/mods/content/standard_jobs/outfits/cargo.dm
similarity index 100%
rename from maps/exodus/outfits/cargo.dm
rename to mods/content/standard_jobs/outfits/cargo.dm
diff --git a/maps/exodus/outfits/civilian.dm b/mods/content/standard_jobs/outfits/civilian.dm
similarity index 100%
rename from maps/exodus/outfits/civilian.dm
rename to mods/content/standard_jobs/outfits/civilian.dm
diff --git a/maps/exodus/outfits/command.dm b/mods/content/standard_jobs/outfits/command.dm
similarity index 89%
rename from maps/exodus/outfits/command.dm
rename to mods/content/standard_jobs/outfits/command.dm
index 86aee3a2f51..e2f9c8d8de6 100644
--- a/maps/exodus/outfits/command.dm
+++ b/mods/content/standard_jobs/outfits/command.dm
@@ -15,12 +15,12 @@
backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/backpack/satchel/cap
backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/backpack/messenger/com
-/decl/outfit/job/captain/post_equip(var/mob/living/human/H)
+/decl/outfit/job/captain/post_equip(mob/living/wearer)
..()
- if(H.get_age() > 49)
+ if(wearer.get_age() > 49)
// Since we can have something other than the default uniform at this
// point, check if we can actually attach the medal
- var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/uniform = wearer.get_equipped_item(slot_w_uniform_str)
if(uniform)
var/obj/item/clothing/medal/gold/medal = new
if(uniform.can_attach_accessory(medal))
diff --git a/maps/exodus/outfits/engineering.dm b/mods/content/standard_jobs/outfits/engineering.dm
similarity index 100%
rename from maps/exodus/outfits/engineering.dm
rename to mods/content/standard_jobs/outfits/engineering.dm
diff --git a/maps/exodus/outfits/medical.dm b/mods/content/standard_jobs/outfits/medical.dm
similarity index 100%
rename from maps/exodus/outfits/medical.dm
rename to mods/content/standard_jobs/outfits/medical.dm
diff --git a/maps/exodus/outfits/_pda.dm b/mods/content/standard_jobs/outfits/pda.dm
similarity index 100%
rename from maps/exodus/outfits/_pda.dm
rename to mods/content/standard_jobs/outfits/pda.dm
diff --git a/maps/exodus/outfits/science.dm b/mods/content/standard_jobs/outfits/science.dm
similarity index 100%
rename from maps/exodus/outfits/science.dm
rename to mods/content/standard_jobs/outfits/science.dm
diff --git a/maps/exodus/outfits/security.dm b/mods/content/standard_jobs/outfits/security.dm
similarity index 100%
rename from maps/exodus/outfits/security.dm
rename to mods/content/standard_jobs/outfits/security.dm
diff --git a/mods/content/supermatter/_supermatter.dm b/mods/content/supermatter/_supermatter.dm
new file mode 100644
index 00000000000..78daa387234
--- /dev/null
+++ b/mods/content/supermatter/_supermatter.dm
@@ -0,0 +1,23 @@
+// These are used by supermatter and supermatter monitor program, mostly for UI updating purposes. Higher should always be worse!
+#define SUPERMATTER_ERROR -1 // Unknown status, shouldn't happen but just in case.
+#define SUPERMATTER_INACTIVE 0 // No or minimal energy
+#define SUPERMATTER_NORMAL 1 // Normal operation
+#define SUPERMATTER_NOTIFY 2 // Ambient temp > 80% of CRITICAL_TEMPERATURE
+#define SUPERMATTER_WARNING 3 // Ambient temp > CRITICAL_TEMPERATURE OR integrity damaged
+#define SUPERMATTER_DANGER 4 // Integrity < 50%
+#define SUPERMATTER_EMERGENCY 5 // Integrity < 25%
+#define SUPERMATTER_DELAMINATING 6 // Pretty obvious.
+
+#define SUPERMATTER_DATA_EER "Relative EER"
+#define SUPERMATTER_DATA_TEMPERATURE "Temperature"
+#define SUPERMATTER_DATA_PRESSURE "Pressure"
+#define SUPERMATTER_DATA_EPR "Chamber EPR"
+
+/decl/modpack/supermatter
+ name = "Supermatter Content"
+ desc = "This modpack includes the supermatter engine and related content."
+ nanoui_directory = "mods/content/supermatter/nano_templates/"
+
+/decl/modpack/supermatter/pre_initialize()
+ . = ..()
+ global.debug_verbs |= /datum/admins/proc/setup_supermatter
\ No newline at end of file
diff --git a/mods/content/supermatter/_supermatter.dme b/mods/content/supermatter/_supermatter.dme
new file mode 100644
index 00000000000..fb6723cce50
--- /dev/null
+++ b/mods/content/supermatter/_supermatter.dme
@@ -0,0 +1,30 @@
+#ifndef CONTENT_PACK_SUPERMATTER
+#define CONTENT_PACK_SUPERMATTER
+// BEGIN_INCLUDE
+#include "_supermatter.dm"
+#include "admin_setup_supermatter.dm"
+#include "datums\sm_codex.dm"
+#include "datums\sm_follow.dm"
+#include "datums\sm_grief_fix.dm"
+#include "datums\sm_looping_sound.dm"
+#include "datums\sm_supply_drop.dm"
+#include "datums\sm_supply_pack.dm"
+#include "datums\supermatter_monitor.dm"
+#include "endgame_cascade\cascade_blob.dm"
+#include "endgame_cascade\portal.dm"
+#include "endgame_cascade\universe.dm"
+#include "items\sm_book.dm"
+#include "items\sm_grenade.dm"
+#include "machinery\sm_supply_beacon.dm"
+#include "machinery\supermatter.dm"
+#include "machinery\supermatter_core_console.dm"
+#include "overrides\sm_fuel_compressor.dm"
+#include "overrides\sm_meteor.dm"
+#include "overrides\sm_singularity.dm"
+#include "overrides\sm_strings.dm"
+#include "overrides\sm_trader.dm"
+#include "overrides\sm_unit_tests.dm"
+#include "overrides\sm_xenoarchaeology.dm"
+#include "structures\sm_closets.dm"
+// END_INCLUDE
+#endif
diff --git a/mods/content/supermatter/admin_setup_supermatter.dm b/mods/content/supermatter/admin_setup_supermatter.dm
new file mode 100644
index 00000000000..9664671e836
--- /dev/null
+++ b/mods/content/supermatter/admin_setup_supermatter.dm
@@ -0,0 +1,116 @@
+#define ENERGY_NITROGEN 115 // Roughly 8 emitter shots.
+#define ENERGY_CARBONDIOXIDE 150 // Roughly 10 emitter shots.
+#define ENERGY_HYDROGEN 300 // Roughly 20 emitter shots.
+
+/datum/admins/proc/setup_supermatter()
+ set category = "Debug"
+ set name = "Setup Supermatter"
+ set desc = "Allows you to start the Supermatter engine."
+
+ if (!istype(src,/datum/admins))
+ src = usr.client.holder
+ if (!istype(src,/datum/admins))
+ to_chat(usr, "Error: you are not an admin!")
+ return
+
+ var/response = input(usr, "Are you sure? This will start up the engine with selected gas as coolant.", "Engine setup") as null|anything in list("N2", "CO2", "H2", "Abort")
+ if(!response || response == "Abort")
+ return
+
+ var/errors = 0
+ var/warnings = 0
+ var/success = 0
+
+ log_and_message_admins("## SUPERMATTER SETUP - Setup initiated by [usr] using coolant type [response].")
+
+ // CONFIGURATION PHASE
+ // Coolant canisters, set types according to response.
+ for(var/obj/effect/engine_setup/coolant_canister/C in global.engine_setup_markers)
+ switch(response)
+ if("N2")
+ C.canister_type = /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/
+ continue
+ if("CO2")
+ C.canister_type = /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/
+ continue
+ if("H2")
+ C.canister_type = /obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup/
+ continue
+
+ for(var/obj/effect/engine_setup/core/C in global.engine_setup_markers)
+ switch(response)
+ if("N2")
+ C.energy_setting = ENERGY_NITROGEN
+ continue
+ if("CO2")
+ C.energy_setting = ENERGY_CARBONDIOXIDE
+ continue
+ if("H2")
+ C.energy_setting = ENERGY_HYDROGEN
+ continue
+
+ for(var/obj/effect/engine_setup/filter/F in global.engine_setup_markers)
+ F.coolant = response
+
+ var/list/delayed_objects = list()
+ // SETUP PHASE
+ for(var/obj/effect/engine_setup/S in global.engine_setup_markers)
+ var/result = S.activate(0)
+ switch(result)
+ if(ENGINE_SETUP_OK)
+ success++
+ continue
+ if(ENGINE_SETUP_WARNING)
+ warnings++
+ continue
+ if(ENGINE_SETUP_ERROR)
+ errors++
+ log_and_message_admins("## SUPERMATTER SETUP - Error encountered! Aborting.")
+ break
+ if(ENGINE_SETUP_DELAYED)
+ delayed_objects.Add(S)
+ continue
+
+ if(!errors)
+ for(var/obj/effect/engine_setup/S in delayed_objects)
+ var/result = S.activate(1)
+ switch(result)
+ if(ENGINE_SETUP_OK)
+ success++
+ continue
+ if(ENGINE_SETUP_WARNING)
+ warnings++
+ continue
+ if(ENGINE_SETUP_ERROR)
+ errors++
+ log_and_message_admins("## SUPERMATTER SETUP - Error encountered! Aborting.")
+ break
+
+ log_and_message_admins("## SUPERMATTER SETUP - Setup completed with [errors] errors, [warnings] warnings and [success] successful steps.")
+
+ return
+
+
+
+// Energises the supermatter. Errors when unable to locate supermatter.
+/obj/effect/engine_setup/core
+ name = "Supermatter Core Marker"
+ var/energy_setting = 0
+
+/obj/effect/engine_setup/core/activate(var/last = 0)
+ if(!last)
+ return ENGINE_SETUP_DELAYED
+ ..()
+ var/obj/machinery/power/supermatter/SM = locate() in get_turf(src)
+ if(!SM)
+ log_and_message_admins("## ERROR: Unable to locate supermatter core at [x] [y] [z]!")
+ return ENGINE_SETUP_ERROR
+ if(!energy_setting)
+ log_and_message_admins("## ERROR: Energy setting unset at [x] [y] [z]!")
+ return ENGINE_SETUP_ERROR
+ SM.power = energy_setting
+ return ENGINE_SETUP_OK
+
+#undef ENERGY_NITROGEN
+#undef ENERGY_CARBONDIOXIDE
+#undef ENERGY_HYDROGEN
diff --git a/mods/content/supermatter/datums/sm_codex.dm b/mods/content/supermatter/datums/sm_codex.dm
new file mode 100644
index 00000000000..c0d5c160fae
--- /dev/null
+++ b/mods/content/supermatter/datums/sm_codex.dm
@@ -0,0 +1,21 @@
+
+/datum/codex_entry/guide/supermatter
+ name = "Guide to Supermatter Engines"
+ available_to_map_tech_level = MAP_TECH_LEVEL_SPACE
+
+/datum/codex_entry/supermatter
+ associated_paths = list(/obj/machinery/power/supermatter)
+ mechanics_text = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \
+ After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \
+ Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum. \
+ \
+ Supermatter cores are extremely dangerous to be close to, and requires protection to handle properly. The protection you will need is: \
+ Optical meson scanners on your eyes, to prevent hallucinations when looking at the supermatter. \
+ Radiation helmet and suit, as the supermatter is radioactive. \
+ \
+ Touching the supermatter will result in *instant death*, with no corpse left behind! You can drag the supermatter, but anything else will kill you. \
+ It is advised to obtain a genetic backup before trying to drag it."
+ antag_text = "Exposing the supermatter to oxygen or vaccum will cause it to start rapidly heating up. Sabotaging the supermatter and making it explode will \
+ cause a period of lag as the explosion is processed by the server, as well as irradiating the entire station and causing hallucinations to happen. \
+ Wearing radiation equipment will protect you from most of the delamination effects sans explosion."
+ available_to_map_tech_level = MAP_TECH_LEVEL_SPACE
\ No newline at end of file
diff --git a/mods/content/supermatter/datums/sm_follow.dm b/mods/content/supermatter/datums/sm_follow.dm
new file mode 100644
index 00000000000..5b221ad03d6
--- /dev/null
+++ b/mods/content/supermatter/datums/sm_follow.dm
@@ -0,0 +1,3 @@
+/datum/follow_holder/supermatter
+ sort_order = 10
+ followed_type = /obj/machinery/power/supermatter
\ No newline at end of file
diff --git a/mods/content/supermatter/datums/sm_grief_fix.dm b/mods/content/supermatter/datums/sm_grief_fix.dm
new file mode 100644
index 00000000000..70dd9469abc
--- /dev/null
+++ b/mods/content/supermatter/datums/sm_grief_fix.dm
@@ -0,0 +1,8 @@
+/decl/atmos_grief_fix_step/supermatter
+ name = "Supermatter depowered"
+ sort_order = 0
+
+/decl/atmos_grief_fix_step/supermatter/act()
+ // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
+ for(var/obj/machinery/power/supermatter/S in SSmachines.machinery)
+ S.power = 0
\ No newline at end of file
diff --git a/code/modules/supermatter/sm_looping_sound.dm b/mods/content/supermatter/datums/sm_looping_sound.dm
similarity index 100%
rename from code/modules/supermatter/sm_looping_sound.dm
rename to mods/content/supermatter/datums/sm_looping_sound.dm
diff --git a/mods/content/supermatter/datums/sm_supply_drop.dm b/mods/content/supermatter/datums/sm_supply_drop.dm
new file mode 100644
index 00000000000..1560d1118d2
--- /dev/null
+++ b/mods/content/supermatter/datums/sm_supply_drop.dm
@@ -0,0 +1,5 @@
+/datum/supply_drop_loot/supermatter
+ name = "Supermatter"
+/datum/supply_drop_loot/supermatter/New()
+ ..()
+ contents = list(/obj/machinery/power/supermatter)
diff --git a/mods/content/supermatter/datums/sm_supply_pack.dm b/mods/content/supermatter/datums/sm_supply_pack.dm
new file mode 100644
index 00000000000..5261f06a069
--- /dev/null
+++ b/mods/content/supermatter/datums/sm_supply_pack.dm
@@ -0,0 +1,6 @@
+/decl/hierarchy/supply_pack/engineering/smbig
+ name = "Power - Supermatter core"
+ contains = list(/obj/machinery/power/supermatter)
+ containertype = /obj/structure/closet/crate/secure/large/supermatter
+ containername = "\improper Supermatter crate (CAUTION)"
+ access = access_ce
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm b/mods/content/supermatter/datums/supermatter_monitor.dm
similarity index 91%
rename from code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm
rename to mods/content/supermatter/datums/supermatter_monitor.dm
index e139e3c4f28..518d84a7f18 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm
+++ b/mods/content/supermatter/datums/supermatter_monitor.dm
@@ -5,7 +5,7 @@
/datum/computer_file/program/supermatter_monitor
filename = "supmon"
filedesc = "Supermatter Monitoring"
- nanomodule_path = /datum/nano_module/program/supermatter_monitor/
+ nanomodule_path = /datum/nano_module/program/supermatter_monitor
program_icon_state = "smmon_0"
program_key_state = "tech_key"
program_menu_icon = "notice"
@@ -215,3 +215,20 @@
if(S.uid == newuid)
active = S
return 1
+
+// Add this to the software list for borgs
+/obj/item/robot_module/engineering/grant_software()
+ software |= /datum/computer_file/program/supermatter_monitor
+ return ..()
+
+/obj/item/robot_module/flying/repair/grant_software()
+ software |= /datum/computer_file/program/supermatter_monitor
+ return ..()
+
+/obj/machinery/computer/modular/telescreen/preset/engineering/Initialize(mapload, d, populate_parts)
+ default_software |= /datum/computer_file/program/supermatter_monitor
+ return ..()
+
+/obj/machinery/computer/modular/preset/engineering/Initialize(mapload, d, populate_parts)
+ default_software |= /datum/computer_file/program/supermatter_monitor
+ return ..()
\ No newline at end of file
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/cascade_blob.dm b/mods/content/supermatter/endgame_cascade/cascade_blob.dm
similarity index 98%
rename from code/game/gamemodes/endgame/supermatter_cascade/cascade_blob.dm
rename to mods/content/supermatter/endgame_cascade/cascade_blob.dm
index ef04b1069f7..6cd76d14233 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/cascade_blob.dm
+++ b/mods/content/supermatter/endgame_cascade/cascade_blob.dm
@@ -9,7 +9,7 @@
//luminosity = 5
//l_color="#0066ff"
plane = ABOVE_LIGHTING_PLANE
- layer = SUPERMATTER_WALL_LAYER
+ layer = SUBSPACE_WALL_LAYER
var/list/avail_dirs = list(NORTH,SOUTH,EAST,WEST,UP,DOWN)
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/mods/content/supermatter/endgame_cascade/portal.dm
similarity index 100%
rename from code/game/gamemodes/endgame/supermatter_cascade/portal.dm
rename to mods/content/supermatter/endgame_cascade/portal.dm
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/mods/content/supermatter/endgame_cascade/universe.dm
similarity index 95%
rename from code/game/gamemodes/endgame/supermatter_cascade/universe.dm
rename to mods/content/supermatter/endgame_cascade/universe.dm
index 8de40b0d123..ccca16707e4 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
+++ b/mods/content/supermatter/endgame_cascade/universe.dm
@@ -1,6 +1,3 @@
-var/global/universe_has_ended = 0
-
-
/datum/universal_state/supermatter_cascade
name = "Supermatter Cascade"
desc = "Unknown harmonance affecting universal substructure, converting nearby matter to supermatter."
@@ -15,9 +12,9 @@ var/global/universe_has_ended = 0
/datum/universal_state/supermatter_cascade/OnTurfChange(var/turf/T)
var/turf/space/S = T
if(istype(S))
- S.color = "#0066ff"
+ S.set_color("#0066ff")
else
- S.color = initial(S.color)
+ S.set_color(initial(S.color))
/datum/universal_state/supermatter_cascade/DecayTurf(var/turf/T)
T.handle_universal_decay()
@@ -70,9 +67,10 @@ var/global/universe_has_ended = 0
if(!invalid_area)
A.update_icon()
+// TODO: Should this be changed to use the actual ambient lights system...?
/datum/universal_state/supermatter_cascade/OverlayAndAmbientSet()
spawn(0)
- for(var/datum/lighting_corner/L in world)
+ for(var/datum/lighting_corner/L in SSlighting.lighting_corners)
if(isAdminLevel(L.z))
L.update_lumcount(1,1,1)
else
diff --git a/mods/content/supermatter/items/sm_book.dm b/mods/content/supermatter/items/sm_book.dm
new file mode 100644
index 00000000000..8230625788a
--- /dev/null
+++ b/mods/content/supermatter/items/sm_book.dm
@@ -0,0 +1,6 @@
+/obj/item/book/manual/supermatter_engine
+ name = "supermatter engine reference manual"
+ icon = 'icons/obj/items/books/book_supermatter.dmi'
+ author = "Central Engineering Division"
+ title = "Supermatter Engine Operating Manual"
+ guide_decl = /datum/codex_entry/guide/supermatter
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/mods/content/supermatter/items/sm_grenade.dm
similarity index 50%
rename from code/game/objects/items/weapons/grenades/supermatter.dm
rename to mods/content/supermatter/items/sm_grenade.dm
index 4f2758b53e3..b7f3186e666 100644
--- a/code/game/objects/items/weapons/grenades/supermatter.dm
+++ b/mods/content/supermatter/items/sm_grenade.dm
@@ -33,3 +33,25 @@
if(world.time > implode_at)
explosion(loc, 0, 1, 3, 4)
qdel(src)
+
+/obj/item/box/supermatters
+ name = "box of supermatter grenades"
+ desc = "A box containing 5 highly experimental supermatter grenades."
+ icon_state = "radbox"
+
+/obj/item/box/supermatters/WillContain()
+ return list(/obj/item/grenade/supermatter = 5)
+
+/datum/uplink_item/item/grenades/supermatter
+ name = "1x Supermatter Grenade"
+ desc = "This grenade contains a small supermatter shard which will delaminate upon activation and pull in nearby objects, irradiate lifeforms, and eventually explode."
+ item_cost = 15
+ antag_roles = list(/decl/special_role/mercenary)
+ path = /obj/item/grenade/supermatter
+
+/datum/uplink_item/item/grenades/supermatters
+ name = "5x Supermatter Grenades"
+ desc = "These grenades contains a small supermatter shard which will delaminate upon activation and pull in nearby objects, irradiate lifeforms, and eventually explode."
+ item_cost = 60
+ antag_roles = list(/decl/special_role/mercenary)
+ path = /obj/item/box/supermatters
diff --git a/mods/content/supermatter/machinery/sm_supply_beacon.dm b/mods/content/supermatter/machinery/sm_supply_beacon.dm
new file mode 100644
index 00000000000..e6a622480b6
--- /dev/null
+++ b/mods/content/supermatter/machinery/sm_supply_beacon.dm
@@ -0,0 +1,7 @@
+/obj/item/supply_beacon/supermatter
+ name = "inactive supermatter supply beacon"
+ deploy_path = /obj/structure/supply_beacon/supermatter
+
+/obj/structure/supply_beacon/supermatter
+ name = "supermatter supply beacon"
+ drop_type = "supermatter"
diff --git a/code/modules/supermatter/supermatter.dm b/mods/content/supermatter/machinery/supermatter.dm
similarity index 98%
rename from code/modules/supermatter/supermatter.dm
rename to mods/content/supermatter/machinery/supermatter.dm
index 9ade7220a4b..b300501036c 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/mods/content/supermatter/machinery/supermatter.dm
@@ -99,7 +99,7 @@ var/global/list/supermatter_delam_accent_sounds = list(
SPAN_DANGER("As \the [source] slowly stops resonating, you find your skin covered in new radiation burns."), 1,\
SPAN_DANGER("The unearthly ringing subsides and you notice you have new radiation burns."), 2)
else
- M.show_message(SPAN_DANGER("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns."), 2)
+ M.show_message(SPAN_DANGER("You hear an unearthly ringing and notice your skin is covered in fresh radiation burns."), 2)
var/rads = 500
SSradiation.radiate(source, rads)
@@ -113,9 +113,10 @@ var/global/list/supermatter_delam_accent_sounds = list(
light_range = 4
layer = ABOVE_HUMAN_LAYER
matter = list(
- /decl/material/solid/supermatter = MATTER_AMOUNT_PRIMARY,
+ /decl/material/solid/exotic_matter = MATTER_AMOUNT_PRIMARY,
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT
)
+ w_class = ITEM_SIZE_LARGE_STRUCTURE
var/nitrogen_retardation_factor = 0.15 // Higher == N2 slows reaction more
var/thermal_release_modifier = 10000 // Higher == more heat released during reaction
@@ -237,13 +238,13 @@ var/global/list/supermatter_delam_accent_sounds = list(
else
aw_EPR = FALSE
-/obj/machinery/power/supermatter/proc/status_adminwarn_check(var/min_status, var/current_state, var/message, var/send_to_irc = FALSE)
+/obj/machinery/power/supermatter/proc/status_adminwarn_check(var/min_status, var/current_state, var/message, var/send_webhook = FALSE)
var/status = get_status()
if(status >= min_status)
if(!current_state)
log_and_message_admins(message)
- if(send_to_irc)
- send2adminirc(message)
+ if(send_webhook)
+ SSwebhooks.send(WEBHOOK_AHELP_SENT, list("name" = "Supermatter Warning", "body" = message))
return TRUE
else
return FALSE
@@ -696,6 +697,7 @@ var/global/list/supermatter_delam_accent_sounds = list(
desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. You get headaches just from looking at it."
icon = 'icons/obj/supermatter_32.dmi'
icon_state = "supermatter_shard"
+ w_class = ITEM_SIZE_STRUCTURE
warning_point = 50
emergency_point = 400
@@ -708,6 +710,7 @@ var/global/list/supermatter_delam_accent_sounds = list(
/obj/machinery/power/supermatter/medium
icon = 'icons/obj/supermatter_32.dmi'
+ w_class = (ITEM_SIZE_STRUCTURE + ITEM_SIZE_LARGE_STRUCTURE) / 2 // halfway between a shard and a normal SM
/obj/machinery/power/supermatter/shard/announce_warning() //Shards don't get announcements
return
diff --git a/mods/content/supermatter/machinery/supermatter_core_console.dm b/mods/content/supermatter/machinery/supermatter_core_console.dm
new file mode 100644
index 00000000000..8b2bf0e175c
--- /dev/null
+++ b/mods/content/supermatter/machinery/supermatter_core_console.dm
@@ -0,0 +1,45 @@
+// Does this really need to be its own thing...?
+// Can it not just be a stock parts preset or something?
+/obj/machinery/computer/air_control/supermatter_core
+ frequency = 1438
+ out_pressure_mode = 1
+
+/datum/fabricator_recipe/imprinter/circuit/supermatter_control
+ path = /obj/item/stock_parts/circuitboard/air_management/supermatter_core
+
+/obj/item/stock_parts/circuitboard/air_management/supermatter_core
+ name = "circuitboard (core control)"
+ build_path = /obj/machinery/computer/air_control/supermatter_core
+ frequency = 1438
+ var/input_tag
+ var/output_tag
+
+ var/list/input_info = list()
+ var/list/output_info = list()
+
+ var/input_flow_setting = 700
+ var/pressure_setting = 100
+
+/obj/item/stock_parts/circuitboard/air_management/supermatter_core/construct(var/obj/machinery/computer/air_control/supermatter_core/SC)
+ if(..(SC))
+ SC.input_tag = input_tag
+ SC.output_tag = output_tag
+
+ SC.input_info = input_info.Copy()
+ SC.output_info = output_info.Copy()
+
+ SC.input_flow_setting = input_flow_setting
+ SC.pressure_setting = input_flow_setting
+ return 1
+
+/obj/item/stock_parts/circuitboard/air_management/supermatter_core/deconstruct(var/obj/machinery/computer/air_control/supermatter_core/SC)
+ if(..(SC))
+ input_tag = SC.input_tag
+ output_tag = SC.output_tag
+
+ input_info = SC.input_info.Copy()
+ output_info = SC.output_info.Copy()
+
+ input_flow_setting = SC.input_flow_setting
+ pressure_setting = SC.input_flow_setting
+ return 1
\ No newline at end of file
diff --git a/nano/templates/supermatter_crystal.tmpl b/mods/content/supermatter/nano_templates/supermatter_crystal.tmpl
similarity index 100%
rename from nano/templates/supermatter_crystal.tmpl
rename to mods/content/supermatter/nano_templates/supermatter_crystal.tmpl
diff --git a/nano/templates/supermatter_monitor.tmpl b/mods/content/supermatter/nano_templates/supermatter_monitor.tmpl
similarity index 100%
rename from nano/templates/supermatter_monitor.tmpl
rename to mods/content/supermatter/nano_templates/supermatter_monitor.tmpl
diff --git a/mods/content/supermatter/overrides/sm_fuel_compressor.dm b/mods/content/supermatter/overrides/sm_fuel_compressor.dm
new file mode 100644
index 00000000000..e259fa26625
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_fuel_compressor.dm
@@ -0,0 +1,13 @@
+/obj/machinery/fuel_compressor/add_material(obj/thing, mob/user)
+ . = ..()
+ if(.)
+ return TRUE
+ if(istype(thing, /obj/machinery/power/supermatter/shard))
+ var/exotic_matter_amount = thing?.matter?[/decl/material/solid/exotic_matter]
+ if(exotic_matter_amount <= 0)
+ return FALSE
+ stored_material[/decl/material/solid/exotic_matter] = exotic_matter_amount
+ to_chat(user, SPAN_NOTICE("You awkwardly cram \the [thing] into \the [src]'s material buffer."))
+ qdel(thing)
+ return TRUE
+ return FALSE
\ No newline at end of file
diff --git a/mods/content/supermatter/overrides/sm_meteor.dm b/mods/content/supermatter/overrides/sm_meteor.dm
new file mode 100644
index 00000000000..449ad80fbb9
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_meteor.dm
@@ -0,0 +1,5 @@
+/obj/effect/meteor/destroyer/supermatter
+ name = "supermatter shard"
+ desc = "Oh god, what will be next..?"
+ icon = 'icons/obj/supermatter_32.dmi'
+ icon_state = "supermatter"
diff --git a/mods/content/supermatter/overrides/sm_singularity.dm b/mods/content/supermatter/overrides/sm_singularity.dm
new file mode 100644
index 00000000000..b13506cd580
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_singularity.dm
@@ -0,0 +1,46 @@
+#define STAGE_SUPER 11
+
+/// A singularity that has the mass of a supermatter crystal.
+/decl/singularity_stage/stage_super
+ name = "super gravitational singularity"
+ desc = "A gravitational singularity with the properties of supermatter. It has the power to destroy worlds."
+ min_energy = 50000
+ max_energy = INFINITY
+ stage_size = STAGE_SUPER
+ footprint = 6
+ icon = 'icons/effects/352x352.dmi'
+ icon_state = "singularity_s11"//uh, whoever drew that, you know that black holes are supposed to look dark right? What's this, the clown's singulo?
+ pixel_x = -160
+ pixel_y = -160
+ grav_pull = 16
+ consume_range = 5
+ dissipates_over_time = 0 //It cant go smaller due to e loss
+ event_chance = 25 //Events will fire off more often.
+ forced_event = /decl/singularity_event/supermatter_wave
+ wander = TRUE
+ explosion_vulnerable = FALSE
+ em_heavy_range = 12
+ em_light_range = 16
+ mesmerize_text = "helpless"
+ the_goggles_do_nothing = TRUE
+ ignore_obstacles = TRUE
+
+/decl/singularity_stage/stage_super/grow_to(obj/effect/singularity/source)
+ source.visible_message(SPAN_SINISTER(" You witness the creation of a destructive force that cannot possibly be stopped by human hands."))
+
+// why is this not shrink_from or something?
+/decl/singularity_stage/stage_five/shrink_to(obj/effect/singularity/source)
+ source.visible_message(SPAN_WARNING("\The [source] miraculously reduces in size and loses its supermatter properties."))
+
+// Singularity event
+/decl/singularity_event/supermatter_wave/handle_event(obj/effect/singularity/source)
+ for(var/mob/living/M in view(10, source.loc))
+ to_chat(M, SPAN_WARNING("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."))
+ if(prob(67))
+ to_chat(M, SPAN_NOTICE("Miraculously, it fails to kill you."))
+ else
+ to_chat(M, SPAN_DANGER("You don't even have a moment to react as you are reduced to ashes by the intense radiation."))
+ M.dust()
+ SSradiation.radiate(source, rand(source.energy))
+
+#undef STAGE_SUPER
\ No newline at end of file
diff --git a/mods/content/supermatter/overrides/sm_strings.dm b/mods/content/supermatter/overrides/sm_strings.dm
new file mode 100644
index 00000000000..2d7427f03d3
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_strings.dm
@@ -0,0 +1,19 @@
+/decl/game_mode/possible_ert_disabled_reasons()
+ var/static/sm_injected = FALSE
+ if(sm_injected)
+ return ..()
+ sm_injected = TRUE
+ . = ..()
+ . += "supermatter dust"
+
+/obj/item/disk/secret_project/get_secret_project_nouns()
+ var/static/sm_injected = FALSE
+ if(sm_injected)
+ return ..()
+ sm_injected = TRUE
+ . = ..()
+ . += "a supermatter engine"
+ return .
+
+/decl/material/solid/exotic_matter
+ lore_text = "Hypercrystalline supermatter is a subset of non-baryonic 'exotic' matter. It is found mostly in the heart of large stars, and features heavily in all kinds of fringe physics-defying technology."
\ No newline at end of file
diff --git a/mods/content/supermatter/overrides/sm_trader.dm b/mods/content/supermatter/overrides/sm_trader.dm
new file mode 100644
index 00000000000..ded45374bd9
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_trader.dm
@@ -0,0 +1,3 @@
+/datum/trader/ship/unique/rock/New()
+ ..()
+ possible_trading_items[/obj/machinery/power/supermatter] = TRADER_ALL
\ No newline at end of file
diff --git a/mods/content/supermatter/overrides/sm_unit_tests.dm b/mods/content/supermatter/overrides/sm_unit_tests.dm
new file mode 100644
index 00000000000..18351659e4c
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_unit_tests.dm
@@ -0,0 +1,3 @@
+/datum/unit_test/turf_floor_icons_shall_be_valid/New()
+ ..()
+ excepted_types |= /turf/unsimulated/wall/cascade
\ No newline at end of file
diff --git a/mods/content/supermatter/overrides/sm_xenoarchaeology.dm b/mods/content/supermatter/overrides/sm_xenoarchaeology.dm
new file mode 100644
index 00000000000..537de7a311c
--- /dev/null
+++ b/mods/content/supermatter/overrides/sm_xenoarchaeology.dm
@@ -0,0 +1,7 @@
+/datum/artifact_find/New()
+ var/static/supermatter_injected = FALSE
+ if(!supermatter_injected)
+ potential_finds[/obj/machinery/power/supermatter] = 5
+ potential_finds[/obj/machinery/power/supermatter/shard] = 25
+ supermatter_injected = TRUE
+ ..()
diff --git a/mods/content/supermatter/structures/sm_closets.dm b/mods/content/supermatter/structures/sm_closets.dm
new file mode 100644
index 00000000000..a1e58097f93
--- /dev/null
+++ b/mods/content/supermatter/structures/sm_closets.dm
@@ -0,0 +1,2 @@
+/obj/structure/closet/crate/secure/large/supermatter
+ closet_appearance = /decl/closet_appearance/large_crate/secure/hazard
\ No newline at end of file
diff --git a/mods/content/tabloids/_tabloids.dm b/mods/content/tabloids/_tabloids.dm
new file mode 100644
index 00000000000..7d6188ff28f
--- /dev/null
+++ b/mods/content/tabloids/_tabloids.dm
@@ -0,0 +1,58 @@
+/decl/modpack/tabloids
+ name = "Tabloids"
+ tabloid_publishers = list(
+ "\improper Solar Enquirer",
+ "\improper Stellar Examiner",
+ "\improper Antares Daily",
+ "\improper Weekly Galactic News",
+ "\improper Spiral"
+ )
+ tabloid_headlines = list(
+ "NARCOALGORITHMS: ARE YOUR CHILDREN SAFE?",
+ "ARE GMO HUMANS POISONOUS IN BED?",
+ "TOP 10 REASONS WHY OTHER SPECIES ARE A HOAX",
+ "CENTENNIAL POSITRONIC EXTENDS LIFESPAN WITH 1 SIMPLE TRICK",
+ "TOP 10 DANGEROUS FOODS WITH CHEMICALS",
+ "NEW TERRIFYING TEEN TREND: SUN-DIVING",
+ "HAS YOUR SPOUSE BEEN REPLACED BY AN ALIEN IMPOSTER? STUDIES SUGGEST YES!",
+ "SPACE CAUSES CANCER: DOCTORS CONFIRM",
+ "ARE BODY SCANNERS TOO INVASIVE? FIND OUT INSIDE!",
+ "HAS SCIENCE GONE TOO FAR? LOCAL SCIENTIST DEBUNKS ALIEN THEORY, DECRIES THEM AS TUBE EXPERIMENTS GONE WRONG",
+ "100 DELICIOUS RECIPES LETHAL TO CARBON-BASED LIFE",
+ "TOP FIVE SPECIES WE DROVE TO EXTINCTION; NUMBER TWO WILL SHOCK YOU",
+ "RELIGION WAS RIGHT? SHOCK FINDINGS SHOW ALIEN SIMILARITY TO ANIMALS, EXISTENCE OF BOATS",
+ "TOP TEN REASONS WHY ONLY HUMANS ARE SENTIENT",
+ "WHICH PLANET HAS THE BEST LOVERS? THIS AND MORE INSIDE!",
+ "SHE SAID WE SHOULD SEE OTHER PEOPLE, SO I MARRIED A NEO-AVIAN PACK: FULL STORY INSIDE",
+ "LOSE WEIGHT THREE TIMES FASTER WITH THESE LOW-G MANEUVERS!",
+ "MY DAUGHTER JOINED A NEURAL COLLECTIVE AND NOW SHE CAN TASTE SPACETIME: FULL STORY INSIDE",
+ "WERE THE NAZIS PSYCHIC? ONE HISTORIAN TELLS ALL",
+ "IS THE SOLAR GOVERNMENT CREATING AN AI SUPERINTELLIGENCE NEAR MERCURY? ONE EXPERT REVEALS SHOCKING INSIDER DETAILS!",
+ "TOP TEN HISTORICAL FIGURES THAT WERE TWO PROMETHEANS IN A TRENCHCOAT",
+ "TOP 10 SECRET AUGMENTS THE GOVERNMENT DOESN'T WANT YOU TO GET",
+ "ENLARGE YOUR MENTAL FACULTIES WITH THIS 1 WEIRD HAT",
+ "'HELP, MY SON THINKS HE'S A 20TH CENTURY VID CHARACTER CALLED SPOCK' AND MORE SHOCKING TALES INSIDE",
+ "18 RADICAL HIP IMPLANTS ALL THE KIDS ARE GETTING!",
+ "PRESERVED HEAD OF 21ST CENTURY CAPITALIST INSISTS THAT 'DYSON WALL' ONLY SANE SOLUTION TO RIMWARD MALCONTENTS",
+ "50 SHADES OF GREEN; BESTSELLING MULTISPECIES ROMANCE COMING TO CINEMAS",
+ "PLUTO: DWARF PLANET, OR SECRET RAMPANT AI FACILITY HELL-BENT ON CORRUPTING YOUR CHILDREN?",
+ "TOP TEN ANIME ALIENS. NUMBER 3 WILL SICKEN YOU",
+ "OCTUBER X'RALLBRE EXPOSED; NUDE PHOTOSHOOT LEAKS",
+ "WAR ON MARS AFTER NAKED MAN WAS FOUND; WERE THE ROMANS RIGHT?",
+ "REAL ALIENS ARGUE EARTH MOVIES RACIST!",
+ "HELP! I MARRIED A HEGEMONOUS SWARM INTELLIGENCE AND MY SON THINKS HE'S A ROUTER!",
+ "POSITRONICS: HUMAN INGENUITY AND GENEROSITY, OR A HORRIBLE MISTAKE? FIND OUT INSIDE!",
+ "THE FREE TRADER UNION: NEITHER FREE NOR A UNION. SHOCKING EXPOSE!",
+ "HAS THE FREE MARKET GONE TOO FAR? LUNA GLITTERPOP STAR AUCTIONS THIRD TESTICLE FOR TRANS-ORBITAL SHIPPING BONDS",
+ "THEY SAID IT WAS CANCER, BUT I KNEW IT WAS A TINY, SELF-REPLICATING CLONE OF RAY KURZWEIL: FULL STORY INSIDE",
+ "WHAT HAS TECHNOLOGY DONE? INDUSTRY BILLIONAIRE MARRIES OWN INFORMORPH MIND-COPY",
+ "REPTILLIAN ICE WARRIORS FROM ANOTHER WORLD LIVE INSIDE YOUR AIR DUCTS: HERE'S HOW TO GET RID OF THEM",
+ "10 CRITICAL THINGS YOU NEED TO KNOW ABOUT 'DRONEGATE'",
+ "THEY CALL THEM JUMPGATES BUT I'VE NEVER SEEN THEM JUMP: AN INDUSTRY INSIDER SPEAKS FOR THE FIRST TIME",
+ "EMERGENT INTELLIGENCES ARE STEALING YOUR BANK DETAILS, FETISHES: FOIL HAT RECIPE INSIDE",
+ "TIME TRAVELLERS ARE STEALING YOUR WIFI: 5 TIPS FOR DEFEATING HACKERS FROM THE FUTURE",
+ "'My mother was an alien spy': THIS CELEBRITY REVEAL WILL SHOCK AND AMAZE YOU",
+ "LUMINARY SCIENTIST SPEAKS: DIABETES IS A HYPERCORP RETROVIRUS!",
+ "'I REROUTED MY NEURAL CIRCUITRY SO THAT PAIN TASTES OF STRAWBERRIES' AND FIFTEEN OTHER CRAZY ALMACH STORIES",
+ "JOINING THE NAVY? HERE'S 15 EXPERT TIPS FOR AVOIDING BRAIN PARASITES"
+ )
\ No newline at end of file
diff --git a/mods/content/tabloids/_tabloids.dme b/mods/content/tabloids/_tabloids.dme
new file mode 100644
index 00000000000..0c6e6e35b01
--- /dev/null
+++ b/mods/content/tabloids/_tabloids.dme
@@ -0,0 +1,8 @@
+#ifndef CONTENT_PACK_TABLOIDS
+#define CONTENT_PACK_TABLOIDS
+// BEGIN_INCLUDE
+#include "_tabloids.dm"
+#include "tabloid.dm"
+#include "tabloid_helpers.dm"
+// END_INCLUDE
+#endif
\ No newline at end of file
diff --git a/mods/content/tabloids/icons/magazine.dmi b/mods/content/tabloids/icons/magazine.dmi
new file mode 100644
index 00000000000..62b385510c8
Binary files /dev/null and b/mods/content/tabloids/icons/magazine.dmi differ
diff --git a/mods/content/tabloids/tabloid.dm b/mods/content/tabloids/tabloid.dm
new file mode 100644
index 00000000000..6fc781a7ee6
--- /dev/null
+++ b/mods/content/tabloids/tabloid.dm
@@ -0,0 +1,36 @@
+/obj/item/tabloid
+ name = "tabloid magazine"
+ desc = "It's one of those trashy tabloid magazines. It looks pretty out of date."
+ icon = 'mods/content/tabloids/icons/magazine.dmi'
+ icon_state = "magazine"
+ randpixel = 6
+ material = /decl/material/solid/organic/paper
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ var/headline
+ var/article_body
+
+/obj/item/tabloid/Initialize()
+ . = ..()
+ var/list/tabloid_headlines = get_tabloid_headlines()
+ name = SAFEPICK(get_tabloid_publishers()) || initial(name)
+ icon_state = SAFEPICK(get_tabloid_states()) || initial(icon_state)
+ headline = SAFEPICK(tabloid_headlines)
+ if(length(tabloid_headlines) && tabloid_headlines[headline])
+ article_body = tabloid_headlines[headline]
+
+/obj/item/tabloid/examine(mob/user, distance, infix, suffix)
+ . = ..()
+ if(headline)
+ to_chat(user, "The headline screams, \"[headline]\"")
+
+/obj/item/tabloid/attack_self(mob/user)
+ . = ..()
+ if(!.)
+ user.visible_message(SPAN_NOTICE("\The [user] leafs idly through \the [src]."))
+ if(headline)
+ to_chat(user, "Most of it is the usual tabloid garbage, but the headline story, \"[headline]\", holds your attention for awhile.")
+ if(article_body)
+ to_chat(user, article_body)
+ else
+ to_chat(user, "It's the usual tabloid garbage. You find nothing of interest.")
+ return TRUE
diff --git a/mods/content/tabloids/tabloid_helpers.dm b/mods/content/tabloids/tabloid_helpers.dm
new file mode 100644
index 00000000000..966556dafbe
--- /dev/null
+++ b/mods/content/tabloids/tabloid_helpers.dm
@@ -0,0 +1,24 @@
+// Minor fluff item for mapping in waiting rooms etc.
+/proc/get_tabloid_publishers()
+ var/static/list/tabloid_publishers
+ if(!tabloid_publishers)
+ tabloid_publishers = list()
+ for(var/modpack_name in SSmodpacks.loaded_modpacks)
+ var/decl/modpack/modpack = SSmodpacks.loaded_modpacks[modpack_name]
+ if(length(modpack.tabloid_publishers))
+ tabloid_publishers |= modpack.tabloid_publishers
+ return tabloid_publishers
+
+/proc/get_tabloid_headlines()
+ var/static/list/tabloid_headlines
+ if(!tabloid_headlines)
+ tabloid_headlines = list()
+ for(var/modpack_name in SSmodpacks.loaded_modpacks)
+ var/decl/modpack/modpack = SSmodpacks.loaded_modpacks[modpack_name]
+ if(length(modpack.tabloid_headlines))
+ tabloid_headlines |= modpack.tabloid_headlines
+ return tabloid_headlines
+
+/proc/get_tabloid_states()
+ var/static/list/tabloid_states = icon_states('mods/content/tabloids/icons/magazine.dmi')
+ return tabloid_states
diff --git a/mods/content/xenobiology/_xenobiology.dme b/mods/content/xenobiology/_xenobiology.dme
index 11a5f3972c6..1591ea3f458 100644
--- a/mods/content/xenobiology/_xenobiology.dme
+++ b/mods/content/xenobiology/_xenobiology.dme
@@ -50,7 +50,6 @@
#include "slime\slime_commands.dm"
#include "slime\slime_comments.dm"
#include "slime\slime_follow.dm"
-#include "slime\slime_hud.dm"
#include "slime\slime_reagents.dm"
#include "slime\slime_surgery.dm"
#include "slime\slime_update_icon.dm"
diff --git a/mods/content/xenobiology/icons/smartfridge_contents_slime.dmi b/mods/content/xenobiology/icons/smartfridge_contents_slime.dmi
new file mode 100644
index 00000000000..c7c8e4acd4d
Binary files /dev/null and b/mods/content/xenobiology/icons/smartfridge_contents_slime.dmi differ
diff --git a/mods/content/xenobiology/overrides.dm b/mods/content/xenobiology/overrides.dm
index a5c39ef2743..015002287b3 100644
--- a/mods/content/xenobiology/overrides.dm
+++ b/mods/content/xenobiology/overrides.dm
@@ -25,7 +25,7 @@
/obj/machinery/smartfridge/secure/extract
name = "\improper Slime Extract Storage"
desc = "A refrigerated storage unit for slime extracts."
- icon_contents = "slime"
+ overlay_contents_icon = 'mods/content/xenobiology/icons/smartfridge_contents_slime.dmi'
initial_access = list(access_research)
/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O)
diff --git a/mods/content/xenobiology/slime/_slime.dm b/mods/content/xenobiology/slime/_slime.dm
index fe74f041933..60c12cb89e3 100644
--- a/mods/content/xenobiology/slime/_slime.dm
+++ b/mods/content/xenobiology/slime/_slime.dm
@@ -18,7 +18,7 @@
status_flags = CANPARALYSE|CANPUSH
butchery_data = null
ai = /datum/mob_controller/slime
- hud_used = /datum/hud/slime
+ hud_used = /datum/hud/animal
nutrition = 800
var/is_adult = FALSE
@@ -33,7 +33,6 @@
var/slime_type = /decl/slime_colour/grey
var/cores = 1 // the number of /obj/item/slime_extract's the slime has left inside
var/core_removal_stage = 0 //For removing cores.
- var/datum/reagents/metabolism/ingested
/mob/living/slime/Destroy()
set_feeding_on()
@@ -65,8 +64,7 @@
. = ..(mapload)
- ingested = new /datum/reagents/metabolism(240, src, CHEM_TOUCH)
- reagents = ingested
+ reagents = new /datum/reagents/metabolism(240, src, CHEM_TOUCH)
render_target = "slime_\ref[src]"
verbs += /mob/living/proc/ventcrawl
@@ -127,7 +125,7 @@
if(istype(AM, /obj/structure/window) || istype(AM, /obj/structure/grille))
if(nutrition <= get_hunger_nutrition())
if (is_adult || prob(5))
- UnarmedAttack(AM)
+ UnarmedAttack(AM, Adjacent(AM))
if(ismob(AM))
var/mob/tmob = AM
@@ -151,7 +149,7 @@
statpanel("Status")
stat(null, "Health: [get_health_percent()]%")
- stat(null, "Intent: [a_intent]")
+ stat(null, "Intent: [get_intent().name]")
if (client.statpanel == "Status")
stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]")
@@ -206,7 +204,7 @@
visible_message(SPAN_NOTICE("\The [user] pokes \the [src]."))
return TRUE
- if(user.a_intent == I_HELP)
+ if(user.check_intent(I_FLAG_HELP))
if(length(contents))
var/atom/movable/AM = pick(contents)
AM.dropInto(loc)
@@ -240,38 +238,39 @@
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
return TRUE
- switch(user.a_intent)
- if(I_HELP)
- visible_message(SPAN_NOTICE("\The [user] hugs \the [src] to make it feel better!"))
- return TRUE
- if(I_DISARM)
- if(prob(40))
- visible_message(SPAN_DANGER("\The [user] shoves \the [src] and it wobbles around, disoriented!"))
- SET_STATUS_MAX(src, STAT_CONFUSE, 2)
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- else
- visible_message(SPAN_DANGER("\The [user] shoves \the [src]!"))
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- return TRUE
- if(I_HURT)
- var/damage = rand(1, 9)
- var/datum/mob_controller/slime/slime_ai = ai
- if(istype(slime_ai))
- slime_ai.attacked += 10
- slime_ai.adjust_friendship(user, -5)
- if(prob(10))
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message(SPAN_DANGER("\The [user] has attempted to punch \the [src]!"))
- return TRUE
- playsound(loc, "punch", 25, 1, -1)
- visible_message(SPAN_DANGER("\The [user] has punched \the [src]!"))
- take_damage(damage)
+ if(user.check_intent(I_FLAG_HELP))
+ visible_message(SPAN_NOTICE("\The [user] hugs \the [src] to make it feel better!"))
+ return TRUE
+
+ if(user.check_intent(I_FLAG_DISARM))
+ if(prob(40))
+ visible_message(SPAN_DANGER("\The [user] shoves \the [src] and it wobbles around, disoriented!"))
+ SET_STATUS_MAX(src, STAT_CONFUSE, 2)
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ else
+ visible_message(SPAN_DANGER("\The [user] shoves \the [src]!"))
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ return TRUE
+
+ if(user.check_intent(I_FLAG_HARM))
+ var/damage = rand(1, 9)
+ var/datum/mob_controller/slime/slime_ai = ai
+ if(istype(slime_ai))
+ slime_ai.attacked += 10
+ slime_ai.adjust_friendship(user, -5)
+ if(prob(10))
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ visible_message(SPAN_DANGER("\The [user] has attempted to punch \the [src]!"))
return TRUE
+ playsound(loc, "punch", 25, 1, -1)
+ visible_message(SPAN_DANGER("\The [user] has punched \the [src]!"))
+ take_damage(damage)
+ return TRUE
return ..()
/mob/living/slime/attackby(var/obj/item/W, var/mob/user)
- var/force = W.get_attack_force(user)
+ var/force = W.expend_attack_force(user)
if(force > 0)
var/datum/mob_controller/slime/slime_ai = ai
if(istype(slime_ai))
@@ -374,6 +373,3 @@
. += "Anomalous slime core amount detected."
. += "Growth progress:\t[amount_grown]/10."
. = jointext(., " ")
-
-/mob/living/slime/can_change_intent()
- return TRUE
diff --git a/mods/content/xenobiology/slime/life.dm b/mods/content/xenobiology/slime/life.dm
index 55b0e665ec1..d71a1d3edd4 100644
--- a/mods/content/xenobiology/slime/life.dm
+++ b/mods/content/xenobiology/slime/life.dm
@@ -46,6 +46,7 @@
. = ..()
if(feeding_on)
slime_feed()
+ var/datum/reagents/metabolism/ingested = reagents
ingested.metabolize()
/mob/living/slime/fluid_act(datum/reagents/fluids)
@@ -86,6 +87,7 @@
. = ..()
if(feeding_on)
slime_feed()
+ var/datum/reagents/metabolism/ingested = reagents
ingested.metabolize()
// Digest whatever we've got floating around in our goop.
diff --git a/mods/content/xenobiology/slime/slime_AI.dm b/mods/content/xenobiology/slime/slime_AI.dm
index 993f1debc4b..bf28ef6cd6b 100644
--- a/mods/content/xenobiology/slime/slime_AI.dm
+++ b/mods/content/xenobiology/slime/slime_AI.dm
@@ -2,8 +2,8 @@
expected_type = /mob/living/slime
var/mood
var/chase_target = 0
- var/mob/living/leader
- var/mob/living/current_target // Currently attacking this mob (separate from feeding)
+ var/weakref/leader
+ var/weakref/current_target // Currently attacking this mob (separate from feeding)
var/attacked = 0 // Determines if it's been attacked recently. Can be any number, is a cooloff-ish variable
var/rabid = 0 // If set to 1, the slime will attack and eat anything it comes in contact with
var/list/observed_friends // A list of refs to friends; they are not considered targets for feeding; passed down after splitting.
@@ -20,6 +20,7 @@
/datum/mob_controller/slime/Destroy()
observed_friends = null
friendship_cooldown = null
+ leader = null
current_target = null
speech_buffer = null
slime = null
@@ -37,14 +38,14 @@
/datum/mob_controller/slime/proc/update_mood()
if(!slime || !body)
return
- body.a_intent_change(I_HELP)
+ body.set_intent(I_FLAG_HELP)
var/new_mood
if(HAS_STATUS(body, STAT_CONFUSE))
new_mood = "pout"
else if(rabid || attacked)
new_mood = "angry"
- body.a_intent_change(I_HURT)
- else if(current_target)
+ body.set_intent(I_FLAG_HARM)
+ else if(current_target?.resolve())
new_mood = "mischevous"
if(!new_mood)
@@ -97,22 +98,27 @@
current_target = null
return
- if(current_target)
+ var/mob/actual_target = current_target?.resolve()
+ if(actual_target)
chase_target--
if(chase_target <= 0 || attacked || rabid) // Tired of chasing or attacking everything nearby
chase_target = 0
current_target = null
+ else
+ current_target = null
var/hunger = slime.get_hunger_state()
- if(!current_target)
+ var/mob/leader_mob = leader?.resolve()
+ actual_target = current_target?.resolve()
+ if(!actual_target)
var/feral = (attacked || rabid || hunger >= 2)
- if(feral || (!leader && !holding_still) || (hunger && prob(10)))
+ if(feral || (!leader_mob && !holding_still) || (hunger && prob(10)))
var/list/targets
for(var/mob/living/prey in view(7, body))
if(assess_target(prey))
LAZYADD(targets, prey)
if(length(targets))
- current_target = get_best_target(targets)
+ current_target = weakref(get_best_target(targets))
chase_target = rand(5,7)
if(slime.is_adult)
chase_target += 3
@@ -120,8 +126,8 @@
if(holding_still)
holding_still = max(holding_still - 1 - hunger, 0)
else if(isturf(body?.loc))
- if(leader)
- step_to(body, get_dir(body, leader))
+ if(leader_mob)
+ step_to(body, get_dir(body, leader_mob))
else if(prob(hunger ? 50 : 33))
body.SelfMove(pick(global.cardinal))
@@ -131,42 +137,42 @@
return
var/added_delay = 0
- if(slime.amount_grown >= SLIME_EVOLUTION_THRESHOLD && !current_target)
+ var/mob/actual_target = current_target?.resolve()
+ if(slime.amount_grown >= SLIME_EVOLUTION_THRESHOLD && !actual_target)
if(slime.is_adult)
slime.slime_split()
else
slime.slime_mature()
added_delay = 10
else
-
- if(!assess_target(current_target) || current_target == slime.feeding_on || !(current_target in view(7, body)))
+ if(!assess_target(actual_target) || actual_target == slime.feeding_on || !(actual_target in view(7, body)))
current_target = null
- if(!current_target)
+ if(!actual_target)
if(prob(1))
for(var/mob/living/slime/frenemy in range(1, body))
if(frenemy != body && body.Adjacent(frenemy))
- body.a_intent_change((frenemy.slime_type == slime.slime_type) ? I_HELP : I_HURT)
- body.UnarmedAttack(frenemy)
+ body.set_intent((frenemy.slime_type == slime.slime_type) ? I_FLAG_HELP : I_FLAG_HARM)
+ body.UnarmedAttack(frenemy, TRUE)
added_delay = 10
- else if(slime.Adjacent(current_target))
+ else if(slime.Adjacent(actual_target))
var/do_attack = FALSE
- if(issilicon(current_target))
- body.a_intent_change(I_HURT)
+ if(issilicon(actual_target))
+ body.set_intent(I_FLAG_HARM)
do_attack = TRUE
- else if(current_target.client && !current_target.current_posture.prone && prob(60 + slime.powerlevel * 4))
- body.a_intent_change(I_DISARM)
+ else if(actual_target.client && !actual_target.current_posture.prone && prob(60 + slime.powerlevel * 4))
+ body.set_intent(I_FLAG_DISARM)
do_attack = TRUE
- else if(slime.check_valid_feed_target(current_target) == FEED_RESULT_VALID)
- body.a_intent_change(I_GRAB)
+ else if(slime.check_valid_feed_target(actual_target) == FEED_RESULT_VALID)
+ body.set_intent(I_FLAG_GRAB)
do_attack = TRUE
if(do_attack)
- body.UnarmedAttack(current_target)
+ body.UnarmedAttack(actual_target, TRUE)
added_delay = 10
else
current_target = null
else
- step_to(body, current_target)
+ step_to(body, actual_target)
next_core_logic_run = world.time + max(body?.get_movement_delay(), 5) + added_delay
@@ -208,13 +214,13 @@
/datum/mob_controller/slime/proc/adjust_friendship(var/atom/user, var/amount)
if(ismob(user))
- if(QDELETED(user))
+ if(QDELING(user))
return FALSE
user = weakref(user)
else if(istype(user, /weakref)) // verify the ref is still valid
var/weakref/user_ref = user
- user = user_ref.resolve()
- if(!ismob(user) || QDELETED(user))
+ var/mob/resolved_user = user_ref.resolve()
+ if(!ismob(resolved_user) || QDELING(resolved_user))
return FALSE
else
return FALSE
diff --git a/mods/content/xenobiology/slime/slime_click.dm b/mods/content/xenobiology/slime/slime_click.dm
index 10befbff0c3..837f4660ea8 100644
--- a/mods/content/xenobiology/slime/slime_click.dm
+++ b/mods/content/xenobiology/slime/slime_click.dm
@@ -18,14 +18,14 @@
A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") // Basic attack.
return TRUE
- if(a_intent == I_HELP)
+ if(check_intent(I_FLAG_HELP))
M.visible_message( \
SPAN_NOTICE("\The [src] gently pokes \the [M]."), \
SPAN_NOTICE("\The [src] gently pokes you."))
return TRUE
var/power = max(0, min(10, (powerlevel + rand(0, 3))))
- if(a_intent == I_DISARM)
+ if(check_intent(I_FLAG_DISARM))
var/stun_prob = 1
if(powerlevel > 0 && !isslime(A))
switch(power * 10)
@@ -46,10 +46,10 @@
SET_STATUS_MAX(src, STAT_WEAK, (power * 0.5))
return TRUE
- if(a_intent == I_GRAB && slime_attach(M))
+ if(check_intent(I_FLAG_GRAB) && slime_attach(M))
return TRUE
- if(a_intent == I_HURT)
+ if(check_intent(I_FLAG_HARM))
if(prob(15) && !M.current_posture.prone)
M.visible_message( \
SPAN_DANGER("\The [src] pounces at \the [M]!"), \
diff --git a/mods/content/xenobiology/slime/slime_commands.dm b/mods/content/xenobiology/slime/slime_commands.dm
index 4290f05accf..3be381f2a01 100644
--- a/mods/content/xenobiology/slime/slime_commands.dm
+++ b/mods/content/xenobiology/slime/slime_commands.dm
@@ -20,15 +20,16 @@
triggers = list("follow")
/decl/slime_command/follow/get_response(var/speaker, var/spoken, var/datum/mob_controller/slime/holder)
- if(holder.leader)
- if(holder.leader == speaker)
+ var/mob/leader_mob = holder.leader?.resolve()
+ if(leader_mob)
+ if(leader_mob == speaker)
return pick("Yes...", "Lead...", "Following...")
- if(LAZYACCESS(holder.observed_friends, weakref(speaker)) > LAZYACCESS(holder.observed_friends, weakref(holder.leader)))
- holder.leader = speaker
+ if(LAZYACCESS(holder.observed_friends, weakref(speaker)) > LAZYACCESS(holder.observed_friends, holder.leader))
+ holder.leader = weakref(speaker)
return "Yes... I follow [speaker]..."
- return "No... I follow [holder.leader]..."
+ return "No... I follow [leader_mob]..."
if(LAZYACCESS(holder.observed_friends, weakref(speaker)) > 2)
- holder.leader = speaker
+ holder.leader = weakref(speaker)
return "I follow..."
return pick("No...", "I won't follow...")
@@ -45,18 +46,20 @@
holder.adjust_friendship(speaker, -1)
return "Grrr..."
return "Fine..."
- if(holder.current_target)
+ var/mob/actual_target = holder.current_target?.resolve()
+ if(actual_target)
if(friendship > 3)
holder.current_target = null
if(friendship < 6)
holder.adjust_friendship(speaker, -1)
return "Grrr..."
return "Fine..."
- if(holder.leader)
- if(holder.leader == speaker)
+ var/mob/leader_mob = holder.leader?.resolve()
+ if(leader_mob)
+ if(leader_mob == speaker)
holder.leader = null
return "Yes... I'll stop..."
- if(friendship > LAZYACCESS(holder.observed_friends, weakref(holder.leader)))
+ if(friendship > LAZYACCESS(holder.observed_friends, holder.leader))
holder.leader = null
return "Yes... I'll stop..."
return "No... I'll keep following..."
@@ -66,11 +69,12 @@
/decl/slime_command/stay/get_response(var/speaker, var/spoken, var/datum/mob_controller/slime/holder)
var/friendship = LAZYACCESS(holder.observed_friends, weakref(speaker))
- if(holder.leader)
- if(holder.leader == speaker)
+ var/mob/leader_mob = holder.leader?.resolve()
+ if(leader_mob)
+ if(leader_mob == speaker)
holder.holding_still = friendship * 10
return "Yes... Staying..."
- var/leader_friendship = LAZYACCESS(holder.observed_friends, weakref(holder.leader))
+ var/leader_friendship = LAZYACCESS(holder.observed_friends, holder.leader)
if(friendship > leader_friendship)
holder.holding_still = (friendship - leader_friendship) * 10
return "Yes... Staying..."
diff --git a/mods/content/xenobiology/slime/slime_comments.dm b/mods/content/xenobiology/slime/slime_comments.dm
index bd8ad9f1146..f009e313123 100644
--- a/mods/content/xenobiology/slime/slime_comments.dm
+++ b/mods/content/xenobiology/slime/slime_comments.dm
@@ -29,8 +29,9 @@
if(holder.slime.nutrition < holder.slime.get_starve_nutrition())
. += list("So... hungry...", "Very... hungry...", "Need... food...", "Must... eat...")
tension += 10
- if(holder.current_target)
- . += "\The [holder.current_target]... looks tasty..."
+ var/mob/actual_target = holder.current_target?.resolve()
+ if(actual_target)
+ . += "\The [actual_target]... looks tasty..."
if(length(.) && prob(tension))
return pick(.)
diff --git a/mods/content/xenobiology/slime/slime_hud.dm b/mods/content/xenobiology/slime/slime_hud.dm
deleted file mode 100644
index c1dcf1b914a..00000000000
--- a/mods/content/xenobiology/slime/slime_hud.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/hud/slime/FinalizeInstantiation()
- action_intent = new(null, mymob, get_ui_style_data(), get_ui_color(), get_ui_alpha(), UI_ICON_INTENT)
- adding = list(action_intent)
- ..()
diff --git a/mods/content/xenobiology/slime/slime_reagents.dm b/mods/content/xenobiology/slime/slime_reagents.dm
index bff84fd00ee..882797de759 100644
--- a/mods/content/xenobiology/slime/slime_reagents.dm
+++ b/mods/content/xenobiology/slime/slime_reagents.dm
@@ -14,22 +14,23 @@
metabolism = REM * 0.25
exoplanet_rarity_gas = MAT_RARITY_EXOTIC
-/decl/material/liquid/water/affect_touch(var/mob/living/M, var/removed, var/datum/reagents/holder)
+/decl/material/liquid/water/affect_touch(var/mob/living/victim, var/removed, var/datum/reagents/holder)
. = ..()
- if(isslime(M))
- M.take_damage(10 * removed, TOX)
- var/mob/living/slime/S = M
- if(istype(S) && istype(S.ai, /datum/mob_controller/slime))
- var/datum/mob_controller/slime/slime_ai = S.ai
- if(slime_ai.current_target)
+ if(isslime(victim))
+ victim.take_damage(10 * removed, TOX)
+ var/mob/living/slime/slime_victim = victim
+ if(istype(slime_victim) && istype(slime_victim.ai, /datum/mob_controller/slime))
+ var/datum/mob_controller/slime/slime_ai = slime_victim.ai
+ if(slime_ai.current_target) // don't bother resolving it, we're just clearing it
slime_ai.current_target = null
- S.set_feeding_on()
- if(LAZYACCESS(M.chem_doses, type) == removed)
- M.visible_message( \
- SPAN_DANGER("\The [S]'s flesh sizzles where \the [name] touches it!"), \
- SPAN_DANGER("Your flesh is burned by \the [name]!"))
- SET_STATUS_MAX(M, STAT_CONFUSE, 2)
- var/datum/mob_controller/slime/slime_ai = M.ai
+ slime_victim.set_feeding_on()
+ if(LAZYACCESS(victim.chem_doses, type) == removed)
+ var/reagent_name = get_reagent_name(holder) // mostly to check masked name, but handles phase too
+ victim.visible_message( \
+ SPAN_DANGER("\The [slime_victim]'s flesh sizzles where \the [reagent_name] touches it!"), \
+ SPAN_DANGER("Your flesh is burned by \the [reagent_name]!"))
+ SET_STATUS_MAX(victim, STAT_CONFUSE, 2)
+ var/datum/mob_controller/slime/slime_ai = victim.ai
if(istype(slime_ai))
slime_ai.attacked = max(slime_ai.attacked, rand(7,10)) // angery
diff --git a/mods/gamemodes/cult/_cult.dme b/mods/gamemodes/cult/_cult.dme
index bda33c4bf96..02138255d74 100644
--- a/mods/gamemodes/cult/_cult.dme
+++ b/mods/gamemodes/cult/_cult.dme
@@ -1,10 +1,6 @@
#ifndef GAMEMODE_PACK_CULT
#define GAMEMODE_PACK_CULT
-#ifdef GAMEMODE_PACK_DEITY
-#warn Deity modpack loaded before Cult modpack, Nar'sie godform will be unavailable!
-#endif
-
// BEGIN_INCLUDE
#include "_cult.dm"
#include "archaeology.dm"
@@ -25,8 +21,11 @@
#include "special_role.dm"
#include "structures.dm"
#include "talisman.dm"
-#include "wizard.dm"
-#include "cultify\de-cultify.dm"
+#include "abilities\_handler.dm"
+#include "abilities\construct.dm"
+#include "abilities\harvest.dm"
+#include "abilities\shade.dm"
+#include "cultify\de-cultify.dm"
#include "cultify\defile.dm"
#include "cultify\mob.dm"
#include "cultify\turf.dm"
@@ -34,7 +33,12 @@
#include "mobs\shade.dm"
#include "mobs\constructs\constructs.dm"
#include "mobs\constructs\soulstone.dm"
-#include "spells\construct.dm"
-#include "spells\harvest.dm"
// END_INCLUDE
-#endif
\ No newline at end of file
+#endif
+// BEGIN_INTERNALS
+// END_INTERNALS
+// BEGIN_FILE_DIR
+#define FILE_DIR .
+// END_FILE_DIR
+// BEGIN_PREFERENCES
+// END_PREFERENCES
diff --git a/mods/gamemodes/cult/abilities/_handler.dm b/mods/gamemodes/cult/abilities/_handler.dm
new file mode 100644
index 00000000000..f346bb73fb4
--- /dev/null
+++ b/mods/gamemodes/cult/abilities/_handler.dm
@@ -0,0 +1,21 @@
+/obj/screen/ability/category/cult
+ name = "Toggle Construct Abilities"
+ icon = 'mods/gamemodes/cult/icons/abilities.dmi'
+
+/obj/screen/ability/button/cult
+ icon = 'mods/gamemodes/cult/icons/abilities.dmi'
+
+/datum/ability_handler/cult
+ category_toggle_type = /obj/screen/ability/category/cult
+
+/decl/ability/cult
+ abstract_type = /decl/ability/cult
+ ability_icon = 'mods/gamemodes/cult/icons/abilities.dmi'
+ ability_icon_state = "artificer"
+ associated_handler_type = /datum/ability_handler/cult
+ ui_element_type = /obj/screen/ability/button/cult
+ ability_cooldown_time = 60 SECONDS
+
+/obj/item/ability/cult
+ icon = 'mods/gamemodes/cult/icons/ability_item.dmi'
+ color = COLOR_RED
diff --git a/mods/gamemodes/cult/abilities/construct.dm b/mods/gamemodes/cult/abilities/construct.dm
new file mode 100644
index 00000000000..60138eaba35
--- /dev/null
+++ b/mods/gamemodes/cult/abilities/construct.dm
@@ -0,0 +1,131 @@
+//////////////////////////////Construct Spells/////////////////////////
+/decl/ability/cult/construct
+ name = "Artificer"
+ desc = "This spell conjures a construct which may be controlled by shades."
+ target_selector = /decl/ability_targeting/clear_turf
+ overlay_icon = 'mods/gamemodes/cult/icons/effects.dmi'
+ overlay_icon_state = "sparkles"
+ target_selector = /decl/ability_targeting/clear_turf/construct
+ var/summon_type = /obj/structure/constructshell
+
+/decl/ability_targeting/clear_turf/construct/validate_target(mob/user, atom/target, list/metadata, decl/ability/ability)
+ var/decl/ability/cult/construct/cult_ability = ability
+ if(!istype(cult_ability))
+ return FALSE
+ return ..() && !istype(target, cult_ability.summon_type) && !(locate(cult_ability.summon_type) in target)
+
+/decl/ability/cult/construct/apply_effect(mob/user, atom/hit_target, list/metadata, obj/item/projectile/ability/projectile)
+ . = ..()
+ var/turf/target_turf = get_turf(hit_target)
+ if(istype(target_turf))
+ if(ispath(summon_type, /turf))
+ target_turf = target_turf.ChangeTurf(summon_type, TRUE, FALSE, TRUE, TRUE, FALSE)
+ if(target_turf) // We reapply effects as target no longer exists.
+ apply_effect_to(user, target_turf, metadata)
+ else if(ispath(summon_type, /atom))
+ new summon_type(target_turf)
+
+/decl/ability/cult/construct/lesser
+ ability_cooldown_time = 2 MINUTES
+ summon_type = /obj/structure/constructshell/cult
+ ability_icon_state = "const_shell"
+
+/decl/ability/cult/construct/floor
+ name = "Floor Construction"
+ desc = "This spell constructs a cult floor"
+ ability_cooldown_time = 2 SECONDS
+ summon_type = /turf/floor/cult
+ ability_icon_state = "const_floor"
+ overlay_icon_state = "cultfloor"
+
+/decl/ability/cult/construct/wall
+ name = "Lesser Construction"
+ desc = "This spell constructs a cult wall"
+ ability_cooldown_time = 10 SECONDS
+ summon_type = /turf/wall/cult
+ ability_icon_state = "const_wall"
+ overlay_icon_state = "cultwall"
+
+/decl/ability/cult/construct/wall/reinforced
+ name = "Greater Construction"
+ desc = "This spell constructs a reinforced metal wall"
+ ability_cooldown_time = 30 SECONDS
+ summon_type = /turf/wall/r_wall
+
+/decl/ability/cult/construct/soulstone
+ name = "Summon Soulstone"
+ desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space."
+ ability_cooldown_time = 5 MINUTES
+ summon_type = /obj/item/soulstone
+ ability_icon_state = "const_stone"
+
+/decl/ability/cult/construct/pylon
+ name = "Red Pylon"
+ desc = "This spell conjures a fragile crystal from Nar-Sie's realm. Makes for a convenient light source."
+ ability_cooldown_time = 20 SECONDS
+ summon_type = /obj/structure/cult/pylon
+ ability_icon_state = "const_pylon"
+ target_selector = /decl/ability_targeting/pylon
+ is_melee_invocation = TRUE
+ prep_cast = TRUE
+
+/decl/ability_targeting/pylon/validate_target(mob/user, atom/target, list/metadata, decl/ability/ability)
+ . = ..()
+ if(!.)
+ return
+ if(istype(target, /obj/structure/cult/pylon))
+ return TRUE
+ if(isturf(target))
+ var/turf/target_turf = target
+ // We can repair pylons, so let us target turfs containing broken pylons.
+ if(target_turf.contains_dense_objects(user))
+ for(var/obj/structure/cult/pylon/pylon in target_turf)
+ if(pylon.isbroken)
+ return TRUE
+ return FALSE
+ // We can summon pylons in empty turfs.
+ return TRUE
+ return FALSE
+
+/decl/ability/cult/construct/pylon/apply_effect(mob/user, atom/hit_target, list/metadata, obj/item/projectile/ability/projectile)
+ for(var/obj/structure/cult/pylon/P in get_turf(hit_target))
+ if(P.isbroken)
+ P.repair(user)
+ return TRUE
+ . = ..()
+
+/decl/ability/cult/construct/forcewall/lesser
+ name = "Force Shield"
+ desc = "Allows you to pull up a shield to protect yourself and allies from incoming threats"
+ summon_type = /obj/effect/cult_force_wall
+ ability_cooldown_time = 30 SECONDS
+ ability_use_channel = 20 SECONDS
+ ability_icon_state = "const_juggwall"
+ prepare_message_3p_str = "$USER$ begins to twist and warp space around $TARGET$, building a wall of force."
+ prepare_message_1p_str = "You begin the lengthy process of warping local space to form a wall of force."
+ cast_message_3p_str = "$USER$ completes a wall of force!"
+ cast_message_1p_str = "You complete a wall of force!"
+ fail_cast_1p_str = "The screaming fabric of spacetime escapes your grip, and the wall of force vanishes."
+
+//Code for the Juggernaut construct's forcefield, that seemed like a good place to put it.
+/obj/effect/cult_force_wall
+ desc = "This eerie-looking obstacle seems to have been pulled from another dimension through sheer force."
+ name = "wall of force"
+ icon = 'mods/gamemodes/cult/icons/effects.dmi'
+ icon_state = "m_shield_cult"
+ light_color = "#b40000"
+ light_range = 2
+ anchored = TRUE
+ opacity = FALSE
+ density = TRUE
+
+/obj/effect/cult_force_wall/Initialize(mapload)
+ . = ..()
+ addtimer(CALLBACK(src, PROC_REF(vanish)), 30 SECONDS)
+
+/obj/effect/cult_force_wall/proc/vanish()
+ density = FALSE
+ icon_state = "m_shield_cult_vanish"
+ sleep(12)
+ if(!QDELETED(src))
+ qdel(src)
diff --git a/mods/gamemodes/cult/abilities/harvest.dm b/mods/gamemodes/cult/abilities/harvest.dm
new file mode 100644
index 00000000000..49569d6a25e
--- /dev/null
+++ b/mods/gamemodes/cult/abilities/harvest.dm
@@ -0,0 +1,41 @@
+/decl/ability/cult/construct/harvest
+ name = "Harvest"
+ desc = "Back to where I come from, and you're coming with me."
+ ability_cooldown_time = 20 SECONDS
+ ability_use_channel = 10 SECONDS
+ overlay_icon_state = "rune_teleport"
+ overlay_lifespan = 0
+ ability_icon_state = "const_harvest"
+ prepare_message_3p_str = "Space around $USER$ begins to bubble and decay as a terrible vista begins to intrude..."
+ prepare_message_1p_str = "You bore through space and time, seeking the essence of the Geometer of Blood."
+ fail_cast_1p_str = "Reality reasserts itself, preventing your return to Nar-Sie."
+ target_selector = /decl/ability_targeting/living_mob
+
+/decl/ability/cult/construct/harvest/can_use_ability(mob/user, list/metadata, silent)
+ . = ..()
+ if(.)
+ var/destination
+ for(var/obj/effect/narsie/N in global.narsie_list)
+ destination = N.loc
+ break
+ if(!destination)
+ to_chat(user, SPAN_DANGER("You cannot sense the Geometer of Blood!"))
+ return FALSE
+
+/decl/ability/cult/construct/harvest/apply_effect(mob/user, atom/hit_target, list/metadata, obj/item/projectile/ability/projectile)
+ ..()
+ var/destination = null
+ for(var/obj/effect/narsie/N in global.narsie_list)
+ destination = N.loc
+ break
+ if(!destination)
+ to_chat(user, SPAN_DANGER("You cannot sense the Geometer of Blood!"))
+ return
+ if(ismob(hit_target) && hit_target != user)
+ var/mob/living/victim = hit_target
+ to_chat(user, SPAN_SINISTER("You warp back to Nar-Sie along with your prey."))
+ to_chat(victim, SPAN_SINISTER("You are wrenched through time and space and thrown into chaos!"))
+ victim.dropInto(destination)
+ else
+ to_chat(user, SPAN_SINISTER("You warp back to Nar-Sie."))
+ user.dropInto(destination)
diff --git a/mods/gamemodes/cult/abilities/shade.dm b/mods/gamemodes/cult/abilities/shade.dm
new file mode 100644
index 00000000000..5fab626d14d
--- /dev/null
+++ b/mods/gamemodes/cult/abilities/shade.dm
@@ -0,0 +1 @@
+/decl/ability/cult/construct/shift
\ No newline at end of file
diff --git a/mods/gamemodes/cult/flooring.dm b/mods/gamemodes/cult/flooring.dm
index a92973b1077..71aff2a3ff3 100644
--- a/mods/gamemodes/cult/flooring.dm
+++ b/mods/gamemodes/cult/flooring.dm
@@ -7,6 +7,6 @@
turf_flags = TURF_ACID_IMMUNE | TURF_REMOVE_WRENCH
can_paint = null
-/decl/flooring/reinforced/cult/on_remove()
+/decl/flooring/reinforced/cult/on_flooring_remove(turf/removing_from)
var/decl/special_role/cultist/cult = GET_DECL(/decl/special_role/cultist)
cult.remove_cultiness(CULTINESS_PER_TURF)
diff --git a/mods/gamemodes/cult/ghosttrap.dm b/mods/gamemodes/cult/ghosttrap.dm
index 3e5d7452df6..07faf87515f 100644
--- a/mods/gamemodes/cult/ghosttrap.dm
+++ b/mods/gamemodes/cult/ghosttrap.dm
@@ -20,9 +20,3 @@
var/obj/item/soulstone/stone = new(get_turf(user))
stone.shade = new(stone)
request_player(stone.shade, "The soul stone shade summon ritual has been performed. ")
-
-#ifdef GAMEMODE_PACK_DEITY
-/decl/ghosttrap/cult_shade/Initialize()
- ban_checks |= /decl/special_role/godcultist
- . = ..()
-#endif
\ No newline at end of file
diff --git a/mods/gamemodes/cult/hell_universe.dm b/mods/gamemodes/cult/hell_universe.dm
index c5e5ad0adf0..5133b72ba09 100644
--- a/mods/gamemodes/cult/hell_universe.dm
+++ b/mods/gamemodes/cult/hell_universe.dm
@@ -40,9 +40,3 @@ In short:
for(var/mob/living/simple_animal/M in SSmobs.mob_list)
if(M && !M.client)
M.set_stat(DEAD)
-
-// Disable Narsie when we enter other (non-hell) universe states
-/datum/universal_state/supermatter_cascade/OnEnter()
- // Disable Nar-Sie.
- var/decl/special_role/cultist/cult = GET_DECL(/decl/special_role/cultist)
- cult.allow_narsie = 0
\ No newline at end of file
diff --git a/mods/gamemodes/cult/icons/abilities.dmi b/mods/gamemodes/cult/icons/abilities.dmi
new file mode 100644
index 00000000000..f1d5d8bc121
Binary files /dev/null and b/mods/gamemodes/cult/icons/abilities.dmi differ
diff --git a/mods/gamemodes/cult/icons/ability_item.dmi b/mods/gamemodes/cult/icons/ability_item.dmi
new file mode 100644
index 00000000000..e22793f4f6b
Binary files /dev/null and b/mods/gamemodes/cult/icons/ability_item.dmi differ
diff --git a/mods/gamemodes/cult/icons/effects.dmi b/mods/gamemodes/cult/icons/effects.dmi
new file mode 100644
index 00000000000..9e238941454
Binary files /dev/null and b/mods/gamemodes/cult/icons/effects.dmi differ
diff --git a/mods/gamemodes/cult/icons/forcewall.dmi b/mods/gamemodes/cult/icons/forcewall.dmi
new file mode 100644
index 00000000000..04b8560cdac
Binary files /dev/null and b/mods/gamemodes/cult/icons/forcewall.dmi differ
diff --git a/icons/effects/uristrunes.dmi b/mods/gamemodes/cult/icons/runes.dmi
similarity index 100%
rename from icons/effects/uristrunes.dmi
rename to mods/gamemodes/cult/icons/runes.dmi
diff --git a/mods/gamemodes/cult/items.dm b/mods/gamemodes/cult/items.dm
index 01a8555e665..e4faf111e49 100644
--- a/mods/gamemodes/cult/items.dm
+++ b/mods/gamemodes/cult/items.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/items/weapon/swords/cult.dmi'
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME
-// separated into a proc so that deity can modify it
+// separated into a proc so that modpacks can modify it
/obj/item/sword/cultblade/proc/can_use_safely(mob/living/user)
return iscultist(user)
@@ -21,12 +21,12 @@
affecting = GET_EXTERNAL_ORGAN(H, zone)
if(affecting)
- to_chat(user, " An unexplicable force rips through your [affecting.name], tearing the sword from your grasp!")
+ to_chat(user, SPAN_DANGER("An unexplicable force rips through your [affecting.name], tearing the sword from your grasp!"))
else
- to_chat(user, " An unexplicable force rips through you, tearing the sword from your grasp!")
+ to_chat(user, SPAN_DANGER("An unexplicable force rips through you, tearing the sword from your grasp!"))
//random amount of damage between half of the blade's force and the full force of the blade.
- var/force = get_attack_force(user)
+ var/force = expend_attack_force(user)
user.apply_damage(rand(force/2, force), BRUTE, zone, (DAM_SHARP|DAM_EDGE), armor_pen = 100)
SET_STATUS_MAX(user, STAT_WEAK, 5)
diff --git a/mods/gamemodes/cult/mobs/constructs/constructs.dm b/mods/gamemodes/cult/mobs/constructs/constructs.dm
index d5b09c3c438..1eb37f6980b 100644
--- a/mods/gamemodes/cult/mobs/constructs/constructs.dm
+++ b/mods/gamemodes/cult/mobs/constructs/constructs.dm
@@ -5,13 +5,11 @@
speak_emote = list("hisses")
base_animal_type = /mob/living/simple_animal/construct
base_movement_delay = -1
-
response_help_1p = "You think better of touching $TARGET$."
response_help_3p = "$USER$ thinks better of touching $TARGET$."
response_disarm = "flails at"
response_harm = "punches"
icon = 'icons/mob/simple_animal/shade.dmi'
- a_intent = I_HURT
status_flags = CANPUSH
universal_speak = FALSE
universal_understand = TRUE
@@ -32,7 +30,7 @@
z_flags = ZMM_MANGLE_PLANES
glowing_eyes = TRUE
ai = /datum/mob_controller/aggressive/construct
- var/list/construct_spells = list()
+ var/list/construct_spells
/datum/mob_controller/aggressive/construct
emote_speech = list("Hsssssssszsht.", "Hsssssssss...", "Tcshsssssssszht!")
@@ -55,7 +53,7 @@
add_language(/decl/language/cultcommon)
add_language(/decl/language/cult)
for(var/spell in construct_spells)
- src.add_spell(new spell, "const_spell_ready")
+ add_ability(spell)
set_light(1.5, -2, COLOR_WHITE)
update_icon()
@@ -108,7 +106,9 @@
environment_smash = 2
status_flags = 0
resistance = 10
- construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser)
+ construct_spells = list(
+ /decl/ability/cult/construct/forcewall/lesser
+ )
hud_used = /datum/hud/construct/juggernaut
base_movement_delay = 2
ai = /datum/mob_controller/aggressive/construct_armoured
@@ -164,7 +164,9 @@
natural_weapon = /obj/item/natural_weapon/wraith
environment_smash = 1
see_in_dark = 7
- construct_spells = list(/spell/targeted/ethereal_jaunt/shift)
+ construct_spells = list(
+ /decl/ability/cult/construct/shift
+ )
hud_used = /datum/hud/construct/wraith
/obj/item/natural_weapon/wraith
@@ -195,11 +197,11 @@
natural_weapon = /obj/item/natural_weapon/cult_builder
environment_smash = 1
construct_spells = list(
- /spell/aoe_turf/conjure/construct/lesser,
- /spell/aoe_turf/conjure/wall,
- /spell/aoe_turf/conjure/floor,
- /spell/aoe_turf/conjure/soulstone,
- /spell/aoe_turf/conjure/pylon
+ /decl/ability/cult/construct/lesser,
+ /decl/ability/cult/construct/wall,
+ /decl/ability/cult/construct/floor,
+ /decl/ability/cult/construct/soulstone,
+ /decl/ability/cult/construct/pylon
)
hud_used = /datum/hud/construct/artificer
base_movement_delay = 0
@@ -229,7 +231,9 @@
natural_weapon = /obj/item/natural_weapon/juggernaut/behemoth
environment_smash = 2
resistance = 10
- construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser)
+ construct_spells = list(
+ /decl/ability/cult/construct/lesser
+ )
hud_used = /datum/hud/construct/juggernaut
base_movement_delay = 2
ai = /datum/mob_controller/aggressive/construct_armoured
@@ -250,7 +254,7 @@
see_in_dark = 7
hud_used = /datum/hud/construct/harvester
construct_spells = list(
- /spell/targeted/harvest
+ /decl/ability/cult/construct/harvest
)
/obj/item/natural_weapon/harvester
@@ -265,14 +269,14 @@
/mob/living/simple_animal/construct/handle_regular_status_updates()
. = ..()
if(.)
- silence_spells(purge)
+ disable_abilities(purge)
/mob/living/simple_animal/construct/handle_regular_hud_updates()
. = ..()
if(.)
if(fire)
fire.icon_state = "fire[!!GET_HUD_ALERT(src, /decl/hud_element/condition/fire)]"
- silence_spells(purge)
+ disable_abilities(purge)
if(healths)
switch(current_health)
if(250 to INFINITY) healths.icon_state = "health0"
diff --git a/mods/gamemodes/cult/mobs/constructs/soulstone.dm b/mods/gamemodes/cult/mobs/constructs/soulstone.dm
index a6e8d693c3b..69e5d0ef21e 100644
--- a/mods/gamemodes/cult/mobs/constructs/soulstone.dm
+++ b/mods/gamemodes/cult/mobs/constructs/soulstone.dm
@@ -51,7 +51,7 @@
to_chat(user, SPAN_NOTICE("You cleanse \the [src] of taint, purging its shackles to its creator."))
is_evil = FALSE
return TRUE
- else if(I.get_attack_force(user) >= 5)
+ else if(I.expend_attack_force(user) >= 5)
if(full != SOULSTONE_CRACKED)
user.visible_message(
SPAN_WARNING("\The [user] hits \the [src] with \the [I], and it breaks.[shade.client ? " You hear a terrible scream!" : ""]"),
@@ -107,6 +107,33 @@
full = f
update_icon()
+// Soulstone synthesis recipe.
+/decl/chemical_reaction/synthesis/soulstone
+ name = "Soulstone"
+ result = null
+ required_reagents = list(/decl/material/liquid/blood = 15, /decl/material/liquid/crystal_agent = 1)
+ result_amount = 1
+ hidden_from_codex = TRUE // This shouldn't show up in search. Maybe it should be linked in a 'guide to cult' or something?
+
+/decl/chemical_reaction/synthesis/soulstone/send_data(datum/reagents/holder, reaction_limit)
+ return REAGENT_DATA(holder, /decl/material/liquid/blood) // allow on_reaction to get donor data
+
+/// Whether or not the reaction should produce a soulstone or a normal crystal.
+/// The donor mob parameter may either be /mob/living or null.
+/decl/chemical_reaction/synthesis/soulstone/proc/donor_is_magic(mob/living/donor)
+ return FALSE // By default, no one is magic! This is for modpacks to override.
+
+/decl/chemical_reaction/synthesis/soulstone/on_reaction(datum/reagents/holder, created_volume, list/reaction_data)
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
+ var/weakref/donor_ref = LAZYACCESS(reaction_data, DATA_BLOOD_DONOR)
+ if(donor_is_magic(donor_ref?.resolve()))
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/soulstone(location)
+ else // waste it and produce useless crystal shards
+ for(var/i = 1, i <= created_volume*2, i++)
+ new /obj/item/shard(location, /decl/material/solid/gemstone/crystal)
+
+// Construct shells. These accept soulstones.
/obj/structure/constructshell
name = "empty shell"
icon = 'icons/obj/structures/construct.dmi'
diff --git a/mods/gamemodes/cult/overrides.dm b/mods/gamemodes/cult/overrides.dm
index 874dc92049c..2d822d252c7 100644
--- a/mods/gamemodes/cult/overrides.dm
+++ b/mods/gamemodes/cult/overrides.dm
@@ -14,20 +14,8 @@
else
playsound(src, 'sound/effects/ghost2.ogg', 10, 5)
-/datum/trader/ship/unique/wizard/New()
- possible_wanted_items |= list(
- /mob/living/simple_animal/construct = TRADER_SUBTYPES_ONLY,
- /obj/item/sword/cultblade = TRADER_THIS_TYPE,
- /obj/item/clothing/head/culthood = TRADER_ALL,
- /obj/item/clothing/suit/space/cult = TRADER_ALL,
- /obj/item/clothing/suit/cultrobes = TRADER_ALL,
- /obj/item/clothing/head/helmet/space/cult = TRADER_ALL,
- /obj/structure/cult = TRADER_SUBTYPES_ONLY,
- /obj/structure/constructshell = TRADER_ALL
- )
- ..()
-
/datum/trader/ship/clothingshop/hatglovesaccessories/New()
+ ..()
possible_trading_items[/obj/item/clothing/head/culthood] = TRADER_BLACKLIST_ALL
/mob/living/silicon/ai
@@ -60,9 +48,9 @@
/mob/living/simple_animal/hostile/revenant/cult/on_defilement()
return
-/obj/item/mop/Initialize()
+/obj/item/mop/populate_moppable_types()
. = ..()
- moppable_types += /obj/effect/rune
+ moppable_types |= /obj/effect/rune
/obj/effect/gateway/active/can_transform(mob/victim)
if(iscultist(victim))
diff --git a/mods/gamemodes/cult/runes.dm b/mods/gamemodes/cult/runes.dm
index 11fd2e328ed..c54cb016914 100644
--- a/mods/gamemodes/cult/runes.dm
+++ b/mods/gamemodes/cult/runes.dm
@@ -2,7 +2,7 @@
name = "rune"
desc = "A strange collection of symbols drawn in blood."
anchored = TRUE
- icon = 'icons/effects/uristrunes.dmi'
+ icon = 'mods/gamemodes/cult/icons/runes.dmi'
icon_state = "blank"
layer = RUNE_LAYER
@@ -24,7 +24,7 @@
if(cult.rune_strokes[type])
var/list/f = cult.rune_strokes[type]
for(var/i in f)
- var/image/t = image('icons/effects/uristrunes.dmi', "rune-[i]")
+ var/image/t = image(icon, "rune-[i]")
overlays += t
else
var/list/q = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
@@ -33,7 +33,7 @@
var/j = pick(q)
f += j
q -= f
- var/image/t = image('icons/effects/uristrunes.dmi', "rune-[j]")
+ var/image/t = image(icon, "rune-[j]")
overlays += t
cult.rune_strokes[type] = f.Copy()
color = bcolor
@@ -322,7 +322,7 @@
user.visible_message(SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it disappears."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [I]."))
qdel(src)
return TRUE
- var/force = I.get_attack_force(user)
+ var/force = I.expend_attack_force(user)
if(force)
user.visible_message(SPAN_NOTICE("\The [user] hits \the [src] with \the [I]."), SPAN_NOTICE("You hit \the [src] with \the [I]."))
take_damage(force, I.atom_damage_type)
@@ -480,9 +480,8 @@
var/list/mob/living/casters = get_cultists()
if(casters.len < 3)
break
- //T.turf_animation('icons/effects/effects.dmi', "rune_sac")
- victim.fire_stacks = max(2, victim.fire_stacks)
- victim.IgniteMob()
+ victim.set_fire_intensity(max(2, victim.get_fire_intensity()))
+ victim.ignite_fire()
var/dam_amt = 2 + length(casters)
victim.take_organ_damage(dam_amt, dam_amt) // This is to speed up the process and also damage mobs that don't take damage from being on fire, e.g. borgs
if(ishuman(victim))
@@ -505,10 +504,9 @@
to_chat(victim, SPAN_OCCULT("The Geometer of Blood claims your body."))
victim.dust()
if(victim)
- victim.ExtinguishMob() // Technically allows them to put the fire out by sacrificing them and stopping immediately, but I don't think it'd have much effect
+ victim.extinguish_fire() // Technically allows them to put the fire out by sacrificing them and stopping immediately, but I don't think it'd have much effect
victim = null
-
/obj/effect/rune/drain
cultname = "blood drain"
strokes = 3
diff --git a/mods/gamemodes/cult/spells/construct.dm b/mods/gamemodes/cult/spells/construct.dm
deleted file mode 100644
index a300bacacb2..00000000000
--- a/mods/gamemodes/cult/spells/construct.dm
+++ /dev/null
@@ -1,122 +0,0 @@
-//////////////////////////////Construct Spells/////////////////////////
-
-/spell/aoe_turf/conjure/construct
- name = "Artificer"
- desc = "This spell conjures a construct which may be controlled by Shades."
-
- school = "conjuration"
- charge_max = 600
- spell_flags = 0
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
-
- summon_type = list(/obj/structure/constructshell)
-
- hud_state = "artificer"
-
-/spell/aoe_turf/conjure/construct/lesser
- charge_max = 1800
- summon_type = list(/obj/structure/constructshell/cult)
- hud_state = "const_shell"
- override_base = "const"
-
-/spell/aoe_turf/conjure/floor
- name = "Floor Construction"
- desc = "This spell constructs a cult floor"
-
- charge_max = 20
- spell_flags = Z2NOCAST | CONSTRUCT_CHECK
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
- summon_type = list(/turf/floor/cult)
-
- hud_state = "const_floor"
-
-/spell/aoe_turf/conjure/wall
- name = "Lesser Construction"
- desc = "This spell constructs a cult wall"
-
- charge_max = 100
- spell_flags = Z2NOCAST | CONSTRUCT_CHECK
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
- summon_type = list(/turf/wall/cult)
-
- hud_state = "const_wall"
-
-/spell/aoe_turf/conjure/wall/reinforced
- name = "Greater Construction"
- desc = "This spell constructs a reinforced metal wall"
-
- charge_max = 300
- spell_flags = Z2NOCAST
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
- cast_delay = 50
-
- summon_type = list(/turf/wall/r_wall)
-
-/spell/aoe_turf/conjure/soulstone
- name = "Summon Soulstone"
- desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space"
-
- charge_max = 3000
- spell_flags = 0
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
-
- summon_type = list(/obj/item/soulstone)
-
- hud_state = "const_stone"
- override_base = "const"
-
-/spell/aoe_turf/conjure/pylon
- name = "Red Pylon"
- desc = "This spell conjures a fragile crystal from Nar-Sie's realm. Makes for a convenient light source."
-
- charge_max = 200
- spell_flags = CONSTRUCT_CHECK
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
-
- summon_type = list(/obj/structure/cult/pylon)
-
- hud_state = "const_pylon"
-
-/spell/aoe_turf/conjure/pylon/cast(list/targets)
- ..()
- var/turf/spawn_place = pick(targets)
- for(var/obj/structure/cult/pylon/P in spawn_place.contents)
- if(P.isbroken)
- P.repair(usr)
- continue
- return
-
-/spell/aoe_turf/conjure/forcewall/lesser
- name = "Force Shield"
- desc = "Allows you to pull up a shield to protect yourself and allies from incoming threats"
-
- charge_max = 300
- spell_flags = 0
- invocation = "none"
- invocation_type = SpI_NONE
- range = 0
- summon_type = list(/obj/effect/forcefield/cult)
- duration = 200
-
- hud_state = "const_juggwall"
-
-//Code for the Juggernaut construct's forcefield, that seemed like a good place to put it.
-/obj/effect/forcefield/cult
- desc = "That eerie looking obstacle seems to have been pulled from another dimension through sheer force."
- name = "Juggerwall"
- icon = 'icons/effects/effects.dmi'
- icon_state = "m_shield_cult"
- light_color = "#b40000"
- light_range = 2
\ No newline at end of file
diff --git a/mods/gamemodes/cult/spells/harvest.dm b/mods/gamemodes/cult/spells/harvest.dm
deleted file mode 100644
index 41854b772bc..00000000000
--- a/mods/gamemodes/cult/spells/harvest.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/spell/targeted/harvest
- name = "Harvest"
- desc = "Back to where I come from, and you're coming with me."
-
- school = "transmutation"
- charge_max = 200
- spell_flags = Z2NOCAST | CONSTRUCT_CHECK | INCLUDEUSER
- invocation = ""
- invocation_type = SpI_NONE
- range = 0
- max_targets = 0
-
- overlay = 1
- overlay_icon = 'icons/effects/effects.dmi'
- overlay_icon_state = "rune_teleport"
- overlay_lifespan = 0
-
- hud_state = "const_harvest"
-
-/spell/targeted/harvest/cast(list/targets, mob/user)//because harvest is already a proc
- ..()
-
- var/destination = null
- for(var/obj/effect/narsie/N in global.narsie_list)
- destination = N.loc
- break
- if(destination)
- var/prey = 0
- for(var/mob/living/M in targets)
- if(!findNullRod(M))
- M.forceMove(destination)
- if(M != user)
- prey = 1
- to_chat(user, " You warp back to Nar-Sie[prey ? " along with your prey":""].")
- else
- to_chat(user, " ...something's wrong!")//There shouldn't be an instance of Harvesters when Nar-Sie isn't in the world.
-
diff --git a/mods/gamemodes/cult/structures.dm b/mods/gamemodes/cult/structures.dm
index 51db7add603..9f39d61522d 100644
--- a/mods/gamemodes/cult/structures.dm
+++ b/mods/gamemodes/cult/structures.dm
@@ -13,10 +13,10 @@
desc = "A floating crystal that hums with an unearthly energy."
icon = 'icons/obj/structures/pylon.dmi'
icon_state = "pylon"
- var/isbroken = 0
light_power = 0.5
light_range = 13
light_color = "#3e0000"
+ var/isbroken = FALSE
/obj/structure/cult/pylon/attack_hand(mob/M)
SHOULD_CALL_PARENT(FALSE)
@@ -28,7 +28,7 @@
return TRUE
/obj/structure/cult/pylon/attackby(obj/item/W, mob/user)
- attackpylon(user, W.get_attack_force(user))
+ attackpylon(user, W.expend_attack_force(user))
return TRUE
/obj/structure/cult/pylon/proc/attackpylon(mob/user, var/damage)
@@ -42,7 +42,7 @@
)
user.do_attack_animation(src)
playsound(get_turf(src), 'sound/effects/Glassbr3.ogg', 75, 1)
- isbroken = 1
+ isbroken = TRUE
set_density(0)
icon_state = "pylon-broken"
set_light(0)
@@ -61,10 +61,12 @@
/obj/structure/cult/pylon/proc/repair(mob/user)
if(isbroken)
to_chat(user, "You repair the pylon.")
- isbroken = 0
+ isbroken = FALSE
set_density(1)
icon_state = "pylon"
set_light(13, 0.5)
+ return TRUE
+ return FALSE
/obj/structure/cult/pylon/get_artifact_scan_data()
return "Tribal pylon - subject resembles statues/emblems built by cargo cult civilisations to honour energy systems from post-warp civilisations."
diff --git a/mods/gamemodes/cult/wizard.dm b/mods/gamemodes/cult/wizard.dm
deleted file mode 100644
index b29fa023f65..00000000000
--- a/mods/gamemodes/cult/wizard.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-// #ifdef GAMEMODE_PACK_WIZARD
-// todo: add wizard gamemode define check once it's modularized
-/decl/modpack/cult/post_initialize()
- . = ..()
- global.artefact_feedback[/obj/structure/closet/wizard/souls] = "SS"
-
-/datum/spellbook/standard/New()
- spells[/obj/structure/closet/wizard/souls] = 1
- ..()
-
-/datum/spellbook/druid/New()
- spells[/obj/structure/closet/wizard/souls] = 1
- ..()
-
-/obj/structure/closet/wizard/souls
- name = "Soul Shard Belt"
- desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot. This also includes the spell Artificer, used to create the shells used in construct creation."
-
-/obj/structure/closet/wizard/souls/WillContain()
- return list(
- /obj/item/contract/boon/wizard/artificer,
- /obj/item/belt/soulstone/full,
- )
-
-/datum/storage/belt/soulstone
- can_hold = list(
- /obj/item/soulstone
- )
-
-/obj/item/belt/soulstone
- name = "soul stone belt"
- desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away."
- icon = 'icons/clothing/belt/soulstones.dmi'
- storage = /datum/storage/belt/soulstone
-
-/obj/item/belt/soulstone/full/WillContain()
- return list(/obj/item/soulstone = max(1, storage?.storage_slots))
-
-/obj/item/contract/boon/wizard/artificer
- path = /spell/aoe_turf/conjure/construct
- desc = "This contract has a passage dedicated to an entity known as 'Nar-Sie'."
-
-/obj/item/magic_rock
- material = /decl/material/solid/stone/cult
-
-/obj/item/summoning_stone
- material = /decl/material/solid/stone/cult
\ No newline at end of file
diff --git a/mods/gamemodes/deity/_defines.dm b/mods/gamemodes/deity/_defines.dm
deleted file mode 100644
index 285469200ee..00000000000
--- a/mods/gamemodes/deity/_defines.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-#define DEITY_TREE_SACRIFICE "Sacrificing"
-#define DEITY_TREE_SOUL "Soul Arts"
-#define DEITY_TREE_DARK_MINION "Summoning"
-#define DEITY_TREE_TRANSMUTATION "Transmutation"
-#define DEITY_TREE_CONJURATION "Conjuration"
-#define DEITY_TREE_ARTIFACT "Artifacts"
-#define DEITY_TREE_FIRECONJ "Fire Conjuration"
-#define DEITY_TREE_HERALD "Phenomenas"
-
-#define DEITY_BLOOD_CRAFT "Blood Crafting"
-#define DEITY_ARMOR_CRAFT "Armor Crafting"
-#define DEITY_VOID_CRAFT "Void Crafting"
-#define DEITY_UNLOCK_ARMS "Unlock Armaments"
-#define DEITY_UNLOCK_HEAL "Unlock Cleric Spells"
-
-#define isdeity(A) istype(A, /mob/living/deity)
-
-#define DEITY_STRUCTURE_NEAR_IMPORTANT 1 //Whether this needs to be near an important structure.
-#define DEITY_STRUCTURE_ALONE 2 //Whether this can be near another of the same type.
\ No newline at end of file
diff --git a/mods/gamemodes/deity/_deity.dm b/mods/gamemodes/deity/_deity.dm
deleted file mode 100644
index 6c658e122b3..00000000000
--- a/mods/gamemodes/deity/_deity.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/decl/modpack/deity
- name = "Deity Gamemode Content"
\ No newline at end of file
diff --git a/mods/gamemodes/deity/_deity.dme b/mods/gamemodes/deity/_deity.dme
deleted file mode 100644
index a1603dd317d..00000000000
--- a/mods/gamemodes/deity/_deity.dme
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef GAMEMODE_PACK_DEITY
-#define GAMEMODE_PACK_DEITY
-// BEGIN_INCLUDE
-#include "_defines.dm"
-#include "_deity.dm"
-#include "codex.dm"
-#include "deity_base.dm"
-#include "deity_role.dm"
-#include "gamemode.dm"
-#include "god_cultist_role.dm"
-#include "overrides.dm"
-#include "extensions\deity_be_near.dm"
-#include "forms\forms.dm"
-// These should only load if cult is loaded.
-#ifdef GAMEMODE_PACK_CULT
-#include "forms\narsie\items.dm"
-#include "forms\narsie\narsie.dm"
-#include "forms\narsie\structures.dm"
-#include "forms\narsie\deity_items\basic.dm"
-#include "forms\narsie\deity_items\minions.dm"
-#include "forms\narsie\deity_items\sacrificing.dm"
-#include "forms\narsie\deity_items\smithing.dm"
-#include "forms\narsie\spells\tear_veil.dm"
-#endif
-#include "forms\starlight\items.dm"
-#include "forms\starlight\mobs.dm"
-#include "forms\starlight\starlight.dm"
-#include "forms\starlight\structures.dm"
-#include "forms\starlight\deity_items\artifacts.dm"
-#include "forms\starlight\deity_items\phenomena.dm"
-#include "forms\starlight\deity_items\spells.dm"
-#include "forms\starlight\spells\disable_tech.dm"
-#include "forms\starlight\spells\starlight_aura.dm"
-#include "forms\starlight\spells\veil_of_shadows.dm"
-#include "forms\tower\spells.dm"
-#include "forms\tower\structures.dm"
-#include "forms\tower\tower.dm"
-#include "forms\tower\deity_items\conjuration.dm"
-#include "forms\tower\deity_items\transmutation.dm"
-#include "mobs\deity.dm"
-#include "mobs\deity_boons.dm"
-#include "mobs\deity_click.dm"
-#include "mobs\deity_hud.dm"
-#include "mobs\deity_items.dm"
-#include "mobs\deity_phenomena.dm"
-#include "mobs\deity_power.dm"
-#include "mobs\deity_pylon.dm"
-#include "mobs\deity_sources.dm"
-#include "mobs\deity_Stat.dm"
-#include "mobs\deity_topic.dm"
-#include "mobs\deity_tracking.dm"
-#include "mobs\say.dm"
-#include "mobs\freelook\cultnet.dm"
-#include "mobs\freelook\mask.dm"
-#include "mobs\items\blood_crafting.dm"
-#include "mobs\items\deity_item.dm"
-#include "mobs\items\general.dm"
-#include "mobs\items\generic.dm"
-#include "mobs\menu\deity_nano.dm"
-#include "mobs\phenomena\_defines.dm"
-#include "mobs\phenomena\communication.dm"
-#include "mobs\phenomena\conjuration.dm"
-#include "mobs\phenomena\conversion.dm"
-#include "mobs\phenomena\generic.dm"
-#include "mobs\phenomena\narsie.dm"
-#include "mobs\phenomena\phenomena.dm"
-#include "mobs\phenomena\starlight.dm"
-#include "mobs\phenomena\transmutation.dm"
-#include "screen\intent.dm"
-#include "spells\boon.dm"
-#include "spells\construction.dm"
-#include "spells\open_gateway.dm"
-#include "spells\vision.dm"
-#include "structures\altar.dm"
-#include "structures\blood_forge.dm"
-#include "structures\pylon.dm"
-#include "structures\structures.dm"
-#include "structures\trap.dm"
-// END_INCLUDE
-#endif
\ No newline at end of file
diff --git a/mods/gamemodes/deity/codex.dm b/mods/gamemodes/deity/codex.dm
deleted file mode 100644
index fae5bfe607a..00000000000
--- a/mods/gamemodes/deity/codex.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/datum/codex_entry/deity
- abstract_type = /datum/codex_entry/deity
-
-/datum/codex_entry/deity/altar
- associated_paths = list(/obj/structure/deity/altar)
- mechanics_text = "To place someone upon the altar, first have them in an aggressive grab and click the altar while adjacent."
- antag_text = "This structure anchors your deity within this realm, granting them additional power to influence it and empower their followers. Additionally, using it as a focus for their powers, they can convert someone laying on top of the altar. "
- disambiguator = "occult"
-
-/datum/codex_entry/deity/blood_forge
- associated_paths = list(/obj/structure/deity/blood_forge)
- antag_text = "Allows creation of special items by feeding your blood into it. Only usable by cultists of the aligned deity."
- disambiguator = "occult"
-
-/datum/codex_entry/deity/gateway
- associated_paths = list(/obj/structure/deity/gateway)
- antag_text = "Stand within the gateway to be transported to an unknown dimension and transformed into a flaming Starborn, a mysterious Blueforged or a subtle Shadowling."
- disambiguator = "occult"
-
-/datum/codex_entry/deity/radiant_statue
- associated_paths = list(/obj/structure/deity/radiant_statue)
- antag_text = "Allows storage of power if cultists are nearby. This stored power can be expended to charge Starlight items."
- disambiguator = "occult"
-
-/datum/codex_entry/deity/blood_forge/starlight
- associated_paths = list(/obj/structure/deity/blood_forge/starlight)
- antag_text = "Allows creation of special Starlight items. Only usable by cultists of the aligned deity. Use of this powerful forge will inflict burns."
- disambiguator = "occult"
-
-/datum/codex_entry/deity/wizard_recharger
- associated_paths = list(/obj/structure/deity/wizard_recharger)
- antag_text = "A well of arcane power. When charged, a cultist may absorb this power to refresh their spells."
- disambiguator = "occult"
-
-/datum/codex_entry/deity/pylon
- associated_paths = list(/obj/structure/deity/pylon)
- antag_text = "Serves as a conduit for a deity to speak through, making their will known in this dimension to any who hear it."
- disambiguator = "occult"
\ No newline at end of file
diff --git a/mods/gamemodes/deity/deity_base.dm b/mods/gamemodes/deity/deity_base.dm
deleted file mode 100644
index 0d7268ebd64..00000000000
--- a/mods/gamemodes/deity/deity_base.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/datum/map_template/ruin/antag_spawn/deity
- name = "Deity Base"
- mappaths = list(
- "mods/gamemodes/deity/deity_base.dmm"
- )
- apc_test_exempt_areas = list(
- /area/map_template/deity_spawn = NO_SCRUBBER|NO_VENT|NO_APC
- )
-
-/area/map_template/deity_spawn
- name = "\improper Deity Spawn"
- icon_state = "yellow"
- requires_power = 0
- dynamic_lighting = FALSE
diff --git a/mods/gamemodes/deity/deity_base.dmm b/mods/gamemodes/deity/deity_base.dmm
deleted file mode 100644
index 7e009c2d0bd..00000000000
--- a/mods/gamemodes/deity/deity_base.dmm
+++ /dev/null
@@ -1,1035 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/turf/space/infinity,
-/area/map_template/deity_spawn)
-"b" = (
-/turf/unsimulated/floor/lava,
-/area/map_template/deity_spawn)
-"c" = (
-/turf/unsimulated/floor/water,
-/area/map_template/deity_spawn)
-"d" = (
-/obj/abstract/landmark{
- name = "DeitySpawn"
- },
-/turf/unsimulated/floor/lava,
-/area/map_template/deity_spawn)
-"e" = (
-/obj/abstract/landmark{
- name = "DeitySpawn"
- },
-/turf/unsimulated/floor/water,
-/area/map_template/deity_spawn)
-
-(1,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(2,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(3,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(4,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(5,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(6,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(7,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(8,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(9,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(10,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(11,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(12,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(13,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-d
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(14,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(15,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(16,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(17,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(18,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(19,1,1) = {"
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-"}
-(20,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(21,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(22,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(23,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(24,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(25,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(26,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(27,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(28,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(29,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(30,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(31,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(32,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-e
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(33,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(34,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(35,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(36,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(37,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(38,1,1) = {"
-a
-a
-a
-a
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-c
-a
-a
-a
-a
-"}
-(39,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(40,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(41,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(42,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(43,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(44,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
diff --git a/mods/gamemodes/deity/deity_role.dm b/mods/gamemodes/deity/deity_role.dm
deleted file mode 100644
index 0426f6e8568..00000000000
--- a/mods/gamemodes/deity/deity_role.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/decl/special_role/deity
- name = "Deity"
- name_plural = "Deities"
- mob_path = /mob/living/deity
- welcome_text = "This is not your world. This is not your reality. But here you exist. Use your powers, feed off the faith of others. You have to click on yourself to choose your form. Everything you say will be heard by your cultists! To get points your cultists need to build! Build Shrine and Construction are the best starting boons!"
- landmark_id = "DeitySpawn"
-
- flags = ANTAG_OVERRIDE_MOB | ANTAG_OVERRIDE_JOB
-
- hard_cap = 2
- hard_cap_round = 2
- initial_spawn_req = 1
- initial_spawn_target = 1
-
- base_to_load = "Deity Base"
diff --git a/mods/gamemodes/deity/extensions/deity_be_near.dm b/mods/gamemodes/deity/extensions/deity_be_near.dm
deleted file mode 100644
index 5eed3ae1fe4..00000000000
--- a/mods/gamemodes/deity/extensions/deity_be_near.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/datum/extension/deity_be_near
- base_type = /datum/extension/deity_be_near
- expected_type = /obj/item
- var/keep_away_instead = FALSE
- var/mob/living/deity/connected_deity
- var/threshold_base = 6
- var/expected_helmet
- flags = EXTENSION_FLAG_IMMEDIATE
-
-/datum/extension/deity_be_near/New(var/datum/holder, var/mob/living/deity/connect)
- ..()
- events_repository.register(/decl/observ/moved, holder,src, PROC_REF(check_movement))
- connected_deity = connect
- events_repository.register(/decl/observ/destroyed, holder, src, PROC_REF(dead_deity))
- var/obj/O = holder
- O.desc += " This item deals damage to its wielder the [keep_away_instead ? "closer" : "farther"] it is from a deity structure"
-
-
-/datum/extension/deity_be_near/Destroy()
- events_repository.unregister(/decl/observ/moved, holder,src)
- events_repository.unregister(/decl/observ/destroyed, holder, src)
- events_repository.unregister(/decl/observ/item_equipped, holder, src)
- . = ..()
-
-/datum/extension/deity_be_near/proc/check_movement()
- var/obj/item/I = holder
- if(!isliving(I.loc))
- return
- var/min_dist = INFINITY
- for(var/s in connected_deity.structures)
- var/dist = get_dist(holder,s)
- if(dist < min_dist)
- min_dist = dist
- if(keep_away_instead && min_dist < threshold_base)
- deal_damage(I.loc, round(threshold_base/min_dist))
- else if(min_dist > threshold_base)
- deal_damage(I.loc, round(min_dist/threshold_base))
-
-
-/datum/extension/deity_be_near/proc/deal_damage(var/mob/living/victim, var/mult)
- return
-
-/datum/extension/deity_be_near/proc/dead_deity()
- var/obj/item/I = holder
- I.visible_message(SPAN_WARNING("\The [holder]'s power fades!"))
- qdel(src)
-
-/datum/extension/deity_be_near/proc/wearing_full()
- var/obj/item/I = holder
-
- if(!ishuman(I.loc))
- return FALSE
- var/mob/living/human/H = I.loc
- if(H.get_equipped_slot_for_item(I) != slot_wear_suit_str)
- return FALSE
- if(expected_helmet && !istype(H.get_equipped_item(slot_head_str), expected_helmet))
- return FALSE
- return TRUE
-
-/datum/extension/deity_be_near/champion/deal_damage(var/mob/living/victim,var/mult)
- victim.take_damage(3 * mult, OXY)
-
-/datum/extension/deity_be_near/oracle/deal_damage(var/mob/living/victim, var/mult)
- victim.take_damage(mult, BURN)
-
-/datum/extension/deity_be_near/traitor/deal_damage(var/mob/living/victim, var/mult)
- victim.take_damage(5 * mult, PAIN)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/forms.dm b/mods/gamemodes/deity/forms/forms.dm
deleted file mode 100644
index 6f1f2f135b3..00000000000
--- a/mods/gamemodes/deity/forms/forms.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/*A god form basically is a combination of a sprite sheet choice and a gameplay choice.
-Each plays slightly different and has different challenges/benefits
-*/
-
-/datum/god_form
- var/name = "Form"
- var/info = "This is a form your being can take."
- var/desc = "This is the mob's description given."
- var/faction = MOB_FACTION_NEUTRAL //For stuff like mobs and shit
- var/god_icon_state = "nar-sie" //What you look like
- var/pylon_icon_state //What image shows up when appearing in a pylon
- var/mob/living/deity/linked_god = null
- var/starting_power_min = 10
- var/starting_regeneration = 1
- var/list/buildables = list() //Both a list of var changes and a list of buildables.
- var/list/items
-
-/datum/god_form/New(var/mob/living/deity/D)
- ..()
- D.icon_state = god_icon_state
- D.desc = desc
- D.power_min = starting_power_min
- D.power_per_regen = starting_regeneration
- linked_god = D
- if(items && items.len)
- var/list/complete_items = list()
- for(var/l in items)
- var/datum/deity_item/di = new l()
- complete_items[di.name] = di
- D.set_items(complete_items)
- items.Cut()
-
-// TODO: Make this not a thing. It's so bad.
-/datum/god_form/proc/sync_structure(var/obj/O)
- var/list/svars = buildables[O.type]
- if(!svars)
- return
- for(var/V in svars)
- O.vars[V] = svars[V]
-
-/datum/god_form/proc/take_charge(var/mob/living/user, var/charge)
- return TRUE
-
-/datum/god_form/Destroy()
- if(linked_god)
- linked_god.form = null
- linked_god = null
- return ..()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/deity_items/basic.dm b/mods/gamemodes/deity/forms/narsie/deity_items/basic.dm
deleted file mode 100644
index 15613d71311..00000000000
--- a/mods/gamemodes/deity/forms/narsie/deity_items/basic.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/datum/deity_item/boon/eternal_darkness
- name = "Eternal Darkness"
- desc = "Allows a follower to cause insanity in a target."
- category = "Dark Spells"
- base_cost = 40
- boon_path = /spell/targeted/shatter
-
-/datum/deity_item/boon/torment
- name = "Torment"
- desc = "Gives a follower the ability to cause mass hysteria and pain."
- category = "Dark Spells"
- base_cost = 50
- boon_path = /spell/targeted/torment
-
-/datum/deity_item/boon/blood_shard
- name = "Blood Shard"
- desc = "Lets a follower cause a target's blood to literally explode out of their skin into dangerous projectiles."
- category = "Dark Spells"
- base_cost = 75
- boon_path = /spell/hand/charges/blood_shard
-
-/datum/deity_item/boon/drain_blood
- name = "Drain Blood"
- desc = "Lets a follower drain blood from all those around them."
- category = "Dark Spells"
- base_cost = 110
- boon_path = /spell/aoe_turf/drain_blood
-
-/datum/deity_item/phenomena/exude_blood
- name = "Phenomena: Exude Blood"
- desc = "You extract the raw blood used in your faith and give it to one of your flock."
- category = "Dark Spells"
- base_cost = 30
- phenomena_path = /datum/phenomena/exude_blood
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/deity_items/minions.dm b/mods/gamemodes/deity/forms/narsie/deity_items/minions.dm
deleted file mode 100644
index 6af873ed6da..00000000000
--- a/mods/gamemodes/deity/forms/narsie/deity_items/minions.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/datum/deity_item/minions
- name = DEITY_TREE_DARK_MINION
- desc = "Unlock abilities that allow your followers to craft and summon useful creatures."
- category = DEITY_TREE_DARK_MINION
- base_cost = 75
-
-/datum/deity_item/boon/soul_shard
- name = "Soul Stone Shard"
- desc = "Give your follower a sliver of soulstone to capture a life in."
- category = DEITY_TREE_DARK_MINION
- requirements = list(DEITY_TREE_DARK_MINION = 1)
- base_cost = 20
- boon_path = /obj/item/soulstone
-
-/datum/deity_item/boon/blood_zombie
- name = "Blood Plague"
- desc = "Give a vessel to a follower filled with infection so vile, it turns all sapient creatures into mindless husks."
- category = DEITY_TREE_DARK_MINION
- requirements = list(DEITY_TREE_DARK_MINION = 1)
- base_cost = 300
- boon_path = /obj/item/chems/drinks/zombiedrink
-
-/datum/deity_item/boon/tear_veil
- name = "Tear Veil"
- desc = "Grant your follower the ability to literally rip a hole in this reality, allowing things to pass through."
- category = DEITY_TREE_DARK_MINION
- requirements = list(DEITY_TREE_DARK_MINION = 1)
- base_cost = 100
- boon_path = /spell/tear_veil
-
-/datum/deity_item/phenomena/hellscape
- name = "Phenomena: Reveal Hellscape"
- desc = "You show a non-believer what their future will be like."
- category = DEITY_TREE_DARK_MINION
- requirements = list(DEITY_TREE_DARK_MINION = 1)
- base_cost = 110
- phenomena_path = /datum/phenomena/hellscape
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/deity_items/sacrificing.dm b/mods/gamemodes/deity/forms/narsie/deity_items/sacrificing.dm
deleted file mode 100644
index 7e5d631c7f9..00000000000
--- a/mods/gamemodes/deity/forms/narsie/deity_items/sacrificing.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/datum/deity_item/sacrifice
- name = DEITY_TREE_SACRIFICE
- desc = "Unlocks the tools necessary to allow your followers to sacrifice in your name."
- category = DEITY_TREE_SACRIFICE
- base_cost = 50
- max_level = 1
-
-/datum/deity_item/boon/sac_dagger
- name = "Sacrificial Dagger"
- desc = "A small dagger embued with your powers. Lets your followers give you power through sacrifices on an altar."
- category = DEITY_TREE_SACRIFICE
- requirements = list(DEITY_TREE_SACRIFICE = 1)
- base_cost = 10
- boon_path = /obj/item/knife/ritual/sacrifice
-
-/datum/deity_item/boon/sac_spell
- name = "Sacrifice Spell"
- desc = "This ability makes the user take INCREDIBLE amounts of damage to heal a target for a similar amount of damage."
- category = DEITY_TREE_SACRIFICE
- requirements = list(DEITY_TREE_SACRIFICE = 1)
- base_cost = 10
- boon_path = /spell/targeted/heal_target/sacrifice
-
-/datum/deity_item/boon/execution_axe
- name = "Greedy Axe"
- desc = "This axe can store the very souls of those it kills to be later transfered to you through an altar."
- category = DEITY_TREE_SACRIFICE
- requirements = list(DEITY_TREE_SACRIFICE = 1)
- base_cost = 50
- boon_path = /obj/item/bladed/axe/fire/cult
-
-/datum/deity_item/blood_stone
- name = "Bloodied Stone"
- desc = "Unlocks the blood stone building, which allows followers to increase your power through ritual and prayer."
- category = DEITY_TREE_SACRIFICE
- requirements = list(DEITY_TREE_SACRIFICE = 1)
- base_cost = 50
- max_level = 1
-
-/datum/deity_item/blood_stone/buy(var/mob/living/deity/user)
- ..()
- user.form.buildables |= /obj/structure/deity/blood_stone
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/deity_items/smithing.dm b/mods/gamemodes/deity/forms/narsie/deity_items/smithing.dm
deleted file mode 100644
index bcb12ff11e3..00000000000
--- a/mods/gamemodes/deity/forms/narsie/deity_items/smithing.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/datum/deity_item/blood_crafting/narsie
- recipes = list(
- /obj/item/sword/cultblade = 50,
- /obj/item/clothing/head/culthood/alt = 10,
- /obj/item/clothing/suit/cultrobes/alt = 20
- )
-
-/datum/deity_item/blood_crafting/armored
- name = DEITY_ARMOR_CRAFT
- desc = "Unlock the secrets to tempered blood smithing, allowing your followers to smith more powerful and expensive armaments."
- category = DEITY_BLOOD_CRAFT
- base_cost = 75
- requirements = list(DEITY_BLOOD_CRAFT = 1)
- recipes = list(
- /obj/item/clothing/suit/cultrobes/magusred = 80,
- /obj/item/clothing/head/culthood/magus = 50,
- /obj/structure/constructshell/cult = 70
- ) //also shield?
-
-/datum/deity_item/blood_crafting/space
- name = DEITY_VOID_CRAFT
- desc = "Allows your followers to craft space suits, allowing you to finally spread across the cosmos."
- category = DEITY_BLOOD_CRAFT
- base_cost = 100
- requirements = list(DEITY_BLOOD_CRAFT = 1, DEITY_ARMOR_CRAFT = 1)
- recipes = list(
- /obj/item/clothing/suit/space/cult = 100,
- /obj/item/clothing/head/helmet/space/cult = 70
- ) //Probably more too.
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/items.dm b/mods/gamemodes/deity/forms/narsie/items.dm
deleted file mode 100644
index 56d3ffe89f8..00000000000
--- a/mods/gamemodes/deity/forms/narsie/items.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-
-//SACRIFICE DAGGER
-//If used on a person on an altar, causes the user to carve into them, dealing moderate damage and gaining points for the altar's god.
-/obj/item/knife/ritual/sacrifice
- name = "sacrificial dagger"
- desc = "This knife is dull but well used."
- material = /decl/material/solid/stone/cult
-
-/obj/item/knife/ritual/sacrifice/resolve_attackby(var/atom/a, var/mob/user, var/click_params)
- var/turf/T = get_turf(a)
- var/obj/structure/deity/altar/altar = locate() in T
- if(!altar)
- return ..()
- if(isliving(a))
- var/mob/living/L = a
- var/multiplier = 1
- if(L.mind)
- multiplier++
- if(ishuman(L))
- var/mob/living/human/H = L
- if(H.should_have_organ(BP_HEART))
- multiplier++
- if(L.stat == DEAD)
- to_chat(user, SPAN_WARNING("\The [a] is already dead! There is nothing to take!"))
- return
-
- user.visible_message(SPAN_WARNING("\The [user] hovers \the [src] over \the [a], whispering an incantation."))
- if(!do_after(user,200, L))
- return
- user.visible_message(SPAN_DANGER("\The [user] plunges the knife down into \the [a]!"))
- L.take_damage(20)
- if(altar.linked_god)
- altar.linked_god.adjust_power_min(2 * multiplier,0,"from a delicious sacrifice!")
-
-
-//EXEC AXE
-//If a person hit by this axe within three seconds dies, sucks in their soul to be harvested at altars.
-/obj/item/bladed/axe/fire/cult
- name = "terrible axe"
- desc = "Its head is sharp and stained red with heavy use."
- icon = 'icons/obj/items/weapon/bone_axe.dmi'
- var/stored_power = 0
-
-/obj/item/bladed/axe/fire/cult/examine(mob/user)
- . = ..()
- if(stored_power)
- to_chat(user, SPAN_NOTICE("It exudes a death-like smell."))
-
-/obj/item/bladed/axe/fire/cult/resolve_attackby(var/atom/a, var/mob/user, var/click_params)
- if(istype(a, /obj/structure/deity/altar))
- var/obj/structure/deity/altar/altar = a
- if(stored_power && altar.linked_god)
- altar.linked_god.adjust_power_min(stored_power, "from harvested souls.")
- altar.visible_message(SPAN_WARNING("\The [altar] absorbs a black mist exuded from \the [src]."))
- return
- if(ismob(a))
- var/mob/M = a
- if(M.stat != DEAD)
- events_repository.register(/decl/observ/death, M,src, TYPE_PROC_REF(/obj/item/bladed/axe/fire/cult, gain_power))
- spawn(30)
- events_repository.unregister(/decl/observ/death, M,src)
- return ..()
-
-/obj/item/bladed/axe/fire/cult/proc/gain_power()
- stored_power += 50
- src.visible_message(SPAN_OCCULT("\The [src] screeches as the smell of death fills the air!"))
-
-/obj/item/chems/drinks/zombiedrink
- name = "well-used urn"
- desc = "Said to bring those who drink it back to life, no matter the price."
- icon = 'icons/obj/xenoarchaeology.dmi'
- icon_state = "urn"
- volume = 10
- amount_per_transfer_from_this = 10
-
-/obj/item/chems/drinks/zombiedrink/populate_reagents()
- add_to_reagents(/decl/material/liquid/zombie, reagents.maximum_volume)
diff --git a/mods/gamemodes/deity/forms/narsie/narsie.dm b/mods/gamemodes/deity/forms/narsie/narsie.dm
deleted file mode 100644
index 1529c67f691..00000000000
--- a/mods/gamemodes/deity/forms/narsie/narsie.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/datum/god_form/narsie
- name = "Nar-Sie"
- info = {"The Geometer of Blood, you crave blood and destruction.
- Benefits:
- +Can gain power from blood sacrifices.
- +Ability to forge weapons and armor.
- Drawbacks:
- -Servant abilities require copious amounts of their blood.
- "}
- desc = "A being made of a million nightmares, a billion deaths."
- god_icon_state = "nar-sie"
- pylon_icon_state = "shade"
- faction = "cult"
-
- buildables = list(
- /obj/structure/deity/altar/narsie,
- /obj/structure/deity/pylon
- )
- items = list(
- /datum/deity_item/general/potential,
- /datum/deity_item/general/regeneration,
- /datum/deity_item/boon/eternal_darkness,
- /datum/deity_item/boon/torment,
- /datum/deity_item/boon/blood_shard,
- /datum/deity_item/boon/drain_blood,
- /datum/deity_item/phenomena/exude_blood,
- /datum/deity_item/sacrifice,
- /datum/deity_item/boon/sac_dagger,
- /datum/deity_item/boon/sac_spell,
- /datum/deity_item/boon/execution_axe,
- /datum/deity_item/blood_stone,
- /datum/deity_item/minions,
- /datum/deity_item/boon/soul_shard,
- /datum/deity_item/boon/blood_zombie,
- /datum/deity_item/boon/tear_veil,
- /datum/deity_item/phenomena/hellscape,
- /datum/deity_item/blood_crafting/narsie,
- /datum/deity_item/blood_crafting/armored,
- /datum/deity_item/blood_crafting/space
- )
-
-/datum/god_form/narsie/take_charge(var/mob/living/user, var/charge)
- charge = min(100, charge * 0.25)
- if(prob(charge))
- to_chat(user, SPAN_WARNING("You feel drained..."))
- var/mob/living/human/H = user
- if(istype(H) && H.should_have_organ(BP_HEART))
- H.vessel.remove_any(charge)
- else
- user.take_damage(charge)
- return 1
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/spells/tear_veil.dm b/mods/gamemodes/deity/forms/narsie/spells/tear_veil.dm
deleted file mode 100644
index daf6b5d59d9..00000000000
--- a/mods/gamemodes/deity/forms/narsie/spells/tear_veil.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/spell/tear_veil
- name = "Tear Veil"
- desc = "Use your mental strength to literally tear a hole from this dimension to the next, letting things through..."
-
- charge_max = 300
- spell_flags = Z2NOCAST
- invocation = "none"
- invocation_type = SpI_NONE
-
- number_of_channels = 0
- time_between_channels = 200
- hud_state = "const_floor"
- cast_sound = 'sound/effects/meteorimpact.ogg'
- var/list/possible_spawns = list(
- /mob/living/simple_animal/hostile/scarybat/cult,
- /mob/living/simple_animal/hostile/creature/cult,
- /mob/living/simple_animal/hostile/revenant/cult
- )
-
-/spell/tear_veil/choose_targets()
- var/turf/T = get_turf(holder)
- holder.visible_message(SPAN_NOTICE("A strange portal rips open underneath \the [holder]!"))
- var/obj/effect/gateway/hole = new(get_turf(T))
- hole.density = FALSE
- return list(hole)
-
-/spell/tear_veil/cast(var/list/targets, var/mob/holder, var/channel_count)
- if(channel_count == 1)
- return
- var/type = pick(possible_spawns)
- var/mob/living/L = new type(get_turf(targets[1]))
- L.faction = holder.faction
- L.visible_message(SPAN_WARNING("\A [L] escapes from the portal!"))
-
-/spell/tear_veil/after_spell(var/list/targets)
- qdel(targets[1])
- return
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/narsie/structures.dm b/mods/gamemodes/deity/forms/narsie/structures.dm
deleted file mode 100644
index af576963a1f..00000000000
--- a/mods/gamemodes/deity/forms/narsie/structures.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/structure/deity/altar/narsie
- name = "altar"
- desc = "A small desk, covered in blood."
- icon_state = "talismanaltar"
-
-//BLOODLETTING STRUCTURE
-//A follower can stand here and mumble prayers as they let their blood flow slowly into the structure.
-/obj/structure/deity/blood_stone
- name = "bloody stone"
- desc = "A jagged stone covered in the various stages of blood, from dried to fresh."
- icon_state = "blood_stone"
- // TODO: material-based health for deity structures
- current_health = 100 //It's a piece of rock.
- build_cost = 700
-
-/obj/structure/deity/blood_stone/attack_hand(var/mob/user)
- if(!linked_god || !linked_god.is_follower(user, silent = 1) || !ishuman(user))
- return ..()
- var/mob/living/human/H = user
- user.visible_message(
- SPAN_WARNING("\The [user] calmly slices their finger on \the [src], smearing their blood over the black stone."),
- SPAN_WARNING("You slowly slide your finger down one of \the [src]'s sharp edges, smearing your blood over its smooth surface.")
- )
- while(do_after(H, 5 SECONDS, src))
- user.audible_message("\The [user] utters something under their breath.", SPAN_OCCULT("You mutter a dark prayer to your master as you feel the stone eat away at your lifeforce."))
- if(H.should_have_organ(BP_HEART))
- H.drip(5, get_turf(src))
- else
- H.take_damage(5)
- linked_god.adjust_power_min(1, 1)
- return TRUE
-
-/datum/codex_entry/deity/blood_stone
- associated_paths = list(/obj/structure/deity/blood_stone)
- antag_text = "Allows the user to feed blood directly to the aligned deity, granting it power."
- disambiguator = "occult"
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/deity_items/artifacts.dm b/mods/gamemodes/deity/forms/starlight/deity_items/artifacts.dm
deleted file mode 100644
index 286be5afd10..00000000000
--- a/mods/gamemodes/deity/forms/starlight/deity_items/artifacts.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/datum/deity_item/boon/blazing_blade
- name = "Blazing Blade"
- desc = "A divine blade of burning fury. If it stays too far away from an altar of some sort, it disappears."
- base_cost = 250
- category = DEITY_TREE_ARTIFACT
- boon_path = /obj/item/sword/blazing
-
-/datum/deity_item/boon/holy_beacon
- name = "Holy Beacon"
- desc = "A staff capable of producing an almost harmless bolt of sunlight, capable of blinding anyone in the room, at least for a while."
- base_cost = 200
- category = DEITY_TREE_ARTIFACT
- boon_path = /obj/item/gun/energy/staff/beacon
-
-/datum/deity_item/boon/black_death
- name = "Black Death"
- desc = "A small dagger capable of poisoning those it bites. Careful, if it loses all its charges, it will burn the user. It can be recharged at a radiant statue."
- base_cost = 150
- category = DEITY_TREE_ARTIFACT
- boon_path = /obj/item/knife/ritual/shadow
-
-/datum/deity_item/blood_crafting/firecrafting
- name = "Fire Crafting"
- desc = "Gain the ability for your minions to build smithing stations that can make many rings of power."
- base_cost = 300
- category = DEITY_TREE_ARTIFACT
- max_level = 1
- forge_type = /obj/structure/deity/blood_forge/starlight
- recipes = list(/obj/item/clothing/gloves/ring/aura_ring/talisman_of_starborn = 70,
- /obj/item/clothing/gloves/ring/aura_ring/talisman_of_blueforged = 70,
- /obj/item/clothing/gloves/ring/aura_ring/talisman_of_shadowling = 70
- )
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/deity_items/phenomena.dm b/mods/gamemodes/deity/forms/starlight/deity_items/phenomena.dm
deleted file mode 100644
index 2b982fcf3cc..00000000000
--- a/mods/gamemodes/deity/forms/starlight/deity_items/phenomena.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/datum/deity_item/phenomena/herald
- name = "Choose Herald"
- desc = "Gives you the ability to choose a herald. Can only be used once so be careful."
- phenomena_path = /datum/phenomena/herald
- base_cost = 100
- category = DEITY_TREE_HERALD
-
-/datum/deity_item/phenomena/wisp
- name = "Summon Wisp"
- desc = "Manipulate around a small light."
- phenomena_path = /datum/phenomena/movable_object/wisp
- base_cost = 100
- category = DEITY_TREE_HERALD
-
-/datum/deity_item/phenomena/flickering_whisper
- name = "Flickering Whisper"
- desc = "Send a subtle message to a non-follower, and see what they see for a while."
- phenomena_path = /datum/phenomena/flickering_whisper
- base_cost = 50
- category = DEITY_TREE_HERALD
-
-/datum/deity_item/phenomena/burning_glare
- name = "Burning Glare"
- desc = "Use your divine power to physically burn a person."
- phenomena_path = /datum/phenomena/burning_glare
- base_cost = 200
- category = DEITY_TREE_HERALD
-
-/datum/deity_item/phenomena/open_gateway
- name = "Open Gateway"
- desc = "Unlocks the ability to open a gateway. Required for rebirth."
- phenomena_path = /datum/phenomena/create_gateway
- base_cost = 250
- category = DEITY_TREE_HERALD
-
-/datum/deity_item/phenomena/divine_right
- name = "Divine Right"
- desc = "Unlocks the ability to possess your Herald, permanently transforming you into a physical god."
- phenomena_path = /datum/phenomena/divine_right
- base_cost = 300
- category = DEITY_TREE_HERALD
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/deity_items/spells.dm b/mods/gamemodes/deity/forms/starlight/deity_items/spells.dm
deleted file mode 100644
index 33c6e19a55a..00000000000
--- a/mods/gamemodes/deity/forms/starlight/deity_items/spells.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-/datum/deity_item/boon/starburst
- name = "Starburst"
- desc = "Grant your minion the power to blind non-followers nearby."
- base_cost = 60
- boon_path = /spell/targeted/genetic/blind/starburst
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/exchange_wounds
- name = "Exchange Wounds"
- desc = "Allow a follower to sacrifice their own well-being for that of those around them."
- base_cost = 120
- boon_path = /spell/aoe_turf/exchange_wounds
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/radiant_aura
- name = "Radiant Aura"
- desc = "This spell makes one of your followers immune to laser fire, for a short while at least."
- base_cost = 70
- boon_path = /spell/radiant_aura/starlight
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/burning_touch
- name = "Burning Touch"
- desc = "Sets your minion's hand aflame, allowing them to burn people with an ever-increasing flame."
- base_cost = 60
- boon_path = /spell/targeted/equip_item/burning_hand
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/burning_grip
- name = "Burning Grip"
- desc = "Give your follower the ability to burn an item in someone's hand so badly it causes them to burn."
- base_cost = 50
- boon_path = /spell/hand/burning_grip
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/blood_boil
- name = "Blood Boil"
- desc = "Allow a follower to concentrate so deeply on a target that their body temperature increases, eventually setting them on fire."
- base_cost = 90
- boon_path = /spell/targeted/blood_boil
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/fireball
- name = "Fireball"
- desc = "A classic spell, grants your follower the ability to throw an exploding ball of flame in any direction."
- base_cost = 100
- boon_path = /spell/targeted/projectile/dumbfire/fireball
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/emp
- name = "Disable Machinery"
- desc = "Gives your follower a spell of disabling machinery, and mechanical hearts."
- base_cost = 110
- boon_path = /spell/aoe_turf/disable_tech/starlight
- category = DEITY_TREE_FIRECONJ
-
-/datum/deity_item/boon/cure_light
- name = "Cure Light Wounds"
- desc = "Grant mercy on your followers, giving them the ability to heal themselves slightly."
- base_cost = 70
- boon_path = /spell/targeted/heal_target
- category = DEITY_TREE_FIRECONJ
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/items.dm b/mods/gamemodes/deity/forms/starlight/items.dm
deleted file mode 100644
index 4a46c300d2f..00000000000
--- a/mods/gamemodes/deity/forms/starlight/items.dm
+++ /dev/null
@@ -1,157 +0,0 @@
-/obj/item/clothing/gloves/ring/aura_ring
- var/obj/aura/granted_aura
-
-/obj/item/clothing/gloves/ring/aura_ring/equipped(var/mob/living/L, var/slot)
- ..()
- if(granted_aura && slot == slot_gloves_str)
- L.add_aura(granted_aura)
-
-/obj/item/clothing/gloves/ring/aura_ring/dropped(var/mob/living/L)
- ..()
- if(granted_aura)
- L.remove_aura(granted_aura)
-
-/obj/item/clothing/gloves/ring/aura_ring/Destroy()
- QDEL_NULL(granted_aura)
- . = ..()
-
-/obj/item/clothing/gloves/ring/aura_ring/talisman_of_starborn
- name = "Talisman of the Starborn"
- desc = "This ring seems to shine with more light than is put on it."
- icon = 'icons/clothing/accessories/jewelry/rings/ring_star.dmi'
-
-/obj/item/clothing/gloves/ring/aura_ring/talisman_of_starborn/Initialize()
- . = ..()
- granted_aura = new /obj/aura/starborn()
-
-/obj/item/clothing/gloves/ring/aura_ring/talisman_of_blueforged
- name = "Talisman of the Blueforged"
- desc = "The gem on this ring is quite peculiar..."
- icon = 'icons/clothing/accessories/jewelry/rings/ring_blue.dmi'
-
-/obj/item/clothing/gloves/ring/aura_ring/talisman_of_blueforged/Initialize()
- . = ..()
- granted_aura = new /obj/aura/blueforge_aura()
-
-/obj/item/clothing/gloves/ring/aura_ring/talisman_of_shadowling
- name = "Talisman of the Shadowling"
- desc = "If you weren't looking at this, you probably wouldn't have noticed it."
- icon = 'icons/clothing/accessories/jewelry/rings/ring_shadow.dmi'
-
-/obj/item/clothing/gloves/ring/aura_ring/talisman_of_shadowling/Initialize()
- . = ..()
- granted_aura = new /obj/aura/shadowling_aura()
-
-/obj/item/clothing/suit/armor/sunsuit
- name = "knight's armor"
- desc = "Now, you can be the knight in shining armor you've always wanted to be. With complementary sun insignia."
- icon = 'icons/clothing/suits/deity/star_champion.dmi'
- armor = list(
- ARMOR_MELEE = ARMOR_MELEE_VERY_HIGH,
- ARMOR_BULLET = ARMOR_BALLISTIC_AP,
- ARMOR_LASER = ARMOR_LASER_HANDGUNS,
- ARMOR_ENERGY = ARMOR_ENERGY_RESISTANT,
- ARMOR_BOMB = ARMOR_BOMB_PADDED,
- ARMOR_BIO = ARMOR_BIO_MINOR
- )
-
-/obj/item/clothing/head/helmet/sunhelm
- name = "knight's helm"
- desc = "It's a shiny metal helmet. It looks ripped straight out of the Dark Ages, actually."
- icon = 'icons/clothing/head/star_champion.dmi'
- flags_inv = HIDEEARS | BLOCK_ALL_HAIR
-
-/obj/item/clothing/suit/armor/sunrobe
- name = "oracle's robe"
- desc = "The robes of a priest. One that praises the sun, apparently. Well, it certainly reflects light well."
- icon = 'icons/clothing/suits/deity/star_oracle.dmi'
- armor = list(
- ARMOR_MELEE = ARMOR_MELEE_KNIVES,
- ARMOR_BULLET = ARMOR_BALLISTIC_SMALL,
- ARMOR_LASER = ARMOR_LASER_HANDGUNS,
- ARMOR_ENERGY = ARMOR_ENERGY_RESISTANT,
- ARMOR_BOMB = ARMOR_BOMB_PADDED,
- ARMOR_BIO = ARMOR_BIO_MINOR
- )
-
-/obj/item/clothing/suit/armor/sunrobe/Initialize()
- . = ..()
- set_light(4, 0.3)
-
-/obj/item/clothing/suit/space/shadowsuit
- name = "traitor's cloak"
- desc = "There is absolutely nothing visible through the fabric. The shadows stick to your skin when you touch it."
- item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT
- min_pressure_protection = 0
- icon = 'icons/clothing/suits/deity/star_traitor.dmi'
-
-/obj/item/clothing/head/helmet/space/shadowhood
- name = "traitor's hood"
- desc = "No light can pierce this hood. It's unsettling."
- icon = 'icons/clothing/head/star_traitor.dmi'
- flags_inv = HIDEEARS | BLOCK_ALL_HAIR
-
-/obj/item/knife/ritual/shadow
- name = "black death"
- desc = "An obsidian dagger. The singed remains of a green cloth are wrapped around the 'handle.'"
- var/charge = 5
-
-/obj/item/knife/ritual/shadow/apply_hit_effect(var/mob/living/target, var/mob/living/user, var/hit_zone)
- . = ..()
- if(charge)
- if(target.get_damage(BRUTE) > 15)
- var/datum/reagents/R = target.reagents
- if(!R)
- return
- R.add_reagent(/decl/material/liquid/venom, 5)
- new /obj/effect/temporary(get_turf(target),3, 'icons/effects/effects.dmi', "fire_goon")
- charge--
- else
- user.take_damage(5, BURN)
- if(prob(5))
- to_chat(user, SPAN_WARNING("\The [src] appears to be out of power!"))
- new /obj/effect/temporary(get_turf(user),3, 'icons/effects/effects.dmi', "fire_goon")
-
-/obj/item/gun/energy/staff/beacon
- name = "holy beacon"
- desc = "Look closely into its crystal; there's a miniature sun. Or maybe that's just some fancy LEDs. Either way, it looks thoroughly mystical."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "starstaff"
- self_recharge = 0
- max_shots = 10
- projectile_type = /obj/item/projectile/energy/flash
- required_antag_type = /decl/special_role/godcultist
-
-/obj/item/sword/blazing
- name = "blazing blade"
- icon = 'icons/obj/items/weapon/swords/flaming.dmi'
- atom_damage_type = BURN
- material_alteration = MAT_FLAG_ALTERATION_NONE
- var/last_near_structure = 0
- var/mob/living/deity/linked
-
-/obj/item/sword/blazing/Initialize(var/maploading, var/material, var/deity)
- . = ..()
- START_PROCESSING(SSobj, src)
- linked = deity
-
-/obj/item/sword/blazing/Destroy()
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/item/sword/blazing/Process()
- if(!linked || last_near_structure + 10 SECONDS > world.time)
- return
-
- if(linked.near_structure(src,1))
- if(last_near_structure < world.time - 30 SECONDS)
- to_chat(loc, SPAN_NOTICE("\The [src] surges with power anew!"))
- last_near_structure = world.time
- else
- if(last_near_structure < world.time - 30 SECONDS) //If it has been at least 30 seconds.
- if(prob(5))
- to_chat(loc, SPAN_WARNING("\The [src] begins to fade, its power dimming this far away from a shrine."))
- else if(last_near_structure + 1800 < world.time)
- visible_message(SPAN_WARNING("\The [src] disintegrates into a pile of ash!"))
- new /obj/effect/decal/cleanable/ash(get_turf(src))
- qdel(src)
diff --git a/mods/gamemodes/deity/forms/starlight/mobs.dm b/mods/gamemodes/deity/forms/starlight/mobs.dm
deleted file mode 100644
index 5748cf2e2f4..00000000000
--- a/mods/gamemodes/deity/forms/starlight/mobs.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/mob/living/starlight_soul
- name = "soul"
- desc = "A captured soul."
- anchored = TRUE
- butchery_data = null
-
-/mob/living/starlight_soul/Initialize(var/maploading, var/mob/living/old_mob)
- . = ..()
- if(old_mob)
- name = old_mob.real_name
-
-/mob/living/starlight_soul/proc/set_deity(var/mob/living/deity/deity)
- var/mob/observer/eye/freelook/cult/eye
- if(eyeobj)
- eye = eyeobj
- eyeobj.release(src)
- else
- eye = new(src)
- eye.suffix = "Soul"
- eyeobj = eye
- eye.visualnet = deity.eyenet
- var/decl/special_role/godcultist/godcult = GET_DECL(/decl/special_role/godcultist)
- godcult.add_antagonist_mind(src.mind,1,"lost soul of [deity]", "You have been captured by \the [deity]! You now can only see into your own reality through the same rips and tears it uses. Your only chance at another body will be one in your captor's image...",specific_god=deity)
- eyeobj.possess(src)
-
-/mob/living/starlight_soul/Destroy()
- if(eyeobj)
- QDEL_NULL(eyeobj)
- . = ..()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/spells/disable_tech.dm b/mods/gamemodes/deity/forms/starlight/spells/disable_tech.dm
deleted file mode 100644
index f6462ae33fe..00000000000
--- a/mods/gamemodes/deity/forms/starlight/spells/disable_tech.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/spell/aoe_turf/disable_tech/starlight
- hidden_from_codex = TRUE
- charge_max = 600
- spell_flags = 0
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/spells/starlight_aura.dm b/mods/gamemodes/deity/forms/starlight/spells/starlight_aura.dm
deleted file mode 100644
index 8ad867e41b3..00000000000
--- a/mods/gamemodes/deity/forms/starlight/spells/starlight_aura.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/spell/radiant_aura/starlight
- name = "Starlight Aura"
- desc = "This spell makes you immune to laser fire, for a short while at least."
- spell_flags = 0
- charge_max = 400
diff --git a/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm b/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm
deleted file mode 100644
index e47edecd082..00000000000
--- a/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-/spell/veil_of_shadows
- name = "Veil of Shadows"
- desc = "Become intangable, invisible. Like a ghost."
- charge_max = 400
- invocation_type = SpI_EMOTE
- invocation = "flickers out of existance"
- school = "Divine"
- spell_flags = 0
- duration = 100
- var/timer_id
- var/light_steps = 4
-
- hud_state = "wiz_statue"
-
-/spell/veil_of_shadows/choose_targets()
- if(!timer_id && ishuman(holder))
- return list(holder)
- . = null
-
-/spell/veil_of_shadows/cast(var/list/targets, var/mob/user)
- var/mob/living/human/H = user
- H.AddMovementHandler(/datum/movement_handler/mob/incorporeal)
- if(H.add_cloaking_source(src))
- H.visible_message(SPAN_WARNING("\The [H] shrinks from view!"))
- events_repository.register(/decl/observ/moved, H,src,PROC_REF(check_light))
- timer_id = addtimer(CALLBACK(src,PROC_REF(cancel_veil)),duration, TIMER_STOPPABLE)
-
-/spell/veil_of_shadows/proc/cancel_veil()
- var/mob/living/human/H = holder
- H.RemoveMovementHandler(/datum/movement_handler/mob/incorporeal)
- deltimer(timer_id)
- timer_id = null
- var/turf/T = get_turf(H)
- if(T.get_lumcount() > 0.1) //If we're somewhere somewhat shadowy we can stay invis as long as we stand still
- drop_cloak()
- else
- events_repository.unregister(/decl/observ/moved, H,src)
- events_repository.register(/decl/observ/moved, H,src,PROC_REF(drop_cloak))
-
-/spell/veil_of_shadows/proc/drop_cloak()
- var/mob/living/human/H = holder
- if(H.remove_cloaking_source(src))
- H.visible_message(SPAN_NOTICE("\The [H] appears from nowhere!"))
- events_repository.unregister(/decl/observ/moved, H,src)
-
-/spell/veil_of_shadows/proc/check_light()
- if(light_steps)
- light_steps--
- return
- light_steps = initial(light_steps)
- for(var/obj/machinery/light/light in view(1,holder))
- light.flicker(20)
-
-/spell/veil_of_shadows/Destroy()
- deltimer(timer_id)
- cancel_veil()
- .= ..()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/starlight.dm b/mods/gamemodes/deity/forms/starlight/starlight.dm
deleted file mode 100644
index ba3b75a83e8..00000000000
--- a/mods/gamemodes/deity/forms/starlight/starlight.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/datum/god_form/starlight
- name = "Starlight Herald"
- info = {"Sun and fire incarnate.
- Benefits:
- +Ability to summon powerful minions via sacrifices.
- +Bless one of your minions as a Herald, giving them species powers and armor.
- Drawbacks:
- -Servant's powers will burn them.
- -You require copious amounts of power regeneration.
- "}
- desc = "The bringer of life, and all that entails."
- god_icon_state = "sungod"
- pylon_icon_state = "god"
- faction = "herald"
-
- buildables = list(/obj/structure/deity/altar/starlight,
- /obj/structure/deity/pylon/starlight,
- /obj/structure/deity/radiant_statue,
- )
- items = list(/datum/deity_item/general/potential,
- /datum/deity_item/general/regeneration,
- /datum/deity_item/boon/blazing_blade,
- /datum/deity_item/boon/holy_beacon,
- /datum/deity_item/boon/black_death,
- /datum/deity_item/blood_crafting/firecrafting,
- /datum/deity_item/boon/starburst,
- /datum/deity_item/boon/exchange_wounds,
- /datum/deity_item/boon/radiant_aura,
- /datum/deity_item/boon/burning_touch,
- /datum/deity_item/boon/burning_grip,
- /datum/deity_item/boon/blood_boil,
- /datum/deity_item/boon/emp,
- /datum/deity_item/boon/cure_light,
- /datum/deity_item/phenomena/herald,
- /datum/deity_item/phenomena/wisp,
- /datum/deity_item/phenomena/flickering_whisper,
- /datum/deity_item/phenomena/burning_glare,
- /datum/deity_item/phenomena/open_gateway,
- /datum/deity_item/phenomena/divine_right
- )
-
-/datum/god_form/starlight/take_charge(var/mob/living/user, var/charge)
- charge = max(5, charge/100)
- if(prob(charge))
- to_chat(user, SPAN_DANGER("Your body burns!"))
- user.take_damage(charge, BURN)
- return 1
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/starlight/structures.dm b/mods/gamemodes/deity/forms/starlight/structures.dm
deleted file mode 100644
index 7134d19ce48..00000000000
--- a/mods/gamemodes/deity/forms/starlight/structures.dm
+++ /dev/null
@@ -1,272 +0,0 @@
-/obj/structure/deity/altar/starlight
- icon_state = "altarcandle"
-
-/obj/structure/deity/pylon/starlight
- name = "sun pylon"
- desc = "A miniature sun, floating ontop of a small pillar."
- icon_state = "star_pylon"
-
-/obj/structure/deity/gateway
- name = "gateway"
- desc = "A gateway into the unknown."
- icon = 'icons/obj/singularity.dmi'
- icon_state = "singularity_s1"
- power_adjustment = 1
- density = FALSE
- var/weakref/target_ref
- var/start_time = 0
- var/power_drain = 7
- var/looking_for
- var/static/list/possible_forms = list(
- "Starborn" = list(
- "description" = "A species of hardy fire-wreathed soldiers.",
- "message" = "As a Starborn, you are immune to laser-fire. You are a hardy soldier, able to take on the greatest of foes.",
- "species" = "Starborn"
- ),
- "Blueforged" = list(
- "description" = "Trans-dimensional beings with a multitude of miraculous abilities.",
- "message" = "As a Blueforged, you are immune to all physical damage... except for heat. Not even your god can protect you.",
- "species" = "Blueforged",
- "spells" = list(
- /spell/targeted/ethereal_jaunt,
- /spell/targeted/shatter,
- /spell/hand/burning_grip,
- /spell/aoe_turf/disable_tech,
- /spell/targeted/projectile/magic_missile,
- /spell/open_gateway
- )
- ),
- "Shadowling" = list(
- "description" = "Beings that come from a place of no light. They sneak from place to place, disabling everyone they touch.",
- "message" = "As a Shadow you take damage from the light itself but have the ability to vanish from sight itself.",
- "species" = "Shadow",
- "spells" = list(
- /spell/veil_of_shadows,
- /spell/targeted/subjugation,
- /spell/targeted/projectile/magic_missile
- )
- )
- )
-
-/obj/structure/deity/gateway/Initialize()
- . = ..()
- if(linked_god)
- linked_god.power_per_regen -= power_drain
- START_PROCESSING(SSobj, src)
-
-/obj/structure/deity/gateway/Process()
- if(!linked_god)
- return
- if(linked_god.power <= 0)
- to_chat(linked_god,SPAN_WARNING("\The [src] disappears from your lack of power!"))
- qdel(src)
- return
- var/mob/living/human/target
- if(target_ref)
- target = target_ref.resolve()
- if(target)
- if(get_turf(target) != get_turf(src))
- target = null
- target_ref = null
- start_time = 0
- return
- else if(prob(5))
- to_chat(target,SPAN_DANGER("\The [src] sucks at your lifeforce!"))
- if(start_time && world.time > start_time + 300)
- start_time = 0
- to_chat(target,SPAN_DANGER("You have been sucked into \the [src], your soul used to fuel \the [linked_god]'s minions."))
- var/mob/living/starlight_soul/ss = new(get_turf(linked_god),target)
- if(target.mind)
- target.mind.transfer_to(ss)
- else
- ss.ckey = target.ckey
- ss.set_deity(linked_god)
- target.dust()
- if(power_drain >= 3)
- linked_god.power_per_regen += 3
- power_drain -= 3
- else
- //Get new target
- var/mob/living/human/T = locate() in get_turf(src)
- if(T)
- target_ref = weakref(T)
- start_time = world.time
- to_chat(T, SPAN_DANGER("You feel your lifeforce begin to drain into \the [src]!"))
-
-/obj/structure/deity/gateway/Destroy()
- linked_god.power_per_regen += power_drain
- . = ..()
-
-/obj/structure/deity/gateway/attack_deity(var/mob/living/deity/deity)
- var/list/html = list()
- html += " Servant List"
- html += " Select a minion type to summon"
- html += " Name | Description | "
- for(var/a in possible_forms)
- var/list/form = possible_forms[a]
- html += "[a] | [form["description"]] | "
- html += "
"
- show_browser(linked_god, jointext(html, null), "window=gateway")
-
-/obj/structure/deity/gateway/CanUseTopic(var/mob/user)
- if(linked_god && (user == linked_god || user.loc == linked_god.loc))
- return STATUS_INTERACTIVE
- return STATUS_CLOSE
-
-/obj/structure/deity/gateway/proc/stop_looking_for(var/successful)
- if(looking_for)
- if(!successful)
- to_chat(linked_god, SPAN_WARNING("\The [src] did not find any [looking_for]. You may try again if you wish."))
- looking_for = null
-
-/obj/structure/deity/gateway/OnTopic(var/mob/user, var/list/href_list)
- if(href_list["accept"] && istype(user,/mob/living/starlight_soul))
- if(href_list["accept"] != looking_for)
- return TOPIC_HANDLED
- var/mob/living/human/H = new(get_turf(src))
- user.mind.transfer_to(H)
- H.set_species(possible_forms[looking_for]["species"])
- for(var/s in possible_forms[looking_for]["spells"])
- var/spell/S = new s
- H.add_spell(S)
- var/decl/special_role/godcultist/godcult = GET_DECL(/decl/special_role/godcultist)
- godcult.add_antagonist_mind(H.mind, 1, "[looking_for] of [linked_god]", "You are a powerful entity in the service to \the [linked_god]. [possible_forms[looking_for]["species"]]", specific_god = linked_god)
- stop_looking_for(TRUE)
-
- return TOPIC_HANDLED
- if(href_list["spawn_type"] && user == linked_god)
- if(looking_for)
- to_chat(usr, SPAN_WARNING("\The [src] is already looking for a [looking_for]."))
- else
- looking_for = href_list["spawn_type"]
- to_chat(usr, SPAN_NOTICE("\The [src] is now looking for a [looking_for]."))
- for(var/l in get_turf(linked_god))
- if(istype(l, /mob/living/starlight_soul))
- to_chat(l, " \The [src] is looking for a soul to become a [looking_for]. Accept? ( Yes)")
- addtimer(CALLBACK(src, PROC_REF(stop_looking_for), FALSE), 30 SECONDS)
- show_browser(linked_god, null, "window=gateway")
- return TOPIC_HANDLED
-
-/obj/structure/deity/radiant_statue
- name = "radiant statue"
- icon_state = "statue"
- build_cost = 750
- power_adjustment = 1
- deity_flags = DEITY_STRUCTURE_NEAR_IMPORTANT|DEITY_STRUCTURE_ALONE
- var/charge = 0
- var/charging = 0 //Charging, dispersing, etc.
-
-/obj/structure/deity/radiant_statue/on_update_icon()
- ..()
- if(charging)
- icon_state = "statue_charging"
- else if(charge)
- icon_state = "statue_active"
- else
- icon_state = "statue"
-
-/obj/structure/deity/radiant_statue/Destroy()
- if(charging)
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/structure/deity/radiant_statue/proc/get_followers_nearby()
- . = list()
- if(linked_god)
- for(var/m in linked_god.minions)
- var/datum/mind/M = m
- if(get_dist(M.current, src) <= 3)
- . += M.current
-
-/obj/structure/deity/radiant_statue/attack_hand(var/mob/L)
- SHOULD_CALL_PARENT(FALSE)
- var/obj/O = L.get_equipped_item(slot_wear_suit_str)
- if(O && has_extension(O,/datum/extension/deity_be_near))
- if(activate_charging())
- to_chat(L, SPAN_NOTICE("You place your hands on \the [src], feeling your master's power course through you."))
- else
- to_chat(L, SPAN_WARNING("\The [src] has already been activated."))
- else
- to_chat(L, SPAN_WARNING("\The [src] does not recognize you as a herald of \the [linked_god]. You must wear a full set of herald's armor."))
- return TRUE
-
-/obj/structure/deity/radiant_statue/attack_deity(var/mob/living/deity/deity)
- if(activate_charging())
- to_chat(deity,SPAN_NOTICE("You activate \the [src], and it begins to charge as long as at least one of your followers is nearby."))
- else
- to_chat(deity,SPAN_WARNING("\The [src] is either already activated, or there are no followers nearby to charge it."))
-
-/obj/structure/deity/radiant_statue/proc/activate_charging()
- var/list/followers = get_followers_nearby()
- if(is_processing || !followers.len)
- return 0
- charging = 1
- START_PROCESSING(SSobj, src)
- src.visible_message(SPAN_NOTICE(" \The [src] hums, activating."))
- update_icon()
- return 1
-
-/obj/structure/deity/radiant_statue/attackby(var/obj/item/I, var/mob/user)
- if(charging && (istype(I, /obj/item/knife/ritual/shadow) || istype(I, /obj/item/gun/energy/staff/beacon)) && charge_item(I, user))
- return
- ..()
-
-/obj/structure/deity/radiant_statue/proc/charge_item(var/obj/item/I, var/mob/user)
- . = 0
- if(istype(I, /obj/item/gun/energy))
- var/obj/item/gun/energy/energy = I
- var/obj/item/cell/power_supply = energy.get_cell()
- if(power_supply)
- power_supply.give(energy.charge_cost * energy.max_shots)
- . = 1
- else if(istype(I ,/obj/item/knife/ritual/shadow))
- var/obj/item/knife/ritual/shadow/shad = I
- shad.charge = initial(shad.charge)
- . = 1
- if(.)
- to_chat(user, SPAN_NOTICE("\The [src]'s glow envelops \the [I], restoring it to proper use."))
- charge -= 1
-
-/obj/structure/deity/radiant_statue/Process()
- if(charging)
- charge++
- var/list/followers = get_followers_nearby()
- if(followers.len == 0)
- stop_charging()
- return
-
- if(charge == 40)
- src.visible_message(SPAN_NOTICE(" \The [src] lights up, pulsing with energy."))
- charging = 0
- update_icon()
- else
- charge -= 0.5
- var/list/followers = get_followers_nearby()
- if(followers.len)
- for(var/m in followers)
- var/mob/living/L = m
- L.heal_damage(BURN, 5)
- if(prob(5))
- to_chat(L, SPAN_NOTICE("You feel a pleasant warmth spread throughout your body..."))
- for(var/s in L.mind.learned_spells)
- var/spell/spell = s
- spell.charge_counter = spell.charge_max
- if(charge == 0)
- stop_charging()
-
-/obj/structure/deity/radiant_statue/proc/stop_charging()
- STOP_PROCESSING(SSobj, src)
- src.visible_message(SPAN_NOTICE(" \The [src] powers down, returning to its dormant form."))
- charging = 0
- update_icon()
-
-/obj/structure/deity/blood_forge/starlight
- name = "radiant forge"
- desc = "a swath of heat and fire permeats from this forge."
- recipe_feat_list = "Fire Crafting"
- text_modifications = list(
- "Cost" = "Burn",
- "Dip" = "fire. Pain envelopes you as dark burns mar your hands and you begin to shape it into something more useful",
- "Shape" = "You shape the fire, ignoring the painful burns it gives you in the process.",
- "Out" = "flames"
- )
diff --git a/mods/gamemodes/deity/forms/tower/deity_items/conjuration.dm b/mods/gamemodes/deity/forms/tower/deity_items/conjuration.dm
deleted file mode 100644
index dc26893321d..00000000000
--- a/mods/gamemodes/deity/forms/tower/deity_items/conjuration.dm
+++ /dev/null
@@ -1,107 +0,0 @@
-/datum/deity_item/conjuration
- name = DEITY_TREE_CONJURATION
- desc = "Conjuration is the school of creation and teleportation, summoning fireballs or teleporting long distances, this school is extremely powerful."
- category = DEITY_TREE_CONJURATION
- max_level = 3
- base_cost = 50
-
-/datum/deity_item/conjuration/get_cost(var/mob/living/deity/D)
- return base_cost * (level + 1)
-
-//Level 1
-/datum/deity_item/boon/single_charge/create_air
- name = "Create Air"
- desc = "Allows your follower to generate a livable atmosphere in the area they are in."
- base_cost = 25
- category = DEITY_TREE_CONJURATION
- boon_path = /spell/create_air/tower
- requirements = list(DEITY_TREE_CONJURATION = 1)
-
-/datum/deity_item/boon/single_charge/acid_spray
- name = "Acid Spray"
- desc = "The simplest form of aggressive conjuration: acid spray is quite effective in melting both man and object."
- base_cost = 130
- category = DEITY_TREE_CONJURATION
- boon_path = /spell/acid_spray/tower
- requirements = list(DEITY_TREE_CONJURATION = 1)
-
-/datum/deity_item/boon/single_charge/force_wall
- name = "Force Wall"
- desc = "A temporary invincible wall for followers to summon."
- base_cost = 30
- category = DEITY_TREE_CONJURATION
- boon_path = /spell/aoe_turf/conjure/forcewall/tower
- requirements = list(DEITY_TREE_CONJURATION = 1)
-
-/datum/deity_item/phenomena/dimensional_locker
- name = "Phenomena: Dimensional Locker"
- desc = "Gain the ability to move a magical locker around. While it cannot move living things, you can move it around as you please, even disappearing it into the nether."
- base_cost = 50
- category = DEITY_TREE_CONJURATION
- phenomena_path = /datum/phenomena/movable_object/dimensional_locker
- requirements = list(DEITY_TREE_CONJURATION = 1)
-
-//Level 2
-/datum/deity_item/boon/single_charge/faithful_hound
- name = "Faithful Hound"
- desc = "This spell allows a follower to summon a singular spectral dog that guards the nearby area. Anyone without the password is barked at or bitten."
- base_cost = 40
- category = DEITY_TREE_CONJURATION
- boon_path = /spell/aoe_turf/conjure/faithful_hound/tower
- requirements = list(DEITY_TREE_CONJURATION = 2)
-
-/datum/deity_item/wizard_armaments
- name = DEITY_UNLOCK_ARMS
- desc = "Unlock spells related to the summoning of weapons and armor. These spells only last a short duration, but are extremely effective."
- base_cost = 25
- category = DEITY_TREE_CONJURATION
- requirements = list(DEITY_TREE_CONJURATION = 2)
-
-/datum/deity_item/boon/single_charge/sword
- name = "Summon Sword"
- desc = "This spell allows your followers to summon a golden firey sword for a short duration."
- base_cost = 50
- boon_path = /spell/targeted/equip_item/dyrnwyn/tower
- category = DEITY_TREE_CONJURATION
- requirements = list(DEITY_UNLOCK_ARMS = 1)
-
-/datum/deity_item/boon/single_charge/shield
- name = "Summon Shield"
- desc = "This spell allows your followers to summon a magical shield for a short duration."
- base_cost = 20
- boon_path = /spell/targeted/equip_item/shield/tower
- category = DEITY_TREE_CONJURATION
- requirements = list(DEITY_UNLOCK_ARMS = 1)
-
-/datum/deity_item/phenomena/portals
- name = "Phenomena: Portals"
- desc = "Gain the ability to create portals for your followers to enter through. You will need to create two for it work. Any created past that will delete the oldest portal."
- base_cost = 75
- requirements = list(DEITY_TREE_CONJURATION = 2)
- category = DEITY_TREE_CONJURATION
- phenomena_path = /datum/phenomena/portals
-
-//Level 3
-/datum/deity_item/boon/single_charge/fireball
- name = "Fireball"
- desc = "Embue your follower with the power of exploding fire."
- base_cost = 85
- boon_path = /spell/targeted/projectile/dumbfire/fireball/tower
- category = DEITY_TREE_CONJURATION
- requirements = list(DEITY_TREE_CONJURATION = 3)
-
-/datum/deity_item/boon/single_charge/force_portal
- name = "Force Portal"
- desc = "This spell allows a follower to summon a force portal. Anything that hits the portal gets sucked inside and is then thrown out when the portal explodes."
- base_cost = 45
- boon_path = /spell/aoe_turf/conjure/force_portal/tower
- category = DEITY_TREE_CONJURATION
- requirements = list(DEITY_TREE_CONJURATION = 3)
-
-/datum/deity_item/phenomena/banishing_smite
- name = "Phenomena: Banishing Smite"
- desc = "Gain the ability to smite an individual, dealing damage to them. If they are weakened enough, this can cause them to temporarily be transported."
- base_cost = 75
- requirements = list(DEITY_TREE_CONJURATION = 3)
- category = DEITY_TREE_CONJURATION
- phenomena_path = /datum/phenomena/banishing_smite
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/tower/deity_items/transmutation.dm b/mods/gamemodes/deity/forms/tower/deity_items/transmutation.dm
deleted file mode 100644
index 7151b889538..00000000000
--- a/mods/gamemodes/deity/forms/tower/deity_items/transmutation.dm
+++ /dev/null
@@ -1,97 +0,0 @@
-/datum/deity_item/transmutation
- name = DEITY_TREE_TRANSMUTATION
- desc = "Transmutation is the school of change. It cannot be used to create things, only modify them or even destroy them."
- category = DEITY_TREE_TRANSMUTATION
- max_level = 3
- base_cost = 50
-
-/datum/deity_item/conjuration/get_cost(var/mob/living/deity/D)
- return base_cost * (level + 1)
-
-//Level 1
-/datum/deity_item/boon/single_charge/slippery_surface
- name = "Slippery Surface"
- desc = "Allows a follower to slicken a small patch of floor. Anyone without sure-footing will find it hard to stay upright."
- base_cost = 10
- category = DEITY_TREE_TRANSMUTATION
- boon_path = /spell/hand/slippery_surface/tower
-
-/datum/deity_item/boon/single_charge/smoke
- name = "Smoke"
- desc = "Allows a follower to distill the nearby air into smoke."
- base_cost = 10
- category = DEITY_TREE_TRANSMUTATION
- boon_path = /spell/aoe_turf/smoke/tower
-
-//Level 2
-/datum/deity_item/boon/single_charge/knock
- name = "Knock"
- desc = "Allows a follower to open nearby doors without the keys."
- base_cost = 25
- category = DEITY_TREE_TRANSMUTATION
- boon_path = /spell/aoe_turf/knock/tower
- requirements = list(DEITY_TREE_TRANSMUTATION = 2)
-
-/datum/deity_item/boon/single_charge/burning_grip
- name = "Burning Grip"
- desc = "Allows a follower cause an object to heat up intensly in someone's hand, making them drop it and whatever skin is attached."
- base_cost = 15
- boon_path = /spell/hand/burning_grip/tower
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_TREE_TRANSMUTATION = 2)
-
-/datum/deity_item/phenomena/warp_body
- name = "Phenomena: Warp Body"
- desc = "Gain the ability to warp the very structure of a target's body, wracking pain and weakness."
- base_cost = 75
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_TREE_TRANSMUTATION = 2)
- phenomena_path = /datum/phenomena/warp
-
-//Level 3
-/datum/deity_item/boon/single_charge/jaunt
- name = "Ethereal Jaunt"
- desc = "Allows a follower to liquify for a short duration, letting them pass through all dense objects."
- base_cost = 25
- category = DEITY_TREE_TRANSMUTATION
- boon_path = /spell/targeted/ethereal_jaunt/tower
- requirements = list(DEITY_TREE_TRANSMUTATION = 3)
-
-/datum/deity_item/healing_spells
- name = DEITY_UNLOCK_HEAL
- desc = "Of transmutation, healing is perhaps the most immediately effective and useful. This unlocks the healing spells for your followers."
- base_cost = 50
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_TREE_TRANSMUTATION = 3)
-
-/datum/deity_item/boon/single_charge/heal
- name = "Minor Heal"
- desc = "Allows your follower to heal themselves, or others, for a slight amount."
- base_cost = 15
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_UNLOCK_HEAL = 1)
- boon_path = /spell/targeted/heal_target/tower
-
-/datum/deity_item/boon/single_charge/heal/major
- name = "Major Heal"
- desc = "Allows your follower to heal others for a great amount."
- base_cost = 25
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_UNLOCK_HEAL = 1)
- boon_path = /spell/targeted/heal_target/major/tower
-
-/datum/deity_item/boon/single_charge/heal/area
- name = "Area Heal"
- desc = "Allows your follower to heal everyone in an area for minor damage."
- base_cost = 20
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_UNLOCK_HEAL = 1)
- boon_path = /spell/targeted/heal_target/area/tower
-
-/datum/deity_item/phenomena/rock_form
- name = "Phenomena: Rock Form"
- desc = "Gain the ability to transform your followers into beings of rock and stone."
- base_cost = 75
- category = DEITY_TREE_TRANSMUTATION
- requirements = list(DEITY_TREE_TRANSMUTATION = 3)
- phenomena_path = /datum/phenomena/rock_form
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/tower/spells.dm b/mods/gamemodes/deity/forms/tower/spells.dm
deleted file mode 100644
index 18b88647edf..00000000000
--- a/mods/gamemodes/deity/forms/tower/spells.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/spell/create_air/tower
- desc = "Allows you to generate a livable atmosphere in the area you are in."
- charge_max = 5
-
-/spell/hand/burning_grip/tower
- desc = "Allows you cause an object to heat up intensly in someone's hand, making them drop it and whatever skin is attached."
- charge_max = 3
-
-/spell/hand/slippery_surface/tower
- desc = "Allows you to slicken a small patch of floor. Anyone without sure-footing will find it hard to stay upright."
- charge_max = 2
-
-/spell/aoe_turf/knock/tower
- charge_max = 2
- hidden_from_codex = TRUE
-
-/spell/aoe_turf/smoke/tower
- charge_max = 2
- hidden_from_codex = TRUE
-
-/spell/aoe_turf/conjure/faithful_hound/tower
- desc = "This spell allows you to summon a singular spectral dog that guards the nearby area. Anyone without the password is barked at or bitten."
- charge_max = 1
- spell_flags = 0
-
-/spell/aoe_turf/conjure/force_portal/tower
- desc = "This spell allows you to summon a force portal. Anything that hits the portal gets sucked inside and is then thrown out when the portal explodes."
- charge_max = 2
- spell_flags = 0
-
-/spell/acid_spray/tower
- desc = "The simplest form of aggressive conjuration: acid spray is quite effective in melting both man and object."
- charge_max = 2
-
-/spell/targeted/heal_target/tower
- desc = "Allows you to heal yourself, or others, for a slight amount."
- charge_max = 2
-
-/spell/targeted/heal_target/major/tower
- charge_max = 1
- spell_flags = INCLUDEUSER | SELECTABLE
- desc = "Allows you to heal others for a great amount."
-
-/spell/targeted/heal_target/area/tower
- desc = "Allows you to heal everyone in an area for minor damage."
- charge_max = 1
-
-/spell/targeted/ethereal_jaunt/tower
- desc = "Allows you to liquefy for a short duration, letting you pass through all dense objects."
- charge_max = 2
- spell_flags = Z2NOCAST | INCLUDEUSER
-
-/spell/aoe_turf/conjure/forcewall/tower
- desc = "A temporary invincible wall for you to summon."
- charge_max = 3
-
-/spell/targeted/equip_item/dyrnwyn/tower
- desc = "This spell allows you to summon a fiery golden sword for a short duration."
- charge_max = 1
-
-/spell/targeted/equip_item/shield/tower
- desc = "This spell allows you to summon a magical shield for a short duration."
- charge_max = 1
-
-/spell/targeted/projectile/dumbfire/fireball/tower
- desc = "Imbue yourself with the power of exploding fire."
- charge_max = 2
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/tower/structures.dm b/mods/gamemodes/deity/forms/tower/structures.dm
deleted file mode 100644
index 453caf22de2..00000000000
--- a/mods/gamemodes/deity/forms/tower/structures.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-/obj/structure/deity/altar/tower
- icon_state = "tomealtar"
-
-/obj/structure/deity/wizard_recharger
- name = "fountain of power"
- desc = "Refreshing, cool water surrounded by archaic carvings."
- icon_state = "fountain"
- power_adjustment = 2
- build_cost = 700
-
-/obj/structure/deity/wizard_recharger/attack_hand(var/mob/hitter)
- SHOULD_CALL_PARENT(FALSE)
- if(!length(hitter.mind?.learned_spells))
- to_chat(hitter, SPAN_WARNING("You don't feel as if this will do anything for you."))
- return TRUE
-
- hitter.visible_message(SPAN_NOTICE("\The [hitter] dips their hands into \the [src], a soft glow emanating from them."))
- if(do_after(hitter,300,src,check_holding=0))
- for(var/s in hitter.mind.learned_spells)
- var/spell/spell = s
- spell.charge_counter = spell.charge_max
- to_chat(hitter, SPAN_NOTICE("You feel refreshed!"))
- else
- to_chat(hitter, SPAN_WARNING("You need to keep in contact with \the [src]!"))
- return TRUE
\ No newline at end of file
diff --git a/mods/gamemodes/deity/forms/tower/tower.dm b/mods/gamemodes/deity/forms/tower/tower.dm
deleted file mode 100644
index fe165b5c56d..00000000000
--- a/mods/gamemodes/deity/forms/tower/tower.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/datum/god_form/wizard
- name = "The Tower"
- info = {"Only from destruction does the Tower grow. Its bricks smelted from crumbled ignorance and the fires of ambition.
- Benefits:
- +Learn spells from two different schools.
- +Deity gains power through each spell use.
- Drawbacks:
- -Abilities hold a limited amount of charge and must be charged at a fountain of power.
- "}
- desc = "A single solitary tower"
- god_icon_state = "tower"
- pylon_icon_state = "nim"
-
- buildables = list(/obj/structure/deity/altar/tower,
- /obj/structure/deity/pylon,
- /obj/structure/deity/wizard_recharger
- )
- items = list(/datum/deity_item/general/potential,
- /datum/deity_item/general/regeneration,
- /datum/deity_item/conjuration,
- /datum/deity_item/boon/single_charge/create_air,
- /datum/deity_item/boon/single_charge/acid_spray,
- /datum/deity_item/boon/single_charge/force_wall,
- /datum/deity_item/phenomena/dimensional_locker,
- /datum/deity_item/boon/single_charge/faithful_hound,
- /datum/deity_item/wizard_armaments,
- /datum/deity_item/boon/single_charge/sword,
- /datum/deity_item/boon/single_charge/shield,
- /datum/deity_item/phenomena/portals,
- /datum/deity_item/boon/single_charge/fireball,
- /datum/deity_item/boon/single_charge/force_portal,
- /datum/deity_item/phenomena/banishing_smite,
- /datum/deity_item/transmutation,
- /datum/deity_item/boon/single_charge/slippery_surface,
- /datum/deity_item/boon/single_charge/smoke,
- /datum/deity_item/boon/single_charge/knock,
- /datum/deity_item/boon/single_charge/burning_grip,
- /datum/deity_item/phenomena/warp_body,
- /datum/deity_item/boon/single_charge/jaunt,
- /datum/deity_item/healing_spells,
- /datum/deity_item/boon/single_charge/heal,
- /datum/deity_item/boon/single_charge/heal/major,
- /datum/deity_item/boon/single_charge/heal/area,
- /datum/deity_item/phenomena/rock_form
- )
-
-/datum/god_form/wizard/take_charge(var/mob/living/user, var/charge)
- linked_god.adjust_power_min(max(round(charge/100), 1),silent = 1)
- return 1
\ No newline at end of file
diff --git a/mods/gamemodes/deity/gamemode.dm b/mods/gamemodes/deity/gamemode.dm
deleted file mode 100644
index 9bf79d8ca87..00000000000
--- a/mods/gamemodes/deity/gamemode.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/decl/game_mode/godmode
- name = "Deity"
- round_description = "An otherworldly beast has turned its attention to you and your fellow cremembers."
- extended_round_description = "The station has been infiltrated by a fanatical group of death-cultists! They will use powers from beyond your comprehension to subvert you to their cause and ultimately please their gods through sacrificial summons and physical immolation! Try to survive!"
- uid = "god"
- required_players = 10
- required_enemies = 3
- end_on_antag_death = FALSE
- associated_antags = list(
- /decl/special_role/deity,
- /decl/special_role/godcultist
- )
\ No newline at end of file
diff --git a/mods/gamemodes/deity/god_cultist_role.dm b/mods/gamemodes/deity/god_cultist_role.dm
deleted file mode 100644
index d1c5bced882..00000000000
--- a/mods/gamemodes/deity/god_cultist_role.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-/decl/special_role/godcultist
- name = "God Cultist"
- name_plural = "God Cultists"
- blacklisted_jobs = list(/datum/job/submap)
- antag_indicator = "hudcultist"
- faction_verb = /mob/living/proc/dpray
- welcome_text = "You are under the guidance of a powerful otherwordly being. Spread its will and keep your faith. Use dpray to communicate directly with your master! Ask your master for spells to start building!"
- flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
- hard_cap = 5
- hard_cap_round = 6
- initial_spawn_req = 3
- initial_spawn_target = 3
- antaghud_indicator = "hudcultist"
- skill_setter = /datum/antag_skill_setter/station
- blocked_job_event_categories = list(ASSIGNMENT_ROBOT, ASSIGNMENT_COMPUTER)
-
-/decl/special_role/godcultist/add_antagonist_mind(var/datum/mind/player, var/ignore_role, var/nonstandard_role_type, var/nonstandard_role_msg, var/mob/living/deity/specific_god)
- if(!..())
- return 0
-
- if(specific_god)
- add_cultist(player, specific_god)
-
- return 1
-
-/decl/special_role/godcultist/post_spawn()
- var/decl/special_role/deity = GET_DECL(/decl/special_role/deity)
- if(!deity.current_antagonists.len)
- return
- var/count = 1
- var/deity_count = 1
- while(count <= current_antagonists.len)
- if(deity_count > deity.current_antagonists.len)
- deity_count = 1
- var/datum/mind/deity_mind = deity.current_antagonists[deity_count]
- var/datum/mind/mind = current_antagonists[count]
- add_cultist(mind, deity_mind.current)
- count++
- deity_count++
-
-
-/decl/special_role/godcultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted)
- var/mob/living/deity/god = get_deity(player)
- if(!..())
- return 0
- remove_cultist(player, god)
- return 1
-
-/decl/special_role/godcultist/get_extra_panel_options(var/datum/mind/player)
- return " \[Select Deity\]"
-
-/decl/special_role/godcultist/Topic(href, href_list)
- if(..())
- return 1
- if(href_list["selectgod"])
- var/list/god_list = list()
- var/decl/special_role/deity = GET_DECL(/decl/special_role/deity)
- if(length(deity.current_antagonists))
- for(var/m in deity.current_antagonists)
- var/datum/mind/mind = m
- god_list += mind.current
- else
- for(var/mob/living/deity/specific_deity in global.player_list)
- god_list += specific_deity
- if(god_list.len)
- var/mob/living/deity/D = input(usr, "Select a deity for this cultist.") in null|god_list
- if(D)
- var/datum/mind/player = locate(href_list["selectgod"])
- remove_cultist(player) //Remove him from any current deity.
- add_cultist(player, D)
- log_and_message_admins("has set [key_name(player.current)] to be a minion of [key_name(D)]")
- else
- to_chat(usr, SPAN_WARNING("There are no deities to be linked to."))
- return 1
-
-/decl/special_role/godcultist/proc/add_cultist(var/datum/mind/player, var/mob/living/deity/deity)
- deity.add_follower(player.current)
- player.current.add_language(/decl/language/cultcommon)
-
-/decl/special_role/godcultist/proc/remove_cultist(var/datum/mind/player, var/mob/living/deity/god)
- god.remove_follower(player.current)
- player.current.remove_language(/decl/language/cultcommon)
-
-/decl/special_role/godcultist/proc/get_deity(var/datum/mind/player)
- var/decl/special_role/deity = GET_DECL(/decl/special_role/deity)
- for(var/m in deity.current_antagonists)
- var/datum/mind/mind = m
- var/mob/living/deity/god = mind.current
- if(god && god.is_follower(player.current,1))
- return god
-
-/mob/living/proc/dpray(var/msg as text)
- set category = "Abilities"
-
- var/decl/special_role/godcultist/godcult = GET_DECL(/decl/special_role/godcultist)
- if(!src.mind || !godcult.is_antagonist(mind))
- return
- msg = sanitize(msg)
- var/mob/living/deity/D = godcult.get_deity(mind)
- if(!D || !msg)
- return
-
- //Make em wait a few seconds.
- src.visible_message("\The [src] bows their head down, muttering something.", SPAN_NOTICE("You send the message \"[msg]\" to your master."))
- to_chat(D, " \The [src] (J) prays, \"[msg]\"")
- log_and_message_admins("dprayed, \"[msg]\" to \the [key_name(D)]")
diff --git a/mods/gamemodes/deity/mobs/deity.dm b/mods/gamemodes/deity/mobs/deity.dm
deleted file mode 100644
index f26e490c85c..00000000000
--- a/mods/gamemodes/deity/mobs/deity.dm
+++ /dev/null
@@ -1,134 +0,0 @@
-/mob/living/deity
- name = "shapeless creature"
- desc = "A shape of otherworldly matter, not yet ready to be unleashed into this world."
- icon = 'icons/mob/deity_big.dmi'
- icon_state = "egg"
- pixel_x = -128
- pixel_y = -128
- max_health = 100
- universal_understand = TRUE
- mob_sort_value = 5
- is_spawnable_type = FALSE
- butchery_data = null
-
- var/eye_type = /mob/observer/eye/freelook/cult
- var/datum/visualnet/cultnet/eyenet
- var/list/minions = list() //Minds of those who follow him
- var/list/structures = list() //The objs that this dude controls.
- var/list/feats = list()
- var/datum/god_form/form
- var/datum/current_boon
- var/mob/living/following
-
-/mob/living/deity/Initialize()
- . = ..()
- eyenet = new()
- eyeobj = new eye_type(get_turf(src), eyenet)
- eyeobj.possess(src)
- eyenet.add_source(src)
-
-/mob/living/deity/death(gibbed)
- . = ..()
- if(.)
- for(var/m in minions)
- var/datum/mind/M = m
- remove_follower_spells(M)
- to_chat(M.current, " Your connection has been severed! \The [src] is no more!")
- sound_to(M.current, 'sound/hallucinations/far_noise.ogg')
- SET_STATUS_MAX(M.current, STAT_WEAK, 10)
- for(var/s in structures)
- var/obj/structure/deity/S = s
- S.linked_god = null
-
-/mob/living/deity/shared_nano_interaction()
- if(stat == DEAD)
- return STATUS_CLOSE
- return STATUS_INTERACTIVE
-
-/mob/living/deity/Destroy()
-
- for(var/phenom in phenomenas)
- remove_phenomena(phenom)
-
- if(length(items_by_category))
- for(var/cat in items_by_category)
- var/list/L = items_by_category[cat]
- L.Cut()
- items_by_category.Cut()
-
- if(length(items))
- for(var/i in items)
- qdel(items[i])
- items.Cut()
-
- death()
- if(length(minions))
- minions.Cut()
- if(length(structures))
- structures.Cut()
-
- if(eyeobj)
- eyeobj.release()
- QDEL_NULL(eyeobj)
- QDEL_NULL(eyenet) //We do it here as some mobs have eyes that have access to the visualnet and we only want to destroy it when the deity is destroyed
-
- QDEL_NULL(form)
-
- return ..()
-
-/mob/living/deity/verb/return_to_plane()
- set category = "Godhood"
-
- eyeobj.forceMove(get_turf(src))
-
-/mob/living/deity/verb/choose_form()
- set name = "Choose Form"
- set category = "Godhood"
-
- var/dat = list()
- dat += {" Choose a Form
- This choice is permanent. Choose carefully, but quickly.
-
-
- Name |
- Theme |
- Description |
- "}
- var/list/forms = subtypesof(/datum/god_form)
-
- for(var/form in forms)
- var/datum/god_form/god = form
- var/god_name = initial(god.name)
- var/icon/god_icon = icon('icons/mob/mob.dmi', initial(god.pylon_icon_state))
- send_rsc(src,god_icon, "[god_name].png")
- dat += {"
- [god_name] |
- ![]([god_name].png) |
- [initial(god.info)] |
- "}
- dat += " "
- show_browser(src, JOINTEXT(dat), "window=godform;can_close=0")
-
-/mob/living/deity/proc/set_form(var/type)
- form = new type(src)
- to_chat(src, SPAN_NOTICE("You undergo a transformation into your new form!"))
- spawn(1)
- SetName(form.name)
- var/newname = sanitize(input(src, "Choose a name for your new form.", "Name change", form.name) as text, MAX_NAME_LEN)
- if(newname)
- fully_replace_character_name(newname)
- src.verbs -= /mob/living/deity/verb/choose_form
- show_browser(src, null, "window=godform")
- for(var/m in minions)
- var/datum/mind/mind = m
- var/mob/living/L = mind.current
- L.faction = form.faction
-
-//Gets the name based on form, or if there is no form name, type.
-/mob/living/deity/proc/get_type_name(var/type)
- if(form && form.buildables[type])
- var/list/vars = form.buildables[type]
- if(vars["name"])
- return vars["name"]
- var/atom/movable/M = type
- return initial(M.name)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_Stat.dm b/mods/gamemodes/deity/mobs/deity_Stat.dm
deleted file mode 100644
index 6105b7f9af3..00000000000
--- a/mods/gamemodes/deity/mobs/deity_Stat.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/mob/living/deity/Stat()
- . = ..()
- if(statpanel("Status"))
- stat("Structure Num", structures.len)
- stat("Minion Num", minions.len)
- var/boon_name = "None"
- if(current_boon)
- if(istype(current_boon, /spell))
- var/spell/S = current_boon
- boon_name = S.name
- else
- var/obj/O = current_boon
- boon_name = O.name
- stat("Current Boon",boon_name)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_boons.dm b/mods/gamemodes/deity/mobs/deity_boons.dm
deleted file mode 100644
index da05d9a5ff2..00000000000
--- a/mods/gamemodes/deity/mobs/deity_boons.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/mob/living/deity/proc/set_boon(var/datum/boon)
- if(current_boon)
- qdel(current_boon)
- current_boon = boon
- to_chat(src, SPAN_NOTICE("You now have the boon [boon]"))
- if(istype(boon, /atom/movable))
- var/atom/movable/A = boon
- nano_data["boon_name"] = A.name
- A.forceMove(src)
- else if(istype(boon, /spell))
- var/spell/S = boon
- nano_data["boon_name"] = S.name
-
-/mob/living/deity/proc/grant_boon(var/mob/living/L)
- if(istype(current_boon, /spell) && !grant_spell(L, current_boon))
- return
- else if(istype(current_boon, /obj/item))
- var/obj/item/I = current_boon
- I.dropInto(L.loc)
- var/origin_text = "on the floor"
- if(L.equip_to_appropriate_slot(I))
- origin_text = "on your body"
- else if(L.put_in_hands_or_del(I))
- origin_text = "in your hands"
- else
- var/obj/O = L.equip_to_storage(I)
- if(O)
- origin_text = "in \the [O]"
- to_chat(L, SPAN_NOTICE("It appears [origin_text]."))
-
- to_chat(L, SPAN_OCCULT("\The [src] grants you a boon of [current_boon]!"))
- to_chat(src, SPAN_NOTICE("You give \the [L] a boon of [current_boon]."))
- log_and_message_admins("gave [key_name(L)] the boon [current_boon]")
- current_boon = null
- nano_data["boon_name"] = null
- return
-
-/mob/living/deity/proc/grant_spell(var/mob/living/target, var/spell/spell)
- var/datum/mind/M = target.mind
- for(var/s in M.learned_spells)
- var/spell/S = s
- if(istype(S, spell.type))
- to_chat(src, SPAN_WARNING("They already know that spell!"))
- return 0
- target.add_spell(spell)
- spell.set_connected_god(src)
- to_chat(target, SPAN_NOTICE("You feel a surge of power as you learn the art of [current_boon]."))
- return 1
-
-/* This is a generic proc used by the God to enact a sacrifice from somebody. Power is a value of magnitude.
-*/
-/mob/living/deity/proc/take_charge(var/mob/living/L, var/power)
- if(form)
- form.take_charge(L, power)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_click.dm b/mods/gamemodes/deity/mobs/deity_click.dm
deleted file mode 100644
index 06fff223062..00000000000
--- a/mods/gamemodes/deity/mobs/deity_click.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/mob/living/deity/ClickOn(var/atom/A, var/params)
- if(A == src)
- if(form)
- ui_interact(src)
- else
- choose_form()
- return
- var/list/modifiers = params2list(params)
- if(modifiers["shift"] || modifiers["ctrl"])
- if(silenced)
- to_chat(src, SPAN_WARNING("You cannot do that as you are silenced!"))
- else
- var/datum/phenomena/phenomena = get_phenomena(modifiers["shift"], modifiers["ctrl"])
- if(phenomena)
- phenomena.Click(A)
- return
- if(current_boon && is_follower(A))
- grant_boon(A)
- else if(istype(A, /obj/structure/deity))
- var/obj/structure/deity/D = A
- if(D.linked_god == src)
- D.attack_deity(src)
- return
- ..()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_hud.dm b/mods/gamemodes/deity/mobs/deity_hud.dm
deleted file mode 100644
index 8a9e3d77d09..00000000000
--- a/mods/gamemodes/deity/mobs/deity_hud.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/mob/living/deity
- hud_used = /datum/hud/deity
-
-/datum/hud/deity/FinalizeInstantiation()
- action_intent = new /obj/screen/intent/deity(null, mymob, get_ui_style_data(), get_ui_color(), get_ui_alpha(), UI_ICON_INTENT)
- adding += action_intent
- ..()
- var/obj/screen/intent/deity/D = action_intent
- D.sync_to_mob(mymob)
diff --git a/mods/gamemodes/deity/mobs/deity_items.dm b/mods/gamemodes/deity/mobs/deity_items.dm
deleted file mode 100644
index 3dfa6e4dc64..00000000000
--- a/mods/gamemodes/deity/mobs/deity_items.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/mob/living/deity
- var/list/items
- var/list/items_by_category
-
-/mob/living/deity/proc/set_items(var/list/_items)
- items = _items
- items_by_category = list()
- for(var/i in items)
- var/datum/deity_item/di = items[i]
- if(!items_by_category[di.category])
- items_by_category[di.category] = list()
- items_by_category[di.category] += di
-
-/mob/living/deity/proc/has_item(var/name, var/minimum_level = 1)
- if(!(name in items))
- return FALSE
- var/datum/deity_item/di = items[name]
- . = di.level >= minimum_level
-
-/mob/living/deity/proc/upgrade_item(var/name)
- if(!(name in items))
- return FALSE
- var/datum/deity_item/di = items[name]
- if(!di.can_buy(src))
- return FALSE
- di.buy(src)
- . = TRUE
-
-/mob/living/deity/proc/get_item_level(var/name)
- . = 0
- if(items[name])
- var/datum/deity_item/di = items[name]
- . = di.level
diff --git a/mods/gamemodes/deity/mobs/deity_phenomena.dm b/mods/gamemodes/deity/mobs/deity_phenomena.dm
deleted file mode 100644
index 6cb38eec0ec..00000000000
--- a/mods/gamemodes/deity/mobs/deity_phenomena.dm
+++ /dev/null
@@ -1,97 +0,0 @@
-/mob/living/deity
- var/silenced = 0
- var/list/phenomenas = list()
- var/list/intent_phenomenas = list()
- var/static/list/control_types = list("control", "controlshift", "shift")
-
-
-/mob/living/deity/Initialize()
- . = ..()
- for(var/intent in intents) //Just in case we somehow remove/add a new intent #futureproofing
- populate_intent(intent)
- set_phenomena(add_phenomena(/datum/phenomena/communicate), I_HELP, "shift")
- set_phenomena(add_phenomena(/datum/phenomena/punish), I_HELP, "control")
- set_phenomena(add_phenomena(/datum/phenomena/point), I_HELP, "controlshift")
- set_phenomena(add_phenomena(/datum/phenomena/conversion), I_GRAB, "shift")
- set_phenomena(add_phenomena(/datum/phenomena/forced_conversion), I_GRAB, "control")
-
-/mob/living/deity/proc/silence(var/amount)
- if(!silenced)
- to_chat(src, SPAN_WARNING("You've been silenced! Your phenomenas are disabled!"))
- var/obj/screen/intent/deity/SD = istype(hud_used) && hud_used.action_intent
- if(istype(SD))
- SD.color = "#ff0000"
- silenced += amount
- for(var/phenom in phenomenas) //Also make it so that you don't do cooldowns.
- var/datum/phenomena/P = phenomenas[phenom]
- if(P.refresh_time)
- P.refresh_time += amount
-
-/mob/living/deity/handle_regular_status_updates()
- . = ..()
- if(.)
- if(silenced > 0)
- silenced--
- if(!silenced)
- to_chat(src, SPAN_NOTICE("You are no longer silenced."))
- var/obj/screen/intent/deity/SD = istype(hud_used) && hud_used.action_intent
- if(istype(SD))
- SD.color = null
- if(power_per_regen < 0 || power < power_min)
- adjust_power(power_per_regen)
-
-/mob/living/deity/proc/add_phenomena(var/type)
- if(!phenomenas)
- phenomenas = list()
- for(var/P in phenomenas)
- if(istype(phenomenas[P], type))
- return
- var/datum/phenomena/P = new type(src)
- phenomenas[P.name] = P
- return P
-
-/mob/living/deity/proc/remove_phenomena_from_intent(var/intent, var/modifier, var/update = 1)
- var/list/intent_list = intent_phenomenas[intent]
- intent_list[modifier] = null
- if(update)
- update_phenomena_bindings()
-
-/mob/living/deity/proc/remove_phenomena(var/to_remove)
- var/datum/phenomena/P = phenomenas[to_remove]
- phenomenas -= to_remove
- for(var/intent in intent_phenomenas)
- var/list/intent_list = intent_phenomenas[intent]
- for(var/mod in intent_list)
- if(intent_list[mod] == P)
- intent_list[mod] = null
- var/obj/screen/intent/deity/SD = istype(hud_used) && hud_used.action_intent
- if(istype(SD))
- SD.update_text()
- update_phenomenas()
- update_phenomena_bindings()
- if(selected == to_remove)
- selected = null
- qdel(P)
-
-/mob/living/deity/proc/populate_intent(var/intent)
- if(!intent_phenomenas[intent])
- intent_phenomenas[intent] = list()
- intent_phenomenas[intent] |= control_types
-
-/mob/living/deity/proc/set_phenomena(var/datum/phenomena/phenomena, var/intent, var/modifiers)
- if(!intent_phenomenas[intent])
- populate_intent(intent)
- var/list/intent_list = intent_phenomenas[intent]
- intent_list[modifiers] = phenomena
-
-/mob/living/deity/proc/get_phenomena(var/shift = 0, var/control = 0)
- var/list/intent_list = intent_phenomenas[a_intent]
- if(intent_list)
- var/type = ""
- if(shift)
- type = "shift"
- if(control)
- type = "control[type]"
- if(intent_list[type])
- return intent_list[type]
- return null
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_power.dm b/mods/gamemodes/deity/mobs/deity_power.dm
deleted file mode 100644
index ffe073b014a..00000000000
--- a/mods/gamemodes/deity/mobs/deity_power.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/mob/living/deity
- var/power = 0
- var/power_min = 10
- var/power_per_regen = 1
-
-/mob/living/deity/proc/adjust_power(var/amount)
- if(amount)
- power = max(0, power + amount)
-
-/mob/living/deity/proc/adjust_power_min(var/amount, var/silent = 0, var/msg)
- if(amount)
- power_min = max(initial(power_min), power_min + amount)
- if(!silent)
- var/feel = ""
- if(abs(amount) > 20)
- feel = " immensely"
- else if(abs(amount) > 10)
- feel = " greatly"
- if(abs(amount) >= 5)
- var/class = amount > 0 ? "notice" : "warning"
- to_chat(src, " You feel your power [amount > 0 ? "increase" : "decrease"][feel][msg ? " [msg]" : ""]")
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_pylon.dm b/mods/gamemodes/deity/mobs/deity_pylon.dm
deleted file mode 100644
index 7f84dc5b339..00000000000
--- a/mods/gamemodes/deity/mobs/deity_pylon.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/mob/living/deity
- var/image/pylon_image
- var/obj/structure/deity/pylon/pylon
-
-/mob/living/deity/set_form(var/type)
- ..()
- pylon_image = image('icons/mob/mob.dmi', icon_state = form.pylon_icon_state)
- pylon_image.alpha = 180
-
-/mob/living/deity/proc/possess_pylon(var/obj/structure/deity/pylon/P)
- if(pylon)
- leave_pylon()
- pylon = P
- pylon.overlays += pylon_image
- playsound(pylon,'sound/effects/phasein.ogg',40,1)
-
-/mob/living/deity/proc/leave_pylon()
- if(!pylon)
- return
- pylon.overlays -= pylon_image
- pylon = null
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_sources.dm b/mods/gamemodes/deity/mobs/deity_sources.dm
deleted file mode 100644
index a1ec947983d..00000000000
--- a/mods/gamemodes/deity/mobs/deity_sources.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/mob/living/deity/proc/add_follower(var/mob/living/L)
- if(is_follower(L, silent=1))
- return
-
- adjust_source(3, L)
- minions += L.mind
- var/spell/construction/C = new()
- L.add_spell(C)
- C.set_connected_god(src)
- if(form)
- L.faction = form.faction
- update_followers()
- events_repository.register(/decl/observ/destroyed, L,src, PROC_REF(dead_follower))
- events_repository.register(/decl/observ/death, L,src, PROC_REF(update_followers))
-
-/mob/living/deity/proc/dead_follower(var/mob/living/L)
- events_repository.unregister(/decl/observ/death, L,src)
- events_repository.unregister(/decl/observ/destroyed, L,src)
-
-/mob/living/deity/proc/remove_follower_spells(var/datum/mind/M)
- if(M.learned_spells)
- for(var/s in M.learned_spells)
- var/spell/S = s
- if(S.connected_god == src)
- M.current.remove_spell(S)
- qdel(S)
-
-/mob/living/deity/proc/remove_follower(var/mob/living/L)
- if(!is_follower(L, silent=1))
- return
-
- adjust_source(-3, L)
- minions -= L.mind
- L.faction = MOB_FACTION_NEUTRAL
- if(L.mind)
- remove_follower_spells(L.mind)
- update_followers()
-
-
-/mob/living/deity/proc/adjust_source(var/amount, var/atom/source, var/silent = 0, var/msg)
- adjust_power_min(amount, silent, msg)
- if(!ismovable(source))
- return
- if(amount > 0)
- eyenet.add_source(source)
- if(istype(source, /obj/structure/deity))
- structures |= source
- else
- eyenet.remove_source(source)
- if(istype(source, /obj/structure/deity))
- structures -= source
-
-/mob/living/deity/proc/is_follower(var/mob/living/L, var/silent = 0)
- if(istype(L))
- if(L.mind)
- if(L.mind in minions)
- return 1
- if(!silent)
- to_chat(src, SPAN_WARNING("You do not feel a malleable mind behind that frame."))
- return 0
-
-/mob/living/deity/fully_replace_character_name(var/new_name, var/in_depth = TRUE)
- if(!..())
- return 0
- for(var/m in minions)
- var/datum/mind/minion = m
- to_chat(minion.current, "Your master is now known as [new_name].")
- minion.assigned_special_role = "Servant of [new_name]"
- eyeobj.SetName("[src] ([eyeobj.name_sufix])")
- nano_data["name"] = new_name
- return 1
-
-//Whether we are near an important structure.
-/mob/living/deity/proc/near_structure(var/atom/A, var/all_structures = 0)
- var/turf/T = get_turf(A)
- for(var/s in structures)
- if(!all_structures)
- var/obj/structure/deity/D = s
- if(D.deity_flags & DEITY_STRUCTURE_NEAR_IMPORTANT)//If it needs to be near an important structure, it isn't important.
- continue
-
- if(get_dist(T, s) <= 3)
- return 1
- return 0
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_topic.dm b/mods/gamemodes/deity/mobs/deity_topic.dm
deleted file mode 100644
index 01226e8ddc5..00000000000
--- a/mods/gamemodes/deity/mobs/deity_topic.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/mob/living/deity/OnSelfTopic(list/href_list)
- if(href_list["form"])
- var/type = locate(href_list["form"]) in subtypesof(/datum/god_form)
- if(type)
- set_form(type)
- return TOPIC_HANDLED
- if(href_list["select_phenomena"])
- nano_data["phenomenaMenu"] = 1
- selected = phenomenas[href_list["select_phenomena"]]
- nano_data["selectedPhenomenaName"] = selected.name
- return TOPIC_HANDLED
- if(href_list["clear_selected"])
- nano_data["phenomenaMenu"] = 0
- selected = null
- nano_data["selectedPhenomenaName"] = null
- return TOPIC_HANDLED
- if(href_list["select_intent"])
- var/list/intent = intent_phenomenas[href_list["select_intent"]]
- if(intent[href_list["select_binding"]])
- remove_phenomena_from_intent(href_list["select_intent"], href_list["select_binding"], 0)
- if(selected)
- set_phenomena(selected, href_list["select_intent"], href_list["select_binding"])
- update_phenomena_bindings()
- return TOPIC_HANDLED
- if(href_list["jump"])
- var/atom/a = locate(href_list["jump"])
- var/follow = 0
- if(href_list["follow"])
- follow = 1
- if(a)
- if(following)
- stop_follow()
- eyeobj.setLoc(get_turf(a))
- if(follow)
- follow_follower(a)
- to_chat(src, SPAN_NOTICE("[follow ? "Following" : "Jumping to"] \the [a]"))
- return TOPIC_HANDLED
- if(href_list["buy"])
- var/datum/deity_item/di = locate(href_list["buy"])
- if(di.can_buy(src))
- di.buy(src)
- else
- to_chat(di,SPAN_WARNING("You don't meet all the requirements for [di.name]!"))
- return TOPIC_HANDLED
- if(href_list["switchCategory"])
- set_nano_category(text2num(href_list["switchCategory"]))
- return 1
- if(href_list["switchMenu"])
- nano_data[href_list["menu"]] = text2num(href_list["switchMenu"])
- return TOPIC_HANDLED
- return ..()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/deity_tracking.dm b/mods/gamemodes/deity/mobs/deity_tracking.dm
deleted file mode 100644
index 27e9d3b552d..00000000000
--- a/mods/gamemodes/deity/mobs/deity_tracking.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/mob/living/deity/verb/jump_to_follower()
- set category = "Godhood"
-
- if(!minions)
- return
-
- var/list/could_follow = list()
- for(var/m in minions)
- var/datum/mind/M = m
- if(M.current && M.current.stat != DEAD)
- could_follow += M.current
-
- if(!could_follow.len)
- return
-
- var/choice = input(src, "Jump to follower", "Teleport") as null|anything in could_follow
- if(choice)
- follow_follower(choice)
-
-/mob/living/deity/proc/follow_follower(var/mob/living/L)
- if(!L || L.stat == DEAD || !is_follower(L, silent=1))
- return
- if(following)
- stop_follow()
- eyeobj.setLoc(get_turf(L))
- to_chat(src, SPAN_NOTICE("You begin to follow \the [L]."))
- following = L
- events_repository.register(/decl/observ/moved, L, src, TYPE_PROC_REF(/mob/living/deity, keep_following))
- events_repository.register(/decl/observ/destroyed, L, src, TYPE_PROC_REF(/mob/living/deity, stop_follow))
- events_repository.register(/decl/observ/death, L, src, TYPE_PROC_REF(/mob/living/deity, stop_follow))
-
-/mob/living/deity/proc/stop_follow()
- events_repository.unregister(/decl/observ/moved, following, src)
- events_repository.unregister(/decl/observ/destroyed, following, src)
- events_repository.unregister(/decl/observ/death, following,src)
- to_chat(src, SPAN_NOTICE("You stop following \the [following]."))
- following = null
-
-/mob/living/deity/proc/keep_following(var/atom/movable/moving_instance, var/atom/old_loc, var/atom/new_loc)
- eyeobj.setLoc(new_loc)
diff --git a/mods/gamemodes/deity/mobs/freelook/cultnet.dm b/mods/gamemodes/deity/mobs/freelook/cultnet.dm
deleted file mode 100644
index 86c718fa0f5..00000000000
--- a/mods/gamemodes/deity/mobs/freelook/cultnet.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/datum/visualnet/cultnet
- valid_source_types = list(/mob/living/, /obj/structure/deity)
- chunk_type = /datum/chunk/cultnet
-
-/datum/chunk/cultnet/acquire_visible_turfs(var/list/visible)
- for(var/source in sources)
- if(isliving(source))
- var/mob/living/L = source
- if(L.stat == DEAD)
- continue
-
- for(var/turf/t in seen_turfs_in_range(source, world.view))
- visible[t] = t
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/freelook/mask.dm b/mods/gamemodes/deity/mobs/freelook/mask.dm
deleted file mode 100644
index 6310effcb1c..00000000000
--- a/mods/gamemodes/deity/mobs/freelook/mask.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/mob/observer/eye/freelook/cult
- name = "Mask of God"
- desc = "A terrible fracture of reality coinciding into a mirror to another world."
- living_eye = FALSE
-
-/mob/observer/eye/freelook/cult/EyeMove()
- if(isdeity(owner))
- var/mob/living/deity/D = owner
- if(D.following)
- D.stop_follow()
- return ..()
diff --git a/mods/gamemodes/deity/mobs/items/blood_crafting.dm b/mods/gamemodes/deity/mobs/items/blood_crafting.dm
deleted file mode 100644
index 3db0c0e161d..00000000000
--- a/mods/gamemodes/deity/mobs/items/blood_crafting.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/datum/deity_item/blood_crafting
- abstract_type = /datum/deity_item/blood_crafting
- name = DEITY_BLOOD_CRAFT
- desc = "Unlocks the blood smithing structure which allows followers to forge unholy tools from blood and flesh."
- category = DEITY_BLOOD_CRAFT
- max_level = 1
- base_cost = 75
- var/forge_type = /obj/structure/deity/blood_forge
- var/list/recipes = list()
-
-/datum/deity_item/blood_crafting/buy(var/mob/living/deity/user)
- ..()
- user.form.buildables |= forge_type //put structure here
- var/list/L = user.feats[name]
- if(!L)
- L = list()
- for(var/type in recipes)
- L[type] = recipes[type]
- user.feats[name] = L
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/items/deity_item.dm b/mods/gamemodes/deity/mobs/items/deity_item.dm
deleted file mode 100644
index 7590bbb9037..00000000000
--- a/mods/gamemodes/deity/mobs/items/deity_item.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-// todo: declize /datum/deity_item
-/datum/deity_item
- var/name
- var/desc
- var/base_cost = 1
- var/category
- var/level = 0
- var/max_level = 0
- var/list/requirements //Name of item = level of item
-
-/datum/deity_item/proc/can_buy(var/mob/living/deity/D)
- if(max_level && level == max_level)
- return FALSE
- var/cost = get_cost(D)
- if(cost && D.power < cost)
- return FALSE
- if(requirements && requirements.len)
- for(var/name in requirements)
- if(!D.has_item(name,requirements[name]))
- return FALSE
- return TRUE
-
-/datum/deity_item/proc/buy(var/mob/living/deity/D)
- D.adjust_power(-get_cost(D))
- level++
-
-/datum/deity_item/proc/get_cost(var/mob/living/deity/D)
- return base_cost
-
-
-/datum/deity_item/proc/print_level()
- return "[level][max_level ? "/[max_level]" : ""]"
-
-/datum/deity_item/proc/print_requirements()
- if(!requirements)
- return "N/A"
- . = ""
- for(var/l in requirements)
- . += "[l] [requirements[l]] "
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/items/general.dm b/mods/gamemodes/deity/mobs/items/general.dm
deleted file mode 100644
index d5c21756578..00000000000
--- a/mods/gamemodes/deity/mobs/items/general.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/datum/deity_item/general
- category = "General"
-
-/datum/deity_item/general/potential
- name = "Increase Potential"
- desc = "Increase the amount of natural power you regenerate."
- base_cost = 10
-
-/datum/deity_item/general/potential/buy(var/mob/living/deity/D)
- ..()
- D.adjust_power_min(5)
-
-/datum/deity_item/general/potential/get_cost(var/mob/living/deity/D)
- return base_cost + base_cost * level**2
-
-/datum/deity_item/general/regeneration
- name = "Increase Power Syphon"
- desc = "Decreases the time it takes to charge your power."
- base_cost = 5
-
-/datum/deity_item/general/regeneration/buy(var/mob/living/deity/D)
- ..()
- D.power_per_regen++
-
-/datum/deity_item/general/regeneration/get_cost(var/mob/living/deity/D)
- return base_cost + 10 * level
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/items/generic.dm b/mods/gamemodes/deity/mobs/items/generic.dm
deleted file mode 100644
index 01b2001ae6e..00000000000
--- a/mods/gamemodes/deity/mobs/items/generic.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-/datum/deity_item/boon
- var/boon_path
-
-/datum/deity_item/boon/buy(var/mob/living/deity/D)
- ..()
- if(boon_path)
- . = new boon_path()
- D.set_boon(.)
-
-/datum/deity_item/phenomena
- var/phenomena_path
- max_level = 1
-
-/datum/deity_item/phenomena/buy(var/mob/living/deity/D)
- ..()
- if(level == 1 && phenomena_path)
- D.add_phenomena(phenomena_path)
- D.update_phenomenas()
-
-/datum/deity_item/boon/single_charge/buy(var/mob/living/deity/D)
- . = ..()
- if(istype(.,/spell))
- var/spell/S = .
- S.charge_counter = S.charge_max
- S.charge_type = Sp_CHARGES
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/menu/deity_nano.dm b/mods/gamemodes/deity/mobs/menu/deity_nano.dm
deleted file mode 100644
index 8633706588b..00000000000
--- a/mods/gamemodes/deity/mobs/menu/deity_nano.dm
+++ /dev/null
@@ -1,81 +0,0 @@
-/mob/living/deity
- var/list/nano_data = list()
- var/datum/phenomena/selected
-
-/mob/living/deity/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/uistate = global.self_topic_state)
- if(!nano_data["categories"]) //If we don't have the categories set yet, we should populate our data.
- var/list/categories = list()
- for(var/cat in items_by_category)
- categories += cat
- nano_data["name"] = name
- nano_data["form_name"] = form.name
- nano_data["categories"] = categories
- nano_data["menu"] = 0 //0 followers, 1 shop, 2 phenomena
- nano_data["phenomenaMenu"] = 0 //0 Phenoms 1 Bindings
- set_nano_category(0)
- update_followers()
- update_phenomenas()
- update_phenomena_bindings()
- else
- update_category()
- nano_data["power"] = power
- nano_data["power_min"] = power_min
- nano_data["regen"] = power_per_regen
- ui = SSnano.try_update_ui(user, src, ui_key, ui, nano_data, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "deity.tmpl", "Deity Menu", 650, 600, state = uistate)
- ui.set_initial_data(nano_data)
- ui.open()
- ui.set_auto_update(TRUE)
-
-/mob/living/deity/proc/set_nano_category(var/num)
- nano_data["category"] = num
- update_category()
-
-/mob/living/deity/proc/update_category()
- var/actual_cat = nano_data["categories"][nano_data["category"] + 1]
- var/list/cat_items = items_by_category[actual_cat]
- var/list/item_data = list()
- for(var/item in cat_items)
- var/datum/deity_item/di = item
- item_data[++item_data.len] = list("name" = di.name, "desc" = di.desc, "requirements" = di.print_requirements(), "level" = di.print_level(), "cost" = di.get_cost(), "ref" = "\ref[di]")
- nano_data["item_data"] = item_data
-
-/mob/living/deity/proc/update_followers()
- var/list/follower_data = list()
- for(var/m in minions)
- var/list/minion_data = list()
- var/datum/mind/mind = m
- if(mind.current)
- if(mind.current.stat != DEAD && mind.current.loc)
- minion_data["ref"] = "\ref[mind.current]"
- minion_data["name"] = "[mind.current.name]"
- else
- minion_data["name"] = mind.name
- follower_data[++follower_data.len] = minion_data
- nano_data["followers"] = follower_data
-
-/mob/living/deity/proc/update_phenomenas()
- var/list/phenomena_data = list()
- for(var/p in phenomenas)
- var/datum/phenomena/P = phenomenas[p]
- phenomena_data[++phenomena_data.len] = list("name" = p, "description" = P.desc, "cost" = P.cost, "cooldown" = P.cooldown)
- nano_data["phenomenas"] = phenomena_data
-
-/mob/living/deity/proc/update_phenomena_bindings()
- var/list/phenomena_bindings = list()
- for(var/intent in intent_phenomenas)
- var/list/intent_data = list()
- for(var/binding in intent_phenomenas[intent])
- var/datum/phenomena/P = intent_phenomenas[intent][binding]
- var/list/data = list()
- if(P)
- data["phenomena_name"] = P.name
- data["binding"] = binding
- intent_data[++intent_data.len] = data
- phenomena_bindings[++phenomena_bindings.len] = list("intent" = intent, "intent_data" = intent_data)
- nano_data["bindings"] = phenomena_bindings
- //Update the hud as well.
- var/obj/screen/intent/deity/SD = istype(hud_used) && hud_used.action_intent
- if(istype(SD))
- SD.update_text()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/_defines.dm b/mods/gamemodes/deity/mobs/phenomena/_defines.dm
deleted file mode 100644
index e0268f37fa5..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/_defines.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define PHENOMENA_NEAR_STRUCTURE 1 //Must be done near a structure
-#define PHENOMENA_FOLLOWER 2 //Can be done on a follower
-#define PHENOMENA_NONFOLLOWER 4 //Can be done on a nonfollower.
-#define PHENOMENA_MUNDANE 8 //Can affect mundane (no mind, no client) things.
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/communication.dm b/mods/gamemodes/deity/mobs/phenomena/communication.dm
deleted file mode 100644
index b3d603bd1c2..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/communication.dm
+++ /dev/null
@@ -1,80 +0,0 @@
-/datum/phenomena/communicate
- name = "Direct Communication"
- desc = "Communicate directly with a mortal being. You may communicate with non-followers, but they will find you easier to ignore."
- cost = 0
- flags = PHENOMENA_FOLLOWER | PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
-
-/datum/phenomena/communicate/activate(var/mob/living/L)
- var/text_to_send = sanitize(input(linked, "Subjugate a member to your will", "Message a Believer") as text)
- if(text_to_send)
- var/text_size = 4
- if(!linked.is_follower(L))
- text_size = 1
- to_chat(L, " [text_to_send]") //Note to self: make this go to ghosties
- to_chat(linked, SPAN_NOTICE("You send the message [text_to_send] to \the [L]"))
- log_and_message_admins("communicated the message \"[text_to_send]\" to [key_name(L)]", linked)
-
-/datum/phenomena/point
- name = "Point"
- desc = "Attract your follower's attentions to something nearby."
- cost = 0
- flags = PHENOMENA_MUNDANE|PHENOMENA_FOLLOWER|PHENOMENA_NONFOLLOWER
- expected_type = /atom
- var/image/arrow
-
-/datum/phenomena/point/activate(var/atom/a)
- ..()
- if(!arrow)
- arrow = image('icons/effects/markers.dmi', icon_state = "arrow", layer = POINTER_LAYER)
- var/turf/T = get_turf(a)
- arrow.loc = T
- var/list/view = view(7,T)
- for(var/m in linked.minions)
- var/datum/mind/mind = m
- if(mind.current)
- var/mob/M = mind.current
- if((M in view) && M.client)
- to_chat(M, SPAN_OCCULT("Your attention is eerily drawn to \the [a]."))
- M.client.images += arrow
- events_repository.register(/decl/observ/logged_out, M, src, TYPE_PROC_REF(/datum/phenomena/point, remove_image))
- spawn(20)
- if(M.client)
- remove_image(M)
-
-/datum/phenomena/point/proc/remove_image(var/mob/living/L)
- L.client.images -= arrow
- events_repository.unregister(/decl/observ/logged_out, L, src)
-
-/datum/phenomena/punish
- name = "Punish"
- desc = "Punish your followers for insubordination, the cost to use this phenomena is based on how deadly you choose the punishment to be."
- cost = 0
- flags = PHENOMENA_FOLLOWER
- expected_type = /mob/living
- var/static/list/punishment_list = list("Pain (0)" = 0, "Light Wound (5)" = 5, "Brain Damage (10)" = 10, "Heavy Wounds (20)" = 20)
-
-/datum/phenomena/punish/activate(var/mob/living/L)
- var/pain = input(linked, "Choose their punishment.", "Punishment") as null|anything in punishment_list
- if(!pain)
- return
- if(punishment_list[pain] && linked.power < punishment_list[pain])
- to_chat(linked, SPAN_WARNING("[pain] costs too much power for you to use on \the [L]"))
- return
- ..()
- linked.adjust_power(-punishment_list[pain])
- switch(pain)
- if("Pain (0)")
- L.take_damage(15, PAIN)
- to_chat(L, SPAN_WARNING("You feel intense disappointment coming at you from beyond the veil."))
- if("Light Wound (5)")
- L.take_damage(5)
- to_chat(L, SPAN_WARNING("You feel an ethereal whip graze your very soul!"))
- if("Brain Damage (10)")
- L.take_damage(5, BRAIN)
- to_chat(L, SPAN_DANGER("You feel your mind breaking under a otherwordly hammer..."))
- if("Heavy Wounds (20)")
- L.take_damage(25)
- to_chat(L, SPAN_DANGER("You feel your master turn its destructive potential against you!"))
- to_chat(linked, SPAN_NOTICE("You punish \the [L]."))
- log_admin("[key_name(linked)] used Punishment [pain] on \the [key_name(L)]")
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/conjuration.dm b/mods/gamemodes/deity/mobs/phenomena/conjuration.dm
deleted file mode 100644
index 5f15cc786aa..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/conjuration.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/datum/phenomena/movable_object/dimensional_locker
- object_type = /obj/structure/closet
- name = "Dimensional Locker"
- cost = 10
- desc = "Summon a trans-dimensional locker anywhere within your influence. You may transport objects and things, but not people in it."
-
-/datum/phenomena/movable_object/dimensional_locker/activate(var/atom/a, var/mob/living/deity/user)
- var/list/mobs_inside = list()
- recursive_content_check(object_to_move, mobs_inside, client_check = 0, sight_check = 0, include_objects = 0)
-
- for(var/i in mobs_inside)
- var/mob/M = i
- M.dropInto(object_to_move.loc)
- to_chat(M,SPAN_WARNING("You are suddenly flung out of \the [object_to_move]!"))
- ..()
-
-/datum/phenomena/portals
- name = "Portals"
- desc = "Summon a portal linked to the last portal you've created. The portal will be destroyed if it is not linked when someone crosses it."
- cost = 30
- flags = PHENOMENA_NEAR_STRUCTURE|PHENOMENA_MUNDANE|PHENOMENA_FOLLOWER|PHENOMENA_NONFOLLOWER
- expected_type = /atom
- var/list/portals = list()
-
-/datum/phenomena/portals/activate(var/atom/a, var/mob/living/deity/user)
- ..()
- var/obj/effect/portal/P = new(get_turf(a), null, 0)
- P.failchance = 0
- portals += P
- events_repository.register(/decl/observ/destroyed, P,src, TYPE_PROC_REF(/datum/phenomena/portals, remove_portal))
- if(portals.len > 2)
- var/removed = portals[1]
- remove_portal(removed)
- qdel(removed)
- if(portals.len > 1)
- var/obj/effect/portal/P1 = portals[1]
- var/obj/effect/portal/P2 = portals[2]
- P1.target = get_turf(P2)
- P2.target = get_turf(P1)
-
-/datum/phenomena/portals/proc/remove_portal(var/portal)
- portals -= portal
- events_repository.unregister(/decl/observ/destroyed, portal,src)
- var/turf/T = get_turf(portal)
- for(var/obj/effect/portal/P in portals)
- if(P.target == T)
- P.target = null
-
-/datum/phenomena/banishing_smite
- name = "Banishing Smite"
- desc = "Deal a terrible blow to a mortal. If they are hurt enough ,they will find themselves trapped in a rift for 30 seconds."
- cost = 70
- cooldown = 300
- flags = PHENOMENA_NEAR_STRUCTURE|PHENOMENA_MUNDANE|PHENOMENA_FOLLOWER|PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
-
-/datum/phenomena/banishing_smite/activate(var/mob/living/L, var/mob/living/deity/user)
- ..()
- L.take_overall_damage(rand(5,30),0,0,0,"blunt intrument") //Actual spell does 5d10 but maaaybe too much.
- playsound(get_turf(L), 'sound/effects/bamf.ogg', 100, 1)
- to_chat(L, SPAN_DANGER("Something hard hits you!"))
- if(L.current_health < L.get_max_health()/2) //If it reduces past 50%
- var/obj/effect/rift/R = new(get_turf(L))
- L.visible_message(SPAN_DANGER("\The [L] is quickly sucked into \a [R]!"))
- L.forceMove(R)
- spawn(300)
- qdel(R)
diff --git a/mods/gamemodes/deity/mobs/phenomena/conversion.dm b/mods/gamemodes/deity/mobs/phenomena/conversion.dm
deleted file mode 100644
index 9d4d989d3fb..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/conversion.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/datum/phenomena/conversion
- name = "Conversion"
- desc = "Ask a non-follower to convert to your cult. This is completely voluntary. Requires the subject to be close to an altar."
- cost = 20
- flags = PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
-
-/datum/phenomena/conversion/can_activate(var/atom/target)
- if(!..())
- return 0
- var/is_good = 0
- for(var/obj/structure/deity/altar/A in linked.structures)
- if(get_dist(target, A) < 2)
- is_good = 1
- break
- if(!is_good)
- to_chat(linked,SPAN_WARNING("\The [target] needs to be near \a [linked.get_type_name(/obj/structure/deity/altar)]."))
- return 0
- return 1
-
-/datum/phenomena/conversion/activate(var/mob/living/L)
- to_chat(src,SPAN_NOTICE("You give \the [L] a chance to willingly convert. May they choose wisely."))
- var/choice = alert(L, "You feel a weak power enter your mind attempting to convert it.", "Conversion", "Allow Conversion", "Deny Conversion")
- if(choice == "Allow Conversion")
- var/decl/special_role/godcultist/godcult = GET_DECL(/decl/special_role/godcultist)
- godcult.add_antagonist_mind(L.mind,1, "Servant of [linked]", "You willingly give your mind to it, may it bring you fortune.", specific_god=linked)
- else
- to_chat(L, SPAN_WARNING("With little difficulty you force the intrusion out of your mind. May it stay that way."))
- to_chat(src, SPAN_WARNING("\The [L] decides not to convert."))
-
-/datum/phenomena/forced_conversion
- name = "Forced Conversion"
- desc = "Force a non-follower to join you. They need to be on top of an altar and conscious for this to work. They may resist, but that will hurt them."
- cost = 100
- flags = PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
-
-/datum/phenomena/forced_conversion/can_activate(var/mob/living/L)
- if(!..())
- return 0
- var/obj/structure/deity/altar/A = locate() in get_turf(L)
- if(!A || A.linked_god != linked)
- to_chat(linked,SPAN_WARNING("\The [L] needs to be on \a [linked.get_type_name(/obj/structure/deity/altar)] to be forcefully converted."))
- return 0
-
- return 1
-
-/datum/phenomena/forced_conversion/activate(var/mob/living/L)
- var/obj/structure/deity/altar/A = locate() in get_turf(L)
- A.set_target(L)
- to_chat(linked, SPAN_NOTICE("You imbue \the [A] with your power, setting forth to force \the [L] to your will."))
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/generic.dm b/mods/gamemodes/deity/mobs/phenomena/generic.dm
deleted file mode 100644
index 633cd96eb7f..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/generic.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/datum/phenomena/movable_object
- var/object_type
- var/atom/movable/object_to_move
- flags = PHENOMENA_NEAR_STRUCTURE|PHENOMENA_MUNDANE|PHENOMENA_FOLLOWER|PHENOMENA_NONFOLLOWER
- expected_type = /atom
-
-/datum/phenomena/movable_object/New()
- ..()
- add_object()
-
-/datum/phenomena/movable_object/Destroy()
- events_repository.unregister(/decl/observ/destroyed, object_to_move,src)
- if(!object_to_move.loc)
- QDEL_NULL(object_to_move)
- . = ..()
-
-/datum/phenomena/movable_object/proc/add_object()
- if(object_to_move)
- events_repository.unregister(/decl/observ/destroyed, object_to_move,src)
- object_to_move = new object_type()
- events_repository.register(/decl/observ/destroyed, object_to_move, src, PROC_REF(add_object))
-
-/datum/phenomena/movable_object/activate(var/atom/a, var/mob/living/deity/user)
- ..()
- if(object_to_move == a)
- object_to_move.forceMove(null) //Move to null space
- else
- var/turf/T = get_turf(a)
- //No dense turf/stuff
- if(T.density)
- return
- for(var/i in T)
- var/atom/A = i
- if(A.density)
- return
- object_to_move.forceMove(T)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/narsie.dm b/mods/gamemodes/deity/mobs/phenomena/narsie.dm
deleted file mode 100644
index 52e69b66b47..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/narsie.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/datum/phenomena/exude_blood
- name = "Exhude Blood"
- desc = "Take pity on a follower, converting a pitance of your power into blood. Don't let them forget your mercy."
- cost = 20
- flags = PHENOMENA_FOLLOWER
- expected_type = /mob/living/human
-
-/datum/phenomena/exude_blood/can_activate(var/mob/living/human/H)
- if(!..())
- return 0
-
- if(!H.should_have_organ(BP_HEART) || H.vessel.total_volume == H.species.blood_volume)
- to_chat(linked, SPAN_WARNING("\The [H] doesn't require anymore blood."))
- return 0
- return 1
-
-/datum/phenomena/exude_blood/activate(var/mob/living/human/H, var/mob/living/deity/user)
- H.adjust_blood(30)
- to_chat(H,SPAN_NOTICE("You feel a rush as new blood enters your system."))
-
-
-/datum/phenomena/hellscape
- name = "Reveal Hellscape"
- desc = "Show a non-follower what awaits their souls after you are through with them."
- cost = 60
- cooldown = 450
- flags = PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
- var/static/list/creepy_notes = list("Your knees give out as an unnatural screaming rings your ears.",
- "You breathe in ash and decay, your lungs gasping for air as your body gives way to the floor.",
- "An extreme pressure comes over you, as if an unknown force has marked you.")
-
-/datum/phenomena/hellscape/activate(var/mob/living/L)
- to_chat(L, " [pick(creepy_notes)]")
- L.damageoverlaytemp = 100
- sound_to(L, 'sound/hallucinations/far_noise.ogg')
- SET_STATUS_MAX(L, STAT_WEAK, 2)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/phenomena.dm b/mods/gamemodes/deity/mobs/phenomena/phenomena.dm
deleted file mode 100644
index 169eb499a3f..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/phenomena.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/datum/phenomena
- var/name = "Phenomena"
- var/desc = "This has no desc."
- var/cost = 0
- var/mob/living/deity/linked
- var/flags = 0
- var/cooldown = 10
- var/refresh_time = 0
- var/expected_type
-
-/datum/phenomena/New(var/master)
- linked = master
- ..()
-
-/datum/phenomena/Destroy()
- linked.remove_phenomena(src)
- return ..()
-
-/datum/phenomena/proc/Click(var/atom/target)
- if(can_activate(target))
- linked.adjust_power(-cost)
- refresh_time = world.time + cooldown
- activate(target)
-
-/datum/phenomena/proc/can_activate(var/atom/target)
- if(!linked)
- return 0
- if(refresh_time > world.time)
- to_chat(linked, SPAN_WARNING("\The [src] is still on cooldown for [round((refresh_time - world.time)/10)] more seconds!"))
- return 0
-
- if(!linked.form)
- to_chat(linked, SPAN_WARNING("You must choose your form first!"))
- return 0
-
- if(expected_type && !istype(target,expected_type))
- return 0
-
- if(flags & PHENOMENA_NEAR_STRUCTURE)
- if(!linked.near_structure(target, 1))
- to_chat(linked, SPAN_WARNING("\The [target] needs to be near a holy structure for your powers to work!"))
- return 0
-
- if(isliving(target))
- var/mob/living/L = target
- if(!L.mind || !L.client)
- if(!(flags & PHENOMENA_MUNDANE))
- to_chat(linked, SPAN_WARNING("\The [L]'s mind is too mundane for you to influence."))
- return 0
- else
- if(linked.is_follower(target, silent = 1))
- if(!(flags & PHENOMENA_FOLLOWER))
- to_chat(linked, SPAN_WARNING("You can't use [name] on the flock!"))
- return 0
- else if(!(flags & PHENOMENA_NONFOLLOWER))
- to_chat(linked, SPAN_WARNING("You can't use [name] on non-believers."))
- return 0
-
- if(cost > linked.power)
- to_chat(linked, SPAN_WARNING("You need more power to use [name] (Need [cost] power, have [linked.power])!"))
- return 0
-
- return 1
-
-/datum/phenomena/proc/activate(var/target)
- to_chat(linked, SPAN_NOTICE("You use the phenomena [name] on \the [target]"))
- log_and_message_admins("uses the phenomena [name] on \the [target]", linked, get_turf(target))
- return
-
-/datum/phenomena/proc/get_desc()
- . = desc
- if(cooldown)
- . = " Cooldown: [cooldown/10] seconds. [.]"
- if(cost)
- . = " Cost: [cost] power. [.]"
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/starlight.dm b/mods/gamemodes/deity/mobs/phenomena/starlight.dm
deleted file mode 100644
index 72a6f0dbf07..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/starlight.dm
+++ /dev/null
@@ -1,232 +0,0 @@
-/datum/phenomena/herald
- name = "Bestow Heraldry"
- desc = "Turn one of your followers into a herald of your coming."
- cost = 100
- cooldown = 60 SECONDS
- flags = PHENOMENA_FOLLOWER
- expected_type = /mob/living/human
- var/static/list/possible_forms = list(
- "Champion" = list("description" = "A protector of the faith. Fully protected by knightly armor, a Champion can shoot fire from their hands.",
- "armor" = /obj/item/clothing/suit/armor/sunsuit,
- "helm" = /obj/item/clothing/head/helmet/sunhelm,
- "extension" = /datum/extension/deity_be_near/champion,
- "spells" = list(/spell/hand/duration/sunwrath)
- ),
- "Oracle" = list("description" = "A preacher of the faith, the Oracle gives off heavenly light that they can use to heal followers and stun enemies.",
- "armor" = /obj/item/clothing/suit/armor/sunrobe,
- "extension" = /datum/extension/deity_be_near/oracle,
- "spells" = list(/spell/targeted/glimpse_of_eternity)
- ),
- "Traitor" = list("description" = "Believers that reject the sun god's blessings, instead reveling in the shadows. Can turn invisible when its dark, and can move unprotected in space.",
- "armor" = /obj/item/clothing/suit/space/shadowsuit,
- "helm" = /obj/item/clothing/head/helmet/space/shadowhood,
- "extension" = /datum/extension/deity_be_near/traitor,
- "spells" = list(/spell/veil_of_shadows)
- )
- )
-
-/datum/phenomena/herald/can_activate(var/a)
- if(!..())
- return FALSE
- return valid_for_herald(a)
-
-/datum/phenomena/herald/proc/valid_for_herald(var/a)
- var/mob/living/human/H = a
- if(!istype(H))
- return FALSE
- var/obj/item/I = H.get_equipped_item(slot_wear_suit_str)
- if(I)
- var/datum/extension/deity_be_near/dbn = get_extension(I, /datum/extension/deity_be_near)
- if(dbn)
- return FALSE
- return TRUE
-
-/datum/phenomena/herald/proc/equip_slot(var/mob/living/L, var/slot_id, var/new_item)
- var/equipped = L.get_equipped_slot_for_item(slot_id)
- if(equipped)
- L.try_unequip(equipped, get_turf(L))
- L.equip_to_slot_if_possible(new_item, slot_id)
-
-/datum/phenomena/herald/Topic(var/href, var/list/href_list)
- if(..())
- return 1
- if(usr != linked)
- return 1
-
- if(href_list["herald"])
- var/list/form = possible_forms[href_list["herald"]]
- var/mob/living/L = locate(href_list["target"])
- var/turf/T = get_turf(L)
- if(!L || !valid_for_herald(L) || !form)
- return 1
- var/type = form["armor"]
- var/obj/item/I = new type(T)
- var/datum/extension/deity_be_near/extension = set_extension(I, form["extension"], linked)
- L.equip_to_slot_or_store_or_drop(I, slot_wear_suit_str)
- if(form["helm"])
- var/h_type = form["helm"]
- var/obj/item/helm = new h_type(T)
- L.equip_to_slot_or_store_or_drop(helm, slot_head_str)
- extension.expected_helmet = helm.type //We only do by type because A. its easier to manage and B the chances of it being non-unique in a normal game is very small
- if(form["weapon"])
- var/w_type = form["weapon"]
- L.put_in_hands_or_store_or_drop(new w_type(T))
- if(form["spells"])
- for(var/s in form["spells"])
- var/spell/boon = new s
- boon.set_connected_god(linked)
- L.add_spell(boon)
- to_chat(L, " You have been chosen by your master to lead your fellow followers into the next age of rebirth. You have been granted powerful armor and a powerful spell. Don't lose them, as they are your key to your divinity and leadership. You also have particular sway over your deity's structures.")
- to_chat(linked, SPAN_NOTICE("\The [L] is now your herald!"))
- linked.remove_phenomena(name)
- show_browser(linked, null, "window=herald")
-
-/datum/phenomena/herald/activate(var/mob/living/human/H)
- var/list/html = list()
- html += " Heralds"
- html += " Pick the type of herald you want."
- html += " Name | Description | "
- for(var/type in possible_forms)
- var/list/form = possible_forms[type]
- html += "[type] | [form["description"]] | "
- html += "
"
- show_browser(linked, jointext(html,null), "window=herald")
-
-/datum/phenomena/create_gateway
- name = "Create Gateway"
- desc = "Creates a gateway from this world to the next. Gateways syphon absurd amounts of power but can be sacrificed to summon powerful minions."
- cost = 200
- flags = PHENOMENA_NEAR_STRUCTURE
- expected_type = /atom
-
-/datum/phenomena/create_gateway/can_activate(var/atom/a)
- if(!..())
- return 0
- if(istype(a, /obj/structure/deity/gateway))
- var/obj/structure/deity/gateway/G = a
- if(G.linked_god == linked)
- return 1
- var/turf/T = get_turf(a)
- if(!T || T.density)
- return 0
- for(var/i in T)
- var/atom/at = i
- if(at.density)
- return 0
- return 1
-
-/datum/phenomena/create_gateway/activate(var/atom/a)
- ..()
- if(istype(a, /obj/structure/deity/gateway))
- qdel(a)
- else
- new /obj/structure/deity/gateway(get_turf(a), linked)
-
-/datum/phenomena/flickering_whisper
- name = "Flickering Whisper"
- desc = "Whisper to a non-believer, allowing you to intrude on their thoughts and see what they see."
- flags = PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
-
-/datum/phenomena/flickering_whisper/activate(var/mob/living/L)
- var/atom/whisper_from
- for(var/obj/structure/deity/radiant_statue/rs in view(3, L))
- whisper_from = rs
- break
- var/message = sanitize(input(linked, "What is your message?", null) as null|text)
- if(!linked || !message || QDELETED(src))
- return
- to_chat(L, SPAN_OCCULT("[whisper_from ? "The [whisper_from] speaks to you" : "You hear a whisper say"] \"[message]\""))
-
- linked.eyenet.add_source(L)
- events_repository.register(/decl/observ/destroyed, L, src, PROC_REF(deactivate_look))
- addtimer(CALLBACK(src, PROC_REF(deactivate_look), L), 30 SECONDS)
-
-/datum/phenomena/flickering_whisper/proc/deactivate_look(var/mob/viewer)
- if(!linked.is_follower(viewer)) //Don't remove if they are follower
- linked.eyenet.remove_source(viewer)
- events_repository.unregister(/decl/observ/destroyed, viewer, src)
-
-/datum/phenomena/burning_glare
- name = "Burning Glare"
- desc = "Burn a victim. If they are burnt enough, you'll set them ablaze."
- cost = 100
- flags = PHENOMENA_NONFOLLOWER|PHENOMENA_NEAR_STRUCTURE
- cooldown = 30 SECONDS
- expected_type = /mob/living
-
-/datum/phenomena/burning_glare/activate(var/mob/living/L)
- ..()
- to_chat(L, SPAN_DANGER("You feel yourself burn!"))
- L.take_damage(10, BURN)
- if(L.get_damage(BURN) > 60)
- L.fire_stacks += 50
- L.IgniteMob()
-
-/datum/phenomena/divine_right
- name = "Divine Right"
- desc = "Trigger your rebirth into the body of someone wearing a herald's uniform. This takes time, requires 3 open gateways, and if the body is destroyed during the ritual... so are you. But once complete, you become an unstoppable demigod of unnatural power."
- cost = 300
- cooldown = 180 SECONDS
- flags = PHENOMENA_FOLLOWER|PHENOMENA_NEAR_STRUCTURE
- expected_type = /mob/living
-
-/datum/phenomena/divine_right/can_activate(var/mob/living/L)
- if(!..())
- return FALSE
- var/active_gateways = 0
- for(var/obj/structure/deity/gateway/G in linked.structures)
- active_gateways += 1
-
- if(active_gateways < 3)
- to_chat(linked, SPAN_WARNING("You do not have enough gateways activated."))
- return FALSE
-
- var/obj/O = L.get_equipped_item(slot_wear_suit_str)
- if(O && has_extension(O, /datum/extension/deity_be_near))
- var/datum/extension/deity_be_near/dbn = get_extension(O, /datum/extension/deity_be_near)
- if(dbn.wearing_full())
- return TRUE
- to_chat(linked, SPAN_WARNING("\The [L] is not wearing a herald's uniform."))
- return FALSE
-
-/datum/phenomena/divine_right/activate(var/mob/living/L)
- ..()
- to_chat(L, SPAN_OCCULT("Your soul is ripped from your body as your master prepares to possess it."))
- to_chat(linked, SPAN_OCCULT("You prepare the body for possession. Keep it safe. If it is totally destroyed, you will die."))
- L.ghostize()
- SET_STATUS_MAX(L, STAT_WEAK, 1)
- new /obj/aura/starborn(L)
- L.status_flags |= GODMODE
- events_repository.register(/decl/observ/destroyed, L,src,PROC_REF(fail_ritual))
- addtimer(CALLBACK(src, PROC_REF(succeed_ritual), L), 600 SECONDS) //6 minutes
- for(var/mob/living/player in global.player_list)
- sound_to(player, 'sound/effects/cascade.ogg')
- if(player?.mind?.assigned_job?.is_holy)
- to_chat(player, SPAN_OCCULT("Something bad is coming.... you know you don't have much time. Find and destroy the vessel, before its too late."))
- else if(player != linked && !linked.is_follower(player, silent = 1))
- to_chat(player, SPAN_WARNING("The world swims around you for just a moment... something is wrong. Very wrong."))
- else
- to_chat(player, SPAN_NOTICE("Your Master is being reborn into the body of \the [L]. Protect it at all costs."))
-
-/datum/phenomena/divine_right/proc/fail_ritual(var/mob/living/L)
- qdel(linked)
-
-/datum/phenomena/divine_right/proc/succeed_ritual(var/mob/living/L)
- to_chat(linked, SPAN_OCCULT("You have been reborn! Your power is limited here, focused on your body, but in return you are both eternal and physical."))
- for(var/mob/living/player in global.player_list)
- sound_to(player, 'sound/effects/cascade.ogg')
- to_chat(player, SPAN_OCCULT("\The [linked] has been born into flesh. Kneel to its authority or else."))
- linked.mind.transfer_to(L)
- L.SetName("[linked] Incarnate")
- L.real_name = "[linked] Incarnate"
-
-/datum/phenomena/movable_object/wisp
- name = "Wisp"
- desc = "Creates or moves a small ball of light for your followers to use."
- cost = 30
- object_type = /obj/item/flashlight/slime
-
-/datum/phenomena/movable_object/wisp/add_object()
- ..()
- object_to_move.SetName("wisp")
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/phenomena/transmutation.dm b/mods/gamemodes/deity/mobs/phenomena/transmutation.dm
deleted file mode 100644
index e86c92ec4d4..00000000000
--- a/mods/gamemodes/deity/mobs/phenomena/transmutation.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/datum/phenomena/warp
- name = "Warp Body"
- desc = "Corrupt a mortal being, causing their DNA to break and their body to fail on them."
- cost = 90
- cooldown = 300
- flags = PHENOMENA_NEAR_STRUCTURE|PHENOMENA_MUNDANE|PHENOMENA_FOLLOWER|PHENOMENA_NONFOLLOWER
- expected_type = /mob/living
-
-/datum/phenomena/warp/activate(var/mob/living/L)
- ..()
- L.take_damage(20, CLONE)
- SET_STATUS_MAX(L, STAT_WEAK, 2)
- to_chat(L, SPAN_DANGER("You feel your body warp and change underneath you!"))
-
-/datum/phenomena/rock_form
- name = "Rock Form"
- desc = "Convert your mortal followers into immortal stone beings."
- cost = 300
- flags = PHENOMENA_NEAR_STRUCTURE|PHENOMENA_FOLLOWER
- expected_type = /mob/living/human
-
-/datum/phenomena/rock_form/activate(var/mob/living/human/H)
- ..()
- to_chat(H, SPAN_DANGER("You feel your body harden as it rapidly is transformed into living crystal!"))
- H.change_species(SPECIES_GOLEM)
- SET_STATUS_MAX(H, STAT_WEAK, 5)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/mobs/say.dm b/mods/gamemodes/deity/mobs/say.dm
deleted file mode 100644
index 1dab1a38aa3..00000000000
--- a/mods/gamemodes/deity/mobs/say.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/mob/living/deity/say(var/message, var/decl/language/speaking = null, var/verb="says")
- if(!..())
- return 0
- if(pylon)
- pylon.audible_message(" \The [pylon] reverberates, \"[message]\"")
- else
- for(var/m in minions)
- var/datum/mind/mind = m
- to_chat(mind.current, " [message]")
\ No newline at end of file
diff --git a/mods/gamemodes/deity/overrides.dm b/mods/gamemodes/deity/overrides.dm
deleted file mode 100644
index c052abdf9a2..00000000000
--- a/mods/gamemodes/deity/overrides.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/obj/item/sword/cultblade/can_use_safely(mob/living/user)
- var/decl/special_role/godcult = GET_DECL(/decl/special_role/godcultist)
- return ..() || (user.mind in godcult.current_antagonists)
-
-/datum/reagents/Topic(href, href_list)
- . = ..()
- if(!. && href_list["deconvert"])
- var/list/data = REAGENT_DATA(src, /decl/material/liquid/water)
- if(LAZYACCESS(data, "holy"))
- var/mob/living/target = locate(href_list["deconvert"])
- if(istype(target) && !QDELETED(target) && target.mind)
- var/decl/special_role/godcult = GET_DECL(/decl/special_role/godcultist)
- godcult.remove_antagonist(target.mind, TRUE)
-
-/decl/material/liquid/water/affect_holy(mob/living/M, removed, datum/reagents/holder)
- . = ..()
- if(.)
- return .
- var/decl/special_role/godcult = GET_DECL(/decl/special_role/godcultist)
- if(M.mind && godcult.is_antagonist(M.mind))
- if(REAGENT_VOLUME(holder, type) > 5)
- M.take_damage(5, PAIN, do_update_health = FALSE)
- M.take_damage(1, BRUTE)
- if(prob(10)) //Only annoy them a /bit/
- to_chat(M, SPAN_DANGER("You feel your insides curdle and burn! \[ Give Into Purity\]"))
- return TRUE
- return FALSE
\ No newline at end of file
diff --git a/mods/gamemodes/deity/screen/intent.dm b/mods/gamemodes/deity/screen/intent.dm
deleted file mode 100644
index 80b3a423170..00000000000
--- a/mods/gamemodes/deity/screen/intent.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-/obj/screen/intent/deity
- var/list/desc_screens = list()
- screen_loc = "RIGHT-5:122,BOTTOM:8"
-
-/obj/screen/intent/deity/on_update_icon()
- . = ..()
- cut_overlays()
- add_overlay(image('icons/mob/screen/phenomena.dmi', icon_state = "hud", pixel_x = -138, pixel_y = -1))
- compile_overlays()
-
-/obj/screen/intent/deity/proc/sync_to_mob(var/mob)
- var/mob/living/deity/D = mob
- for(var/i in 1 to D.control_types.len)
- var/obj/screen/deity_marker/S = new(null, D)
- desc_screens[D.control_types[i]] = S
- S.screen_loc = screen_loc
- //This sets it up right. Trust me.
- S.maptext_y = 33/2*i - i*i/2 - 10
- D.client.screen += S
-
- update_text()
-
-/obj/screen/intent/deity/proc/update_text()
- if(!isdeity(usr))
- return
- var/mob/living/deity/D = usr
- for(var/i in D.control_types)
- var/obj/screen/deity_marker/S = desc_screens[i]
- var/datum/phenomena/P = D.intent_phenomenas[intent][i]
- if(P)
- S.maptext = " [P.name]"
- else
- S.maptext = null
-
-/obj/screen/intent/deity/handle_click(mob/user, params)
- ..()
- update_text()
-
-/obj/screen/deity_marker
- name = "" //Don't want them to be able to actually right click it.
- mouse_opacity = MOUSE_OPACITY_UNCLICKABLE
- icon_state = "blank"
- maptext_width = 128
- maptext_x = -125
\ No newline at end of file
diff --git a/mods/gamemodes/deity/spells/boon.dm b/mods/gamemodes/deity/spells/boon.dm
deleted file mode 100644
index 269a0b4bc4c..00000000000
--- a/mods/gamemodes/deity/spells/boon.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/spell
- var/mob/living/deity/connected_god //Do we have this spell based off a boon from a god?
-
-/spell/proc/set_connected_god(var/mob/living/deity/god)
- connected_god = god
-
-// todo: godform check_charge to parallel take_charge. currently a boon always succeeds
-/spell/take_charge(mob/user, skipcharge)
- if(connected_god)
- return connected_god.take_charge(user, max(1, charge_max/10))
- return ..()
\ No newline at end of file
diff --git a/mods/gamemodes/deity/spells/construction.dm b/mods/gamemodes/deity/spells/construction.dm
deleted file mode 100644
index 0005154ad6e..00000000000
--- a/mods/gamemodes/deity/spells/construction.dm
+++ /dev/null
@@ -1,55 +0,0 @@
-#define CONSTRUCT_SPELL_COST 1
-#define CONSTRUCT_SPELL_TYPE 2
-
-/spell/construction
- name = "Basic Construction"
- desc = "This ability will let you summon a structure of your choosing."
-
- cast_delay = 10
- charge_max = 100
- spell_flags = Z2NOCAST
- invocation = "none"
- invocation_type = SpI_NONE
-
- hud_state = "const_wall"
- cast_sound = 'sound/effects/meteorimpact.ogg'
-
-/spell/construction/choose_targets()
- var/list/possible_targets = list()
- if(connected_god && connected_god.form)
- for(var/type in connected_god.form.buildables)
- var/cost = 10
- if(ispath(type, /obj/structure/deity))
- var/obj/structure/deity/D = type
- cost = initial(D.build_cost)
- possible_targets["[connected_god.get_type_name(type)] - [cost]"] = list(cost, type)
- var/choice = input("Construct to build.", "Construction") as null|anything in possible_targets
- if(!choice)
- return
- if(locate(/obj/structure/deity) in get_turf(holder))
- return
-
- return possible_targets[choice]
- else
- return
-
-/spell/construction/cast_check(var/skipcharge, var/mob/user, var/list/targets)
- if(!..())
- return 0
- var/turf/T = get_turf(user)
- if(skipcharge && !valid_deity_structure_spot(targets[CONSTRUCT_SPELL_TYPE], T, connected_god, user))
- return 0
- else
- for(var/obj/O in T)
- if(O.density)
- to_chat(user, SPAN_WARNING("Something here is blocking your construction!"))
- return 0
- return 1
-
-/spell/construction/cast(var/target, mob/user)
- charge_max = target[CONSTRUCT_SPELL_COST]
- target = target[CONSTRUCT_SPELL_TYPE]
- var/turf/T = get_turf(user)
- new target(T, connected_god)
-#undef CONSTRUCT_SPELL_COST
-#undef CONSTRUCT_SPELL_TYPE
\ No newline at end of file
diff --git a/mods/gamemodes/deity/spells/open_gateway.dm b/mods/gamemodes/deity/spells/open_gateway.dm
deleted file mode 100644
index db83a05c891..00000000000
--- a/mods/gamemodes/deity/spells/open_gateway.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/spell/open_gateway
- name = "Open Gateway"
- desc = "Open a gateway for your master. Don't do it for too long, or you will die."
-
- charge_max = 600
- spell_flags = Z2NOCAST
- invocation = "none"
- invocation_type = SpI_NONE
-
- number_of_channels = 0
- time_between_channels = 200
- hud_state = "const_wall"
- cast_sound = 'sound/effects/meteorimpact.ogg'
-
-/spell/open_gateway/choose_targets()
- var/mob/living/spellcaster = holder
- var/turf/source_turf = get_turf(spellcaster)
- holder.visible_message(SPAN_NOTICE("A gateway opens up underneath \the [spellcaster]!"))
- var/deity
- var/decl/special_role/godcultist/godcult = GET_DECL(/decl/special_role/godcultist)
- if(spellcaster.mind && (spellcaster.mind in godcult.current_antagonists))
- deity = godcult.get_deity(spellcaster.mind)
- return list(new /obj/structure/deity/gateway(source_turf, deity))
-
-/spell/open_gateway/cast(var/list/targets, var/mob/holder, var/channel_count)
- if(prob((channel_count / 5) * 100))
- to_chat(holder, SPAN_DANGER("If you hold the portal open for much longer you'll be ripped apart!"))
- if(channel_count == 6)
- to_chat(holder, SPAN_DANGER("The gateway consumes you... leaving nothing but dust."))
- holder.dust()
-
-
-/spell/open_gateway/after_spell(var/list/targets)
- QDEL_NULL_LIST(targets)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/spells/vision.dm b/mods/gamemodes/deity/spells/vision.dm
deleted file mode 100644
index dabe6cf4fca..00000000000
--- a/mods/gamemodes/deity/spells/vision.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/spell/camera_connection/god_vision
- name = "All Seeing Eye"
- desc = "See what your master sees."
-
- charge_max = 10
- spell_flags = Z2NOCAST
- invocation = "none"
- invocation_type = SpI_NONE
-
- extension_type = /datum/extension/eye/freelook
-
- hud_state = "gen_mind"
-
-/spell/camera_connection/god_vision/set_connected_god(var/mob/living/deity/god)
- ..()
-
- var/datum/extension/eye/freelook/fl = get_extension(src, /datum/extension/eye)
- if(!fl)
- return
- fl.set_visualnet(god.eyenet)
-
diff --git a/mods/gamemodes/deity/structures/altar.dm b/mods/gamemodes/deity/structures/altar.dm
deleted file mode 100644
index 888e4c935a9..00000000000
--- a/mods/gamemodes/deity/structures/altar.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-/obj/structure/deity/altar
- name = "altar"
- desc = "A structure made for the express purpose of religion."
- current_health = 50
- power_adjustment = 5
- deity_flags = DEITY_STRUCTURE_ALONE
- build_cost = 1000
- var/mob/living/target
- var/cycles_before_converted = 5
- var/next_cycle = 0
-
-/obj/structure/deity/altar/Destroy()
- if(target)
- remove_target()
- if(linked_god)
- to_chat(src, SPAN_DANGER("You've lost an altar!"))
- return ..()
-
-/obj/structure/deity/altar/grab_attack(obj/item/grab/grab, mob/user)
- var/mob/living/victim = grab.get_affecting_mob()
- if(grab.force_danger() && istype(victim))
- victim.dropInto(loc)
- SET_STATUS_MAX(victim, STAT_WEAK, 1)
- user.visible_message(SPAN_WARNING("\The [user] throws \the [victim] onto \the [src]!"))
- qdel(grab)
- return TRUE
- return ..()
-
-/obj/structure/deity/altar/Process()
- if(!target || world.time < next_cycle)
- return
- if(!linked_god || target.stat)
- to_chat(linked_god, SPAN_WARNING("\The [target] has lost consciousness, breaking \the [src]'s hold on their mind!"))
- remove_target()
- return
-
- next_cycle = world.time + 10 SECONDS
- cycles_before_converted--
- if(!cycles_before_converted)
- src.visible_message("For one thundering moment, \the [target] cries out in pain before going limp and broken.")
- var/decl/special_role/godcultist/godcult = GET_DECL(/decl/special_role/godcultist)
- godcult.add_antagonist_mind(target.mind,1, "Servant of [linked_god]","Your loyalty may be faulty, but you know that it now has control over you...", specific_god=linked_god)
- remove_target()
- return
-
- switch(cycles_before_converted)
- if(4)
- text = "You can't think straight..."
- if(3)
- text = "You feel like your thought are being overriden..."
- if(2)
- text = "You can't... concentrate... must... resist!"
- if(1)
- text = "Can't... resist... anymore."
- to_chat(linked_god, SPAN_WARNING("\The [target] is getting close to conversion!"))
- to_chat(target, " [text]. Resist Conversion")
-
-
-//Used for force conversion.
-/obj/structure/deity/altar/proc/set_target(var/mob/living/L)
- if(target || !linked_god)
- return
- cycles_before_converted = initial(cycles_before_converted)
- START_PROCESSING(SSobj, src)
- target = L
- update_icon()
- events_repository.register(/decl/observ/destroyed, L,src, TYPE_PROC_REF(/obj/structure/deity/altar, remove_target))
- events_repository.register(/decl/observ/moved, L, src, TYPE_PROC_REF(/obj/structure/deity/altar, remove_target))
- events_repository.register(/decl/observ/death, L, src, TYPE_PROC_REF(/obj/structure/deity/altar, remove_target))
-
-/obj/structure/deity/altar/proc/remove_target()
- STOP_PROCESSING(SSobj, src)
- events_repository.unregister(/decl/observ/destroyed, target, src)
- events_repository.unregister(/decl/observ/moved, target, src)
- events_repository.unregister(/decl/observ/death, target, src)
- target = null
- update_icon()
-
-/obj/structure/deity/altar/OnTopic(var/user, var/list/href_list)
- if(href_list["resist"])
- var/mob/living/M = locate(href_list["resist"])
- if(!istype(M) || target != M || M.stat || M.is_on_special_ability_cooldown())
- return TOPIC_HANDLED
-
- M.set_special_ability_cooldown(10 SECONDS)
- M.visible_message(SPAN_WARNING("\The [M] writhes on top of \the [src]!"), SPAN_NOTICE("You struggle against the intruding thoughts, keeping them at bay!"))
- to_chat(linked_god, SPAN_WARNING("\The [M] slows its conversion through willpower!"))
- cycles_before_converted++
- if(prob(50))
- to_chat(M, SPAN_DANGER("The mental strain is too much for you! You feel your body weakening!"))
- M.take_damage(15, TOX, do_update_health = FALSE)
- M.take_damage(30, PAIN)
- return TOPIC_REFRESH
-
-/obj/structure/deity/altar/on_update_icon()
- ..()
- if(target)
- add_overlay(image('icons/effects/effects.dmi', icon_state = "summoning"))
-
-/obj/structure/deity/altar/nullrod_act(mob/user, obj/item/nullrod/rod)
- if(!linked_god.silenced) //Don't want them to infinity spam it.
- linked_god.silence(10)
- new /obj/effect/temporary(get_turf(src),'icons/effects/effects.dmi',"purple_electricity_constant", 10)
- visible_message(SPAN_NOTICE("\The [src] groans in protest as reality settles around \the [rod]."))
- return TRUE
- return FALSE
\ No newline at end of file
diff --git a/mods/gamemodes/deity/structures/blood_forge.dm b/mods/gamemodes/deity/structures/blood_forge.dm
deleted file mode 100644
index 3b23da40630..00000000000
--- a/mods/gamemodes/deity/structures/blood_forge.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/obj/structure/deity/blood_forge
- name = "unholy forge"
- desc = "This forge gives off no heat, no light, its flames look almost unnatural."
- icon_state = "forge"
- build_cost = 1000
- current_health = 50
- var/busy = 0
- var/recipe_feat_list = "Blood Crafting"
- var/text_modifications = list(
- "Cost" = "Blood",
- "Dip" = "fire. Pain envelops you as blood seeps out of your hands and you begin to shape it into something more useful",
- "Shape" = "You shape the fire as more and more blood comes out.",
- "Out" = "flames"
- )
-
- power_adjustment = 2
-
-/obj/structure/deity/blood_forge/attack_hand(var/mob/user)
- if(!linked_god || !linked_god.is_follower(user, silent = 1) || !ishuman(user))
- return ..()
- var/list/recipes = linked_god.feats[recipe_feat_list]
- if(!recipes)
- return TRUE
- var/dat = " RecipesItem - [text_modifications["Cost"]] Cost"
- for(var/type in recipes)
- var/atom/a = type
- var/cost = recipes[type]
- dat += " [initial(a.name)] - [cost] [initial(a.desc)]"
- show_browser(user, dat, "window=forge")
- return TRUE
-
-/obj/structure/deity/blood_forge/CanUseTopic(var/user)
- if(!linked_god || !linked_god.is_follower(user, silent = 1) || !ishuman(user))
- return STATUS_CLOSE
- return ..()
-
-/obj/structure/deity/blood_forge/OnTopic(var/user, var/list/href_list)
- if(href_list["make_recipe"])
- var/list/recipes = linked_god.feats[recipe_feat_list]
- var/type = locate(href_list["make_recipe"]) in recipes
- if(type)
- var/cost = recipes[type]
- craft_item(type, cost, user)
- return TOPIC_REFRESH
-
-/obj/structure/deity/blood_forge/proc/craft_item(var/path, var/blood_cost, var/mob/user)
- if(busy)
- to_chat(user, SPAN_WARNING("Someone is already using \the [src]!"))
- return
-
- busy = 1
- to_chat(user, SPAN_NOTICE("You dip your hands into \the [src]'s [text_modifications["Dip"]]"))
- for(var/count = 0, count < blood_cost/10, count++)
- if(!do_after(user, 50,src))
- busy = 0
- return
- user.visible_message("\The [user] swirls their hands in \the [src].", text_modifications["Shape"])
- if(linked_god)
- linked_god.take_charge(user, 10)
- var/obj/item/I = new path(get_turf(src))
- user.visible_message("\The [user] pull out \the [I] from the [text_modifications["Out"]].", "You pull out the completed [I] from the [text_modifications["Out"]].")
- busy = 0
-
-/obj/structure/deity/blood_forge/proc/take_charge(var/mob/living/user, var/charge)
- if(linked_god)
- linked_god.take_charge(user, charge)
\ No newline at end of file
diff --git a/mods/gamemodes/deity/structures/pylon.dm b/mods/gamemodes/deity/structures/pylon.dm
deleted file mode 100644
index 4b977e2726d..00000000000
--- a/mods/gamemodes/deity/structures/pylon.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/obj/structure/deity/pylon
- name = "pylon"
- desc = "A crystal platform used to communicate with the deity."
- build_cost = 400
- icon = 'icons/obj/structures/pylon.dmi'
- icon_state = "pylon"
- var/list/intuned = list()
-
-/obj/structure/deity/pylon/attack_deity(var/mob/living/deity/D)
- if(D.pylon == src)
- D.leave_pylon()
- else
- D.possess_pylon(src)
-
-/obj/structure/deity/pylon/Destroy()
- if(linked_god && linked_god.pylon == src)
- linked_god.leave_pylon()
- return ..()
-
-/obj/structure/deity/pylon/attack_hand(var/mob/L)
- SHOULD_CALL_PARENT(FALSE)
- if(!linked_god)
- return FALSE
- if(L in intuned)
- remove_intuned(L)
- else
- add_intuned(L)
- return TRUE
-
-/obj/structure/deity/pylon/proc/add_intuned(var/mob/living/L)
- if(L in intuned)
- return
- to_chat(L, SPAN_NOTICE("You place your hands on \the [src], feeling yourself intune to its vibrations."))
- intuned += L
- events_repository.register(/decl/observ/destroyed, L,src, TYPE_PROC_REF(/obj/structure/deity/pylon, remove_intuned))
-
-/obj/structure/deity/pylon/proc/remove_intuned(var/mob/living/L)
- if(!(L in intuned))
- return
- to_chat(L, SPAN_WARNING("You no longer feel intuned to \the [src]."))
- intuned -= L
- events_repository.unregister(/decl/observ/destroyed, L, src)
-
-/obj/structure/deity/pylon/OnTopic(var/mob/living/human/user, var/href_list)
- if(href_list["vision_jump"])
- if(istype(user))
- to_chat(user,SPAN_WARNING("You feel your body lurch uncomfortably as your consciousness jumps to \the [src]"))
- if(prob(5))
- user.vomit()
- else
- to_chat(user, SPAN_NOTICE("You jump to \the [src]"))
- if(user.eyeobj)
- user.eyeobj.setLoc(locate(href_list["vision_jump"]))
- else
- CRASH("[user] does not have an eyeobj")
- . = TOPIC_REFRESH
- . = ..()
-
-/obj/structure/deity/pylon/hear_talk(mob/M, text, verb, decl/language/speaking)
- if(!linked_god)
- return
- if(linked_god.pylon != src)
- if(!(M in intuned))
- return
- for(var/obj/structure/deity/pylon/P in linked_god.structures)
- if(P == src || linked_god.pylon == P)
- continue
- P.audible_message(" \The [P] resonates, \"[text]\"")
- to_chat(linked_god, "[html_icon(src)] [M] (P) [verb], [linked_god.pylon == src ? "" : ""]\"[text]\"[linked_god.pylon == src ? "" : ""]")
- if(linked_god.minions.len)
- for(var/minion in linked_god.minions)
- var/datum/mind/mind = minion
- if(mind.current && mind.current.eyeobj) //If it is currently having a vision of some sort
- to_chat(mind.current,"[html_icon(src)] [M] (J) [verb], \"[text]\"")
diff --git a/mods/gamemodes/deity/structures/structures.dm b/mods/gamemodes/deity/structures/structures.dm
deleted file mode 100644
index c3d9ea65b30..00000000000
--- a/mods/gamemodes/deity/structures/structures.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-/proc/valid_deity_structure_spot(var/type, var/turf/target, var/mob/living/deity/deity, var/mob/living/user)
- var/obj/structure/deity/D = type
- var/flags = initial(D.deity_flags)
-
- if(flags & DEITY_STRUCTURE_NEAR_IMPORTANT && !deity.near_structure(target))
- if(user)
- to_chat(user, SPAN_WARNING("You need to be near \a [deity.get_type_name(/obj/structure/deity/altar)] to build this!"))
- return 0
-
- if(flags & DEITY_STRUCTURE_ALONE)
- for(var/structure in deity.structures)
- if(istype(structure,type) && get_dist(target,structure) <= 3)
- if(user)
- to_chat(user, SPAN_WARNING("You are too close to another [deity.get_type_name(type)]!"))
- return 0
- return 1
-
-/obj/structure/deity
- icon = 'icons/obj/cult.dmi'
- max_health = 10
- density = TRUE
- anchored = TRUE
- icon_state = "tomealtar"
- is_spawnable_type = FALSE // will usually runtime without a linked god
-
- var/mob/living/deity/linked_god
- var/power_adjustment = 1 //How much power we get/lose
- var/build_cost = 0 //How much it costs to build this item.
- var/deity_flags = DEITY_STRUCTURE_NEAR_IMPORTANT
-
-/obj/structure/deity/Initialize(mapload, var/god)
- . = ..(mapload)
- if(god)
- linked_god = god
- linked_god.form.sync_structure(src)
- linked_god.adjust_source(power_adjustment, src)
-
-/obj/structure/deity/Destroy()
- if(linked_god)
- linked_god.adjust_source(-power_adjustment, src)
- linked_god = null
- return ..()
-
-/obj/structure/deity/attackby(obj/item/W, mob/user)
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(src)
- playsound(get_turf(src), 'sound/effects/Glasshit.ogg', 50, 1)
- user.visible_message(
- SPAN_DANGER("[user] hits \the [src] with \the [W]!"),
- SPAN_DANGER("You hit \the [src] with \the [W]!"),
- SPAN_DANGER("You hear something breaking!")
- )
- take_damage(W.get_attack_force(user), W.atom_damage_type)
-
-/obj/structure/deity/physically_destroyed(mob/user)
- SHOULD_CALL_PARENT(FALSE)
- qdel(src)
- . = TRUE
-
-/obj/structure/deity/physically_destroyed(var/skip_qdel)
- visible_message(SPAN_DANGER("\The [src] crumbles!"))
- . = ..()
-
-/obj/structure/deity/bullet_act(var/obj/item/projectile/P)
- take_damage(P.damage, P.atom_damage_type)
-
-/obj/structure/deity/proc/attack_deity(var/mob/living/deity/deity)
- return
\ No newline at end of file
diff --git a/mods/gamemodes/deity/structures/trap.dm b/mods/gamemodes/deity/structures/trap.dm
deleted file mode 100644
index 240050d33b9..00000000000
--- a/mods/gamemodes/deity/structures/trap.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/obj/structure/deity/trap
- density = FALSE
- current_health = 1
- var/triggered = 0
-
-/obj/structure/deity/trap/Initialize()
- . = ..()
- events_repository.register(/decl/observ/entered, get_turf(src),src, TYPE_PROC_REF(/obj/structure/deity/trap, trigger))
-
-/obj/structure/deity/trap/Destroy()
- events_repository.unregister(/decl/observ/entered, get_turf(src),src)
- return ..()
-
-/obj/structure/deity/trap/Move()
- events_repository.unregister(/decl/observ/entered, get_turf(src),src)
- . = ..()
- events_repository.register(/decl/observ/entered, get_turf(src), src, TYPE_PROC_REF(/obj/structure/deity/trap, trigger))
-
-/obj/structure/deity/trap/attackby(obj/item/W, mob/user)
- trigger(user)
- return ..()
-
-/obj/structure/deity/trap/bullet_act()
- return
-
-/obj/structure/deity/trap/proc/trigger(var/atom/entered, var/atom/movable/enterer)
- if(triggered > world.time || !isliving(enterer))
- return
-
- triggered = world.time + 30 SECONDS
\ No newline at end of file
diff --git a/mods/gamemodes/heist/_heist.dme b/mods/gamemodes/heist/_heist.dme
index 57bf5c58b42..de2a67d69d3 100644
--- a/mods/gamemodes/heist/_heist.dme
+++ b/mods/gamemodes/heist/_heist.dme
@@ -1,13 +1,5 @@
#ifndef GAMEMODE_PACK_HEIST
#define GAMEMODE_PACK_HEIST
-
-#ifdef MODPACK_VOX
-#warn Vox modpack loaded before Heist modpack, compatibility features will be missing.
-#endif
-#ifdef GAMEMODE_PACK_MIXED
-#warn Mixed gamemodes modpack loaded before Heist modpack, Heist combination modes will be missing.
-#endif
-
// BEGIN_INCLUDE
#include "_heist.dm"
#include "areas.dm"
diff --git a/mods/gamemodes/heist/heist_base.dmm b/mods/gamemodes/heist/heist_base.dmm
index cd92f5dc909..71eeb7977d4 100644
--- a/mods/gamemodes/heist/heist_base.dmm
+++ b/mods/gamemodes/heist/heist_base.dmm
@@ -160,7 +160,7 @@
/area/map_template/syndicate_mothership/raider_base)
"aK" = (
/obj/structure/bed,
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/structure/sign/painting/monkey_painting{
pixel_x = -28;
pixel_y = 4
@@ -317,7 +317,7 @@
/turf/unsimulated/floor/plating,
/area/map_template/syndicate_mothership/raider_base)
"bf" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/turf/unsimulated/floor/plating,
/area/map_template/syndicate_mothership/raider_base)
"bg" = (
@@ -371,7 +371,7 @@
/turf/unsimulated/floor/freezer,
/area/map_template/syndicate_mothership/raider_base)
"bo" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/effect/floor_decal/carpet{
dir = 8
},
@@ -380,7 +380,7 @@
/turf/unsimulated/floor/carpet,
/area/map_template/syndicate_mothership/raider_base)
"bp" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/random/action_figure,
/obj/random/contraband,
/obj/random/junk,
@@ -421,7 +421,7 @@
/turf/unsimulated/floor/plating,
/area/map_template/syndicate_mothership/raider_base)
"bv" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/portable_atmospherics/canister/air/airlock,
/obj/structure/window/reinforced{
@@ -435,7 +435,7 @@
/turf/unsimulated/floor/plating,
/area/map_template/syndicate_mothership/raider_base)
"bx" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/portable_atmospherics/canister/nitrogen,
/turf/unsimulated/floor/plating,
@@ -505,36 +505,36 @@
/turf/unsimulated/floor/carpet,
/area/map_template/syndicate_mothership/raider_base)
"bJ" = (
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"bK" = (
-/turf/unsimulated/floor/wood/broken,
+/turf/unsimulated/floor/laminate/broken,
/area/map_template/syndicate_mothership/raider_base)
"bL" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/plate/tray{
pixel_y = 5
},
/obj/item/backpack,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"bM" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/box/glasses/rocks,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"bN" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/machinery/chemical_dispenser/bar_soft/full,
-/turf/unsimulated/floor/wood/broken6,
+/turf/unsimulated/floor/laminate/broken6,
/area/map_template/syndicate_mothership/raider_base)
"bO" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/washing_machine,
/turf/unsimulated/floor/plating,
/area/map_template/syndicate_mothership/raider_base)
"bP" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/portables_connector{
dir = 4
},
@@ -558,14 +558,14 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/machinery/atmospherics/portables_connector{
dir = 8
},
/turf/unsimulated/floor/plating,
/area/map_template/syndicate_mothership/raider_base)
"bS" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/visible,
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/unsimulated/floor/plating,
@@ -580,33 +580,33 @@
/area/map_template/syndicate_mothership/raider_base)
"bV" = (
/obj/item/stool/padded,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"bW" = (
/obj/effect/decal/cleanable/generic,
/obj/item/stool/padded,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"bZ" = (
/obj/machinery/acting/changer,
/turf/unsimulated/floor/dark,
/area/map_template/syndicate_mothership/raider_base)
"ca" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/pizzabox/meat,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"cb" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/ashtray,
/obj/item/trash/cigbutt/cigarbutt,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"cc" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/laminate,
/obj/item/chems/glass/rag,
/obj/random/loot,
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"cd" = (
/obj/machinery/vending/cigarette{
@@ -631,11 +631,11 @@
/turf/unsimulated/floor/dark,
/area/map_template/syndicate_mothership/raider_base)
"ch" = (
-/turf/unsimulated/floor/wood/broken1,
+/turf/unsimulated/floor/laminate/broken1,
/area/map_template/syndicate_mothership/raider_base)
"ci" = (
/obj/item/stool/padded,
-/turf/unsimulated/floor/wood/broken1,
+/turf/unsimulated/floor/laminate/broken1,
/area/map_template/syndicate_mothership/raider_base)
"cj" = (
/mob/living/simple_animal/hostile/parrot/pirate,
@@ -664,11 +664,11 @@
icon_state = "plant-25";
name = "Jamie"
},
-/turf/unsimulated/floor/wood,
+/turf/unsimulated/floor/laminate,
/area/map_template/syndicate_mothership/raider_base)
"cn" = (
/obj/structure/reagent_dispensers/beerkeg,
-/turf/unsimulated/floor/wood/broken1,
+/turf/unsimulated/floor/laminate/broken1,
/area/map_template/syndicate_mothership/raider_base)
"co" = (
/obj/machinery/embedded_controller/radio/simple_docking_controller{
@@ -1149,7 +1149,7 @@
"dB" = (
/obj/structure/rack,
/obj/item/gun/launcher/bow/crossbow/powered,
-/obj/item/stack/material/rods/ten,
+/obj/item/stack/material/rods/mapped/steel/ten,
/obj/machinery/light/small{
dir = 8
},
diff --git a/mods/gamemodes/heist/outfit.dm b/mods/gamemodes/heist/outfit.dm
index 5800150a525..fc04cd39238 100644
--- a/mods/gamemodes/heist/outfit.dm
+++ b/mods/gamemodes/heist/outfit.dm
@@ -66,16 +66,16 @@
randomize_clothing()
. = ..()
-/decl/outfit/raider/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
+/decl/outfit/raider/equip_outfit(mob/living/wearer, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
randomize_clothing()
. = ..()
- if(. && H)
- if(!H.get_equipped_item(slot_shoes_str))
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes_str)
+ if(. && wearer)
+ if(!wearer.get_equipped_item(slot_shoes_str))
+ wearer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wearer), slot_shoes_str)
var/new_gun = pick(raider_guns)
var/new_holster = pick(raider_holster) //raiders don't start with any backpacks, so let's be nice and give them a holster if they can use it.
- var/turf/T = get_turf(H)
+ var/turf/T = get_turf(wearer)
var/obj/item/primary = new new_gun(T)
var/obj/item/clothing/webbing/holster/holster = null
@@ -89,38 +89,38 @@
holster_extension.holstered = secondary
secondary.forceMove(holster)
else
- H.equip_to_slot_or_del(secondary, slot_belt_str)
+ wearer.equip_to_slot_or_del(secondary, slot_belt_str)
if(primary.slot_flags & SLOT_HOLSTER)
holster = new new_holster(T)
var/datum/extension/holster/holster_extension = get_extension(holster, /datum/extension/holster)
holster_extension.holstered = primary
primary.forceMove(holster)
- else if(!H.get_equipped_item(slot_belt_str) && (primary.slot_flags & SLOT_LOWER_BODY))
- H.equip_to_slot_or_del(primary, slot_belt_str)
- else if(!H.get_equipped_item(slot_back_str) && (primary.slot_flags & SLOT_BACK))
- H.equip_to_slot_or_del(primary, slot_back_str)
+ else if(!wearer.get_equipped_item(slot_belt_str) && (primary.slot_flags & SLOT_LOWER_BODY))
+ wearer.equip_to_slot_or_del(primary, slot_belt_str)
+ else if(!wearer.get_equipped_item(slot_back_str) && (primary.slot_flags & SLOT_BACK))
+ wearer.equip_to_slot_or_del(primary, slot_back_str)
else
- H.put_in_hands(primary)
+ wearer.put_in_hands(primary)
if(istype(primary, /obj/item/gun/projectile))
var/obj/item/gun/projectile/bullet_thrower = primary
if(bullet_thrower.magazine_type)
- H.equip_to_slot_or_del(new bullet_thrower.magazine_type(H), slot_l_store_str)
+ wearer.equip_to_slot_or_del(new bullet_thrower.magazine_type(wearer), slot_l_store_str)
if(prob(20)) //don't want to give them too much
- H.equip_to_slot_or_del(new bullet_thrower.magazine_type(H), slot_r_store_str)
+ wearer.equip_to_slot_or_del(new bullet_thrower.magazine_type(wearer), slot_r_store_str)
else if(bullet_thrower.ammo_type)
- var/obj/item/box/ammobox = new(get_turf(H.loc))
+ var/obj/item/box/ammobox = new(get_turf(wearer.loc))
for(var/i in 1 to rand(3,5) + rand(0,2))
new bullet_thrower.ammo_type(ammobox)
- H.put_in_hands(ammobox)
+ wearer.put_in_hands(ammobox)
if(holster)
- var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/uniform = wearer.get_equipped_item(slot_w_uniform_str)
if(istype(uniform) && uniform.can_attach_accessory(holster))
- uniform.attackby(holster, H)
+ uniform.attackby(holster, wearer)
else
- H.put_in_hands(holster)
+ wearer.put_in_hands(holster)
/decl/outfit/raider/proc/randomize_clothing()
shoes = pick(raider_shoes)
diff --git a/mods/gamemodes/meteor/gamemode.dm b/mods/gamemodes/meteor/gamemode.dm
index 10212d20aa9..5836f1ad154 100644
--- a/mods/gamemodes/meteor/gamemode.dm
+++ b/mods/gamemodes/meteor/gamemode.dm
@@ -93,8 +93,7 @@
/obj/effect/meteor/irradiated=10,
/obj/effect/meteor/golden=10,
/obj/effect/meteor/silver=10,
- /obj/effect/meteor/flaming=10,
- /obj/effect/meteor/supermatter=1
+ /obj/effect/meteor/flaming=10
)
// As a bonus, more frequent events.
diff --git a/mods/gamemodes/mixed.dm b/mods/gamemodes/mixed.dm
new file mode 100644
index 00000000000..f89baef2aa8
--- /dev/null
+++ b/mods/gamemodes/mixed.dm
@@ -0,0 +1,7 @@
+#ifndef GAMEMODE_PACK_MIXED
+#define GAMEMODE_PACK_MIXED
+#endif
+
+// This modpack doesn't actually have anything here, and instead it uses the compatibility patch system to make load order not matter.
+/decl/modpack/mixed_modes
+ name = "Mixed Gamemodes"
\ No newline at end of file
diff --git a/mods/gamemodes/mixed/_mixed.dm b/mods/gamemodes/mixed/_mixed.dm
deleted file mode 100644
index c1c9167d414..00000000000
--- a/mods/gamemodes/mixed/_mixed.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/decl/modpack/mixed_modes
- name = "Mixed Gamemodes"
\ No newline at end of file
diff --git a/mods/gamemodes/mixed/_mixed.dme b/mods/gamemodes/mixed/_mixed.dme
deleted file mode 100644
index 6db33d07706..00000000000
--- a/mods/gamemodes/mixed/_mixed.dme
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef GAMEMODE_PACK_MIXED
-#define GAMEMODE_PACK_MIXED
-// BEGIN_INCLUDE
-#include "_mixed.dm"
-#if defined(GAMEMODE_PACK_HEIST) // TODO: && defined(GAMEMODE_PACK_MERCENARY)
-#include "crossfire.dm"
-#endif
-#if defined(GAMEMODE_PACK_REVOLUTIONARY)
-#include "siege.dm"
-#endif
-#if defined(GAMEMODE_PACK_REVOLUTIONARY) && defined(GAMEMODE_PACK_CULT)
-#include "uprising.dm"
-#endif
-// END_INCLUDE
-#endif
\ No newline at end of file
diff --git a/mods/gamemodes/ninja/maps/ninja_base.dmm b/mods/gamemodes/ninja/maps/ninja_base.dmm
index fcda23c484b..828d006063e 100644
--- a/mods/gamemodes/ninja/maps/ninja_base.dmm
+++ b/mods/gamemodes/ninja/maps/ninja_base.dmm
@@ -407,22 +407,22 @@
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"bw" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/machinery/chemical_dispenser/bar_soft/full,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"bx" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/box/glasses,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"by" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/box/sinpockets,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"bz" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/machinery/microwave,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
@@ -464,7 +464,7 @@
/turf/unsimulated/floor/freezer,
/area/map_template/ninja_dojo/dojo)
"bF" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/chems/drinks/dry_ramen,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
@@ -494,7 +494,7 @@
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"bL" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/flashlight/lamp,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
@@ -539,7 +539,7 @@
/turf/unsimulated/floor/carpet,
/area/map_template/ninja_dojo/dojo)
"bS" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/food/soylentgreen,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
@@ -560,7 +560,7 @@
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"bW" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/toy/figure/wizard,
/obj/item/radio/intercom/ninja{
dir = 1;
@@ -569,7 +569,7 @@
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
"bX" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/clothing/shoes/sandal,
/obj/item/clothing/mask/balaclava,
/turf/unsimulated/floor/wood,
@@ -585,7 +585,7 @@
/turf/unsimulated/floor/freezer,
/area/map_template/ninja_dojo/dojo)
"ca" = (
-/obj/structure/table/woodentable,
+/obj/structure/table/wood,
/obj/item/flame/candle,
/turf/unsimulated/floor/wood,
/area/map_template/ninja_dojo/dojo)
diff --git a/mods/gamemodes/traitor/overrides.dm b/mods/gamemodes/traitor/overrides.dm
index 122c6cf5daa..0f8142a1635 100644
--- a/mods/gamemodes/traitor/overrides.dm
+++ b/mods/gamemodes/traitor/overrides.dm
@@ -3,18 +3,12 @@
return mind && traitors.is_antagonist(mind)
/mob/living/silicon/robot/show_master(mob/who)
- // TODO: Update to new antagonist system.
- if (mind?.assigned_special_role == /decl/special_role/traitor && mind.original == src && connected_ai)
+ var/decl/special_role/traitor/traitor_role = IMPLIED_DECL
+ if(traitor_role.is_antagonist(mind) && connected_ai)
to_chat(who, " Remember, [connected_ai.name] is technically your master, but your objective comes first.")
return
return ..()
-/mob/living/silicon/robot/lawsync()
- . = ..()
- // TODO: Update to new antagonist system.
- if(mind?.assigned_special_role == /decl/special_role/traitor && mind.original == src)
- to_chat(src, SPAN_BOLD("Remember, your AI does NOT share or know about your law 0."))
-
/mob/living/silicon/robot/handle_regular_hud_updates()
. = ..()
if(!.)
diff --git a/mods/mobs/borers/_borers.dme b/mods/mobs/borers/_borers.dme
index 380c95f4e87..7f230fc9536 100644
--- a/mods/mobs/borers/_borers.dme
+++ b/mods/mobs/borers/_borers.dme
@@ -1,10 +1,5 @@
#ifndef CONTENT_PACK_BORERS
#define CONTENT_PACK_BORERS
-
-#ifdef MODPACK_PSIONICS
-#warn Psionics modpack loaded before Borers modpack, compatibility features will be missing.
-#endif
-
// BEGIN_INCLUDE
#include "borer.dm"
#include "datum\antagonist.dm"
diff --git a/mods/mobs/borers/datum/antagonist.dm b/mods/mobs/borers/datum/antagonist.dm
index c714ef8e1a1..423297f09f8 100644
--- a/mods/mobs/borers/datum/antagonist.dm
+++ b/mods/mobs/borers/datum/antagonist.dm
@@ -7,12 +7,12 @@
welcome_text = "Click a target while on GRAB intent to crawl into their ear and infiltrate their brain. You can only take control temporarily, and at risk of hurting your host, so be clever and careful; your host is encouraged to help you however they can. Talk to your host with Say, and your fellow borers with ,z."
antag_indicator = "hudborer"
antaghud_indicator = "hudborer"
+ antag_hud_icon = 'mods/mobs/borers/icons/hud.dmi'
faction_name = "Borer Host"
faction_descriptor = "Unity"
faction_welcome = "You are now host to a cortical borer. Please listen to what they have to say; they're in your head."
faction = "borer"
- faction_indicator = "hudalien"
hard_cap = 5
hard_cap_round = 8
diff --git a/mods/mobs/borers/datum/symbiote.dm b/mods/mobs/borers/datum/symbiote.dm
index f6954fa2bf3..bf2f17e93c4 100644
--- a/mods/mobs/borers/datum/symbiote.dm
+++ b/mods/mobs/borers/datum/symbiote.dm
@@ -21,7 +21,8 @@ var/global/list/symbiote_starting_points = list()
minimal_player_age = 14
economic_power = 0
defer_roundstart_spawn = TRUE
- hud_icon = "hudblank"
+ hud_icon_state = "hudblank"
+ hud_icon = null
outfit_type = /decl/outfit/job/symbiote_host
create_record = FALSE
var/check_whitelist // = "Symbiote"
diff --git a/mods/mobs/borers/icons/hud.dmi b/mods/mobs/borers/icons/hud.dmi
new file mode 100644
index 00000000000..8e01986fd47
Binary files /dev/null and b/mods/mobs/borers/icons/hud.dmi differ
diff --git a/mods/mobs/borers/mob/borer/borer.dm b/mods/mobs/borers/mob/borer/borer.dm
index 5529384f774..f9dbbe2f6e1 100644
--- a/mods/mobs/borers/mob/borer/borer.dm
+++ b/mods/mobs/borers/mob/borer/borer.dm
@@ -9,8 +9,6 @@
response_disarm = "prods"
response_harm = "stamps on"
base_movement_delay = 2
-
- a_intent = I_HURT
status_flags = CANPUSH
natural_weapon = /obj/item/natural_weapon/bite/weak
pass_flags = PASS_FLAG_TABLE
@@ -20,6 +18,22 @@
bleed_colour = "#816e12"
ai = /datum/mob_controller/borer
+ // Defined here to remove relaymove handlers as being
+ // directly in mob contents breaks relaymove spectacularly.
+ movement_handlers = list(
+ /datum/movement_handler/mob/death,
+ /datum/movement_handler/mob/borer_in_host,
+ /datum/movement_handler/mob/conscious,
+ /datum/movement_handler/mob/eye,
+ /datum/movement_handler/mob/delay,
+ /datum/movement_handler/mob/stop_effect,
+ /datum/movement_handler/mob/physically_capable,
+ /datum/movement_handler/mob/physically_restrained,
+ /datum/movement_handler/mob/space,
+ /datum/movement_handler/mob/multiz,
+ /datum/movement_handler/mob/movement
+ )
+
var/static/list/chemical_types = list(
"anti-trauma" = /decl/material/liquid/brute_meds,
"amphetamines" = /decl/material/liquid/amphetamines,
@@ -42,6 +56,9 @@
var/mob/living/human/host // Human host for the brain worm.
var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
+/datum/movement_handler/mob/borer_in_host/MayMove(mob/mover, is_external)
+ return ismob(mob.loc) ? MOVEMENT_STOP : MOVEMENT_PROCEED
+
/datum/mob_controller/borer
emote_hear = list("chirrups")
do_wander = FALSE
diff --git a/mods/mobs/borers/mob/borer/borer_attacks.dm b/mods/mobs/borers/mob/borer/borer_attacks.dm
index 43358767a9e..6c5919ed2b5 100644
--- a/mods/mobs/borers/mob/borer/borer_attacks.dm
+++ b/mods/mobs/borers/mob/borer/borer_attacks.dm
@@ -1,50 +1,44 @@
/mob/living/simple_animal/borer/UnarmedAttack(atom/A, proximity)
- . = ..()
- if(.)
- return
+ if(host)
+ return TRUE // We cannot click things outside of our host.
- if(!isliving(A) || a_intent != I_GRAB)
- return FALSE
+ if(!isliving(A) || !check_intent(I_FLAG_GRAB) || stat || !proximity)
+ return ..()
- if(host || !can_use_borer_ability(requires_host_value = FALSE, check_last_special = FALSE))
- return FALSE
+ if(!can_use_borer_ability(requires_host_value = FALSE, check_last_special = FALSE))
+ return TRUE
- var/mob/living/M = A
- if(M.has_brain_worms())
+ var/mob/living/victim = A
+ if(victim.has_brain_worms())
to_chat(src, SPAN_WARNING("You cannot take a host who already has a passenger!"))
return TRUE
-
- //TODO generalize borers to enter any mob. Until then, return early.
- if(!ishuman(M))
- to_chat(src, SPAN_WARNING("This creature is not sufficiently intelligent to host you."))
+ var/obj/item/organ/external/limb = GET_EXTERNAL_ORGAN(victim, BP_HEAD)
+ if(!limb)
+ to_chat(src, SPAN_WARNING("\The [victim] does not have anatomy compatible with your lifecycle!"))
return TRUE
- // end TODO
-
- var/mob/living/human/H = M
- var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, BP_HEAD)
- if(!E)
- to_chat(src, SPAN_WARNING("\The [H] does not have a head!"))
+ if(BP_IS_PROSTHETIC(limb))
+ to_chat(src, SPAN_WARNING("\The [victim]'s head is prosthetic and cannot support your lifecycle!"))
return TRUE
- if(!H.should_have_organ(BP_BRAIN))
- to_chat(src, SPAN_WARNING("\The [H] does not seem to have a brain cavity to enter."))
+ if(!victim.should_have_organ(BP_BRAIN))
+ to_chat(src, SPAN_WARNING("\The [victim] does not seem to have a brain cavity to enter."))
return TRUE
- if(H.check_head_coverage())
+ if(victim.check_head_coverage())
to_chat(src, SPAN_WARNING("You cannot get through that host's protective gear."))
return TRUE
- to_chat(M, SPAN_WARNING("Something slimy begins probing at the opening of your ear canal..."))
- to_chat(src, SPAN_NOTICE("You slither up [M] and begin probing at their ear canal..."))
+ to_chat(victim, SPAN_WARNING("Something slimy begins probing at the opening of your ear canal..."))
+ to_chat(src, SPAN_NOTICE("You slither up [victim] and begin probing at their ear canal..."))
set_ability_cooldown(5 SECONDS)
- if(!do_after(src, 3 SECONDS, M))
+ if(!do_after(src, 3 SECONDS, victim) || host || GET_EXTERNAL_ORGAN(victim, BP_HEAD) != limb || BP_IS_PROSTHETIC(limb) || victim.check_head_coverage())
return TRUE
- to_chat(src, SPAN_NOTICE("You wiggle into \the [M]'s ear."))
- if(M.stat == CONSCIOUS)
- to_chat(M, SPAN_DANGER("Something wet, cold and slimy wiggles into your ear!"))
+ to_chat(src, SPAN_NOTICE("You wiggle into \the [victim]'s ear."))
+ if(victim.stat == CONSCIOUS)
+ to_chat(victim, SPAN_DANGER("Something wet, cold and slimy wiggles into your ear!"))
- host = M
+ host = victim
host.status_flags |= PASSEMOTES
forceMove(host)
@@ -60,9 +54,9 @@
borers.add_antagonist_mind(host.mind, 1, borers.faction_name, borers.faction_welcome)
if(ishuman(host))
- var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(H, BP_BRAIN)
+ var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(victim, BP_BRAIN)
if(!I) // No brain organ, so the borer moves in and replaces it permanently.
replace_brain()
- else if(E) // If they're in normally, implant removal can get them out.
- LAZYDISTINCTADD(E.implants, src)
+ else if(limb) // If they're in normally, implant removal can get them out.
+ LAZYDISTINCTADD(limb.implants, src)
return TRUE
diff --git a/mods/mobs/borers/mob/borer/borer_hud.dm b/mods/mobs/borers/mob/borer/borer_hud.dm
index 8b9a155e5d4..79235e827d5 100644
--- a/mods/mobs/borers/mob/borer/borer_hud.dm
+++ b/mods/mobs/borers/mob/borer/borer_hud.dm
@@ -14,7 +14,7 @@
. = ..()
/datum/hud/borer/FinalizeInstantiation()
- hud_intent_selector = new(null, mymob, get_ui_style_data(), get_ui_color(), get_ui_alpha(), UI_ICON_INTENT)
+ hud_intent_selector = new(null, mymob)
adding += hud_intent_selector
hud_inject_chemicals = new(null, mymob)
hud_leave_host = new(null, mymob)
@@ -50,11 +50,12 @@
icon = 'mods/mobs/borers/icons/borer_ui.dmi'
alpha = 0
invisibility = INVISIBILITY_MAXIMUM
+ requires_ui_style = FALSE
/obj/screen/borer/handle_click(mob/user, params)
if(!isborer(user))
return FALSE
- var/mob/living/simple_animal/borer/worm = usr
+ var/mob/living/simple_animal/borer/worm = user
if(!worm.host)
return FALSE
return TRUE
diff --git a/mods/mobs/borers/mob/organ.dm b/mods/mobs/borers/mob/organ.dm
index c1f686ade98..80c12e77c94 100644
--- a/mods/mobs/borers/mob/organ.dm
+++ b/mods/mobs/borers/mob/organ.dm
@@ -38,5 +38,4 @@
B.leave_host()
B.ckey = last_owner.ckey
- spawn(0)
- qdel(src)
+ qdel(src)
diff --git a/mods/mobs/borers/mob/overrides.dm b/mods/mobs/borers/mob/overrides.dm
index 77c9a2c158e..26b83686f8e 100644
--- a/mods/mobs/borers/mob/overrides.dm
+++ b/mods/mobs/borers/mob/overrides.dm
@@ -22,8 +22,10 @@
var/mob/living/simple_animal/borer/B = HAS_BRAIN_WORMS(src)
if(B.controlling)
var/image/holder = hud_list[STATUS_HUD]
+ holder.icon = 'mods/mobs/borers/icons/hud.dmi'
holder.icon_state = "hudbrainworm"
var/image/holder2 = hud_list[STATUS_HUD_OOC]
+ holder2.icon = 'mods/mobs/borers/icons/hud.dmi'
holder2.icon_state = "hudbrainworm"
/mob/living/human/say_understands(mob/speaker, decl/language/speaking)
diff --git a/mods/mobs/dionaea/icons/ui_intent_overlay.dmi b/mods/mobs/dionaea/icons/ui_intent_overlay.dmi
new file mode 100644
index 00000000000..8c3174c773a
Binary files /dev/null and b/mods/mobs/dionaea/icons/ui_intent_overlay.dmi differ
diff --git a/mods/mobs/dionaea/icons/ui_intents.dmi b/mods/mobs/dionaea/icons/ui_intents.dmi
index d8aaeba136e..7a7f29b4d21 100644
Binary files a/mods/mobs/dionaea/icons/ui_intents.dmi and b/mods/mobs/dionaea/icons/ui_intents.dmi differ
diff --git a/mods/mobs/dionaea/mob/_nymph.dm b/mods/mobs/dionaea/mob/_nymph.dm
index 4c8b1a9f496..a1c8efe4486 100644
--- a/mods/mobs/dionaea/mob/_nymph.dm
+++ b/mods/mobs/dionaea/mob/_nymph.dm
@@ -76,6 +76,18 @@
heal_damage(OXY, rads, do_update_health = FALSE)
heal_damage(TOX, rads)
+/*
+/mob/living/simple_animal/alien/diona/get_default_intent()
+ return GET_DECL(/decl/intent/help/binary/diona)
+
+/mob/living/simple_animal/alien/diona/get_available_intents()
+ var/static/list/available_intents = list(
+ GET_DECL(/decl/intent/harm/binary/diona),
+ GET_DECL(/decl/intent/help/binary/diona)
+ )
+ return available_intents
+*/
+
/decl/bodytype/diona
name = "nymph"
bodytype_flag = 0
@@ -83,12 +95,12 @@
uid = "bodytype_diona"
/decl/bodytype/diona/Initialize()
- equip_adjust = list(
- slot_head_str = list(
+ _equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list(0, -8),
"[SOUTH]" = list(0, -8),
- "[EAST]" = list(0, -8),
- "[WEST]" = list(0, -8)
+ "[EAST]" = list(0, -8),
+ "[WEST]" = list(0, -8)
)
)
. = ..()
diff --git a/mods/mobs/dionaea/mob/nymph_ui.dm b/mods/mobs/dionaea/mob/nymph_ui.dm
index 15ab7bf27ea..fc44f7639a3 100644
--- a/mods/mobs/dionaea/mob/nymph_ui.dm
+++ b/mods/mobs/dionaea/mob/nymph_ui.dm
@@ -1,14 +1,16 @@
-/obj/screen/intent/diona_nymph
- icon_state = "intent_harm"
+/* Commented out due to issues with interactions and combined intent flags.
+/obj/screen/intent/binary/diona
+ icon = 'mods/mobs/dionaea/icons/ui_intents.dmi'
screen_loc = DIONA_SCREEN_LOC_INTENT
-/obj/screen/intent/diona_nymph/on_update_icon()
- if(intent == I_HURT || intent == I_GRAB)
- intent = I_GRAB
- icon_state = "intent_harm"
- else
- intent = I_DISARM
- icon_state = "intent_help"
+/decl/intent/harm/binary/diona
+ icon = 'mods/mobs/dionaea/icons/ui_intent_overlay.dmi'
+ uid = "intent_harm_binary_diona"
+
+/decl/intent/help/binary/diona
+ icon = 'mods/mobs/dionaea/icons/ui_intent_overlay.dmi'
+ uid = "intent_help_binary_diona"
+*/
/decl/ui_style/diona
name = "Diona"
@@ -17,11 +19,13 @@
override_icons = list(
UI_ICON_HEALTH = 'mods/mobs/dionaea/icons/ui_health.dmi',
UI_ICON_HANDS = 'mods/mobs/dionaea/icons/ui_hands.dmi',
- UI_ICON_INTENT = 'mods/mobs/dionaea/icons/ui_intents.dmi',
UI_ICON_INTERACTION = 'mods/mobs/dionaea/icons/ui_interactions.dmi',
UI_ICON_INVENTORY = 'mods/mobs/dionaea/icons/ui_inventory.dmi'
)
+/datum/hud/diona_nymph
+// action_intent_type = /obj/screen/intent/diona_nymph
+
/datum/hud/diona_nymph/get_ui_style_data()
return GET_DECL(/decl/ui_style/diona)
@@ -36,10 +40,9 @@
var/ui_color = get_ui_color()
var/ui_alpha = get_ui_alpha()
- action_intent = new /obj/screen/intent/diona_nymph(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTENT)
- mymob.healths = new /obj/screen/diona_health( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH)
- src.other = list()
- src.adding = list(mymob.healths, action_intent)
+ mymob.healths = new /obj/screen/diona_health(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH)
+ other = list()
+ adding = list(mymob.healths)
..()
/obj/screen/diona_health
diff --git a/mods/species/ascent/_ascent.dme b/mods/species/ascent/_ascent.dme
index 63d6f95300d..461ef828f3a 100644
--- a/mods/species/ascent/_ascent.dme
+++ b/mods/species/ascent/_ascent.dme
@@ -14,6 +14,7 @@
#include "datum\species_bodytypes.dm"
#include "datum\traits.dm"
#include "effects\razorweb.dm"
+#include "items\_overrides.dm"
#include "items\cell.dm"
#include "items\clothing.dm"
#include "items\clustertool.dm"
diff --git a/mods/species/ascent/datum/species.dm b/mods/species/ascent/datum/species.dm
index 809da7c26fb..f6bc5dddb05 100644
--- a/mods/species/ascent/datum/species.dm
+++ b/mods/species/ascent/datum/species.dm
@@ -71,11 +71,6 @@
species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_MINOR_CUT
spawn_flags = SPECIES_IS_RESTRICTED
- unarmed_attacks = list(
- /decl/natural_attack/claws/strong/gloves,
- /decl/natural_attack/bite/sharp
- )
-
force_background_info = list(
/decl/background_category/heritage = /decl/background_detail/heritage/ascent,
/decl/background_category/homeworld = /decl/background_detail/location/kharmaani,
diff --git a/mods/species/ascent/datum/species_bodytypes.dm b/mods/species/ascent/datum/species_bodytypes.dm
index 05ca4ed987f..87a8462b0f7 100644
--- a/mods/species/ascent/datum/species_bodytypes.dm
+++ b/mods/species/ascent/datum/species_bodytypes.dm
@@ -30,6 +30,7 @@
BP_SYSTEM_CONTROLLER = /obj/item/organ/internal/controller
)
limb_mapping = list(BP_CHEST = list(BP_CHEST, BP_M_HAND))
+ footprints_icon = 'icons/mob/footprints/footprints_snake.dmi' // big tail
heat_discomfort_strings = list(
"You feel brittle and overheated.",
@@ -85,8 +86,8 @@
uid = "bodytype_crystalline_gyne"
/decl/bodytype/crystalline/mantid/gyne/Initialize()
- equip_adjust = list(
- BP_L_HAND = list(
+ _equip_adjust = list(
+ (BP_L_HAND) = list(
"[NORTH]" = list(-4, 12),
"[EAST]" = list(-4, 12),
"[SOUTH]" = list(-4, 12),
diff --git a/mods/species/ascent/effects/razorweb.dm b/mods/species/ascent/effects/razorweb.dm
index d67a55ee498..0647ffe0c91 100644
--- a/mods/species/ascent/effects/razorweb.dm
+++ b/mods/species/ascent/effects/razorweb.dm
@@ -13,7 +13,7 @@
web.buckle_mob(hit_atom)
web.visible_message(SPAN_DANGER("\The [hit_atom] is tangled in \the [web]!"))
web.entangle(hit_atom, TRUE)
- playsound(usr, 'mods/species/ascent/sounds/razorweb_twang.ogg', 50)
+ playsound(src, 'mods/species/ascent/sounds/razorweb_twang.ogg', 50)
qdel(src)
// Hey, did you ever see The Cube (1997) directed by Vincenzo Natali?
@@ -68,7 +68,7 @@
START_PROCESSING(SSobj, src)
/obj/effect/razorweb/proc/decay()
- playsound(usr, 'mods/species/ascent/sounds/razorweb_break.ogg', 50)
+ playsound(src, 'mods/species/ascent/sounds/razorweb_break.ogg', 50)
qdel_self()
/obj/effect/razorweb/attack_hand(mob/user)
@@ -81,7 +81,7 @@
/obj/effect/razorweb/attackby(var/obj/item/thing, var/mob/user)
var/destroy_self
- if(thing.get_attack_force(user))
+ if(thing.expend_attack_force(user))
visible_message(SPAN_DANGER("\The [user] breaks \the [src] with \the [thing]!"))
destroy_self = TRUE
@@ -163,8 +163,8 @@
if(prob(break_chance))
visible_message(SPAN_DANGER("\The [src] breaks apart!"))
- playsound(usr, 'mods/species/ascent/sounds/razorweb_break.ogg', 50)
+ playsound(src, 'mods/species/ascent/sounds/razorweb_break.ogg', 50)
qdel(src)
else
- playsound(usr, 'mods/species/ascent/sounds/razorweb_twang.ogg', 50)
+ playsound(src, 'mods/species/ascent/sounds/razorweb_twang.ogg', 50)
break_chance = min(break_chance+10, 100)
\ No newline at end of file
diff --git a/mods/species/ascent/icons/ui_intent_overlay.dmi b/mods/species/ascent/icons/ui_intent_overlay.dmi
new file mode 100644
index 00000000000..d49275852d3
Binary files /dev/null and b/mods/species/ascent/icons/ui_intent_overlay.dmi differ
diff --git a/mods/species/ascent/icons/ui_intents.dmi b/mods/species/ascent/icons/ui_intents.dmi
index 1e027dcfcdd..0e8d07ec2fe 100644
Binary files a/mods/species/ascent/icons/ui_intents.dmi and b/mods/species/ascent/icons/ui_intents.dmi differ
diff --git a/mods/species/ascent/items/_overrides.dm b/mods/species/ascent/items/_overrides.dm
new file mode 100644
index 00000000000..3cc8b68959b
--- /dev/null
+++ b/mods/species/ascent/items/_overrides.dm
@@ -0,0 +1,10 @@
+/obj/item
+ var/_alate_onmob_icon
+ var/_gyne_onmob_icon
+
+/obj/item/setup_sprite_sheets()
+ . = ..()
+ if(_alate_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_MANTID_SMALL, _alate_onmob_icon)
+ if(_gyne_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_MANTID_LARGE, _gyne_onmob_icon)
diff --git a/mods/species/ascent/items/clothing.dm b/mods/species/ascent/items/clothing.dm
index 845397d4208..43a34e427b3 100644
--- a/mods/species/ascent/items/clothing.dm
+++ b/mods/species/ascent/items/clothing.dm
@@ -22,7 +22,7 @@
desc = "An alien facemask with chunky gas filters and a breathing valve."
filter_water = TRUE
icon = 'mods/species/ascent/icons/clothing/mask.dmi'
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/clothing/mask_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/clothing/mask_gyne.dmi'
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
filtered_gases = list(
/decl/material/solid/phoron,
@@ -39,9 +39,7 @@
desc = "A set of powerful gripping claws."
icon = 'mods/species/ascent/icons/magboots/boots.dmi'
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
- sprite_sheets = list(
- BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/magboots/boots_gyne.dmi'
- )
+ _gyne_onmob_icon = 'mods/species/ascent/icons/magboots/boots_gyne.dmi'
/obj/item/clothing/jumpsuit/ascent
name = "mantid undersuit"
@@ -49,9 +47,7 @@
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
icon = 'mods/species/ascent/icons/clothing/under.dmi'
color = COLOR_DARK_GUNMETAL
- sprite_sheets = list(
- BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/clothing/under_gyne.dmi'
- )
+ _gyne_onmob_icon = 'mods/species/ascent/icons/clothing/under_gyne.dmi'
/obj/item/clothing/suit/ascent
name = "mantid gear harness"
@@ -59,7 +55,7 @@
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
icon_state = ICON_STATE_WORLD
icon = 'mods/species/ascent/icons/clothing/under_harness.dmi'
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/clothing/under_harness_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/clothing/under_harness_gyne.dmi'
body_parts_covered = 0
slot_flags = SLOT_OVER_BODY | SLOT_LOWER_BODY
storage = /datum/storage/pockets/suit
diff --git a/mods/species/ascent/items/guns.dm b/mods/species/ascent/items/guns.dm
index 83fdda10ffc..99a76ce5351 100644
--- a/mods/species/ascent/items/guns.dm
+++ b/mods/species/ascent/items/guns.dm
@@ -20,7 +20,7 @@
list(mode_name="shock", projectile_type = /obj/item/projectile/beam/stun/shock),
list(mode_name="lethal", projectile_type = /obj/item/projectile/beam/particle)
)
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/particle_rifle/inhands_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/particle_rifle/inhands_gyne.dmi'
/obj/item/gun/energy/particle/small
name = "particle projector"
diff --git a/mods/species/ascent/items/rig.dm b/mods/species/ascent/items/rig.dm
index 35697954e7b..214f60caa99 100644
--- a/mods/species/ascent/items/rig.dm
+++ b/mods/species/ascent/items/rig.dm
@@ -3,7 +3,6 @@
name = "alate support exosuit"
desc = "A powerful support exosuit with integrated power supply, weapon and atmosphere. It's closer to a mech than a rig."
icon = 'mods/species/ascent/icons/rig/rig.dmi'
-
suit_type = "support exosuit"
armor = list(
ARMOR_MELEE = ARMOR_MELEE_MAJOR,
@@ -28,7 +27,7 @@
gloves = /obj/item/clothing/gloves/rig/mantid
update_visible_name = TRUE
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/rig/rig_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/rig/rig_gyne.dmi'
initial_modules = list(
/obj/item/rig_module/vision/thermal,
/obj/item/rig_module/ai_container,
@@ -241,7 +240,7 @@
desc = "More like a torpedo casing than a helmet."
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
icon = 'mods/species/ascent/icons/rig/rig_helmet.dmi'
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/rig/rig_helmet_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/rig/rig_helmet_gyne.dmi'
/obj/item/clothing/suit/space/rig/mantid
desc = "It's closer to a mech than a suit."
@@ -255,16 +254,16 @@
/obj/item/stack/medical/resin,
/obj/item/chems/drinks/cans/waterbottle/ascent
)
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/rig/rig_chest_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/rig/rig_chest_gyne.dmi'
/obj/item/clothing/shoes/magboots/rig/mantid
icon = 'mods/species/ascent/icons/rig/rig_boots.dmi'
desc = "It's like a highly advanced forklift."
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/rig/rig_boots_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/rig/rig_boots_gyne.dmi'
/obj/item/clothing/gloves/rig/mantid
icon = 'mods/species/ascent/icons/rig/rig_gloves.dmi'
desc = "They look like a cross between a can opener and a Swiss army knife the size of a shoebox."
bodytype_equip_flags = BODY_EQUIP_FLAG_GYNE | BODY_EQUIP_FLAG_ALATE
- sprite_sheets = list(BODYTYPE_MANTID_LARGE = 'mods/species/ascent/icons/rig/rig_gloves_gyne.dmi')
+ _gyne_onmob_icon = 'mods/species/ascent/icons/rig/rig_gloves_gyne.dmi'
diff --git a/mods/species/ascent/mobs/bodyparts.dm b/mods/species/ascent/mobs/bodyparts.dm
index a86a379a15c..dba73c0e121 100644
--- a/mods/species/ascent/mobs/bodyparts.dm
+++ b/mods/species/ascent/mobs/bodyparts.dm
@@ -5,7 +5,7 @@
var/list/existing_webs = list()
var/max_webs = 4
var/web_weave_time = 20 SECONDS
- var/cooldown
+ var/organ_cooldown
/obj/item/organ/external/groin/insectoid/mantid/gyne
max_webs = 8
@@ -20,12 +20,12 @@
/obj/item/organ/external/groin/insectoid/mantid/refresh_action_button()
. = ..()
if(.)
- action.button_icon_state = "weave-web-[cooldown ? "off" : "on"]"
+ action.button_icon_state = "weave-web-[organ_cooldown ? "off" : "on"]"
action.button?.update_icon()
/obj/item/organ/external/groin/insectoid/mantid/attack_self(var/mob/user)
. = ..()
- if(. && !cooldown)
+ if(. && !organ_cooldown)
if(!isturf(owner.loc))
to_chat(owner, SPAN_WARNING("You cannot use this ability in this location."))
@@ -41,7 +41,7 @@
playsound(user, 'mods/species/ascent/sounds/razorweb_hiss.ogg', 70)
owner.visible_message(SPAN_WARNING("\The [owner] separates their jaws and begins to weave a web of crystalline filaments..."))
- cooldown = TRUE
+ organ_cooldown = TRUE
refresh_action_button()
addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), web_weave_time)
if(do_after(owner, web_weave_time) && length(existing_webs) < max_webs)
@@ -52,27 +52,27 @@
web.owner = owner
/obj/item/organ/external/groin/insectoid/mantid/proc/reset_cooldown()
- cooldown = FALSE
+ organ_cooldown = FALSE
refresh_action_button()
/obj/item/organ/external/head/insectoid/mantid
name = "crested head"
action_button_name = "Spit Razorweb"
default_action_type = /datum/action/item_action/organ/ascent
- var/cooldown_time = 2.5 MINUTES
- var/cooldown
+ var/organ_cooldown_time = 2.5 MINUTES
+ var/organ_cooldown
/obj/item/organ/external/head/insectoid/mantid/refresh_action_button()
. = ..()
if(.)
- action.button_icon_state = "shot-web-[cooldown ? "off" : "on"]"
+ action.button_icon_state = "shot-web-[organ_cooldown ? "off" : "on"]"
action.button?.update_icon()
/obj/item/organ/external/head/insectoid/mantid/attack_self(var/mob/user)
. = ..()
if(.)
- if(cooldown)
+ if(organ_cooldown)
to_chat(owner, SPAN_WARNING("Your filament channel hasn't refilled yet!"))
return
@@ -81,12 +81,12 @@
playsound(user, 'mods/species/ascent/sounds/razorweb.ogg', 100)
to_chat(owner, SPAN_WARNING("You spit up a wad of razorweb, ready to throw!"))
owner.toggle_throw_mode(TRUE)
- cooldown = TRUE
+ organ_cooldown = TRUE
refresh_action_button()
- addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), cooldown_time)
+ addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), organ_cooldown_time)
else
qdel(web)
/obj/item/organ/external/head/insectoid/mantid/proc/reset_cooldown()
- cooldown = FALSE
+ organ_cooldown = FALSE
refresh_action_button()
diff --git a/mods/species/ascent/mobs/drone.dm b/mods/species/ascent/mobs/drone.dm
index f2f94d499de..2294585ee15 100644
--- a/mods/species/ascent/mobs/drone.dm
+++ b/mods/species/ascent/mobs/drone.dm
@@ -35,7 +35,6 @@
/obj/item/stack/material/cyborg/steel,
/obj/item/stack/material/cyborg/aluminium,
/obj/item/stack/material/rods/cyborg,
- /obj/item/stack/material/strut/cyborg,
/obj/item/stack/tile/floor/cyborg,
/obj/item/stack/tile/roof/cyborg,
/obj/item/stack/material/cyborg/glass,
@@ -96,7 +95,6 @@
/obj/item/stack/material/cyborg/steel,
/obj/item/stack/material/cyborg/aluminium,
/obj/item/stack/material/rods/cyborg,
- /obj/item/stack/material/strut/cyborg,
/obj/item/stack/tile/floor/cyborg,
/obj/item/stack/tile/roof/cyborg,
/obj/item/stack/material/cyborg/glass/reinforced
diff --git a/mods/species/ascent/mobs/nymph/_nymph.dm b/mods/species/ascent/mobs/nymph/_nymph.dm
index da48aabf82e..16447b0c51d 100644
--- a/mods/species/ascent/mobs/nymph/_nymph.dm
+++ b/mods/species/ascent/mobs/nymph/_nymph.dm
@@ -51,3 +51,15 @@
/mob/living/simple_animal/alien/kharmaan/get_dexterity(var/silent)
return (DEXTERITY_EQUIP_ITEM)
+
+/*
+/mob/living/simple_animal/alien/kharmaan/get_default_intent()
+ return GET_DECL(/decl/intent/help/binary/ascent)
+
+/mob/living/simple_animal/alien/kharmaan/get_available_intents()
+ var/static/list/available_intents = list(
+ GET_DECL(/decl/intent/harm/binary/ascent),
+ GET_DECL(/decl/intent/help/binary/ascent)
+ )
+ return available_intents
+*/
\ No newline at end of file
diff --git a/mods/species/ascent/mobs/nymph/nymph_inventory.dm b/mods/species/ascent/mobs/nymph/nymph_inventory.dm
index 12396419807..e79adb9931d 100644
--- a/mods/species/ascent/mobs/nymph/nymph_inventory.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_inventory.dm
@@ -1,13 +1,8 @@
-/mob/living/simple_animal/alien/kharmaan/proc/contains_crystals(var/obj/item/W)
- for(var/mat in W.matter)
- if(mat == /decl/material/solid/sand)
- . += W.matter[mat]
- else if(mat == /decl/material/solid/gemstone/crystal)
- . += W.matter[mat]
- else if(mat == /decl/material/solid/quartz)
- . += W.matter[mat]
- else if(mat == /decl/material/solid/glass)
- . += W.matter[mat]
+/mob/living/simple_animal/alien/kharmaan/proc/contains_crystals(var/obj/item/prop)
+ . += prop.matter[/decl/material/solid/sand]
+ . += prop.matter[/decl/material/solid/gemstone/crystal]
+ . += prop.matter[/decl/material/solid/quartz]
+ . += prop.matter[/decl/material/solid/glass]
/datum/inventory_slot/gripper/mouth/nymph/ascent/equipped(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE, var/delete_old_item = TRUE)
var/mob/living/simple_animal/alien/kharmaan/nimp = user
diff --git a/mods/species/ascent/mobs/nymph/nymph_life.dm b/mods/species/ascent/mobs/nymph/nymph_life.dm
index 4c217a9aee0..f8e5c45fd4a 100644
--- a/mods/species/ascent/mobs/nymph/nymph_life.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_life.dm
@@ -61,23 +61,22 @@
return
molt = min(molt + 1, 5)
- var/mob/living/simple_animal/alien/kharmaan/nymph = usr
- nymph.visible_message("\icon[nymph] [nymph] begins to shimmy and shake out of its old skin.")
+ visible_message("\icon[src] [src] begins to shimmy and shake out of its old skin.")
if(molt == 5)
- if(do_after(nymph, 10 SECONDS, nymph, FALSE))
- var/mob/living/human/H = new(get_turf(usr), SPECIES_MANTID_ALATE)
- H.set_gyne_lineage(nymph.get_gyne_lineage())
+ if(do_after(src, 10 SECONDS, src, FALSE))
+ var/mob/living/human/H = new(get_turf(src), SPECIES_MANTID_ALATE)
+ H.set_gyne_lineage(get_gyne_lineage())
H.real_name = "[random_id(/decl/species/mantid, 10000, 99999)] [H.get_gyne_name()]"
- H.nutrition = nymph.nutrition * 0.25 // Homgry after molt.
- nymph.mind.transfer_to(H)
- qdel(nymph)
+ H.nutrition = nutrition * 0.25 // Homgry after molt.
+ mind.transfer_to(H)
+ qdel(src)
H.visible_message("\icon[H] [H] emerges from its molt as a new alate.")
new/obj/item/ascent_molt(get_turf(src))
else
- nymph.visible_message("\icon[nymph] [nymph] abruptly stops molting.")
+ visible_message("\icon[src] [src] abruptly stops molting.")
return
- if(do_after(nymph, 5 SECONDS, nymph, FALSE))
+ if(do_after(src, 5 SECONDS, src, FALSE))
var/matrix/M = matrix()
M.Scale(1 + (molt / 10))
animate(src, transform = M, time = 2, easing = QUAD_EASING)
@@ -88,4 +87,4 @@
new /obj/item/ascent_molt(get_turf(src))
else
- nymph.visible_message("\icon[nymph] [nymph] abruptly stops molting.")
\ No newline at end of file
+ visible_message("\icon[src] [src] abruptly stops molting.")
\ No newline at end of file
diff --git a/mods/species/ascent/mobs/nymph/nymph_ui.dm b/mods/species/ascent/mobs/nymph/nymph_ui.dm
index 85225fd26a9..e3b6d1ec70c 100644
--- a/mods/species/ascent/mobs/nymph/nymph_ui.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_ui.dm
@@ -1,15 +1,16 @@
-/obj/screen/intent/ascent_nymph
- icon_state = "intent_harm"
+/* Commented out due to issues with interactions and combined intent flags.
+/obj/screen/intent/binary/ascent
+ icon = 'mods/species/ascent/icons/ui_intents.dmi'
screen_loc = ANYMPH_SCREEN_LOC_INTENT
-/obj/screen/intent/ascent_nymph/on_update_icon()
- if(intent == I_HURT || intent == I_GRAB)
- intent = I_GRAB
- icon_state = "intent_harm"
- else
- intent = I_DISARM
- icon_state = "intent_help"
+/decl/intent/harm/binary/ascent
+ icon = 'mods/species/ascent/icons/ui_intent_overlay.dmi'
+ uid = "intent_harm_binary_ascent"
+/decl/intent/help/binary/ascent
+ icon = 'mods/species/ascent/icons/ui_intent_overlay.dmi'
+ uid = "intent_help_binary_ascent"
+*/
/obj/screen/ascent_nymph_molt
name = "molt"
icon = 'mods/species/ascent/icons/ui_molt.dmi'
@@ -33,11 +34,13 @@
override_icons = list(
UI_ICON_HEALTH = 'mods/species/ascent/icons/ui_health.dmi',
UI_ICON_HANDS = 'mods/species/ascent/icons/ui_hands.dmi',
- UI_ICON_INTENT = 'mods/species/ascent/icons/ui_intents.dmi',
UI_ICON_INTERACTION = 'mods/species/ascent/icons/ui_interactions.dmi',
UI_ICON_INVENTORY = 'mods/species/ascent/icons/ui_inventory.dmi'
)
+/datum/hud/ascent_nymph
+// action_intent_type = /obj/screen/intent/ascent_nymph
+
/datum/hud/ascent_nymph/get_ui_style_data()
return GET_DECL(/decl/ui_style/ascent)
@@ -54,10 +57,9 @@
molt = new( null, mymob, ui_style, ui_color, ui_alpha)
food = new /obj/screen/food( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_NUTRITION)
drink = new /obj/screen/drink( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HYDRATION)
- action_intent = new /obj/screen/intent/ascent_nymph(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTENT)
mymob.healths = new /obj/screen/ascent_nymph_health(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH)
- src.other = list()
- src.adding = list(mymob.healths, molt, food, drink, action_intent)
+ other = list()
+ adding = list(mymob.healths, molt, food, drink)
..()
/obj/screen/ascent_nymph_health
diff --git a/mods/species/bayliens/bayliens.dm b/mods/species/bayliens/_bayliens.dm
similarity index 53%
rename from mods/species/bayliens/bayliens.dm
rename to mods/species/bayliens/_bayliens.dm
index a1ddf384ed9..80febefc65e 100644
--- a/mods/species/bayliens/bayliens.dm
+++ b/mods/species/bayliens/_bayliens.dm
@@ -1,10 +1,23 @@
-#define SPECIES_SKRELL "Skrell"
-#define SPECIES_TAJARA "Tajara"
-#define SPECIES_LIZARD "Unathi"
-#define SPECIES_ADHERENT "Adherent"
+#define SPECIES_SKRELL "Skrell"
+#define SPECIES_TAJARA "Tajara"
+#define SPECIES_LIZARD "Unathi"
+#define SPECIES_ADHERENT "Adherent"
+
+#define BODYTYPE_FELINE "feline body"
+#define BODYTYPE_ADHERENT "adherent body"
+
+#define BODY_EQUIP_FLAG_FELINE BITFLAG(7)
/decl/modpack/bayliens
name = "Baystation 12 Aliens"
+ tabloid_headlines = list(
+ "SHOCKING FIGURES REVEAL MORE TEENS DIE TO UNATHI HONOUR DUELS THAN GUN VIOLENCE",
+ "LOCAL UNATHI SYMPATHIZER: 'I really think you should stop with these spacebaiting articles.'",
+ "DO UNATHI SYMPATHIZERS HATE THE HUMAN RACE?",
+ "TENTACLES OF TERROR: SKRELL BLACK OPS SEIGE NYX NAVAL DEPOT. SHOCKING PHOTOGRAPHS INSIDE!",
+ "LOCAL MAN HAS SEIZURE AFTER SAYING SKRELLIAN NAME; FORCED ASSIMILATION SOON?",
+ "TAJARANS: CUTE AND CUDDLY, OR INFILTRATING THE GOVERNMENT? FIND OUT MORE INSIDE"
+ )
/decl/modpack/bayliens/pre_initialize()
..()
diff --git a/mods/species/bayliens/_bayliens.dme b/mods/species/bayliens/_bayliens.dme
index e8de7a35d0b..014aba6cf5d 100644
--- a/mods/species/bayliens/_bayliens.dme
+++ b/mods/species/bayliens/_bayliens.dme
@@ -1,7 +1,8 @@
#ifndef MODPACK_BAYLIENS
#define MODPACK_BAYLIENS
// BEGIN_INCLUDE
-#include "bayliens.dm"
+#include "_bayliens.dm"
+#include "_overrides.dm"
#include "adherent\_adherent.dm"
#include "adherent\datum\culture.dm"
#include "adherent\datum\emotes.dm"
diff --git a/mods/species/bayliens/_overrides.dm b/mods/species/bayliens/_overrides.dm
new file mode 100644
index 00000000000..5eb6f5a8558
--- /dev/null
+++ b/mods/species/bayliens/_overrides.dm
@@ -0,0 +1,7 @@
+/obj/item
+ var/_feline_onmob_icon
+
+/obj/item/setup_sprite_sheets()
+ . = ..()
+ if(_feline_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, _feline_onmob_icon)
diff --git a/mods/species/bayliens/adherent/_adherent.dm b/mods/species/bayliens/adherent/_adherent.dm
index 997107674c8..d70f337115d 100644
--- a/mods/species/bayliens/adherent/_adherent.dm
+++ b/mods/species/bayliens/adherent/_adherent.dm
@@ -1,6 +1,4 @@
-#define BODYTYPE_ADHERENT "adherent body"
#define LANGUAGE_ADHERENT "Protocol"
-
#define BP_FLOAT "floatation disc"
#define BP_JETS "maneuvering jets"
#define BP_COOLING_FINS "cooling fins"
diff --git a/mods/species/bayliens/adherent/datum/species_bodytypes.dm b/mods/species/bayliens/adherent/datum/species_bodytypes.dm
index 8e6c7ab2ee9..bbf275eb855 100644
--- a/mods/species/bayliens/adherent/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/adherent/datum/species_bodytypes.dm
@@ -53,54 +53,48 @@
uid = "bodytype_crystalline_adherent_turquoise"
/decl/bodytype/crystalline/adherent/Initialize()
- equip_adjust = list(
- "[BP_L_HAND]" = list(
+ _equip_adjust = list(
+ (BP_L_HAND) = list(
"[NORTH]" = list(0, 14),
"[EAST]" = list(0, 14),
"[SOUTH]" = list(0, 14),
"[WEST]" = list(0, 14)
),
-
- "[BP_R_HAND]" = list(
+ (BP_R_HAND) = list(
"[NORTH]" = list(0, 14),
"[EAST]" = list(0, 14),
"[SOUTH]" = list(0, 14),
"[WEST]" = list(0, 14)
),
-
- "[slot_back_str]" = list(
+ (slot_back_str) = list(
"[NORTH]" = list(0, 14),
"[EAST]" = list(0, 14),
"[SOUTH]" = list(0, 14),
"[WEST]" = list(0, 14)
),
-
- "[slot_belt_str]" = list(
+ (slot_belt_str) = list(
"[NORTH]" = list(0, 14),
"[EAST]" = list(0, 14),
"[SOUTH]" = list(0, 14),
"[WEST]" = list(0, 14)
),
-
- "[slot_head_str]" = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 0, 14),
"[EAST]" = list( 3, 14),
"[SOUTH]" = list( 0, 14),
"[WEST]" = list(-3, 14)
),
-
- "[slot_l_ear_str]" = list(
+ (slot_l_ear_str) = list(
"[NORTH]" = list(0, 14),
"[EAST]" = list(0, 14),
"[SOUTH]" = list(0, 14),
- "[WEST]" = list(0, 14)
+ "[WEST]" = list(0, 14)
),
-
- "[slot_r_ear_str]" = list(
+ (slot_r_ear_str) = list(
"[NORTH]" = list(0, 14),
"[EAST]" = list(0, 14),
"[SOUTH]" = list(0, 14),
- "[WEST]" = list(0, 14)
+ "[WEST]" = list(0, 14)
)
)
. = ..()
diff --git a/mods/species/bayliens/skrell/datum/species.dm b/mods/species/bayliens/skrell/datum/species.dm
index 0d9acdcd880..c52a6dc6735 100644
--- a/mods/species/bayliens/skrell/datum/species.dm
+++ b/mods/species/bayliens/skrell/datum/species.dm
@@ -14,12 +14,6 @@
traits = list(/decl/trait/malus/intolerance/protein = TRAIT_LEVEL_MINOR)
primitive_form = "Neaera"
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite
- )
description = "The Skrell are a highly advanced race of amphibians hailing from the system known as Qerr'Vallis. Their society is regimented into \
five different castes which the Qerr'Katish, or Royal Caste, rules over. Skrell are strict herbivores who are unable to eat large quantities of \
@@ -117,27 +111,36 @@
var/obj/item/shoes = H.get_equipped_item(slot_shoes_str)
if(!shoes)
var/list/bloodDNA
- var/list/blood_data = REAGENT_DATA(H.vessel, /decl/material/liquid/blood)
+ var/list/blood_data = REAGENT_DATA(H.vessel, blood_reagent)
if(blood_data)
bloodDNA = list(blood_data[DATA_BLOOD_DNA] = blood_data[DATA_BLOOD_TYPE])
else
bloodDNA = list()
- if(T.simulated)
- T.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, H.dir, 0, H.get_skin_colour() + "25") // Coming (8c is the alpha value)
+ T.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, H.dir, 0, H.get_skin_colour() + "25") // Coming (25 is the alpha value)
if(isturf(old_loc))
var/turf/old_turf = old_loc
- if(old_turf.simulated)
- old_turf.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, 0, H.dir, H.get_skin_colour() + "25") // Going (8c is the alpha value)
+ old_turf.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, 0, H.dir, H.get_skin_colour() + "25") // Going (25 is the alpha value)
/decl/species/skrell/check_background()
return TRUE
+/decl/material/liquid/mucus/skrell
+ name = "slime"
+ uid = "chem_mucus_skrell"
+ lore_text = "A gooey semi-liquid secreted by skrellian skin."
+
+// Copied from blood.
+// TODO: There's not currently a way to check this, which might be a little annoying for forensics.
+// But this is just a stopgap to stop Skrell from literally leaking blood everywhere they go.
+/decl/material/liquid/mucus/skrell/get_reagent_color(datum/reagents/holder)
+ var/list/goo_data = REAGENT_DATA(holder, type)
+ return goo_data?[DATA_BLOOD_COLOR] || ..()
+
/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints
name = "wet footprints"
desc = "They look like still wet tracks left by skrellian feet."
+ chemical = /decl/material/liquid/mucus/skrell
-/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints/dry()
- qdel(src)
/obj/item/organ/internal/eyes/skrell
name = "amphibian eyes"
desc = "Large black orbs, belonging to some sort of giant frog by looks of it."
diff --git a/mods/species/bayliens/tajaran/_tajaran.dm b/mods/species/bayliens/tajaran/_tajaran.dm
index b4e664e999b..151b2b1c8a7 100644
--- a/mods/species/bayliens/tajaran/_tajaran.dm
+++ b/mods/species/bayliens/tajaran/_tajaran.dm
@@ -1,6 +1,4 @@
#define LANGUAGE_TAJARA "Siik'maas"
-#define BODYTYPE_FELINE "feline body"
-#define BODY_EQUIP_FLAG_FELINE BITFLAG(7)
/obj/item/clothing/setup_equip_flags()
. = ..()
diff --git a/mods/species/bayliens/tajaran/datum/species.dm b/mods/species/bayliens/tajaran/datum/species.dm
index 231ed1684f0..19de51ffc36 100644
--- a/mods/species/bayliens/tajaran/datum/species.dm
+++ b/mods/species/bayliens/tajaran/datum/species.dm
@@ -45,13 +45,6 @@
thirst_factor = DEFAULT_THIRST_FACTOR * 1.2
gluttonous = GLUT_TINY
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/sharp
- )
-
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
available_background_info = list(
diff --git a/mods/species/bayliens/tajaran/datum/species_bodytypes.dm b/mods/species/bayliens/tajaran/datum/species_bodytypes.dm
index 9dbd49a90fe..0088067d9b2 100644
--- a/mods/species/bayliens/tajaran/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/tajaran/datum/species_bodytypes.dm
@@ -16,6 +16,7 @@
base_eye_color = "#00aa00"
nail_noun = "claws"
uid = "bodytype_feline"
+ footprints_icon = 'icons/mob/footprints/footprints_paw.dmi'
age_descriptor = /datum/appearance_descriptor/age/tajaran
@@ -27,7 +28,10 @@
eye_low_light_vision_adjustment_speed = 0.3
override_limb_types = list(
- BP_TAIL = /obj/item/organ/external/tail/cat
+ BP_TAIL = /obj/item/organ/external/tail/cat,
+ BP_HEAD = /obj/item/organ/external/head/sharp_bite,
+ BP_L_HAND = /obj/item/organ/external/hand/clawed,
+ BP_R_HAND = /obj/item/organ/external/hand/right/clawed
)
default_sprite_accessories = list(
@@ -52,10 +56,25 @@
)
/decl/bodytype/feline/Initialize()
- equip_adjust = list(
- slot_glasses_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
- slot_wear_mask_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
- slot_head_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2))
+ _equip_adjust = list(
+ (slot_glasses_str) = list(
+ "[NORTH]" = list(0, 2),
+ "[EAST]" = list(0, 2),
+ "[SOUTH]" = list( 0, 2),
+ "[WEST]" = list(0, 2)
+ ),
+ (slot_wear_mask_str) = list(
+ "[NORTH]" = list(0, 2),
+ "[EAST]" = list(0, 2),
+ "[SOUTH]" = list( 0, 2),
+ "[WEST]" = list(0, 2)
+ ),
+ (slot_head_str) = list(
+ "[NORTH]" = list(0, 2),
+ "[EAST]" = list(0, 2),
+ "[SOUTH]" = list( 0, 2),
+ "[WEST]" = list(0, 2)
+ )
)
. = ..()
diff --git a/mods/species/bayliens/tajaran/machinery/suit_cycler.dm b/mods/species/bayliens/tajaran/machinery/suit_cycler.dm
index af8842c7b19..e3be8485345 100644
--- a/mods/species/bayliens/tajaran/machinery/suit_cycler.dm
+++ b/mods/species/bayliens/tajaran/machinery/suit_cycler.dm
@@ -2,70 +2,51 @@
LAZYDISTINCTADD(available_bodytypes, BODYTYPE_FELINE)
. = ..()
-/obj/item/clothing/suit/space/void/merc/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi')
+/obj/item/clothing/suit/space/void/merc
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi'
-/obj/item/clothing/suit/space/void/swat/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi')
+/obj/item/clothing/suit/space/void/swat
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi'
-/obj/item/clothing/suit/space/void/engineering/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi')
+/obj/item/clothing/suit/space/void/engineering
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi'
-/obj/item/clothing/suit/space/void/mining/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi')
+/obj/item/clothing/suit/space/void/mining
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi'
-/obj/item/clothing/suit/space/void/medical/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi')
+/obj/item/clothing/suit/space/void/medical
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi'
-/obj/item/clothing/suit/space/void/security/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi')
+/obj/item/clothing/suit/space/void/security
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi'
-/obj/item/clothing/suit/space/void/atmos/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi')
+/obj/item/clothing/suit/space/void/atmos
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi'
-/obj/item/clothing/suit/space/void/engineering/alt/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi')
+/obj/item/clothing/suit/space/void/engineering/alt
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi'
-/obj/item/clothing/suit/space/void/mining/alt/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi')
+/obj/item/clothing/suit/space/void/mining/alt
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi'
-/obj/item/clothing/suit/space/void/medical/alt/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi')
+/obj/item/clothing/suit/space/void/medical/alt
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi'
-/obj/item/clothing/suit/space/void/security/alt/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi')
+/obj/item/clothing/suit/space/void/security/alt
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi'
-/obj/item/clothing/suit/space/void/atmos/alt/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi')
+/obj/item/clothing/suit/space/void/atmos/alt
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi'
-/obj/item/clothing/suit/space/void/engineering/salvage/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi')
+/obj/item/clothing/suit/space/void/engineering/salvage
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi'
-/obj/item/clothing/suit/space/void/expedition/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi')
+/obj/item/clothing/suit/space/void/expedition
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi'
-/obj/item/clothing/suit/space/void/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi')
+/obj/item/clothing/suit/space/void
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi'
-/obj/item/clothing/suit/space/void/wizard/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi')
-/obj/item/clothing/suit/space/void/excavation/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi')
+/obj/item/clothing/suit/space/void/excavation
+ _feline_onmob_icon = 'mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi'
diff --git a/mods/species/bayliens/tritonian/datum/species.dm b/mods/species/bayliens/tritonian/datum/species.dm
index a6e415dbce0..84491dd46cf 100644
--- a/mods/species/bayliens/tritonian/datum/species.dm
+++ b/mods/species/bayliens/tritonian/datum/species.dm
@@ -13,10 +13,3 @@
body_temperature = 302
water_soothe_amount = 5
-
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/sharp
- )
diff --git a/mods/species/bayliens/tritonian/datum/species_bodytypes.dm b/mods/species/bayliens/tritonian/datum/species_bodytypes.dm
index 0e5614f62d5..dadaac398a3 100644
--- a/mods/species/bayliens/tritonian/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/tritonian/datum/species_bodytypes.dm
@@ -6,6 +6,9 @@
override_organ_types = list(
BP_LUNGS = /obj/item/organ/internal/lungs/gills
)
+ override_limb_types = list(
+ BP_HEAD = /obj/item/organ/external/head/sharp_bite
+ )
/decl/bodytype/human/tritonian/masculine
name = "masculine"
diff --git a/mods/species/bayliens/unathi/datum/species.dm b/mods/species/bayliens/unathi/datum/species.dm
index 43ab46e0049..ad4a508329b 100644
--- a/mods/species/bayliens/unathi/datum/species.dm
+++ b/mods/species/bayliens/unathi/datum/species.dm
@@ -24,13 +24,6 @@
/decl/bodytype/lizard,
/decl/bodytype/lizard/masculine
)
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/tail,
- /decl/natural_attack/claws,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/sharp
- )
available_accessory_categories = list(
SAC_HORNS,
diff --git a/mods/species/bayliens/unathi/datum/species_bodytypes.dm b/mods/species/bayliens/unathi/datum/species_bodytypes.dm
index 33fef3a1188..226241bc9a1 100644
--- a/mods/species/bayliens/unathi/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/unathi/datum/species_bodytypes.dm
@@ -10,7 +10,7 @@
limb_icon_intensity = 0.7
health_hud_intensity = 2
associated_gender = FEMALE
- onmob_state_modifiers = list(slot_w_uniform_str = "f")
+ onmob_state_modifiers = list((slot_w_uniform_str) = "f")
movement_slowdown = 0.5
base_color = "#066000"
appearance_flags = HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
@@ -18,6 +18,7 @@
eye_flash_mod = 1.2
nail_noun = "claws"
uid = "bodytype_unathi_fem"
+ footprints_icon = 'mods/species/bayliens/unathi/icons/footprints.dmi'
age_descriptor = /datum/appearance_descriptor/age/lizard
@@ -33,19 +34,24 @@
)
override_organ_types = list(
- BP_EYES = /obj/item/organ/internal/eyes/lizard,
- BP_BRAIN = /obj/item/organ/internal/brain/lizard
+ BP_EYES = /obj/item/organ/internal/eyes/lizard,
+ BP_BRAIN = /obj/item/organ/internal/brain/lizard
)
- override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/lizard)
+ override_limb_types = list(
+ BP_TAIL = /obj/item/organ/external/tail/lizard,
+ BP_HEAD = /obj/item/organ/external/head/strong_bite,
+ BP_L_HAND = /obj/item/organ/external/hand/clawed,
+ BP_R_HAND = /obj/item/organ/external/hand/right/clawed
+ )
- cold_level_1 = 280 //Default 260 - Lower is better
- cold_level_2 = 220 //Default 200
- cold_level_3 = 130 //Default 120
+ cold_level_1 = 280 //Default 260 - Lower is better
+ cold_level_2 = 220 //Default 200
+ cold_level_3 = 130 //Default 120
- heat_level_1 = 420 //Default 360 - Higher is better
- heat_level_2 = 480 //Default 400
- heat_level_3 = 1100 //Default 1000
+ heat_level_1 = 420 //Default 360 - Higher is better
+ heat_level_2 = 480 //Default 400
+ heat_level_3 = 1100 //Default 1000
heat_discomfort_level = 320
heat_discomfort_strings = list(
@@ -80,3 +86,7 @@
/obj/item/organ/external/tail/lizard
tail_icon = 'mods/species/bayliens/unathi/icons/tail.dmi'
tail_animation_states = 9
+
+/obj/item/organ/external/tail/lizard/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/tail)
+ return unarmed_attack
diff --git a/mods/species/bayliens/unathi/icons/footprints.dmi b/mods/species/bayliens/unathi/icons/footprints.dmi
new file mode 100644
index 00000000000..fe21767b108
Binary files /dev/null and b/mods/species/bayliens/unathi/icons/footprints.dmi differ
diff --git a/mods/species/drakes/_drakes.dme b/mods/species/drakes/_drakes.dme
index 44fa41725be..025f1c54c51 100644
--- a/mods/species/drakes/_drakes.dme
+++ b/mods/species/drakes/_drakes.dme
@@ -1,12 +1,8 @@
#ifndef MODPACK_DRAKES
#define MODPACK_DRAKES
-
-#ifdef MODPACK_FANTASY
-#warn Fantasy modpack loaded before Drakes modpack, compatibility features will be missing.
-#endif
-
// BEGIN_INCLUDE
#include "_drakes.dm"
+#include "_overrides.dm"
#include "clothing.dm"
#include "culture.dm"
#include "drake_abilities.dm"
diff --git a/mods/species/drakes/_overrides.dm b/mods/species/drakes/_overrides.dm
new file mode 100644
index 00000000000..a4246927c61
--- /dev/null
+++ b/mods/species/drakes/_overrides.dm
@@ -0,0 +1,10 @@
+/obj/item
+ var/_drake_onmob_icon
+ var/_drake_hatchling_onmob_icon
+
+/obj/item/setup_sprite_sheets()
+ . = ..()
+ if(_drake_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA, _drake_onmob_icon)
+ if(_drake_hatchling_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA_HATCHLING, _drake_hatchling_onmob_icon)
diff --git a/mods/species/drakes/clothing.dm b/mods/species/drakes/clothing.dm
index ac23b01ba19..63c803bc1db 100644
--- a/mods/species/drakes/clothing.dm
+++ b/mods/species/drakes/clothing.dm
@@ -1,21 +1,11 @@
+/obj/item/backpack
+ _drake_onmob_icon = 'mods/species/drakes/icons/clothing/backpack.dmi'
+ _drake_hatchling_onmob_icon = 'mods/species/drakes/icons/clothing/hatchling_backpack.dmi'
-/obj/item/backpack/setup_sprite_sheets()
- . = ..()
- if(!(BODYTYPE_GRAFADREKA in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA, 'mods/species/drakes/icons/clothing/backpack.dmi')
- if(!(BODYTYPE_GRAFADREKA_HATCHLING in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA_HATCHLING, 'mods/species/drakes/icons/clothing/hatchling_backpack.dmi')
+/obj/item/card/id
+ _drake_onmob_icon = 'mods/species/drakes/icons/clothing/id.dmi'
+ _drake_hatchling_onmob_icon = 'mods/species/drakes/icons/clothing/hatchling_id.dmi'
-/obj/item/card/id/setup_sprite_sheets()
- . = ..()
- if(!(BODYTYPE_GRAFADREKA in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA, 'mods/species/drakes/icons/clothing/id.dmi')
- if(!(BODYTYPE_GRAFADREKA_HATCHLING in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA_HATCHLING, 'mods/species/drakes/icons/clothing/hatchling_id.dmi')
-
-/obj/item/bag/setup_sprite_sheets()
- . = ..()
- if(!(BODYTYPE_GRAFADREKA in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA, 'mods/species/drakes/icons/clothing/sack.dmi')
- if(!(BODYTYPE_GRAFADREKA_HATCHLING in sprite_sheets))
- LAZYSET(sprite_sheets, BODYTYPE_GRAFADREKA_HATCHLING, 'mods/species/drakes/icons/clothing/hatchling_backpack.dmi')
+/obj/item/bag
+ _drake_onmob_icon = 'mods/species/drakes/icons/clothing/sack.dmi'
+ _drake_hatchling_onmob_icon = 'mods/species/drakes/icons/clothing/hatchling_backpack.dmi'
diff --git a/mods/species/drakes/drake_abilities.dm b/mods/species/drakes/drake_abilities.dm
index dcd67a13ef7..fb4d7b0fcab 100644
--- a/mods/species/drakes/drake_abilities.dm
+++ b/mods/species/drakes/drake_abilities.dm
@@ -6,9 +6,11 @@
spit_projectile_type = /obj/item/projectile/drake_spit/weak
/datum/ability_handler/predator/grafadreka/can_do_ranged_invocation(mob/user, atom/target)
- return istype(user) && user.a_intent == I_HURT && !user.incapacitated() && isatom(target)
+ return ..() || (istype(user) && user.check_intent(I_FLAG_HARM) && !user.incapacitated() && isatom(target))
/datum/ability_handler/predator/grafadreka/do_ranged_invocation(mob/user, atom/target)
+ if((. = ..()))
+ return
if(world.time < next_spit)
to_chat(user, SPAN_WARNING("You cannot spit again so soon!"))
return TRUE
@@ -24,9 +26,9 @@
return TRUE
/datum/ability_handler/predator/grafadreka/do_melee_invocation(mob/user, atom/target)
- if(user.a_intent == I_HURT)
- return ..() // Handled by predator ability handler.
+ if((. = ..()))
+ return
// Healing
- if(user.a_intent == I_HELP && isliving(target))
+ if(user.check_intent(I_FLAG_HELP) && isliving(target))
return handle_wound_cleaning(user, target)
return FALSE
diff --git a/mods/species/drakes/drake_abilities_friendly.dm b/mods/species/drakes/drake_abilities_friendly.dm
index 6a1d8796c13..a224540e988 100644
--- a/mods/species/drakes/drake_abilities_friendly.dm
+++ b/mods/species/drakes/drake_abilities_friendly.dm
@@ -86,7 +86,7 @@ var/global/list/_wounds_being_tended_by_drakes = list()
// Sivian animals get a heal buff from the modifier, others just
// get it to stop friendly drakes constantly licking their wounds.
// Organ wounds are closed, but the owners get sifsap injected via open wounds.
- friend.add_aura(new /obj/aura/sifsap_salve(null, 60 SECONDS))
+ friend.add_aura(new /obj/aura/sifsap_salve(friend, 60 SECONDS))
var/list/friend_organs = friend.get_external_organs()
if(length(friend_organs))
for (var/obj/item/organ/external/E in friend_organs)
diff --git a/mods/species/drakes/drake_attacks.dm b/mods/species/drakes/drake_attacks.dm
index df214d9fc54..53d3fe7addc 100644
--- a/mods/species/drakes/drake_attacks.dm
+++ b/mods/species/drakes/drake_attacks.dm
@@ -16,25 +16,31 @@
wound.disinfected = FALSE
// 50% damage bonus on prone, stunned or confused enemies.
+/decl/natural_attack/bite/sharp/drake
+ damage = 12 // chomp
+
/decl/natural_attack/bite/sharp/drake/get_unarmed_damage(mob/living/user, mob/living/victim)
. = ..()
if(victim.current_posture?.prone || HAS_STATUS(victim, STAT_CONFUSE) || HAS_STATUS(victim, STAT_STUN))
. = max(1, round(. * 1.5))
+/decl/natural_attack/claws/strong/drake
+ damage = 8 // chonky for digging
+
/decl/natural_attack/claws/strong/drake/get_unarmed_damage(mob/living/user, mob/living/victim)
. = ..()
if(victim.current_posture?.prone || HAS_STATUS(victim, STAT_CONFUSE) || HAS_STATUS(victim, STAT_STUN))
. = max(1, round(. * 1.5))
// Raises germ level of wounds on attack.
-/decl/natural_attack/bite/sharp/drake/apply_effects(mob/living/user, mob/living/target, attack_damage, zone)
+/decl/natural_attack/bite/sharp/drake/apply_attack_effects(mob/living/user, mob/living/target, attack_damage, zone)
. = ..()
if(. && drake_spend_sap(user, 5))
var/obj/item/organ/external/bit = target.get_organ(zone)
if(bit)
drake_infect_wounds(bit)
-/decl/natural_attack/claws/strong/drake/apply_effects(mob/living/user, mob/living/target, attack_damage, zone)
+/decl/natural_attack/claws/strong/drake/apply_attack_effects(mob/living/user, mob/living/target, attack_damage, zone)
. = ..()
if(. && drake_spend_sap(user, 5))
var/obj/item/organ/external/bit = target.get_organ(zone)
diff --git a/mods/species/drakes/icons/damage.dmi b/mods/species/drakes/icons/damage.dmi
new file mode 100644
index 00000000000..189ce8a346c
Binary files /dev/null and b/mods/species/drakes/icons/damage.dmi differ
diff --git a/mods/species/drakes/sifsap.dm b/mods/species/drakes/sifsap.dm
index f0fd4f179ef..5334839e70f 100644
--- a/mods/species/drakes/sifsap.dm
+++ b/mods/species/drakes/sifsap.dm
@@ -44,9 +44,9 @@
M.add_chemical_effect(CE_PULSE, -1)
return ..()
-/decl/material/liquid/sifsap/affect_overdose(mob/living/M, total_dose)
- if(M.has_trait(/decl/trait/sivian_biochemistry))
+/decl/material/liquid/sifsap/affect_overdose(mob/living/victim, total_dose)
+ if(victim.has_trait(/decl/trait/sivian_biochemistry))
return
- M.apply_damage(1, IRRADIATE)
- SET_STATUS_MAX(M, 5, STAT_DROWSY)
+ victim.apply_damage(1, IRRADIATE)
+ SET_STATUS_MAX(victim, 5, STAT_DROWSY)
return ..()
diff --git a/mods/species/drakes/species.dm b/mods/species/drakes/species.dm
index bbc187694bf..a3a14352074 100644
--- a/mods/species/drakes/species.dm
+++ b/mods/species/drakes/species.dm
@@ -20,10 +20,7 @@
/decl/pronouns/male,
/decl/pronouns/female
)
- unarmed_attacks = list(
- /decl/natural_attack/bite/sharp/drake,
- /decl/natural_attack/claws/strong/drake
- )
+
force_background_info = list(
/decl/background_category/heritage = /decl/background_detail/heritage/grafadreka,
/decl/background_category/homeworld = /decl/background_detail/location/grafadreka,
@@ -37,16 +34,11 @@
traits = list(
/decl/trait/sivian_biochemistry = TRAIT_LEVEL_EXISTS
)
+ move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
// Drakes must be whitelisted for jobs to be able to join as them, see maps.dm.
job_blacklist_by_default = TRUE
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
- character_preview_screen_locs = list(
- "1" = "character_preview_map:1,4:36",
- "2" = "character_preview_map:1,3:31",
- "4" = "character_preview_map:1,2:26",
- "8" = "character_preview_map:1,1:21"
- )
var/list/adult_pain_emotes_with_pain_level = list(
list(/decl/emote/audible/drake_huff, /decl/emote/audible/drake_rattle) = 20
@@ -63,15 +55,12 @@
pain_emotes_with_pain_level = adult_pain_emotes_with_pain_level
return ..()
-/decl/species/grafadreka/get_surgery_overlay_icon(var/mob/living/human/H)
- return null // todo: 'mods/species/drakes/icons/surgery.dmi'
-
// Stub for muscle memory of the Sit verb on Polaris.
/mob/living/human/proc/drake_sit()
set name = "Sit"
set category = "IC"
set src = usr
- lay_down()
+ lay_down(block_posture = /decl/posture/lying)
/datum/hud_data/grafadreka
inventory_slots = list(
diff --git a/mods/species/drakes/species_bodytypes.dm b/mods/species/drakes/species_bodytypes.dm
index daec4b0ea06..aae52bd678a 100644
--- a/mods/species/drakes/species_bodytypes.dm
+++ b/mods/species/drakes/species_bodytypes.dm
@@ -28,18 +28,27 @@
eye_icon = 'mods/species/drakes/icons/eyes.dmi'
icon_template = 'mods/species/drakes/icons/template.dmi'
skeletal_icon = 'mods/species/drakes/icons/skeleton.dmi'
+ damage_overlays = 'mods/species/drakes/icons/damage.dmi'
+ surgery_overlay_icon = null // todo: 'mods/species/drakes/icons/surgery.dmi'
bodytype_category = BODYTYPE_GRAFADREKA
eye_blend = ICON_MULTIPLY
limb_blend = ICON_MULTIPLY
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR
mob_size = MOB_SIZE_LARGE
- override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/grafadreka)
+ override_limb_types = list(
+ BP_TAIL = /obj/item/organ/external/tail/grafadreka,
+ BP_L_HAND = /obj/item/organ/external/hand/quadruped/grafadreka,
+ BP_R_HAND = /obj/item/organ/external/hand/right/quadruped/grafadreka,
+ BP_HEAD = /obj/item/organ/external/head/gripper/grafadreka
+ )
base_color = "#608894"
base_eye_color = COLOR_SILVER
pixel_offset_x = -16
antaghud_offset_x = 16
override_organ_types = list(BP_DRAKE_GIZZARD = /obj/item/organ/internal/drake_gizzard)
uid = "bodytype_drake"
+ footprints_icon = 'icons/mob/footprints/footprints_paw.dmi'
+
additional_emotes = list(
/decl/emote/audible/drake_warble,
/decl/emote/audible/drake_purr,
@@ -88,6 +97,13 @@
/decl/emote/visible/tfist
)
+ character_preview_screen_locs = list(
+ "1" = "character_preview_map:1,4:36",
+ "2" = "character_preview_map:1,3:31",
+ "4" = "character_preview_map:1,2:26",
+ "8" = "character_preview_map:1,1:21"
+ )
+
available_mob_postures = list(
/decl/posture/standing,
/decl/posture/lying/drake,
@@ -118,48 +134,58 @@
eye_low_light_vision_adjustment_speed = 0.3
eye_darksight_range = 7
- var/list/sitting_equip_adjust
- var/list/lying_equip_adjust
+ // Copied from riot armor, as drakes cannot wear equipment
+ // or hold shields. May need to be toned down at some point.
+ natural_armour_values = list(
+ ARMOR_MELEE = ARMOR_MELEE_VERY_HIGH,
+ ARMOR_BULLET = ARMOR_BALLISTIC_SMALL,
+ ARMOR_LASER = ARMOR_LASER_SMALL,
+ ARMOR_ENERGY = ARMOR_ENERGY_MINOR,
+ ARMOR_BOMB = ARMOR_BOMB_PADDED
+ )
+
+ VAR_PRIVATE/list/_sitting_equip_adjust
+ VAR_PRIVATE/list/_lying_equip_adjust
/decl/bodytype/quadruped/grafadreka/Initialize()
- if(!length(equip_adjust))
- equip_adjust = list(
- slot_head_str = list(
+ if(!length(_equip_adjust))
+ _equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list(16, -8),
"[SOUTH]" = list(16, -12),
- "[EAST]" = list(38, -8),
- "[WEST]" = list(-6, -8)
+ "[EAST]" = list(38, -8),
+ "[WEST]" = list(-6, -8)
)
)
- if(!length(sitting_equip_adjust))
- sitting_equip_adjust = list(
- slot_head_str = list(
+ if(!length(_sitting_equip_adjust))
+ _sitting_equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list(16, -2),
"[SOUTH]" = list(16, -2),
- "[EAST]" = list(22, -2),
- "[WEST]" = list(12, -2)
+ "[EAST]" = list(22, -2),
+ "[WEST]" = list(12, -2)
)
)
- if(!length(lying_equip_adjust))
- lying_equip_adjust = list(
- slot_head_str = list(
+ if(!length(_lying_equip_adjust))
+ _lying_equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 24, -24),
"[SOUTH]" = list( 24, -24),
- "[EAST]" = list( 24, -24),
- "[WEST]" = list(-10, -24)
+ "[EAST]" = list( 24, -24),
+ "[WEST]" = list(-10, -24)
)
)
return ..()
-/decl/bodytype/quadruped/grafadreka/get_equip_adjust(mob/mob)
+/decl/bodytype/quadruped/grafadreka/get_equip_adjustments(mob/mob)
switch(mob.current_posture?.name)
if("lying", "resting")
- return lying_equip_adjust
+ return _lying_equip_adjust
if("sitting")
- return sitting_equip_adjust
+ return _sitting_equip_adjust
return ..()
/decl/bodytype/quadruped/grafadreka/hatchling
@@ -168,6 +194,7 @@
blood_overlays = 'mods/species/drakes/icons/hatchling_blood.dmi'
eye_icon = 'mods/species/drakes/icons/hatchling_eyes.dmi'
icon_template = 'icons/mob/human_races/species/template.dmi'
+ damage_overlays = 'icons/mob/human_races/species/default_damage_overlays.dmi'
bodytype_category = BODYTYPE_GRAFADREKA_HATCHLING
mob_size = MOB_SIZE_SMALL
pixel_offset_x = 0
@@ -176,9 +203,14 @@
/datum/ability_handler/predator/grafadreka/hatchling
)
z_flags = 0
+ // TODO: weaker attack subtypes for the baby
override_limb_types = list(
- BP_TAIL = /obj/item/organ/external/tail/grafadreka/hatchling
+ BP_TAIL = /obj/item/organ/external/tail/grafadreka/hatchling,
+ BP_L_HAND = /obj/item/organ/external/hand/quadruped/grafadreka,
+ BP_R_HAND = /obj/item/organ/external/hand/right/quadruped/grafadreka,
+ BP_HEAD = /obj/item/organ/external/head/gripper/grafadreka
)
+
default_emotes = list(
/decl/emote/audible/drake_hatchling_growl,
/decl/emote/audible/drake_hatchling_whine,
@@ -187,34 +219,35 @@
/decl/emote/audible/drake_sneeze
)
age_descriptor = /datum/appearance_descriptor/age/grafadreka/hatchling
+ character_preview_screen_locs = null
uid = "bodytype_drake_hatchling"
/decl/bodytype/quadruped/grafadreka/hatchling/Initialize()
- if(!length(equip_adjust))
- equip_adjust = list(
- slot_head_str = list(
+ if(!length(_equip_adjust))
+ _equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 0, -18),
"[SOUTH]" = list( 0, -18),
- "[EAST]" = list( 8, -18),
- "[WEST]" = list(-8, -18)
+ "[EAST]" = list( 8, -18),
+ "[WEST]" = list(-8, -18)
)
)
- if(!length(sitting_equip_adjust))
- sitting_equip_adjust = list(
- slot_head_str = list(
+ if(!length(_sitting_equip_adjust))
+ _sitting_equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 0, -14),
"[SOUTH]" = list( 0, -14),
- "[EAST]" = list( 4, -14),
- "[WEST]" = list(-4, -14)
+ "[EAST]" = list( 4, -14),
+ "[WEST]" = list(-4, -14)
)
)
- if(!length(lying_equip_adjust))
- lying_equip_adjust = list(
- slot_head_str = list(
+ if(!length(_lying_equip_adjust))
+ _lying_equip_adjust = list(
+ (slot_head_str) = list(
"[NORTH]" = list( 0, -24),
"[SOUTH]" = list( 0, -24),
- "[EAST]" = list( 0, -24),
- "[WEST]" = list( 0, -24)
+ "[EAST]" = list( 0, -24),
+ "[WEST]" = list( 0, -24)
)
)
return ..()
@@ -274,3 +307,48 @@
/obj/item/organ/external/tail/grafadreka/hatchling
tail_icon = 'mods/species/drakes/icons/hatchling_body.dmi'
+
+// Technically means that severed drake paws can be used as shovels, but whatever.
+/obj/item/organ/external/hand/quadruped/grafadreka
+ _base_attack_force = 8
+ needs_attack_dexterity = DEXTERITY_NONE
+
+/obj/item/organ/external/hand/quadruped/grafadreka/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/claws/strong/drake)
+ return unarmed_attack
+
+/obj/item/organ/external/hand/quadruped/grafadreka/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype)
+ . = ..()
+ item_flags |= ITEM_FLAG_NO_BLUDGEON
+ set_extension(src, /datum/extension/tool, list(
+ TOOL_SHOVEL = TOOL_QUALITY_GOOD,
+ TOOL_HOE = TOOL_QUALITY_GOOD
+ ))
+
+/obj/item/organ/external/hand/quadruped/grafadreka/set_bodytype(decl/bodytype/new_bodytype, override_material, apply_to_internal_organs)
+ override_material = /decl/material/solid/organic/bone
+ . = ..()
+
+/obj/item/organ/external/hand/right/quadruped/grafadreka
+ _base_attack_force = 8
+ needs_attack_dexterity = DEXTERITY_NONE
+
+/obj/item/organ/external/hand/right/quadruped/grafadreka/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/claws/strong/drake)
+ return unarmed_attack
+
+/obj/item/organ/external/hand/right/quadruped/grafadreka/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype)
+ . = ..()
+ item_flags |= ITEM_FLAG_NO_BLUDGEON
+ set_extension(src, /datum/extension/tool, list(
+ TOOL_SHOVEL = TOOL_QUALITY_GOOD,
+ TOOL_HOE = TOOL_QUALITY_GOOD
+ ))
+
+/obj/item/organ/external/hand/right/quadruped/grafadreka/set_bodytype(decl/bodytype/new_bodytype, override_material, apply_to_internal_organs)
+ override_material = /decl/material/solid/organic/bone
+ . = ..()
+
+/obj/item/organ/external/head/gripper/grafadreka/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/bite/sharp/drake)
+ return unarmed_attack
diff --git a/mods/species/neoavians/_neoavians.dme b/mods/species/neoavians/_neoavians.dme
index e7c8d526399..6c5b71cb056 100644
--- a/mods/species/neoavians/_neoavians.dme
+++ b/mods/species/neoavians/_neoavians.dme
@@ -2,6 +2,7 @@
#define CONTENT_PACK_NEOAVIANS
// BEGIN_INCLUDE
#include "_neoavians.dm"
+#include "_overrides.dm"
#include "clothing.dm"
#include "datum\accessory.dm"
#include "datum\language.dm"
diff --git a/mods/species/neoavians/_overrides.dm b/mods/species/neoavians/_overrides.dm
new file mode 100644
index 00000000000..1d745db0a6f
--- /dev/null
+++ b/mods/species/neoavians/_overrides.dm
@@ -0,0 +1,7 @@
+/obj/item
+ var/_avian_onmob_icon
+
+/obj/item/setup_sprite_sheets()
+ . = ..()
+ if(_avian_onmob_icon)
+ LAZYSET(sprite_sheets, BODYTYPE_AVIAN, _avian_onmob_icon)
diff --git a/mods/species/neoavians/clothing.dm b/mods/species/neoavians/clothing.dm
index 253e9fa2c5e..f4cdcaaed1b 100644
--- a/mods/species/neoavians/clothing.dm
+++ b/mods/species/neoavians/clothing.dm
@@ -1,11 +1,9 @@
//Shoes
-/obj/item/clothing/shoes/magboots/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/feet/magboots.dmi')
+/obj/item/clothing/shoes/magboots
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/feet/magboots.dmi'
-/obj/item/clothing/shoes/galoshes/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/feet/galoshes.dmi')
+/obj/item/clothing/shoes/galoshes
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/feet/galoshes.dmi'
//Gloves
/obj/item/clothing/gloves/setup_equip_flags()
@@ -13,34 +11,32 @@
if(!isnull(bodytype_equip_flags) && !(bodytype_equip_flags & BODY_EQUIP_FLAG_EXCLUDE))
bodytype_equip_flags |= BODY_EQUIP_FLAG_AVIAN
-/obj/item/clothing/gloves/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/gloves.dmi')
+/obj/item/clothing/gloves
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/gloves.dmi'
-//Backpacks & tanks
+/obj/item/clothing/gloves/ring
+ _avian_onmob_icon = null
-/obj/item/backpack/satchel/Initialize()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/satchel.dmi')
+//Backpacks & tanks
+/obj/item/backpack/satchel
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/satchel.dmi'
//Radsuits (theyre essential?)
+/obj/item/clothing/head/radiation
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/head/rad_helm.dmi'
-/obj/item/clothing/head/radiation/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/head/rad_helm.dmi')
+/obj/item/clothing/head/radiation
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/head/rad_helm.dmi'
-/obj/item/clothing/suit/radiation/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/suit/rad_suit.dmi')
+/obj/item/clothing/suit/radiation
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/suit/rad_suit.dmi'
//cloaks
-/obj/item/clothing/suit/cloak/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/accessory/cloak.dmi')
+/obj/item/clothing/suit/cloak
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/accessory/cloak.dmi'
-/obj/item/clothing/suit/cloak/hide/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/accessory/cloak_hide.dmi')
+/obj/item/clothing/suit/cloak/hide
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/accessory/cloak_hide.dmi'
//clothing
/obj/item/clothing/dress/avian_smock
@@ -49,6 +45,7 @@
icon = 'mods/species/neoavians/icons/clothing/under/smock.dmi'
icon_state = ICON_STATE_WORLD
bodytype_equip_flags = BODY_EQUIP_FLAG_AVIAN
+ _avian_onmob_icon = null
/obj/item/clothing/dress/avian_smock/worker
name = "worker's smock"
@@ -81,11 +78,16 @@
name = "stylish uniform"
icon = 'mods/species/neoavians/icons/clothing/under/stylish_form.dmi'
+/obj/item/clothing/shoes
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/feet/shoes.dmi'
+
/obj/item/clothing/shoes/avian
name = "small shoes"
icon = 'mods/species/neoavians/icons/clothing/feet/shoes.dmi'
color = COLOR_GRAY
bodytype_equip_flags = BODY_EQUIP_FLAG_AVIAN
+ _avian_onmob_icon = null
+ icon = 'mods/species/neoavians/icons/clothing/feet/shoes.dmi'
/obj/item/clothing/shoes/avian/footwraps
name = "cloth footwraps"
diff --git a/mods/species/neoavians/datum/species.dm b/mods/species/neoavians/datum/species.dm
index a0bfea025ed..065b6c6d932 100644
--- a/mods/species/neoavians/datum/species.dm
+++ b/mods/species/neoavians/datum/species.dm
@@ -52,12 +52,6 @@
swap_flags = MONKEY|SIMPLE_ANIMAL
push_flags = MONKEY|SIMPLE_ANIMAL
- unarmed_attacks = list(
- /decl/natural_attack/bite/sharp,
- /decl/natural_attack/claws,
- /decl/natural_attack/stomp/weak
- )
-
available_background_info = list(
/decl/background_category/heritage = list(
/decl/background_detail/heritage/neoavian,
diff --git a/mods/species/neoavians/datum/species_bodytypes.dm b/mods/species/neoavians/datum/species_bodytypes.dm
index 204832b50f2..dd1b48d63e3 100644
--- a/mods/species/neoavians/datum/species_bodytypes.dm
+++ b/mods/species/neoavians/datum/species_bodytypes.dm
@@ -39,6 +39,13 @@
base_eye_color = "#f5c842"
mob_size = MOB_SIZE_SMALL
nail_noun = "talons"
+ override_limb_types = list(
+ BP_L_FOOT = /obj/item/organ/external/foot/avian,
+ BP_R_FOOT = /obj/item/organ/external/foot/right/avian,
+ BP_L_HAND = /obj/item/organ/external/hand/clawed,
+ BP_R_HAND = /obj/item/organ/external/hand/right/clawed,
+ BP_HEAD = /obj/item/organ/external/head/sharp_bite
+ )
has_organ = list(
BP_STOMACH = /obj/item/organ/internal/stomach,
BP_HEART = /obj/item/organ/internal/heart,
@@ -94,19 +101,79 @@
uid = "bodytype_avian_additive_raptor"
/decl/bodytype/avian/Initialize()
- equip_adjust = list(
- slot_l_ear_str = list("[NORTH]" = list( 1, -5), "[EAST]" = list(-2, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 0, -5)),
- slot_r_ear_str = list("[NORTH]" = list( 1, -5), "[EAST]" = list( 0, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 2, -5)),
- BP_L_HAND = list("[NORTH]" = list( 3, -3), "[EAST]" = list( 1, -3), "[SOUTH]" = list(-3, -3), "[WEST]" = list(-5, -3)),
- BP_R_HAND = list("[NORTH]" = list(-3, -3), "[EAST]" = list( 5, -3), "[SOUTH]" = list( 3, -3), "[WEST]" = list(-1, -3)),
- slot_head_str = list("[NORTH]" = list( 0, -5), "[EAST]" = list( 1, -5), "[SOUTH]" = list( 0, -5), "[WEST]" = list(-1, -5)),
- slot_wear_mask_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 2, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-2, -6)),
- slot_glasses_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-1, -6)),
- slot_back_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 3, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-3, -6)),
- slot_w_uniform_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
- slot_wear_id_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
- slot_wear_suit_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
- slot_belt_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6))
+ _equip_adjust = list(
+ (slot_l_ear_str) = list(
+ "[NORTH]" = list( 1, -5),
+ "[EAST]" = list(-2, -5),
+ "[SOUTH]" = list(-1, -5),
+ "[WEST]" = list( 0, -5)
+ ),
+ (slot_r_ear_str) = list(
+ "[NORTH]" = list( 1, -5),
+ "[EAST]" = list( 0, -5),
+ "[SOUTH]" = list(-1, -5),
+ "[WEST]" = list( 2, -5)
+ ),
+ (BP_L_HAND) = list(
+ "[NORTH]" = list( 3, -3),
+ "[EAST]" = list( 1, -3),
+ "[SOUTH]" = list(-3, -3),
+ "[WEST]" = list(-5, -3)
+ ),
+ (BP_R_HAND) = list(
+ "[NORTH]" = list(-3, -3),
+ "[EAST]" = list( 5, -3),
+ "[SOUTH]" = list( 3, -3),
+ "[WEST]" = list(-1, -3)
+ ),
+ (slot_head_str) = list(
+ "[NORTH]" = list( 0, -5),
+ "[EAST]" = list( 1, -5),
+ "[SOUTH]" = list( 0, -5),
+ "[WEST]" = list(-1, -5)
+ ),
+ (slot_wear_mask_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list( 2, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list(-2, -6)
+ ),
+ (slot_glasses_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list( 1, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list(-1, -6)
+ ),
+ (slot_back_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list( 3, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list(-3, -6)
+ ),
+ (slot_w_uniform_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list(-1, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list( 1, -6)
+ ),
+ (slot_wear_id_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list(-1, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list( 1, -6)
+ ),
+ (slot_wear_suit_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list(-1, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list( 1, -6)
+ ),
+ (slot_belt_str) = list(
+ "[NORTH]" = list( 0, -6),
+ "[EAST]" = list(-1, -6),
+ "[SOUTH]" = list( 0, -6),
+ "[WEST]" = list( 1, -6)
+ )
)
. = ..()
diff --git a/mods/species/neoavians/icons/clothing/spacesuit/void/medical/helmet.dmi b/mods/species/neoavians/icons/clothing/spacesuit/void/medical/helmet.dmi
index fe7e1534a7e..645c2a006bf 100644
Binary files a/mods/species/neoavians/icons/clothing/spacesuit/void/medical/helmet.dmi and b/mods/species/neoavians/icons/clothing/spacesuit/void/medical/helmet.dmi differ
diff --git a/mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/helmet.dmi b/mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/helmet.dmi
new file mode 100644
index 00000000000..779b0d77fe4
Binary files /dev/null and b/mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/helmet.dmi differ
diff --git a/mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/suit.dmi b/mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/suit.dmi
new file mode 100644
index 00000000000..c84f8e938c6
Binary files /dev/null and b/mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/suit.dmi differ
diff --git a/mods/species/neoavians/machinery/suit_cycler.dm b/mods/species/neoavians/machinery/suit_cycler.dm
index 9b368c30577..4397f39c94d 100644
--- a/mods/species/neoavians/machinery/suit_cycler.dm
+++ b/mods/species/neoavians/machinery/suit_cycler.dm
@@ -4,86 +4,69 @@
//mining
-/obj/item/clothing/suit/space/void/mining/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/suit.dmi')
+/obj/item/clothing/suit/space/void/mining
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/suit.dmi'
-/obj/item/clothing/head/helmet/space/void/mining/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/helmet.dmi')
+/obj/item/clothing/head/helmet/space/void/mining
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/helmet.dmi'
//excavation
+/obj/item/clothing/suit/space/void/excavation
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/suit.dmi'
-/obj/item/clothing/suit/space/void/excavation/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/suit.dmi')
-
-/obj/item/clothing/head/helmet/space/void/excavation/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/helmet.dmi')
+/obj/item/clothing/head/helmet/space/void/excavation
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/mining/helmet.dmi'
//engineering
+/obj/item/clothing/head/helmet/space/void/engineering
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/engineering/helmet.dmi'
-/obj/item/clothing/head/helmet/space/void/engineering/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/engineering/helmet.dmi')
-
-/obj/item/clothing/suit/space/void/engineering/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/engineering/suit.dmi')
+/obj/item/clothing/suit/space/void/engineering
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/engineering/suit.dmi'
-/obj/item/clothing/head/helmet/space/void/atmos/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/atmos/helmet.dmi')
+/obj/item/clothing/head/helmet/space/void/atmos
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/atmos/helmet.dmi'
-/obj/item/clothing/suit/space/void/atmos/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/atmos/suit.dmi')
+/obj/item/clothing/suit/space/void/atmos
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/atmos/suit.dmi'
//medical
+/obj/item/clothing/suit/space/void/medical
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/medical/suit.dmi'
-/obj/item/clothing/suit/space/void/medical/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/medical/suit.dmi')
+/obj/item/clothing/head/helmet/space/void/medical
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/medical/helmet.dmi'
-/obj/item/clothing/head/helmet/space/void/medical/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/medical/helmet.dmi')
+/obj/item/clothing/suit/space/void/medical/alt
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/suit.dmi'
-//security
+/obj/item/clothing/head/helmet/space/void/medical/alt
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/medical_alt/helmet.dmi'
-/obj/item/clothing/head/helmet/space/void/security/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/sec/helmet.dmi')
+//security
+/obj/item/clothing/head/helmet/space/void/security
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/sec/helmet.dmi'
-/obj/item/clothing/suit/space/void/security/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/sec/suit.dmi')
+/obj/item/clothing/suit/space/void/security
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/sec/suit.dmi'
//salvage
+/obj/item/clothing/head/helmet/space/void/engineering/salvage
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/salvage/helmet.dmi'
-/obj/item/clothing/head/helmet/space/void/engineering/salvage/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/salvage/helmet.dmi')
-
-/obj/item/clothing/suit/space/void/engineering/salvage/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/salvage/suit.dmi')
+/obj/item/clothing/suit/space/void/engineering/salvage
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/salvage/suit.dmi'
//pilot
-/obj/item/clothing/head/helmet/space/void/expedition/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/pilot/helmet.dmi')
+/obj/item/clothing/head/helmet/space/void/expedition
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/pilot/helmet.dmi'
-/obj/item/clothing/suit/space/void/expedition/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/pilot/suit.dmi')
+/obj/item/clothing/suit/space/void/expedition
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/pilot/suit.dmi'
//merc
-/obj/item/clothing/head/helmet/space/void/merc/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/merc/helmet.dmi')
+/obj/item/clothing/head/helmet/space/void/merc
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/merc/helmet.dmi'
-/obj/item/clothing/suit/space/void/merc/setup_sprite_sheets()
- . = ..()
- LAZYSET(sprite_sheets, BODYTYPE_AVIAN, 'mods/species/neoavians/icons/clothing/spacesuit/void/merc/suit.dmi')
\ No newline at end of file
+/obj/item/clothing/suit/space/void/merc
+ _avian_onmob_icon = 'mods/species/neoavians/icons/clothing/spacesuit/void/merc/suit.dmi'
\ No newline at end of file
diff --git a/mods/species/serpentid/datum/species.dm b/mods/species/serpentid/datum/species.dm
index ecdce4d3f90..8dc853194d4 100644
--- a/mods/species/serpentid/datum/species.dm
+++ b/mods/species/serpentid/datum/species.dm
@@ -49,13 +49,6 @@
brute_mod = 0.9
burn_mod = 1.35
- natural_armour_values = list(
- ARMOR_MELEE = ARMOR_MELEE_KNIVES,
- ARMOR_BULLET = ARMOR_BALLISTIC_MINOR,
- ARMOR_BOMB = ARMOR_BOMB_PADDED,
- ARMOR_BIO = ARMOR_BIO_SHIELDED,
- ARMOR_RAD = 0.5*ARMOR_RAD_MINOR
- )
gluttonous = GLUT_SMALLER
strength = STR_HIGH
breath_pressure = 25
@@ -67,8 +60,6 @@
swap_flags = ALLMOBS
move_trail = /obj/effect/decal/cleanable/blood/tracks/snake
- unarmed_attacks = list(/decl/natural_attack/forelimb_slash)
-
pain_emotes_with_pain_level = list(
list(/decl/emote/audible/bug_hiss) = 40
)
@@ -84,8 +75,8 @@
#undef SERPENTID_FLIGHT_PRESSURE_THRESHOLD
/decl/species/serpentid/handle_environment_special(var/mob/living/human/H)
- if(!H.on_fire && H.fire_stacks < 2)
- H.fire_stacks += 0.2
+ if(!H.is_on_fire() && H.get_fire_intensity() < 2)
+ H.adjust_fire_intensity(0.2)
return
/decl/species/serpentid/handle_fall_special(var/mob/living/human/H, var/turf/landing)
@@ -108,12 +99,6 @@
return FALSE
-/decl/species/serpentid/can_shred(var/mob/living/human/H, var/ignore_intent, var/ignore_antag)
- if(!H.get_equipped_item(slot_handcuffed_str) || H.buckled)
- return ..(H, ignore_intent, TRUE)
- else
- return 0
-
/decl/species/serpentid/handle_movement_delay_special(var/mob/living/human/victim)
var/tally = 0
victim.remove_cloaking_source(src)
diff --git a/mods/species/serpentid/datum/species_bodytypes.dm b/mods/species/serpentid/datum/species_bodytypes.dm
index 8e9bd1be3b4..947019f4db7 100644
--- a/mods/species/serpentid/datum/species_bodytypes.dm
+++ b/mods/species/serpentid/datum/species_bodytypes.dm
@@ -34,15 +34,16 @@
BP_HEAD = list("path" = /obj/item/organ/external/head/insectoid/serpentid),
BP_L_ARM = list("path" = /obj/item/organ/external/arm/insectoid),
BP_L_HAND = list("path" = /obj/item/organ/external/hand/insectoid),
- BP_L_HAND_UPPER = list("path" = /obj/item/organ/external/hand/insectoid/upper),
+ BP_L_HAND_UPPER = list("path" = /obj/item/organ/external/hand/insectoid/upper/serpentid),
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/insectoid),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/insectoid),
- BP_R_HAND_UPPER = list("path" = /obj/item/organ/external/hand/right/insectoid/upper),
+ BP_R_HAND_UPPER = list("path" = /obj/item/organ/external/hand/right/insectoid/upper/serpentid),
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/insectoid/serpentid),
BP_L_LEG = list("path" = /obj/item/organ/external/leg/insectoid/serpentid),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/insectoid/serpentid),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/insectoid/serpentid)
)
+
appearance_descriptors = list(
/datum/appearance_descriptor/height = 1.75,
/datum/appearance_descriptor/body_length = 1
@@ -56,16 +57,65 @@
heat_level_2 = 440 //Default 400
heat_level_3 = 800 //Default 1000
+ natural_armour_values = list(
+ ARMOR_MELEE = ARMOR_MELEE_KNIVES,
+ ARMOR_BULLET = ARMOR_BALLISTIC_MINOR,
+ ARMOR_BOMB = ARMOR_BOMB_PADDED,
+ ARMOR_BIO = ARMOR_BIO_SHIELDED,
+ ARMOR_RAD = 0.5*ARMOR_RAD_MINOR
+ )
+ footprints_icon = 'icons/mob/footprints/footprints_snake.dmi'
+
/decl/bodytype/serpentid/Initialize()
- equip_adjust = list(
- BP_L_HAND_UPPER = list("[NORTH]" = list( 0, 8), "[EAST]" = list(0, 8), "[SOUTH]" = list(-0, 8), "[WEST]" = list( 0, 8)),
- BP_R_HAND_UPPER = list("[NORTH]" = list( 0, 8), "[EAST]" = list(0, 8), "[SOUTH]" = list( 0, 8), "[WEST]" = list( 0, 8)),
- BP_L_HAND = list("[NORTH]" = list( 4, 0), "[EAST]" = list(0, 0), "[SOUTH]" = list(-4, 0), "[WEST]" = list( 0, 0)),
- BP_R_HAND = list("[NORTH]" = list(-4, 0), "[EAST]" = list(0, 0), "[SOUTH]" = list( 4, 0), "[WEST]" = list( 0, 0)),
- slot_head_str = list("[NORTH]" = list( 0, 7), "[EAST]" = list(0, 8), "[SOUTH]" = list( 0, 8), "[WEST]" = list( 0, 8)),
- slot_back_str = list("[NORTH]" = list( 0, 7), "[EAST]" = list(0, 8), "[SOUTH]" = list( 0, 8), "[WEST]" = list( 0, 8)),
- slot_belt_str = list("[NORTH]" = list( 0, 0), "[EAST]" = list(8, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-8, 0)),
- slot_glasses_str = list("[NORTH]" = list( 0, 10), "[EAST]" = list(0, 11), "[SOUTH]" = list( 0, 11), "[WEST]" = list( 0, 11))
+ _equip_adjust = list(
+ (BP_L_HAND_UPPER) = list(
+ "[NORTH]" = list( 0, 8),
+ "[EAST]" = list( 0, 8),
+ "[SOUTH]" = list(-0, 8),
+ "[WEST]" = list( 0, 8)
+ ),
+ (BP_R_HAND_UPPER) = list(
+ "[NORTH]" = list( 0, 8),
+ "[EAST]" = list( 0, 8),
+ "[SOUTH]" = list( 0, 8),
+ "[WEST]" = list( 0, 8)
+ ),
+ (BP_L_HAND) = list(
+ "[NORTH]" = list( 4, 0),
+ "[EAST]" = list( 0, 0),
+ "[SOUTH]" = list(-4, 0),
+ "[WEST]" = list( 0, 0)
+ ),
+ (BP_R_HAND) = list(
+ "[NORTH]" = list(-4, 0),
+ "[EAST]" = list( 0, 0),
+ "[SOUTH]" = list( 4, 0),
+ "[WEST]" = list( 0, 0)
+ ),
+ (slot_head_str) = list(
+ "[NORTH]" = list( 0, 7),
+ "[EAST]" = list( 0, 8),
+ "[SOUTH]" = list( 0, 8),
+ "[WEST]" = list( 0, 8)
+ ),
+ (slot_back_str) = list(
+ "[NORTH]" = list( 0, 7),
+ "[EAST]" = list( 0, 8),
+ "[SOUTH]" = list( 0, 8),
+ "[WEST]" = list( 0, 8)
+ ),
+ (slot_belt_str) = list(
+ "[NORTH]" = list( 0, 0),
+ "[EAST]" = list( 8, 0),
+ "[SOUTH]" = list( 0, 0),
+ "[WEST]" = list(-8, 0)
+ ),
+ (slot_glasses_str) = list(
+ "[NORTH]" = list( 0, 10),
+ "[EAST]" = list( 0, 11),
+ "[SOUTH]" = list( 0, 11),
+ "[WEST]" = list( 0, 11)
+ )
)
. = ..()
@@ -73,3 +123,11 @@
name = "green"
icon_base = 'mods/species/serpentid/icons/body_green.dmi'
uid = "bodytype_serpentid_green"
+
+/obj/item/organ/external/hand/insectoid/upper/serpentid/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/forelimb_slash)
+ return unarmed_attack
+
+/obj/item/organ/external/hand/right/insectoid/upper/serpentid/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/forelimb_slash)
+ return unarmed_attack
diff --git a/mods/species/skrell/datum/species.dm b/mods/species/skrell/datum/species.dm
index 59a1be8470a..76c57542f62 100644
--- a/mods/species/skrell/datum/species.dm
+++ b/mods/species/skrell/datum/species.dm
@@ -12,12 +12,6 @@
)
primitive_form = "Neaera"
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite
- )
description = "The skrell are a highly advanced species of amphibians hailing from \
the system known as Qerr'Vallis, which translates to 'Star of the royals' or 'Light of the Crown'. \
diff --git a/mods/species/tajaran/datum/species.dm b/mods/species/tajaran/datum/species.dm
index bc39f5beedc..e6e5c8673a7 100644
--- a/mods/species/tajaran/datum/species.dm
+++ b/mods/species/tajaran/datum/species.dm
@@ -52,13 +52,6 @@
thirst_factor = DEFAULT_THIRST_FACTOR * 1.2
gluttonous = GLUT_TINY
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/sharp
- )
-
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
default_emotes = list(
diff --git a/mods/species/tajaran/datum/species_bodytypes.dm b/mods/species/tajaran/datum/species_bodytypes.dm
index 7d46eb828c6..a6be9223460 100644
--- a/mods/species/tajaran/datum/species_bodytypes.dm
+++ b/mods/species/tajaran/datum/species_bodytypes.dm
@@ -27,9 +27,11 @@
eye_low_light_vision_adjustment_speed = 0.3
override_limb_types = list(
- BP_TAIL = /obj/item/organ/external/tail/cat
+ BP_TAIL = /obj/item/organ/external/tail/cat,
+ BP_HEAD = /obj/item/organ/external/head/sharp_bite,
+ BP_L_HAND = /obj/item/organ/external/hand/clawed,
+ BP_R_HAND = /obj/item/organ/external/hand/right/clawed
)
-
default_sprite_accessories = list(
SAC_HAIR = list(/decl/sprite_accessory/hair/taj/lynx = list(SAM_COLOR = "#46321c")),
SAC_MARKINGS = list(/decl/sprite_accessory/marking/tajaran/ears = list(SAM_COLOR = "#ae7d32"))
@@ -52,10 +54,10 @@
)
/decl/bodytype/feline/Initialize()
- equip_adjust = list(
- slot_glasses_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
- slot_wear_mask_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
- slot_head_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2))
+ _equip_adjust = list(
+ (slot_glasses_str) = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
+ (slot_wear_mask_str) = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
+ (slot_head_str) = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2))
)
. = ..()
diff --git a/mods/species/teshari/datum/species.dm b/mods/species/teshari/datum/species.dm
index 961dcca689c..fee57b3d085 100644
--- a/mods/species/teshari/datum/species.dm
+++ b/mods/species/teshari/datum/species.dm
@@ -53,12 +53,6 @@
swap_flags = MONKEY|SIMPLE_ANIMAL
push_flags = MONKEY|SIMPLE_ANIMAL
- unarmed_attacks = list(
- /decl/natural_attack/bite/sharp,
- /decl/natural_attack/claws,
- /decl/natural_attack/stomp/weak
- )
-
blood_types = list(
/decl/blood_type/avian/taplus,
/decl/blood_type/avian/taminus,
diff --git a/mods/species/teshari/datum/species_bodytypes.dm b/mods/species/teshari/datum/species_bodytypes.dm
index f6b07f3ab87..8ce0a9ee7e4 100644
--- a/mods/species/teshari/datum/species_bodytypes.dm
+++ b/mods/species/teshari/datum/species_bodytypes.dm
@@ -12,6 +12,13 @@
base_eye_color = "#f5c842"
mob_size = MOB_SIZE_SMALL
nail_noun = "talons"
+ override_limb_types = list(
+ BP_L_FOOT = /obj/item/organ/external/foot/avian,
+ BP_R_FOOT = /obj/item/organ/external/foot/right/avian,
+ BP_L_HAND = /obj/item/organ/external/hand/clawed,
+ BP_R_HAND = /obj/item/organ/external/hand/right/clawed,
+ BP_HEAD = /obj/item/organ/external/head/sharp_bite
+ )
has_organ = list(
BP_STOMACH = /obj/item/organ/internal/stomach,
BP_HEART = /obj/item/organ/internal/heart,
@@ -21,7 +28,6 @@
BP_BRAIN = /obj/item/organ/internal/brain,
BP_EYES = /obj/item/organ/internal/eyes
)
- override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/avian)
default_sprite_accessories = list(
SAC_HAIR = list(/decl/sprite_accessory/hair/avian = list(SAM_COLOR = "#252525")),
SAC_MARKINGS = list(/decl/sprite_accessory/marking/avian = list(SAM_COLOR = "#454545"))
@@ -67,19 +73,19 @@
uid = "bodytype_avian_additive_raptor"
/decl/bodytype/avian/Initialize()
- equip_adjust = list(
- slot_l_ear_str = list("[NORTH]" = list( 1, -5), "[EAST]" = list(-2, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 0, -5)),
- slot_r_ear_str = list("[NORTH]" = list( 1, -5), "[EAST]" = list( 0, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 2, -5)),
- BP_L_HAND = list("[NORTH]" = list( 3, -3), "[EAST]" = list( 1, -3), "[SOUTH]" = list(-3, -3), "[WEST]" = list(-5, -3)),
- BP_R_HAND = list("[NORTH]" = list(-3, -3), "[EAST]" = list( 5, -3), "[SOUTH]" = list( 3, -3), "[WEST]" = list(-1, -3)),
- slot_head_str = list("[NORTH]" = list( 0, -5), "[EAST]" = list( 1, -5), "[SOUTH]" = list( 0, -5), "[WEST]" = list(-1, -5)),
- slot_wear_mask_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 2, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-2, -6)),
- slot_glasses_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-1, -6)),
- slot_back_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 3, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-3, -6)),
- slot_w_uniform_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
- slot_wear_id_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
- slot_wear_suit_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
- slot_belt_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6))
+ _equip_adjust = list(
+ (slot_l_ear_str) = list("[NORTH]" = list( 1, -5), "[EAST]" = list(-2, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 0, -5)),
+ (slot_r_ear_str) = list("[NORTH]" = list( 1, -5), "[EAST]" = list( 0, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 2, -5)),
+ (BP_L_HAND) = list("[NORTH]" = list( 3, -3), "[EAST]" = list( 1, -3), "[SOUTH]" = list(-3, -3), "[WEST]" = list(-5, -3)),
+ (BP_R_HAND) = list("[NORTH]" = list(-3, -3), "[EAST]" = list( 5, -3), "[SOUTH]" = list( 3, -3), "[WEST]" = list(-1, -3)),
+ (slot_head_str) = list("[NORTH]" = list( 0, -5), "[EAST]" = list( 1, -5), "[SOUTH]" = list( 0, -5), "[WEST]" = list(-1, -5)),
+ (slot_wear_mask_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 2, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-2, -6)),
+ (slot_glasses_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-1, -6)),
+ (slot_back_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 3, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-3, -6)),
+ (slot_w_uniform_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
+ (slot_wear_id_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
+ (slot_wear_suit_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
+ (slot_belt_str) = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6))
)
. = ..()
diff --git a/mods/species/unathi/datum/species.dm b/mods/species/unathi/datum/species.dm
index 5eed1b3b6b5..9a63a510ab5 100644
--- a/mods/species/unathi/datum/species.dm
+++ b/mods/species/unathi/datum/species.dm
@@ -24,13 +24,6 @@
/decl/bodytype/unathi,
/decl/bodytype/unathi/masculine
)
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/tail,
- /decl/natural_attack/claws,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/sharp
- )
available_accessory_categories = list(
SAC_HORNS,
diff --git a/mods/species/unathi/datum/species_bodytypes.dm b/mods/species/unathi/datum/species_bodytypes.dm
index e3fe7d1cbe1..8f1278f846c 100644
--- a/mods/species/unathi/datum/species_bodytypes.dm
+++ b/mods/species/unathi/datum/species_bodytypes.dm
@@ -19,6 +19,13 @@
nail_noun = "claws"
uid = "bodytype_unathi_fem"
+ override_limb_types = list(
+ BP_TAIL = /obj/item/organ/external/tail/unathi,
+ BP_HEAD = /obj/item/organ/external/head/strong_bite,
+ BP_L_HAND = /obj/item/organ/external/hand/clawed,
+ BP_R_HAND = /obj/item/organ/external/hand/right/clawed
+ )
+
age_descriptor = /datum/appearance_descriptor/age/unathi
default_sprite_accessories = list(
@@ -80,3 +87,7 @@
/obj/item/organ/external/tail/unathi
tail_icon = 'mods/species/unathi/icons/tail.dmi'
tail_animation_states = 9
+
+/obj/item/organ/external/tail/unathi/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/tail)
+ return unarmed_attack
diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm
index 77a9f1f7ebc..ddfeb4ac191 100644
--- a/mods/species/utility_frames/species.dm
+++ b/mods/species/utility_frames/species.dm
@@ -32,11 +32,6 @@
preview_outfit = null
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch
- )
available_pronouns = list(
/decl/pronouns,
/decl/pronouns/neuter
@@ -92,11 +87,6 @@
preview_outfit = null
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/punch
- )
available_pronouns = list(
/decl/pronouns,
/decl/pronouns/neuter
diff --git a/mods/species/utility_frames/species_bodytypes.dm b/mods/species/utility_frames/species_bodytypes.dm
index a60628a7c51..eaa1db4e356 100644
--- a/mods/species/utility_frames/species_bodytypes.dm
+++ b/mods/species/utility_frames/species_bodytypes.dm
@@ -10,7 +10,7 @@
body_flags = BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
base_color = "#333355"
base_eye_color = "#00ccff"
- material = /decl/material/solid/metal/steel
+ organ_material = /decl/material/solid/metal/steel
vital_organs = list(
BP_BRAIN,
BP_CELL
@@ -32,14 +32,14 @@
uid = "bodytype_prosthetic_utility_frame"
/decl/bodytype/prosthetic/utility_frame/Initialize()
- equip_adjust = list(
- "[slot_l_ear_str]" = list(
+ _equip_adjust = list(
+ (slot_l_ear_str) = list(
"[NORTH]" = list( 2, 0),
"[EAST]" = list( 0, 0),
"[SOUTH]" = list(-2, 0),
"[WEST]" = list( 0, 0)
),
- "[slot_r_ear_str]" = list(
+ (slot_r_ear_str) = list(
"[NORTH]" = list(-2, 0),
"[EAST]" = list( 0, 0),
"[SOUTH]" = list( 2, 0),
@@ -49,7 +49,6 @@
. = ..()
DEFINE_ROBOLIMB_DESIGNS(/decl/bodytype/prosthetic/utility_frame, utility_frame)
-
/decl/bodytype/prosthetic/utility_frame/positronic
has_organ = list(
BP_BRAIN = /obj/item/organ/internal/brain/robotic/positronic,
diff --git a/mods/species/vox/_vox.dme b/mods/species/vox/_vox.dme
index 99bd0717bac..0e0e635d99b 100644
--- a/mods/species/vox/_vox.dme
+++ b/mods/species/vox/_vox.dme
@@ -5,11 +5,9 @@
#include "mobs_vox.dm"
#include "organs_vox.dm"
#include "datum\accessories.dm"
-#include "datum\antagonism.dm"
#include "datum\cultures_vox.dm"
#include "datum\descriptors_vox.dm"
#include "datum\factions_vox.dm"
-#include "datum\heist_compatibility.dm"
#include "datum\language.dm"
#include "datum\locations_vox.dm"
#include "datum\outfits.dm"
diff --git a/mods/species/vox/datum/antagonism.dm b/mods/species/vox/datum/antagonism.dm
deleted file mode 100644
index 4b8c182ee3a..00000000000
--- a/mods/species/vox/datum/antagonism.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-// Wizard
-/obj/item/magic_rock/Initialize(ml, material_key)
- LAZYSET(potentials, SPECIES_VOX, /spell/targeted/shapeshift/true_form)
- . = ..()
diff --git a/mods/species/vox/datum/outfits.dm b/mods/species/vox/datum/outfits.dm
index d1e653cb68e..564db2796e4 100644
--- a/mods/species/vox/datum/outfits.dm
+++ b/mods/species/vox/datum/outfits.dm
@@ -12,9 +12,9 @@
hands = list(/obj/item/gun/launcher/alien/spikethrower)
id_type = /obj/item/card/id/syndicate
-/decl/outfit/vox_raider/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
+/decl/outfit/vox_raider/equip_outfit(mob/living/wearer, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
uniform = pick(/obj/item/clothing/suit/robe/vox, /obj/item/clothing/pants/vox)
glasses = pick(/obj/item/clothing/glasses/thermal, /obj/item/clothing/glasses/thermal/plain/eyepatch, /obj/item/clothing/glasses/thermal/plain/monocle)
holster = pick(/obj/item/clothing/webbing/holster/armpit, /obj/item/clothing/webbing/holster/waist, /obj/item/clothing/webbing/holster/hip)
. = ..()
- H.set_internals(locate(/obj/item/tank) in H.contents)
\ No newline at end of file
+ wearer.set_internals(locate(/obj/item/tank) in wearer.contents)
\ No newline at end of file
diff --git a/mods/species/vox/datum/species.dm b/mods/species/vox/datum/species.dm
index 02f7fed9313..eac1ad15786 100644
--- a/mods/species/vox/datum/species.dm
+++ b/mods/species/vox/datum/species.dm
@@ -32,14 +32,6 @@
/mob/living/human/proc/toggle_vox_pressure_seal
)
- unarmed_attacks = list(
- /decl/natural_attack/stomp,
- /decl/natural_attack/kick,
- /decl/natural_attack/claws/strong/gloves,
- /decl/natural_attack/punch,
- /decl/natural_attack/bite/strong
- )
-
rarity_value = 4
description = {"The Vox are the broken remnants of a once-proud race, now reduced to little more
diff --git a/mods/species/vox/datum/species_bodytypes.dm b/mods/species/vox/datum/species_bodytypes.dm
index 25f4e64c180..092cfeb50b9 100644
--- a/mods/species/vox/datum/species_bodytypes.dm
+++ b/mods/species/vox/datum/species_bodytypes.dm
@@ -30,9 +30,13 @@
BP_BRAIN
)
override_limb_types = list(
- BP_GROIN = /obj/item/organ/external/groin/vox,
- BP_TAIL = /obj/item/organ/external/tail/vox
+ BP_GROIN = /obj/item/organ/external/groin/vox,
+ BP_TAIL = /obj/item/organ/external/tail/vox,
+ BP_L_HAND = /obj/item/organ/external/hand/vox,
+ BP_R_HAND = /obj/item/organ/external/hand/right/vox,
+ BP_HEAD = /obj/item/organ/external/head/strong_bite
)
+
has_organ = list(
BP_STOMACH = /obj/item/organ/internal/stomach/vox,
BP_HEART = /obj/item/organ/internal/heart/vox,
@@ -60,17 +64,62 @@
var/icon/vox_marking_icon = 'mods/species/vox/icons/body/soldier/markings.dmi'
/decl/bodytype/vox/Initialize()
- if(!length(equip_adjust))
- equip_adjust = list(
- BP_L_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)),
- BP_R_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)),
- slot_head_str = list("[NORTH]" = list(0, -2), "[EAST]" = list(3, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list(-3, -2)),
- slot_wear_mask_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(4, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-4, 0)),
- slot_wear_suit_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
- slot_w_uniform_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
- slot_underpants_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
- slot_undershirt_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
- slot_back_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(3, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-3, 0))
+ if(!length(_equip_adjust))
+ _equip_adjust = list(
+ (BP_L_HAND) = list(
+ "[NORTH]" = list(0, -2),
+ "[EAST]" = list(0, -2),
+ "[SOUTH]" = list( 0, -2),
+ "[WEST]" = list( 0, -2)
+ ),
+ (BP_R_HAND) = list(
+ "[NORTH]" = list(0, -2),
+ "[EAST]" = list(0, -2),
+ "[SOUTH]" = list( 0, -2),
+ "[WEST]" = list( 0, -2)
+ ),
+ (slot_head_str) = list(
+ "[NORTH]" = list(0, -2),
+ "[EAST]" = list(3, -2),
+ "[SOUTH]" = list( 0, -2),
+ "[WEST]" = list(-3, -2)
+ ),
+ (slot_wear_mask_str) = list(
+ "[NORTH]" = list(0, 0),
+ "[EAST]" = list(4, 0),
+ "[SOUTH]" = list( 0, 0),
+ "[WEST]" = list(-4, 0)
+ ),
+ (slot_wear_suit_str) = list(
+ "[NORTH]" = list(0, -1),
+ "[EAST]" = list(0, -1),
+ "[SOUTH]" = list( 0, -1),
+ "[WEST]" = list( 0, -1)
+ ),
+ (slot_w_uniform_str) = list(
+ "[NORTH]" = list(0, -1),
+ "[EAST]" = list(0, -1),
+ "[SOUTH]" = list( 0, -1),
+ "[WEST]" = list( 0, -1)
+ ),
+ (slot_underpants_str) = list(
+ "[NORTH]" = list(0, -1),
+ "[EAST]" = list(0, -1),
+ "[SOUTH]" = list( 0, -1),
+ "[WEST]" = list( 0, -1)
+ ),
+ (slot_undershirt_str) = list(
+ "[NORTH]" = list(0, -1),
+ "[EAST]" = list(0, -1),
+ "[SOUTH]" = list( 0, -1),
+ "[WEST]" = list( 0, -1)
+ ),
+ (slot_back_str) = list(
+ "[NORTH]" = list(0, 0),
+ "[EAST]" = list(3, 0),
+ "[SOUTH]" = list( 0, 0),
+ "[WEST]" = list(-3, 0)
+ )
)
return ..()
@@ -127,3 +176,11 @@
/obj/item/organ/external/tail/vox/stanchion
tail_icon = 'mods/species/vox/icons/body/stanchion/body.dmi'
+
+/obj/item/organ/external/hand/vox/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/claws/strong/gloves)
+ return unarmed_attack
+
+/obj/item/organ/external/hand/right/vox/get_natural_attacks()
+ var/static/unarmed_attack = GET_DECL(/decl/natural_attack/claws/strong/gloves)
+ return unarmed_attack
diff --git a/mods/species/vox/datum/unit_testing.dm b/mods/species/vox/datum/unit_testing.dm
index 1026f897cad..1010d534842 100644
--- a/mods/species/vox/datum/unit_testing.dm
+++ b/mods/species/vox/datum/unit_testing.dm
@@ -4,7 +4,7 @@
/datum/unit_test/mob_damage/vox
name = "MOB: Vox damage check template"
- template = /datum/unit_test/mob_damage/vox
+ abstract_type = /datum/unit_test/mob_damage/vox
mob_type = /mob/living/human/vox
/datum/unit_test/mob_damage/vox/brute
diff --git a/mods/species/vox/gear/gun.dm b/mods/species/vox/gear/gun.dm
index c4f62db86c9..a2e5706de5d 100644
--- a/mods/species/vox/gear/gun.dm
+++ b/mods/species/vox/gear/gun.dm
@@ -78,27 +78,3 @@
/decl/material/liquid/sedatives,
/decl/material/liquid/paralytics
)
-
-/spell/targeted/shapeshift/true_form
- name = "True Form"
- desc = "Pay respect to your heritage. Become what you once were."
-
- school = "racial"
- spell_flags = INCLUDEUSER
- invocation_type = SpI_EMOTE
- range = -1
- invocation = "begins to grow!"
- charge_max = 1200 //2 minutes
- duration = 300 //30 seconds
-
- smoke_amt = 5
- smoke_spread = 1
-
- possible_transformations = list(/mob/living/simple_animal/hostile/parrot/space/lesser)
-
- hud_state = "wiz_vox"
-
- cast_sound = 'sound/voice/shriek1.ogg'
- revert_sound = 'sound/voice/shriek1.ogg'
-
- drop_items = 0
diff --git a/mods/species/vox/organs_vox.dm b/mods/species/vox/organs_vox.dm
index ebc0f3cbaed..7933c8f41a4 100644
--- a/mods/species/vox/organs_vox.dm
+++ b/mods/species/vox/organs_vox.dm
@@ -26,25 +26,39 @@
name = "gizzard"
color = "#0033cc"
var/static/list/gains_nutriment_from_inedible_reagents = list(
- /decl/material/solid/organic/wood = 3,
- /decl/material/liquid/cleaner = 1,
- /decl/material/liquid/foaming_agent = 1,
- /decl/material/liquid/surfactant = 1,
- /decl/material/liquid/paint = 1
+ /decl/material/solid/organic/wood/oak = 3,
+ /decl/material/solid/organic/wood/mahogany = 3,
+ /decl/material/solid/organic/wood/maple = 3,
+ /decl/material/solid/organic/wood/ebony = 3,
+ /decl/material/solid/organic/wood/walnut = 3,
+ /decl/material/solid/organic/wood/chipboard = 2,
+ /decl/material/solid/organic/wood/chipboard/mahogany = 2,
+ /decl/material/solid/organic/wood/chipboard/maple = 2,
+ /decl/material/solid/organic/wood/chipboard/ebony = 2,
+ /decl/material/solid/organic/wood/chipboard/walnut = 2,
+ /decl/material/liquid/cleaner = 1,
+ /decl/material/liquid/foaming_agent = 1,
+ /decl/material/liquid/surfactant = 1,
+ /decl/material/liquid/paint = 1
)
var/static/list/can_digest_matter = list(
- /decl/material/solid/organic/wood = TRUE,
- /decl/material/solid/organic/wood/mahogany = TRUE,
- /decl/material/solid/organic/wood/maple = TRUE,
- /decl/material/solid/organic/wood/ebony = TRUE,
- /decl/material/solid/organic/wood/walnut = TRUE,
- /decl/material/solid/organic/leather = TRUE,
- /decl/material/solid/organic/plastic = TRUE,
- /decl/material/solid/organic/cardboard = TRUE,
- /decl/material/solid/organic/paper = TRUE,
- /decl/material/solid/organic/cloth = TRUE,
- /decl/material/solid/slag = TRUE,
- /decl/material/solid/sodiumchloride = TRUE
+ /decl/material/solid/organic/wood/oak = TRUE,
+ /decl/material/solid/organic/wood/mahogany = TRUE,
+ /decl/material/solid/organic/wood/maple = TRUE,
+ /decl/material/solid/organic/wood/ebony = TRUE,
+ /decl/material/solid/organic/wood/walnut = TRUE,
+ /decl/material/solid/organic/wood/chipboard = TRUE,
+ /decl/material/solid/organic/wood/chipboard/mahogany = TRUE,
+ /decl/material/solid/organic/wood/chipboard/maple = TRUE,
+ /decl/material/solid/organic/wood/chipboard/ebony = TRUE,
+ /decl/material/solid/organic/wood/chipboard/walnut = TRUE,
+ /decl/material/solid/organic/leather = TRUE,
+ /decl/material/solid/organic/plastic = TRUE,
+ /decl/material/solid/organic/cardboard = TRUE,
+ /decl/material/solid/organic/paper = TRUE,
+ /decl/material/solid/organic/cloth = TRUE,
+ /decl/material/solid/slag = TRUE,
+ /decl/material/solid/sodiumchloride = TRUE
)
var/static/list/can_process_matter = list(
/decl/material/solid/glass = TRUE,
diff --git a/mods/~compatibility/patches/fantasy.dm b/mods/~compatibility/patches/fantasy.dm
new file mode 100644
index 00000000000..4b4d6f7feab
--- /dev/null
+++ b/mods/~compatibility/patches/fantasy.dm
@@ -0,0 +1,9 @@
+// Override drake lore and names for the fantasy modpack.
+#ifdef MODPACK_DRAKES
+#include "fantasy/drake_fantasy.dm"
+#endif
+
+// Make whetstones available for the fantasy modpack/
+#ifdef MODPACK_ITEM_SHARPENING
+#include "fantasy/whetstone_fantasy.dm"
+#endif
diff --git a/mods/~compatibility/patches/fantasy/drake_fantasy.dm b/mods/~compatibility/patches/fantasy/drake_fantasy.dm
new file mode 100644
index 00000000000..70ad5e628e7
--- /dev/null
+++ b/mods/~compatibility/patches/fantasy/drake_fantasy.dm
@@ -0,0 +1,21 @@
+// Rename grafadreka
+/decl/species/grafadreka
+ name = "Meredrake"
+ name_plural = "Meredrakes"
+ description = "Meredrakes, sometimes called mire-drakes, are large reptillian pack predators, widely assumed to be cousins to true dragons. \
+ They are commonly found living in caves or burrows bordering grassland or forest, and while they prefer to hunt deer or rabbits, they will sometimes attack travellers if pickings are slim enough. \
+ While they are not domesticated, they can be habituated and trained as working animals if captured young enough."
+
+/decl/sprite_accessory/marking/grafadreka
+ species_allowed = list("Meredrake")
+
+/decl/language/grafadreka
+ desc = "Hiss hiss, feed me rabbits."
+
+/decl/material/liquid/sifsap
+ name = "drake spittle"
+ lore_text = "A complex chemical slurry brewed up in the gullet of meredrakes."
+
+/obj/aura/sifsap_salve
+ name = "Drakespittle Salve"
+ descriptor = "glowing spittle"
diff --git a/mods/~compatibility/patches/fantasy/whetstone_fantasy.dm b/mods/~compatibility/patches/fantasy/whetstone_fantasy.dm
new file mode 100644
index 00000000000..b2821d26fa6
--- /dev/null
+++ b/mods/~compatibility/patches/fantasy/whetstone_fantasy.dm
@@ -0,0 +1,7 @@
+// Make whetstones available in character generation.
+/decl/loadout_option/fantasy/utility/whetstone
+ name = "whetstone"
+ path = /obj/item/whetstone
+ available_materials = null
+ loadout_flags = null
+ uid = "gear_fantasy_whetstone"
diff --git a/mods/species/vox/datum/heist_compatibility.dm b/mods/~compatibility/patches/heist_vox.dm
similarity index 88%
rename from mods/species/vox/datum/heist_compatibility.dm
rename to mods/~compatibility/patches/heist_vox.dm
index a34c7d79244..e37a3416faa 100644
--- a/mods/species/vox/datum/heist_compatibility.dm
+++ b/mods/~compatibility/patches/heist_vox.dm
@@ -1,4 +1,3 @@
-#ifdef GAMEMODE_PACK_HEIST
/decl/special_role/raider/Initialize()
. = ..()
LAZYSET(outfits_per_species, SPECIES_VOX, /decl/outfit/vox_raider)
@@ -16,7 +15,7 @@
var/decl/species/my_species = user?.get_species()
var/decl/special_role/raider/raiders = GET_DECL(/decl/special_role/raider)
- if(!istype(user) || !user.mind || !user.mind.assigned_special_role != raiders || !my_species || my_species.name == SPECIES_VOX || !is_alien_whitelisted(user, SPECIES_VOX))
+ if(!istype(user) || !user.mind || !raiders.is_antagonist(user.mind) || !my_species || my_species.name == SPECIES_VOX || !is_alien_whitelisted(user, SPECIES_VOX))
return ..()
var/choice = input("Do you wish to become a vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes")
@@ -41,4 +40,3 @@
vox.SetName(vox.real_name)
var/decl/special_role/raider/raiders = GET_DECL(/decl/special_role/raider)
raiders.update_access(vox)
-#endif
\ No newline at end of file
diff --git a/mods/~compatibility/patches/mixed_gamemodes.dm b/mods/~compatibility/patches/mixed_gamemodes.dm
new file mode 100644
index 00000000000..c554702eff5
--- /dev/null
+++ b/mods/~compatibility/patches/mixed_gamemodes.dm
@@ -0,0 +1,12 @@
+// TODO: #ifdef GAMEMODE_PACK_MERCENARY
+#if defined(GAMEMODE_PACK_HEIST)
+#include "mixed_gamemodes/crossfire.dm"
+#endif
+#if defined(GAMEMODE_PACK_REVOLUTIONARY)
+#include "mixed_gamemodes/siege.dm"
+#endif
+// #endif
+
+#if defined(GAMEMODE_PACK_REVOLUTIONARY) && defined(GAMEMODE_PACK_CULT)
+#include "mixed_gamemodes/uprising.dm"
+#endif
\ No newline at end of file
diff --git a/mods/gamemodes/mixed/crossfire.dm b/mods/~compatibility/patches/mixed_gamemodes/crossfire.dm
similarity index 100%
rename from mods/gamemodes/mixed/crossfire.dm
rename to mods/~compatibility/patches/mixed_gamemodes/crossfire.dm
diff --git a/mods/gamemodes/mixed/siege.dm b/mods/~compatibility/patches/mixed_gamemodes/siege.dm
similarity index 100%
rename from mods/gamemodes/mixed/siege.dm
rename to mods/~compatibility/patches/mixed_gamemodes/siege.dm
diff --git a/mods/gamemodes/mixed/uprising.dm b/mods/~compatibility/patches/mixed_gamemodes/uprising.dm
similarity index 100%
rename from mods/gamemodes/mixed/uprising.dm
rename to mods/~compatibility/patches/mixed_gamemodes/uprising.dm
diff --git a/mods/~compatibility/patches/psionics.dm b/mods/~compatibility/patches/psionics.dm
new file mode 100644
index 00000000000..93473b9271f
--- /dev/null
+++ b/mods/~compatibility/patches/psionics.dm
@@ -0,0 +1,13 @@
+// Give borers a paramount rank psi aura, and gives them a ranged psychic attack.
+#ifdef CONTENT_PACK_BORERS
+#include "psionics/borer_psi.dm"
+#endif
+// Allows psion blood to be used to create soulstones,
+// and lets full soulstones nullify psi and shatter into nullglass.
+#ifdef GAMEMODE_PACK_CULT
+#include "psionics/cult_psi.dm"
+#endif
+// Adds psi abilities to the counselor.
+#ifdef MODPACK_STANDARD_JOBS
+#include "psionics/psi_jobs.dm"
+#endif
\ No newline at end of file
diff --git a/mods/content/psionics/system/psionics/mob/borer_power.dm b/mods/~compatibility/patches/psionics/borer_psi.dm
similarity index 92%
rename from mods/content/psionics/system/psionics/mob/borer_power.dm
rename to mods/~compatibility/patches/psionics/borer_psi.dm
index b48874f08e8..68c70ec95f7 100644
--- a/mods/content/psionics/system/psionics/mob/borer_power.dm
+++ b/mods/~compatibility/patches/psionics/borer_psi.dm
@@ -1,4 +1,3 @@
-#ifdef CONTENT_PACK_BORERS
/mob/living/simple_animal/borer
var/image/aura_image
@@ -26,7 +25,7 @@
/mob/living/simple_animal/borer/RangedAttack(atom/A, var/params)
. = ..()
- if(!. && a_intent == I_DISARM && isliving(A) && !neutered && can_do_special_ranged_attack(FALSE))
+ if(!. && check_intent(I_FLAG_DISARM) && isliving(A) && !neutered && can_do_special_ranged_attack(FALSE))
var/mob/living/M = A
if(locate(/mob/living/simple_animal/borer) in M.contents)
to_chat(src, SPAN_WARNING("You cannot dominate a host who already has a passenger!"))
@@ -52,5 +51,4 @@
SET_STATUS_MAX(M, STAT_WEAK, 10)
set_ability_cooldown(15 SECONDS)
- return TRUE
-#endif
\ No newline at end of file
+ return TRUE
\ No newline at end of file
diff --git a/mods/~compatibility/patches/psionics/cult_psi.dm b/mods/~compatibility/patches/psionics/cult_psi.dm
new file mode 100644
index 00000000000..0fa46de32d6
--- /dev/null
+++ b/mods/~compatibility/patches/psionics/cult_psi.dm
@@ -0,0 +1,18 @@
+// Make psion blood usable for soulstone synthesis.
+/decl/chemical_reaction/synthesis/soulstone/donor_is_magic(mob/living/donor)
+ return ..() || !!donor?.get_ability_handler(/datum/ability_handler/psionics)
+
+// Make soulstones interact with psionics.
+/obj/item/soulstone/disrupts_psionics()
+ . = !full ? src : FALSE
+
+/obj/item/soulstone/shatter()
+ for(var/i=1 to rand(2,5))
+ new /obj/item/shard(get_turf(src), full ? /decl/material/nullglass : /decl/material/solid/gemstone/crystal)
+ . = ..()
+
+/obj/item/soulstone/withstand_psi_stress(var/stress, var/atom/source)
+ . = ..(stress, source)
+ if(. > 0)
+ . = max(0, . - rand(2,5))
+ shatter()
\ No newline at end of file
diff --git a/mods/~compatibility/patches/psionics/psi_jobs.dm b/mods/~compatibility/patches/psionics/psi_jobs.dm
new file mode 100644
index 00000000000..d62d097022f
--- /dev/null
+++ b/mods/~compatibility/patches/psionics/psi_jobs.dm
@@ -0,0 +1,6 @@
+/datum/job/standard/counselor/equip_job(var/mob/living/human/H)
+ if(H.mind.role_alt_title == "Counselor")
+ psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT)
+ if(H.mind.role_alt_title == "Mentalist")
+ psi_faculties = list("[PSI_COERCION]" = PSI_RANK_OPERANT)
+ return ..()
\ No newline at end of file
diff --git a/mods/~compatibility/patches/supermatter.dm b/mods/~compatibility/patches/supermatter.dm
new file mode 100644
index 00000000000..27f6a6f4475
--- /dev/null
+++ b/mods/~compatibility/patches/supermatter.dm
@@ -0,0 +1,12 @@
+// Add the supermatter monitor to engineering jobs' default software.
+#ifdef MODPACK_STANDARD_JOBS
+#include "supermatter/supermatter_jobs.dm"
+#endif
+// Disable Narsie during the supermatter cascade.
+#ifdef GAMEMODE_PACK_CULT
+#include "supermatter/sm_disable_narsie.dm"
+#endif
+// Add the supermatter meteor to the meteor gamemode's cataclysmic meteors list.
+#ifdef GAMEMODE_PACK_METEOR
+#include "supermatter/sm_meteor.dm"
+#endif
\ No newline at end of file
diff --git a/mods/~compatibility/patches/supermatter/sm_disable_narsie.dm b/mods/~compatibility/patches/supermatter/sm_disable_narsie.dm
new file mode 100644
index 00000000000..a660384347b
--- /dev/null
+++ b/mods/~compatibility/patches/supermatter/sm_disable_narsie.dm
@@ -0,0 +1,4 @@
+// Disable Narsie when a supermatter cascade begins.
+/datum/universal_state/supermatter_cascade/OnEnter()
+ var/decl/special_role/cultist/cult = GET_DECL(/decl/special_role/cultist)
+ cult.allow_narsie = 0
\ No newline at end of file
diff --git a/mods/~compatibility/patches/supermatter/sm_meteor.dm b/mods/~compatibility/patches/supermatter/sm_meteor.dm
new file mode 100644
index 00000000000..df383bc3f76
--- /dev/null
+++ b/mods/~compatibility/patches/supermatter/sm_meteor.dm
@@ -0,0 +1,3 @@
+/decl/game_mode/meteor/Initialize()
+ . = ..() // No debounce, decls only init once.
+ meteors_cataclysm[/obj/effect/meteor/destroyer/supermatter] = 1
\ No newline at end of file
diff --git a/mods/~compatibility/patches/supermatter/supermatter_jobs.dm b/mods/~compatibility/patches/supermatter/supermatter_jobs.dm
new file mode 100644
index 00000000000..2a62b17318c
--- /dev/null
+++ b/mods/~compatibility/patches/supermatter/supermatter_jobs.dm
@@ -0,0 +1,7 @@
+/datum/job/standard/chief_engineer/New()
+ ..()
+ software_on_spawn |= /datum/computer_file/program/supermatter_monitor
+
+/datum/job/standard/engineer/New()
+ ..()
+ software_on_spawn |= /datum/computer_file/program/supermatter_monitor
\ No newline at end of file
diff --git a/mods/~compatibility/readme.md b/mods/~compatibility/readme.md
new file mode 100644
index 00000000000..d422273e7bb
--- /dev/null
+++ b/mods/~compatibility/readme.md
@@ -0,0 +1,22 @@
+# Modpack Compatibility System
+This folder exists as a way to work around the fact that the previous system for modpack cross-compatibility, define-gating, is sensitive to include order. This resulted in a lot of boilerplate, like having to emit warnings if modpacks were included in the wrong order. This meant that you could also introduce cyclical dependencies, where no matter what it would emit a warning and content would be missing.
+
+To avoid this issue, we instead include all compatibility patches last, so it is load order agnostic.
+
+## FAQ
+### Why aren't the compatibility files in the modpacks themselves?
+I didn't want to edit the modpack include validation script to exclude the compatibility patches from all DMEs.
+
+### Why is it organised using subfolders?
+I didn't like using `#if defined(FOO) && defined(BAR)` and nested `#ifdef`s were hard to follow, so instead I group them by modpack.
+
+### Is there a general rule for which modpacks get their own folder?
+Not really. I just grouped them in roughly the way that would result in the largest existing groupings, and then chose groupings that would make the most sense to expand in the future (fantasy and standard jobs).
+
+### Do all patches need to be in a subfolder?
+No, it's totally fine to just put something in the base patches directory if there's only one patch for either of the mods in that pairing. That said, sometimes it can make sense to add a folder with just one patch if you can foresee future development requiring additional patches in the same category.
+
+### How do I decide which folder a patch goes in if both modpacks have folders?
+I tend to personally go based on whatever it's mostly about; a hypothetical patch renaming and respriting psionics for the fantasy modpack would go in the fantasy folder. Alternatively, you could think of it as going for whichever one is more specific.
+
+That said, if one has a lot more patches than the other, or if one modpack (take Standard Jobs, for example) is patched by several modpacks that already have folders, it's fine to just go with whatever produces the largest patch subfolders (or gets rid of small/redundant ones).
\ No newline at end of file
diff --git a/mods/~compatibility/~compatibility.dm b/mods/~compatibility/~compatibility.dm
new file mode 100644
index 00000000000..6d3b770558f
--- /dev/null
+++ b/mods/~compatibility/~compatibility.dm
@@ -0,0 +1,20 @@
+// Add Vox-specific content for the Heist gamemode (Vox raider outfit, mirror to transform into a Vox as a raider)
+#if defined(GAMEMODE_PACK_HEIST) && defined(MODPACK_VOX)
+#include "patches/heist_vox.dm"
+#endif
+
+#ifdef MODPACK_PSIONICS
+#include "patches/psionics.dm"
+#endif
+
+#ifdef GAMEMODE_PACK_MIXED
+#include "patches/mixed_gamemodes.dm"
+#endif
+
+#ifdef MODPACK_FANTASY_SPECIES
+#include "patches/fantasy.dm"
+#endif
+
+#ifdef CONTENT_PACK_SUPERMATTER
+#include "patches/supermatter.dm"
+#endif
diff --git a/nano/images/shaded_hills/shaded_hills-1.png b/nano/images/shaded_hills/shaded_hills-1.png
new file mode 100644
index 00000000000..862e93356aa
Binary files /dev/null and b/nano/images/shaded_hills/shaded_hills-1.png differ
diff --git a/nano/images/shaded_hills/shaded_hills-2.png b/nano/images/shaded_hills/shaded_hills-2.png
new file mode 100644
index 00000000000..cc7727eb7d2
Binary files /dev/null and b/nano/images/shaded_hills/shaded_hills-2.png differ
diff --git a/nano/images/shaded_hills/shaded_hills-3.png b/nano/images/shaded_hills/shaded_hills-3.png
new file mode 100644
index 00000000000..ab087ace58e
Binary files /dev/null and b/nano/images/shaded_hills/shaded_hills-3.png differ
diff --git a/nano/images/shaded_hills/shaded_hills-4.png b/nano/images/shaded_hills/shaded_hills-4.png
new file mode 100644
index 00000000000..97408dc32f6
Binary files /dev/null and b/nano/images/shaded_hills/shaded_hills-4.png differ
diff --git a/nano/images/shaded_hills/shaded_hills-5.png b/nano/images/shaded_hills/shaded_hills-5.png
new file mode 100644
index 00000000000..a4d8cf90dd2
Binary files /dev/null and b/nano/images/shaded_hills/shaded_hills-5.png differ
diff --git a/nano/images/shaded_hills/shaded_hills-6.png b/nano/images/shaded_hills/shaded_hills-6.png
new file mode 100644
index 00000000000..3cb34e5cb67
Binary files /dev/null and b/nano/images/shaded_hills/shaded_hills-6.png differ
diff --git a/nano/templates/deity.tmpl b/nano/templates/deity.tmpl
deleted file mode 100644
index b249a864960..00000000000
--- a/nano/templates/deity.tmpl
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-Deity Menu
-
- {{:data.name}} the {{:data.form_name}}
-
-
- Current Boon:
- {{if data.boon_name}}
- {{:data.boon_name}}
- {{else}}
- N/A
- {{/if}}
-
-
- Power: {{:data.power}} Power Minimum: {{:data.power_min}} Regen: {{:data.regen}}
-
-
- {{:helper.link('Followers', 'person', {'switchMenu' : 0, 'menu' : 'menu'}, data.menu == 0 ? 'disabled' : null)}}
- {{:helper.link('Shop', 'suitcase', {'switchMenu' : 1, 'menu' : 'menu'}, data.menu == 1 ? 'disabled' : null)}}
- {{:helper.link('Phenomena', 'star', {'switchMenu' : 2, 'menu' : 'menu'}, data.menu == 2 ? 'disabled' : null)}}
-
-
-{{if data.menu == 0}}
- Followers
- {{for data.followers}}
-
- {{:value.name}}
-
-
- {{:helper.link('Jump', 'zoomin', {'jump' : value.ref}, value.ref ? null : 'disabled')}}
- {{:helper.link('Follow', 'zoomout', {'jump' : value.ref, 'follow' : 1}, value.ref ? null : 'disabled')}}
-
- {{empty}}
- You have no minions!
- {{/for}}
-{{else data.menu == 1}}
- Shop
-
- {{for data.categories}}
- {{:helper.link(value, null, {'switchCategory' : index}, index == data.category ? 'disabled' : null)}}
- {{/for}}
-
-
- {{for data.item_data}}
-
-
- {{:helper.link(value.name, null, {'buy' : value.ref})}} (Level {{:value.level}})
-
-
- Costs: {{:value.cost}} Requires: {{:value.requirements}}
-
-
- {{:value.desc}}
-
-
- {{empty}}
- There is nothing there!
- {{/for}}
-{{else data.menu == 2}}
- Phenomena
-
-
- Selected Phenomena:
-
-
- {{if data.selectedPhenomenaName}}
- {{:helper.link(data.selectedPhenomenaName, null, {'clear_selected' : 1})}}
- {{else}}
- N/A
- {{/if}}
-
-
-
- {{:helper.link('Phenomena', 'star', {'switchMenu' : 0, 'menu' : 'phenomenaMenu'}, data.phenomenaMenu == 0 ? 'disabled' : null)}}
- {{:helper.link('Bindings', 'key', {'switchMenu' : 1, 'menu' : 'phenomenaMenu'}, data.phenomenaMenu == 1 ? 'disabled' : null)}}
-
- {{if data.phenomenaMenu == 0}}
- {{for data.phenomenas}}
-
-
- {{:helper.link(value.name, null, {'select_phenomena' : value.name})}}
-
-
- Use Cost: {{:value.cost}}
- {{if value.cooldown}}
- Cooldown: {{:value.cooldown}}
- {{/if}}
-
-
- {{:value.description}}
-
-
- {{empty}}
- You don't have any phenomena!
- {{/for}}
- {{else data.phenomenaMenu == 1}}
- {{for data.bindings}}
- {{:value.intent}}
- {{for value.intent_data :intentValue:intentKey}}
-
-
- {{:intentValue.binding}}
-
-
- {{:helper.link(intentValue.phenomena_name ? intentValue.phenomena_name : 'N/A', null, {'select_intent' : value.intent, 'select_binding' : intentValue.binding})}}
-
-
- {{/for}}
-
- {{/for}}
- {{/if}}
-{{/if}}
-
\ No newline at end of file
diff --git a/nano/templates/design_database.tmpl b/nano/templates/design_database.tmpl
index f09a5415a94..db1dd81ea57 100644
--- a/nano/templates/design_database.tmpl
+++ b/nano/templates/design_database.tmpl
@@ -6,12 +6,16 @@
External storage
- {{if data.disk_tech}}
+ {{if data.disk_tech || data.disk_error}}
{{:helper.link(data.disk_name, null, {'eject_disk' : 1})}} |
- Data | Stored |
- {{for data.disk_tech}}
- {{:value.field}} | {{:value.level}} |
- {{/for}}
+ {{if data.disk_error}}
+ invalid data format
+ {{else}}
+ Data | Stored |
+ {{for data.disk_tech}}
+ {{:value.field}} | {{:value.level}} |
+ {{/for}}
+ {{/if}}
{{else}}
{{:data.disk_name}} |
{{/if}}
diff --git a/nano/templates/engines_control.tmpl b/nano/templates/engines_control.tmpl
index 4df88e86014..c9ec27c77c7 100644
--- a/nano/templates/engines_control.tmpl
+++ b/nano/templates/engines_control.tmpl
@@ -29,6 +29,8 @@
{{:data.total_thrust}}
+
+
{{if data.needs_dampers}}
diff --git a/nano/templates/radio_basic.tmpl b/nano/templates/radio_basic.tmpl
index fc94e17029c..b3ba6f4830a 100644
--- a/nano/templates/radio_basic.tmpl
+++ b/nano/templates/radio_basic.tmpl
@@ -138,12 +138,11 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
◼{{:value.display_name}}
- {{if value.secure_channel}}
- {{:helper.link('On', null, {'ch_name' : value.chan, 'listen' : 1}, value.listening ? 'selected' : null)}}
- {{:helper.link('Off', null, {'ch_name' : value.chan, 'listen' : 0}, value.listening ? null : 'selected')}}
- {{else}}
- {{:helper.link('Switch', null, {'spec_freq' : value.chan}, data.rawfreq == value.chan ? 'selected' : null)}}
- {{/if}}
+ {{:helper.link('On', null, {'ch_name' : value.chan, 'listen' : 1}, value.listening ? 'selected' : null)}}
+ {{:helper.link('Off', null, {'ch_name' : value.chan, 'listen' : 0}, value.listening ? null : 'selected')}}
+ {{if !value.secure_channel}}
+ {{:helper.link('Switch', null, {'spec_freq' : value.chan}, data.rawfreq == value.chan ? 'selected' : null)}}
+ {{/if}}
{{/for}}
{{/if}}
diff --git a/nebula.dme b/nebula.dme
index 1cb64eac54e..3bd032e7efd 100644
--- a/nebula.dme
+++ b/nebula.dme
@@ -10,6 +10,7 @@
#define DEBUG
// END_PREFERENCES
// BEGIN_INCLUDE
+#include "code\___compile_options.dm"
#include "code\___opendream_linting.dm"
#include "code\__globals.dm"
#include "code\_macros.dm"
@@ -20,7 +21,6 @@
#include "code\__datastructures\stack.dm"
#include "code\__defines\_byond_version_compat.dm"
#include "code\__defines\_compile_helpers.dm"
-#include "code\__defines\_compile_options.dm"
#include "code\__defines\_planes+layers.dm"
#include "code\__defines\_tick.dm"
#include "code\__defines\admin.dm"
@@ -57,8 +57,10 @@
#include "code\__defines\hud.dm"
#include "code\__defines\hydroponics.dm"
#include "code\__defines\integrated_circuits.dm"
+#include "code\__defines\intent.dm"
#include "code\__defines\interactions.dm"
#include "code\__defines\inventory_sizes.dm"
+#include "code\__defines\item_effects.dm"
#include "code\__defines\items_clothing.dm"
#include "code\__defines\jobs.dm"
#include "code\__defines\languages.dm"
@@ -121,6 +123,7 @@
#include "code\_global_vars\sound.dm"
#include "code\_global_vars\lists\clothing.dm"
#include "code\_global_vars\lists\flavor.dm"
+#include "code\_global_vars\lists\jewellery.dm"
#include "code\_global_vars\lists\logs.dm"
#include "code\_global_vars\lists\mapping.dm"
#include "code\_global_vars\lists\names.dm"
@@ -190,7 +193,6 @@
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\skybox.dm"
#include "code\_onclick\hud\screen\_screen.dm"
-#include "code\_onclick\hud\screen\screen_abilities.dm"
#include "code\_onclick\hud\screen\screen_action_button.dm"
#include "code\_onclick\hud\screen\screen_ai_button.dm"
#include "code\_onclick\hud\screen\screen_attack_selector.dm"
@@ -209,6 +211,7 @@
#include "code\_onclick\hud\screen\screen_intent.dm"
#include "code\_onclick\hud\screen\screen_internal.dm"
#include "code\_onclick\hud\screen\screen_inventory.dm"
+#include "code\_onclick\hud\screen\screen_inventory_hands.dm"
#include "code\_onclick\hud\screen\screen_lighting.dm"
#include "code\_onclick\hud\screen\screen_maneuver.dm"
#include "code\_onclick\hud\screen\screen_module.dm"
@@ -218,7 +221,6 @@
#include "code\_onclick\hud\screen\screen_radial.dm"
#include "code\_onclick\hud\screen\screen_resist.dm"
#include "code\_onclick\hud\screen\screen_robot_drop_grab.dm"
-#include "code\_onclick\hud\screen\screen_robot_intent.dm"
#include "code\_onclick\hud\screen\screen_robot_inventory.dm"
#include "code\_onclick\hud\screen\screen_robot_modules.dm"
#include "code\_onclick\hud\screen\screen_robot_panel.dm"
@@ -239,8 +241,6 @@
#include "code\controllers\communications.dm"
#include "code\controllers\controller.dm"
#include "code\controllers\failsafe.dm"
-#include "code\controllers\hooks-defs.dm"
-#include "code\controllers\hooks.dm"
#include "code\controllers\master.dm"
#include "code\controllers\subsystem.dm"
#include "code\controllers\verbs.dm"
@@ -282,7 +282,8 @@
#include "code\controllers\subsystems\mapping.dm"
#include "code\controllers\subsystems\misc_late.dm"
#include "code\controllers\subsystems\overlays.dm"
-#include "code\controllers\subsystems\plants.dm"
+#include "code\controllers\subsystems\overmap.dm"
+#include "code\controllers\subsystems\pathfinding.dm"
#include "code\controllers\subsystems\radiation.dm"
#include "code\controllers\subsystems\shuttle.dm"
#include "code\controllers\subsystems\skybox.dm"
@@ -326,7 +327,7 @@
#include "code\controllers\subsystems\processing\mobs.dm"
#include "code\controllers\subsystems\processing\nano.dm"
#include "code\controllers\subsystems\processing\obj.dm"
-#include "code\controllers\subsystems\processing\overmap.dm"
+#include "code\controllers\subsystems\processing\plants.dm"
#include "code\controllers\subsystems\processing\processing.dm"
#include "code\controllers\subsystems\processing\projectiles.dm"
#include "code\controllers\subsystems\processing\temperature.dm"
@@ -348,7 +349,6 @@
#include "code\datums\mutable_appearance.dm"
#include "code\datums\position_point_vector.dm"
#include "code\datums\progressbar.dm"
-#include "code\datums\security_state.dm"
#include "code\datums\sound_player.dm"
#include "code\datums\suit_sensor_jammer_method.dm"
#include "code\datums\sun.dm"
@@ -356,7 +356,13 @@
#include "code\datums\type_cloning.dm"
#include "code\datums\weakref.dm"
#include "code\datums\ai\_ai.dm"
+#include "code\datums\ai\_ai_enemies.dm"
+#include "code\datums\ai\_ai_friends.dm"
+#include "code\datums\ai\_ai_memory.dm"
+#include "code\datums\ai\_ai_pathfinding.dm"
#include "code\datums\ai\_ai_stance.dm"
+#include "code\datums\ai\_ai_targets.dm"
+#include "code\datums\ai\_ai_wander.dm"
#include "code\datums\ai\aggressive.dm"
#include "code\datums\ai\beast.dm"
#include "code\datums\ai\commanded.dm"
@@ -421,8 +427,13 @@
#include "code\datums\extensions\abilities\abilities.dm"
#include "code\datums\extensions\abilities\abilities_mob.dm"
#include "code\datums\extensions\abilities\abilities_predator.dm"
+#include "code\datums\extensions\abilities\ability_button.dm"
+#include "code\datums\extensions\abilities\ability_decl.dm"
#include "code\datums\extensions\abilities\ability_handler.dm"
#include "code\datums\extensions\abilities\ability_item.dm"
+#include "code\datums\extensions\abilities\ability_projectile.dm"
+#include "code\datums\extensions\abilities\ability_targeting.dm"
+#include "code\datums\extensions\abilities\readme.dm"
#include "code\datums\extensions\appearance\appearance.dm"
#include "code\datums\extensions\appearance\base_icon_state.dm"
#include "code\datums\extensions\appearance\cardborg.dm"
@@ -449,7 +460,6 @@
#include "code\datums\extensions\eye\landing.dm"
#include "code\datums\extensions\holster\holster.dm"
#include "code\datums\extensions\milkable\milkable.dm"
-#include "code\datums\extensions\multitool\_multitool.dm"
#include "code\datums\extensions\multitool\multitool.dm"
#include "code\datums\extensions\multitool\store.dm"
#include "code\datums\extensions\multitool\circuitboards\buildtype_select.dm"
@@ -614,7 +624,6 @@
#include "code\datums\proximity_trigger\proximity_trigger.dm"
#include "code\datums\proximity_trigger\turf_selection.dm"
#include "code\datums\repositories\_defines.dm"
-#include "code\datums\repositories\admin_pm.dm"
#include "code\datums\repositories\areas.dm"
#include "code\datums\repositories\atom_info.dm"
#include "code\datums\repositories\attack_logs.dm"
@@ -688,7 +697,7 @@
#include "code\datums\underwear\underwear.dm"
#include "code\datums\uplink\ammunition.dm"
#include "code\datums\uplink\badassery.dm"
-#include "code\datums\uplink\devices and tools.dm"
+#include "code\datums\uplink\devices_and_tools.dm"
#include "code\datums\uplink\grenades.dm"
#include "code\datums\uplink\hardsuit_modules.dm"
#include "code\datums\uplink\highly_visible_and_dangerous_weapons.dm"
@@ -716,7 +725,6 @@
#include "code\datums\wires\camera.dm"
#include "code\datums\wires\explosive.dm"
#include "code\datums\wires\fabricator.dm"
-#include "code\datums\wires\inertial_damper.dm"
#include "code\datums\wires\nuclearbomb.dm"
#include "code\datums\wires\particle_accelerator.dm"
#include "code\datums\wires\radio.dm"
@@ -734,8 +742,10 @@
#include "code\game\atom_material.dm"
#include "code\game\atoms.dm"
#include "code\game\atoms_damage.dm"
+#include "code\game\atoms_fires.dm"
#include "code\game\atoms_fluids.dm"
#include "code\game\atoms_init.dm"
+#include "code\game\atoms_interactions.dm"
#include "code\game\atoms_layering.dm"
#include "code\game\atoms_movable.dm"
#include "code\game\atoms_movable_grabs.dm"
@@ -743,7 +753,6 @@
#include "code\game\atoms_movable_overlay.dm"
#include "code\game\atoms_temperature.dm"
#include "code\game\base_turf.dm"
-#include "code\game\images.dm"
#include "code\game\movietitles.dm"
#include "code\game\response_team.dm"
#include "code\game\sound.dm"
@@ -764,7 +773,6 @@
#include "code\game\antagonist\outsider\actors.dm"
#include "code\game\antagonist\outsider\ert.dm"
#include "code\game\antagonist\outsider\mercenary.dm"
-#include "code\game\antagonist\outsider\wizard.dm"
#include "code\game\antagonist\station\provocateur.dm"
#include "code\game\antagonist\station\thrall.dm"
#include "code\game\area\area_abstract.dm"
@@ -779,9 +787,6 @@
#include "code\game\gamemodes\endgame\endgame.dm"
#include "code\game\gamemodes\endgame\ftl_jump\ftl_jump.dm"
#include "code\game\gamemodes\endgame\nuclear_explosion\nuclear_explosion.dm"
-#include "code\game\gamemodes\endgame\supermatter_cascade\cascade_blob.dm"
-#include "code\game\gamemodes\endgame\supermatter_cascade\portal.dm"
-#include "code\game\gamemodes\endgame\supermatter_cascade\universe.dm"
#include "code\game\gamemodes\events\power_failure.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\nuclear\nuclear.dm"
@@ -800,14 +805,6 @@
#include "code\game\gamemodes\objectives\objective_protect.dm"
#include "code\game\gamemodes\objectives\objective_rev.dm"
#include "code\game\gamemodes\objectives\objective_steal.dm"
-#include "code\game\gamemodes\wizard\wizard.dm"
-#include "code\game\gamemodes\wizard\wizard_props.dm"
-#include "code\game\gamemodes\wizard\servant_items\caretaker.dm"
-#include "code\game\gamemodes\wizard\servant_items\champion.dm"
-#include "code\game\gamemodes\wizard\servant_items\familiar.dm"
-#include "code\game\gamemodes\wizard\servant_items\fiend.dm"
-#include "code\game\gamemodes\wizard\servant_items\infiltrator.dm"
-#include "code\game\gamemodes\wizard\servant_items\overseer.dm"
#include "code\game\jobs\_access_defs.dm"
#include "code\game\jobs\access.dm"
#include "code\game\jobs\access_datum.dm"
@@ -841,7 +838,6 @@
#include "code\game\machinery\igniter.dm"
#include "code\game\machinery\jukebox.dm"
#include "code\game\machinery\lightswitch.dm"
-#include "code\game\machinery\magnet.dm"
#include "code\game\machinery\mass_driver.dm"
#include "code\game\machinery\mech_recharger.dm"
#include "code\game\machinery\message_server.dm"
@@ -897,6 +893,7 @@
#include "code\game\machinery\_machines_base\stock_parts\access_lock.dm"
#include "code\game\machinery\_machines_base\stock_parts\building_material.dm"
#include "code\game\machinery\_machines_base\stock_parts\card_reader.dm"
+#include "code\game\machinery\_machines_base\stock_parts\cupholder.dm"
#include "code\game\machinery\_machines_base\stock_parts\disk_reader.dm"
#include "code\game\machinery\_machines_base\stock_parts\item_holder.dm"
#include "code\game\machinery\_machines_base\stock_parts\legacy_parts.dm"
@@ -969,7 +966,6 @@
#include "code\game\machinery\kitchen\gibber.dm"
#include "code\game\machinery\kitchen\icecream.dm"
#include "code\game\machinery\kitchen\microwave.dm"
-#include "code\game\machinery\kitchen\smartfridge.dm"
#include "code\game\machinery\kitchen\cooking_machines\_cooker.dm"
#include "code\game\machinery\kitchen\cooking_machines\_cooker_output.dm"
#include "code\game\machinery\kitchen\cooking_machines\candy.dm"
@@ -979,6 +975,16 @@
#include "code\game\machinery\kitchen\cooking_machines\oven.dm"
#include "code\game\machinery\pipe\construction.dm"
#include "code\game\machinery\pipe\pipelayer.dm"
+#include "code\game\machinery\smartfridge\_smartfridge.dm"
+#include "code\game\machinery\smartfridge\_smartfridge_secure.dm"
+#include "code\game\machinery\smartfridge\chemistry.dm"
+#include "code\game\machinery\smartfridge\drinks.dm"
+#include "code\game\machinery\smartfridge\drying_oven.dm"
+#include "code\game\machinery\smartfridge\foods.dm"
+#include "code\game\machinery\smartfridge\medbay.dm"
+#include "code\game\machinery\smartfridge\produce.dm"
+#include "code\game\machinery\smartfridge\seeds.dm"
+#include "code\game\machinery\smartfridge\sheets.dm"
#include "code\game\machinery\turrets\_turrets.dm"
#include "code\game\machinery\turrets\network_turret.dm"
#include "code\game\machinery\turrets\turret_ammo.dm"
@@ -994,22 +1000,19 @@
#include "code\game\machinery\vending\misc.dm"
#include "code\game\machinery\vending\security.dm"
#include "code\game\machinery\vending\toxins.dm"
+#include "code\game\objects\__objs.dm"
+#include "code\game\objects\_obj_edibility.dm"
+#include "code\game\objects\_objs_damage.dm"
+#include "code\game\objects\_objs_interactions.dm"
#include "code\game\objects\alien_props.dm"
#include "code\game\objects\empulse.dm"
#include "code\game\objects\explosion.dm"
#include "code\game\objects\item_mob_overlay.dm"
#include "code\game\objects\munition.dm"
-#include "code\game\objects\obj_edibility.dm"
-#include "code\game\objects\objs.dm"
-#include "code\game\objects\objs_damage.dm"
-#include "code\game\objects\objs_interactions.dm"
#include "code\game\objects\topic.dm"
#include "code\game\objects\auras\aura.dm"
-#include "code\game\objects\auras\blueforge_aura.dm"
#include "code\game\objects\auras\radiant_aura.dm"
#include "code\game\objects\auras\regenerating_aura.dm"
-#include "code\game\objects\auras\shadowling_aura.dm"
-#include "code\game\objects\auras\starlight.dm"
#include "code\game\objects\auras\personal_shields\personal_shield.dm"
#include "code\game\objects\compass\_compass.dm"
#include "code\game\objects\compass\compass_holder.dm"
@@ -1022,6 +1025,7 @@
#include "code\game\objects\effects\effect_system.dm"
#include "code\game\objects\effects\explosion_particles.dm"
#include "code\game\objects\effects\fake_fire.dm"
+#include "code\game\objects\effects\footprints.dm"
#include "code\game\objects\effects\force_portal.dm"
#include "code\game\objects\effects\gateway.dm"
#include "code\game\objects\effects\gibspawner.dm"
@@ -1036,7 +1040,7 @@
#include "code\game\objects\effects\portals.dm"
#include "code\game\objects\effects\spiders.dm"
#include "code\game\objects\effects\step_triggers.dm"
-#include "code\game\objects\effects\temporaray.dm"
+#include "code\game\objects\effects\temporary.dm"
#include "code\game\objects\effects\temporary_effect.dm"
#include "code\game\objects\effects\wet_floor.dm"
#include "code\game\objects\effects\wormhole.dm"
@@ -1070,11 +1074,14 @@
#include "code\game\objects\items\_item_materials.dm"
#include "code\game\objects\items\_item_melting.dm"
#include "code\game\objects\items\_item_reagents.dm"
+#include "code\game\objects\items\_item_sharpness.dm"
#include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blackout.dm"
#include "code\game\objects\items\blueprints.dm"
#include "code\game\objects\items\bodybag.dm"
#include "code\game\objects\items\buttons.dm"
+#include "code\game\objects\items\candelabra.dm"
+#include "code\game\objects\items\chisel.dm"
#include "code\game\objects\items\christmas.dm"
#include "code\game\objects\items\contraband.dm"
#include "code\game\objects\items\crutches.dm"
@@ -1083,6 +1090,8 @@
#include "code\game\objects\items\fleece.dm"
#include "code\game\objects\items\glassjar.dm"
#include "code\game\objects\items\holosign_creator.dm"
+#include "code\game\objects\items\horseshoe.dm"
+#include "code\game\objects\items\hourglass.dm"
#include "code\game\objects\items\instruments.dm"
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\lockpicks.dm"
@@ -1096,13 +1105,15 @@
#include "code\game\objects\items\rescuebag.dm"
#include "code\game\objects\items\rock.dm"
#include "code\game\objects\items\saddle.dm"
-#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\silencer.dm"
#include "code\game\objects\items\spirit_board.dm"
#include "code\game\objects\items\toys.dm"
+#include "code\game\objects\items\training_dummy.dm"
#include "code\game\objects\items\trash.dm"
#include "code\game\objects\items\umbrella.dm"
#include "code\game\objects\items\waterskin.dm"
+#include "code\game\objects\items\artifice\chain.dm"
+#include "code\game\objects\items\artifice\hook.dm"
#include "code\game\objects\items\blades\_blade.dm"
#include "code\game\objects\items\blades\axe.dm"
#include "code\game\objects\items\blades\axe_fire.dm"
@@ -1219,6 +1230,7 @@
#include "code\game\objects\items\stacks\medical\medical_resin.dm"
#include "code\game\objects\items\stacks\medical\medical_splint.dm"
#include "code\game\objects\items\stacks\tiles\tile_types.dm"
+#include "code\game\objects\items\stacks\tiles\tile_types_wooden.dm"
#include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\autopsy.dm"
#include "code\game\objects\items\weapons\balls.dm"
@@ -1247,9 +1259,7 @@
#include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RPD.dm"
#include "code\game\objects\items\weapons\RSF.dm"
-#include "code\game\objects\items\weapons\scrolls.dm"
#include "code\game\objects\items\weapons\secrets_disk.dm"
-#include "code\game\objects\items\weapons\shields.dm"
#include "code\game\objects\items\weapons\soap.dm"
#include "code\game\objects\items\weapons\staff.dm"
#include "code\game\objects\items\weapons\stunbaton.dm"
@@ -1282,7 +1292,6 @@
#include "code\game\objects\items\weapons\circuitboards\machinery\forensic.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\holomap.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\household.dm"
-#include "code\game\objects\items\weapons\circuitboards\machinery\inertial_damper.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\medical.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mining.dm"
@@ -1310,7 +1319,6 @@
#include "code\game\objects\items\weapons\grenades\prank_grenades.dm"
#include "code\game\objects\items\weapons\grenades\smokebomb.dm"
#include "code\game\objects\items\weapons\grenades\spawnergrenade.dm"
-#include "code\game\objects\items\weapons\grenades\supermatter.dm"
#include "code\game\objects\items\weapons\implants\implant.dm"
#include "code\game\objects\items\weapons\implants\implantcase.dm"
#include "code\game\objects\items\weapons\implants\implantchair.dm"
@@ -1348,6 +1356,12 @@
#include "code\game\objects\items\weapons\melee\energy_projected.dm"
#include "code\game\objects\items\weapons\melee\energy_sword.dm"
#include "code\game\objects\items\weapons\melee\misc.dm"
+#include "code\game\objects\items\weapons\shields\_shield.dm"
+#include "code\game\objects\items\weapons\shields\shield_crafted.dm"
+#include "code\game\objects\items\weapons\shields\shield_crafted_buckler.dm"
+#include "code\game\objects\items\weapons\shields\shield_crafting.dm"
+#include "code\game\objects\items\weapons\shields\shield_energy.dm"
+#include "code\game\objects\items\weapons\shields\shield_riot.dm"
#include "code\game\objects\items\weapons\storage\backpack.dm"
#include "code\game\objects\items\weapons\storage\bags.dm"
#include "code\game\objects\items\weapons\storage\basket.dm"
@@ -1364,6 +1378,7 @@
#include "code\game\objects\items\weapons\storage\med_pouch.dm"
#include "code\game\objects\items\weapons\storage\misc.dm"
#include "code\game\objects\items\weapons\storage\mre.dm"
+#include "code\game\objects\items\weapons\storage\nuggets.dm"
#include "code\game\objects\items\weapons\storage\parachute.dm"
#include "code\game\objects\items\weapons\storage\picnic_basket.dm"
#include "code\game\objects\items\weapons\storage\secure.dm"
@@ -1411,10 +1426,11 @@
#include "code\game\objects\structures\__structure.dm"
#include "code\game\objects\structures\_structure_construction.dm"
#include "code\game\objects\structures\_structure_icon.dm"
+#include "code\game\objects\structures\_structure_interactions.dm"
+#include "code\game\objects\structures\_structure_lock.dm"
#include "code\game\objects\structures\_structure_materials.dm"
#include "code\game\objects\structures\ai_decoy.dm"
-#include "code\game\objects\structures\banners.dm"
-#include "code\game\objects\structures\barrel.dm"
+#include "code\game\objects\structures\armor_stand.dm"
#include "code\game\objects\structures\barricade.dm"
#include "code\game\objects\structures\barsign.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
@@ -1429,6 +1445,7 @@
#include "code\game\objects\structures\curtains.dm"
#include "code\game\objects\structures\defensive_barrier.dm"
#include "code\game\objects\structures\displaycase.dm"
+#include "code\game\objects\structures\divider.dm"
#include "code\game\objects\structures\dogbed.dm"
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\double_sign.dm"
@@ -1446,9 +1463,11 @@
#include "code\game\objects\structures\fountain.dm"
#include "code\game\objects\structures\fuel_port.dm"
#include "code\game\objects\structures\girders.dm"
+#include "code\game\objects\structures\grandfather_clock.dm"
#include "code\game\objects\structures\grille.dm"
#include "code\game\objects\structures\hand_cart.dm"
#include "code\game\objects\structures\handrail.dm"
+#include "code\game\objects\structures\hay.dm"
#include "code\game\objects\structures\holosigns.dm"
#include "code\game\objects\structures\inflatable.dm"
#include "code\game\objects\structures\ironing_board.dm"
@@ -1467,13 +1486,14 @@
#include "code\game\objects\structures\racks.dm"
#include "code\game\objects\structures\railing.dm"
#include "code\game\objects\structures\rubble.dm"
+#include "code\game\objects\structures\rug.dm"
#include "code\game\objects\structures\safe.dm"
#include "code\game\objects\structures\seaweed.dm"
#include "code\game\objects\structures\showcase.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\skele_stand.dm"
+#include "code\game\objects\structures\snowman.dm"
#include "code\game\objects\structures\stasis_cage.dm"
-#include "code\game\objects\structures\structure_lock.dm"
#include "code\game\objects\structures\tables.dm"
#include "code\game\objects\structures\tank_dispenser.dm"
#include "code\game\objects\structures\target_stake.dm"
@@ -1488,6 +1508,9 @@
#include "code\game\objects\structures\windoor_assembly.dm"
#include "code\game\objects\structures\window.dm"
#include "code\game\objects\structures\window_spawner.dm"
+#include "code\game\objects\structures\barrels\barrel.dm"
+#include "code\game\objects\structures\barrels\cask.dm"
+#include "code\game\objects\structures\barrels\cask_rack.dm"
#include "code\game\objects\structures\chemistry\_chemistry.dm"
#include "code\game\objects\structures\crates_lockers\crates.dm"
#include "code\game\objects\structures\crates_lockers\largecrate.dm"
@@ -1558,6 +1581,7 @@
#include "code\game\turfs\turf_footsteps.dm"
#include "code\game\turfs\turf_height.dm"
#include "code\game\turfs\turf_material.dm"
+#include "code\game\turfs\turf_navigation.dm"
#include "code\game\turfs\turf_ramps.dm"
#include "code\game\turfs\unsimulated.dm"
#include "code\game\turfs\flooring\_flooring.dm"
@@ -1622,12 +1646,14 @@
#include "code\game\turfs\walls\wall_natural_subtypes.dm"
#include "code\game\turfs\walls\wall_natural_xenoarch.dm"
#include "code\game\turfs\walls\wall_types.dm"
+#include "code\game\turfs\walls\wall_wattle.dm"
#include "code\game\verbs\byond_membership.dm"
#include "code\game\verbs\ignore.dm"
#include "code\game\verbs\ooc.dm"
#include "code\game\verbs\who.dm"
#include "code\modules\abstract\_abstract.dm"
#include "code\modules\abstract\abstract_exterior_marker.dm"
+#include "code\modules\abstract\abstract_fluid_direction.dm"
#include "code\modules\abstract\abstract_ramp_sculptor.dm"
#include "code\modules\abstract\airlock_helper.dm"
#include "code\modules\acting\acting_items.dm"
@@ -1698,7 +1724,6 @@
#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm"
#include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm"
#include "code\modules\admin\secrets\fun_secrets\waddle.dm"
-#include "code\modules\admin\secrets\investigation\admin_pms.dm"
#include "code\modules\admin\secrets\investigation\attack_logs.dm"
#include "code\modules\admin\verbs\adminhelp.dm"
#include "code\modules\admin\verbs\adminjump.dm"
@@ -1819,10 +1844,25 @@
#include "code\modules\backgrounds\location\locations_other.dm"
#include "code\modules\backgrounds\religion\_religion.dm"
#include "code\modules\backgrounds\religion\religions_human.dm"
+#include "code\modules\banners\__banner.dm"
+#include "code\modules\banners\_banner_frame.dm"
+#include "code\modules\banners\_banner_symbols.dm"
+#include "code\modules\banners\banner_frame_definitions.dm"
+#include "code\modules\banners\sign.dm"
+#include "code\modules\banners\sign_post.dm"
#include "code\modules\blob\blob.dm"
#include "code\modules\blood\blood.dm"
#include "code\modules\blood\blood_types.dm"
#include "code\modules\blood\blood_types_subtypes.dm"
+#include "code\modules\bodytype\_bodytype.dm"
+#include "code\modules\bodytype\bodytype_abilities.dm"
+#include "code\modules\bodytype\bodytype_crystalline.dm"
+#include "code\modules\bodytype\bodytype_helpers.dm"
+#include "code\modules\bodytype\bodytype_offsets.dm"
+#include "code\modules\bodytype\bodytype_prosthetic.dm"
+#include "code\modules\bodytype\bodytype_prosthetic_models.dm"
+#include "code\modules\bodytype\bodytype_quadruped.dm"
+#include "code\modules\bodytype\bodytype_random.dm"
#include "code\modules\brain_interface\_brain_interface.dm"
#include "code\modules\brain_interface\interface_radio.dm"
#include "code\modules\butchery\_butchery.dm"
@@ -1869,6 +1909,8 @@
#include "code\modules\client\preferences_spawnpoints.dm"
#include "code\modules\client\preferences_storage.dm"
#include "code\modules\client\preferences_toggle.dm"
+#include "code\modules\client\mouse_pointer\_mouse_pointer.dm"
+#include "code\modules\client\mouse_pointer\mouse_pointer_definitions.dm"
#include "code\modules\client\preference_setup\_defines.dm"
#include "code\modules\client\preference_setup\preference_setup.dm"
#include "code\modules\client\preference_setup\antagonism\01_candidacy.dm"
@@ -1971,8 +2013,10 @@
#include "code\modules\clothing\gloves\thick.dm"
#include "code\modules\clothing\gloves\jewelry\bracelet.dm"
#include "code\modules\clothing\gloves\jewelry\rings\_ring.dm"
-#include "code\modules\clothing\gloves\jewelry\rings\material.dm"
-#include "code\modules\clothing\gloves\jewelry\rings\rings.dm"
+#include "code\modules\clothing\gloves\jewelry\rings\ring_aura.dm"
+#include "code\modules\clothing\gloves\jewelry\rings\ring_misc.dm"
+#include "code\modules\clothing\gloves\jewelry\rings\ring_reagent.dm"
+#include "code\modules\clothing\gloves\jewelry\rings\ring_seal.dm"
#include "code\modules\clothing\head\_head.dm"
#include "code\modules\clothing\head\collectable.dm"
#include "code\modules\clothing\head\earmuffs.dm"
@@ -1985,6 +2029,7 @@
#include "code\modules\clothing\head\misc_special.dm"
#include "code\modules\clothing\head\security.dm"
#include "code\modules\clothing\head\soft_caps.dm"
+#include "code\modules\clothing\head\wizard.dm"
#include "code\modules\clothing\jumpsuits\_jumpsuit.dm"
#include "code\modules\clothing\jumpsuits\color.dm"
#include "code\modules\clothing\jumpsuits\corp.dm"
@@ -2008,10 +2053,16 @@
#include "code\modules\clothing\neck\_neck.dm"
#include "code\modules\clothing\neck\bowties.dm"
#include "code\modules\clothing\neck\brace.dm"
-#include "code\modules\clothing\neck\jewelry.dm"
+#include "code\modules\clothing\neck\prayer_beads.dm"
#include "code\modules\clothing\neck\scarf.dm"
#include "code\modules\clothing\neck\stethoscope.dm"
#include "code\modules\clothing\neck\ties.dm"
+#include "code\modules\clothing\neck\necklace\__necklace.dm"
+#include "code\modules\clothing\neck\necklace\_pendant.dm"
+#include "code\modules\clothing\neck\necklace\necklaces.dm"
+#include "code\modules\clothing\neck\necklace\pendant_locket.dm"
+#include "code\modules\clothing\neck\necklace\pendant_random.dm"
+#include "code\modules\clothing\neck\necklace\pendant_setting.dm"
#include "code\modules\clothing\pants\_pants.dm"
#include "code\modules\clothing\pants\detective.dm"
#include "code\modules\clothing\pants\misc.dm"
@@ -2076,7 +2127,6 @@
#include "code\modules\clothing\spacesuits\void\misc.dm"
#include "code\modules\clothing\spacesuits\void\station.dm"
#include "code\modules\clothing\spacesuits\void\void.dm"
-#include "code\modules\clothing\spacesuits\void\wizard.dm"
#include "code\modules\clothing\suits\_suit.dm"
#include "code\modules\clothing\suits\_suit_hood.dm"
#include "code\modules\clothing\suits\alien.dm"
@@ -2087,6 +2137,7 @@
#include "code\modules\clothing\suits\jobs.dm"
#include "code\modules\clothing\suits\labcoat.dm"
#include "code\modules\clothing\suits\mantle.dm"
+#include "code\modules\clothing\suits\misc.dm"
#include "code\modules\clothing\suits\miscellaneous.dm"
#include "code\modules\clothing\suits\poncho.dm"
#include "code\modules\clothing\suits\robes.dm"
@@ -2095,7 +2146,7 @@
#include "code\modules\clothing\suits\straightjacket.dm"
#include "code\modules\clothing\suits\toggles.dm"
#include "code\modules\clothing\suits\utility.dm"
-#include "code\modules\clothing\suits\wiz_robe.dm"
+#include "code\modules\clothing\suits\wizard.dm"
#include "code\modules\clothing\suits\armor\_armor.dm"
#include "code\modules\clothing\suits\armor\adminbus_and_memes.dm"
#include "code\modules\clothing\suits\armor\bulletproof.dm"
@@ -2173,7 +2224,9 @@
#include "code\modules\codex\entries\tools.dm"
#include "code\modules\codex\entries\turfs.dm"
#include "code\modules\codex\entries\weapons.dm"
+#include "code\modules\crafting\handmade_fancy.dm"
#include "code\modules\crafting\handmade_items.dm"
+#include "code\modules\crafting\forging\bellows.dm"
#include "code\modules\crafting\metalwork\metalwork_items.dm"
#include "code\modules\crafting\pottery\pottery_moulds.dm"
#include "code\modules\crafting\pottery\pottery_structures.dm"
@@ -2199,6 +2252,7 @@
#include "code\modules\crafting\stack_recipes\recipes_bricks.dm"
#include "code\modules\crafting\stack_recipes\recipes_cardstock.dm"
#include "code\modules\crafting\stack_recipes\recipes_coins.dm"
+#include "code\modules\crafting\stack_recipes\recipes_fodder.dm"
#include "code\modules\crafting\stack_recipes\recipes_grass.dm"
#include "code\modules\crafting\stack_recipes\recipes_hardness.dm"
#include "code\modules\crafting\stack_recipes\recipes_hardness_integrity.dm"
@@ -2208,10 +2262,10 @@
#include "code\modules\crafting\stack_recipes\recipes_panels.dm"
#include "code\modules\crafting\stack_recipes\recipes_planks.dm"
#include "code\modules\crafting\stack_recipes\recipes_reinforced.dm"
+#include "code\modules\crafting\stack_recipes\recipes_rods.dm"
#include "code\modules\crafting\stack_recipes\recipes_soft.dm"
#include "code\modules\crafting\stack_recipes\recipes_stacks.dm"
#include "code\modules\crafting\stack_recipes\recipes_steel.dm"
-#include "code\modules\crafting\stack_recipes\recipes_struts.dm"
#include "code\modules\crafting\stack_recipes\recipes_textiles.dm"
#include "code\modules\crafting\stack_recipes\recipes_turfs.dm"
#include "code\modules\crafting\working\_working.dm"
@@ -2219,6 +2273,10 @@
#include "code\modules\crafting\working\textiles\loom.dm"
#include "code\modules\crafting\working\textiles\spinning_wheel.dm"
#include "code\modules\crafting\working\textiles\twisting_bench.dm"
+#include "code\modules\decoration\_decoration.dm"
+#include "code\modules\decoration\decoration_inset.dm"
+#include "code\modules\decoration\decoration_item.dm"
+#include "code\modules\decoration\decoration_setting.dm"
#include "code\modules\departments\department.dm"
#include "code\modules\detectivework\forensics.dm"
#include "code\modules\detectivework\evidence\_evidence_holder.dm"
@@ -2277,7 +2335,6 @@
#include "code\modules\emotes\definitions\tail.dm"
#include "code\modules\emotes\definitions\visible.dm"
#include "code\modules\error_handler\error_handler.dm"
-#include "code\modules\error_handler\error_reporting.dm"
#include "code\modules\error_handler\error_viewer.dm"
#include "code\modules\events\ailments.dm"
#include "code\modules\events\apc_damage.dm"
@@ -2297,7 +2354,6 @@
#include "code\modules\events\event_dynamic.dm"
#include "code\modules\events\gravity.dm"
#include "code\modules\events\grid_check.dm"
-#include "code\modules\events\inertial_damper.dm"
#include "code\modules\events\infestation.dm"
#include "code\modules\events\ion_storm.dm"
#include "code\modules\events\location_event.dm"
@@ -2320,7 +2376,6 @@
#include "code\modules\events\trivial_news.dm"
#include "code\modules\events\wallrot.dm"
#include "code\modules\events\wormholes.dm"
-#include "code\modules\ext_scripts\irc.dm"
#include "code\modules\fabrication\__fabricator_defines.dm"
#include "code\modules\fabrication\_fabricator.dm"
#include "code\modules\fabrication\_fabricator_build_order.dm"
@@ -2401,6 +2456,7 @@
#include "code\modules\fluids\fluid_flood.dm"
#include "code\modules\fluids\fluid_mapped.dm"
#include "code\modules\food\assembled.dm"
+#include "code\modules\food\nuggets.dm"
#include "code\modules\food\cooking\_recipe.dm"
#include "code\modules\food\cooking\cooking_vessels\_cooking_vessel.dm"
#include "code\modules\food\cooking\cooking_vessels\baking_dish.dm"
@@ -2416,6 +2472,7 @@
#include "code\modules\food\cooking\recipes\recipe_soup.dm"
#include "code\modules\food\cooking\recipes\recipe_soup_chili.dm"
#include "code\modules\food\cooking\recipes\recipe_soup_curry.dm"
+#include "code\modules\food\cooking\recipes\recipe_soup_noodle.dm"
#include "code\modules\food\cooking\recipes\recipe_soup_simple.dm"
#include "code\modules\food\cooking\recipes\recipe_soup_stew.dm"
#include "code\modules\food\cooking\recipes\recipe_soup_stock.dm"
@@ -2436,6 +2493,8 @@
#include "code\modules\games\cards_cag.dm"
#include "code\modules\games\spaceball_cards.dm"
#include "code\modules\games\tarot.dm"
+#include "code\modules\gemstones\_gemstone.dm"
+#include "code\modules\gemstones\gemstone_cuts.dm"
#include "code\modules\genetics\_gene.dm"
#include "code\modules\genetics\plants\_gene_plant.dm"
#include "code\modules\genetics\plants\_plant_trait.dm"
@@ -2558,7 +2617,6 @@
#include "code\modules\hydroponics\trays\tray_soil.dm"
#include "code\modules\hydroponics\trays\tray_tools.dm"
#include "code\modules\hydroponics\trays\tray_update_icons.dm"
-#include "code\modules\inertial_damper\inertial_damper.dm"
#include "code\modules\integrated_electronics\_defines.dm"
#include "code\modules\integrated_electronics\core\_electronics.dm"
#include "code\modules\integrated_electronics\core\analyzer.dm"
@@ -2603,13 +2661,13 @@
#include "code\modules\integrated_electronics\subtypes\trig.dm"
#include "code\modules\interactions\_interactions.dm"
#include "code\modules\interactions\interactions_atom.dm"
+#include "code\modules\interactions\interactions_reagents.dm"
#include "code\modules\interactions\interactions_shared.dm"
#include "code\modules\item_effects\_item_effect.dm"
#include "code\modules\item_effects\item_effect_aura.dm"
#include "code\modules\item_effects\item_effect_charges.dm"
#include "code\modules\item_effects\item_effect_debug.dm"
#include "code\modules\item_effects\item_effect_item.dm"
-#include "code\modules\item_worth\_helpers.dm"
#include "code\modules\keybindings\_defines.dm"
#include "code\modules\keybindings\_keybindings.dm"
#include "code\modules\keybindings\admin.dm"
@@ -2689,6 +2747,7 @@
#include "code\modules\materials\definitions\gasses\material_gas_mundane.dm"
#include "code\modules\materials\definitions\liquids\_mat_liquid.dm"
#include "code\modules\materials\definitions\liquids\materials_liquid_chemistry.dm"
+#include "code\modules\materials\definitions\liquids\materials_liquid_mundane.dm"
#include "code\modules\materials\definitions\liquids\materials_liquid_solvents.dm"
#include "code\modules\materials\definitions\liquids\materials_liquid_soup.dm"
#include "code\modules\materials\definitions\liquids\materials_liquid_toxins.dm"
@@ -2782,8 +2841,10 @@
#include "code\modules\mob\mob_genetics.dm"
#include "code\modules\mob\mob_grabs.dm"
#include "code\modules\mob\mob_helpers.dm"
+#include "code\modules\mob\mob_intent.dm"
#include "code\modules\mob\mob_layering.dm"
#include "code\modules\mob\mob_movement.dm"
+#include "code\modules\mob\mob_organs.dm"
#include "code\modules\mob\mob_snapshot.dm"
#include "code\modules\mob\mob_status.dm"
#include "code\modules\mob\mob_temperature.dm"
@@ -2833,10 +2894,12 @@
#include "code\modules\mob\living\living_dreams.dm"
#include "code\modules\mob\living\living_eating.dm"
#include "code\modules\mob\living\living_electrocution.dm"
+#include "code\modules\mob\living\living_fires.dm"
#include "code\modules\mob\living\living_genetics.dm"
#include "code\modules\mob\living\living_give.dm"
#include "code\modules\mob\living\living_grabs.dm"
#include "code\modules\mob\living\living_hallucinations.dm"
+#include "code\modules\mob\living\living_hud.dm"
#include "code\modules\mob\living\living_maneuvers.dm"
#include "code\modules\mob\living\living_organs.dm"
#include "code\modules\mob\living\living_powers.dm"
@@ -2980,9 +3043,9 @@
#include "code\modules\mob\living\simple_animal\aquatic\_aquatic_retaliate.dm"
#include "code\modules\mob\living\simple_animal\aquatic\aquatic_carp.dm"
#include "code\modules\mob\living\simple_animal\aquatic\aquatic_fish.dm"
+#include "code\modules\mob\living\simple_animal\aquatic\aquatic_fish_lantern.dm"
#include "code\modules\mob\living\simple_animal\aquatic\aquatic_sharks.dm"
#include "code\modules\mob\living\simple_animal\crow\crow.dm"
-#include "code\modules\mob\living\simple_animal\familiars\familiars.dm"
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
@@ -3068,9 +3131,6 @@
#include "code\modules\mob\observer\eye\freelook\ai\update_triggers.dm"
#include "code\modules\mob\observer\ghost\follow.dm"
#include "code\modules\mob\observer\ghost\ghost.dm"
-#include "code\modules\mob\observer\ghost\login.dm"
-#include "code\modules\mob\observer\ghost\logout.dm"
-#include "code\modules\mob\observer\ghost\say.dm"
#include "code\modules\mob\observer\virtual\_constants.dm"
#include "code\modules\mob\observer\virtual\base.dm"
#include "code\modules\mob\observer\virtual\helpers.dm"
@@ -3126,7 +3186,6 @@
#include "code\modules\modular_computers\file_system\programs\engineering\rcon_console.dm"
#include "code\modules\modular_computers\file_system\programs\engineering\shields_monitor.dm"
#include "code\modules\modular_computers\file_system\programs\engineering\shutoff_valve.dm"
-#include "code\modules\modular_computers\file_system\programs\engineering\supermatter_monitor.dm"
#include "code\modules\modular_computers\file_system\programs\generic\camera.dm"
#include "code\modules\modular_computers\file_system\programs\generic\configurator.dm"
#include "code\modules\modular_computers\file_system\programs\generic\crew_manifest.dm"
@@ -3252,6 +3311,7 @@
#include "code\modules\nano\modules\nano_module.dm"
#include "code\modules\organs\_organ_setup.dm"
#include "code\modules\organs\organ.dm"
+#include "code\modules\organs\organ_prosthetics.dm"
#include "code\modules\organs\pain.dm"
#include "code\modules\organs\ailments\_ailment.dm"
#include "code\modules\organs\ailments\ailment_codex.dm"
@@ -3291,9 +3351,6 @@
#include "code\modules\organs\internal\stomach.dm"
#include "code\modules\organs\internal\voice.dm"
#include "code\modules\organs\internal\species\golem.dm"
-#include "code\modules\organs\prosthetics\_prosthetics.dm"
-#include "code\modules\organs\prosthetics\prosthetics_manufacturer.dm"
-#include "code\modules\organs\prosthetics\prosthetics_manufacturer_models.dm"
#include "code\modules\overmap\_defines.dm"
#include "code\modules\overmap\_overmap.dm"
#include "code\modules\overmap\overmap_object.dm"
@@ -3382,6 +3439,7 @@
#include "code\modules\posture\posture_bodytype.dm"
#include "code\modules\posture\posture_mob.dm"
#include "code\modules\posture\posture_subtypes.dm"
+#include "code\modules\power\admin_setup_engine.dm"
#include "code\modules\power\apc.dm"
#include "code\modules\power\batteryrack.dm"
#include "code\modules\power\breaker_box.dm"
@@ -3556,17 +3614,18 @@
#include "code\modules\reagents\reagent_container_edibility.dm"
#include "code\modules\reagents\reagent_containers.dm"
#include "code\modules\reagents\reagent_dispenser.dm"
+#include "code\modules\reagents\chems\chems_alcohol.dm"
#include "code\modules\reagents\chems\chems_blood.dm"
#include "code\modules\reagents\chems\chems_cleaner.dm"
#include "code\modules\reagents\chems\chems_compounds.dm"
#include "code\modules\reagents\chems\chems_drinks.dm"
#include "code\modules\reagents\chems\chems_drugs.dm"
-#include "code\modules\reagents\chems\chems_ethanol.dm"
#include "code\modules\reagents\chems\chems_explosives.dm"
#include "code\modules\reagents\chems\chems_fuel.dm"
#include "code\modules\reagents\chems\chems_herbal.dm"
#include "code\modules\reagents\chems\chems_medicines.dm"
#include "code\modules\reagents\chems\chems_nutriment.dm"
+#include "code\modules\reagents\chems\chems_oil.dm"
#include "code\modules\reagents\chems\chems_painkillers.dm"
#include "code\modules\reagents\chems\chems_pigments.dm"
#include "code\modules\reagents\chems\chems_poisons.dm"
@@ -3593,6 +3652,8 @@
#include "code\modules\reagents\reactions\reaction_recipe.dm"
#include "code\modules\reagents\reactions\reaction_recipe_food.dm"
#include "code\modules\reagents\reactions\reaction_synthesis.dm"
+#include "code\modules\reagents\reagent_containers\_glass.dm"
+#include "code\modules\reagents\reagent_containers\_glass_edibility.dm"
#include "code\modules\reagents\reagent_containers\beaker.dm"
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
@@ -3603,8 +3664,6 @@
#include "code\modules\reagents\reagent_containers\food.dm"
#include "code\modules\reagents\reagent_containers\food_cooking.dm"
#include "code\modules\reagents\reagent_containers\food_edibility.dm"
-#include "code\modules\reagents\reagent_containers\glass.dm"
-#include "code\modules\reagents\reagent_containers\glass_edibility.dm"
#include "code\modules\reagents\reagent_containers\hypospray.dm"
#include "code\modules\reagents\reagent_containers\inhaler.dm"
#include "code\modules\reagents\reagent_containers\mortar.dm"
@@ -3700,7 +3759,11 @@
#include "code\modules\sealant_gun\sealant_injector.dm"
#include "code\modules\sealant_gun\sealant_rack.dm"
#include "code\modules\sealant_gun\sealant_tank.dm"
-#include "code\modules\security levels\keycard_authentication.dm"
+#include "code\modules\security_levels\_security_level.dm"
+#include "code\modules\security_levels\alarm_appearance.dm"
+#include "code\modules\security_levels\keycard_authentication.dm"
+#include "code\modules\security_levels\security_levels.dm"
+#include "code\modules\security_levels\security_state.dm"
#include "code\modules\shield_generators\floor_diffuser.dm"
#include "code\modules\shield_generators\handheld_diffuser.dm"
#include "code\modules\shield_generators\modes.dm"
@@ -3729,104 +3792,15 @@
#include "code\modules\species\species.dm"
#include "code\modules\species\species_allergies.dm"
#include "code\modules\species\species_attack.dm"
-#include "code\modules\species\species_bodytype.dm"
-#include "code\modules\species\species_bodytype_abilities.dm"
-#include "code\modules\species\species_bodytype_helpers.dm"
-#include "code\modules\species\species_bodytype_offsets.dm"
-#include "code\modules\species\species_bodytype_quadruped.dm"
-#include "code\modules\species\species_bodytype_random.dm"
-#include "code\modules\species\species_crystalline_bodytypes.dm"
#include "code\modules\species\species_getters.dm"
#include "code\modules\species\species_helpers.dm"
#include "code\modules\species\species_hud.dm"
-#include "code\modules\species\species_shapeshifter.dm"
-#include "code\modules\species\species_shapeshifter_bodytypes.dm"
#include "code\modules\species\outsider\random.dm"
-#include "code\modules\species\outsider\shadow.dm"
-#include "code\modules\species\outsider\starlight.dm"
#include "code\modules\species\station\golem.dm"
#include "code\modules\species\station\human.dm"
#include "code\modules\species\station\human_bodytypes.dm"
#include "code\modules\species\station\monkey.dm"
#include "code\modules\species\station\monkey_bodytypes.dm"
-#include "code\modules\spells\artifacts.dm"
-#include "code\modules\spells\construct_spells.dm"
-#include "code\modules\spells\contracts.dm"
-#include "code\modules\spells\no_clothes.dm"
-#include "code\modules\spells\racial_wizard.dm"
-#include "code\modules\spells\spell_code.dm"
-#include "code\modules\spells\spell_projectile.dm"
-#include "code\modules\spells\spellbook.dm"
-#include "code\modules\spells\spells.dm"
-#include "code\modules\spells\aoe_turf\aoe_turf.dm"
-#include "code\modules\spells\aoe_turf\blink.dm"
-#include "code\modules\spells\aoe_turf\charge.dm"
-#include "code\modules\spells\aoe_turf\disable_tech.dm"
-#include "code\modules\spells\aoe_turf\drain_blood.dm"
-#include "code\modules\spells\aoe_turf\exchange_wounds.dm"
-#include "code\modules\spells\aoe_turf\knock.dm"
-#include "code\modules\spells\aoe_turf\smoke.dm"
-#include "code\modules\spells\aoe_turf\summons.dm"
-#include "code\modules\spells\aoe_turf\conjure\conjure.dm"
-#include "code\modules\spells\aoe_turf\conjure\druidic_spells.dm"
-#include "code\modules\spells\aoe_turf\conjure\faithful_hound.dm"
-#include "code\modules\spells\aoe_turf\conjure\force_portal.dm"
-#include "code\modules\spells\aoe_turf\conjure\forcewall.dm"
-#include "code\modules\spells\aoe_turf\conjure\grove.dm"
-#include "code\modules\spells\artifacts\spellbound_servants.dm"
-#include "code\modules\spells\artifacts\storage.dm"
-#include "code\modules\spells\general\acid_spray.dm"
-#include "code\modules\spells\general\area_teleport.dm"
-#include "code\modules\spells\general\camera_vision.dm"
-#include "code\modules\spells\general\contract_spells.dm"
-#include "code\modules\spells\general\create_air.dm"
-#include "code\modules\spells\general\invisibility.dm"
-#include "code\modules\spells\general\mark_recall.dm"
-#include "code\modules\spells\general\portal_teleport.dm"
-#include "code\modules\spells\general\radiant_aura.dm"
-#include "code\modules\spells\general\return_master.dm"
-#include "code\modules\spells\general\toggle_armor.dm"
-#include "code\modules\spells\hand\blood_shards.dm"
-#include "code\modules\spells\hand\burning_grip.dm"
-#include "code\modules\spells\hand\entangle.dm"
-#include "code\modules\spells\hand\hand.dm"
-#include "code\modules\spells\hand\hand_item.dm"
-#include "code\modules\spells\hand\slippery_surface.dm"
-#include "code\modules\spells\hand\sunwrath.dm"
-#include "code\modules\spells\spellbook\battlemage.dm"
-#include "code\modules\spells\spellbook\cleric.dm"
-#include "code\modules\spells\spellbook\druid.dm"
-#include "code\modules\spells\spellbook\spatial.dm"
-#include "code\modules\spells\spellbook\standard.dm"
-#include "code\modules\spells\spellbook\student.dm"
-#include "code\modules\spells\targeted\analyze.dm"
-#include "code\modules\spells\targeted\blood_boil.dm"
-#include "code\modules\spells\targeted\cleric_spells.dm"
-#include "code\modules\spells\targeted\ethereal_jaunt.dm"
-#include "code\modules\spells\targeted\exude_pleasantness.dm"
-#include "code\modules\spells\targeted\genetic.dm"
-#include "code\modules\spells\targeted\glimpse_of_eternity.dm"
-#include "code\modules\spells\targeted\shapeshift.dm"
-#include "code\modules\spells\targeted\shatter_mind.dm"
-#include "code\modules\spells\targeted\shift.dm"
-#include "code\modules\spells\targeted\subjugate.dm"
-#include "code\modules\spells\targeted\swap.dm"
-#include "code\modules\spells\targeted\targeted.dm"
-#include "code\modules\spells\targeted\torment.dm"
-#include "code\modules\spells\targeted\equip\burning_touch.dm"
-#include "code\modules\spells\targeted\equip\dyrnwyn.dm"
-#include "code\modules\spells\targeted\equip\equip.dm"
-#include "code\modules\spells\targeted\equip\holy_relic.dm"
-#include "code\modules\spells\targeted\equip\horsemask.dm"
-#include "code\modules\spells\targeted\equip\party_hardy.dm"
-#include "code\modules\spells\targeted\equip\seed.dm"
-#include "code\modules\spells\targeted\equip\shield.dm"
-#include "code\modules\spells\targeted\projectile\dumbfire.dm"
-#include "code\modules\spells\targeted\projectile\fireball.dm"
-#include "code\modules\spells\targeted\projectile\magic_missile.dm"
-#include "code\modules\spells\targeted\projectile\passage.dm"
-#include "code\modules\spells\targeted\projectile\projectile.dm"
-#include "code\modules\spells\targeted\projectile\stuncuff.dm"
#include "code\modules\sprite_accessories\_accessory.dm"
#include "code\modules\sprite_accessories\_accessory_category.dm"
#include "code\modules\sprite_accessories\cosmetics\_accessory_cosmetics.dm"
@@ -3868,9 +3842,6 @@
#include "code\modules\submaps\submap_job.dm"
#include "code\modules\submaps\submap_join.dm"
#include "code\modules\submaps\submap_landmark.dm"
-#include "code\modules\supermatter\setup_supermatter.dm"
-#include "code\modules\supermatter\sm_looping_sound.dm"
-#include "code\modules\supermatter\supermatter.dm"
#include "code\modules\surgery\__surgery_setup.dm"
#include "code\modules\surgery\_surgery.dm"
#include "code\modules\surgery\bones.dm"
@@ -4043,12 +4014,12 @@
#include "code\modules\ZAS\Diagnostic.dm"
#include "code\modules\ZAS\Fire.dm"
#include "code\modules\ZAS\Turf.dm"
-#include "code\modules\ZAS\Variable Settings.dm"
+#include "code\modules\ZAS\VariableSettings.dm"
#include "code\modules\ZAS\Zone.dm"
#include "code\procs\announce.dm"
-#include "code\procs\AStar.dm"
#include "code\procs\dbcore.dm"
#include "code\procs\hud.dm"
+#include "code\procs\pathfinding.dm"
#include "code\procs\radio.dm"
#include "code\unit_tests\_defines.dm"
#include "code\unit_tests\_includes.dm"
@@ -4102,7 +4073,6 @@
#include "maps\_map_include.dm"
#include "maps\antag_spawn\ert\ert.dm"
#include "maps\antag_spawn\mercenary\mercenary.dm"
-#include "maps\antag_spawn\wizard\wizard.dm"
#include "maps\away_sites_testing\away_sites_testing_define.dm"
#include "maps\example\example_define.dm"
#include "maps\exodus\exodus.dm"
@@ -4121,7 +4091,6 @@
#include "maps\random_ruins\exoplanet_ruins\marooned\marooned.dm"
#include "maps\random_ruins\exoplanet_ruins\monoliths\monoliths.dm"
#include "maps\random_ruins\exoplanet_ruins\oasis\oasis.dm"
-#include "maps\random_ruins\exoplanet_ruins\oldpod\oldpod.dm"
#include "maps\random_ruins\exoplanet_ruins\radshrine\radshrine.dm"
#include "maps\random_ruins\exoplanet_ruins\spider_nest\spider_nest.dm"
#include "maps\random_ruins\exoplanet_ruins\tar_anomaly\tar_anomaly.dm"
@@ -4142,5 +4111,6 @@
#include "maps\~mapsystem\maps_unit_testing.dm"
#include "maps\~unit_tests\unit_testing.dm"
#include "mods\_modpack.dm"
+#include "mods\~compatibility\~compatibility.dm"
#include "~code\global_init.dm"
// END_INCLUDE
diff --git a/scripts/server.sh b/scripts/server.sh
index b65b6b33d16..bc89d45b7c4 100755
--- a/scripts/server.sh
+++ b/scripts/server.sh
@@ -63,7 +63,7 @@ while [[ ! -e stopserver ]]; do
cp "$GITDIR/$DME.rsc" .
cp -r "$GITDIR/nano" . # Necessary for NanoUI
cp -r "$GITDIR/maps" . # Necessary for runtime submap loading
- cp -r "$GITDIR/mods" . # Also necessary for runtime submap loading. TODO: a better solution
+ cp -r "$GITDIR/mods" . # Also necessary for runtime submap and NanoUI loading. TODO: a better solution?
[[ ! -e btime.so && -e "$GITDIR/btime.so" ]] && cp "$GITDIR/btime.so" .
[[ ! -e .git/logs ]] && mkdir -p .git/logs
cp "$GITDIR/.git/HEAD" ./.git/HEAD
diff --git a/sound/music/europa/Martian Cowboy.ogg b/sound/music/europa/MartianCowboy.ogg
similarity index 100%
rename from sound/music/europa/Martian Cowboy.ogg
rename to sound/music/europa/MartianCowboy.ogg
diff --git a/test/check-paths.sh b/test/check-paths.sh
index d34ee8c4458..852c681ae6c 100755
--- a/test/check-paths.sh
+++ b/test/check-paths.sh
@@ -23,35 +23,36 @@ exactly() { # exactly N name search [mode] [filter]
# With the potential exception of << if you increase any of these numbers you're probably doing it wrong
# Additional exception August 2020: \b is a regex symbol as well as a BYOND macro.
-exactly 1 "escapes" '\\\\(red|blue|green|black|b|i[^mc])'
-exactly 6 "Del()s" '\WDel\('
+exactly 3 "escapes" '\\(red|blue|green|black|b|i[^mc])'
+exactly 3 "Del()s" '(?> uses" '>>(?!>)' -P
+exactly 1 "world<< uses" 'world\s*<<'
+exactly 74 "'in world' uses" '\s+\bin world\b(?=\s*$|\s*//|\s*\))' -P
+exactly 1 "world.log<< uses" 'world.log\s*<<'
+exactly 18 "<< uses" '(?> uses" '(?\\])>>(?!>)' -P
exactly 0 "incorrect indentations" '^( {4,})' -P
-exactly 24 "text2path uses" 'text2path'
-exactly 4 "update_icon() override" '/update_icon\((.*)\)' -P
-exactly 0 "goto uses" 'goto '
+exactly 23 "text2path uses" 'text2path'
+exactly 4 "update_icon() overrides" '\/update_icon\(' -P
+exactly 0 "goto uses" '\bgoto\b'
exactly 9 "atom/New uses" '^/(obj|atom|area|mob|turf).*/New\('
exactly 1 "decl/New uses" '^/decl.*/New\('
-exactly 0 "tag uses" '\stag = ' -P '*.dmm'
-exactly 3 "unmarked globally scoped variables" '^(/|)var/(?!global)' -P
-exactly 0 "global-marked member variables" '\t(/|)var.*/global/.+' -P
-exactly 0 "static-marked globally scoped variables" '^(/|)var.*/static/.+' -P
+exactly 3 "tag uses" '(? 2:
+ ckey = sys.argv[2]
+ if ckey is not None:
+ ckey = ckey.lower()
+
+ singletargetmap = None
+ if len(sys.argv) > 3:
+ singletargetmap = sys.argv[3]
+ if singletargetmap is not None:
+ singletargetmap = singletargetmap.lower()
+
# Work out what maps we actually need to replicate to.
# This should be updated as map directories change, or the script will break.
targetmaps = []
@@ -40,7 +52,7 @@ def main():
if os.path.isdir(dir):
targetmap = dir.path
targetmap = targetmap.replace(mapdir + os.sep, "")
- if targetmap not in ignoremaps and targetmap != mapname:
+ if (targetmap not in ignoremaps) and (targetmap != mapname) and ((singletargetmap is None) or (singletargetmap == targetmap)):
targetmaps.append(targetmap)
# Make sure we can actually see the save directory.
@@ -62,6 +74,8 @@ def main():
continue
if match.group(1) != mapname:
continue
+ if (ckey is not None) and (ckey != root[root.rfind("/")+1:]):
+ continue
savefile = os.path.join(root, file)
with open(savefile, "r") as loadedsave:
wrote = 0
diff --git a/tools/map_migrations/4583_tables.txt b/tools/map_migrations/4583_tables.txt
new file mode 100644
index 00000000000..72bbd06136d
--- /dev/null
+++ b/tools/map_migrations/4583_tables.txt
@@ -0,0 +1,11 @@
+/obj/structure/table/woodentable/@SUBTYPES : /obj/structure/table/wood/@SUBTYPES{@OLD}
+/obj/structure/table/woodentable_reinforced/@SUBTYPES : /obj/structure/table/wood/reinforced/@SUBTYPES{@OLD}
+/obj/item/stack/tile/wood/@SUBTYPES : /obj/item/stack/tile/wood/oak/@SUBTYPES{@OLD}
+/obj/item/stack/tile/mahogany/@SUBTYPES : /obj/item/stack/tile/wood/mahogany/@SUBTYPES{@OLD}
+/obj/item/stack/tile/maple/@SUBTYPES : /obj/item/stack/tile/wood/maple/@SUBTYPES{@OLD}
+/obj/item/stack/tile/ebony/@SUBTYPES : /obj/item/stack/tile/wood/ebony/@SUBTYPES{@OLD}
+/obj/item/stack/tile/walnut/@SUBTYPES : /obj/item/stack/tile/wood/walnut/@SUBTYPES{@OLD}
+/obj/item/stack/tile/bamboo/@SUBTYPES : /obj/item/stack/tile/wood/bamboo/@SUBTYPES{@OLD}
+/obj/item/stack/tile/yew/@SUBTYPES : /obj/item/stack/tile/wood/yew/@SUBTYPES{@OLD}
+
+
diff --git a/tools/map_migrations/4615_target_stakes.txt b/tools/map_migrations/4615_target_stakes.txt
new file mode 100644
index 00000000000..8e4677a219f
--- /dev/null
+++ b/tools/map_migrations/4615_target_stakes.txt
@@ -0,0 +1,2 @@
+/obj/item/target/@SUBTYPES : /obj/item/target_dummy/@SUBTYPES{@OLD}
+/obj/structure/target_stake/@SUBTYPES : /obj/structure/target_stake/steel/@SUBTYPES{@OLD}
diff --git a/tools/map_migrations/4647_dirt.txt b/tools/map_migrations/4647_dirt.txt
new file mode 100644
index 00000000000..262db2c52ce
--- /dev/null
+++ b/tools/map_migrations/4647_dirt.txt
@@ -0,0 +1,2 @@
+/obj/effect/decal/cleanable/dirt/@SUBTYPES : /obj/effect/decal/cleanable/dirt/visible/@SUBTYPES{@OLD}
+
diff --git a/tools/map_migrations/4651_rods.txt b/tools/map_migrations/4651_rods.txt
new file mode 100644
index 00000000000..e7d5bffba5e
--- /dev/null
+++ b/tools/map_migrations/4651_rods.txt
@@ -0,0 +1,2 @@
+/obj/item/stack/material/rods/@SUBTYPES : /obj/item/stack/material/rods/mapped/steel/@SUBTYPES{@OLD}
+
diff --git a/tools/map_migrations/4662_waterskin.txt b/tools/map_migrations/4662_waterskin.txt
new file mode 100644
index 00000000000..8fa91607ee8
--- /dev/null
+++ b/tools/map_migrations/4662_waterskin.txt
@@ -0,0 +1,2 @@
+/obj/item/chems/waterskin/@SUBTYPES : /obj/item/chems/glass/waterskin/@SUBTYPES{@OLD}
+
diff --git a/~code/global_init.dm b/~code/global_init.dm
index 00301af2ca2..c483e8f9e8b 100644
--- a/~code/global_init.dm
+++ b/~code/global_init.dm
@@ -11,14 +11,14 @@
Pre-map initialization stuff should go here.
*/
-var/global_init = new /datum/global_init()
+var/global/global_init = new /datum/global_init()
/datum/global_init/New()
SSconfiguration.load_all_configuration()
- callHook("global_init")
- qdel(src) //we're done
+ generate_game_id()
+ makeDatumRefLists()
+ QDEL_IN(src, 0) //we're done. give it some time to finish setting up though
/datum/global_init/Destroy()
- global_init = null
- ..()
- return QDEL_HINT_HARDDEL
+ global.global_init = null
+ return ..()
|