Merge branch 'master' of https://github.com/VOREStation/VOREStation into making-of-shadekin

This commit is contained in:
Heroman3003
2019-10-29 09:33:48 +10:00
1698 changed files with 269984 additions and 473924 deletions
+1 -1
View File
@@ -104,7 +104,7 @@
return 0
return 1
/obj/structure/catwalk/proc/take_damage(amount)
/obj/structure/catwalk/take_damage(amount)
health -= amount
if(health <= 0)
visible_message("<span class='warning'>\The [src] breaks down!</span>")
@@ -385,7 +385,7 @@
if(!opened)
icon_state = icon_closed
if(sealed)
overlays += "sealed"
overlays += "welded"
else
icon_state = icon_opened
@@ -468,3 +468,10 @@
if(istype(src.loc, /obj/structure/closet))
return (loc.return_air_for_internal_lifeform(L))
return return_air()
/obj/structure/closet/take_damage(var/damage)
if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
return
dump_contents()
spawn(1) qdel(src)
return 1
@@ -0,0 +1,3 @@
/obj/structure/closet/secure_closet/miner/Initialize()
starts_with += /obj/item/device/gps/mining
return ..()
@@ -11,6 +11,8 @@
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
/obj/item/blueprints,
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
/obj/item/clothing/under/rank/chief_engineer,
/obj/item/clothing/under/rank/chief_engineer/skirt,
/obj/item/clothing/head/hardhat/white,
@@ -95,6 +97,7 @@
/obj/item/clothing/glasses/meson,
/obj/item/weapon/cartridge/engineering,
/obj/item/taperoll/engineering,
/obj/item/clothing/head/hardhat,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering,
/obj/item/clothing/shoes/boots/winter/engineering,
/obj/item/weapon/tank/emergency/oxygen/engi,
@@ -123,8 +126,10 @@
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
/obj/item/clothing/suit/fire/firefighter,
/obj/item/clothing/head/hardhat/red,
/obj/item/device/flashlight,
/obj/item/weapon/extinguisher,
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
/obj/item/device/radio/headset/headset_eng,
/obj/item/device/radio/headset/headset_eng/alt,
/obj/item/clothing/suit/storage/hazardvest,
@@ -0,0 +1,3 @@
/obj/structure/closet/secure_closet/paramedic/Initialize()
starts_with += /obj/item/device/gps/medical
return ..()
@@ -302,7 +302,7 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
var/id = null
starts_with = list(
/obj/item/clothing/under/color/orange,
/obj/item/clothing/under/color/prison,
/obj/item/clothing/shoes/orange)
@@ -140,7 +140,7 @@
icon_closed = "orange"
starts_with = list(
/obj/item/clothing/under/color/orange = 3,
/obj/item/clothing/under/color/prison = 3,
/obj/item/clothing/shoes/orange = 3)
@@ -3,7 +3,7 @@
/obj/structure/closet/crate
name = "crate"
desc = "A rectangular steel crate."
icon = 'icons/obj/storage.dmi'
icon = 'icons/obj/storage_vr.dmi' //VOREStation edit
icon_state = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
@@ -293,6 +293,9 @@
/obj/structure/closet/crate/solar
name = "solar pack crate"
icon_state = "engi_crate" //VOREStation Edit
icon_opened = "engi_crateopen" //VOREStation Edit
icon_closed = "engi_crate" //VOREStation Edit
starts_with = list(
/obj/item/solar_assembly = 21,
@@ -343,12 +346,13 @@
desc = "A crate of emergency rations."
starts_with = list(
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 4)
/obj/random/mre = 6)
/obj/structure/closet/crate/bin
name = "large bin"
desc = "A large bin."
icon = 'icons/obj/storage.dmi' //VOREStation edit
icon_state = "largebin"
icon_opened = "largebinopen"
icon_closed = "largebin"
@@ -417,6 +421,7 @@
/obj/structure/closet/crate/secure/bin
name = "secure bin"
desc = "A secure bin."
icon = 'icons/obj/storage.dmi' //VOREStation edit
icon_state = "largebins"
icon_opened = "largebinsopen"
icon_closed = "largebins"
@@ -429,7 +434,7 @@
/obj/structure/closet/crate/large
name = "large crate"
desc = "A hefty metal crate."
icon = 'icons/obj/storage.dmi'
icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
icon_state = "largemetal"
icon_opened = "largemetalopen"
icon_closed = "largemetal"
@@ -457,10 +462,10 @@
/obj/structure/closet/crate/secure/large
name = "large crate"
desc = "A hefty metal crate with an electronic locking system."
icon = 'icons/obj/storage.dmi'
icon_state = "largemetal"
icon_opened = "largemetalopen"
icon_closed = "largemetal"
icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
icon_state = "largemetalsecure" //VOREStation Edit
icon_opened = "largemetalsecureopen" //VOREStation Edit
icon_closed = "largemetalsecure" //VOREStation Edit
redlight = "largemetalr"
greenlight = "largemetalg"
@@ -31,4 +31,9 @@
..()
return
return
/obj/structure/closet/crate/medical/blood
icon_state = "blood"
icon_opened = "bloodopen"
icon_closed = "blood"
@@ -1,7 +1,7 @@
/obj/structure/largecrate
name = "large crate"
desc = "A hefty wooden crate."
icon = 'icons/obj/storage.dmi'
icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
icon_state = "densecrate"
density = 1
var/list/starts_with
@@ -82,10 +82,11 @@
starts_with = list(/obj/structure/vehiclecage/quadtrailer)
/obj/structure/largecrate/animal
icon_state = "mulecrate"
icon_state = "lisacrate" //VOREStation Edit
/obj/structure/largecrate/animal/mulebot
name = "Mulebot crate"
icon_state = "mulecrate" //VOREStation Edit
starts_with = list(/mob/living/bot/mulebot)
/obj/structure/largecrate/animal/corgi
@@ -50,7 +50,7 @@
/mob/living/simple_mob/animal/wolf,
/mob/living/simple_mob/animal/space/bear;0.5,
/mob/living/simple_mob/animal/space/carp,
/mob/living/simple_mob/animal/space/mimic,
/mob/living/simple_mob/vore/aggressive/mimic,
/mob/living/simple_mob/vore/aggressive/rat,
/mob/living/simple_mob/vore/aggressive/rat/tame,
// /mob/living/simple_mob/otie;0.5
+100 -3
View File
@@ -1,14 +1,82 @@
/obj/structure/flora
name = "flora"
desc = "A perfectly generic plant."
anchored = TRUE // Usually, plants don't move. Usually.
plane = DECAL_PLANE
layer = BELOW_MOB_LAYER
var/randomize_size = FALSE
var/max_x_scale = 1.25
var/max_y_scale = 1.25
var/min_x_scale = 0.9
var/min_y_scale = 0.9
var/harvest_tool = null // The type of item used to harvest the plant.
var/harvest_count = 0
var/randomize_harvest_count = TRUE
var/max_harvests = 0
var/min_harvests = -1
var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree.
/obj/structure/flora/Initialize()
..()
if(randomize_size)
icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100
icon_scale_y = rand(min_y_scale * 100, max_y_scale * 100) / 100
if(prob(50))
icon_scale_x *= -1
update_transform()
if(randomize_harvest_count)
max_harvests = max(0, rand(min_harvests, max_harvests)) // Incase you want to weight it more toward 'not harvestable', set min_harvests to a negative value.
/obj/structure/flora/examine(mob/user)
. = ..(user)
if(harvest_count < max_harvests)
to_chat(user, "<span class='notice'>\The [src] seems to have something hanging from it.</span>")
/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
if(can_harvest(W))
var/harvest_spawn = pickweight(harvest_loot)
var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
if(!AM)
to_chat(user, "<span class='notice'>You fail to harvest anything from \the [src].</span>")
else
to_chat(user, "<span class='notice'>You harvest \the [AM] from \the [src].</span>")
return
..(W, user)
/obj/structure/flora/proc/can_harvest(var/obj/item/I)
. = FALSE
if(harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests)
. = TRUE
return .
/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null)
if(!ispath(path))
return 0
var/turf/Target = get_turf(src)
if(user)
Target = get_turf(user)
var/atom/movable/AM = new path(Target)
harvest_count++
return AM
//bushes
/obj/structure/flora/bush
name = "bush"
icon = 'icons/obj/flora/snowflora.dmi'
icon_state = "snowbush1"
anchored = 1
/obj/structure/flora/bush/New()
..()
@@ -20,6 +88,7 @@
icon = 'icons/obj/plants.dmi'
icon_state = "plant-26"
anchored = FALSE
//newbushes
@@ -27,7 +96,6 @@
name = "bush"
icon = 'icons/obj/flora/ausflora.dmi'
icon_state = "firstbush_1"
anchored = 1
/obj/structure/flora/ausbushes/New()
..()
@@ -122,7 +190,7 @@
/obj/structure/flora/ausbushes/ppflowers/New()
..()
icon_state = "ppflowers_[rand(1, 4)]"
icon_state = "ppflowers_[rand(1, 3)]"
/obj/structure/flora/ausbushes/sparsegrass
icon_state = "sparsegrass_1"
@@ -144,6 +212,7 @@
icon_state = "hangskele"
desc = "It's an anatomical model of a human skeletal system made of plaster."
plane = OBJ_PLANE
//potted plants credit: Flashkirby
/obj/structure/flora/pottedplant
@@ -152,6 +221,8 @@
icon = 'icons/obj/plants.dmi'
icon_state = "plant-01"
plane = OBJ_PLANE
/obj/structure/flora/pottedplant/large
name = "large potted plant"
desc = "This is a large plant. Three branches support pairs of waxy leaves."
@@ -298,6 +369,14 @@
/obj/structure/flora/sif
icon = 'icons/obj/flora/sifflora.dmi'
/obj/structure/flora/sif/attack_hand(mob/user)
if (user.a_intent == I_HURT)
if(do_after(user, 5 SECONDS))
user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].")
qdel(src)
else
user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].")
/datum/category_item/catalogue/flora/subterranean_bulbs
name = "Sivian Flora - Subterranean Bulbs"
desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \
@@ -341,3 +420,21 @@
/obj/structure/flora/sif/eyes/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
. = ..()
/datum/category_item/catalogue/flora/mosstendrils
name = "Sivian Flora - Moss Stalks"
desc = "A plant native to Sif. The plant is most closely related to the common, dense moss found covering Sif's terrain. \
It has evolved a method of camouflage utilizing white hairs on its dorsal sides to make it appear as a small mound of snow from \
above. It has no known use, though it is a common furnishing in contemporary homes."
value = CATALOGUER_REWARD_TRIVIAL
/obj/structure/flora/sif/tendrils
name = "stocky tendrils"
desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
icon_state = "grass"
randomize_size = TRUE
catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
/obj/structure/flora/sif/tendrils/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
. = ..()
+39 -5
View File
@@ -17,13 +17,30 @@
/obj/structure/flora/tree/Initialize()
icon_state = choose_icon_state()
return ..()
/obj/structure/flora/tree/update_transform()
var/matrix/M = matrix()
M.Scale(icon_scale_x, icon_scale_y)
M.Translate(0, 16*(icon_scale_y-1))
animate(src, transform = M, time = 10)
// Override this for special icons.
/obj/structure/flora/tree/proc/choose_icon_state()
return icon_state
/obj/structure/flora/tree/can_harvest(var/obj/item/I)
. = FALSE
if(!is_stump && harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests)
. = TRUE
return .
/obj/structure/flora/tree/attackby(var/obj/item/weapon/W, var/mob/living/user)
if(can_harvest(W))
..(W, user)
return
if(!istype(W))
return ..()
@@ -57,8 +74,11 @@
/obj/structure/flora/tree/proc/hit_animation()
var/init_px = pixel_x
var/shake_dir = pick(-1, 1)
animate(src, transform=turn(matrix(), shake_animation_degrees * shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
var/matrix/M = matrix()
M.Scale(icon_scale_x, icon_scale_y)
M.Translate(0, 16*(icon_scale_y-1))
animate(src, transform=turn(M, shake_animation_degrees * shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
animate(transform=M, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
// Used when the tree gets hurt.
/obj/structure/flora/tree/proc/adjust_health(var/amount, var/damage_wood = FALSE)
@@ -247,13 +267,27 @@
base_state = "tree_sif"
product = /obj/item/stack/material/log/sif
catalogue_data = list(/datum/category_item/catalogue/flora/sif_tree)
randomize_size = TRUE
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = -4
harvest_loot = list(
/obj/item/weapon/reagent_containers/food/snacks/siffruit = 5
)
var/light_shift = 0
/obj/structure/flora/tree/sif/choose_icon_state()
light_shift = rand(0, 5)
return "[base_state][light_shift]"
/obj/structure/flora/tree/sif/Initialize()
. = ..()
update_icon()
return ..()
/obj/structure/flora/tree/sif/update_icon()
set_light(5, 1, "#33ccff")
var/image/glow = image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[base_state]_glow")
set_light(5 - light_shift, 1, "#33ccff") // 5 variants, missing bulbs. 5th has no bulbs, so no glow.
var/image/glow = image(icon = icon, icon_state = "[base_state][light_shift]_glow")
glow.plane = PLANE_LIGHTING_ABOVE
overlays = list(glow)
@@ -0,0 +1,26 @@
/obj/structure/ghost_pod/manual/lost_drone/dogborg
/obj/structure/ghost_pod/manual/lost_drone/dogborg/create_occupant(var/mob/M)
var/response = alert(M, "What type of lost drone are you? Do note, that dogborgs may have experienced different type of corruption ((Potential for having vore-related laws))", "Drone Type", "Regular", "Dogborg")
if(!(response == "Dogborg")) // No response somehow or Regular
return ..()
else
density = FALSE
var/mob/living/silicon/robot/stray/randomlaws/R = new(get_turf(src))
R.adjustBruteLoss(rand(5, 30))
R.adjustFireLoss(rand(5, 10))
if(M.mind)
M.mind.transfer_to(R)
// Put this text here before ckey change so that their laws are shown below it, since borg login() shows it.
to_chat(M, "<span class='notice'>You are a <b>Stray Drone</b>, discovered inside the wreckage of your previous home. \
Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \
however they did free you from your pod...</span>")
to_chat(M, "<span class='notice'><b>Be sure to examine your currently loaded lawset closely.</b> Remember, your \
definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \
from the pod is not a crewmember.</span>")
R.ckey = M.ckey
visible_message("<span class='warning'>As \the [src] opens, the eyes of the robot flicker as it is activated.</span>")
R.Namepick()
log_and_message_admins("successfully opened \a [src] and got a Stray Drone.")
used = TRUE
return TRUE
+2 -2
View File
@@ -38,7 +38,7 @@
if(!total_radiation)
return
radiation_repository.radiate(src, total_radiation)
SSradiation.radiate(src, total_radiation)
return total_radiation
@@ -212,7 +212,7 @@
else
return ..()
/obj/structure/girder/proc/take_damage(var/damage)
/obj/structure/girder/take_damage(var/damage)
health -= damage
if(health <= 0)
dismantle()
+5
View File
@@ -281,3 +281,8 @@
return TRUE
return FALSE
/obj/structure/grille/take_damage(var/damage)
health -= damage
spawn(1) healthcheck()
return 1
@@ -0,0 +1,8 @@
/obj/structure/handrail
name = "handrail"
icon = 'icons/obj/handrail_vr.dmi'
icon_state = "handrail"
desc = "A safety railing with buckles to secure yourself to when floor isn't stable enough."
density = 0
anchored = 1
can_buckle = 1
@@ -137,6 +137,13 @@
user.visible_message("<span class='danger'>[user] [attack_verb] at [src]!</span>")
return 1
/obj/structure/inflatable/take_damage(var/damage)
health -= damage
if(health <= 0)
visible_message("<span class='danger'>The [src] deflates!</span>")
spawn(1) puncture()
return 1
/obj/item/inflatable/door/
name = "inflatable door"
desc = "A folded membrane which rapidly expands into a simple door on activation."
+85
View File
@@ -0,0 +1,85 @@
/obj/structure/ledge
name = "rock ledge"
desc = "An easily scaleable rocky ledge."
icon = 'icons/obj/ledges.dmi'
density = 1
throwpass = 1
climbable = 1
anchored = 1
var/solidledge = 1
flags = ON_BORDER
layer = STAIRS_LAYER
icon_state = "ledge"
/obj/structure/ledge_corner
icon_state = "ledge-corner"
flags = 0
name = "rock ledge"
desc = "An easily scaleable rocky ledge."
icon = 'icons/obj/ledges.dmi'
density = 1
throwpass = 1
climbable = 1
anchored = 1
layer = STAIRS_LAYER
/obj/structure/ledge/ledge_nub
desc = "Part of a rocky ledge."
icon_state = "ledge-nub"
density = 0
solidledge = 0
/obj/structure/ledge/ledge_stairs
name = "rock stairs"
desc = "A colorful set of rocky stairs"
icon_state = "ledge-stairs"
density = 0
solidledge = 0
/obj/structure/ledge/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
if(solidledge && get_dir(mover, target) == turn(dir, 180))
return !density
return TRUE
/obj/structure/ledge/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSTABLE))
return 1
if(solidledge && get_dir(O.loc, target) == dir)
return 0
return 1
/obj/structure/ledge/do_climb(var/mob/living/user)
if(!can_climb(user))
return
usr.visible_message("<span class='warning'>[user] starts climbing onto \the [src]!</span>")
climbers |= user
if(!do_after(user,(issmall(user) ? 20 : 34)))
climbers -= user
return
if(!can_climb(user, post_climb_check=1))
climbers -= user
return
if(get_turf(user) == get_turf(src))
usr.forceMove(get_step(src, src.dir))
else
usr.forceMove(get_turf(src))
usr.visible_message("<span class='warning'>[user] climbed over \the [src]!</span>")
climbers -= user
/obj/structure/ledge/can_climb(var/mob/living/user, post_climb_check=0)
if(!..())
return 0
if(get_turf(user) == get_turf(src))
var/obj/occupied = neighbor_turf_impassable()
if(occupied)
to_chat(user, "<span class='danger'>You can't climb there, there's \a [occupied] in the way.</span>")
return 0
return 1
+3 -2
View File
@@ -340,7 +340,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/weapon/stock_parts/subspace/transmitter,
/obj/item/weapon/stock_parts/subspace/treatment,
/obj/item/frame,
/obj/item/broken_device,
/obj/item/broken_device/random,
/obj/item/borg/upgrade/restart,
/obj/item/weapon/cell,
/obj/item/weapon/cell/high,
@@ -781,7 +781,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
// Todo: Better loot.
/obj/structure/loot_pile/mecha/gygax/dark/adv
icon_state = "darkgygax_adv-broken"
icon_scale = 1.5
icon_scale_x = 1.5
icon_scale_y = 1.5
pixel_y = 8
/obj/structure/loot_pile/mecha/gygax/medgax
+2 -2
View File
@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
#define MUSICIAN_HEARCHECK_MINDELAY 4
#define INSTRUMENT_MAX_LINE_LENGTH 300
#define INSTRUMENT_MAX_LINE_NUMBER 50
#define INSTRUMENT_MAX_LINE_LENGTH 50
#define INSTRUMENT_MAX_LINE_NUMBER 300
/datum/song
var/name = "Untitled"
+7 -5
View File
@@ -8,6 +8,7 @@
layer = MOB_LAYER
plane = MOB_PLANE
explosion_resistance = 5
var/can_pass_lying = TRUE
var/list/mobs_can_pass = list(
/mob/living/bot,
/mob/living/simple_mob/slime/xenobio,
@@ -18,9 +19,9 @@
/obj/structure/plasticflaps/attackby(obj/item/P, mob/user)
if(P.is_wirecutter())
playsound(src, P.usesound, 50, 1)
user << "<span class='notice'>You start to cut the plastic flaps.</span>"
to_chat(user, "<span class='notice'>You start to cut the plastic flaps.</span>")
if(do_after(user, 10 * P.toolspeed))
user << "<span class='notice'>You cut the plastic flaps.</span>"
to_chat(user, "<span class='notice'>You cut the plastic flaps.</span>")
var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
A.amount = 4
qdel(src)
@@ -36,12 +37,12 @@
if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass
return 0
if(istype(A, /obj/vehicle)) //no vehicles
if(istype(A, /obj/vehicle) || istype (A, /obj/mecha)) //no vehicles
return 0
var/mob/living/M = A
if(istype(M))
if(M.lying)
if(M.lying && can_pass_lying)
return ..()
for(var/mob_type in mobs_can_pass)
if(istype(A, mob_type))
@@ -63,5 +64,6 @@
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
desc = "Heavy duty, airtight, plastic flaps. Have extra safety installed, preventing passage of living beings."
can_atmos_pass = ATMOS_PASS_NO
can_pass_lying = FALSE
+25 -1
View File
@@ -105,4 +105,28 @@
**16/FEB/2562**<BR>
<B>Something chitters.</B><BR>
<B>End of transcript.</B>
"}
"}
/obj/structure/prop/blackbox/xenofrigate
catalogue_data = list(/datum/category_item/catalogue/information/blackbox/xenofrigate)
/datum/category_item/catalogue/information/blackbox/xenofrigate
name = "Black Box Data - MBT-540"
desc = {"
<BR>
<B>Begin Log</B>
<B>@$&@$& Human ##:##:##:</B> Attention unidentified vessel, state your designation and intent.<BR>
<B>!#@$&&^ Human ##:##:##:</B> Commander I don't think they're going to stop.<BR>
<B>@$&@$& Human ##:##:##:</B> Unidentified vessel, you have until the count of three before we engage weapon-<BR>
<B>!#@$&&^ Human ##:##:##:</B> Commander! Think about what you're-<BR>
<B>A repeating clicking, before silence.</B><BR>
<B>End of first log.</B><BR>
**<BR>
<B>Begin Log</B><BR>
<B>#!#^@$& Skrell ##:##:##:</B> Director, I think you should see this.<BR>
<B>^@$& Skrell ##:##:##:</B> Yes? What is it?<BR>
<B>#!#^@$& Skrell ##:##:##:</B> Another one of those ships has appeared near th-462$^ ---n colonies. I would strongly advise pursuing it.<BR>
<B>^@$& Skrell ##:##:##:</B> A wise decision. If it is damaged like the last one, we may be able to finally see what is - What?<BR>
<B>A repeating ping, before silence.</B><BR>
<B>End of second log.</B>
"}
@@ -18,13 +18,17 @@
var/checkrange_mult = 1
/obj/machinery/door/blast/puzzle/proc/check_locks()
if(!locks || locks.len <= 0) // Puzzle doors with no locks will only listen to boring buttons.
return 0
for(var/obj/structure/prop/lock/L in locks)
if(!L.enabled)
return 0
return 1
/obj/machinery/door/blast/puzzle/bullet_act(var/obj/item/projectile/Proj)
visible_message("<span class='cult'>\The [src] is completely unaffected by \the [Proj].</span>")
if(!istype(Proj, /obj/item/projectile/test))
visible_message("<span class='cult'>\The [src] is completely unaffected by \the [Proj].</span>")
qdel(Proj) //No piercing. No.
/obj/machinery/door/blast/puzzle/ex_act(severity)
+1 -1
View File
@@ -52,7 +52,7 @@
if(0.5 to 1.0)
to_chat(user, "<span class='notice'>It has a few scrapes and dents.</span>")
/obj/structure/railing/proc/take_damage(amount)
/obj/structure/railing/take_damage(amount)
health -= amount
if(health <= 0)
visible_message("<span class='warning'>\The [src] breaks down!</span>")
+33 -5
View File
@@ -124,15 +124,22 @@
icon_state = material.door_icon_base
/obj/structure/simple_door/attackby(obj/item/weapon/W as obj, mob/user as mob)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(istype(W,/obj/item/weapon/pickaxe))
var/obj/item/weapon/pickaxe/digTool = W
user << "You start digging the [name]."
visible_message("<span class='danger'>[user] starts digging [src]!</span>")
if(do_after(user,digTool.digspeed*hardness) && src)
user << "You finished digging."
visible_message("<span class='danger'>[user] finished digging [src]!</span>")
Dismantle()
else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc?
hardness -= W.force/100
user << "You hit the [name] with your [W.name]!"
hardness -= W.force/10
visible_message("<span class='danger'>[user] hits [src] with [W]!</span>")
if(material == get_material_by_name("resin"))
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD)))
playsound(loc, 'sound/effects/woodcutting.ogg', 100, 1)
else
playsound(src, 'sound/weapons/smash.ogg', 50, 1)
CheckHardness()
else if(istype(W,/obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -142,12 +149,33 @@
attack_hand(user)
return
/obj/structure/simple_door/bullet_act(var/obj/item/projectile/Proj)
hardness -= Proj.force/10
CheckHardness()
/obj/structure/simple_door/take_damage(var/damage)
hardness -= damage/10
CheckHardness()
/obj/structure/simple_door/attack_generic(var/mob/user, var/damage, var/attack_verb)
visible_message("<span class='danger'>[user] [attack_verb] the [src]!</span>")
if(material == get_material_by_name("resin"))
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD)))
playsound(loc, 'sound/effects/woodcutting.ogg', 100, 1)
else
playsound(src, 'sound/weapons/smash.ogg', 50, 1)
user.do_attack_animation(src)
hardness -= damage/10
CheckHardness()
/obj/structure/simple_door/proc/CheckHardness()
if(hardness <= 0)
Dismantle(1)
/obj/structure/simple_door/proc/Dismantle(devastated = 0)
material.place_dismantled_product(get_turf(src))
visible_message("<span class='danger'>The [src] is destroyed!</span>")
qdel(src)
/obj/structure/simple_door/ex_act(severity = 1)
@@ -168,7 +196,7 @@
/obj/structure/simple_door/process()
if(!material.radioactivity)
return
radiation_repository.radiate(src, round(material.radioactivity/3))
SSradiation.radiate(src, round(material.radioactivity/3))
/obj/structure/simple_door/iron/New(var/newloc,var/material_name)
..(newloc, "iron")
+2 -2
View File
@@ -1,7 +1,7 @@
/obj/structure/stasis_cage
name = "stasis cage"
desc = "A high-tech animal cage, designed to keep contained fauna docile and safe."
icon = 'icons/obj/storage.dmi'
icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
icon_state = "critteropen"
density = 1
@@ -64,4 +64,4 @@
usr.visible_message("[usr] has stuffed \the [src] into \the [over_object].", "You have stuffed \the [src] into \the [over_object].")
over_object.contain(src)
else
return ..()
return ..()
@@ -0,0 +1,20 @@
/obj/structure/bed/chair/sofa
name = "sofa"
desc = "A padded, comfy sofa. Great for lazing on."
base_icon = "sofamiddle"
/obj/structure/bed/chair/sofa/left
base_icon = "sofaend_left"
/obj/structure/bed/chair/sofa/right
base_icon = "sofaend_right"
/obj/structure/bed/chair/sofa/corner
base_icon = "sofacorner"
/obj/structure/bed/chair/sofa/corner/update_layer()
if(src.dir == NORTH || src.dir == WEST)
plane = MOB_PLANE
layer = MOB_LAYER + 0.1
else
reset_plane_and_layer()
+6 -3
View File
@@ -20,6 +20,7 @@
var/global/list/unique_gamma = list(
/obj/item/device/perfect_tele,
/obj/item/weapon/bluespace_harpoon,
/obj/item/clothing/glasses/thermal/syndi,
/obj/item/weapon/gun/energy/netgun,
/obj/item/weapon/gun/projectile/pirate,
/obj/item/clothing/accessory/permit/gun,
@@ -131,7 +132,7 @@
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
prob(5);/obj/item/weapon/storage/box,
// prob(5);/obj/random/cigarettes,
prob(4);/obj/item/broken_device,
prob(4);/obj/item/broken_device/random,
prob(4);/obj/item/clothing/head/hardhat,
prob(4);/obj/item/clothing/mask/breath,
prob(4);/obj/item/clothing/shoes/black,
@@ -221,13 +222,13 @@
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(4);/obj/item/weapon/gun/energy/sizegun,
prob(3);/obj/item/weapon/implanter/sizecontrol,
prob(3);/obj/item/weapon/material/butterfly,
prob(3);/obj/item/weapon/material/butterfly/switchblade,
prob(3);/obj/item/clothing/gloves/knuckledusters,
prob(3);/obj/item/weapon/reagent_containers/syringe/drugs,
prob(2);/obj/item/weapon/implanter/sizecontrol,
prob(2);/obj/item/weapon/handcuffs/fuzzy,
// prob(2);/obj/item/weapon/legcuffs,
prob(2);/obj/item/weapon/handcuffs/legcuffs/fuzzy,
prob(2);/obj/item/weapon/storage/box/syndie_kit/spy,
prob(2);/obj/item/weapon/grenade/anti_photon,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
@@ -239,6 +240,8 @@
prob(1);/obj/item/weapon/cell/hyper/empty,
prob(1);/obj/item/weapon/disk/nifsoft/compliance,
prob(1);/obj/item/weapon/material/knife/tacknife,
prob(1);/obj/item/weapon/storage/box/survival/space,
prob(1);/obj/item/weapon/storage/secure/briefcase/trashmoney,
prob(1);/obj/item/weapon/reagent_containers/syringe/steroid)
var/obj/item/I = new path()
+1 -1
View File
@@ -47,7 +47,7 @@
else
to_chat(user, "<span class='notice'>There is a thick layer of silicate covering it.</span>")
/obj/structure/window/proc/take_damage(var/damage = 0, var/sound_effect = 1)
/obj/structure/window/take_damage(var/damage = 0, var/sound_effect = 1)
var/initialhealth = health
if(silicate)