mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
initial
This commit is contained in:
@@ -234,7 +234,7 @@
|
||||
},
|
||||
/area/station/security/armory)
|
||||
"V" = (
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/security/armory)
|
||||
"n" = (
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/security/armory)
|
||||
"B" = (
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/security/armory)
|
||||
"C" = (
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/area/station/security/armory)
|
||||
"e" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/security/armory)
|
||||
"f" = (
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"g" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/structure/cable,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/armory)
|
||||
"l" = (
|
||||
|
||||
@@ -818,7 +818,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/camera/autoname/directional/east,
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron/white,
|
||||
@@ -5765,7 +5765,7 @@
|
||||
/area/station/service/lawoffice)
|
||||
"bZI" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/obj/effect/landmark/event_spawn,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/security/armory)
|
||||
@@ -51283,7 +51283,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/officer,
|
||||
/mob/living/basic/bot/secbot/beepsky/officer,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/central)
|
||||
"rFX" = (
|
||||
@@ -67602,7 +67602,7 @@
|
||||
/area/station/maintenance/port/lesser)
|
||||
"xkc" = (
|
||||
/obj/structure/cable/layer3,
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai/satellite/foyer)
|
||||
"xkI" = (
|
||||
|
||||
@@ -43199,7 +43199,7 @@
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/officer,
|
||||
/mob/living/basic/bot/secbot/beepsky/officer,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
@@ -47871,7 +47871,7 @@
|
||||
"jhL" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/jr,
|
||||
/mob/living/basic/bot/secbot/beepsky/jr,
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 1
|
||||
},
|
||||
@@ -81136,7 +81136,7 @@
|
||||
"pzw" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/landmark/event_spawn,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/obj/machinery/holopad/secure,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/armory)
|
||||
@@ -85157,7 +85157,7 @@
|
||||
},
|
||||
/area/station/hallway/secondary/command)
|
||||
"qnM" = (
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
|
||||
@@ -23189,7 +23189,7 @@
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai/satellite/interior)
|
||||
"cuT" = (
|
||||
@@ -24473,7 +24473,7 @@
|
||||
/area/station/service/chapel/office)
|
||||
"cCh" = (
|
||||
/obj/item/bedsheet/red,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/officer,
|
||||
/mob/living/basic/bot/secbot/beepsky/officer,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/fore)
|
||||
@@ -55038,7 +55038,7 @@
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/station/engineering/circuit_workshop)
|
||||
"nvX" = (
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/obj/effect/landmark/event_spawn,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/iron/dark,
|
||||
|
||||
@@ -39762,7 +39762,7 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/structure/cable,
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/obj/structure/cable/layer3,
|
||||
/turf/open/floor/engine,
|
||||
/area/station/ai/satellite/interior)
|
||||
@@ -48289,7 +48289,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/armsky,
|
||||
/mob/living/basic/bot/secbot/beepsky/armsky,
|
||||
/obj/effect/turf_decal/tile/neutral/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
@@ -69051,7 +69051,7 @@
|
||||
/area/station/service/bar/atrium)
|
||||
"vYs" = (
|
||||
/obj/structure/chair,
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/officer,
|
||||
/mob/living/basic/bot/secbot/beepsky/officer,
|
||||
/obj/effect/turf_decal/tile/neutral/half/contrasted{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -12519,7 +12519,7 @@
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/science/lower)
|
||||
"euM" = (
|
||||
@@ -47257,7 +47257,7 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/mob/living/basic/bot/secbot/pingsky,
|
||||
/obj/machinery/ai_slipper{
|
||||
uses = 10
|
||||
},
|
||||
|
||||
@@ -24,14 +24,14 @@
|
||||
* where a signal or other important handling in the parent proc is being skipped.
|
||||
* Child procs may set this setting to `0` instead to override the check.
|
||||
*/
|
||||
#define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
|
||||
#define SHOULD_CALL_PARENT(X) set _call_parent = X
|
||||
/**
|
||||
* If set, raise a warning for any child procs that override this one,
|
||||
* regardless of if it calls parent or not.
|
||||
* This functions in a similar way to the `final` keyword in some languages.
|
||||
* This cannot be disabled by child overrides.
|
||||
*/
|
||||
#define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X
|
||||
#define SHOULD_NOT_OVERRIDE(X) set _not_override = X
|
||||
/**
|
||||
* If set, raise a warning if the proc or one of the sub-procs it calls
|
||||
* uses a blocking call, such as `sleep()` or `input()` without using `set waitfor = 0`
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#define span_crossasay(str) ("<span class='crossasay'>" + str + "</span>")
|
||||
#define span_doyourjobidiot(str) ("<span class='doyourjobidiot'>" + str + "</span>")
|
||||
#define span_brown(str) ("<span class='brown'>" + str + "</span>")
|
||||
#define span_cyan(str) ("<span class='cyan'>" + str + "</span>")
|
||||
#define span_orange(str) ("<span class='orange'>" + str + "</span>")
|
||||
#define span_yellow(str) ("<span class='yellow'>" + str + "</span>")
|
||||
#define span_gangradio(str) ("<span class='gangradio'>" + str + "</span>")
|
||||
|
||||
@@ -87,8 +87,8 @@
|
||||
target.penis = null
|
||||
|
||||
|
||||
client.mob.hud_used.hidden_inventory_update(client.mob)
|
||||
client.mob.hud_used.persistent_inventory_update(client.mob)
|
||||
client.mob.hud_used.inventory_update(client.mob)
|
||||
client.mob.hud_used.inventory_update(client.mob)
|
||||
|
||||
/datum/preference/toggle/erp/sex_toy_sounds
|
||||
savefile_key = "sextoy_sounds_pref"
|
||||
@@ -155,6 +155,7 @@
|
||||
"Ask (L)OOC",
|
||||
"No",
|
||||
"Yes",
|
||||
"Free Use",
|
||||
)
|
||||
|
||||
/datum/preference/choiced/erp_status/create_default_value()
|
||||
@@ -185,7 +186,14 @@
|
||||
savefile_key = "erp_status_pref_nc"
|
||||
|
||||
/datum/preference/choiced/erp_status_nc/init_possible_values()
|
||||
return list("Yes - Switch", "Yes - Dom", "Yes - Sub", "Yes", "Ask (L)OOC", "Check OOC Notes", "No")
|
||||
return list(
|
||||
"No",
|
||||
"Ask (L)OOC",
|
||||
"Check OOC Notes",
|
||||
"Yes",
|
||||
"Yes - Dom",
|
||||
"Yes - Switch",
|
||||
)
|
||||
|
||||
/datum/preference/choiced/erp_status_nc/create_default_value()
|
||||
return "No"
|
||||
@@ -215,7 +223,15 @@
|
||||
savefile_key = "erp_status_pref_v"
|
||||
|
||||
/datum/preference/choiced/erp_status_v/init_possible_values()
|
||||
return list("Yes - Switch", "Yes - Prey", "Yes - Pred", "Check OOC Notes", "Ask (L)OOC", "No", "Yes")
|
||||
return list(
|
||||
"No",
|
||||
"Ask (L)OOC",
|
||||
"Check OOC Notes",
|
||||
"Yes",
|
||||
"Yes - Pred",
|
||||
"Yes - Prey",
|
||||
"Yes - Switch",
|
||||
)
|
||||
|
||||
/datum/preference/choiced/erp_status_v/create_default_value()
|
||||
return "No"
|
||||
@@ -245,7 +261,12 @@
|
||||
savefile_key = "erp_status_pref_mechanics"
|
||||
|
||||
/datum/preference/choiced/erp_status_mechanics/init_possible_values()
|
||||
return list("Roleplay only", "Mechanical only", "Mechanical and Roleplay", "None")
|
||||
return list(
|
||||
"None",
|
||||
"Roleplay only",
|
||||
"Mechanical only",
|
||||
"Mechanical and Roleplay",
|
||||
)
|
||||
|
||||
/datum/preference/choiced/erp_status_mechanics/create_default_value()
|
||||
return "None"
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
/obj/item/crusher_trophy/watcher_wing,
|
||||
)
|
||||
ritual_success_items = list(
|
||||
/obj/item/tendril_seed,
|
||||
/obj/item/ash_seed/tendril,
|
||||
)
|
||||
|
||||
/datum/ash_ritual/incite_megafauna
|
||||
@@ -109,13 +109,13 @@
|
||||
desc = "Causes a horrible, unrecognizable sound that will attract the large fauna from around the planet."
|
||||
required_components = list(
|
||||
"north" = /mob/living/carbon/human,
|
||||
"south" = /obj/item/tendril_seed,
|
||||
"south" = /obj/item/ash_seed/tendril,
|
||||
"east" = /mob/living/carbon/human,
|
||||
"west" = /mob/living/carbon/human,
|
||||
)
|
||||
consumed_components = list(
|
||||
/mob/living/carbon/human,
|
||||
/obj/item/tendril_seed,
|
||||
/obj/item/ash_seed/tendril,
|
||||
)
|
||||
|
||||
/datum/ash_ritual/incite_megafauna/ritual_success(obj/effect/ash_rune/success_rune)
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
name = "primitive screwdriver"
|
||||
icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
|
||||
icon_state = "screwdriver"
|
||||
post_init_icon_state = null
|
||||
random_color = FALSE
|
||||
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
greyscale_colors = null
|
||||
greyscale_config = null
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
greyscale_config_belt = null
|
||||
greyscale_config_worn = null
|
||||
post_init_icon_state = null
|
||||
|
||||
/datum/crafting_recipe/ash_recipe/ash_screwdriver
|
||||
name = "Ash Screwdriver"
|
||||
@@ -21,14 +20,14 @@
|
||||
name = "primitive wirecutters"
|
||||
icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
|
||||
icon_state = "cutters"
|
||||
random_color = FALSE
|
||||
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
greyscale_colors = null
|
||||
greyscale_config = null
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
greyscale_config_belt = null
|
||||
greyscale_config_worn = null
|
||||
post_init_icon_state = null
|
||||
|
||||
/datum/crafting_recipe/ash_recipe/ash_cutters
|
||||
name = "Ash Wirecutters"
|
||||
@@ -45,11 +44,28 @@
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
greyscale_config_worn = null
|
||||
post_init_icon_state = null
|
||||
|
||||
/datum/crafting_recipe/ash_recipe/ash_wrench
|
||||
name = "Ash Wrench"
|
||||
result = /obj/item/wrench/ashwalker
|
||||
|
||||
/obj/item/secateurs/ashwalker
|
||||
name = "primitive secateurs"
|
||||
icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
|
||||
icon_state = "secateurs"
|
||||
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
greyscale_colors = null
|
||||
greyscale_config = null
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
greyscale_config_worn = null
|
||||
|
||||
/datum/crafting_recipe/ash_recipe/ash_secateur
|
||||
name = "Ash Secateur"
|
||||
result = /obj/item/secateurs/ashwalker
|
||||
|
||||
/obj/item/crowbar/ashwalker
|
||||
name = "primitive crowbar"
|
||||
icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
|
||||
@@ -61,11 +77,31 @@
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
greyscale_config_worn = null
|
||||
post_init_icon_state = null
|
||||
|
||||
/datum/crafting_recipe/ash_recipe/ash_crowbar
|
||||
name = "Ash Crowbar"
|
||||
result = /obj/item/crowbar/ashwalker
|
||||
|
||||
/obj/item/chisel/ashwalker
|
||||
name = "primitive chisel"
|
||||
desc = "Where there is a will there is a way; the tool head of this chisel is fashioned from bone shaped when it was fresh and then left to calcify in iron rich water, to make a strong head for all your carving needs."
|
||||
icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
|
||||
icon_state = "chisel"
|
||||
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
greyscale_colors = null
|
||||
greyscale_config = null
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
greyscale_config_worn = null
|
||||
post_init_icon_state = null
|
||||
toolspeed = 4
|
||||
|
||||
/datum/crafting_recipe/ash_recipe/ash_chisel
|
||||
name = "Ash Chisel"
|
||||
result = /obj/item/chisel/ashwalker
|
||||
|
||||
/obj/item/cursed_dagger
|
||||
name = "cursed ash dagger"
|
||||
desc = "A blunted dagger that seems to cause the shadows near it to tremble."
|
||||
@@ -79,37 +115,61 @@
|
||||
. = ..()
|
||||
. += span_notice("To be used on tendrils. It will visually change the tendril to indicate whether it has been cursed or not.")
|
||||
|
||||
/obj/item/tendril_seed
|
||||
name = "tendril seed"
|
||||
desc = "A horrible fleshy mass that pulse with a dark energy."
|
||||
/obj/item/ash_seed
|
||||
icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
|
||||
icon_state = "tendril_seed"
|
||||
|
||||
/obj/item/tendril_seed/examine(mob/user)
|
||||
///list of things the ash seed can spawn
|
||||
var/list/spawn_list
|
||||
|
||||
/obj/item/ash_seed/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_notice("In order to be planted, it is required to be on the mining level as well as on basalt.")
|
||||
|
||||
/obj/item/tendril_seed/attack_self(mob/user, modifiers)
|
||||
/obj/item/ash_seed/proc/harm_user(mob/living/user, sent_message, damage_amount)
|
||||
to_chat(user, span_warning(sent_message))
|
||||
user.adjust_brute_loss(damage_amount)
|
||||
if(!do_after(user, 4 SECONDS, target = src))
|
||||
to_chat(user, span_warning("You stop the process of planting [src]!"))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/item/ash_seed/attack_self(mob/user, modifiers)
|
||||
. = ..()
|
||||
if(isnull(spawn_list))
|
||||
return
|
||||
|
||||
var/turf/src_turf = get_turf(src)
|
||||
if(!is_mining_level(src_turf.z) || !istype(src_turf, /turf/open/misc/asteroid/basalt))
|
||||
return
|
||||
|
||||
if(!isliving(user))
|
||||
return
|
||||
|
||||
var/mob/living/living_user = user
|
||||
to_chat(living_user, span_warning("You begin to squeeze [src]..."))
|
||||
if(!do_after(living_user, 4 SECONDS, target = src))
|
||||
if(!harm_user(user, "You begin to squeeze [src]...", 20))
|
||||
return
|
||||
to_chat(living_user, span_warning("[src] begins to crawl between your hand's appendages, crawling up your arm..."))
|
||||
living_user.adjust_brute_loss(35)
|
||||
if(!do_after(living_user, 4 SECONDS, target = src))
|
||||
|
||||
if(!harm_user(user, "[src] begins to crawl between your hand's appendages, crawling up your arm...", 20))
|
||||
return
|
||||
to_chat(living_user, span_warning("[src] wraps around your chest and begins to tighten, causing an odd needling sensation..."))
|
||||
living_user.adjust_brute_loss(35)
|
||||
if(!do_after(living_user, 4 SECONDS, target = src))
|
||||
|
||||
if(!harm_user(user, "[src] wraps around your chest and begins to tighten, causing an odd needling sensation...", 20))
|
||||
return
|
||||
|
||||
to_chat(living_user, span_warning("[src] leaps from you satisfied and begins to grossly assemble itself!"))
|
||||
var/type = pick(/obj/structure/spawner/lavaland, /obj/structure/spawner/lavaland/goliath, /obj/structure/spawner/lavaland/legion)
|
||||
var/type = pick(spawn_list)
|
||||
new type(user.loc)
|
||||
playsound(get_turf(src), 'sound/effects/magic/demon_attack1.ogg', 50, TRUE)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/ash_seed/tendril
|
||||
name = "tendril seed"
|
||||
desc = "A horrible fleshy mass that pulse with a dark energy."
|
||||
icon_state = "tendril_seed"
|
||||
spawn_list = list(/mob/living/basic/mining/tendril)
|
||||
|
||||
/obj/item/ash_seed/vent
|
||||
name = "ore seed"
|
||||
desc = "A horrible fleshy mass covers a boulder. It seems to slowly pulse, reacting to you near it"
|
||||
icon_state = "vent_seed"
|
||||
spawn_list = list(/obj/structure/ore_vent/random)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.5 KiB |
@@ -139,7 +139,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders)
|
||||
|
||||
/obj/item/nullrod/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/bane, /mob/living/basic/clockwork_marauder, 1, 15, FALSE)
|
||||
AddComponent(/datum/component/bane, /mob/living/basic/clockwork_marauder, 1, 15, FALSE)
|
||||
|
||||
#undef MARAUDER_SHIELD_MAX
|
||||
#undef WELDER_REPAIR_AMOUNT
|
||||
|
||||
@@ -42,6 +42,10 @@
|
||||
var/color_layer_names
|
||||
/// If this sprite accessory will be inaccessable if ERP config is disabled
|
||||
var/erp_accessory = FALSE
|
||||
// If this sprite accessory should use something other than the feature_key to decide its sprite key
|
||||
// For example, if TG has it different in their icon files (e.g. "_fish_tail_" instead of "_tail_")
|
||||
// This should hopefully prevent the need to copy paste TG icons into tails.dmi
|
||||
var/feature_key_override
|
||||
|
||||
/datum/sprite_accessory/blank
|
||||
factual = FALSE
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@
|
||||
|
||||
always_customizable = FALSE
|
||||
|
||||
/datum/species/pod/podweak/spec_life(mob/living/carbon/human/H, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
/datum/species/pod/podweak/proc/on_life(mob/living/carbon/human/H, seconds_per_tick)
|
||||
SIGNAL_HANDLER
|
||||
if(H.stat != CONSCIOUS)
|
||||
return
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/organ/tail
|
||||
mutantpart_key = "tail"
|
||||
mutantpart_key = "FEATURE_TAIL"
|
||||
mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"))
|
||||
var/can_wag = TRUE
|
||||
var/wagging = FALSE
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/delam_scram/proc/panic_time(source, trigger_reason)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!prereq_check(source, trigger_reason))
|
||||
if(!prereq_check())
|
||||
return
|
||||
|
||||
send_warning(source, trigger_reason)
|
||||
@@ -156,7 +156,8 @@
|
||||
use_reverb = TRUE,
|
||||
falloff_distance = 10,
|
||||
)
|
||||
power_fail(duration_min = 27, duration_max = 33)
|
||||
ASYNC
|
||||
power_fail(40, 50)
|
||||
|
||||
/// Stop the delamination. Let the fireworks begin
|
||||
/obj/machinery/atmospherics/components/unary/delam_scram/proc/put_on_a_show()
|
||||
|
||||
@@ -25,7 +25,7 @@ GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_skyrat/module
|
||||
. = ..()
|
||||
|
||||
//Temporary, look below for the reason
|
||||
/mob/living/ghostize(can_reenter_corpse = TRUE)
|
||||
/mob/living/ghostize(can_reenter_corpse = TRUE, forced = FALSE)
|
||||
. = ..()
|
||||
set_ssd_indicator(FALSE)
|
||||
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
/datum/biome/ocean_sand
|
||||
turf_type = /turf/open/misc/ocean
|
||||
open_turf_type = /turf/open/misc/ocean
|
||||
flora_types = list(/obj/effect/spawner/ocean_curio, /obj/structure/flora/rock, /obj/structure/flora/rock/pile, /obj/structure/flora/ocean/glowweed, /obj/structure/flora/ocean/seaweed, /obj/structure/flora/ocean/longseaweed)
|
||||
flora_density = 10
|
||||
|
||||
/datum/biome/ocean_sand_flora
|
||||
turf_type = /turf/open/misc/ocean
|
||||
open_turf_type = /turf/open/misc/ocean
|
||||
flora_types = list(/obj/effect/spawner/ocean_curio, /obj/structure/flora/rock/pile, /obj/structure/flora/ocean/glowweed, /obj/structure/flora/ocean/seaweed, /obj/structure/flora/ocean/longseaweed, /obj/structure/flora/ocean/coral)
|
||||
flora_density = 25
|
||||
fauna_density = 0.03
|
||||
fauna_types = list(/mob/living/basic/carp)
|
||||
|
||||
/datum/biome/ocean_redsand
|
||||
turf_type = /turf/open/misc/ironsand/ocean
|
||||
open_turf_type = /turf/open/misc/ironsand/ocean
|
||||
flora_types = list(/obj/effect/spawner/ocean_curio, /obj/structure/flora/rock/pile, /obj/structure/flora/ocean/glowweed, /obj/structure/flora/ocean/seaweed, /obj/structure/flora/ocean/longseaweed, /obj/structure/flora/ocean/coral)
|
||||
flora_density = 40
|
||||
fauna_density = 0.06
|
||||
fauna_types = list(/mob/living/basic/carp)
|
||||
|
||||
/datum/biome/ocean_rocklight
|
||||
turf_type = /turf/open/misc/ocean/rock
|
||||
open_turf_type = /turf/open/misc/ocean/rock
|
||||
flora_types = list(/obj/effect/spawner/ocean_curio/rock, /obj/structure/flora/rock, /obj/structure/flora/rock/pile)
|
||||
flora_density = 3
|
||||
|
||||
/datum/biome/ocean_rockmed
|
||||
turf_type = /turf/open/misc/ocean/rock/medium
|
||||
open_turf_type = /turf/open/misc/ocean/rock/medium
|
||||
flora_types = list(/obj/effect/spawner/ocean_curio/rock, /obj/structure/flora/rock, /obj/structure/flora/rock/pile)
|
||||
flora_density = 5
|
||||
|
||||
/datum/biome/ocean_rockheavy
|
||||
turf_type = /turf/open/misc/ocean/rock/heavy
|
||||
open_turf_type = /turf/open/misc/ocean/rock/heavy
|
||||
flora_types = list(/obj/effect/spawner/ocean_curio/rock, /obj/structure/flora/rock, /obj/structure/flora/rock/pile)
|
||||
flora_density = 7
|
||||
|
||||
/datum/biome/ocean_wall
|
||||
turf_type = /turf/closed/mineral/random/stationside/ocean
|
||||
closed_turf_type = /turf/closed/mineral/random/stationside/ocean
|
||||
flora_density = 0
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if(!ismineralturf(T))
|
||||
return
|
||||
var/turf/closed/mineral/M = T
|
||||
M.mineralAmt = 0
|
||||
M.mineral_amt = 0
|
||||
M.gets_drilled()
|
||||
baseturfs = /turf/open/openspace/ocean //This is to ensure that IF random turf generation produces a openturf, there won't be other turfs assigned other than openspace.
|
||||
|
||||
|
||||
@@ -84,15 +84,15 @@
|
||||
|
||||
/turf/closed/mineral/random/asteroid/rockplanet //A version that can be used on the mining planet without destroying atmos - starts with Low_Pressure, along with the rest of the planet.
|
||||
name = "iron rock"
|
||||
icon = MAP_SWITCH('icons/turf/walls/red_wall.dmi', 'icons/turf/mining.dmi')
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
icon = MAP_SWITCH('modular_zubbers/icons/turf/walls/red_wall.dmi', 'icons/turf/mining.dmi')
|
||||
icon = 'modular_zubbers/icons/turf/walls/red_wall.dmi'
|
||||
icon_state = "redrock"
|
||||
base_icon_state = "red_wall"
|
||||
turf_type = /turf/open/misc/asteroid/lowpressure
|
||||
baseturfs = /turf/open/misc/asteroid/lowpressure
|
||||
initial_gas_mix = OPENTURF_LOW_PRESSURE
|
||||
defer_change = TRUE
|
||||
mineralChance = 25 //Higher mineral chance than normal
|
||||
mineral_chance = 25 //Higher mineral chance than normal
|
||||
|
||||
/turf/closed/mineral/random/asteroid/rockplanet/mineral_chances()
|
||||
return list(
|
||||
|
||||
@@ -74,10 +74,10 @@
|
||||
if(message["identifier"] == sender_identifier)
|
||||
message["sender_name"] = message_name
|
||||
message["message"] = received_message
|
||||
message["timestamp"] = station_time_timestamp()
|
||||
message["timestamp"] = "[server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()]"
|
||||
return TRUE
|
||||
|
||||
message_list.Insert(1, list(list(identifier = sender_identifier, sender_name = received_name, message = received_message, timestamp = station_time_timestamp())))
|
||||
message_list.Insert(1, list(list(identifier = sender_identifier, sender_name = received_name, message = received_message, timestamp = "[server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()]")))
|
||||
return TRUE
|
||||
|
||||
/// Removes the message_to_remove from the message_list, If the message cannot be found the proc will return FALSE, otherwise it will delete the message_to_remove and return TRUE.
|
||||
|
||||
@@ -247,7 +247,6 @@
|
||||
|
||||
update_mob_action_buttons() //some of our action buttons might be unusable when we're handcuffed.
|
||||
update_worn_handcuffs()
|
||||
update_hud_handcuffed()
|
||||
|
||||
/obj/item/restraints/handcuffs/milker
|
||||
name = "chair cuffs"
|
||||
|
||||
@@ -151,8 +151,8 @@
|
||||
if(COOLDOWN_FINISHED(src, regen_cooldown))
|
||||
COOLDOWN_START(src, regen_cooldown, REGENERATION_DELAY)
|
||||
|
||||
/datum/species/mutant/infectious/spec_life(mob/living/carbon/carbon_mob, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
/datum/species/mutant/infectious/proc/on_life(mob/living/carbon/carbon_mob, seconds_per_tick)
|
||||
SIGNAL_HANDLER
|
||||
//mutants never actually die, they just fall down until they regenerate enough to rise back up.
|
||||
if(COOLDOWN_FINISHED(src, regen_cooldown))
|
||||
var/heal_amt = heal_rate
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
// stolen from the wall clock
|
||||
/obj/structure/grandfatherclock/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_info("The current CST (local) time is: [station_time_timestamp()].")
|
||||
. += span_info("The current CST (local) time is: [round_timestamp()].")
|
||||
. += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].")
|
||||
if(soundloop)
|
||||
. += span_notice("The hands of the clock are freely ticking away. They could be <b>screwed</b> down.")
|
||||
|
||||
@@ -182,10 +182,25 @@
|
||||
/obj/projectile/bullet/shotgun_slug/hunter
|
||||
name = "12g hunter slug"
|
||||
damage = 20
|
||||
range = 12
|
||||
/// How much the damage is multiplied by when we hit a mob with the correct biotype
|
||||
var/biotype_damage_multiplier = 5
|
||||
/// What biotype we look for
|
||||
var/biotype_we_look_for = MOB_BEAST
|
||||
|
||||
/obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/bane, mob_biotypes = MOB_BEAST, damage_multiplier = 6)
|
||||
/obj/projectile/bullet/shotgun_slug/hunter/on_hit(atom/target, blocked, pierce_hit)
|
||||
if(ismineralturf(target))
|
||||
var/turf/closed/mineral/mineral_turf = target
|
||||
mineral_turf.gets_drilled(firer)
|
||||
if(range > 0)
|
||||
return BULLET_ACT_FORCE_PIERCE
|
||||
return ..()
|
||||
if(!isliving(target) || (damage > initial(damage)))
|
||||
return ..()
|
||||
var/mob/living/target_mob = target
|
||||
if(target_mob.mob_biotypes & biotype_we_look_for || istype(target_mob, /mob/living/simple_animal/hostile/megafauna))
|
||||
damage *= biotype_damage_multiplier
|
||||
return ..()
|
||||
|
||||
/obj/item/ammo_casing/shotgun/honkshot
|
||||
name = "confetti shell"
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
MUTANT_SYNTH_HEAD = list("Default Head", FALSE),
|
||||
)
|
||||
|
||||
/datum/species/synthetic/spec_life(mob/living/carbon/human/human)
|
||||
. = ..()
|
||||
/datum/species/synthetic/proc/on_life(mob/living/carbon/human/human)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(human.stat == SOFT_CRIT || human.stat == HARD_CRIT)
|
||||
human.adjust_fire_loss(1) //Still deal some damage in case a cold environment would be preventing us from the sweet release to robot heaven
|
||||
|
||||
@@ -197,10 +197,10 @@
|
||||
|
||||
//turfs
|
||||
/turf/closed/mineral/strange_rock
|
||||
mineralAmt = 1
|
||||
mineral_amt = 1
|
||||
icon = MAP_SWITCH('modular_zubbers/icons/turf/walls/smoothrocks.dmi', 'modular_skyrat/modules/xenoarch/icons/mining.dmi')
|
||||
scan_state = "rock_Strange"
|
||||
mineralType = /obj/item/xenoarch/strange_rock
|
||||
mineral_type = /obj/item/xenoarch/strange_rock
|
||||
|
||||
/turf/closed/mineral/strange_rock/volcanic
|
||||
turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
|
||||
@@ -213,7 +213,7 @@
|
||||
baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
|
||||
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
|
||||
defer_change = TRUE
|
||||
mineralChance = 10
|
||||
mineral_chance = 7
|
||||
|
||||
/turf/closed/mineral/random/volcanic/mineral_chances()
|
||||
return list(
|
||||
@@ -261,7 +261,7 @@
|
||||
/turf/closed/mineral/random/snow/underground
|
||||
baseturfs = /turf/open/misc/asteroid/snow/icemoon
|
||||
// abundant ore
|
||||
mineralChance = 20
|
||||
mineral_chance = 16
|
||||
|
||||
/turf/closed/mineral/random/snow/underground/mineral_chances()
|
||||
return list(
|
||||
@@ -302,7 +302,7 @@
|
||||
/turf/closed/mineral/random/stationside/asteroid/rockplanet
|
||||
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
|
||||
turf_type = /turf/open/misc/asteroid
|
||||
mineralChance = 30
|
||||
mineral_chance = 25
|
||||
|
||||
/turf/closed/mineral/random/stationside/asteroid/rockplanet/mineral_chances()
|
||||
return list(
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* * dna - The `/datum/dna` datum from which we're going to be extracting the data to set the
|
||||
* * accessory_name - instead of using the name from mutant_bodyparts[feature_key][MUTANT_INDEX_NAME] you can optionally pass one explicitly
|
||||
* * accessory_name - instead of using the name from mutant_bodyparts[feature_key] you can optionally pass one explicitly
|
||||
* * feature_key - same as with accessory_key, you can optionally pass a feature_key explicitly
|
||||
* appearance.
|
||||
*/
|
||||
@@ -40,7 +40,6 @@
|
||||
sprite_datum = fetch_sprite_datum_from_name(accessory_name ? accessory_name : mutantparts_list[feature_key][MUTANT_INDEX_NAME])
|
||||
modsuit_affected = sprite_datum.use_custom_mod_icon
|
||||
draw_color = mutantparts_list[feature_key][MUTANT_INDEX_COLOR_LIST]
|
||||
build_emissive_eligibility(mutantparts_list[feature_key][MUTANT_INDEX_EMISSIVE_LIST])
|
||||
cache_key = jointext(generate_icon_cache(), "_")
|
||||
return TRUE
|
||||
|
||||
@@ -54,12 +53,12 @@
|
||||
|
||||
/// Generate a unique key based on our sprites. So that if we've aleady drawn these sprites,
|
||||
/// they can be found in the cache and wont have to be drawn again (blessing and curse, but mostly curse)
|
||||
/datum/bodypart_overlay/mutant/generate_icon_cache()
|
||||
/datum/bodypart_overlay/mutant/generate_icon_cache(obj/item/bodypart/limb)
|
||||
. = list()
|
||||
. += "[get_base_icon_state()]"
|
||||
. += "[get_feature_key_for_overlay()]"
|
||||
|
||||
. += cache_key_extra_information // We can do it like this because it's meant to be a list of strings anyway. BYOND list operations actually being useful for once.
|
||||
if(LAZYLEN(cache_key_extra_information))
|
||||
. += cache_key_extra_information // We can do it like this because it's meant to be a list of strings anyway. BYOND list operations actually being useful for once.
|
||||
|
||||
if(islist(draw_color))
|
||||
for(var/sub_color in draw_color)
|
||||
@@ -72,8 +71,8 @@
|
||||
. += "[alpha]"
|
||||
|
||||
if(emissive_eligibility_by_color_index)
|
||||
for(var/index in emissive_eligibility_by_color_index)
|
||||
. += "[emissive_eligibility_by_color_index[index]]"
|
||||
for(var/emissive_boolean in emissive_eligibility_by_color_index)
|
||||
. += emissive_boolean
|
||||
|
||||
return .
|
||||
|
||||
@@ -83,11 +82,11 @@
|
||||
* overriden in the cases where `feature_key` is not what we want to use here.
|
||||
*/
|
||||
/datum/bodypart_overlay/mutant/proc/get_feature_key_for_overlay()
|
||||
return feature_key
|
||||
return sprite_datum?.feature_key_override || feature_key
|
||||
|
||||
|
||||
/datum/bodypart_overlay/mutant/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
|
||||
if(!..(bodypart_owner))
|
||||
if(!..())
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/human = bodypart_owner.owner
|
||||
if(!istype(human))
|
||||
@@ -113,19 +112,19 @@
|
||||
var/mutable_appearance/mod_overlay
|
||||
var/icon/custom_mod_icon = sprite_datum.get_custom_mod_icon(owner)
|
||||
|
||||
cache_key_extra_information = list()
|
||||
last_built_icon_states = list()
|
||||
LAZYCLEARLIST(cache_key_extra_information)
|
||||
|
||||
if(custom_mod_icon)
|
||||
mod_overlay = get_singular_image(image_layer = image_layer, owner = owner, icon_override = custom_mod_icon)
|
||||
mod_overlay = get_singular_image(image_layer = image_layer, owner = owner, icon_override = custom_mod_icon, limb = limb)
|
||||
|
||||
switch(sprite_datum.color_src)
|
||||
if(USE_MATRIXED_COLORS)
|
||||
var/list/color_layer_names = get_color_layer_names(build_icon_state(gender, image_layer))
|
||||
var/list/color_layer_names = get_color_layer_names(build_icon_state_bubber(gender, image_layer))
|
||||
|
||||
for (var/color_index in color_layer_names)
|
||||
|
||||
var/mutable_appearance/color_layer_image = get_singular_image(build_icon_state(gender, image_layer, color_layer_names[color_index]), image_layer, owner)
|
||||
var/mutable_appearance/color_layer_image = get_singular_image(build_icon_state_bubber(gender, image_layer, color_layer_names[color_index]), image_layer, owner, limb = limb)
|
||||
returned_images += color_layer_image
|
||||
|
||||
overlay_indexes_to_color += index
|
||||
@@ -135,7 +134,7 @@
|
||||
mod_overlay.add_overlay(sprite_datum.get_custom_mod_icon(owner, color_layer_image))
|
||||
|
||||
else
|
||||
var/mutable_appearance/image_to_return = get_singular_image(build_icon_state(gender, image_layer), image_layer, owner)
|
||||
var/mutable_appearance/image_to_return = get_singular_image(build_icon_state_bubber(gender, image_layer), image_layer, owner, limb = limb)
|
||||
returned_images = list(image_to_return)
|
||||
overlay_indexes_to_color += index
|
||||
|
||||
@@ -143,16 +142,22 @@
|
||||
mod_overlay.add_overlay(sprite_datum.get_custom_mod_icon(owner, image_to_return))
|
||||
|
||||
if(sprite_datum.has_inner)
|
||||
returned_images += get_singular_image(build_icon_state(gender, image_layer, feature_key_suffix = "inner"), image_layer, owner)
|
||||
returned_images += get_singular_image(build_icon_state_bubber(gender, image_layer, feature_key_suffix = "inner"), image_layer, owner, limb = limb)
|
||||
|
||||
// Gets the icon_state of a single or matrix colored accessory and overlays it with a texture
|
||||
if(mod_overlay)
|
||||
returned_images += mod_overlay
|
||||
cache_key_extra_information += "MOD"
|
||||
LAZYADD(cache_key_extra_information, "MOD")
|
||||
|
||||
return returned_images
|
||||
|
||||
|
||||
// Cybernetic cat ears - special case - need a unique version for each inner color.
|
||||
/datum/bodypart_overlay/mutant/cat_ears/cybernetic/generate_icon_cache(obj/item/bodypart/limb)
|
||||
. = ..()
|
||||
. += inner_color
|
||||
|
||||
|
||||
/**
|
||||
* Returns the color_layer_names of the sprite_datum associated with our datum.
|
||||
* Mainly here so that it can be overriden elsewhere to have other effects.
|
||||
@@ -211,7 +216,7 @@
|
||||
* * feature_key_suffix - A string that will be directly appended to the result
|
||||
* of `get_feature_key_for_overlay()`. Defaults to `null`.
|
||||
*/
|
||||
/datum/bodypart_overlay/mutant/proc/build_icon_state(gender, image_layer, color_layer = null, feature_key_suffix = null)
|
||||
/datum/bodypart_overlay/mutant/proc/build_icon_state_bubber(gender, image_layer, color_layer = null, feature_key_suffix = null)
|
||||
var/list/icon_state_builder = list()
|
||||
|
||||
icon_state_builder += sprite_datum.gender_specific ? gender : "m" //Male is default because sprite accessories are so ancient they predate the concept of not hardcoding gender
|
||||
@@ -241,7 +246,7 @@
|
||||
* `sprite_datum.icon`. Default is `null`, and its value will be used if it's
|
||||
* anything else.
|
||||
*/
|
||||
/datum/bodypart_overlay/mutant/proc/get_singular_image(image_icon_state, image_layer, mob/living/carbon/human/owner, icon_override = null)
|
||||
/datum/bodypart_overlay/mutant/proc/get_singular_image(image_icon_state, image_layer, mob/living/carbon/human/owner, icon_override = null, obj/item/bodypart/limb)
|
||||
// We get from icon_override if it is filled, and from sprite_datum.icon if not.
|
||||
var/mutable_appearance/appearance = mutable_appearance(icon_override || sprite_datum.get_special_icon(owner), image_icon_state, layer = image_layer)
|
||||
|
||||
@@ -251,6 +256,17 @@
|
||||
return appearance
|
||||
|
||||
|
||||
// Special case - fish tail
|
||||
/datum/bodypart_overlay/mutant/tail/fish/get_singular_image(image_icon_state, image_layer, mob/living/carbon/human/owner, icon_override = null, obj/item/bodypart/limb)
|
||||
var/mutable_appearance/appearance = ..()
|
||||
// We add all appearances the parent bodypart has to the tail to inherit scales and fancy effects
|
||||
// but most other organs don't want to inherit those so we do it here and not on parent
|
||||
for (var/datum/bodypart_overlay/texture/texture in limb.bodypart_overlays)
|
||||
if(texture.can_draw_on_bodypart(limb, limb.owner, limb.is_husked))
|
||||
texture.modify_bodypart_appearance(appearance)
|
||||
return appearance
|
||||
|
||||
|
||||
/**
|
||||
* Helper proc to add the appropriate emissives to the overlays, based on the preferences.
|
||||
*
|
||||
@@ -264,33 +280,13 @@
|
||||
if(!limb || !length(emissive_eligibility_by_color_index))
|
||||
return overlays
|
||||
|
||||
var/index = 1
|
||||
var/list/image/emissives = list()
|
||||
|
||||
for(var/image/overlay in overlays)
|
||||
if(emissive_eligibility_by_color_index[num2text(index)])
|
||||
emissives += emissive_appearance_copy(overlay, limb)
|
||||
|
||||
index++
|
||||
|
||||
return overlays + emissives
|
||||
|
||||
|
||||
/**
|
||||
* Builds `emissive_eligibility_by_layer` from the input list of three booleans.
|
||||
* Will not do anything if the given argument is `null`.
|
||||
*/
|
||||
/datum/bodypart_overlay/mutant/proc/build_emissive_eligibility(list/emissive_eligibility)
|
||||
if(!emissive_eligibility || !islist(emissive_eligibility))
|
||||
return
|
||||
|
||||
emissive_eligibility_by_color_index = list()
|
||||
var/i = 1
|
||||
|
||||
for(var/eligibility in emissive_eligibility)
|
||||
emissive_eligibility_by_color_index[num2text(i)] = eligibility
|
||||
i++
|
||||
var/list/image/emissives
|
||||
var/max = min(3, length(overlays)) // only care about the first 3 indexes
|
||||
for(var/index = 1 to max)
|
||||
if(emissive_eligibility_by_color_index[index])
|
||||
LAZYADD(emissives, emissive_appearance_copy(overlays[index], limb))
|
||||
|
||||
return emissives ? (overlays + emissives) : overlays
|
||||
|
||||
/**
|
||||
* Helper to set the MOD-related info on the overlay, useful for MODsuit overlays.
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
/datum/material/silver/on_applied(atom/source, mat_amount, multiplier, from_slot)
|
||||
. = ..()
|
||||
source.AddElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5)
|
||||
source.AddComponent(/datum/component/bane, affected_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5)
|
||||
|
||||
/datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot)
|
||||
/* /datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot)
|
||||
. = ..()
|
||||
source.RemoveElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5)
|
||||
source.RemoveComponentSource(/datum/component/bane, affected_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5)
|
||||
|
||||
//this component should be removed when silver is naturally removed, it should be possible for silver to be removed without this proc being called.
|
||||
*/
|
||||
|
||||
@@ -88,7 +88,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an
|
||||
on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \
|
||||
effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune, /obj/effect/cosmic_rune), \
|
||||
)
|
||||
AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE)
|
||||
AddComponent(/datum/component/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE)
|
||||
|
||||
/obj/item/dualsaber/chaplain/proc/on_cult_rune_removed(obj/effect/target, mob/living/user)
|
||||
if(!istype(target, /obj/effect/rune))
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
obj_flags = UNIQUE_RENAME
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
max_mod_capacity = 60
|
||||
disabled_modkits = list(/obj/item/borg/upgrade/modkit/aoe) // Should cover all AOE variants
|
||||
disabled_modkits = list(/obj/item/borg/upgrade/modkit/cooldown/aoe/) // Should cover all AOE variants
|
||||
|
||||
/obj/item/gun/energy/recharge/kinetic_accelerator/glock
|
||||
name = "proto-kinetic pistol"
|
||||
@@ -90,7 +90,7 @@
|
||||
obj_flags = UNIQUE_RENAME
|
||||
weapon_weight = WEAPON_LIGHT
|
||||
max_mod_capacity = 75
|
||||
disabled_modkits = list(/obj/item/borg/upgrade/modkit/aoe) // Should cover all AOE variants
|
||||
disabled_modkits = list(/obj/item/borg/upgrade/modkit/cooldown/aoe/) // Should cover all AOE variants
|
||||
|
||||
/obj/item/gun/energy/recharge/kinetic_accelerator/shockwave/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
|
||||
target = get_edge_target_turf(user, user.dir)
|
||||
@@ -154,7 +154,7 @@
|
||||
fire_sound = 'sound/items/weapons/gun/general/cannon.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/kinetic/m79
|
||||
projectile_type = /obj/projectile/bullet/mining_bomb //uses the mining bomb projectile from the mining modsuit
|
||||
projectile_type = /obj/projectile/bullet/mining_missile //uses the mining bomb projectile from the mining modsuit
|
||||
select_name = "kinetic"
|
||||
e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5)
|
||||
fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg'
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
/obj/structure/lewd_portal/proc/head_only()
|
||||
SIGNAL_HANDLER
|
||||
current_mob.cut_overlays()
|
||||
current_mob.update_body_parts_head_only()
|
||||
current_mob.update_body_parts()
|
||||
var/obj/item/clothing/glasses = current_mob.glasses
|
||||
if(glasses)
|
||||
current_mob.update_worn_glasses()
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/lunar_cave/mineral_chances()
|
||||
return list(
|
||||
@@ -81,7 +81,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/labormineral/lunar_cave/mineral_chances()
|
||||
return list(
|
||||
@@ -98,7 +98,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/high_chance/lunar_cave/mineral_chances()
|
||||
return list(
|
||||
@@ -121,7 +121,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/low_chance/lunar_cave/mineral_chances()
|
||||
return list(
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/lunar/mineral_chances()
|
||||
return list(
|
||||
@@ -76,7 +76,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/labormineral/lunar/mineral_chances()
|
||||
return list(
|
||||
@@ -93,7 +93,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/high_chance/lunar/mineral_chances()
|
||||
return list(
|
||||
@@ -116,7 +116,7 @@
|
||||
baseturfs = /turf/open/misc/moonstation_rock
|
||||
defer_change = TRUE
|
||||
initial_gas_mix = MOONSTATION_ATMOS
|
||||
proximity_based = FALSE
|
||||
exposure_based = FALSE
|
||||
|
||||
/turf/closed/mineral/random/low_chance/lunar/mineral_chances()
|
||||
return list(
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/datum/timedevent/logout_timer
|
||||
|
||||
// Handles fresh ghosts. This includes cryo chambers
|
||||
/mob/living/ghostize(can_reenter_corpse)
|
||||
/mob/living/ghostize(can_reenter_corpse = TRUE, forced = FALSE)
|
||||
. = ..()
|
||||
var/mob/dead/observer/ghost = .
|
||||
if(!istype(ghost))
|
||||
|
||||
@@ -29,7 +29,21 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
|
||||
/datum/preference/choiced/attraction/init_possible_values()
|
||||
return list("Gay", "Lesbian", "Straight", "Skolio", "Bi", "Pan", "Poly", "Omni", "Ace", "Aro", "Aro/Ace", "Unset", "Check OOC")
|
||||
return list(
|
||||
"Unset",
|
||||
"Check OOC",
|
||||
"Straight",
|
||||
"Lesbian",
|
||||
"Gay",
|
||||
"Bisexual",
|
||||
"Pansexual",
|
||||
"Polysexual",
|
||||
"Asexual",
|
||||
"Aromantic",
|
||||
"Aro/Ace",
|
||||
"Skoliosexual",
|
||||
"Omnisexual",
|
||||
)
|
||||
|
||||
/datum/preference/choiced/attraction/create_default_value()
|
||||
return "Unset"
|
||||
@@ -43,7 +57,20 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
|
||||
/datum/preference/choiced/display_gender/init_possible_values()
|
||||
return list("Male", "Female", "Null", "Plural", "Nonbinary", "Omni", "Trans", "Transmasc", "Transfem", "Andro", "Gyno", "Fluid", "Unset", "Check OOC")
|
||||
return list(
|
||||
"Unset",
|
||||
"Check OOC",
|
||||
"Male",
|
||||
"Female",
|
||||
"Nonbinary",
|
||||
"Genderfluid",
|
||||
"Trans",
|
||||
"Andromorph",
|
||||
"Gynomorph",
|
||||
"Agender",
|
||||
"Plural",
|
||||
"Omnigender",
|
||||
)
|
||||
|
||||
/datum/preference/choiced/display_gender/create_default_value()
|
||||
return "Unset"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/obj/item/clothing/accessory/pocketwatch/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_info("The current CST (local) time is: [station_time_timestamp()].")
|
||||
. += span_info("The current CST (local) time is: [round_timestamp()].")
|
||||
. += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].")
|
||||
|
||||
/obj/item/storage/backpack/kanken //Donor item for LT3
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
var/eyes_opacity = 255
|
||||
|
||||
/datum/preference/numeric/eyes_opacity
|
||||
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
. = ..()
|
||||
|
||||
if (isitem(source))
|
||||
source.AddElement(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN)
|
||||
source.AddComponent(/datum/component/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN)
|
||||
|
||||
/datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot)
|
||||
/* /datum/material/silver/on_removed(atom/source, mat_amount, multiplier, from_slot)
|
||||
. = ..()
|
||||
|
||||
source.RemoveElement(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN)
|
||||
source.RemoveElementSource(/datum/element/bane, /datum/species/lycan, damage_multiplier = 2, requires_combat_mode = FALSE, bane_damage_override = BURN)
|
||||
|
||||
//this component should be removed when silver is naturally removed, it should be possible for silver to be removed without this proc being called.
|
||||
*/
|
||||
|
||||
@@ -23,5 +23,5 @@
|
||||
/obj/item/nullrod/whip/Initialize(mapload)
|
||||
. = ..()
|
||||
// 1.3 * 18 = 23.4 per hit
|
||||
AddElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.3)
|
||||
AddComponent(/datum/component/bane, affected_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.3)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/human/update_underwear()
|
||||
/mob/living/carbon/human/get_underwear_overlays()
|
||||
remove_overlay(BODY_LAYER)
|
||||
if(HAS_TRAIT(src, TRAIT_INVISIBLE_MAN))
|
||||
return
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
return
|
||||
var/obj/item/ammo_casing/ammo_type = loaded_magazine.ammo_type
|
||||
var/ammo_caliber = initial(ammo_type.caliber)
|
||||
var/obj/item/ammo_casing/ammo_parent_type = type2parent(ammo_type)
|
||||
var/obj/item/ammo_casing/ammo_parent_type = ammo_type::parent_type
|
||||
|
||||
if(loaded_magazine.multitype)
|
||||
if(ammo_caliber == initial(ammo_parent_type.caliber) && ammo_caliber != null)
|
||||
|
||||
Reference in New Issue
Block a user