Merge branch 'master' into protRig

This commit is contained in:
Kashargul
2024-11-27 23:58:52 +01:00
committed by GitHub
281 changed files with 3627 additions and 3318 deletions
@@ -34,3 +34,5 @@
/obj/effect/decal/cleanable/chemcoating/update_icon()
..()
color = reagents.get_color()
cut_overlays()
add_janitor_hud_overlay()
@@ -13,6 +13,8 @@
/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon()
color = "#FFFFFF"
cut_overlays()
add_janitor_hud_overlay()
/obj/effect/decal/cleanable/blood/gibs/xeno/up
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1")
@@ -30,4 +32,4 @@
random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3")
/obj/effect/decal/cleanable/blood/xtracks
basecolor = "#05EE05"
basecolor = "#05EE05"
@@ -70,6 +70,8 @@ var/global/list/image/splatter_cache=list()
else
name = initial(name)
desc = initial(desc)
cut_overlays()
add_janitor_hud_overlay()
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
if(perp.is_incorporeal())
@@ -210,6 +212,7 @@ var/global/list/image/splatter_cache=list()
icon = blood
cut_overlays()
add_overlay(giblets)
add_janitor_hud_overlay()
/obj/effect/decal/cleanable/blood/gibs/up
random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibup1","gibup1","gibup1")
@@ -10,6 +10,8 @@
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
color = "#FFFFFF"
cut_overlays()
add_janitor_hud_overlay()
/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like
return
@@ -49,4 +51,4 @@
/obj/effect/decal/cleanable/blood/oil/streak
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
amount = 2
amount = 2
@@ -142,6 +142,7 @@ var/global/list/image/fluidtrack_cache=list()
stack[stack_idx]=track
add_overlay(I)
updatedtracks=0 // Clear our memory of updated tracks.
add_janitor_hud_overlay()
/obj/effect/decal/cleanable/blood/tracks/footprints
name = "wet footprints"
+22 -12
View File
@@ -12,7 +12,6 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
var/generic_filth = FALSE
var/age = 0
var/list/random_icon_states = list()
var/obj/effect/decal/jan_hud/jan_icon = null
/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age)
if(!isnull(_age))
@@ -21,12 +20,11 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
src.icon_state = pick(src.random_icon_states)
if(!mapload || !CONFIG_GET(flag/persistence_ignore_mapload))
SSpersistence.track_value(src, /datum/persistent/filth)
jan_icon = new/obj/effect/decal/jan_hud(src.loc)
. = ..()
update_icon()
/obj/effect/decal/cleanable/Destroy()
SSpersistence.forget_value(src, /datum/persistent/filth)
QDEL_NULL(jan_icon)
. = ..()
/obj/effect/decal/cleanable/clean_blood(var/ignore = 0)
@@ -40,13 +38,25 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
src.icon_state = pick(src.random_icon_states)
..()
/obj/effect/decal/jan_hud
plane = PLANE_JANHUD
layer = BELOW_MOB_LAYER
vis_flags = VIS_HIDE
persist_storable = FALSE
icon = 'icons/mob/hud.dmi'
mouse_opacity = 0
/obj/effect/decal/jan_hud/Initialize()
src.icon_state = "janhud[rand(1,9)]"
/obj/effect/decal/cleanable/update_icon()
// Overrides should not inheret from this, and instead replace it entirely to match this in some form.
// add_janitor_hud_overlay() does not pre-cut overlays, so cut_overlays() must be called first.
// This is so it may be used with update_icon() overrides that use overlays, while adding the janitor overlay at the end.
cut_overlays()
add_janitor_hud_overlay()
/obj/effect/decal/cleanable/proc/add_janitor_hud_overlay()
// This was original a seperate object that followed the grime, it got stuck in everything you can imagine!
// It also likely doubled the memory use of every cleanable decal on station...
var/image/hud = image('icons/mob/hud.dmi', src, "janhud[rand(1,9)]")
hud.appearance_flags = (RESET_COLOR|PIXEL_SCALE|KEEP_APART)
hud.plane = PLANE_JANHUD
hud.layer = BELOW_MOB_LAYER
hud.mouse_opacity = 0
//HUD VARIANT: Allows the hud to show up with it's normal alpha, even if the 'dirty thing' it's attached to has a low alpha (ex: dirt). If you want to disable it, simply comment out the lines between the 'HUD VARIANT' tag!
hud.appearance_flags = RESET_ALPHA
hud.alpha = 255
//HUD VARIANT end
add_overlay(hud)
+23 -10
View File
@@ -6,26 +6,39 @@
layer = DIRTY_LAYER
anchored = TRUE
/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
..()
loc = location
var/art_type
var/art_color
var/art_shade
/obj/effect/decal/cleanable/crayon/Initialize(var/ml, main = "#FFFFFF",shade = "#000000",var/type = "rune", new_age = 0)
name = type
desc = "A [type] drawn in crayon."
// Persistence vars. Unused here but used downstream. If someone updates the persistance code, it's here.
art_type = type
art_color = main
art_shade = shade
switch(type)
if("rune")
type = "rune[rand(1,6)]"
if("graffiti")
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
. = ..(ml, new_age) // mapload, age
mainOverlay.Blend(main,ICON_ADD)
shadeOverlay.Blend(shade,ICON_ADD)
/obj/effect/decal/cleanable/crayon/update_icon()
cut_overlays()
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]",2.1)
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]s",2.1)
add_overlay(mainOverlay)
add_overlay(shadeOverlay)
if(mainOverlay && shadeOverlay)
mainOverlay.Blend(art_color,ICON_ADD)
shadeOverlay.Blend(art_shade,ICON_ADD)
add_hiddenprint(usr)
add_overlay(mainOverlay)
add_overlay(shadeOverlay)
add_janitor_hud_overlay()
return
// CHOMPEdit End
+2 -2
View File
@@ -13,8 +13,8 @@
// Special case to prevent us from being part of a zone during the first air master tick.
// We must merge ourselves into a zone on next tick. This will cause a bit of lag on
// startup, but it can't really be helped you know?
if(air_master && air_master.current_cycle == 0)
if(SSair && SSair.current_cycle == 0)
spawn(1)
air_master.mark_for_update(get_turf(src))
SSair.mark_for_update(get_turf(src))
return FALSE
return is_zone ? FALSE : TRUE // Anything except zones can pass
@@ -118,7 +118,6 @@
to speak with your team, and learn what their plan is for today."))
R.key = C.key
// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed.
spawn(1)
mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE)
+2 -2
View File
@@ -251,9 +251,9 @@
if (!isturf(NT) || (NT in found) || (NT in pending))
continue
// We ask ZAS to determine if its airtight. Thats what matters anyway right?
if(air_master.air_blocked(T, NT))
if(SSair.air_blocked(T, NT))
// Okay thats the edge of the room
if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT))
if(get_area_type(NT.loc) == AREA_SPACE && SSair.air_blocked(NT, NT))
found += NT // So we include walls/doors not already in any area
continue
if (istype(NT, /turf/space))
+4 -4
View File
@@ -678,9 +678,9 @@
if(!visual && forbiddenAreas[NT.loc.type])
return ROOM_ERR_FORBIDDEN
// We ask ZAS to determine if its airtight. Thats what matters anyway right?
if(air_master.air_blocked(T, NT))
if(SSair.air_blocked(T, NT))
// Okay thats the edge of the room
if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT))
if(get_area_type(NT.loc) == AREA_SPACE && SSair.air_blocked(NT, NT))
found += NT // So we include walls/doors not already in any area
continue
if (istype(NT, /turf/space))
@@ -835,9 +835,9 @@
if(!get_new_area_type(NT.loc) == 1) //The contains somewhere that is NOT a buildable area.
return 3 //NOT A BUILDABLE AREA
if(air_master.air_blocked(T, NT)) //Is the room airtight?
if(SSair.air_blocked(T, NT)) //Is the room airtight?
// Okay thats the edge of the room
if(get_new_area_type(NT.loc) == 1 && air_master.air_blocked(NT, NT))
if(get_new_area_type(NT.loc) == 1 && SSair.air_blocked(NT, NT))
found += NT // So we include walls/doors not already in any area
continue
if (istype(NT, /turf/space))
@@ -102,7 +102,7 @@
if(D.visibility_flags & HIDDEN_SCANNER)
continue
else
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacilin. Limit exposure to other personnel.<br>"
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacillin. Limit exposure to other personnel.<br>"
if(robotparts)
dat += span_bold("Robotic body parts") + " - Should not be repaired by medical personnel, refer to robotics if damaged."
@@ -225,7 +225,6 @@
feedback_inc("cyborg_birth",1)
callHook("borgify", list(O))
O.namepick()
qdel(src)
else
-29
View File
@@ -556,35 +556,6 @@
/obj/item/toy/AI/proc/cooldownreset()
cooldown = 0
/*
* Hand buzzer
*/
/obj/item/clothing/gloves/ring/buzzer/toy
name = "steel ring"
desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side."
icon_state = "seal-signet"
drop_sound = 'sound/items/drop/ring.ogg'
/obj/item/clothing/gloves/ring/buzzer/toy/Touch(var/atom/A, var/proximity)
if(proximity && istype(usr, /mob/living/carbon/human))
return zap(usr, A, proximity)
return 0
/obj/item/clothing/gloves/ring/buzzer/toy/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
. = FALSE
if(user.a_intent == I_HELP && battery.percent() >= 50)
if(isliving(target))
var/mob/living/L = target
to_chat(L, span_warning("You feel a powerful shock!"))
if(!.)
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
L.electrocute_act(battery.percent() * 0, src)
return .
return 0
/*
* Toy cuffs
*/
+6
View File
@@ -115,6 +115,12 @@
drop_sound = 'sound/items/drop/food.ogg'
pickup_sound = 'sound/items/pickup/food.ogg'
/obj/item/trash/turkeybones
name = "turkey bones"
icon_state = "turkeybones"
drop_sound = 'sound/items/drop/food.ogg'
pickup_sound = 'sound/items/pickup/food.ogg'
/obj/item/trash/pistachios
name = "pistachios packet"
icon_state = "pistachios_pack"
@@ -65,8 +65,7 @@
var/light_glove_d = rand(2, 4)
var/no_glove_d = rand(4, 6)
var/list/forbidden_gloves = list(
/obj/item/clothing/gloves/sterile,
/obj/item/clothing/gloves/knuckledusters
/obj/item/clothing/gloves/sterile
)
if(src == user.l_hand)
@@ -141,7 +141,7 @@
to_chat(user, span_notice("\the [src] is too full to possibly fit anything else inside of it."))
return
if (istype(W, /obj/item/ore))
if (istype(W, /obj/item/ore) && !istype(W, /obj/item/ore/slag))
var/obj/item/ore/ore = W
stored_ore[ore.material]++
current_capacity++
@@ -178,6 +178,8 @@
if(current_pickup >= max_pickup)
max_pickup_reached = 1
break
if(istype(O, /obj/item/ore/slag))
continue
var/obj/item/ore/ore = O
stored_ore[ore.material]++
current_capacity++
@@ -71,6 +71,7 @@
/obj/item/storage/firstaid/surgery
can_hold = list(
/obj/item/surgical/bone_clamp,
/obj/item/surgical/bonesetter,
/obj/item/surgical/cautery,
/obj/item/surgical/circular_saw,
+1 -1
View File
@@ -263,7 +263,7 @@
prob(6);/obj/item/material/butterflyblade,
prob(6);/obj/item/material/butterflyhandle,
prob(2);/obj/item/material/butterfly/switchblade,
prob(2);/obj/item/clothing/gloves/knuckledusters,
prob(2);/obj/item/clothing/accessory/knuckledusters,
prob(1);/obj/item/material/knife/tacknife,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
prob(1);/obj/item/beartrap,
+1 -1
View File
@@ -154,7 +154,7 @@
prob(4);/obj/item/storage/pill_bottle/zoom,
prob(4);/obj/item/material/butterfly,
prob(2);/obj/item/material/butterfly/switchblade,
prob(2);/obj/item/clothing/gloves/knuckledusters,
prob(2);/obj/item/clothing/accessory/knuckledusters,
prob(2);/obj/item/reagent_containers/syringe/drugs,
prob(1);/obj/item/material/knife/tacknife,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
@@ -39,6 +39,23 @@ LINEN BINS
return
..()
/obj/item/bedsheet/verb/turn_around()
set name = "Turn Around"
set category = "Object"
set src in oview(1)
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction)))
return
if(dir >= 2)
src.set_dir(1)
else
src.set_dir(2)
/obj/item/bedsheet/blue
icon_state = "sheetblue"
@@ -211,7 +211,7 @@
/obj/item/radio,
/obj/item/gps/explorer,
/obj/item/gun/energy/gun/protector/pilotgun/locked,
/obj/item/clothing/gloves/watch/survival,
/obj/item/clothing/accessory/watch/survival,
/obj/item/clothing/accessory/storage/webbing/pilot1,
/obj/item/clothing/accessory/storage/webbing/pilot2,
/obj/item/emergency_beacon
@@ -127,6 +127,10 @@
name = "chicken crate"
starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
/obj/structure/largecrate/animal/turkey
name = "turkey crate"
starts_with = list(/mob/living/simple_mob/vore/turkey)
/obj/structure/largecrate/animal/catslug
name = "catslug carrier"
starts_with = list(/mob/living/simple_mob/vore/alienanimals/catslug)
@@ -31,7 +31,6 @@
from the pod is not a crewmember."))
R.ckey = M.ckey
visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated."))
R.namepick()
log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
..()
@@ -57,7 +56,6 @@
definiton of 'your gravesite' is where your pod is."))
R.ckey = M.ckey
visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated."))
R.namepick()
..()
/obj/structure/ghost_pod/ghost_activated/swarm_drone
@@ -21,7 +21,6 @@
from the pod is not a crewmember."))
R.ckey = M.ckey
visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated."))
R.namepick()
log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
used = TRUE
return TRUE
+1
View File
@@ -40,6 +40,7 @@
icon_state = "pillowpile_large_pink"
var/pillowpilefront = "/obj/structure/bed/pillowpilefront"
var/sourcepillow = "/obj/item/bedsheet/pillow"
flippable = FALSE
/obj/structure/bed/pillowpilefront
name = "pillow pile"
@@ -7,6 +7,7 @@
icon_state = "nest"
var/health = 100
unacidable = TRUE
flippable = FALSE
/obj/structure/bed/nest/update_icon()
return
@@ -21,6 +21,7 @@
var/datum/material/padding_material
var/base_icon = "bed"
var/applies_material_colour = 1
var/flippable = TRUE
/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc)
@@ -168,6 +169,30 @@
if(padding_material)
padding_material.place_sheet(get_turf(src), 1)
/obj/structure/bed/verb/turn_around()
set name = "Turn Around"
set category = "Object"
set src in oview(1)
if(!flippable)
to_chat(usr,span_notice("\The [src] can't face the other direction."))
return
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction)))
return
if(dir == 2)
src.set_dir(1)
else if(dir == 1)
src.set_dir(2)
else if(dir == 4)
src.set_dir(8)
else if(dir == 8)
src.set_dir(4)
/obj/structure/bed/psych
name = "psychiatrist's couch"
desc = "For prime comfort during psychiatric evaluations."
@@ -208,6 +233,7 @@
surgery_odds = 50 //VOREStation Edit
var/bedtype = /obj/structure/bed/roller
var/rollertype = /obj/item/roller
flippable = FALSE
/obj/structure/bed/roller/adv
name = "advanced roller bed"
@@ -347,6 +373,7 @@
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_bed)
icon = 'icons/obj/abductor.dmi'
icon_state = "bed"
flippable = FALSE
/obj/structure/bed/alien/update_icon()
return // Doesn't care about material or anything else.
@@ -292,7 +292,7 @@
prob(3);/obj/item/cracker,
prob(3);/obj/item/material/butterfly,
prob(3);/obj/item/material/butterfly/switchblade,
prob(3);/obj/item/clothing/gloves/knuckledusters,
prob(3);/obj/item/clothing/accessory/knuckledusters,
prob(3);/obj/item/clothing/gloves/heavy_engineer,
prob(3);/obj/item/reagent_containers/syringe/drugs,
prob(2);/obj/item/implanter/sizecontrol,