mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync
This commit is contained in:
@@ -153,6 +153,15 @@
|
||||
var/obj/new_object = new replace_path(object.loc)
|
||||
new_object.setDir(object.dir)
|
||||
if(istype(object, /obj/machinery/door/airlock))
|
||||
if(istype(new_object, /obj/machinery/door/airlock)) //carry over access-related and adjacent variables. The rest is not as important
|
||||
var/obj/machinery/door/airlock/airlock = object
|
||||
var/obj/machinery/door/new_airlock = new_object
|
||||
new_airlock.unres_sides = airlock.unres_sides
|
||||
new_airlock.req_access = airlock.req_access.Copy()
|
||||
new_airlock.req_one_access = airlock.req_one_access.Copy()
|
||||
new_airlock.locked = airlock.locked
|
||||
new_airlock.emergency = airlock.emergency
|
||||
new_airlock.update_appearance()
|
||||
new_object.name = object.name
|
||||
qdel(object)
|
||||
|
||||
|
||||
@@ -852,6 +852,9 @@
|
||||
if(splatter_strength <= 0)
|
||||
break
|
||||
iter_atom.add_blood_DNA(GET_ATOM_BLOOD_DNA(src))
|
||||
if(isliving(iter_atom))
|
||||
var/mob/living/splatted = iter_atom
|
||||
splatted.add_mood_event("splattered_with_blood", /datum/mood_event/splattered_with_blood)
|
||||
|
||||
splatter_strength--
|
||||
// we used all our blood so go away
|
||||
|
||||
@@ -9,8 +9,10 @@
|
||||
var/do_icon_rotate = TRUE
|
||||
var/rotation = 0
|
||||
var/paint_colour = COLOR_WHITE
|
||||
///Used by `create_outline` to determine how strong (how wide) the outline itself will be.
|
||||
var/color_strength
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/Initialize(mapload, main, type, e_name, graf_rot, alt_icon = null, desc_override = null)
|
||||
/obj/effect/decal/cleanable/crayon/Initialize(mapload, main, type, e_name, graf_rot, alt_icon = null, desc_override = null, color_strength)
|
||||
. = ..()
|
||||
if(isclosedturf(loc) && loc.density)
|
||||
// allows for wall graffiti to be seen
|
||||
@@ -34,6 +36,7 @@
|
||||
src.transform = M
|
||||
if(main)
|
||||
paint_colour = main
|
||||
src.color_strength = color_strength
|
||||
add_atom_colour(paint_colour, FIXED_COLOUR_PRIORITY)
|
||||
RegisterSignal(src, COMSIG_OBJ_PAINTED, PROC_REF(on_painted))
|
||||
|
||||
@@ -48,6 +51,36 @@
|
||||
spraycan.use_charges(user, cost, requires_full = FALSE)
|
||||
return DONT_USE_SPRAYCAN_CHARGES
|
||||
|
||||
/**
|
||||
* Using a given atom, gives this decal an outline of said atom, then masks the contents,
|
||||
* leaving us with solely the outline.
|
||||
* This also deletes the previous icon, so the decal turns into JUST an outline.
|
||||
* Args:
|
||||
* outlined_atom: Anything you wish to draw an outline of.
|
||||
* add_mouse_opacity: Boolean on whether you want mouse opacity, which allows the outline to be clickable/examinable without the context menu.
|
||||
*/
|
||||
/obj/effect/decal/cleanable/crayon/proc/create_outline(atom/outlined_atom, add_mouse_opacity = FALSE)
|
||||
icon = null
|
||||
icon_state = null
|
||||
if(add_mouse_opacity)
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
|
||||
if(ishuman(outlined_atom))
|
||||
//humans are special, we want to exclude things like wounds so the outline isn't animated.
|
||||
var/mob/living/carbon/human/human_outline = outlined_atom
|
||||
add_overlay(human_outline.get_overlays_copy(list(WOUND_LAYER, HALO_LAYER)))
|
||||
else
|
||||
icon = outlined_atom.icon
|
||||
icon_state = outlined_atom.icon_state
|
||||
copy_overlays(outlined_atom)
|
||||
transform = outlined_atom.transform
|
||||
dir = outlined_atom.dir
|
||||
add_filter("batong_outline", 1, outline_filter(color_strength, paint_colour))
|
||||
add_filter("alpha_mask", 2, alpha_mask_filter(
|
||||
icon = getFlatIcon(outlined_atom.appearance, defdir = outlined_atom.dir, no_anim = TRUE),
|
||||
flags = MASK_INVERSE,
|
||||
))
|
||||
|
||||
///Common crayon decals in map.
|
||||
/obj/effect/decal/cleanable/crayon/rune4
|
||||
icon_state = "rune4"
|
||||
|
||||
@@ -574,15 +574,13 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
|
||||
icon_state = "hangover_spawn_closet"
|
||||
|
||||
/obj/effect/landmark/start/hangover/closet/JoinPlayerHere(mob/joining_mob, buckle)
|
||||
. = ..()
|
||||
for(var/obj/structure/closet/closet in get_turf(src))
|
||||
if(closet.opened)
|
||||
continue
|
||||
joining_mob.forceMove(closet)
|
||||
make_hungover(joining_mob)
|
||||
return
|
||||
|
||||
return ..() //Call parent as fallback
|
||||
|
||||
//Landmark that creates destinations for the navigate verb to path to
|
||||
/obj/effect/landmark/navigate_destination
|
||||
name = "navigate verb destination"
|
||||
|
||||
@@ -105,8 +105,6 @@
|
||||
/datum/mood_event/poster_mood
|
||||
description = "That poster is really motivating me!"
|
||||
mood_change = 2
|
||||
category = POSTER_MOOD_CAT
|
||||
|
||||
|
||||
// random posters
|
||||
|
||||
@@ -244,7 +242,7 @@
|
||||
When members of the security department read this poster they'll feel better!"
|
||||
icon_state = "security_logo"
|
||||
|
||||
/obj/item/poster/quirk/secuirty_logo
|
||||
/obj/item/poster/quirk/security_logo
|
||||
poster_type = /obj/structure/sign/poster/quirk/security_slogan
|
||||
quirk_poster_department = ACCOUNT_SEC
|
||||
|
||||
|
||||
@@ -118,8 +118,118 @@
|
||||
/obj/effect/spawner/random/engineering/vending_restock
|
||||
name = "vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot_subtype_path = /obj/item/vending_refill
|
||||
loot = list()
|
||||
loot = list(
|
||||
/obj/effect/spawner/random/engineering/vending_restock/common = 935,
|
||||
/obj/effect/spawner/random/engineering/vending_restock/rare = 60,
|
||||
/obj/effect/spawner/random/engineering/vending_restock/oddity = 5,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/engineering/vending_restock/wardrobe
|
||||
name = "wardrobe vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
/obj/item/vending_refill/wardrobe/det_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/medi_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/chem_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/viro_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/sec_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/science_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/robo_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/gene_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/engi_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/atmos_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/cargo_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/hydro_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/chap_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/chef_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/chap_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/curator_wardrobe= 1,
|
||||
/obj/item/vending_refill/wardrobe/jani_wardrobe = 1,
|
||||
/obj/item/vending_refill/wardrobe/law_wardrobe = 1,
|
||||
|
||||
)
|
||||
|
||||
|
||||
/obj/effect/spawner/random/engineering/vending_restock/food_and_drink
|
||||
name = "food & drink vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
/obj/item/vending_refill/cigarette = 1,
|
||||
/obj/item/vending_refill/cola = 1,
|
||||
/obj/item/vending_refill/coffee = 1,
|
||||
/obj/item/vending_refill/snack = 1,
|
||||
/obj/item/vending_refill/boozeomat = 1,
|
||||
/obj/item/vending_refill/sustenance = 1,
|
||||
/obj/item/vending_refill/sovietsoda = 1,
|
||||
/obj/item/vending_refill/cola/shamblers = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/engineering/vending_restock/medical
|
||||
name = "medical vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
/obj/item/vending_refill/wallmed = 1,
|
||||
/obj/item/vending_refill/medical = 1,
|
||||
/obj/item/vending_refill/drugs = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/engineering/vending_restock/engineering
|
||||
name = "engineering vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
/obj/item/vending_refill/engivend = 1,
|
||||
/obj/item/vending_refill/engineering = 1,
|
||||
/obj/item/vending_refill/youtool = 1,
|
||||
/obj/item/vending_refill/modularpc = 1,
|
||||
/obj/item/vending_refill/robotics = 1,
|
||||
/obj/item/vending_refill/assist = 1,
|
||||
)
|
||||
|
||||
//common everyday vendors
|
||||
/obj/effect/spawner/random/engineering/vending_restock/common
|
||||
name = "common vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
/obj/effect/spawner/random/engineering/vending_restock/wardrobe = 8, //roughtly reduced to half weight due to lameness of drobe contents
|
||||
/obj/effect/spawner/random/engineering/vending_restock/food_and_drink = 8,
|
||||
/obj/effect/spawner/random/engineering/vending_restock/engineering = 6,
|
||||
/obj/effect/spawner/random/engineering/vending_restock/medical = 3,
|
||||
/obj/item/vending_refill/cart = 1,
|
||||
/obj/item/vending_refill/clothing = 1,
|
||||
/obj/item/vending_refill/autodrobe = 1,
|
||||
/obj/item/vending_refill/security = 1,
|
||||
/obj/item/vending_refill/custom = 1,
|
||||
/obj/item/vending_refill/dinnerware = 1,
|
||||
/obj/item/vending_refill/cytopro = 1,
|
||||
/obj/item/vending_refill/hydronutrients = 1,
|
||||
/obj/item/vending_refill/hydroseeds = 1,
|
||||
/obj/item/vending_refill/games = 1,
|
||||
)
|
||||
|
||||
//vendors that should feel rare and special but are unlikely to warp the shift too much
|
||||
/obj/effect/spawner/random/engineering/vending_restock/rare
|
||||
name = "rare vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
/obj/item/vending_refill/syndichem = 1,
|
||||
/obj/item/vending_refill/cigarette/syndicate = 1,
|
||||
/obj/item/vending_refill/plasmaresearch = 1,
|
||||
/obj/item/vending_refill/donksnackvendor = 1,
|
||||
/obj/item/vending_refill/donksoft = 1,
|
||||
/obj/item/vending_refill/hotdog = 1,
|
||||
)
|
||||
|
||||
//high chance to derail the shift, use cautiously
|
||||
/obj/effect/spawner/random/engineering/vending_restock/oddity
|
||||
name = "oddity vending restock spawner"
|
||||
icon_state = "vending_restock"
|
||||
loot = list(
|
||||
|
||||
/obj/item/vending_refill/magivend = 1,
|
||||
/obj/item/vending_refill/liberation = 1,
|
||||
/obj/item/vending_refill/wardrobe/cent_wardrobe = 1,
|
||||
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/engineering/atmospherics_portable
|
||||
name = "portable atmospherics machine spawner"
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
/// For spawning loot from necropolis chests or other sources, this randomly chooses one of the following entries to spawn.
|
||||
/obj/effect/spawner/random/mining_loot
|
||||
name = "random mining loot"
|
||||
desc = "Spawns one random mining loot."
|
||||
icon = 'icons/obj/storage/crates.dmi'
|
||||
icon_state = "necrocrate"
|
||||
loot = list(
|
||||
/obj/item/shared_storage/red = 1,
|
||||
/obj/item/soulstone/anybody/mining = 1,
|
||||
/obj/item/clothing/glasses/godeye = 1,
|
||||
/obj/item/reagent_containers/cup/bottle/potion/flight = 1,
|
||||
/obj/item/clothing/gloves/gauntlets = 1,
|
||||
/obj/effect/spawner/random/mining_loot/pka_mod = 1,
|
||||
/obj/item/rod_of_asclepius = 1,
|
||||
/obj/item/organ/heart/cursed/wizard = 1,
|
||||
/obj/item/ship_in_a_bottle = 1,
|
||||
/obj/item/clothing/suit/hooded/berserker = 1,
|
||||
/obj/item/jacobs_ladder = 1,
|
||||
/obj/item/guardian_creator/miner = 1,
|
||||
/obj/item/warp_cube/red = 1,
|
||||
/obj/item/wisp_lantern = 1,
|
||||
/obj/item/immortality_talisman = 1,
|
||||
/obj/item/book/granter/action/spell/summonitem = 1,
|
||||
/obj/item/book_of_babel = 1,
|
||||
/obj/item/clothing/neck/necklace/memento_mori = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/mining_loot/demonic
|
||||
name = "random demonic mining loot"
|
||||
desc = "Spawns one random mining loot from the demonic list."
|
||||
icon = 'icons/obj/storage/crates.dmi'
|
||||
icon_state = "necrocrate"
|
||||
loot = list(
|
||||
/obj/item/shared_storage/red = 1,
|
||||
/obj/item/clothing/neck/cloak/wolf_coat = 1,
|
||||
/obj/item/soulstone/anybody/mining = 1,
|
||||
/obj/item/clothing/glasses/godeye = 1,
|
||||
/obj/item/reagent_containers/cup/bottle/potion/flight = 1,
|
||||
/obj/item/clothing/gloves/gauntlets = 1,
|
||||
/obj/effect/spawner/random/mining_loot/pka_mod = 1,
|
||||
/obj/item/rod_of_asclepius = 1,
|
||||
/obj/item/organ/heart/cursed/wizard = 1,
|
||||
/obj/item/jacobs_ladder = 1,
|
||||
/obj/item/guardian_creator/miner = 1,
|
||||
/obj/item/weldingtool/abductor = 1,
|
||||
/obj/item/warp_cube/red = 1,
|
||||
/obj/item/immortality_talisman = 1,
|
||||
/obj/item/book/granter/action/spell/summonitem = 1,
|
||||
/obj/item/clothing/neck/necklace/memento_mori = 1,
|
||||
/obj/item/book/granter/action/spell/sacredflame = 1,
|
||||
)
|
||||
|
||||
/// For spawning a rare PKA modkit
|
||||
/obj/effect/spawner/random/mining_loot/pka_mod
|
||||
name = "random rare PKA modkits"
|
||||
desc = "Spawns one random rare PKA modkits."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "modkit"
|
||||
loot = list(
|
||||
/obj/item/borg/upgrade/modkit/aoe/mobs/andturfs = 1,
|
||||
/obj/item/borg/upgrade/modkit/cooldown/repeater = 1,
|
||||
/obj/item/borg/upgrade/modkit/resonator_blasts = 1,
|
||||
/obj/item/borg/upgrade/modkit/bounty = 1,
|
||||
/obj/item/borg/upgrade/modkit/lifesteal = 1,
|
||||
)
|
||||
Reference in New Issue
Block a user