Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-02-01
# Conflicts: # .travis.yml # code/_away_mission_tests.dm # code/modules/admin/verbs/mapping.dm # code/modules/mob/living/carbon/human/update_icons.dm # html/changelogs/.all_changelog.yml # maps/southern_cross/southern_cross-1.dmm # maps/southern_cross/southern_cross-3.dmm # maps/southern_cross/southern_cross-6.dmm # nano/images/nanomap_z1.png # nano/images/nanomap_z10.png # nano/images/nanomap_z2.png # nano/images/nanomap_z3.png # nano/images/nanomap_z5.png # nano/images/nanomap_z6.png
@@ -72,7 +72,6 @@ What is the naming convention for planes or layers?
|
||||
//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
|
||||
#define LIGHTING_LAYER 11 //Layer that lighting used to be on (now it's on a plane)
|
||||
#define HUD_LAYER 20 //Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
|
||||
#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put
|
||||
#define SCREEN_LAYER 22 //Mob HUD/effects layer
|
||||
|
||||
#define PLANE_LIGHTING 5 //Where the lighting (and darkness) lives
|
||||
@@ -96,7 +95,8 @@ What is the naming convention for planes or layers?
|
||||
#define PLANE_MESONS 30 //Stuff seen with mesons, like open ceilings. This is 30 for downstreams.
|
||||
|
||||
//Fullscreen overlays under inventory
|
||||
#define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc
|
||||
#define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc
|
||||
#define OBFUSCATION_LAYER 5 //Where images covering the view for eyes are put
|
||||
#define FULLSCREEN_LAYER 18
|
||||
#define DAMAGE_LAYER 18.1
|
||||
#define BLIND_LAYER 18.2
|
||||
|
||||
@@ -53,7 +53,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
|
||||
#define NETWORK_PRISON "Prison"
|
||||
#define NETWORK_SECURITY "Security"
|
||||
#define NETWORK_INTERROGATION "Interrogation"
|
||||
#define NETWORK_TELECOM "Tcomsat"
|
||||
#define NETWORK_TELECOM "Tcomms"
|
||||
#define NETWORK_THUNDER "Thunderdome"
|
||||
#define NETWORK_COMMUNICATORS "Communicators"
|
||||
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
* Should you wish to edit set AWAY_MISSION_TEST to 1 like so:
|
||||
* #define AWAY_MISSION_TEST 1
|
||||
*/
|
||||
#define AWAY_MISSION_TEST 0
|
||||
#define AWAY_MISSION_TEST 0
|
||||
|
||||
@@ -248,3 +248,19 @@ Proc for attack log creation, because really why not
|
||||
|
||||
if (progbar)
|
||||
qdel(progbar)
|
||||
|
||||
/atom/proc/living_mobs(var/range = world.view)
|
||||
var/list/viewers = oviewers(src,range)
|
||||
var/list/living = list()
|
||||
for(var/mob/living/L in viewers)
|
||||
living += L
|
||||
|
||||
return living
|
||||
|
||||
/atom/proc/human_mobs(var/range = world.view)
|
||||
var/list/viewers = oviewers(src,range)
|
||||
var/list/humans = list()
|
||||
for(var/mob/living/carbon/human/H in viewers)
|
||||
humans += H
|
||||
|
||||
return humans
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
/atom/proc/living_mobs(var/range = world.view)
|
||||
var/list/viewers = oviewers(src,range)
|
||||
var/list/living = list()
|
||||
for(var/mob/living/L in viewers)
|
||||
living += L
|
||||
|
||||
return living
|
||||
@@ -137,6 +137,18 @@ var/global/list/PDA_Manifest = list()
|
||||
if(!department && !(name in heads))
|
||||
misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive)
|
||||
|
||||
// Synthetics don't have actual records, so we will pull them from here.
|
||||
// Synths don't have records, which is the means by which isactive is retrieved, so I'm hardcoding it to active, don't really have any better means
|
||||
for(var/mob/living/silicon/ai/ai in mob_list)
|
||||
bot[++bot.len] = list("name" = ai.real_name, "rank" = "Artificial Intelligence", "active" = "Active")
|
||||
|
||||
for(var/mob/living/silicon/robot/robot in mob_list)
|
||||
// No combat/syndicate cyborgs, no drones.
|
||||
if(robot.module && robot.module.hide_on_manifest)
|
||||
continue
|
||||
|
||||
bot[++bot.len] = list("name" = robot.real_name, "rank" = "[robot.modtype] [robot.braintype]", "active" = "Active")
|
||||
|
||||
|
||||
PDA_Manifest = list(
|
||||
list("cat" = "Command", "elems" = heads),
|
||||
|
||||
@@ -83,8 +83,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
minimal_player_age = 5
|
||||
economic_modifier = 7
|
||||
|
||||
access = list(access_heads)
|
||||
minimal_access = list(access_heads)
|
||||
access = list(access_heads, access_keycard_auth)
|
||||
minimal_access = list(access_heads, access_keycard_auth)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/secretary
|
||||
alt_titles = list("Command Liaison", "Bridge Secretary")
|
||||
alt_titles = list("Command Liaison", "Bridge Secretary")
|
||||
|
||||
@@ -40,19 +40,19 @@
|
||||
if(!usr || usr.stat || usr.lying) return
|
||||
|
||||
if(scan)
|
||||
usr << "You remove \the [scan] from \the [src]."
|
||||
to_chat(usr, "You remove \the [scan] from \the [src].")
|
||||
scan.forceMove(get_turf(src))
|
||||
if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
|
||||
usr.put_in_hands(scan)
|
||||
scan = null
|
||||
else if(modify)
|
||||
usr << "You remove \the [modify] from \the [src]."
|
||||
to_chat(usr, "You remove \the [modify] from \the [src].")
|
||||
modify.forceMove(get_turf(src))
|
||||
if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
|
||||
usr.put_in_hands(modify)
|
||||
modify = null
|
||||
else
|
||||
usr << "There is nothing to remove from the console."
|
||||
to_chat(usr, "There is nothing to remove from the console.")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/card/attackby(obj/item/weapon/card/id/id_card, mob/user)
|
||||
@@ -82,12 +82,15 @@
|
||||
/obj/machinery/computer/card/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
user.set_machine(src)
|
||||
|
||||
if(data_core)
|
||||
data_core.get_manifest_list()
|
||||
|
||||
var/data[0]
|
||||
data["src"] = "\ref[src]"
|
||||
data["station_name"] = station_name()
|
||||
data["mode"] = mode
|
||||
data["printing"] = printing
|
||||
data["manifest"] = data_core ? data_core.get_manifest(0) : null
|
||||
data["manifest"] = PDA_Manifest
|
||||
data["target_name"] = modify ? modify.name : "-----"
|
||||
data["target_owner"] = modify && modify.registered_name ? modify.registered_name : "-----"
|
||||
data["target_rank"] = get_target_rank()
|
||||
@@ -99,13 +102,16 @@
|
||||
data["all_centcom_access"] = null
|
||||
data["regions"] = null
|
||||
|
||||
data["engineering_jobs"] = format_jobs(engineering_positions)
|
||||
data["medical_jobs"] = format_jobs(medical_positions)
|
||||
data["science_jobs"] = format_jobs(science_positions)
|
||||
data["security_jobs"] = format_jobs(security_positions)
|
||||
data["cargo_jobs"] = format_jobs(cargo_positions)
|
||||
data["civilian_jobs"] = format_jobs(civilian_positions)
|
||||
data["centcom_jobs"] = format_jobs(get_all_centcom_jobs())
|
||||
data["jobs"] = list(
|
||||
list("cat" = "Engineering", "jobs" = format_jobs(engineering_positions)),
|
||||
list("cat" = "Medical", "jobs" = format_jobs(medical_positions)),
|
||||
list("cat" = "Science", "jobs" = format_jobs(science_positions)),
|
||||
list("cat" = "Security", "jobs" = format_jobs(security_positions)),
|
||||
list("cat" = "Cargo", "jobs" = format_jobs(cargo_positions)),
|
||||
list("cat" = "Planetside", "jobs" = format_jobs(planet_positions)),
|
||||
list("cat" = "Civilian", "jobs" = format_jobs(civilian_positions)),
|
||||
list("cat" = "CentCom", "jobs" = format_jobs(get_all_centcom_jobs()))
|
||||
)
|
||||
|
||||
if (modify && is_centcom())
|
||||
var/list/all_centcom_access = list()
|
||||
@@ -209,7 +215,7 @@
|
||||
jobdatum = J
|
||||
break
|
||||
if(!jobdatum)
|
||||
usr << "<span class='warning'>No log exists for this job: [t1]</span>"
|
||||
to_chat(usr, "<span class='warning'>No log exists for this job: [t1]</span>")
|
||||
return
|
||||
|
||||
access = jobdatum.get_access()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
var/lit = 0
|
||||
var/id = null
|
||||
var/on_icon = "sign_on"
|
||||
var/off_icon = "sign_off"
|
||||
|
||||
/obj/machinery/holosign/proc/toggle()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
@@ -22,7 +23,7 @@
|
||||
|
||||
/obj/machinery/holosign/update_icon()
|
||||
if(!lit)
|
||||
icon_state = "sign_off"
|
||||
icon_state = off_icon
|
||||
else
|
||||
icon_state = on_icon
|
||||
|
||||
@@ -40,7 +41,16 @@
|
||||
/obj/machinery/holosign/exit
|
||||
name = "exit holosign"
|
||||
desc = "Small wall-mounted holographic projector. This one reads EXIT."
|
||||
on_icon = "exit"
|
||||
on_icon = "emergencyexit"
|
||||
|
||||
/obj/machinery/holosign/bar
|
||||
name = "bar holosign"
|
||||
desc = "Small wall-mounted holographic projector. This one reads OPEN."
|
||||
icon_state = "barclosed"
|
||||
on_icon = "baropen"
|
||||
off_icon = "barclosed"
|
||||
|
||||
|
||||
////////////////////SWITCH///////////////////////////////////////
|
||||
|
||||
/obj/machinery/button/holosign
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
var/wrenching = 0
|
||||
var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range
|
||||
var/timeout = 10 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down.
|
||||
var/can_salvage = TRUE // If false, salvaging doesn't give you anything.
|
||||
|
||||
/obj/machinery/porta_turret/crescent
|
||||
enabled = 0
|
||||
@@ -102,6 +103,7 @@
|
||||
desc = "A very tough looking turret made by alien hands. This one looks destroyed, thankfully."
|
||||
icon_state = "destroyed_target_prism"
|
||||
stat = BROKEN
|
||||
can_salvage = FALSE // So you need to actually kill a turret to get the alien gun.
|
||||
|
||||
/obj/machinery/porta_turret/New()
|
||||
..()
|
||||
@@ -325,7 +327,7 @@ var/list/turret_icons
|
||||
//try and salvage its components
|
||||
user << "<span class='notice'>You begin prying the metal coverings off.</span>"
|
||||
if(do_after(user, 20))
|
||||
if(prob(70))
|
||||
if(can_salvage && prob(70))
|
||||
user << "<span class='notice'>You remove the turret and salvage some components.</span>"
|
||||
if(installation)
|
||||
var/obj/item/weapon/gun/energy/Gun = new installation(loc)
|
||||
|
||||
@@ -180,6 +180,13 @@
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain/sfr
|
||||
name = "SFR headset"
|
||||
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "\improper AI subspace transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
|
||||
@@ -18,3 +18,37 @@
|
||||
/obj/item/poi/pascalb/Destroy()
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/crate/oldreactor
|
||||
name = "fission reactor rack"
|
||||
desc = "Used in older models of nuclear reactors, essentially a cooling rack for high volumes of radioactive material."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "poireactor"
|
||||
icon_opened = "poireactor_open"
|
||||
icon_closed = "poireactor"
|
||||
climbable = 0
|
||||
|
||||
/obj/structure/closet/crate/oldreactor/New()
|
||||
..()
|
||||
new /obj/item/weapon/fuel_assembly/deuterium(src)
|
||||
new /obj/item/weapon/fuel_assembly/deuterium(src)
|
||||
new /obj/item/weapon/fuel_assembly/deuterium(src)
|
||||
new /obj/item/weapon/fuel_assembly/deuterium(src)
|
||||
new /obj/item/weapon/fuel_assembly/deuterium(src)
|
||||
new /obj/item/weapon/fuel_assembly/deuterium(src)
|
||||
|
||||
/obj/item/poi/brokenoldreactor
|
||||
icon_state = "poireactor_broken"
|
||||
name = "ruptured fission reactor rack"
|
||||
desc = "This broken hunk of machinery looks extremely dangerous."
|
||||
|
||||
/obj/item/poi/brokenoldreactor/New()
|
||||
processing_objects += src
|
||||
return ..()
|
||||
|
||||
/obj/item/poi/brokenoldreactor/process()
|
||||
radiation_repository.radiate(src, 25)
|
||||
|
||||
/obj/item/poi/brokenoldreactor/Destroy()
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
@@ -399,28 +399,28 @@
|
||||
return
|
||||
|
||||
if(!parachute) //This packs the parachute
|
||||
visible_message("<span class='notice'>\The [H] starts to pack \the [src]!</span>", \
|
||||
H.visible_message("<span class='notice'>\The [H] starts to pack \the [src]!</span>", \
|
||||
"<span class='notice'>You start to pack \the [src]!</span>", \
|
||||
"You hear the shuffling of cloth.")
|
||||
if(do_after(H, 50))
|
||||
visible_message("<span class='notice'>\The [H] finishes packing \the [src]!</span>", \
|
||||
H.visible_message("<span class='notice'>\The [H] finishes packing \the [src]!</span>", \
|
||||
"<span class='notice'>You finish packing \the [src]!</span>", \
|
||||
"You hear the shuffling of cloth.")
|
||||
parachute = TRUE
|
||||
else
|
||||
visible_message("<span class='notice'>\The [src] gives up on packing \the [src]!</span>", \
|
||||
H.visible_message("<span class='notice'>\The [src] gives up on packing \the [src]!</span>", \
|
||||
"<span class='notice'>You give up on packing \the [src]!</span>")
|
||||
return
|
||||
else //This unpacks the parachute
|
||||
visible_message("<span class='notice'>\The [src] starts to unpack \the [src]!</span>", \
|
||||
H.visible_message("<span class='notice'>\The [src] starts to unpack \the [src]!</span>", \
|
||||
"<span class='notice'>You start to unpack \the [src]!</span>", \
|
||||
"You hear the shuffling of cloth.")
|
||||
if(do_after(H, 25))
|
||||
visible_message("<span class='notice'>\The [src] finishes unpacking \the [src]!</span>", \
|
||||
H.visible_message("<span class='notice'>\The [src] finishes unpacking \the [src]!</span>", \
|
||||
"<span class='notice'>You finish unpacking \the [src]!</span>", \
|
||||
"You hear the shuffling of cloth.")
|
||||
parachute = FALSE
|
||||
else
|
||||
visible_message("<span class='notice'>\The [src] decides not to unpack \the [src]!</span>", \
|
||||
H.visible_message("<span class='notice'>\The [src] decides not to unpack \the [src]!</span>", \
|
||||
"<span class='notice'>You decide not to unpack \the [src]!</span>")
|
||||
return
|
||||
@@ -902,6 +902,18 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(1);/obj/item/weapon/beartrap,
|
||||
prob(2);/obj/item/weapon/handcuffs,)
|
||||
|
||||
/obj/random/sfr
|
||||
name = "random SFR headset"
|
||||
desc = "This is a headset spawn."
|
||||
icon = 'icons/misc/mark.dmi'
|
||||
icon_state = "rup"
|
||||
|
||||
/obj/random/sfr/item_to_spawn()
|
||||
return pick(prob(25);/obj/item/device/radio/headset/heads/captain/sfr,
|
||||
prob(25);/obj/item/device/radio/headset/headset_cargo/alt,
|
||||
prob(25);/obj/item/device/radio/headset/headset_com/alt,
|
||||
prob(25);/obj/item/device/radio/headset)
|
||||
|
||||
/obj/random/rigsuit
|
||||
name = "Random rigsuit"
|
||||
desc = "This is a random rigsuit."
|
||||
@@ -1013,6 +1025,11 @@ var/list/multi_point_spawns
|
||||
id = "Captain's spare id"
|
||||
item_path = /obj/item/weapon/card/id/gold/captain/spare
|
||||
|
||||
/obj/random_multi/single_item/sfr_headset
|
||||
name = "Multi Point - headset"
|
||||
id = "SFR headset"
|
||||
item_path = /obj/random/sfr
|
||||
|
||||
//Multiple Object Spawn
|
||||
|
||||
/obj/random/multiple
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/structure/closet/secure_closet/guncabinet
|
||||
name = "gun cabinet"
|
||||
req_access = list(access_armory)
|
||||
req_one_access = list(access_armory)
|
||||
icon = 'icons/obj/guncabinet.dmi'
|
||||
icon_state = "base"
|
||||
icon_off ="base"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
/obj/structure/dogbed
|
||||
name = "dog bed"
|
||||
desc = "A bed made especially for dogs, or other similarly sized pets."
|
||||
icon = 'icons/obj/furniture.dmi'
|
||||
icon_state = "dogbed"
|
||||
can_buckle = 1
|
||||
buckle_dir = SOUTH
|
||||
buckle_lying = 1
|
||||
@@ -73,6 +73,7 @@
|
||||
return
|
||||
|
||||
is_stump = TRUE
|
||||
density = FALSE
|
||||
icon_state = "[base_state]_stump"
|
||||
overlays.Cut() // For the Sif tree and other future glowy trees.
|
||||
set_light(0)
|
||||
|
||||
@@ -6,9 +6,65 @@
|
||||
w_class = ITEMSIZE_HUGE
|
||||
var/state = 0
|
||||
var/health = 200
|
||||
var/max_health = 200
|
||||
var/displaced_health = 50
|
||||
var/current_damage = 0
|
||||
var/cover = 50 //how much cover the girder provides against projectiles.
|
||||
var/default_material = DEFAULT_WALL_MATERIAL
|
||||
var/material/girder_material
|
||||
var/material/reinf_material
|
||||
var/reinforcing = 0
|
||||
var/applies_material_colour = 1
|
||||
|
||||
/obj/structure/girder/New(var/newloc, var/material_key)
|
||||
..(newloc)
|
||||
if(!material_key)
|
||||
material_key = default_material
|
||||
set_material(material_key)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/girder/Destroy()
|
||||
if(girder_material.products_need_process())
|
||||
processing_objects -= src
|
||||
. = ..()
|
||||
|
||||
/obj/structure/girder/process()
|
||||
if(!radiate())
|
||||
processing_objects -= src
|
||||
return
|
||||
|
||||
/obj/structure/girder/proc/radiate()
|
||||
var/total_radiation = girder_material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0)
|
||||
if(!total_radiation)
|
||||
return
|
||||
|
||||
radiation_repository.radiate(src, total_radiation)
|
||||
return total_radiation
|
||||
|
||||
|
||||
/obj/structure/girder/proc/set_material(var/new_material)
|
||||
girder_material = get_material_by_name(new_material)
|
||||
if(!girder_material)
|
||||
qdel(src)
|
||||
name = "[girder_material.display_name] [initial(name)]"
|
||||
max_health = round(girder_material.integrity) //Should be 150 with default integrity (steel). Weaker than ye-olden Girders now.
|
||||
health = max_health
|
||||
displaced_health = round(max_health/4)
|
||||
if(applies_material_colour)
|
||||
color = girder_material.icon_colour
|
||||
if(girder_material.products_need_process()) //Am I radioactive or some other? Process me!
|
||||
processing_objects |= src
|
||||
else if(src in processing_objects) //If I happened to be radioactive or s.o. previously, and am not now, stop processing.
|
||||
processing_objects -= src
|
||||
|
||||
/obj/structure/girder/get_material()
|
||||
return girder_material
|
||||
|
||||
/obj/structure/girder/update_icon()
|
||||
if(anchored)
|
||||
icon_state = "girder"
|
||||
else
|
||||
icon_state = "displaced"
|
||||
|
||||
/obj/structure/girder/displaced
|
||||
icon_state = "displaced"
|
||||
@@ -16,6 +72,17 @@
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
/obj/structure/girder/displaced/New(var/newloc, var/material_key)
|
||||
..(newloc, material_key)
|
||||
displace()
|
||||
|
||||
/obj/structure/girder/proc/displace()
|
||||
name = "displaced [girder_material.display_name] [initial(name)]"
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = (displaced_health - round(current_damage / 4))
|
||||
cover = 25
|
||||
|
||||
/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
|
||||
if(!damage || !wallbreaker)
|
||||
return 0
|
||||
@@ -36,6 +103,25 @@
|
||||
if(!istype(Proj, /obj/item/projectile/beam))
|
||||
damage *= 0.4 //non beams do reduced damage
|
||||
|
||||
else if(girder_material && girder_material.reflectivity >= 0.5) // Reflect lasers.
|
||||
var/new_damage = damage * girder_material.reflectivity
|
||||
var/outgoing_damage = damage - new_damage
|
||||
damage = round(new_damage)
|
||||
Proj.damage = outgoing_damage
|
||||
|
||||
visible_message("<span class='danger'>\The [src] reflects \the [Proj]!</span>")
|
||||
|
||||
// Find a turf near or on the original location to bounce to
|
||||
var/new_x = Proj.starting.x + pick(0, 0, 0, -1, 1, -2, 2)
|
||||
var/new_y = Proj.starting.y + pick(0, 0, 0, -1, 1, -2, 2)
|
||||
//var/turf/curloc = get_turf(src)
|
||||
var/turf/curloc = get_step(src, get_dir(src, Proj.starting))
|
||||
|
||||
Proj.penetrating += 1 // Needed for the beam to get out of the girder.
|
||||
|
||||
// redirect the projectile
|
||||
Proj.redirect(new_x, new_y, curloc, null)
|
||||
|
||||
health -= damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
@@ -47,9 +133,10 @@
|
||||
dismantle()
|
||||
|
||||
/obj/structure/girder/proc/reset_girder()
|
||||
name = "[girder_material.display_name] [initial(name)]"
|
||||
anchored = 1
|
||||
cover = initial(cover)
|
||||
health = min(health,initial(health))
|
||||
health = min(max_health - current_damage,max_health)
|
||||
state = 0
|
||||
icon_state = initial(icon_state)
|
||||
reinforcing = 0
|
||||
@@ -60,62 +147,59 @@
|
||||
if(istype(W, /obj/item/weapon/wrench) && state == 0)
|
||||
if(anchored && !reinf_material)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>Now disassembling the girder...</span>"
|
||||
if(do_after(user,40 * W.toolspeed))
|
||||
to_chat(user, "<span class='notice'>Now disassembling the girder...</span>")
|
||||
if(do_after(user,(35 + round(max_health/50)) * W.toolspeed))
|
||||
if(!src) return
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You dissasembled the girder!</span>")
|
||||
dismantle()
|
||||
else if(!anchored)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>Now securing the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>Now securing the girder...</span>")
|
||||
if(do_after(user, 40 * W.toolspeed, src))
|
||||
user << "<span class='notice'>You secured the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You secured the girder!</span>")
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "<span class='notice'>Now slicing apart the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>Now slicing apart the girder...</span>")
|
||||
if(do_after(user,30 * W.toolspeed))
|
||||
if(!src) return
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You slice apart the girder!</span>")
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "<span class='notice'>You drill through the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You drill through the girder!</span>")
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(state == 2)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>Now unsecuring support struts...</span>"
|
||||
to_chat(user, "<span class='notice'>Now unsecuring support struts...</span>")
|
||||
if(do_after(user,40 * W.toolspeed))
|
||||
if(!src) return
|
||||
user << "<span class='notice'>You unsecured the support struts!</span>"
|
||||
to_chat(user, "<span class='notice'>You unsecured the support struts!</span>")
|
||||
state = 1
|
||||
else if(anchored && !reinf_material)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
reinforcing = !reinforcing
|
||||
user << "<span class='notice'>\The [src] can now be [reinforcing? "reinforced" : "constructed"]!</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] can now be [reinforcing? "reinforced" : "constructed"]!</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>Now removing support struts...</span>"
|
||||
to_chat(user, "<span class='notice'>Now removing support struts...</span>")
|
||||
if(do_after(user,40 * W.toolspeed))
|
||||
if(!src) return
|
||||
user << "<span class='notice'>You removed the support struts!</span>"
|
||||
to_chat(user, "<span class='notice'>You removed the support struts!</span>")
|
||||
reinf_material.place_dismantled_product(get_turf(src))
|
||||
reinf_material = null
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>Now dislodging the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>Now dislodging the girder...</span>")
|
||||
if(do_after(user, 40 * W.toolspeed))
|
||||
if(!src) return
|
||||
user << "<span class='notice'>You dislodged the girder!</span>"
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
to_chat(user, "<span class='notice'>You dislodged the girder!</span>")
|
||||
displace()
|
||||
|
||||
else if(istype(W, /obj/item/stack/material))
|
||||
if(reinforcing && !reinf_material)
|
||||
@@ -130,14 +214,16 @@
|
||||
|
||||
/obj/structure/girder/proc/take_damage(var/damage)
|
||||
health -= damage
|
||||
|
||||
if(health <= 0)
|
||||
dismantle()
|
||||
else
|
||||
current_damage = current_damage + damage //Rather than calculate this every time we need to use it, just calculate it here and save it.
|
||||
|
||||
|
||||
/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user)
|
||||
var/amount_to_use = reinf_material ? 1 : 2
|
||||
if(S.get_amount() < amount_to_use)
|
||||
user << "<span class='notice'>There isn't enough material here to construct a wall.</span>"
|
||||
to_chat(user, "<span class='notice'>There isn't enough material here to construct a wall.</span>")
|
||||
return 0
|
||||
|
||||
var/material/M = name_to_material[S.default_type]
|
||||
@@ -148,24 +234,24 @@
|
||||
add_hiddenprint(usr)
|
||||
|
||||
if(M.integrity < 50)
|
||||
user << "<span class='notice'>This material is too soft for use in wall construction.</span>"
|
||||
to_chat(user, "<span class='notice'>This material is too soft for use in wall construction.</span>")
|
||||
return 0
|
||||
|
||||
user << "<span class='notice'>You begin adding the plating...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin adding the plating...</span>")
|
||||
|
||||
if(!do_after(user,40) || !S.use(amount_to_use))
|
||||
return 1 //once we've gotten this far don't call parent attackby()
|
||||
|
||||
if(anchored)
|
||||
user << "<span class='notice'>You added the plating!</span>"
|
||||
to_chat(user, "<span class='notice'>You added the plating!</span>")
|
||||
else
|
||||
user << "<span class='notice'>You create a false wall! Push on it to open or close the passage.</span>"
|
||||
to_chat(user, "<span class='notice'>You create a false wall! Push on it to open or close the passage.</span>")
|
||||
wall_fake = 1
|
||||
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall)
|
||||
var/turf/simulated/wall/T = get_turf(src)
|
||||
T.set_material(M, reinf_material)
|
||||
T.set_material(M, reinf_material, girder_material)
|
||||
if(wall_fake)
|
||||
T.can_open = 1
|
||||
T.add_hiddenprint(usr)
|
||||
@@ -174,22 +260,22 @@
|
||||
|
||||
/obj/structure/girder/proc/reinforce_with_material(obj/item/stack/material/S, mob/user) //if the verb is removed this can be renamed.
|
||||
if(reinf_material)
|
||||
user << "<span class='notice'>\The [src] is already reinforced.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is already reinforced.</span>")
|
||||
return 0
|
||||
|
||||
if(S.get_amount() < 1)
|
||||
user << "<span class='notice'>There isn't enough material here to reinforce the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>There isn't enough material here to reinforce the girder.</span>")
|
||||
return 0
|
||||
|
||||
var/material/M = name_to_material[S.default_type]
|
||||
if(!istype(M) || M.integrity < 50)
|
||||
user << "You cannot reinforce \the [src] with that; it is too soft."
|
||||
to_chat(user, "You cannot reinforce \the [src] with that; it is too soft.")
|
||||
return 0
|
||||
|
||||
user << "<span class='notice'>Now reinforcing...</span>"
|
||||
to_chat(user, "<span class='notice'>Now reinforcing...</span>")
|
||||
if (!do_after(user,40) || !S.use(1))
|
||||
return 1 //don't call parent attackby() past this point
|
||||
user << "<span class='notice'>You added reinforcement!</span>"
|
||||
to_chat(user, "<span class='notice'>You added reinforcement!</span>")
|
||||
|
||||
reinf_material = M
|
||||
reinforce_girder()
|
||||
@@ -197,13 +283,13 @@
|
||||
|
||||
/obj/structure/girder/proc/reinforce_girder()
|
||||
cover = reinf_material.hardness
|
||||
health = 500
|
||||
health = health + round(reinf_material.integrity/2)
|
||||
state = 2
|
||||
icon_state = "reinforced"
|
||||
reinforcing = 0
|
||||
|
||||
/obj/structure/girder/proc/dismantle()
|
||||
new /obj/item/stack/material/steel(get_turf(src))
|
||||
girder_material.place_dismantled_product(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/girder/attack_hand(mob/user as mob)
|
||||
@@ -235,6 +321,8 @@
|
||||
icon_state= "cultgirder"
|
||||
health = 250
|
||||
cover = 70
|
||||
girder_material = DEFAULT_WALL_MATERIAL
|
||||
applies_material_colour = 0
|
||||
|
||||
/obj/structure/girder/cult/dismantle()
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
@@ -243,18 +331,18 @@
|
||||
/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>Now disassembling the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>Now disassembling the girder...</span>")
|
||||
if(do_after(user,40 * W.toolspeed))
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You dissasembled the girder!</span>")
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "<span class='notice'>Now slicing apart the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>Now slicing apart the girder...</span>")
|
||||
if(do_after(user,30 * W.toolspeed))
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You slice apart the girder!</span>")
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "<span class='notice'>You drill through the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You drill through the girder!</span>")
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
dismantle()
|
||||
|
||||
@@ -156,6 +156,9 @@
|
||||
|
||||
/obj/structure/sign/warning/docking_area
|
||||
name = "\improper KEEP CLEAR: DOCKING AREA"
|
||||
|
||||
/obj/structure/sign/warning/evac
|
||||
name = "\improper KEEP CLEAR: EVAC DOCKING AREA"
|
||||
icon_state = "evac"
|
||||
|
||||
/obj/structure/sign/warning/engineering_access
|
||||
@@ -777,3 +780,13 @@
|
||||
/obj/structure/sign/atmos/air
|
||||
name = "\improper AIR"
|
||||
icon_state = "atmos_air"
|
||||
|
||||
/obj/structure/sign/poi/engineleft
|
||||
name = "I.C.V."
|
||||
desc = "The charred name of a cargo ship of some description."
|
||||
icon_state = "poi_engine1"
|
||||
|
||||
/obj/structure/sign/poi/engineright
|
||||
name = "I.C.V."
|
||||
desc = "The charred name of a cargo ship of some description."
|
||||
icon_state = "poi_engine2"
|
||||
@@ -4,6 +4,7 @@ var/image/no_ceiling_image = null
|
||||
|
||||
/hook/startup/proc/setup_no_ceiling_image()
|
||||
cache_no_ceiling_image()
|
||||
return TRUE
|
||||
|
||||
/proc/cache_no_ceiling_image()
|
||||
no_ceiling_image = image(icon = 'icons/turf/open_space.dmi', icon_state = "no_ceiling", layer = OVERTURF_LAYER)
|
||||
|
||||
@@ -31,9 +31,13 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/turf/simulated/wall/proc/set_material(var/material/newmaterial, var/material/newrmaterial)
|
||||
/turf/simulated/wall/proc/set_material(var/material/newmaterial, var/material/newrmaterial, var/material/newgmaterial)
|
||||
material = newmaterial
|
||||
reinf_material = newrmaterial
|
||||
if(!newgmaterial)
|
||||
girder_material = DEFAULT_WALL_MATERIAL
|
||||
else
|
||||
girder_material = newgmaterial
|
||||
update_material()
|
||||
|
||||
/turf/simulated/wall/update_icon()
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var/global/damage_overlays[16]
|
||||
var/active
|
||||
var/can_open = 0
|
||||
var/material/girder_material
|
||||
var/material/material
|
||||
var/material/reinf_material
|
||||
var/last_state
|
||||
@@ -26,12 +27,15 @@
|
||||
for(var/obj/O in src)
|
||||
O.hide(1)
|
||||
|
||||
/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype)
|
||||
/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype, var/girdertype)
|
||||
..(newloc)
|
||||
icon_state = "blank"
|
||||
if(!materialtype)
|
||||
materialtype = DEFAULT_WALL_MATERIAL
|
||||
material = get_material_by_name(materialtype)
|
||||
if(!girdertype)
|
||||
girdertype = DEFAULT_WALL_MATERIAL
|
||||
girder_material = get_material_by_name(girdertype)
|
||||
if(!isnull(rmaterialtype))
|
||||
reinf_material = get_material_by_name(rmaterialtype)
|
||||
update_material()
|
||||
@@ -120,18 +124,18 @@
|
||||
. = ..(user)
|
||||
|
||||
if(!damage)
|
||||
user << "<span class='notice'>It looks fully intact.</span>"
|
||||
to_chat(user, "<span class='notice'>It looks fully intact.</span>")
|
||||
else
|
||||
var/dam = damage / material.integrity
|
||||
if(dam <= 0.3)
|
||||
user << "<span class='warning'>It looks slightly damaged.</span>"
|
||||
to_chat(user, "<span class='warning'>It looks slightly damaged.</span>")
|
||||
else if(dam <= 0.6)
|
||||
user << "<span class='warning'>It looks moderately damaged.</span>"
|
||||
to_chat(user, "<span class='warning'>It looks moderately damaged.</span>")
|
||||
else
|
||||
user << "<span class='danger'>It looks heavily damaged.</span>"
|
||||
to_chat(user, "<span class='danger'>It looks heavily damaged.</span>")
|
||||
|
||||
if(locate(/obj/effect/overlay/wallrot) in src)
|
||||
user << "<span class='warning'>There is fungus growing on [src].</span>"
|
||||
to_chat(user, "<span class='warning'>There is fungus growing on [src].</span>")
|
||||
|
||||
//Damage
|
||||
|
||||
@@ -186,9 +190,9 @@
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(!no_product)
|
||||
if(reinf_material)
|
||||
reinf_material.place_dismantled_girder(src, reinf_material)
|
||||
reinf_material.place_dismantled_girder(src, reinf_material, girder_material)
|
||||
else
|
||||
material.place_dismantled_girder(src)
|
||||
material.place_dismantled_girder(src, null, girder_material)
|
||||
if(!devastated)
|
||||
material.place_dismantled_product(src)
|
||||
if (!reinf_material)
|
||||
@@ -204,6 +208,7 @@
|
||||
clear_plants()
|
||||
material = get_material_by_name("placeholder")
|
||||
reinf_material = null
|
||||
girder_material = null
|
||||
update_connections(1)
|
||||
|
||||
ChangeTurf(/turf/simulated/floor/plating)
|
||||
@@ -211,6 +216,8 @@
|
||||
/turf/simulated/wall/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
if(girder_material.explosion_resistance >= 25 && prob(girder_material.explosion_resistance))
|
||||
new /obj/structure/girder/displaced(src, girder_material.name)
|
||||
src.ChangeTurf(get_base_turf_by_area(src))
|
||||
if(2.0)
|
||||
if(prob(75))
|
||||
@@ -247,12 +254,15 @@
|
||||
O.density = 1
|
||||
O.layer = 5
|
||||
|
||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||
if(girder_material.integrity >= 150 && !girder_material.is_brittle()) //Strong girders will remain in place when a wall is melted.
|
||||
dismantle_wall(1,1)
|
||||
else
|
||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||
|
||||
var/turf/simulated/floor/F = src
|
||||
F.burn_tile()
|
||||
F.icon_state = "wall_thermite"
|
||||
user << "<span class='warning'>The thermite starts melting through the wall.</span>"
|
||||
F.icon_state = "dmg[rand(1,4)]"
|
||||
to_chat(user, "<span class='warning'>The thermite starts melting through the wall.</span>")
|
||||
|
||||
spawn(100)
|
||||
if(O)
|
||||
@@ -261,7 +271,7 @@
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/radiate()
|
||||
var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0)
|
||||
var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) + (girder_material ? girder_material.radioactivity / 2 : 0)
|
||||
if(!total_radiation)
|
||||
return
|
||||
|
||||
@@ -271,7 +281,7 @@
|
||||
/turf/simulated/wall/proc/burn(temperature)
|
||||
if(material.combustion_effect(src, temperature, 0.7))
|
||||
spawn(2)
|
||||
new /obj/structure/girder(src)
|
||||
new /obj/structure/girder(src, girder_material.name)
|
||||
src.ChangeTurf(/turf/simulated/floor)
|
||||
for(var/turf/simulated/wall/W in range(3,src))
|
||||
W.burn((temperature/4))
|
||||
|
||||
@@ -91,7 +91,7 @@ turf/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
if(istype(O, /obj/screen))
|
||||
return
|
||||
if(user.restrained() || user.stat || user.stunned || user.paralysis)
|
||||
if(user.restrained() || user.stat || user.stunned || user.paralysis || (!user.lying && !istype(user, /mob/living/silicon/robot)))
|
||||
return
|
||||
if((!(istype(O, /atom/movable)) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O)))
|
||||
return
|
||||
|
||||
@@ -162,7 +162,7 @@ var/list/debug_verbs = list (
|
||||
,/datum/admins/proc/setup_supermatter
|
||||
,/client/proc/atmos_toggle_debug
|
||||
,/client/proc/spawn_tanktransferbomb
|
||||
,/client/proc/debug_process_scheduler
|
||||
,/client/proc/debug_process_scheduler // VOREStation Edit - Nice
|
||||
,/client/proc/take_picture
|
||||
)
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatesoldier
|
||||
name = "Syndicate Operative"
|
||||
name = "Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
|
||||
@@ -23,6 +23,7 @@ var/list/global/map_templates = list()
|
||||
it runs out. The cost of a submap should roughly corrispond with several factors such as size, loot, difficulty, desired scarcity, etc. \
|
||||
Set to -1 to force the submap to always be made.
|
||||
var/allow_duplicates = FALSE // If false, only one map template will be spawned by the game. Doesn't affect admins spawning then manually.
|
||||
var/discard_prob = 0 // If non-zero, there is a chance that the map seeding algorithm will skip this template when selecting potential templates to use.
|
||||
|
||||
var/static/dmm_suite/maploader = new
|
||||
|
||||
@@ -202,6 +203,8 @@ var/list/global/map_templates = list()
|
||||
continue
|
||||
if(!istype(MT, desired_map_template_type)) // Not the type wanted.
|
||||
continue
|
||||
if(MT.discard_prob && prob(MT.discard_prob))
|
||||
continue
|
||||
if(MT.cost && MT.cost < 0) // Negative costs always get spawned.
|
||||
priority_submaps += MT
|
||||
else
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
if(hardness>50)
|
||||
recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
@@ -57,7 +58,6 @@
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
|
||||
@@ -192,11 +192,16 @@ var/list/name_to_material
|
||||
name = "placeholder"
|
||||
|
||||
// Places a girder object when a wall is dismantled, also applies reinforced material.
|
||||
/material/proc/place_dismantled_girder(var/turf/target, var/material/reinf_material)
|
||||
/material/proc/place_dismantled_girder(var/turf/target, var/material/reinf_material, var/material/girder_material)
|
||||
var/obj/structure/girder/G = new(target)
|
||||
if(reinf_material)
|
||||
G.reinf_material = reinf_material
|
||||
G.reinforce_girder()
|
||||
if(girder_material)
|
||||
if(istype(girder_material, /material))
|
||||
girder_material = girder_material.name
|
||||
G.set_material(girder_material)
|
||||
|
||||
|
||||
// General wall debris product placement.
|
||||
// Not particularly necessary aside from snowflakey cult girders.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//This is the proc for gibbing a mob. Cannot gib ghosts.
|
||||
//added different sort of gibs and animations. N
|
||||
/mob/proc/gib(anim="gibbed-m",do_gibs)
|
||||
/mob/proc/gib(anim="gibbed-m", do_gibs, gib_file = 'icons/mob/mob.dmi')
|
||||
death(1)
|
||||
transforming = 1
|
||||
canmove = 0
|
||||
@@ -12,7 +12,7 @@
|
||||
var/atom/movable/overlay/animation = null
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.icon = gib_file
|
||||
animation.master = src
|
||||
|
||||
flick(anim, animation)
|
||||
|
||||
@@ -101,7 +101,9 @@
|
||||
var/turf/t = turf
|
||||
if(obscuredTurfs[t])
|
||||
if(!t.obfuscations[obfuscation.type])
|
||||
t.obfuscations[obfuscation.type] = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
|
||||
var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
|
||||
ob_image.plane = PLANE_FULLSCREEN
|
||||
t.obfuscations[obfuscation.type] = ob_image
|
||||
|
||||
obscured += t.obfuscations[obfuscation.type]
|
||||
for(var/eye in seenby)
|
||||
@@ -140,7 +142,9 @@
|
||||
for(var/turf in obscuredTurfs)
|
||||
var/turf/t = turf
|
||||
if(!t.obfuscations[obfuscation.type])
|
||||
t.obfuscations[obfuscation.type] = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
|
||||
var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
|
||||
ob_image.plane = PLANE_FULLSCREEN
|
||||
t.obfuscations[obfuscation.type] = ob_image
|
||||
obscured += t.obfuscations[obfuscation.type]
|
||||
|
||||
#undef UPDATE_BUFFER
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/human/verb/give(var/mob/living/carbon/target in view(1)-usr)
|
||||
/mob/living/carbon/human/verb/give(var/mob/living/carbon/target in living_mobs(1))
|
||||
set category = "IC"
|
||||
set name = "Give"
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
drop_from_inventory(I)
|
||||
I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(1,3), round(30/I.w_class))
|
||||
|
||||
..(species.gibbed_anim)
|
||||
..(species.gibbed_anim) // uses the default mob.dmi file for these, so we only need to specify the first argument
|
||||
gibs(loc, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src))
|
||||
|
||||
/mob/living/carbon/human/dust()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
secondary_langs = list(LANGUAGE_SOL_COMMON)
|
||||
name_language = null // Use the first-name last-name generator rather than a language scrambler
|
||||
min_age = 17
|
||||
max_age = 110
|
||||
max_age = 130
|
||||
health_hud_intensity = 1.5
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
|
||||
@@ -61,6 +61,9 @@
|
||||
/mob/living/simple_animal/hostile/malf_drone/Process_Spacemove(var/check_drift = 0)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/malf_drone/isSynthetic()
|
||||
return TRUE
|
||||
|
||||
//self repair systems have a chance to bring the drone back to life
|
||||
/mob/living/simple_animal/hostile/malf_drone/Life()
|
||||
|
||||
@@ -150,6 +153,7 @@
|
||||
disabled = rand(150, 600)
|
||||
hostile = 0
|
||||
walk(src,0)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/malf_drone/death()
|
||||
..(null,"suddenly breaks apart.")
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "goose"
|
||||
icon_living = "goose"
|
||||
icon_dead = "goose_dead"
|
||||
icon_gib = "generic_gib"
|
||||
|
||||
faction = "geese"
|
||||
intelligence_level = SA_ANIMAL
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "penguin"
|
||||
icon_living = "penguin"
|
||||
icon_dead = "penguin_dead"
|
||||
icon_gib = "generic_gib"
|
||||
intelligence_level = SA_ANIMAL
|
||||
|
||||
maxHealth = 20
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
//List of different corpse types
|
||||
|
||||
/obj/effect/landmark/mobcorpse/syndicatesoldier
|
||||
name = "Syndicate Operative"
|
||||
name = "Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
sparks.start()
|
||||
|
||||
/mob/living/simple_animal/hostile/mecha/death()
|
||||
..(0,"is explodes!")
|
||||
..(0,"explodes!")
|
||||
sparks.start()
|
||||
explosion(get_turf(src), 0, 0, 1, 3)
|
||||
qdel(src)
|
||||
@@ -93,3 +93,26 @@
|
||||
/mob/living/simple_animal/hostile/mecha/Move()
|
||||
..()
|
||||
playsound(src,'sound/mecha/mechstep.ogg',40,1)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/mecha/malf_drone
|
||||
intelligence_level = SA_ROBOTIC
|
||||
faction = "malf_drone"
|
||||
speak_chance = 1
|
||||
speak = list(
|
||||
"Resuming task: Protect area.",
|
||||
"No threats found.",
|
||||
"Error: No targets found."
|
||||
)
|
||||
emote_hear = list("humms ominously", "whirrs softly", "grinds a gear")
|
||||
emote_see = list("looks around the area", "turns from side to side")
|
||||
say_understood = list("Affirmative.", "Positive.")
|
||||
say_cannot = list("Denied.", "Negative.")
|
||||
say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
|
||||
say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
|
||||
|
||||
/mob/living/simple_animal/hostile/mecha/malf_drone/isSynthetic()
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/mecha/malf_drone/speech_bubble_appearance()
|
||||
return "synthetic_evil"
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/hostile/syndicate
|
||||
name = "syndicate operative"
|
||||
name = "mercenary"
|
||||
desc = "Death to the Company."
|
||||
icon_state = "syndicate"
|
||||
icon_living = "syndicate"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
//Mob icon/appearance settings
|
||||
var/icon_living = "" // The iconstate if we're alive, required
|
||||
var/icon_dead = "" // The iconstate if we're dead, required
|
||||
var/icon_gib = null // The iconstate for being gibbed, optional
|
||||
var/icon_gib = "generic_gib" // The iconstate for being gibbed, optional. Defaults to a generic gib animation.
|
||||
var/icon_rest = null // The iconstate for resting, optional
|
||||
var/image/modifier_overlay = null // Holds overlays from modifiers.
|
||||
|
||||
@@ -490,7 +490,7 @@
|
||||
purge -= 1
|
||||
|
||||
/mob/living/simple_animal/gib()
|
||||
..(icon_gib,1)
|
||||
..(icon_gib,1,icon) // we need to specify where the gib animation is stored
|
||||
|
||||
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
|
||||
if(act)
|
||||
|
||||
@@ -251,7 +251,7 @@ datum/weather/sif
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
|
||||
/datum/weather/sif/rain/process_effects()
|
||||
/datum/weather/sif/storm/process_effects()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
|
||||
@@ -18,6 +18,8 @@ var/list/fusion_cores = list()
|
||||
active_power_usage = 500 //multiplied by field strength
|
||||
anchored = 0
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/fusion_core
|
||||
|
||||
var/obj/effect/fusion_em_field/owned_field
|
||||
var/field_strength = 1//0.01
|
||||
var/id_tag
|
||||
@@ -27,8 +29,12 @@ var/list/fusion_cores = list()
|
||||
|
||||
/obj/machinery/power/fusion_core/initialize()
|
||||
. = ..()
|
||||
connect_to_network()
|
||||
fusion_cores += src
|
||||
default_apply_parts()
|
||||
|
||||
/obj/machinery/power/fusion_core/mapped/initialize()
|
||||
. = ..()
|
||||
connect_to_network()
|
||||
|
||||
/obj/machinery/power/fusion_core/Destroy()
|
||||
for(var/obj/machinery/computer/fusion_core_control/FCC in machines)
|
||||
@@ -47,6 +53,7 @@ var/list/fusion_cores = list()
|
||||
owned_field.radiation_scale()
|
||||
owned_field.temp_dump()
|
||||
owned_field.temp_color()
|
||||
|
||||
/obj/machinery/power/fusion_core/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
@@ -106,23 +113,20 @@ var/list/fusion_cores = list()
|
||||
to_chat(user,"<span class='warning'>Shut \the [src] off first!</span>")
|
||||
return
|
||||
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
if(default_part_replacement(user, W))
|
||||
return
|
||||
|
||||
if(ismultitool(W))
|
||||
var/new_ident = input("Enter a new ident tag.", "Fusion Core", id_tag) as null|text
|
||||
if(new_ident && user.Adjacent(src))
|
||||
id_tag = new_ident
|
||||
return
|
||||
|
||||
else if(iswrench(W))
|
||||
anchored = !anchored
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
if(anchored)
|
||||
user.visible_message("[user.name] secures [src.name] to the floor.", \
|
||||
"You secure the [src.name] to the floor.", \
|
||||
"You hear a ratchet")
|
||||
else
|
||||
user.visible_message("[user.name] unsecures [src.name] from the floor.", \
|
||||
"You unsecure the [src.name] from the floor.", \
|
||||
"You hear a ratchet")
|
||||
if(default_unfasten_wrench(user, W))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -6,6 +6,12 @@
|
||||
anchored = 1
|
||||
layer = 4
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/fusion_fuel_compressor
|
||||
|
||||
/obj/machinery/fusion_fuel_compressor/initialize()
|
||||
. = ..()
|
||||
default_apply_parts()
|
||||
|
||||
/obj/machinery/fusion_fuel_compressor/MouseDrop_T(var/atom/movable/target, var/mob/user)
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return
|
||||
@@ -34,6 +40,14 @@
|
||||
return 0
|
||||
|
||||
/obj/machinery/fusion_fuel_compressor/attackby(var/obj/item/thing, var/mob/user)
|
||||
|
||||
if(default_deconstruction_screwdriver(user, thing))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, thing))
|
||||
return
|
||||
if(default_part_replacement(user, thing))
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/stack/material))
|
||||
var/obj/item/stack/material/M = thing
|
||||
var/material/mat = M.get_material()
|
||||
|
||||
@@ -11,15 +11,17 @@ var/list/fuel_injectors = list()
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 500
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/fusion_injector
|
||||
|
||||
var/fuel_usage = 0.0001
|
||||
var/id_tag
|
||||
var/injecting = 0
|
||||
var/obj/item/weapon/fuel_assembly/cur_assembly
|
||||
|
||||
/obj/machinery/fusion_fuel_injector/New()
|
||||
..()
|
||||
/obj/machinery/fusion_fuel_injector/initialize()
|
||||
. = ..()
|
||||
fuel_injectors += src
|
||||
tag = null
|
||||
default_apply_parts()
|
||||
|
||||
/obj/machinery/fusion_fuel_injector/Destroy()
|
||||
if(cur_assembly)
|
||||
@@ -66,17 +68,18 @@ var/list/fuel_injectors = list()
|
||||
cur_assembly = W
|
||||
return
|
||||
|
||||
if(iswrench(W))
|
||||
if(iswrench(W) || isscrewdriver(W) || iscrowbar(W) || istype(W, /obj/item/weapon/storage/part_replacer))
|
||||
if(injecting)
|
||||
to_chat(user, "<span class='warning'>Shut \the [src] off first!</span>")
|
||||
return
|
||||
anchored = !anchored
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
if(anchored)
|
||||
user.visible_message("\The [user] secures \the [src] to the floor.")
|
||||
else
|
||||
user.visible_message("\The [user] unsecures \the [src] from the floor.")
|
||||
return
|
||||
if(default_unfasten_wrench(user, W))
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
if(default_part_replacement(user, W))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -122,7 +125,6 @@ var/list/fuel_injectors = list()
|
||||
var/obj/effect/accelerated_particle/A = new/obj/effect/accelerated_particle(get_turf(src), dir)
|
||||
A.particle_type = reagent
|
||||
A.additional_particles = numparticles - 1
|
||||
A.move(1)
|
||||
if(cur_assembly)
|
||||
cur_assembly.rod_quantities[reagent] -= amount
|
||||
amount_left += cur_assembly.rod_quantities[reagent]
|
||||
@@ -150,4 +152,4 @@ var/list/fuel_injectors = list()
|
||||
if (usr.incapacitated() || usr.restrained() || anchored)
|
||||
return
|
||||
|
||||
src.dir = turn(src.dir, 90)
|
||||
src.dir = turn(src.dir, 90)
|
||||
|
||||
@@ -38,8 +38,6 @@
|
||||
return 0
|
||||
|
||||
/obj/effect/fusion_particle_catcher/CanPass(var/atom/movable/mover, var/turf/target, var/height=0, var/air_group=0)
|
||||
if(istype(mover, /obj/item/projectile/beam))
|
||||
return 0
|
||||
if(istype(mover, /obj/effect/accelerated_particle))
|
||||
return 0
|
||||
if(istype(mover, /obj/effect/accelerated_particle) || istype(mover, /obj/item/projectile/beam))
|
||||
return !density
|
||||
return 1
|
||||
|
||||
@@ -9,6 +9,8 @@ var/list/gyrotrons = list()
|
||||
use_power = 1
|
||||
active_power_usage = 50000
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/gyrotron
|
||||
|
||||
var/id_tag
|
||||
var/rate = 3
|
||||
var/mega_energy = 1
|
||||
@@ -21,6 +23,7 @@ var/list/gyrotrons = list()
|
||||
/obj/machinery/power/emitter/gyrotron/initialize()
|
||||
gyrotrons += src
|
||||
active_power_usage = mega_energy * 50000
|
||||
default_apply_parts()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/power/emitter/gyrotron/Destroy()
|
||||
@@ -54,4 +57,12 @@ var/list/gyrotrons = list()
|
||||
if(new_ident && user.Adjacent(src))
|
||||
id_tag = new_ident
|
||||
return
|
||||
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
if(default_part_replacement(user, W))
|
||||
return
|
||||
|
||||
return ..()
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "Accelerated Particles"
|
||||
desc = "Small things moving very fast."
|
||||
icon = 'icons/obj/machines/particle_accelerator2.dmi'
|
||||
icon_state = "particle"//Need a new icon for this
|
||||
icon_state = "particle1"//Need a new icon for this
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/movement_range = 10
|
||||
@@ -19,22 +19,25 @@
|
||||
var/movetotarget = 1
|
||||
|
||||
/obj/effect/accelerated_particle/weak
|
||||
icon_state = "particle0"
|
||||
movement_range = 8
|
||||
energy = 5
|
||||
|
||||
/obj/effect/accelerated_particle/strong
|
||||
icon_state = "particle2"
|
||||
movement_range = 15
|
||||
energy = 15
|
||||
|
||||
/obj/effect/accelerated_particle/powerful
|
||||
icon_state = "particle3"
|
||||
movement_range = 25
|
||||
energy = 50
|
||||
|
||||
/obj/effect/accelerated_particle/New(loc, dir = 2)
|
||||
src.loc = loc
|
||||
src.set_dir(dir)
|
||||
if(movement_range > 20)
|
||||
movement_range = 20
|
||||
spawn(0)
|
||||
move(1)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/Bump(atom/A)
|
||||
@@ -58,18 +61,15 @@
|
||||
PC.parent.plasma_temperature += mega_energy
|
||||
PC.parent.energy += energy
|
||||
loc = null
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/Bumped(atom/A)
|
||||
if(ismob(A))
|
||||
Bump(A)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/accelerated_particle/singularity_act()
|
||||
return
|
||||
@@ -79,7 +79,6 @@
|
||||
M.apply_effect((radiation*3),IRRADIATE,0)
|
||||
M.updatehealth()
|
||||
//M << "<font color='red'>You feel odd.</font>"
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/proc/move(var/lag)
|
||||
|
||||
@@ -3,8 +3,4 @@
|
||||
desc_holder = "This is where the Alpha particles are accelerated to <b><i>radical speeds</i></b>."
|
||||
icon = 'icons/obj/machines/particle_accelerator2.dmi'
|
||||
icon_state = "fuel_chamber"
|
||||
reference = "fuel_chamber"
|
||||
|
||||
/obj/structure/particle_accelerator/fuel_chamber/update_icon()
|
||||
..()
|
||||
return
|
||||
reference = "fuel_chamber"
|
||||
@@ -56,11 +56,10 @@
|
||||
active = 0
|
||||
connected_parts = list()
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/update_icon()
|
||||
if(active)
|
||||
icon_state = "[reference]p1"
|
||||
icon_state = "[reference]p[strength]"
|
||||
else
|
||||
if(use_power)
|
||||
if(assembled)
|
||||
@@ -77,7 +76,6 @@
|
||||
icon_state = "[reference]w"
|
||||
else
|
||||
icon_state = "[reference]c"
|
||||
return
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/Topic(href, href_list)
|
||||
..()
|
||||
@@ -94,9 +92,9 @@
|
||||
|
||||
if(href_list["togglep"])
|
||||
if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE))
|
||||
src.toggle_power()
|
||||
toggle_power()
|
||||
else if(href_list["scan"])
|
||||
src.part_scan()
|
||||
part_scan()
|
||||
|
||||
else if(href_list["strengthup"])
|
||||
if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE))
|
||||
@@ -106,9 +104,8 @@
|
||||
if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE))
|
||||
remove_strength()
|
||||
|
||||
src.updateDialog()
|
||||
src.update_icon()
|
||||
return
|
||||
updateDialog()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/proc/strength_change()
|
||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||
@@ -144,7 +141,6 @@
|
||||
update_use_power(0)
|
||||
else if(!stat && construction_state == 3)
|
||||
update_use_power(1)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/process()
|
||||
@@ -152,13 +148,12 @@
|
||||
//a part is missing!
|
||||
if( length(connected_parts) < 6 )
|
||||
investigate_log("lost a connected part; It <font color='red'>powered down</font>.","singulo")
|
||||
src.toggle_power()
|
||||
toggle_power()
|
||||
return
|
||||
//emit some particles
|
||||
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
|
||||
if(PE)
|
||||
PE.emit_particle(src.strength)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/proc/part_scan()
|
||||
@@ -211,11 +206,11 @@
|
||||
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
|
||||
src.active = !src.active
|
||||
active = !active
|
||||
investigate_log("turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [usr ? usr.key : "outside forces"]","singulo")
|
||||
message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])")
|
||||
if(src.active)
|
||||
if(active)
|
||||
update_use_power(2)
|
||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||
part.strength = src.strength
|
||||
|
||||
@@ -20,20 +20,16 @@
|
||||
icon_state = "emitter_right"
|
||||
reference = "emitter_right"
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/update_icon()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/proc/set_delay(var/delay)
|
||||
if(delay && delay >= 0)
|
||||
src.fire_delay = delay
|
||||
fire_delay = delay
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0)
|
||||
if((src.last_shot + src.fire_delay) <= world.time)
|
||||
src.last_shot = world.time
|
||||
if((last_shot + fire_delay) <= world.time)
|
||||
last_shot = world.time
|
||||
var/obj/effect/accelerated_particle/A = null
|
||||
var/turf/T = get_step(src,dir)
|
||||
switch(strength)
|
||||
@@ -43,6 +39,8 @@
|
||||
A = new/obj/effect/accelerated_particle(T, dir)
|
||||
if(2)
|
||||
A = new/obj/effect/accelerated_particle/strong(T, dir)
|
||||
if(3)
|
||||
A = new/obj/effect/accelerated_particle/powerful(T, dir)
|
||||
if(A)
|
||||
A.set_dir(src.dir)
|
||||
return 1
|
||||
|
||||
@@ -3,8 +3,4 @@
|
||||
desc_holder = "This uses electromagnetic waves to focus the Alpha-Particles."
|
||||
icon = 'icons/obj/machines/particle_accelerator2.dmi'
|
||||
icon_state = "power_box"
|
||||
reference = "power_box"
|
||||
|
||||
/obj/structure/particle_accelerator/power_box/update_icon()
|
||||
..()
|
||||
return
|
||||
reference = "power_box"
|
||||
@@ -1,6 +1,6 @@
|
||||
// BUILDABLE SMES(Superconducting Magnetic Energy Storage) UNIT
|
||||
//
|
||||
// Last Change 1.1.2015 by Atlantis - Happy New Year!
|
||||
// Last Change 1.26.2018 by Neerti. Also signing this is dumb.
|
||||
//
|
||||
// This is subtype of SMES that should be normally used. It can be constructed, deconstructed and hacked.
|
||||
// It also supports RCON System which allows you to operate it remotely, if properly set.
|
||||
@@ -55,8 +55,10 @@
|
||||
component_parts += new /obj/item/weapon/smes_coil(src)
|
||||
recalc_coils()
|
||||
|
||||
|
||||
|
||||
// Pre-installed and pre-charged SMES hidden from the station, for use in submaps.
|
||||
/obj/machinery/power/smes/buildable/point_of_interest/New()
|
||||
..(1)
|
||||
charge = 1e6 // Should be enough for an individual POI.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -562,6 +562,7 @@
|
||||
name = "Rezadone"
|
||||
id = "rezadone"
|
||||
description = "A powder with almost magical properties, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
|
||||
taste_description = "bitterness"
|
||||
reagent_state = SOLID
|
||||
color = "#669900"
|
||||
overdose = REAGENTS_OVERDOSE
|
||||
@@ -654,27 +655,6 @@
|
||||
M << "<span class='warning'>Your mind breaks apart...</span>"
|
||||
M.hallucination += 200
|
||||
|
||||
/datum/reagent/rezadone
|
||||
name = "Rezadone"
|
||||
id = "rezadone"
|
||||
description = "A powder with almost magical properties, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
|
||||
taste_description = "bitterness"
|
||||
reagent_state = SOLID
|
||||
color = "#669900"
|
||||
overdose = REAGENTS_OVERDOSE
|
||||
scannable = 1
|
||||
|
||||
/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
M.adjustCloneLoss(-20 * removed)
|
||||
M.adjustOxyLoss(-2 * removed)
|
||||
M.heal_organ_damage(20 * removed, 20 * removed)
|
||||
M.adjustToxLoss(-20 * removed)
|
||||
if(dose > 3)
|
||||
M.status_flags &= ~DISFIGURED
|
||||
if(dose > 10)
|
||||
M.make_dizzy(5)
|
||||
M.make_jittery(5)
|
||||
|
||||
/datum/reagent/qerr_quem
|
||||
name = "Qerr-quem"
|
||||
id = "querr_quem"
|
||||
|
||||
@@ -1988,7 +1988,7 @@
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/onionrings
|
||||
name = "Onion Soup"
|
||||
name = "Onion Rings"
|
||||
desc = "Crispy rings."
|
||||
icon_state = "onionrings"
|
||||
trash = /obj/item/trash/plate
|
||||
@@ -3508,9 +3508,9 @@
|
||||
..()
|
||||
|
||||
// potato + knife = raw sticks
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/material/knife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(src)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
|
||||
if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
|
||||
user << "You cut the potato."
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -39,8 +39,10 @@
|
||||
exempt_from_atmos += using_map.unit_test_exempt_from_atmos.Copy()
|
||||
exempt_from_apc += using_map.unit_test_exempt_from_apc.Copy()
|
||||
|
||||
var/list/zs_to_test = using_map.unit_test_z_levels || list(1) //Either you set it, or you just get z1
|
||||
|
||||
for(var/area/A in world)
|
||||
if(A.z == 1 && !(A.type in exempt_areas))
|
||||
if((A.z in zs_to_test) && !(A.type in exempt_areas))
|
||||
area_test_count++
|
||||
var/area_good = 1
|
||||
var/bad_msg = "--------------- [A.name]([A.type])"
|
||||
|
||||
@@ -53,6 +53,71 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">25 January 2018</h2>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Southern Cross Map is now live</li>
|
||||
</ul>
|
||||
<h3 class="author">Arokha updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Remove borg hud items as they have normal huds as their sensor augs now, and can see records with them.</li>
|
||||
</ul>
|
||||
<h3 class="author">Atermonera updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Communicators have a flashlight under the settings menu, functions as the PDA one</li>
|
||||
<li class="rscadd">Station-bound synthetics now have gps units</li>
|
||||
</ul>
|
||||
<h3 class="author">Cerebulon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added 19 food recipes from /tg/station</li>
|
||||
</ul>
|
||||
<h3 class="author">Leshana updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="soundadd">Sounds of Tesla engine lighting bolts</li>
|
||||
<li class="imageadd">Sprites for grounding rod and Tesla coil</li>
|
||||
<li class="imageadd">Sprites for lighting bolts</li>
|
||||
<li class="rscadd">The Tesla Engine, Tesla Coils, and Grounding Rods</li>
|
||||
<li class="rscadd">Wiki search URL is now configurable in config.txt</li>
|
||||
<li class="rscadd">Breaker boxes can be constructed in game.</li>
|
||||
<li class="bugfix">Construction of heat exchange pipes, vents, and scrubbers now works properly again.</li>
|
||||
<li class="tweak">Fix singularity energy balance so it is stable under normal operation.</li>
|
||||
<li class="bugfix">Fix emitter beams and PA effects from being grav pulled or consumed.</li>
|
||||
<li class="rscadd">Added the operating manual book for the Tesla Engine.</li>
|
||||
</ul>
|
||||
<h3 class="author">Mechoid updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Brains can be set to be a source of genetic information.</li>
|
||||
<li class="rscadd">Promethean cores can be inserted into a cloning scanner to be cloned. This gives them a worse modifier upon completion.</li>
|
||||
<li class="rscadd">Promethean cores can now have chemicals added or removed from them. Base for future slime cloner.</li>
|
||||
<li class="rscadd">Species-based cloning sicknesses possible.</li>
|
||||
<li class="spellcheck">Cyboernetic - > Cybernetic</li>
|
||||
</ul>
|
||||
<h3 class="author">Neerti updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds boats that can be ridden by multiple people, which use oars. Can be crafted with large amounts of wooden planks.</li>
|
||||
<li class="rscadd">Adds autopilot functionality to Southern Cross Shuttle One and Shuttle Two.</li>
|
||||
<li class="rscadd">Adds ability to rename certain shuttles on the Southern Cross.</li>
|
||||
<li class="rscadd">Areas about to be occupied by a shuttle will display a visual warning, of a bunch of circles growing over five seconds.</li>
|
||||
</ul>
|
||||
<h3 class="author">SunnyDaff updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added new food items.</li>
|
||||
<li class="rscadd">Added Cider.</li>
|
||||
<li class="rscadd">Added Apple Juice to bar vending machine.</li>
|
||||
<li class="bugfix">Fixed Vodka recipe.</li>
|
||||
<li class="bugfix">Fixed Apple and Carrot cake recipes</li>
|
||||
<li class="tweak">Changed Cake recipes to not include fruit juice</li>
|
||||
</ul>
|
||||
<h3 class="author">ZeroBits updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added the ability to have multiple loadouts per character.</li>
|
||||
</ul>
|
||||
<h3 class="author">battlefieldCommander updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds a communicator watch, a variant of the communicator you can wear on your wrist.</li>
|
||||
<li class="rscadd">Replaces the communicator in the loadout with a communicator selection. Choose either the traditional communicator, or the new commwatch.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">12 January 2018</h2>
|
||||
<h3 class="author">Atermonera updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -3745,3 +3745,57 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
also do this with other movable objects, if you really wanted to.
|
||||
- tweak: Conscious mobs lying on the ground can now buckle themselves to chairs/beds.
|
||||
This includes people missing legs.
|
||||
2018-01-25:
|
||||
Anewbe:
|
||||
- rscadd: Southern Cross Map is now live
|
||||
Arokha:
|
||||
- tweak: Remove borg hud items as they have normal huds as their sensor augs now,
|
||||
and can see records with them.
|
||||
Atermonera:
|
||||
- rscadd: Communicators have a flashlight under the settings menu, functions as
|
||||
the PDA one
|
||||
- rscadd: Station-bound synthetics now have gps units
|
||||
Cerebulon:
|
||||
- rscadd: Added 19 food recipes from /tg/station
|
||||
Leshana:
|
||||
- soundadd: Sounds of Tesla engine lighting bolts
|
||||
- imageadd: Sprites for grounding rod and Tesla coil
|
||||
- imageadd: Sprites for lighting bolts
|
||||
- rscadd: The Tesla Engine, Tesla Coils, and Grounding Rods
|
||||
- rscadd: Wiki search URL is now configurable in config.txt
|
||||
- rscadd: Breaker boxes can be constructed in game.
|
||||
- bugfix: Construction of heat exchange pipes, vents, and scrubbers now works properly
|
||||
again.
|
||||
- tweak: Fix singularity energy balance so it is stable under normal operation.
|
||||
- bugfix: Fix emitter beams and PA effects from being grav pulled or consumed.
|
||||
- rscadd: Added the operating manual book for the Tesla Engine.
|
||||
Mechoid:
|
||||
- rscadd: Brains can be set to be a source of genetic information.
|
||||
- rscadd: Promethean cores can be inserted into a cloning scanner to be cloned.
|
||||
This gives them a worse modifier upon completion.
|
||||
- rscadd: Promethean cores can now have chemicals added or removed from them. Base
|
||||
for future slime cloner.
|
||||
- rscadd: Species-based cloning sicknesses possible.
|
||||
- spellcheck: Cyboernetic - > Cybernetic
|
||||
Neerti:
|
||||
- rscadd: Adds boats that can be ridden by multiple people, which use oars. Can
|
||||
be crafted with large amounts of wooden planks.
|
||||
- rscadd: Adds autopilot functionality to Southern Cross Shuttle One and Shuttle
|
||||
Two.
|
||||
- rscadd: Adds ability to rename certain shuttles on the Southern Cross.
|
||||
- rscadd: Areas about to be occupied by a shuttle will display a visual warning,
|
||||
of a bunch of circles growing over five seconds.
|
||||
SunnyDaff:
|
||||
- rscadd: Added new food items.
|
||||
- rscadd: Added Cider.
|
||||
- rscadd: Added Apple Juice to bar vending machine.
|
||||
- bugfix: Fixed Vodka recipe.
|
||||
- bugfix: Fixed Apple and Carrot cake recipes
|
||||
- tweak: Changed Cake recipes to not include fruit juice
|
||||
ZeroBits:
|
||||
- rscadd: Added the ability to have multiple loadouts per character.
|
||||
battlefieldCommander:
|
||||
- rscadd: Adds a communicator watch, a variant of the communicator you can wear
|
||||
on your wrist.
|
||||
- rscadd: Replaces the communicator in the loadout with a communicator selection.
|
||||
Choose either the traditional communicator, or the new commwatch.
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
author: Arokha
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Remove borg hud items as they have normal huds as their sensor augs now, and can see records with them."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: Atermonera
|
||||
|
||||
delete-after: True
|
||||
|
||||
- rscadd: "Communicators have a flashlight under the settings menu, functions as the PDA one"
|
||||
@@ -0,0 +1,6 @@
|
||||
author: Atermonera
|
||||
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "ID computer can set command secretary and IAA access"
|
||||
- tweak: "Command secretary has keycard auth. access"
|
||||
@@ -1,5 +0,0 @@
|
||||
author: Atermonera
|
||||
|
||||
delete-after: True
|
||||
|
||||
- rscadd: "Station-bound synthetics now have gps units"
|
||||
@@ -1,7 +0,0 @@
|
||||
|
||||
author: Cerebulon
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Added 19 food recipes from /tg/station"
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
author: Cerebulon
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Added toggleable 'Open' sign to bar hallway so you can tell if it's open without walking inside."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Breaker boxes can be constructed in game."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Construction of heat exchange pipes, vents, and scrubbers now works properly again."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Fix singularity energy balance so it is stable under normal operation."
|
||||
- bugfix: "Fix emitter beams and PA effects from being grav pulled or consumed."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added the operating manual book for the Tesla Engine."
|
||||
@@ -1,6 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
- soundadd: "Sounds of Tesla engine lighting bolts"
|
||||
- imageadd: "Sprites for grounding rod and Tesla coil"
|
||||
- imageadd: "Sprites for lighting bolts"
|
||||
- rscadd: "The Tesla Engine, Tesla Coils, and Grounding Rods"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Wiki search URL is now configurable in config.txt"
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
author: Mechoid
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Adds material girders."
|
||||
- tweak: "Girder decon time is now partially dependant on material. Stronger girders take slightly longer."
|
||||
- tweak: "Wall girders are now under the integrity-based construction listing. Material-Name Wall Girder."
|
||||
- rscadd: "Explosive-resistant girders in walls have a chance to survive as an unanchored girder, if their wall is destroyed."
|
||||
- rscadd: "Radioactive girders affect the completed wall's radioactivity."
|
||||
@@ -1,11 +0,0 @@
|
||||
|
||||
author: Mechoid
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Brains can be set to be a source of genetic information."
|
||||
- rscadd: "Promethean cores can be inserted into a cloning scanner to be cloned. This gives them a worse modifier upon completion."
|
||||
- rscadd: "Promethean cores can now have chemicals added or removed from them. Base for future slime cloner."
|
||||
- rscadd: "Species-based cloning sicknesses possible."
|
||||
- spellcheck: "Cyboernetic - > Cybernetic"
|
||||
@@ -1,36 +0,0 @@
|
||||
################################
|
||||
# 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: Neerti
|
||||
|
||||
# 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: "Adds boats that can be ridden by multiple people, which use oars. Can be crafted with large amounts of wooden planks."
|
||||
@@ -1,38 +0,0 @@
|
||||
################################
|
||||
# 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: Neerti
|
||||
|
||||
# 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: "Adds autopilot functionality to Southern Cross Shuttle One and Shuttle Two."
|
||||
- rscadd: "Adds ability to rename certain shuttles on the Southern Cross."
|
||||
- rscadd: "Areas about to be occupied by a shuttle will display a visual warning, of a bunch of circles growing over five seconds."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: ZeroBits
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added the ability to have multiple loadouts per character."
|
||||
@@ -1,10 +0,0 @@
|
||||
author: SunnyDaff
|
||||
delete-after: True
|
||||
|
||||
- rscadd: Added new food items.
|
||||
- rscadd: Added Cider.
|
||||
- rscadd: Added Apple Juice to bar vending machine.
|
||||
- bugfix: Fixed Vodka recipe.
|
||||
- bugfix: Fixed Apple and Carrot cake recipes
|
||||
- tweak: Changed Cake recipes to not include fruit juice
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
author: battlefieldCommander
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds a communicator watch, a variant of the communicator you can wear on your wrist."
|
||||
- rscadd: "Replaces the communicator in the loadout with a communicator selection. Choose either the traditional communicator, or the new commwatch."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: Belsima
|
||||
|
||||
delete-after: True
|
||||
|
||||
- tweak: "Maintenance drones may now ventcrawl."
|
||||
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
@@ -7,6 +7,9 @@
|
||||
worn_state = "pilot1"
|
||||
item_icons = list(slot_w_uniform_str = 'maps/southern_cross/icons/mob/sc_under.dmi')
|
||||
icon = 'maps/southern_cross/icons/obj/sc_uniforms.dmi'
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'maps/southern_cross/icons/mob/species/teshari/sc_uniform.dmi'
|
||||
)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1)
|
||||
|
||||
/obj/item/clothing/under/rank/pilot2
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
/datum/gear/head/pilot
|
||||
display_name = "helmet, pilot (Pilot)"
|
||||
path = /obj/item/clothing/head/pilot/alt
|
||||
allowed_roles = list("Pilot")
|
||||
@@ -0,0 +1,3 @@
|
||||
/datum/gear/suit/bomber_pilot
|
||||
display_name = "bomber jacket, pilot"
|
||||
path = /obj/item/clothing/suit/storage/toggle/bomber/pilot
|
||||
@@ -0,0 +1,5 @@
|
||||
// Uniform slot
|
||||
/datum/gear/uniform/pilot
|
||||
display_name = "uniform, pilot (Pilot)"
|
||||
path = /obj/item/clothing/under/rank/pilot2
|
||||
allowed_roles = list("Pilot")
|
||||
@@ -420,6 +420,7 @@
|
||||
"id" = (/obj/structure/cable/ender{icon_state = "1-2"; id = "surface_cave"},/turf/simulated/floor/plating{tag = "icon-asteroidplating2"; icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
|
||||
"ie" = (/turf/simulated/wall/dungeon,/area/surface/cave/unexplored/normal)
|
||||
"if" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/space)
|
||||
"ig" = (/obj/item/stack/flag/red{amount = 1},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -550,7 +551,7 @@ aaababababababababababababababababababababababababababababababababababababababab
|
||||
aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababaa
|
||||
aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabacacabababababababababababababababababababababababababababababababababababababababababababababababababababaa
|
||||
aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabacacababababababababababababababababababababababababababababababababababababababababababababababababababaa
|
||||
adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaead
|
||||
adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafigaeaeaeaeaeaeaeaeaeaeafafafafafigaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeigafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaead
|
||||
adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeafafafaeaeaeafafafaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaead
|
||||
adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeafafaeaeafafaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaead
|
||||
adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaead
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
#include "shuttles/ninja.dm"
|
||||
#include "shuttles/ert.dm"
|
||||
|
||||
#include "loadout/loadout_head.dm"
|
||||
#include "loadout/loadout_suit.dm"
|
||||
#include "loadout/loadout_uniform.dm"
|
||||
|
||||
#include "items/encryptionkey_sc.dm"
|
||||
#include "items/headset_sc.dm"
|
||||
#include "items/clothing/sc_suit.dm"
|
||||
|
||||
@@ -39,7 +39,27 @@
|
||||
emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%"
|
||||
emergency_shuttle_recall_message = "The emergency shuttle has been recalled."
|
||||
|
||||
station_networks = list()
|
||||
// Networks that will show up as options in the camera monitor program
|
||||
station_networks = list(
|
||||
NETWORK_CARGO,
|
||||
NETWORK_CIVILIAN,
|
||||
NETWORK_COMMAND,
|
||||
NETWORK_ENGINE,
|
||||
NETWORK_ENGINEERING,
|
||||
NETWORK_ENGINEERING_OUTPOST,
|
||||
NETWORK_FIRST_DECK,
|
||||
NETWORK_SECOND_DECK,
|
||||
NETWORK_THIRD_DECK,
|
||||
NETWORK_MAIN_OUTPOST,
|
||||
NETWORK_MEDICAL,
|
||||
NETWORK_MINE,
|
||||
NETWORK_RESEARCH,
|
||||
NETWORK_RESEARCH_OUTPOST,
|
||||
NETWORK_ROBOTS,
|
||||
NETWORK_PRISON,
|
||||
NETWORK_SECURITY,
|
||||
NETWORK_TELECOM
|
||||
)
|
||||
|
||||
allowed_spawns = list("Arrivals Shuttle","Gateway", "Cryogenic Storage", "Cyborg Storage")
|
||||
unit_test_exempt_areas = list(/area/ninja_dojo, /area/ninja_dojo/firstdeck, /area/ninja_dojo/arrivals_dock)
|
||||
|
||||
@@ -4,24 +4,6 @@ var/const/NETWORK_FIRST_DECK = "First Deck"
|
||||
var/const/NETWORK_SUPPLY = "Supply"
|
||||
var/const/NETWORK_MAIN_OUTPOST = "Main Outpost"
|
||||
|
||||
/datum/map/southern_cross
|
||||
// Networks that will show up as options in the camera monitor program
|
||||
station_networks = list(
|
||||
NETWORK_ENGINE,
|
||||
NETWORK_THIRD_DECK,
|
||||
NETWORK_SECOND_DECK,
|
||||
NETWORK_FIRST_DECK,
|
||||
NETWORK_ROBOTS,
|
||||
NETWORK_SUPPLY,
|
||||
NETWORK_COMMAND,
|
||||
NETWORK_ENGINEERING,
|
||||
NETWORK_MEDICAL,
|
||||
NETWORK_MAIN_OUTPOST,
|
||||
NETWORK_RESEARCH,
|
||||
NETWORK_SECURITY,
|
||||
NETWORK_THUNDER,
|
||||
)
|
||||
|
||||
//
|
||||
// Cameras
|
||||
//
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/guncabinet/rifle
|
||||
name = "rifle cabinet"
|
||||
req_access = list(access_explorer)
|
||||
req_one_access = list(access_explorer,access_brig)
|
||||
|
||||
/obj/structure/closet/secure_closet/guncabinet/rifle/New()
|
||||
..()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"a" = (/turf/template_noop,/area/template_noop)
|
||||
"b" = (/turf/template_noop,/area/submap/Rockb1)
|
||||
"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Rockb1)
|
||||
"d" = (/turf/simulated/mineral/ignore_mapgen/sif,/area/submap/Rockb1)
|
||||
"d" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rockb1)
|
||||
"e" = (/turf/simulated/wall/r_wall,/area/submap/Rockb1)
|
||||
"f" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/lino,/area/submap/Rockb1)
|
||||
"g" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/gun/projectile/pistol,/obj/item/ammo_magazine/m9mm/compact,/obj/item/ammo_magazine/m9mm/compact,/turf/simulated/floor/lino,/area/submap/Rockb1)
|
||||
@@ -24,22 +24,26 @@
|
||||
"x" = (/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"y" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"z" = (/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"A" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"B" = (/obj/machinery/power/apc{operating = 0; pixel_x = 31},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"C" = (/obj/machinery/door/airlock,/turf/space,/area/submap/Rockb1)
|
||||
"D" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/hydro,/area/submap/Rockb1)
|
||||
"E" = (/obj/structure/toilet{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/hydro,/area/submap/Rockb1)
|
||||
"F" = (/obj/structure/table/standard,/obj/item/weapon/pickaxe/drill,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"G" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"H" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/excavation,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"I" = (/obj/structure/table/standard,/obj/item/stack/material/cyborg/steel,/obj/item/stack/material/cyborg/glass,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"J" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"K" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"L" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"M" = (/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"N" = (/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"O" = (/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"P" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"A" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"B" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"C" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"D" = (/obj/machinery/power/apc{operating = 0; pixel_x = 31},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"E" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"F" = (/obj/machinery/door/airlock,/turf/space,/area/submap/Rockb1)
|
||||
"G" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/hydro,/area/submap/Rockb1)
|
||||
"H" = (/obj/structure/toilet{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/hydro,/area/submap/Rockb1)
|
||||
"I" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"J" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"K" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/excavation,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"L" = (/obj/structure/table/standard,/obj/item/weapon/pickaxe/drill,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"M" = (/obj/structure/table/standard,/obj/item/stack/material/cyborg/steel,/obj/item/stack/material/cyborg/glass,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"N" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"O" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"P" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/Rockb1)
|
||||
"Q" = (/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"R" = (/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"S" = (/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
"T" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/plating,/area/submap/Rockb1)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -53,10 +57,10 @@ abcddepqrestmetumvedcccba
|
||||
abcddeeewemtteweeeeecccba
|
||||
accddemtxmmtttttxyzycccba
|
||||
abdddeweeeeeeeweeeeecccba
|
||||
abdddettABetAmtCDEedcccba
|
||||
abdddeFGHmetIJKeeeedcccba
|
||||
abcddeeeeeeLeeeeddddcccba
|
||||
abccddddddeMNOPedddccccba
|
||||
abdddeABCDetEmtFGHedcccba
|
||||
abdddeIJKLetMNOeeeedcccba
|
||||
abcddeeeeeePeeeeddddcccba
|
||||
abccddddddeQRSTedddccccba
|
||||
abccddddddeeeeeedccccccba
|
||||
abcccccccddddddddddccccba
|
||||
abbcccccccccccccccccccbba
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "lost_explorer.dmm"
|
||||
#include "CaveTrench.dmm"
|
||||
#include "Cavelake.dmm"
|
||||
#include "Rockb1.dmm"
|
||||
#endif
|
||||
|
||||
// The 'mountains' is the mining z-level, and has a lot of caves.
|
||||
@@ -88,6 +89,12 @@
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/Rockb1
|
||||
name = "Rocky Base 1"
|
||||
desc = "Someones underground hidey hole"
|
||||
mappath = 'maps/submaps/surface_submaps/mountains/Rockb1.dmm'
|
||||
cost = 15
|
||||
|
||||
/**************
|
||||
* Deep Caves *
|
||||
**************/
|
||||
@@ -104,6 +111,7 @@
|
||||
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet it still seems to be running..."
|
||||
mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo.dmm'
|
||||
cost = 40
|
||||
discard_prob = 50
|
||||
|
||||
/datum/map_template/surface/mountains/deep/Scave1
|
||||
name = "Spider Cave 1"
|
||||
@@ -113,7 +121,7 @@
|
||||
|
||||
/datum/map_template/surface/mountains/deep/CaveTrench
|
||||
name = "Cave River"
|
||||
desc = "A strange underground river"
|
||||
desc = "A strange underground river."
|
||||
mappath = 'maps/submaps/surface_submaps/mountains/CaveTrench.dmm'
|
||||
cost = 20
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
"a" = (/turf/template_noop,/area/template_noop)
|
||||
"b" = (/turf/template_noop,/area/submap/Field1)
|
||||
"c" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Field1)
|
||||
"d" = (/turf/simulated/floor/outdoors/dirt,/area/submap/Field1)
|
||||
"e" = (/obj/structure/ore_box,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1)
|
||||
"f" = (/obj/item/device/radio,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1)
|
||||
"g" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1)
|
||||
"h" = (/obj/vehicle/train/cargo/engine,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1)
|
||||
"i" = (/obj/item/device/flashlight,/turf/simulated/floor/outdoors/dirt,/area/submap/Field1)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaabbbbbbbbbbbbbbba
|
||||
abbaaaaaaaaaabbbbbbbbbbbbbbbaa
|
||||
abbaaaaaabbbbbbcbbbbbbbbbcbbaa
|
||||
abbbaaabbbbbbbbbbbbbbbbbbbbaaa
|
||||
abbbbbbbbbbbbbbbbbbcbbbbbbbaaa
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbaaa
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbaaaa
|
||||
abbbcbbbbbbbbbbbbbbbbbbbbbaaaa
|
||||
aabbbbbbbbbbbbbbbbbbbbbbbbaaaa
|
||||
aabbbbbbbbbbbbbbbbbbbbbbbbbaaa
|
||||
aaabbbbbbbbbbbdddbbbbbbbbbbaaa
|
||||
aaabbbbbbbbbddddddddddbbbbbbba
|
||||
aaaabbbbbbbddddddddddddbbbbbba
|
||||
aaaabbbbbbbddddddddddddbbbbcba
|
||||
aaaabbbbbbbdddedfddddbbbbbbbba
|
||||
aaabbbbbbbbbdegghdddbbbbbbbbba
|
||||
aaabbbbbbbbbbbdibdbbbbbbbbbbba
|
||||
aabbbbbbbbbbbbbbbbbbbbbbbcbbba
|
||||
abbbcbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbcbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbbbbbba
|
||||
abbbbbbbbbbbbbbbbbbbbbbbcbbbba
|
||||
aabbbbbbcbbbbaaaabaaabbbbbbcba
|
||||
aaaaaaabbbbbaaaaaaaaaabbbbbbba
|
||||
aaaaaaaaabbaaaaaaaaaaabbbbbbba
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -0,0 +1,16 @@
|
||||
"a" = (/turf/template_noop,/area/template_noop)
|
||||
"b" = (/turf/template_noop,/area/submap/Rocky5)
|
||||
"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rocky5)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaa
|
||||
abbccccccbbbbbbbbcba
|
||||
accccccccbbbbbbbbcba
|
||||
abcccccbbbbbbbbbccca
|
||||
abbcccbbbbbbbbbbccca
|
||||
abbbbbbbbccbbbbbccca
|
||||
abbbbbbbbccbbbbbbcca
|
||||
abbbbbbbbcccbbbbbcba
|
||||
abbbbbbbccccccbbbbba
|
||||
aaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||