mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-12 15:47:04 +01:00
Merge branch 'master' into sord
This commit is contained in:
@@ -291,7 +291,7 @@
|
||||
The image seems important."
|
||||
listing_name = "Safety - Mech Operation"
|
||||
|
||||
//VOREStation Removal Start TFF 17/12/19 - lore not used in our station's own lore.
|
||||
//VOREStation Removal Start
|
||||
/*
|
||||
/datum/poster/nanotrasen/nt_4
|
||||
icon_state = "ntposter04"
|
||||
|
||||
@@ -87,4 +87,6 @@
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#80F5FF"
|
||||
//VOREStation edit ends
|
||||
//VOREStation edit ends
|
||||
/obj/effect/projectile/impact/pointdefense
|
||||
icon_state = "impact_pointdef"
|
||||
|
||||
@@ -99,4 +99,6 @@
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#80F5FF"
|
||||
//VOREStation edit ends
|
||||
//VOREStation edit ends
|
||||
/obj/effect/projectile/muzzle/pointdefense
|
||||
icon_state = "muzzle_pointdef"
|
||||
|
||||
@@ -129,3 +129,5 @@
|
||||
light_power = 0.5
|
||||
light_color = "#80F5FF"
|
||||
//VOREStation edit ends
|
||||
/obj/effect/projectile/tracer/pointdefense
|
||||
icon_state = "beam_pointdef"
|
||||
|
||||
@@ -294,7 +294,7 @@
|
||||
icon_state = "lamp"
|
||||
force = 10
|
||||
center_of_mass = list("x" = 13,"y" = 11)
|
||||
brightness_on = 10 //TFF 27/11/19 - post refactor fix for intensity levels.
|
||||
brightness_on = 10
|
||||
w_class = ITEMSIZE_LARGE
|
||||
power_use = 0
|
||||
on = 1
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
/obj/item/stack/animalhide
|
||||
name = "hide"
|
||||
desc = "The hide of some creature."
|
||||
description_info = "Use something <b><font color='red'>sharp</font></b>, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning."
|
||||
icon_state = "sheet-hide"
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
amount = 1
|
||||
max_amount = 20
|
||||
stacktype = "hide"
|
||||
no_variants = TRUE
|
||||
|
||||
var/process_type = /obj/item/stack/hairlesshide
|
||||
// This needs to be very clearly documented for players. Whether it should stay in the main description is up for debate.
|
||||
/obj/item/stack/animalhide/examine(var/mob/user)
|
||||
. = ..()
|
||||
. += description_info
|
||||
|
||||
/obj/item/stack/animalhide/human
|
||||
name = "skin"
|
||||
@@ -18,7 +22,6 @@
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
pickup_sound = 'sound/items/pickup/leather.ogg'
|
||||
amount = 1
|
||||
stacktype = "hide-human"
|
||||
|
||||
/obj/item/stack/animalhide/corgi
|
||||
@@ -26,7 +29,6 @@
|
||||
desc = "The by-product of corgi farming."
|
||||
singular_name = "corgi hide piece"
|
||||
icon_state = "sheet-corgi"
|
||||
amount = 1
|
||||
stacktype = "hide-corgi"
|
||||
|
||||
/obj/item/stack/animalhide/cat
|
||||
@@ -34,7 +36,6 @@
|
||||
desc = "The by-product of cat farming."
|
||||
singular_name = "cat hide piece"
|
||||
icon_state = "sheet-cat"
|
||||
amount = 1
|
||||
stacktype = "hide-cat"
|
||||
|
||||
/obj/item/stack/animalhide/monkey
|
||||
@@ -42,7 +43,6 @@
|
||||
desc = "The by-product of monkey farming."
|
||||
singular_name = "monkey hide piece"
|
||||
icon_state = "sheet-monkey"
|
||||
amount = 1
|
||||
stacktype = "hide-monkey"
|
||||
|
||||
/obj/item/stack/animalhide/lizard
|
||||
@@ -50,7 +50,6 @@
|
||||
desc = "Sssssss..."
|
||||
singular_name = "lizard skin piece"
|
||||
icon_state = "sheet-lizard"
|
||||
amount = 1
|
||||
stacktype = "hide-lizard"
|
||||
|
||||
/obj/item/stack/animalhide/xeno
|
||||
@@ -58,7 +57,6 @@
|
||||
desc = "The skin of a terrible creature."
|
||||
singular_name = "alien hide piece"
|
||||
icon_state = "sheet-xeno"
|
||||
amount = 1
|
||||
stacktype = "hide-xeno"
|
||||
|
||||
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
|
||||
@@ -68,7 +66,6 @@
|
||||
singular_name = "alien chitin piece"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
amount = 1
|
||||
stacktype = "hide-chitin"
|
||||
|
||||
/obj/item/xenos_claw
|
||||
@@ -88,19 +85,28 @@
|
||||
if(has_edge(W) || is_sharp(W))
|
||||
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
|
||||
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
|
||||
if(do_after(user,50))
|
||||
to_chat(user, "<span class='notice'>You cut the hair from this [src.singular_name]</span>")
|
||||
var/scraped = 0
|
||||
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
|
||||
//Try locating an exisitng stack on the tile and add to there if possible
|
||||
for(var/obj/item/stack/hairlesshide/HS in user.loc)
|
||||
if(HS.amount < 50 && istype(HS, process_type))
|
||||
HS.amount++
|
||||
src.use(1)
|
||||
return
|
||||
//If it gets to here it means it did not find a suitable stack on the tile.
|
||||
var/obj/item/stack/HS = new process_type(usr.loc)
|
||||
if(istype(HS))
|
||||
HS.amount = 1
|
||||
var/obj/item/stack/hairlesshide/H = null
|
||||
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
|
||||
if(HS.amount < HS.max_amount)
|
||||
H = HS
|
||||
break
|
||||
|
||||
// Either we found a valid stack, in which case increment amount,
|
||||
// Or we need to make a new stack
|
||||
if(istype(H))
|
||||
H.amount++
|
||||
else
|
||||
H = new /obj/item/stack/hairlesshide(user.loc)
|
||||
|
||||
// Increment the amount
|
||||
src.use(1)
|
||||
scraped++
|
||||
|
||||
if(scraped)
|
||||
to_chat(user, SPAN_NOTICE("You scrape the hair off [scraped] hide\s."))
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -110,31 +116,43 @@
|
||||
/obj/item/stack/hairlesshide
|
||||
name = "hairless hide"
|
||||
desc = "This hide was stripped of it's hair, but still needs tanning."
|
||||
description_info = "Get it <b><font color='blue'>wet</font></b> to continue tanning this into leather.<br>\
|
||||
You could set it in a river, wash it with a sink, or just splash water on it with a bucket."
|
||||
singular_name = "hairless hide piece"
|
||||
icon_state = "sheet-hairlesshide"
|
||||
no_variants = FALSE
|
||||
amount = 1
|
||||
max_amount = 20
|
||||
stacktype = "hairlesshide"
|
||||
var/cleaning = FALSE // Can we be water_acted, or are we busy? To prevent accidental hide duplication and the collapse of causality.
|
||||
|
||||
var/wet_type = /obj/item/stack/wetleather
|
||||
/obj/item/stack/hairlesshide/examine(var/mob/user)
|
||||
. = ..()
|
||||
. += description_info
|
||||
|
||||
/obj/item/stack/hairlesshide/water_act(var/wateramount)
|
||||
..()
|
||||
cleaning = TRUE
|
||||
while(amount > 0 && wateramount > 0)
|
||||
use(1)
|
||||
wateramount--
|
||||
new wet_type(get_turf(src))
|
||||
cleaning = FALSE
|
||||
. = ..()
|
||||
wateramount = min(amount, round(wateramount))
|
||||
for(var/i in 1 to wateramount)
|
||||
var/obj/item/stack/wetleather/H = null
|
||||
for(var/obj/item/stack/wetleather/HS in get_turf(src)) // Doesn't have a user, can't just use their loc
|
||||
if(HS.amount < HS.max_amount)
|
||||
H = HS
|
||||
break
|
||||
|
||||
// Either we found a valid stack, in which case increment amount,
|
||||
// Or we need to make a new stack
|
||||
if(istype(H))
|
||||
H.amount++
|
||||
else
|
||||
H = new /obj/item/stack/wetleather(get_turf(src))
|
||||
|
||||
return
|
||||
// Increment the amount
|
||||
src.use(1)
|
||||
|
||||
/obj/item/stack/hairlesshide/proc/rapidcure(var/stacknum = 1)
|
||||
stacknum = min(stacknum, amount)
|
||||
|
||||
while(stacknum)
|
||||
var/obj/item/stack/wetleather/I = new wet_type(get_turf(src))
|
||||
var/obj/item/stack/wetleather/I = new /obj/item/stack/wetleather(get_turf(src))
|
||||
|
||||
if(istype(I))
|
||||
I.dry()
|
||||
@@ -146,16 +164,34 @@
|
||||
/obj/item/stack/wetleather
|
||||
name = "wet leather"
|
||||
desc = "This leather has been cleaned but still needs to be dried."
|
||||
description_info = "To finish tanning the leather, you need to dry it. \
|
||||
You could place it under a <b><font color='red'>fire</font></b>, \
|
||||
put it in a <b><font color='blue'>drying rack</font></b>, \
|
||||
or build a <b><font color='brown'>tanning rack</font></b> from steel or wooden boards."
|
||||
singular_name = "wet leather piece"
|
||||
icon_state = "sheet-wetleather"
|
||||
var/wetness = 30 //Reduced when exposed to high temperautres
|
||||
var/drying_threshold_temperature = 500 //Kelvin to start drying
|
||||
no_variants = FALSE
|
||||
amount = 1
|
||||
max_amount = 20
|
||||
stacktype = "wetleather"
|
||||
|
||||
var/dry_type = /obj/item/stack/material/leather
|
||||
|
||||
/obj/item/stack/wetleather/examine(var/mob/user)
|
||||
. = ..()
|
||||
. += description_info
|
||||
. += "\The [src] is [get_dryness_text()]."
|
||||
|
||||
/obj/item/stack/wetleather/proc/get_dryness_text()
|
||||
if(wetness > 20)
|
||||
return "wet"
|
||||
if(wetness > 10)
|
||||
return "damp"
|
||||
if(wetness)
|
||||
return "almost dry"
|
||||
return "dry"
|
||||
|
||||
/obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
if(exposed_temperature >= drying_threshold_temperature)
|
||||
@@ -164,17 +200,87 @@
|
||||
dry()
|
||||
|
||||
/obj/item/stack/wetleather/proc/dry()
|
||||
//Try locating an exisitng stack on the tile and add to there if possible
|
||||
for(var/obj/item/stack/material/leather/HS in src.loc)
|
||||
if(HS.amount < 50)
|
||||
HS.amount++
|
||||
wetness = initial(wetness)
|
||||
src.use(1)
|
||||
return
|
||||
//If it gets to here it means it did not find a suitable stack on the tile.
|
||||
var/obj/item/stack/HS = new dry_type(src.loc)
|
||||
var/obj/item/stack/material/leather/L = new(src.loc)
|
||||
L.amount = amount
|
||||
use(amount)
|
||||
return L
|
||||
|
||||
if(istype(HS))
|
||||
HS.amount = 1
|
||||
wetness = initial(wetness)
|
||||
src.use(1)
|
||||
/obj/item/stack/wetleather/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
|
||||
. = ..()
|
||||
if(.) // If it transfers any, do a weighted average of the wetness
|
||||
var/obj/item/stack/wetleather/W = S
|
||||
var/oldamt = W.amount - .
|
||||
W.wetness = round(((oldamt * W.wetness) + (. * wetness)) / W.amount)
|
||||
|
||||
|
||||
|
||||
/obj/structure/tanning_rack
|
||||
name = "tanning rack"
|
||||
desc = "A rack used to stretch leather out and hold it taut during the tanning process."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "spike"
|
||||
|
||||
var/obj/item/stack/wetleather/drying = null
|
||||
|
||||
/obj/structure/tanning_rack/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src) // SSObj fires ~every 2s , starting from wetness 30 takes ~1m
|
||||
|
||||
/obj/structure/tanning_rack/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/structure/tanning_rack/process()
|
||||
if(drying && drying.wetness)
|
||||
drying.wetness = max(drying.wetness - 1, 0)
|
||||
if(!drying.wetness)
|
||||
visible_message("The [drying] is dry!")
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tanning_rack/examine(var/mob/user)
|
||||
. = ..()
|
||||
if(drying)
|
||||
. += "\The [drying] is [drying.get_dryness_text()]."
|
||||
|
||||
/obj/structure/tanning_rack/update_icon()
|
||||
overlays.Cut()
|
||||
if(drying)
|
||||
var/image/I
|
||||
if(drying.wetness)
|
||||
I = image(icon, "leather_wet")
|
||||
else
|
||||
I = image(icon, "leather_dry")
|
||||
add_overlay(I)
|
||||
|
||||
/obj/structure/tanning_rack/attackby(var/atom/A, var/mob/user)
|
||||
if(istype(A, /obj/item/stack/wetleather))
|
||||
if(!drying) // If not drying anything, start drying the thing
|
||||
if(user.unEquip(A, target = src))
|
||||
drying = A
|
||||
else // Drying something, add if possible
|
||||
var/obj/item/stack/wetleather/W = A
|
||||
W.transfer_to(drying, W.amount, TRUE)
|
||||
update_icon()
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/structure/tanning_rack/attack_hand(var/mob/user)
|
||||
if(drying)
|
||||
var/obj/item/stack/S = drying
|
||||
if(!drying.wetness) // If it's dry, make a stack of dry leather and prepare to put that in their hands
|
||||
var/obj/item/stack/material/leather/L = new(src)
|
||||
L.amount = drying.amount
|
||||
drying.use(drying.amount)
|
||||
S = L
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!H.put_in_any_hand_if_possible(S))
|
||||
S.forceMove(get_turf(src))
|
||||
else
|
||||
S.forceMove(get_turf(src))
|
||||
drying = null
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tanning_rack/attack_robot(var/mob/user)
|
||||
attack_hand(user) // That has checks to
|
||||
@@ -949,7 +949,7 @@
|
||||
/obj/item/toy/plushie/mouse
|
||||
name = "mouse plush"
|
||||
desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend."
|
||||
icon_state = "mouseplushie" //TFF 12/11/19 - updated icon to show a sprite that doesn't replicate a dead mouse. Heck you for that! >:C
|
||||
icon_state = "mouseplushie"
|
||||
pokephrase = "Squeak!"
|
||||
|
||||
/obj/item/toy/plushie/kitten
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
name = T_BOARD("point defense battery")
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
desc = "Control systems for a Kuiper pattern point defense battery. Aim away from vessel."
|
||||
build_path = /obj/machinery/power/pointdefense
|
||||
origin_tech = list(TECH_ENGINEERING = 3, TECH_COMBAT = 2, TECH_POWER = 2)
|
||||
build_path = /obj/machinery/pointdefense
|
||||
origin_tech = list(TECH_ENGINEERING = 3, TECH_COMBAT = 2)
|
||||
req_components = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
|
||||
@@ -7,4 +7,147 @@
|
||||
|
||||
/obj/random/empty_or_lootable_crate/item_to_spawn()
|
||||
return pick(/obj/random/crate,
|
||||
/obj/random/multiple/corp_crate)
|
||||
/obj/random/multiple/corp_crate)
|
||||
|
||||
/obj/random/forgotten_tram
|
||||
name = "random forgotten tram item"
|
||||
desc = "Spawns a random item that someone might accidentally leave on a tram. Sometimes spawns nothing."
|
||||
spawn_nothing_percentage = 30
|
||||
|
||||
/obj/random/forgotten_tram/item_to_spawn()
|
||||
return pick(prob(2);/obj/item/device/flashlight,
|
||||
prob(2);/obj/item/device/flashlight/glowstick,
|
||||
prob(2);/obj/item/device/flashlight/glowstick/blue,
|
||||
prob(1);/obj/item/device/flashlight/glowstick/orange,
|
||||
prob(1);/obj/item/device/flashlight/glowstick/red,
|
||||
prob(1);/obj/item/device/flashlight/glowstick/yellow,
|
||||
prob(1);/obj/item/device/flashlight/pen,
|
||||
prob(2);/obj/item/device/flashlight/maglight,
|
||||
prob(5);/obj/random/cigarettes,
|
||||
prob(5);/obj/random/soap,
|
||||
prob(5);/obj/random/drinksoft,
|
||||
prob(5);/obj/random/snack,
|
||||
prob(5);/obj/random/plushie,
|
||||
prob(2);/obj/item/weapon/storage/secure/briefcase,
|
||||
prob(4);/obj/item/weapon/storage/briefcase,
|
||||
prob(5);/obj/item/weapon/storage/backpack,
|
||||
prob(5);/obj/item/weapon/storage/backpack/medic,
|
||||
prob(5);/obj/item/weapon/storage/backpack/industrial,
|
||||
prob(5);/obj/item/weapon/storage/backpack/toxins,
|
||||
prob(3);/obj/item/weapon/storage/backpack/dufflebag,
|
||||
prob(3);/obj/item/weapon/storage/backpack/dufflebag/med,
|
||||
prob(3);/obj/item/weapon/storage/backpack/dufflebag/eng,
|
||||
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie,
|
||||
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie/med,
|
||||
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,
|
||||
prob(4);/obj/item/weapon/storage/backpack/satchel,
|
||||
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
|
||||
prob(5);/obj/item/weapon/storage/backpack/satchel/med,
|
||||
prob(5);/obj/item/weapon/storage/backpack/satchel/eng,
|
||||
prob(5);/obj/item/weapon/storage/backpack/satchel/tox,
|
||||
prob(5);/obj/item/weapon/storage/backpack/messenger/med,
|
||||
prob(5);/obj/item/weapon/storage/backpack/messenger/engi,
|
||||
prob(5);/obj/item/weapon/storage/backpack/messenger/tox,
|
||||
prob(3);/obj/item/weapon/storage/wallet,
|
||||
prob(1);/obj/item/clothing/gloves/black,
|
||||
prob(1);/obj/item/clothing/gloves/blue,
|
||||
prob(1);/obj/item/clothing/gloves/brown,
|
||||
prob(1);/obj/item/clothing/gloves/duty,
|
||||
prob(1);/obj/item/clothing/gloves/fingerless,
|
||||
prob(1);/obj/item/clothing/gloves/green,
|
||||
prob(1);/obj/item/clothing/gloves/grey,
|
||||
prob(1);/obj/item/clothing/gloves/orange,
|
||||
prob(1);/obj/item/clothing/gloves/yellow,
|
||||
prob(3);/obj/item/clothing/gloves/botanic_leather,
|
||||
prob(2);/obj/item/clothing/gloves/sterile/latex,
|
||||
prob(5);/obj/item/clothing/gloves/white,
|
||||
prob(5);/obj/item/clothing/gloves/rainbow,
|
||||
prob(2);/obj/item/clothing/gloves/fyellow,
|
||||
prob(1);/obj/item/clothing/glasses/rimless,
|
||||
prob(1);/obj/item/clothing/glasses/thin,
|
||||
prob(1);/obj/item/clothing/glasses/regular,
|
||||
prob(1);/obj/item/clothing/glasses/regular/rimless,
|
||||
prob(1);/obj/item/clothing/glasses/regular/thin,
|
||||
prob(1);/obj/item/clothing/glasses/fakesunglasses,
|
||||
prob(1);/obj/item/clothing/glasses/fakesunglasses/aviator,
|
||||
prob(1);/obj/item/clothing/glasses/omnihud,
|
||||
prob(4);/obj/item/clothing/head/hardhat,
|
||||
prob(3);/obj/item/clothing/head/hardhat/red,
|
||||
prob(2);/obj/item/clothing/head/hardhat/dblue,
|
||||
prob(2);/obj/item/clothing/head/hardhat/orange,
|
||||
prob(4);/obj/item/clothing/head/soft/,
|
||||
prob(4);/obj/item/clothing/head/soft/black,
|
||||
prob(4);/obj/item/clothing/head/soft/blue,
|
||||
prob(4);/obj/item/clothing/head/soft/green,
|
||||
prob(4);/obj/item/clothing/head/soft/grey,
|
||||
prob(4);/obj/item/clothing/head/soft/med,
|
||||
prob(4);/obj/item/clothing/head/soft/nanotrasen,
|
||||
prob(4);/obj/item/clothing/head/soft/red,
|
||||
prob(4);/obj/item/clothing/head/soft/orange,
|
||||
prob(4);/obj/item/clothing/head/soft/sec,
|
||||
prob(4);/obj/item/clothing/head/soft/sec/corp,
|
||||
prob(3);/obj/item/clothing/head/soft/yellow,
|
||||
prob(1);/obj/item/clothing/head/ushanka,
|
||||
prob(3);/obj/item/clothing/head/beret,
|
||||
prob(3);/obj/item/clothing/head/beret/engineering,
|
||||
prob(1);/obj/item/clothing/head/beret/purple,
|
||||
prob(3);/obj/item/clothing/head/beret/sec,
|
||||
prob(3);/obj/item/clothing/head/beret/sec/corporate/officer,
|
||||
prob(3);/obj/item/clothing/head/beret/sec/navy/officer,
|
||||
prob(3);/obj/item/clothing/head/soft/yellow,
|
||||
prob(2);/obj/item/clothing/head/orangebandana,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/bomber,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/black,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/blue,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/red,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/yellow,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/brown_jacket,
|
||||
prob(3);/obj/item/clothing/suit/storage/toggle/leather_jacket,
|
||||
prob(4);/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
prob(4);/obj/item/clothing/suit/storage/toggle/labcoat/science,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/alt,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/black,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/green,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/grey,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/navy,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/tan,
|
||||
prob(4);/obj/item/clothing/suit/storage/miljacket/white,
|
||||
prob(4);/obj/item/clothing/suit/storage/trench,
|
||||
prob(3);/obj/item/clothing/suit/varsity,
|
||||
prob(3);/obj/item/clothing/suit/varsity/blue,
|
||||
prob(3);/obj/item/clothing/suit/varsity/brown,
|
||||
prob(3);/obj/item/clothing/suit/varsity/green,
|
||||
prob(3);/obj/item/clothing/suit/varsity/purple,
|
||||
prob(3);/obj/item/clothing/suit/varsity/red,
|
||||
prob(3);/obj/item/clothing/accessory/poncho,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/blue,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/green,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/purple,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/red,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cargo,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/engineering,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/medical,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/science,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/security,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/atmos,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/cargo,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/engineer,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/medical,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/mining,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/research,
|
||||
prob(3);/obj/item/clothing/accessory/poncho/roles/cloak/security,
|
||||
prob(2);/obj/item/clothing/accessory/stethoscope,
|
||||
prob(2);/obj/item/device/camera,
|
||||
prob(3);/obj/item/device/pda,
|
||||
prob(3);/obj/item/device/radio/headset,
|
||||
prob(2);/obj/item/toy/tennis,
|
||||
prob(2);/obj/item/toy/tennis/red,
|
||||
prob(2);/obj/item/toy/tennis/yellow,
|
||||
prob(2);/obj/item/toy/tennis/green,
|
||||
prob(2);/obj/item/toy/tennis/cyan,
|
||||
prob(2);/obj/item/toy/tennis/blue,
|
||||
prob(2);/obj/item/toy/tennis/purple,
|
||||
prob(2);/obj/item/clothing/ears/earmuffs,
|
||||
prob(2);/obj/item/clothing/ears/earmuffs/headphones
|
||||
)
|
||||
@@ -195,27 +195,45 @@ two tiles on initialization, and which way a cliff is facing may change during m
|
||||
displaced = TRUE
|
||||
|
||||
if(istype(T))
|
||||
visible_message(span("danger", "\The [L] falls off \the [src]!"))
|
||||
|
||||
var/safe_fall = FALSE
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
safe_fall = H.species.handle_falling(H, T, silent = TRUE, planetary = FALSE)
|
||||
|
||||
if(safe_fall)
|
||||
visible_message(span("notice", "\The [L] glides down from \the [src]."))
|
||||
else
|
||||
visible_message(span("danger", "\The [L] falls off \the [src]!"))
|
||||
L.forceMove(T)
|
||||
|
||||
// Do the actual hurting. Double cliffs do halved damage due to them most likely hitting twice.
|
||||
var/harm = !is_double_cliff ? 1 : 0.5
|
||||
if(istype(L.buckled, /obj/vehicle)) // People falling off in vehicles will take less damage, but will damage the vehicle severely.
|
||||
var/obj/vehicle/vehicle = L.buckled
|
||||
vehicle.adjust_health(40 * harm)
|
||||
to_chat(L, span("warning", "\The [vehicle] absorbs some of the impact, damaging it."))
|
||||
harm /= 2
|
||||
if(!safe_fall)
|
||||
// Do the actual hurting. Double cliffs do halved damage due to them most likely hitting twice.
|
||||
if(istype(L.buckled, /obj/vehicle)) // People falling off in vehicles will take less damage, but will damage the vehicle severely.
|
||||
var/obj/vehicle/vehicle = L.buckled
|
||||
vehicle.adjust_health(40 * harm)
|
||||
to_chat(L, span("warning", "\The [vehicle] absorbs some of the impact, damaging it."))
|
||||
harm /= 2
|
||||
|
||||
playsound(L, 'sound/effects/break_stone.ogg', 70, 1)
|
||||
L.Weaken(5 * harm)
|
||||
|
||||
playsound(L, 'sound/effects/break_stone.ogg', 70, 1)
|
||||
L.Weaken(5 * harm)
|
||||
var/fall_time = 3
|
||||
if(displaced) // Make the fall look more natural when falling sideways.
|
||||
L.pixel_z = 32 * 2
|
||||
animate(L, pixel_z = 0, time = fall_time)
|
||||
sleep(fall_time) // A brief delay inbetween the two sounds helps sell the 'ouch' effect.
|
||||
|
||||
if(safe_fall)
|
||||
visible_message(span("notice", "\The [L] lands on \the [T]."))
|
||||
playsound(L, "rustle", 25, 1)
|
||||
return
|
||||
|
||||
playsound(L, "punch", 70, 1)
|
||||
shake_camera(L, 1, 1)
|
||||
visible_message(span("danger", "\The [L] hits the ground!"))
|
||||
|
||||
visible_message(span("danger", "\The [L] hits \the [T]!"))
|
||||
|
||||
// The bigger they are, the harder they fall.
|
||||
// They will take at least 20 damage at the minimum, and tries to scale up to 40% of their max health.
|
||||
|
||||
@@ -34,4 +34,8 @@
|
||||
/obj/structure/window/plastitanium/full
|
||||
icon_state = "window-full"
|
||||
maxhealth = 250
|
||||
fulltile = TRUE
|
||||
fulltile = TRUE
|
||||
|
||||
/obj/structure/window/reinforced/tinted/full
|
||||
icon_state = "window-full"
|
||||
fulltile = TRUE
|
||||
|
||||
Reference in New Issue
Block a user