diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 4f9e7d00b1..89fd32da7f 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -501,7 +501,7 @@ Turf and target are seperate in case you want to teleport some distance from a t moblist.Add(M) for(var/mob/new_player/M in sortmob) moblist.Add(M) - for(var/mob/living/simple_animal/M in sortmob) + for(var/mob/living/simple_mob/M in sortmob) moblist.Add(M) // for(var/mob/living/silicon/hivebot/M in sortmob) // mob_list.Add(M) diff --git a/code/_macros.dm b/code/_macros.dm index 5188c031ee..c977617d4a 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -46,7 +46,7 @@ #define isbot(A) istype(A, /mob/living/bot) -#define isxeno(A) istype(A, /mob/living/simple_animal/xeno) +#define isxeno(A) istype(A, /mob/living/simple_mob/animal/space/alien) #define isopenspace(A) istype(A, /turf/simulated/open) diff --git a/code/game/gamemodes/technomancer/spells/resurrect.dm b/code/game/gamemodes/technomancer/spells/resurrect.dm index b94308a449..2663a132a9 100644 --- a/code/game/gamemodes/technomancer/spells/resurrect.dm +++ b/code/game/gamemodes/technomancer/spells/resurrect.dm @@ -31,7 +31,7 @@ return 0 user << "You stab \the [L] with a hidden integrated hypo, attempting to bring them back..." if(istype(L, /mob/living/simple_mob)) - var/mob/living/simple_animal/SM = L + var/mob/living/simple_mob/SM = L SM.health = SM.getMaxHealth() / 3 SM.stat = CONSCIOUS dead_mob_list -= SM diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index 8c435f5845..8fe6ffef8a 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -201,7 +201,7 @@ var/prison_shuttle_timeleft = 0 for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... bug.gib() - for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug... + for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... pest.gib() start_location.move_contents_to(end_location) diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index 1f7c959db5..431d6278d6 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -81,7 +81,7 @@ var/specops_shuttle_timeleft = 0 for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... bug.gib() - for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug... + for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... pest.gib() start_location.move_contents_to(end_location) diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index ba7193b69b..e02ab68474 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -166,7 +166,7 @@ var/syndicate_elite_shuttle_timeleft = 0 for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area... bug.gib() - for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug... + for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug... pest.gib() start_location.move_contents_to(end_location) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 15bbc512ab..316139954c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -476,9 +476,6 @@ About the new airlock wires panel: return ..(user) -/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user as mob) - ..(user) - /obj/machinery/door/airlock/proc/isElectrified() if(src.electrified_until != 0) return 1 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index ab8af4c1f0..32f86dce87 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -40,7 +40,7 @@ /obj/machinery/door/attack_generic(var/mob/user, var/damage) if(isanimal(user)) var/mob/living/simple_mob/S = user - if(damage >= 10) + if(damage >= 5) visible_message("\The [user] smashes into the [src]!") playsound(src, S.attack_sound, 75, 1) take_damage(damage) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 0746b21c13..5818c6e914 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -409,7 +409,7 @@ var/list/turret_icons /obj/machinery/porta_turret/attack_generic(mob/living/L, damage) if(isanimal(L)) var/mob/living/simple_mob/S = L - if(damage >= 10) + if(damage >= 5) var/incoming_damage = round(damage - (damage / 5)) //Turrets are slightly armored, assumedly. visible_message("\The [S] [pick(S.attacktext)] \the [src]!") take_damage(incoming_damage) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index f3260238a2..f5cac2b068 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -32,7 +32,7 @@ var/usable = 0 if(user.Adjacent(T) && user.get_active_hand() == src && !user.stat && !user.restrained()) usable = 1 - if(!user.IsAdvancedToolUser() && istype(user, /mob/living/simple_animal)) + if(!user.IsAdvancedToolUser() && istype(user, /mob/living/simple_mob)) var/mob/living/simple_mob/S = user if(!S.IsHumanoidToolUser(src)) usable = 0 diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index aec6a790b2..d9a886029d 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -292,7 +292,7 @@ var/list/tape_roll_applications = list() add_fingerprint(M) if (!allowed(M)) //only select few learn art of not crumpling the tape M << "You are not supposed to go past [src]..." - if(M.a_intent == I_HELP && !(istype(M, /mob/living/simple_animal))) + if(M.a_intent == I_HELP && !(istype(M, /mob/living/simple_mob))) return 0 crumple() return ..(mover) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index e37b2f9977..53c092d923 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -269,9 +269,8 @@ /obj/item/weapon/melee/baton/shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) ..(target, user, hit_zone) - if(istype(target, /mob/living/simple_animal) && status) - var/mob/living/simple_animal/SA = target - SA.taunt(user) + if(status && target.has_AI()) + target.taunt(user) // Borg version, for the lost module. /obj/item/weapon/melee/baton/shocker/robot diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index f97433aab4..2d39a63198 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -206,7 +206,7 @@ user.setClickCooldown(user.get_attack_speed()) if(!damage) return - if(damage >= 10) + if(damage >= 5) visible_message("[user] smashes into [src]!") if(reinf) damage = damage / 2 diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index 6cb93ab530..8d8cf5add1 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -27,16 +27,16 @@ cleaving = TRUE var/hit_mobs = 0 - for(var/mob/living/simple_animal/SA in range(get_turf(target), 1)) - if(SA.stat == DEAD) // Don't beat a dead horse. + for(var/mob/living/simple_mob/SM in range(get_turf(target), 1)) + if(SM.stat == DEAD) // Don't beat a dead horse. continue - if(SA == user) // Don't hit ourselves. Simple mobs shouldn't be able to do this but that might change later to be able to hit all mob/living-s. + if(SM == user) // Don't hit ourselves. Simple mobs shouldn't be able to do this but that might change later to be able to hit all mob/living-s. continue - if(SA == target) // We (presumably) already hit the target before cleave() was called. orange() should prevent this but just to be safe... + if(SM == target) // We (presumably) already hit the target before cleave() was called. orange() should prevent this but just to be safe... continue - if(!SA.Adjacent(user) || !SA.Adjacent(target)) // Cleaving only hits mobs near the target mob and user. + if(!SM.Adjacent(user) || !SM.Adjacent(target)) // Cleaving only hits mobs near the target mob and user. continue - if(resolve_attackby(SA, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true. + if(resolve_attackby(SM, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true. hit_mobs++ cleave_visual(user, target) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 58725cb2e9..21090661f3 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -462,9 +462,11 @@ if(L in holder.selected_mobs) // Todo: Select graphic only the admin can see? holder.selected_mobs -= L + user.client.images -= L.selected_image to_chat(user, span("notice", "Deselected \the [L].")) else holder.selected_mobs += L + user.client.images += L.selected_image to_chat(user, span("notice", "Selected \the [L].")) else to_chat(user, span("warning", "\The [L] is not AI controlled.")) diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index 23bc9215b0..2c7e02ecef 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -259,62 +259,6 @@ ai_log("handle_stance_strategical() : Exiting.", AI_LOG_TRACE) ai_log("++++++++++ Slow Process Ending ++++++++++", AI_LOG_TRACE) -/* - //Yes I'm breaking this into two if()'s for ease of reading - //If we ARE ALLOWED TO - if(returns_home && home_turf && !astarpathing && (world.time - stance_changed) > 10 SECONDS) - if(get_dist(src,home_turf) > wander_distance) - move_to_delay = initial(move_to_delay)*2 //Walk back. - GoHome() - else - stop_automated_movement = 0 -*/ - -/* -// For proccessing the current stance, or setting and processing a new one -/mob/living/simple_animal/proc/handle_stance(var/new_stance) - if(ai_inactive) - stance = STANCE_IDLE - return - - if(new_stance) - set_stance(new_stance) - - switch(stance) - if(STANCE_IDLE) - target_mob = null - a_intent = I_HELP - annoyed = max(0,annoyed--) - - //Yes I'm breaking this into two if()'s for ease of reading - //If we ARE ALLOWED TO - if(returns_home && home_turf && !astarpathing && (world.time - stance_changed) > 10 SECONDS) - if(get_dist(src,home_turf) > wander_distance) - move_to_delay = initial(move_to_delay)*2 //Walk back. - GoHome() - else - stop_automated_movement = 0 - - //Search for targets while idle - if(hostile) - FindTarget() - if(STANCE_FOLLOW) - annoyed = 15 - FollowTarget() - if(follow_until_time && world.time > follow_until_time) - LoseFollow() - return - if(hostile) - FindTarget() - if(STANCE_APPROACH) - annoyed = 50 - a_intent = I_HURT - RequestHelp() - MoveToTarget() - if(STANCE_FIGHT) - annoyed = 50 - AttackTarget() -*/ // Helper proc to turn AI 'busy' mode on or off without having to check if there is an AI, to simplify writing code. /mob/living/proc/set_AI_busy(value) diff --git a/code/modules/blob2/overmind/types.dm b/code/modules/blob2/overmind/types.dm index 92fd9a50a6..6049ccfc72 100644 --- a/code/modules/blob2/overmind/types.dm +++ b/code/modules/blob2/overmind/types.dm @@ -72,7 +72,7 @@ return // Spore things -/datum/blob_type/proc/on_spore_death(mob/living/simple_animal/hostile/blob/spore/S) +/datum/blob_type/proc/on_spore_death(mob/living/simple_mob/blob/spore/S) return diff --git a/code/modules/food/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm index 1e5d624188..b20b1a9d98 100644 --- a/code/modules/food/kitchen/gibber.dm +++ b/code/modules/food/kitchen/gibber.dm @@ -120,7 +120,7 @@ user << "The gibber is locked and running, wait for it to finish." return - if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) ) + if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_mob)) ) user << "This is not suitable for the gibber!" return diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index cbeff5fb34..f5b6b28e11 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -238,7 +238,7 @@ /obj/item/weapon/deck/MouseDrop(mob/user as mob) // Code from Paper bin, so you can still pick up the deck if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) - if(!istype(usr, /mob/living/simple_animal)) + if(!istype(usr, /mob/living/simple_mob)) if( !usr.get_active_hand() ) //if active hand is empty var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] @@ -256,7 +256,7 @@ /obj/item/weapon/deck/verb_pickup(mob/user as mob) // Snowflaked so pick up verb work as intended if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) - if(!istype(usr, /mob/living/simple_animal)) + if(!istype(usr, /mob/living/simple_mob)) if( !usr.get_active_hand() ) //if active hand is empty var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] diff --git a/code/modules/mob/freelook/mask/chunk.dm b/code/modules/mob/freelook/mask/chunk.dm index 9f5f76733a..b540a8023b 100644 --- a/code/modules/mob/freelook/mask/chunk.dm +++ b/code/modules/mob/freelook/mask/chunk.dm @@ -25,7 +25,7 @@ /mob/living/silicon/seen_cult_turfs() return list() -/mob/living/simple_animal/seen_cult_turfs() +/mob/living/simple_mob/seen_cult_turfs() return seen_turfs_in_range(src, 1) /mob/living/simple_mob/construct/shade/seen_cult_turfs() diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 55760d27b1..e44b003213 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -206,7 +206,7 @@ else if(declare_arrests) var/action = arrest_type ? "detaining" : "arresting" - if(istype(target, /mob/living/simple_animal)) + if(istype(target, /mob/living/simple_mob)) action = "fighting" global_announcer.autosay("[src] is [action] a level [threat] [action != "fighting" ? "suspect" : "threat"] [target_name(target)] in [get_area(src)].", "[src]", "Security") UnarmedAttack(target) @@ -260,8 +260,8 @@ C.handcuffed = new /obj/item/weapon/handcuffs(C) C.update_inv_handcuffed() busy = 0 - else if(istype(M, /mob/living/simple_animal)) - var/mob/living/simple_animal/S = M + else if(istype(M, /mob/living/simple_mob)) + var/mob/living/simple_mob/S = M S.Weaken(xeno_stun_strength) S.adjustBruteLoss(xeno_harm_strength) do_attack_animation(M) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7a28870de8..e8bbd3a607 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -16,6 +16,8 @@ dsma.blend_mode = BLEND_ADD dsoverlay.appearance = dsma + selected_image = image(icon = 'icons/mob/screen1.dmi', loc = src, icon_state = "centermarker") + /mob/living/Destroy() dsoverlay.loc = null //I'll take my coat with me dsoverlay = null @@ -29,6 +31,7 @@ nest = null if(buckled) buckled.unbuckle_mob(src, TRUE) + qdel(selected_image) return ..() //mob verbs are faster than object verbs. See mob/verb/examine. diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 0b294af295..23507d88bc 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -340,7 +340,7 @@ return adjustBruteLoss(damage) - add_attack_logs(user,src,"Generic attack (probably animal)", admin_notify = FALSE) //Usually due to simple_animal attacks + add_attack_logs(user,src,"Generic attack (probably animal)", admin_notify = FALSE) //Usually due to simple_mob attacks if(ai_holder) ai_holder.react_to_attack(user) src.visible_message("[user] has [attack_message] [src]!") diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index e827d342af..20f798ec71 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -67,3 +67,5 @@ var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks var/looking_elsewhere = FALSE //If the mob's view has been relocated to somewhere else, like via a camera or with binocs + + var/image/selected_image = null // Used for buildmode AI control stuff. diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm index 530597bef2..cffa9cb134 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm @@ -111,34 +111,6 @@ return active_spell.on_ranged_cast(A, src) return ..() - -/* -// Used to cast spells. -/mob/living/simple_animal/technomancer_golem/RangedAttack(var/atom/A, var/params) - if(active_spell) - spellcast_pre_animation() - if(active_spell.cast_methods & CAST_RANGED) - active_spell.on_ranged_cast(A, src) - spellcast_post_animation() - -/mob/living/simple_animal/technomancer_golem/UnarmedAttack(var/atom/A, var/proximity) - if(proximity) - if(active_spell) - spellcast_pre_animation() - if(!Adjacent(A)) // Need to check again since they might've moved while 'warming up'. - spellcast_post_animation() - return - var/effective_cooldown = round(active_spell.cooldown * core.cooldown_modifier, 5) - if(active_spell.cast_methods & CAST_MELEE) - active_spell.on_melee_cast(A, src) - else if(active_spell.cast_methods & CAST_RANGED) - active_spell.on_ranged_cast(A, src) - spellcast_post_animation() - src.setClickCooldown(effective_cooldown) - else - ..() -*/ - /mob/living/simple_mob/mechanical/technomancer_golem/melee_pre_animation(atom/A) if(active_spell && active_spell.cast_methods & CAST_MELEE|CAST_RANGED) // If they're trying to melee-cast a spell, use the special animation instead. special_pre_animation(A) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8124fb06bf..6c31f54f8e 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -537,7 +537,7 @@ proc/is_blind(A) return threatcount -/mob/living/simple_animal/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) +/mob/living/simple_mob/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) var/threatcount = ..() if(. == SAFE_PERP) return SAFE_PERP diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index f757313e24..3b3477b833 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -237,7 +237,7 @@ /mob/living/carbon/human/Animalize() - var/list/mobtypes = typesof(/mob/living/simple_animal) + var/list/mobtypes = typesof(/mob/living/simple_mob) var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes if(!safe_animal(mobpath)) @@ -271,7 +271,7 @@ /mob/proc/Animalize() - var/list/mobtypes = typesof(/mob/living/simple_animal) + var/list/mobtypes = typesof(/mob/living/simple_mob) var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes if(!safe_animal(mobpath)) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 4a81179c72..4a24500fd3 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -19,7 +19,7 @@ /obj/item/weapon/paper_bin/MouseDrop(mob/user as mob) if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) - if(!istype(usr, /mob/living/simple_animal)) + if(!istype(usr, /mob/living/simple_mob)) if( !usr.get_active_hand() ) //if active hand is empty var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 7501735b0d..12696c655e 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -185,7 +185,6 @@ /obj/machinery/atmospherics, /obj/machinery/power/emitter, /obj/machinery/field_generator, - /mob/living/simple_animal, /obj/machinery/door/blast, /obj/machinery/particle_accelerator/control_box, /obj/structure/particle_accelerator/fuel_chamber, diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index ed90e66c6a..7aa6b96792 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -211,7 +211,7 @@ for(var/mob/living/carbon/bug in destination) bug.gib() - for(var/mob/living/simple_animal/pest in destination) + for(var/mob/living/simple_mob/pest in destination) pest.gib() origin.move_contents_to(destination, direction=direction) diff --git a/polaris.dme b/polaris.dme index 743822b1d6..eeda793e5a 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2580,7 +2580,7 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\example\example.dm" +#include "maps\southern_cross\southern_cross.dm" #include "maps\submaps\space_submaps\space.dm" #include "maps\submaps\surface_submaps\mountains\mountains.dm" #include "maps\submaps\surface_submaps\mountains\mountains_areas.dm"