Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 9/28/2017_stack_asthetics

This commit is contained in:
Neerti
2017-09-28 01:06:04 -04:00
69 changed files with 924 additions and 145 deletions
-1
View File
@@ -2,4 +2,3 @@
name = mapmerge driver
driver = ./mapmerge.sh %O %A %B
recursive = text
+1 -1
View File
@@ -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"
+1
View File
@@ -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
+2 -2
View File
@@ -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()
+1
View File
@@ -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)
+47
View File
@@ -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.
+3
View File
@@ -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)
+4
View File
@@ -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)
+11 -1
View File
@@ -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
+10 -10
View File
@@ -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
+11
View File
@@ -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"
+4 -1
View File
@@ -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")
+21 -1
View File
@@ -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
+4
View File
@@ -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)
+1 -1
View File
@@ -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
+25 -1
View File
@@ -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
+20 -12
View File
@@ -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>"
+2 -1
View File
@@ -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
+11 -1
View File
@@ -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>", \
+7 -3
View File
@@ -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
+7 -7
View File
@@ -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"
+18 -2
View File
@@ -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
+1
View File
@@ -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"
+3 -2
View File
@@ -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
+47
View File
@@ -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
+1 -46
View File
@@ -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>")
..()
////////////////////////////////////////////////////////////////////////////////
+9
View File
@@ -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)
+39 -1
View File
@@ -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)
+9 -3
View File
@@ -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)
+37
View File
@@ -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."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

+18
View File
@@ -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.
*/
+1 -1
View File
@@ -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)
+71
View File
@@ -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
"}
+70
View File
@@ -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
"}
+16
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
/area/plane_ground
name = "flat plane"
/area/plane_sky
name = "open sky"
+41
View File
@@ -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
)
+1 -1
View File
@@ -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)
+78
View File
@@ -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
"}
+6 -1
View File
@@ -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"
+3
View File
@@ -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
Binary file not shown.