mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 04:57:47 +01:00
Merge branch 'master' of https://github.com/VOREStation/VOREStation into making-of-shadekin
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)]"
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user