Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 9/28/2017_stack_asthetics
@@ -2,4 +2,3 @@
|
||||
name = mapmerge driver
|
||||
driver = ./mapmerge.sh %O %A %B
|
||||
recursive = text
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
#define MODIFIER_STACK_EXTEND 2 // Disallows a second instance, but will extend the first instance if possible.
|
||||
#define MODIFIER_STACK_ALLOWED 3 // Multiple instances are allowed.
|
||||
|
||||
#define MODIFIER_GENETIC 0 // Modifiers with this flag will be copied to mobs who get cloned.
|
||||
#define MODIFIER_GENETIC 1 // Modifiers with this flag will be copied to mobs who get cloned.
|
||||
|
||||
// Bodyparts and organs.
|
||||
#define O_MOUTH "mouth"
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define NO_SLIP 0x10 // Cannot fall over.
|
||||
#define NO_POISON 0x20 // Cannot not suffer toxloss.
|
||||
#define NO_EMBED 0x40 // Can step on broken glass with no ill-effects and cannot have shrapnel embedded in it.
|
||||
#define NO_HALLUCINATION 0x80 // Don't hallucinate, ever
|
||||
// unused: 0x8000 - higher than this will overflow
|
||||
|
||||
// Species spawn flags
|
||||
|
||||
@@ -20,14 +20,14 @@ var/datum/controller/process/planet/planet_controller = null
|
||||
for(var/turf/simulated/OT in outdoor_turfs)
|
||||
for(var/datum/planet/P in planets)
|
||||
if(OT.z in P.expected_z_levels)
|
||||
P.planet_floors += OT
|
||||
P.planet_floors |= OT
|
||||
break
|
||||
outdoor_turfs.Cut() //Why were you in there INCORRECTLY?
|
||||
|
||||
for(var/turf/unsimulated/wall/planetary/PW in planetary_walls)
|
||||
for(var/datum/planet/P in planets)
|
||||
if(PW.type == P.planetary_wall_type)
|
||||
P.planet_walls += PW
|
||||
P.planet_walls |= PW
|
||||
break
|
||||
planetary_walls.Cut()
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/mind=null
|
||||
var/languages=null
|
||||
var/list/flavor=null
|
||||
var/list/genetic_modifiers = list() // Modifiers with the MODIFIER_GENETIC flag are saved. Note that only the type is saved, not an instance.
|
||||
|
||||
/datum/dna2/record/proc/GetData()
|
||||
var/list/ser=list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0)
|
||||
|
||||
@@ -139,6 +139,25 @@
|
||||
H.set_cloned_appearance()
|
||||
update_icon()
|
||||
|
||||
// A modifier is added which makes the new clone be unrobust.
|
||||
var/modifier_lower_bound = 25 MINUTES
|
||||
var/modifier_upper_bound = 40 MINUTES
|
||||
|
||||
// Upgraded cloners can reduce the time of the modifier, up to 80%
|
||||
var/clone_sickness_length = abs(((heal_level - 20) / 100 ) - 1)
|
||||
clone_sickness_length = between(0.2, clone_sickness_length, 1.0) // Caps it off just incase.
|
||||
modifier_lower_bound = round(modifier_lower_bound * clone_sickness_length, 1)
|
||||
modifier_upper_bound = round(modifier_upper_bound * clone_sickness_length, 1)
|
||||
|
||||
H.add_modifier(/datum/modifier/recently_cloned, rand(modifier_lower_bound, modifier_upper_bound))
|
||||
|
||||
// Modifier that doesn't do anything.
|
||||
H.add_modifier(/datum/modifier/cloned)
|
||||
|
||||
// This is really stupid.
|
||||
for(var/modifier_type in R.genetic_modifiers)
|
||||
H.add_modifier(modifier_type)
|
||||
|
||||
for(var/datum/language/L in R.languages)
|
||||
H.add_language(L.name)
|
||||
H.flavor_texts = R.flavor.Copy()
|
||||
@@ -498,3 +517,31 @@
|
||||
if(istype(A, /obj/machinery/clonepod))
|
||||
A:malfunction()
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modifier applied to newly cloned people.
|
||||
*/
|
||||
|
||||
// Gives rather nasty downsides for awhile, making them less robust.
|
||||
/datum/modifier/recently_cloned
|
||||
name = "recently cloned"
|
||||
desc = "You feel rather weak, having been cloned awhile ago."
|
||||
|
||||
on_created_text = "<span class='warning'><font size='3'>You feel really weak.</font></span>"
|
||||
on_expired_text = "<span class='notice'><font size='3'>You feel your strength returning to you.</font></span>"
|
||||
|
||||
max_health_percent = 0.6 // -40% max health.
|
||||
incoming_damage_percent = 1.1 // 10% more incoming damage.
|
||||
outgoing_melee_damage_percent = 0.7 // 30% less melee damage.
|
||||
disable_duration_percent = 1.25 // Stuns last 25% longer.
|
||||
slowdown = 1 // Slower.
|
||||
evasion = -1 // 15% easier to hit.
|
||||
|
||||
// Does nothing.
|
||||
/datum/modifier/cloned
|
||||
name = "cloned"
|
||||
desc = "You died and were cloned, and you can never forget that."
|
||||
|
||||
flags = MODIFIER_GENETIC // So it gets copied if they die and get cloned again.
|
||||
stacks = MODIFIER_STACK_ALLOWED // Two deaths means two instances of this.
|
||||
|
||||
|
||||
@@ -330,6 +330,9 @@
|
||||
R.types = DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE
|
||||
R.languages = subject.languages
|
||||
R.flavor = subject.flavor_texts.Copy()
|
||||
for(var/datum/modifier/mod in subject.modifiers)
|
||||
if(mod.flags & MODIFIER_GENETIC)
|
||||
R.genetic_modifiers.Add(mod.type)
|
||||
|
||||
//Add an implant if needed
|
||||
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
icon_state = "sheater[on]"
|
||||
if(panel_open)
|
||||
overlays += "sheater-open"
|
||||
if(on)
|
||||
set_light(3, 3, "#FFCC00")
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/machinery/space_heater/examine(mob/user)
|
||||
..(user)
|
||||
|
||||
@@ -102,7 +102,16 @@
|
||||
flashfail = 1
|
||||
|
||||
else if(issilicon(M))
|
||||
M.Weaken(rand(5,10))
|
||||
flashfail = 0
|
||||
var/mob/living/silicon/S = M
|
||||
if(isrobot(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
if(R.has_active_type(/obj/item/borg/combat/shield))
|
||||
var/obj/item/borg/combat/shield/shield = locate() in R
|
||||
if(shield)
|
||||
if(shield.active)
|
||||
shield.adjust_flash_count(R, 1)
|
||||
flashfail = 1
|
||||
else
|
||||
flashfail = 1
|
||||
|
||||
@@ -125,6 +134,7 @@
|
||||
else
|
||||
|
||||
user.visible_message("<span class='notice'>[user] overloads [M]'s sensors with the flash!</span>")
|
||||
M.Weaken(rand(5,10))
|
||||
else
|
||||
|
||||
user.visible_message("<span class='notice'>[user] fails to blind [M] with the flash!</span>")
|
||||
|
||||
@@ -125,3 +125,6 @@
|
||||
name = "\improper ERT radio encryption key"
|
||||
icon_state = "cent_cypherkey"
|
||||
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/omni //Literally only for the admin intercoms
|
||||
channels = list("Mercenary" = 1, "Raider" = 1, "Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
@@ -310,6 +310,9 @@
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
|
||||
/obj/item/device/radio/headset/omni //Only for the admin intercoms
|
||||
ks2type = /obj/item/device/encryptionkey/omni
|
||||
|
||||
/obj/item/device/radio/headset/ia
|
||||
name = "internal affair's headset"
|
||||
desc = "The headset of your worst enemy."
|
||||
|
||||
@@ -1,28 +1,21 @@
|
||||
var/list/syndicate_ids = list()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate
|
||||
name = "agent card"
|
||||
icon_state = "syndicate"
|
||||
assignment = "Agent"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
var/electronic_warfare = 1
|
||||
var/registered_user = null
|
||||
var/mob/registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
|
||||
..()
|
||||
syndicate_ids += src
|
||||
access = syndicate_access.Copy()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
syndicate_ids -= src
|
||||
registered_user = null
|
||||
return ..()
|
||||
/obj/item/weapon/card/id/syndicate/station_access/New()
|
||||
..() // Same as the normal Syndicate id, only already has all station access
|
||||
access |= get_all_station_access()
|
||||
|
||||
// On mob destruction, ensure any references are cleared
|
||||
/mob/Destroy()
|
||||
for(var/obj/item/weapon/card/id/syndicate/SID in syndicate_ids)
|
||||
if(SID.registered_user == src)
|
||||
SID.registered_user = null
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
unset_registered_user(registered_user)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/prevent_tracking()
|
||||
@@ -37,9 +30,8 @@ var/list/syndicate_ids = list()
|
||||
user << "<span class='notice'>The microscanner activates as you pass it over the ID, copying its access.</span>"
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
|
||||
if(!registered_user)
|
||||
registered_user = user
|
||||
user.set_id_info(src)
|
||||
// We use the fact that registered_name is not unset should the owner be vaporized, to ensure the id doesn't magically become unlocked.
|
||||
if(!registered_user && register_user(user))
|
||||
user << "<span class='notice'>The microscanner marks you as its owner, preventing others from accessing its internals.</span>"
|
||||
if(registered_user == user)
|
||||
switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show"))
|
||||
@@ -72,6 +64,21 @@ var/list/syndicate_ids = list()
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/proc/register_user(var/mob/user)
|
||||
if(!istype(user) || user == registered_user)
|
||||
return FALSE
|
||||
unset_registered_user()
|
||||
registered_user = user
|
||||
user.set_id_info(src)
|
||||
user.register(OBSERVER_EVENT_DESTROY, src, /obj/item/weapon/card/id/syndicate/proc/unset_registered_user)
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/proc/unset_registered_user(var/mob/user)
|
||||
if(!registered_user || (user && user != registered_user))
|
||||
return
|
||||
registered_user.unregister(OBSERVER_EVENT_DESTROY, src)
|
||||
registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/CanUseTopic(mob/user)
|
||||
if(user != registered_user)
|
||||
return STATUS_CLOSE
|
||||
@@ -172,7 +179,7 @@ var/list/syndicate_ids = list()
|
||||
icon_state = initial(icon_state)
|
||||
name = initial(name)
|
||||
registered_name = initial(registered_name)
|
||||
registered_user = null
|
||||
unset_registered_user()
|
||||
sex = initial(sex)
|
||||
user << "<span class='notice'>All information has been deleted from \the [src].</span>"
|
||||
. = 1
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
return
|
||||
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='warning'>Uh ... how do those things work?!</span>"
|
||||
to_chat(user, "<span class='warning'>Uh ... how do those things work?!</span>")
|
||||
place_handcuffs(user, user)
|
||||
return
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
if(can_place(C, user))
|
||||
place_handcuffs(C, user)
|
||||
else
|
||||
user << "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>"
|
||||
to_chat(user, "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>")
|
||||
|
||||
/obj/item/weapon/handcuffs/proc/can_place(var/mob/target, var/mob/user)
|
||||
if(user == target)
|
||||
@@ -60,11 +60,11 @@
|
||||
return 0
|
||||
|
||||
if (!H.has_organ_for_slot(slot_handcuffed))
|
||||
user << "<span class='danger'>\The [H] needs at least two wrists before you can cuff them together!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [H] needs at least two wrists before you can cuff them together!</span>")
|
||||
return 0
|
||||
|
||||
if(istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit.
|
||||
user << "<span class='danger'>\The [src] won't fit around \the [H.gloves]!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [src] won't fit around \the [H.gloves]!</span>")
|
||||
return 0
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
||||
@@ -166,7 +166,7 @@ var/last_chew = 0
|
||||
if (R.use(1))
|
||||
var/obj/item/weapon/material/wirerod/W = new(get_turf(user))
|
||||
user.put_in_hands(W)
|
||||
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
|
||||
to_chat(user, "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>")
|
||||
qdel(src)
|
||||
update_icon(user)
|
||||
|
||||
@@ -188,7 +188,7 @@ var/last_chew = 0
|
||||
desc = "Use this to keep prisoners in line."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "handcuff"
|
||||
icon_state = "legcuff"
|
||||
flags = CONDUCT
|
||||
throwforce = 0
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
@@ -204,7 +204,7 @@ var/last_chew = 0
|
||||
return
|
||||
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='warning'>Uh ... how do those things work?!</span>"
|
||||
to_chat(user, "<span class='warning'>Uh ... how do those things work?!</span>")
|
||||
place_legcuffs(user, user)
|
||||
return
|
||||
|
||||
@@ -217,7 +217,7 @@ var/last_chew = 0
|
||||
if(can_place(C, user))
|
||||
place_legcuffs(C, user)
|
||||
else
|
||||
user << "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>"
|
||||
to_chat(user, "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>")
|
||||
|
||||
/obj/item/weapon/handcuffs/legcuffs/proc/place_legcuffs(var/mob/living/carbon/target, var/mob/user)
|
||||
playsound(src.loc, cuff_sound, 30, 1, -2)
|
||||
@@ -227,11 +227,11 @@ var/last_chew = 0
|
||||
return 0
|
||||
|
||||
if (!H.has_organ_for_slot(slot_legcuffed))
|
||||
user << "<span class='danger'>\The [H] needs at least two ankles before you can cuff them together!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [H] needs at least two ankles before you can cuff them together!</span>")
|
||||
return 0
|
||||
|
||||
if(istype(H.shoes,/obj/item/clothing/shoes/magboots/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit.
|
||||
user << "<span class='danger'>\The [src] won't fit around \the [H.shoes]!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [src] won't fit around \the [H.shoes]!</span>")
|
||||
return 0
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
||||
|
||||
@@ -241,6 +241,50 @@
|
||||
new /obj/item/device/multitool/alien(src)
|
||||
new /obj/item/stack/cable_coil/alien(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/alien
|
||||
name = "alien belt"
|
||||
desc = "A belt(?) that can hold things."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "belt"
|
||||
item_state = "security"
|
||||
can_hold = list(
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle,
|
||||
/obj/item/weapon/reagent_containers/pill,
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/weapon/flame/lighter/zippo,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/taperoll,
|
||||
/obj/item/device/megaphone,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/head/surgery,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/weapon/surgical
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/alien/New()
|
||||
..()
|
||||
new /obj/item/weapon/surgical/scalpel/alien(src)
|
||||
new /obj/item/weapon/surgical/hemostat/alien(src)
|
||||
new /obj/item/weapon/surgical/retractor/alien(src)
|
||||
new /obj/item/weapon/surgical/circular_saw/alien(src)
|
||||
new /obj/item/weapon/surgical/FixOVein/alien(src)
|
||||
new /obj/item/weapon/surgical/bone_clamp/alien(src)
|
||||
new /obj/item/weapon/surgical/cautery/alien(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/champion
|
||||
name = "championship belt"
|
||||
desc = "Proves to the world that you are the strongest!"
|
||||
|
||||
@@ -166,13 +166,22 @@
|
||||
/obj/item/weapon/surgical/bonesetter
|
||||
name = "bone setter"
|
||||
desc = "Put them in their place."
|
||||
icon_state = "bone setter"
|
||||
icon_state = "bone_setter"
|
||||
force = 8.0
|
||||
throwforce = 9.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
attack_verb = list("attacked", "hit", "bludgeoned")
|
||||
|
||||
/obj/item/weapon/surgical/bone_clamp
|
||||
name = "bone clamp"
|
||||
desc = "The best way to get a bone fixed fast."
|
||||
icon_state = "bone_clamp"
|
||||
force = 8
|
||||
throwforce = 9
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
attack_verb = list("attacked", "hit", "bludgeoned")
|
||||
|
||||
// Cyborg Tools
|
||||
|
||||
@@ -201,4 +210,38 @@
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/bonesetter/cyborg
|
||||
toolspeed = 0.5
|
||||
toolspeed = 0.5
|
||||
|
||||
|
||||
// Alien Tools
|
||||
/obj/item/weapon/surgical/retractor/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/hemostat/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/cautery/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/surgicaldrill/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/circular_saw/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/FixOVein/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/bone_clamp/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.75
|
||||
@@ -239,3 +239,14 @@
|
||||
if(air_group)
|
||||
return 0 //Make sure air doesn't drain
|
||||
..()
|
||||
|
||||
/obj/structure/grille/broken/cult
|
||||
icon_state = "grillecult-b"
|
||||
|
||||
/obj/structure/grille/rustic
|
||||
name = "rustic grille"
|
||||
desc = "A lattice of metal, arranged in an old, rustic fashion."
|
||||
icon_state = "grillerustic"
|
||||
|
||||
/obj/structure/grille/broken/rustic
|
||||
icon_state = "grillerustic-b"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
/obj/structure/simple_door/Destroy()
|
||||
processing_objects -= src
|
||||
update_nearby_tiles()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/simple_door/get_material()
|
||||
return material
|
||||
@@ -194,5 +194,8 @@
|
||||
/obj/structure/simple_door/wood/New(var/newloc,var/material_name)
|
||||
..(newloc, "wood")
|
||||
|
||||
/obj/structure/simple_door/sifwood/New(var/newloc,var/material_name)
|
||||
..(newloc, "alien wood")
|
||||
|
||||
/obj/structure/simple_door/resin/New(var/newloc,var/material_name)
|
||||
..(newloc, "resin")
|
||||
@@ -34,6 +34,26 @@ var/list/outdoor_turfs = list()
|
||||
planet_controller.unallocateTurf(src)
|
||||
..()
|
||||
|
||||
/turf/simulated/proc/make_outdoors()
|
||||
outdoors = TRUE
|
||||
outdoor_turfs.Add(src)
|
||||
|
||||
/turf/simulated/proc/make_indoors()
|
||||
outdoors = FALSE
|
||||
planet_controller.unallocateTurf(src)
|
||||
qdel(weather_overlay)
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/post_change()
|
||||
..()
|
||||
// If it was outdoors and still is, it will not get added twice when the planet controller gets around to putting it in.
|
||||
if(outdoors)
|
||||
make_outdoors()
|
||||
// outdoor_turfs += src
|
||||
else
|
||||
make_indoors()
|
||||
// planet_controller.unallocateTurf(src)
|
||||
|
||||
/turf/simulated/proc/update_icon_edge()
|
||||
if(edge_blending_priority)
|
||||
for(var/checkdir in cardinal)
|
||||
@@ -55,7 +75,7 @@ var/list/outdoor_turfs = list()
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/outdoors/mud
|
||||
name = "grass"
|
||||
name = "mud"
|
||||
icon_state = "mud_dark"
|
||||
edge_blending_priority = 3
|
||||
|
||||
|
||||
@@ -15,8 +15,12 @@
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/water/initialize()
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/water/update_icon()
|
||||
..() // To get the edges. This also gets rid of other overlays so it needs to go first.
|
||||
overlays.Cut()
|
||||
icon_state = water_state
|
||||
var/image/floorbed_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = under_state)
|
||||
underlays.Add(floorbed_sprite)
|
||||
|
||||
@@ -675,7 +675,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
if(!check_rights(0)) return
|
||||
|
||||
//This is basically how death alarms do it
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/ert(null)
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/omni(null)
|
||||
|
||||
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot2.channels) // + a.keyslot1.channels
|
||||
|
||||
|
||||
@@ -209,7 +209,8 @@ var/list/admin_verbs_debug = list(
|
||||
/datum/admins/proc/view_runtimes,
|
||||
/client/proc/show_gm_status,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier
|
||||
)
|
||||
|
||||
var/list/admin_verbs_paranoid_debug = list(
|
||||
@@ -658,6 +659,29 @@ var/list/admin_verbs_mentor = list(
|
||||
log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].</font>", 1)
|
||||
|
||||
/client/proc/admin_give_modifier(var/mob/living/L)
|
||||
set category = "Debug"
|
||||
set name = "Give Modifier"
|
||||
set desc = "Makes a mob weaker or stronger by adding a specific modifier to them."
|
||||
|
||||
if(!L)
|
||||
to_chat(usr, "<span class='warning'>Looks like you didn't select a mob.</span>")
|
||||
return
|
||||
|
||||
var/list/possible_modifiers = typesof(/datum/modifier) - /datum/modifier
|
||||
|
||||
var/new_modifier_type = input("What modifier should we add to [L]?", "Modifier Type") as null|anything in possible_modifiers
|
||||
if(!new_modifier_type)
|
||||
return
|
||||
var/duration = input("How long should the new modifier last, in seconds. To make it last forever, write '0'.", "Modifier Duration") as num
|
||||
if(duration == 0)
|
||||
duration = null
|
||||
else
|
||||
duration = duration SECONDS
|
||||
|
||||
L.add_modifier(new_modifier_type, duration)
|
||||
log_and_message_admins("has given [key_name(L)] the modifer [new_modifier_type], with a duration of [duration ? "[duration / 600] minutes" : "forever"].")
|
||||
|
||||
/client/proc/make_sound(var/obj/O in world) // -- TLE
|
||||
set category = "Special Verbs"
|
||||
set name = "Make Sound"
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
return ..() + {"
|
||||
<option value='?_src_=vars;mob_player_panel=\ref[src]'>Show player panel</option>
|
||||
<option>---</option>
|
||||
<option value='?_src_=vars;give_modifier=\ref[src]'>Give Modifier</option>
|
||||
<option value='?_src_=vars;give_spell=\ref[src]'>Give Spell</option>
|
||||
<option value='?_src_=vars;give_disease2=\ref[src]'>Give Disease</option>
|
||||
<option value='?_src_=vars;give_disease=\ref[src]'>Give TG-style Disease</option>
|
||||
|
||||
@@ -74,6 +74,18 @@
|
||||
src.give_spell(M)
|
||||
href_list["datumrefresh"] = href_list["give_spell"]
|
||||
|
||||
else if(href_list["give_modifier"])
|
||||
if(!check_rights(R_ADMIN|R_FUN|R_DEBUG))
|
||||
return
|
||||
|
||||
var/mob/living/M = locate(href_list["give_modifier"])
|
||||
if(!istype(M))
|
||||
usr << "This can only be used on instances of type /mob/living"
|
||||
return
|
||||
|
||||
src.admin_give_modifier(M)
|
||||
href_list["datumrefresh"] = href_list["give_modifier"]
|
||||
|
||||
else if(href_list["give_disease2"])
|
||||
if(!check_rights(R_ADMIN|R_FUN)) return
|
||||
|
||||
|
||||
@@ -174,6 +174,25 @@
|
||||
connect()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/initialize()
|
||||
var/obj/item/seeds/S = locate() in loc
|
||||
if(S)
|
||||
plant_seeds(S)
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/plant_seeds(var/obj/item/seeds/S)
|
||||
lastproduce = 0
|
||||
seed = S.seed //Grab the seed datum.
|
||||
dead = 0
|
||||
age = 1
|
||||
//Snowflakey, maybe move this to the seed datum
|
||||
health = (istype(S, /obj/item/seeds/cutting) ? round(seed.get_trait(TRAIT_ENDURANCE)/rand(2,5)) : seed.get_trait(TRAIT_ENDURANCE))
|
||||
lastcycle = world.time
|
||||
|
||||
qdel(S)
|
||||
|
||||
check_health()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
//Don't act on seeds like dionaea that shouldn't change.
|
||||
@@ -490,18 +509,7 @@
|
||||
return
|
||||
|
||||
user << "You plant the [S.seed.seed_name] [S.seed.seed_noun]."
|
||||
lastproduce = 0
|
||||
seed = S.seed //Grab the seed datum.
|
||||
dead = 0
|
||||
age = 1
|
||||
//Snowflakey, maybe move this to the seed datum
|
||||
health = (istype(S, /obj/item/seeds/cutting) ? round(seed.get_trait(TRAIT_ENDURANCE)/rand(2,5)) : seed.get_trait(TRAIT_ENDURANCE))
|
||||
lastcycle = world.time
|
||||
|
||||
qdel(O)
|
||||
|
||||
check_health()
|
||||
update_icon()
|
||||
plant_seeds(S)
|
||||
|
||||
else
|
||||
user << "<span class='danger'>\The [src] already has seeds in it!</span>"
|
||||
|
||||
@@ -24,7 +24,8 @@ var/list/global/map_templates = list()
|
||||
if(path)
|
||||
mappath = path
|
||||
if(mappath)
|
||||
preload_size(mappath)
|
||||
spawn(1)
|
||||
preload_size(mappath)
|
||||
if(rename)
|
||||
name = rename
|
||||
|
||||
|
||||
@@ -258,7 +258,17 @@
|
||||
"<span class='notice'>You shake [src] trying to wake [t_him] up!</span>")
|
||||
else
|
||||
var/mob/living/carbon/human/hugger = M
|
||||
if(istype(hugger))
|
||||
if(M.resting == 1) //Are they resting on the ground?
|
||||
M.visible_message("<span class='notice'>[M] grabs onto [src] and pulls \himself up</span>", \
|
||||
"<span class='notice'>You grip onto [src] and pull yourself up off the ground!</span>") //AHHH gender checks are hard, but this should work
|
||||
if(M.fire_stacks >= (src.fire_stacks + 3)) //Fire checks.
|
||||
src.adjust_fire_stacks(1)
|
||||
M.adjust_fire_stacks(-1)
|
||||
if(M.on_fire)
|
||||
src.IgniteMob()
|
||||
if(do_after(M, 0.5 SECONDS)) //.5 second delay. Makes it a bit stronger than just typing rest.
|
||||
M.resting = 0 //Hoist yourself up up off the ground. No para/stunned/weakened removal.
|
||||
else if(istype(hugger))
|
||||
hugger.species.hug(hugger,src)
|
||||
else
|
||||
M.visible_message("<span class='notice'>[M] hugs [src] to make [t_him] feel better!</span>", \
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
set_light(0)
|
||||
else
|
||||
if(species.appearance_flags & RADIATION_GLOWS)
|
||||
set_light(max(1,min(10,radiation/10)), max(1,min(20,radiation/20)), species.get_flesh_colour(src))
|
||||
set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src))
|
||||
// END DOGSHIT SNOWFLAKE
|
||||
|
||||
var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in internal_organs
|
||||
@@ -248,6 +248,10 @@
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/brain/slime/core = locate() in internal_organs
|
||||
if(core)
|
||||
return
|
||||
|
||||
var/damage = 0
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
if(prob(25))
|
||||
@@ -359,7 +363,7 @@
|
||||
|
||||
return 0
|
||||
|
||||
var/safe_pressure_min = 16 // Minimum safe partial pressure of breathable gas in kPa
|
||||
var/safe_pressure_min = species.minimum_breath_pressure // Minimum safe partial pressure of breathable gas in kPa
|
||||
|
||||
|
||||
// Lung damage increases the minimum safe pressure.
|
||||
@@ -903,7 +907,7 @@
|
||||
Paralyse(3)
|
||||
|
||||
if(hallucination)
|
||||
if(hallucination >= 20 && !(species.flags & (NO_POISON|IS_PLANT)) )
|
||||
if(hallucination >= 20 && !(species.flags & (NO_POISON|IS_PLANT|NO_HALLUCINATION)) )
|
||||
if(prob(3))
|
||||
fake_attack(src)
|
||||
if(!handling_hal)
|
||||
|
||||
@@ -104,8 +104,8 @@
|
||||
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
|
||||
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
|
||||
var/light_dam // If set, mob will be damaged in light over this value and heal in light below its negative.
|
||||
var/body_temperature = 310.15 // Species will try to stabilize at this temperature.
|
||||
// (also affects temperature processing)
|
||||
var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing)
|
||||
var/minimum_breath_pressure = 16 // Minimum required pressure for breath, in kPa
|
||||
|
||||
var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm.
|
||||
var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly.
|
||||
|
||||
@@ -20,7 +20,7 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
bump_flag = SLIME
|
||||
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT
|
||||
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
|
||||
health_hud_intensity = 2
|
||||
|
||||
@@ -67,6 +67,8 @@
|
||||
)
|
||||
cold_discomfort_level = 180
|
||||
|
||||
minimum_breath_pressure = 12 //Smaller, so needs less air
|
||||
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
|
||||
@@ -60,6 +60,8 @@
|
||||
heat_level_2 = 480 //Default 400
|
||||
heat_level_3 = 1100 //Default 1000
|
||||
|
||||
minimum_breath_pressure = 18 //Bigger, means they need more air
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
|
||||
@@ -151,15 +151,15 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
||||
//Languages
|
||||
add_language("Robot Talk", 1)
|
||||
add_language(LANGUAGE_GALCOM, 1)
|
||||
add_language(LANGUAGE_SOL_COMMON, 0)
|
||||
add_language(LANGUAGE_UNATHI, 0)
|
||||
add_language(LANGUAGE_SIIK, 0)
|
||||
add_language(LANGUAGE_SKRELLIAN, 0)
|
||||
add_language(LANGUAGE_SOL_COMMON, 1)
|
||||
add_language(LANGUAGE_UNATHI, 1)
|
||||
add_language(LANGUAGE_SIIK, 1)
|
||||
add_language(LANGUAGE_SKRELLIAN, 1)
|
||||
add_language(LANGUAGE_TRADEBAND, 1)
|
||||
add_language(LANGUAGE_GUTTER, 0)
|
||||
add_language(LANGUAGE_GUTTER, 1)
|
||||
add_language(LANGUAGE_EAL, 1)
|
||||
add_language(LANGUAGE_SCHECHI, 0)
|
||||
add_language(LANGUAGE_SIGN, 0)
|
||||
add_language(LANGUAGE_SCHECHI, 1)
|
||||
add_language(LANGUAGE_SIGN, 1)
|
||||
|
||||
if(!safety)//Only used by AIize() to successfully spawn an AI.
|
||||
if (!B)//If there is no player/brain inside.
|
||||
|
||||
@@ -715,7 +715,9 @@
|
||||
overlays += "[panelprefix]-openpanel -c"
|
||||
|
||||
if(has_active_type(/obj/item/borg/combat/shield))
|
||||
overlays += "[module_sprites[icontype]]-shield"
|
||||
var/obj/item/borg/combat/shield/shield = locate() in src
|
||||
if(shield && shield.active)
|
||||
overlays += "[module_sprites[icontype]]-shield"
|
||||
|
||||
if(modtype == "Combat")
|
||||
if(module_active && istype(module_active,/obj/item/borg/combat/mobility))
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
//Combat shielding absorbs a percentage of damage directly into the cell.
|
||||
if(has_active_type(/obj/item/borg/combat/shield))
|
||||
var/obj/item/borg/combat/shield/shield = locate() in src
|
||||
if(shield)
|
||||
if(shield && shield.active)
|
||||
//Shields absorb a certain percentage of damage based on their power setting.
|
||||
var/absorb_brute = brute*shield.shield_level
|
||||
var/absorb_burn = burn*shield.shield_level
|
||||
|
||||
@@ -298,11 +298,54 @@
|
||||
desc = "A powerful experimental module that turns aside or absorbs incoming attacks at the cost of charge."
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
icon_state = "shock"
|
||||
var/shield_level = 0.5 //Percentage of damage absorbed by the shield.
|
||||
var/shield_level = 0.5 //Percentage of damage absorbed by the shield.
|
||||
var/active = 1 //If the shield is on
|
||||
var/flash_count = 0 //Counter for how many times the shield has been flashed
|
||||
var/overload_threshold = 3 //Number of flashes it takes to overload the shield
|
||||
var/shield_refresh = 15 SECONDS //Time it takes for the shield to reboot after destabilizing
|
||||
var/overload_time = 0 //Stores the time of overload
|
||||
var/last_flash = 0 //Stores the time of last flash
|
||||
|
||||
/obj/item/borg/combat/shield/New()
|
||||
processing_objects.Add(src)
|
||||
..()
|
||||
|
||||
/obj/item/borg/combat/shield/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
/obj/item/borg/combat/shield/attack_self(var/mob/living/user)
|
||||
set_shield_level()
|
||||
|
||||
/obj/item/borg/combat/shield/process()
|
||||
if(active)
|
||||
if(flash_count && (last_flash + shield_refresh < world.time))
|
||||
flash_count = 0
|
||||
last_flash = 0
|
||||
else if(overload_time + shield_refresh < world.time)
|
||||
active = 1
|
||||
flash_count = 0
|
||||
overload_time = 0
|
||||
|
||||
var/mob/living/user = src.loc
|
||||
user.visible_message("<span class='danger'>[user]'s shield reactivates!</span>", "<span class='danger'>Your shield reactivates!.</span>")
|
||||
user.update_icon()
|
||||
|
||||
/obj/item/borg/combat/shield/proc/adjust_flash_count(var/mob/living/user, amount)
|
||||
if(active) //Can't destabilize a shield that's not on
|
||||
flash_count += amount
|
||||
|
||||
if(amount > 0)
|
||||
last_flash = world.time
|
||||
if(flash_count >= overload_threshold)
|
||||
overload(user)
|
||||
|
||||
/obj/item/borg/combat/shield/proc/overload(var/mob/living/user)
|
||||
active = 0
|
||||
user.visible_message("<span class='danger'>[user]'s shield destabilizes!</span>", "<span class='danger'>Your shield destabilizes!.</span>")
|
||||
user.update_icon()
|
||||
overload_time = world.time
|
||||
|
||||
/obj/item/borg/combat/shield/verb/set_shield_level()
|
||||
set name = "Set shield level"
|
||||
set category = "Object"
|
||||
|
||||
@@ -77,10 +77,26 @@
|
||||
else
|
||||
O.key = key
|
||||
|
||||
//Languages
|
||||
add_language("Robot Talk", 1)
|
||||
add_language(LANGUAGE_GALCOM, 1)
|
||||
add_language(LANGUAGE_SOL_COMMON, 1)
|
||||
add_language(LANGUAGE_UNATHI, 1)
|
||||
add_language(LANGUAGE_SIIK, 1)
|
||||
add_language(LANGUAGE_SKRELLIAN, 1)
|
||||
add_language(LANGUAGE_TRADEBAND, 1)
|
||||
add_language(LANGUAGE_GUTTER, 1)
|
||||
add_language(LANGUAGE_EAL, 1)
|
||||
add_language(LANGUAGE_SCHECHI, 1)
|
||||
add_language(LANGUAGE_SIGN, 1)
|
||||
|
||||
// Lorefolks say it may be so.
|
||||
if(O.client && O.client.prefs)
|
||||
var/datum/preferences/B = O.client.prefs
|
||||
for(var/language in B.alternate_languages)
|
||||
O.add_language(language)
|
||||
if(LANGUAGE_ROOTGLOBAL in B.alternate_languages)
|
||||
O.add_language(LANGUAGE_ROOTGLOBAL, 1)
|
||||
if(LANGUAGE_ROOTLOCAL in B.alternate_languages)
|
||||
O.add_language(LANGUAGE_ROOTLOCAL, 1)
|
||||
|
||||
if(move)
|
||||
var/obj/loc_landmark
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
desc = "A complex, organic knot of jelly and crystalline particles."
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "green slime extract"
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
/obj/item/organ/internal/brain/golem
|
||||
name = "chem"
|
||||
|
||||
@@ -39,10 +39,11 @@
|
||||
|
||||
// Do some reagent processing.
|
||||
if(owner.chem_effects[CE_ALCOHOL_TOXIC])
|
||||
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
|
||||
if(filter_effect < 2) //Liver is badly damaged, you're drinking yourself to death
|
||||
owner.adjustToxLoss(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.2 * PROCESS_ACCURACY)
|
||||
if(filter_effect < 3)
|
||||
owner.adjustToxLoss(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY)
|
||||
else
|
||||
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
|
||||
|
||||
/obj/item/organ/internal/liver/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/obj/item/organ/external/chest/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 50
|
||||
encased = 0
|
||||
|
||||
/obj/item/organ/external/groin/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 30
|
||||
|
||||
/obj/item/organ/external/arm/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/arm/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/leg/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/leg/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/foot/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/foot/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/hand/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/hand/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/slime //They don't need this anymore.
|
||||
nonsolid = 1
|
||||
cannot_gib = 0
|
||||
vital = 0
|
||||
max_damage = 5
|
||||
encased = 0
|
||||
@@ -40,49 +40,4 @@
|
||||
|
||||
/obj/item/organ/external/head/unbreakable
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
// Slime limbs.
|
||||
/obj/item/organ/external/chest/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 50
|
||||
|
||||
/obj/item/organ/external/groin/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 30
|
||||
|
||||
/obj/item/organ/external/arm/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/arm/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/leg/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/leg/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/foot/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/foot/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/hand/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/hand/right/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/slime
|
||||
nonsolid = 1
|
||||
max_damage = 5
|
||||
dislocated = -1
|
||||
@@ -443,6 +443,23 @@
|
||||
/obj/item/ammo_magazine/m762m/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/m762garand
|
||||
name = "garand clip (7.62mm)" // The clip goes into the magazine, hence the name. I'm very sure this is correct.
|
||||
icon_state = "gclip"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "7.62mm"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1600)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 8
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/m762garand/ap
|
||||
name = "garand clip (7.62mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a762/ap
|
||||
|
||||
/obj/item/ammo_magazine/m762/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/clip/c762
|
||||
name = "ammo clip (7.62mm)"
|
||||
icon_state = "clip_rifle"
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/item/weapon/gun/projectile/garand
|
||||
name = "\improper M1 Garand"
|
||||
desc = "This is the vintage semi-automatic rifle that famously helped win the second World War. What the hell it's doing aboard a space station in the 26th century, you can only imagine. Uses 7.62mm rounds."
|
||||
icon_state = "garand"
|
||||
item_state = "boltaction"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
caliber = "7.62mm"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
slot_flags = SLOT_BACK
|
||||
fire_sound = 'sound/weapons/rifleshot.ogg'
|
||||
load_method = MAGAZINE // ToDo: Make it so MAGAZINE, SPEEDLOADER and SINGLE_CASING can all be used on the same gun.
|
||||
magazine_type = /obj/item/ammo_magazine/m762garand
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762garand)
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/garand_ping.ogg'
|
||||
|
||||
/obj/item/weapon/gun/projectile/garand/update_icon()
|
||||
if(ammo_magazine)
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-e"
|
||||
@@ -58,7 +58,7 @@
|
||||
return
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
user << "<span class='warning'>This syringe is broken!</span>"
|
||||
to_chat(user, "<span class='warning'>This syringe is broken!</span>")
|
||||
return
|
||||
|
||||
if(user.a_intent == I_HURT && ismob(target))
|
||||
@@ -70,26 +70,31 @@
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
if(!reagents.get_free_space())
|
||||
user << "<span class='warning'>The syringe is full.</span>"
|
||||
to_chat(user, "<span class='warning'>The syringe is full.</span>")
|
||||
mode = SYRINGE_INJECT
|
||||
return
|
||||
|
||||
if(ismob(target))//Blood!
|
||||
if(reagents.has_reagent("blood"))
|
||||
user << "<span class='notice'>There is already a blood sample in this syringe.</span>"
|
||||
to_chat(user, "<span class='notice'>There is already a blood sample in this syringe.</span>")
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/amount = reagents.get_free_space()
|
||||
var/mob/living/carbon/T = target
|
||||
if(!T.dna)
|
||||
user << "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>"
|
||||
to_chat(user, "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>")
|
||||
return
|
||||
if(NOCLONE in T.mutations) //target done been et, no more blood in him
|
||||
user << "<span class='warning'>You are unable to locate any blood.</span>"
|
||||
to_chat(user, "<span class='warning'>You are unable to locate any blood.</span>")
|
||||
return
|
||||
|
||||
if(T.isSynthetic())
|
||||
to_chat(user, "<span class = 'warning'>You can't draw blood from a synthetic!</span>")
|
||||
return
|
||||
|
||||
if(drawing)
|
||||
user << "<span class='warning'>You are already drawing blood from [T.name].</span>"
|
||||
to_chat(user, "<span class='warning'>You are already drawing blood from [T.name].</span>")
|
||||
return
|
||||
|
||||
var/datum/reagent/B
|
||||
@@ -117,50 +122,51 @@
|
||||
reagents.update_total()
|
||||
on_reagent_change()
|
||||
reagents.handle_reactions()
|
||||
user << "<span class='notice'>You take a blood sample from [target].</span>"
|
||||
to_chat(user, "<span class='notice'>You take a blood sample from [target].</span>")
|
||||
for(var/mob/O in viewers(4, user))
|
||||
O.show_message("<span class='notice'>[user] takes a blood sample from [target].</span>", 1)
|
||||
|
||||
else //if not mob
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>[target] is empty.</span>")
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/weapon/reagent_containers/food))
|
||||
user << "<span class='notice'>You cannot directly remove reagents from this object.</span>"
|
||||
to_chat(user, "<span class='notice'>You cannot directly remove reagents from this object.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>"
|
||||
to_chat(user, "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>")
|
||||
update_icon()
|
||||
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
if(SYRINGE_INJECT)
|
||||
if(!reagents.total_volume)
|
||||
user << "<span class='notice'>The syringe is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
mode = SYRINGE_DRAW
|
||||
return
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
|
||||
user << "<span class='notice'>You cannot directly fill this object.</span>"
|
||||
to_chat(user, "<span class='notice'>You cannot directly fill this object.</span>")
|
||||
return
|
||||
if(!target.reagents.get_free_space())
|
||||
user << "<span class='notice'>[target] is full.</span>"
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
user << "<span class='danger'>\The [H] is missing that limb!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
|
||||
if(ismob(target) && target != user)
|
||||
@@ -200,9 +206,9 @@
|
||||
else
|
||||
trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
if(trans)
|
||||
user << "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>"
|
||||
to_chat(user, "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>")
|
||||
else
|
||||
user << "<span class='notice'>The syringe is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
update_icon()
|
||||
@@ -245,7 +251,7 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
|
||||
|
||||
if (!affecting || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
to_chat(user, "<span class='danger'>They are missing that limb!</span>")
|
||||
return
|
||||
|
||||
var/hit_area = affecting.name
|
||||
@@ -302,10 +308,10 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag)
|
||||
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
|
||||
user << "<span class='notice'>This needle isn't designed for drawing blood.</span>"
|
||||
to_chat(user, "<span class='notice'>This needle isn't designed for drawing blood.</span>")
|
||||
return
|
||||
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
|
||||
user << "<span class='notice'>This syringe is too big to stab someone with it.</span>"
|
||||
to_chat(user, "<span class='notice'>This syringe is too big to stab someone with it.</span>")
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -473,6 +473,15 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/weapon/surgical/scalpel/manager
|
||||
sort_string = "MBBAD"
|
||||
|
||||
/datum/design/item/bone_clamp
|
||||
name = "Bone Clamp"
|
||||
desc = "A miracle of modern science, this tool rapidly knits together bone, without the need for bone gel."
|
||||
id = "bone_clamp"
|
||||
req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 5, TECH_MAGNET = 4, TECH_DATA = 4)
|
||||
materials = list (DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2500)
|
||||
build_path = /obj/item/weapon/surgical/bone_clamp
|
||||
sort_string = "MBBAE"
|
||||
|
||||
/datum/design/item/implant
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
|
||||
@@ -145,4 +145,42 @@
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
|
||||
|
||||
|
||||
/datum/surgery_step/clamp_bone
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/bone_clamp = 100
|
||||
)
|
||||
can_infect = 1
|
||||
blood_level = 1
|
||||
|
||||
min_duration = 70
|
||||
max_duration = 90
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message("<font color='blue'>[user] starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] sets the bone in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You sets [target]'s bone in [affected.name] with \the [tool].</font>")
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(BRUISE, 5)
|
||||
@@ -168,10 +168,16 @@
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(istype(tool,/obj/item/stack/cable_coil/))
|
||||
var/obj/item/stack/cable_coil/C = tool
|
||||
if(!C.can_use(5))
|
||||
user << "<span class='danger'>You need ten or more cable pieces to repair this damage.</span>" //usage amount made more consistent with regular cable repair
|
||||
if(affected.burn_dam == 0)
|
||||
to_chat(user, "<span class='notice'>There are no burnt wires here!</span>")
|
||||
return SURGERY_FAILURE
|
||||
C.use(5)
|
||||
else
|
||||
if(!C.can_use(5))
|
||||
to_chat(user, "<span class='danger'>You need at least five cable pieces to repair this part.</span>") //usage amount made more consistent with regular cable repair
|
||||
return SURGERY_FAILURE
|
||||
else
|
||||
C.use(5)
|
||||
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Woodrat
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Added a Syndicate ID with all access (admin spawn only)."
|
||||
- tweak: "Port of 'Syndicate id cards now listen for owner destruction' from Bay."
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 197 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
This system is in place to make it easier to seperate data specific to a certain map.
|
||||
|
||||
Each map should have their own folder, and contain both the actual map files, and the code files defining their unique
|
||||
things, such as areas, elevators, or shuttles. Generally, the layout is that your map folder has,
|
||||
|
||||
[map_name] folder
|
||||
[map_name].dm - Containing a lot of #define directives, and is used to automatically load the other files you need.
|
||||
[map_name_defines].dm - This contains the code for the map datum. For more details, read the comments inside ~map_system folder.
|
||||
(optional) [map_name]_areas/structures/whatever.dm - Files for unique things to that map.
|
||||
[map_name]-1.dmm - Your actual map files. Z-levels should be ordered correctly if you seperate your z-levels across map files.
|
||||
|
||||
-HOW TO LOAD A SPECIFIC MAP-
|
||||
Say you want to load southern_cross,
|
||||
First, uncheck your current loaded map, presumably northern_star. Uncheck northern_star.dm inside northern_star folder.
|
||||
Then go open southern_cross folder, and check southern_cross.dm, don't check any other folders below, and compile.
|
||||
When you finish compiling, you should be able to open the map files for southern_cross.
|
||||
*/
|
||||
@@ -4682,7 +4682,7 @@
|
||||
"bMb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/table/standard,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/posibrain,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/table/standard,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMf" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMg" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMh" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
"a" = (/turf/unsimulated/wall/planetary/sif,/area/plane_ground)
|
||||
"b" = (/turf/simulated/floor/outdoors/dirt,/area/plane_ground)
|
||||
"c" = (/obj/effect/landmark/start,/turf/simulated/floor/outdoors/dirt,/area/plane_ground)
|
||||
"d" = (/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor/outdoors/dirt,/area/plane_ground)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -0,0 +1,70 @@
|
||||
"a" = (/turf/unsimulated/wall/planetary/sif,/area/plane_sky)
|
||||
"b" = (/turf/simulated/open,/area/plane_sky)
|
||||
"c" = (/obj/effect/landmark/map_data{height = 2},/turf/simulated/open,/area/plane_sky)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -0,0 +1,16 @@
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
|
||||
#include "plane-1.dmm"
|
||||
#include "plane-2.dmm"
|
||||
|
||||
#include "plane_defines.dm"
|
||||
#include "plane_areas.dm"
|
||||
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/plane
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
|
||||
#warn A map has already been included, ignoring Plane
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,5 @@
|
||||
/area/plane_ground
|
||||
name = "flat plane"
|
||||
|
||||
/area/plane_sky
|
||||
name = "open sky"
|
||||
@@ -0,0 +1,41 @@
|
||||
#define Z_LEVEL_FIRST_PLANE 1
|
||||
#define Z_LEVEL_SECOND_PLANE 2
|
||||
|
||||
/datum/map/plane
|
||||
name = "Another Test Map"
|
||||
full_name = "The Flat Test Map"
|
||||
path = "plane"
|
||||
|
||||
lobby_icon = 'icons/misc/title.dmi'
|
||||
lobby_screens = list("mockingjay00")
|
||||
|
||||
zlevel_datum_type = /datum/map_z_level/plane
|
||||
|
||||
station_name = "The Plain Plane for Air Planes"
|
||||
station_short = "The Plane"
|
||||
dock_name = "the Maximum Fun Chamber"
|
||||
boss_name = "Mister Fun"
|
||||
boss_short = "Mr. Fun"
|
||||
company_name = "Fun Inc."
|
||||
company_short = "FI"
|
||||
starsys_name = "Not Vir"
|
||||
|
||||
/datum/map_z_level/plane/first
|
||||
z = Z_LEVEL_FIRST_PLANE
|
||||
name = "The Ground"
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER
|
||||
transit_chance = 50
|
||||
base_turf = /turf/simulated/floor/outdoors/rocks
|
||||
|
||||
/datum/map_z_level/plane/second
|
||||
z = Z_LEVEL_SECOND_PLANE
|
||||
name = "The Sky"
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER
|
||||
transit_chance = 50
|
||||
base_turf = /turf/simulated/open
|
||||
|
||||
/datum/planet/sif
|
||||
expected_z_levels = list(
|
||||
Z_LEVEL_FIRST_PLANE,
|
||||
Z_LEVEL_SECOND_PLANE
|
||||
)
|
||||
@@ -4960,7 +4960,7 @@
|
||||
"bRt" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{id_tag = "researchdoor"; name = "Research Division Access"; req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/rnd/research)
|
||||
"bRu" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
|
||||
"bRv" = (/obj/machinery/mecha_part_fabricator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bRw" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/steel_reinforced,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/posibrain,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bRw" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/steel_reinforced,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bRx" = (/obj/machinery/pros_fabricator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bRy" = (/obj/machinery/camera/network/research{c_tag = "SCI - Robotics"; dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
|
||||
"bRz" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
"a" = (/turf/template_noop,/area/template_noop)
|
||||
"b" = (/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"c" = (/obj/structure/railing,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"d" = (/obj/structure/railing{tag = "icon-railing0 (EAST)"; icon_state = "railing0"; dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"e" = (/turf/simulated/floor/outdoors/grass/sif,/area/submap/farm1)
|
||||
"f" = (/obj/structure/railing{tag = "icon-railing0 (WEST)"; icon_state = "railing0"; dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"g" = (/turf/simulated/wall/wood,/area/submap/farm1)
|
||||
"h" = (/obj/structure/grille/rustic,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"i" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"j" = (/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"k" = (/obj/structure/table/marble,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"l" = (/obj/structure/table/marble,/obj/item/weapon/material/kitchen/rollingpin,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"m" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/cornseed,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"n" = (/obj/item/weapon/material/minihoe,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"o" = (/obj/structure/table/marble,/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"p" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/bluetomatoseed,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"q" = (/turf/simulated/floor/outdoors/mud,/area/submap/farm1)
|
||||
"r" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/icepepperseed,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"s" = (/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"t" = (/mob/living/bot/farmbot,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"u" = (/obj/structure/sink/puddle,/turf/simulated/floor/outdoors/mud,/area/submap/farm1)
|
||||
"v" = (/obj/item/weapon/material/hatchet,/turf/simulated/floor/outdoors/mud,/area/submap/farm1)
|
||||
"w" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/matches,/obj/item/weapon/flame/match,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"x" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"y" = (/obj/item/clothing/shoes/boots/winter/hydro,/obj/item/clothing/suit/storage/hooded/wintercoat/hydro,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"z" = (/obj/structure/bed/chair/wood{tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"A" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"B" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"C" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/wheatseed,/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
"D" = (/obj/structure/closet/crate/bin,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"E" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"F" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"G" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"H" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/wood,/area/submap/farm1)
|
||||
"I" = (/turf/simulated/floor/outdoors/rocks,/area/submap/farm1)
|
||||
"J" = (/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"K" = (/turf/simulated/floor/water,/area/submap/farm1)
|
||||
"L" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"M" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"N" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"O" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"P" = (/obj/structure/table/steel,/turf/simulated/floor/plating,/area/submap/farm1)
|
||||
"Q" = (/obj/structure/railing{tag = "icon-railing0 (NORTH)"; icon_state = "railing0"; dir = 1},/turf/simulated/floor/outdoors/dirt,/area/submap/farm1)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
abccccccccccccccccccccccccbaaaaa
|
||||
adeeeeeeeeeeeeeeeeeeeeeeeefaaaaa
|
||||
adeeeeeeeeeeeeeeeeeeeeeeeefaaaaa
|
||||
adeegghhggeeeeeeeeeeeeeeeefaaaaa
|
||||
adeegijklgeeeeemmmmmmmmmeefaaaaa
|
||||
adeegjjjkheeeeebnbbbbbbbeefaaaaa
|
||||
adeegjjjogebbeepppqqqrrreefaaaaa
|
||||
adegggsgggebbbbtbbquvbbbeefaaaaa
|
||||
adegwxjygeeebbepppqqqrrreefaaaaa
|
||||
adehxzjjgggebeebbAbbbbbbeefaaaaa
|
||||
adehBjjjsjsbbeeCCCCCCCCCeefaaaaa
|
||||
adegDjjEgggebeeeeeeeeeeeeefaaaaa
|
||||
adeggsgggeeebeeeeeeeeeeeeefaaaaa
|
||||
adegFjjGgeebbbeeeeebbbbbbbbbbbba
|
||||
adegEjjHgeebbbbbbbbbbbbbbbbbbbba
|
||||
adeggggggeebeeeeeeebbbbbbbbbbbba
|
||||
adeebbbbbbbbeeeeeeebbbeeeefaaaaa
|
||||
adebbIIIIIIbbeeegggJJJgggefaaaaa
|
||||
adebIIKKKKIIbbeegLJJJJJLgefaaaaa
|
||||
adebIKKKKKKIIbbehMJJJJJJhefaaaaa
|
||||
adebIIKKKKKKIIbehLJJJJJLhefaaaaa
|
||||
adebbIIKKKKKKIbehNJJJJJJhefaaaaa
|
||||
adeebbIIKKKKIIbegLJOPPJLgefaaaaa
|
||||
adeeebbIIIIIIbbegggggggggefaaaaa
|
||||
adeeeebbbbbbbbeeeeeeeeeeeefaaaaa
|
||||
adeeeeeeeeeeeeeeeeeeeeeeeefaaaaa
|
||||
abQQQQQQQQQQQQQQQQQQQQQQQQbaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -2,4 +2,9 @@
|
||||
name = "Surface Content"
|
||||
desc = "Used to make the surface by 17% less boring."
|
||||
|
||||
// To be added: Templates for surface exploration when they are made.
|
||||
// To be added: Templates for surface exploration when they are made.
|
||||
|
||||
/datum/map_template/surface/farm1
|
||||
name = "Farm 1"
|
||||
desc = "A small farm tended by a farmbot."
|
||||
mappath = 'maps/submaps/surface_submaps/farm1.dmm'
|
||||
@@ -0,0 +1,6 @@
|
||||
/area/submap
|
||||
name = "Submap Area"
|
||||
icon_state = "submap"
|
||||
|
||||
/area/submap/farm1
|
||||
name = "farm"
|
||||
@@ -1840,6 +1840,7 @@
|
||||
#include "code\modules\organs\subtypes\diona.dm"
|
||||
#include "code\modules\organs\subtypes\machine.dm"
|
||||
#include "code\modules\organs\subtypes\seromi.dm"
|
||||
#include "code\modules\organs\subtypes\slime.dm"
|
||||
#include "code\modules\organs\subtypes\standard.dm"
|
||||
#include "code\modules\organs\subtypes\unathi.dm"
|
||||
#include "code\modules\organs\subtypes\unbreakable.dm"
|
||||
@@ -1957,6 +1958,7 @@
|
||||
#include "code\modules\projectiles\guns\projectile\dartgun.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\pistol.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\revolver.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\semiauto.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\shotgun.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\sniper.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\sniper\collapsible_sniper.dm"
|
||||
@@ -2269,5 +2271,6 @@
|
||||
#include "maps\submaps\cave_submaps\cave.dm"
|
||||
#include "maps\submaps\space_submaps\space.dm"
|
||||
#include "maps\submaps\surface_submaps\forest.dm"
|
||||
#include "maps\submaps\surface_submaps\forest_areas.dm"
|
||||
#include "maps\~map_system\maps.dm"
|
||||
// END_INCLUDE
|
||||
|
||||