Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into tggenetics
This commit is contained in:
@@ -2109,7 +2109,6 @@
|
||||
/turf/closed/indestructible/riveted,
|
||||
/area/space)
|
||||
"fy" = (
|
||||
/obj/machinery/igniter/on,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/tdome/arena_source)
|
||||
@@ -15119,7 +15118,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/tdome/tdomeobserve)
|
||||
"Is" = (
|
||||
/obj/machinery/igniter/on,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/tdome/arena)
|
||||
|
||||
@@ -0,0 +1,414 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/survivalpod)
|
||||
"b" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 1
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/survivalpod)
|
||||
"c" = (
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"d" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 1
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"e" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 8
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"f" = (
|
||||
/obj/structure/table/wood/fancy/black,
|
||||
/obj/machinery/chem_dispenser/drinks,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"g" = (
|
||||
/obj/structure/table/wood/fancy/black,
|
||||
/obj/machinery/chem_dispenser/drinks/beer,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"h" = (
|
||||
/obj/machinery/vending/boozeomat,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"i" = (
|
||||
/obj/item/book/manual/wiki/barman_recipes,
|
||||
/obj/item/reagent_containers/food/drinks/shaker,
|
||||
/obj/item/reagent_containers/rag,
|
||||
/obj/structure/table/wood/fancy/black,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"j" = (
|
||||
/obj/structure/table/wood/fancy/black,
|
||||
/obj/item/clipboard,
|
||||
/obj/item/toy/figure/bartender,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"k" = (
|
||||
/obj/structure/table/wood/fancy/black,
|
||||
/obj/item/storage/fancy/cigarettes/cigars,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/cohiba{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/storage/fancy/cigarettes/cigars/havana{
|
||||
pixel_y = 8
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"l" = (
|
||||
/obj/structure/table/wood/fancy/black,
|
||||
/obj/structure/reagent_dispensers/beerkeg,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"m" = (
|
||||
/obj/structure/closet/secure_closet/bar,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"n" = (
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/disposal/bin,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"o" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/disposalpipe/junction{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/survivalpod)
|
||||
"p" = (
|
||||
/obj/machinery/door/airlock/survival_pod/glass{
|
||||
req_access_txt = "25"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"q" = (
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"r" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"s" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/lighter{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/lighter,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"t" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"u" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/box/matches{
|
||||
pixel_x = -4;
|
||||
pixel_y = 8
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"v" = (
|
||||
/obj/machinery/door/window/survival_pod{
|
||||
req_access_txt = "25"
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"w" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"x" = (
|
||||
/obj/structure/chair/stool/bar,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"y" = (
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"z" = (
|
||||
/obj/machinery/vending/cigarette/beach,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"A" = (
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/disposal/bin,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"B" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 9
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"C" = (
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod,
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/survivalpod)
|
||||
"D" = (
|
||||
/obj/structure/chair/comfy/black,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"E" = (
|
||||
/obj/machinery/door/airlock/survival_pod,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/survivalpod)
|
||||
"F" = (
|
||||
/obj/structure/table/wood/fancy,
|
||||
/obj/item/reagent_containers/food/condiment/peppermill{
|
||||
pixel_x = -4;
|
||||
pixel_y = 12
|
||||
},
|
||||
/obj/item/reagent_containers/food/condiment/saltshaker{
|
||||
pixel_x = 4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"G" = (
|
||||
/obj/structure/urinal{
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/pod/light,
|
||||
/area/survivalpod)
|
||||
"H" = (
|
||||
/turf/open/floor/pod/light,
|
||||
/area/survivalpod)
|
||||
"I" = (
|
||||
/obj/structure/sink{
|
||||
dir = 4;
|
||||
pixel_x = 11
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/pod/light,
|
||||
/area/survivalpod)
|
||||
"J" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"K" = (
|
||||
/obj/structure/chair/comfy/black{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"L" = (
|
||||
/obj/machinery/vending/snack/random,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"M" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"N" = (
|
||||
/obj/structure/toilet{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/pod/light,
|
||||
/area/survivalpod)
|
||||
"O" = (
|
||||
/obj/structure/sign/mining/survival{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/survivalpod)
|
||||
"P" = (
|
||||
/obj/structure/sign/mining/survival,
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/survivalpod)
|
||||
"Q" = (
|
||||
/obj/structure/sign/mining/survival,
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/survivalpod)
|
||||
"R" = (
|
||||
/obj/machinery/door/airlock/survival_pod/glass,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
e
|
||||
p
|
||||
e
|
||||
c
|
||||
e
|
||||
C
|
||||
e
|
||||
C
|
||||
e
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
b
|
||||
f
|
||||
q
|
||||
s
|
||||
x
|
||||
y
|
||||
D
|
||||
F
|
||||
K
|
||||
L
|
||||
P
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
c
|
||||
g
|
||||
q
|
||||
t
|
||||
x
|
||||
y
|
||||
y
|
||||
y
|
||||
y
|
||||
M
|
||||
c
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
d
|
||||
h
|
||||
q
|
||||
t
|
||||
x
|
||||
y
|
||||
D
|
||||
F
|
||||
K
|
||||
y
|
||||
Q
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
c
|
||||
i
|
||||
q
|
||||
u
|
||||
x
|
||||
y
|
||||
D
|
||||
F
|
||||
K
|
||||
y
|
||||
c
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
d
|
||||
j
|
||||
q
|
||||
t
|
||||
x
|
||||
y
|
||||
y
|
||||
y
|
||||
y
|
||||
y
|
||||
R
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
c
|
||||
k
|
||||
q
|
||||
t
|
||||
x
|
||||
y
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
d
|
||||
l
|
||||
q
|
||||
t
|
||||
x
|
||||
y
|
||||
c
|
||||
G
|
||||
H
|
||||
H
|
||||
Q
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
c
|
||||
m
|
||||
q
|
||||
v
|
||||
y
|
||||
y
|
||||
E
|
||||
H
|
||||
c
|
||||
E
|
||||
c
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
b
|
||||
n
|
||||
q
|
||||
t
|
||||
z
|
||||
A
|
||||
c
|
||||
I
|
||||
c
|
||||
N
|
||||
P
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
a
|
||||
o
|
||||
r
|
||||
w
|
||||
r
|
||||
B
|
||||
c
|
||||
J
|
||||
c
|
||||
O
|
||||
a
|
||||
"}
|
||||
@@ -9,13 +9,12 @@
|
||||
#define META_GAS_FUSION_POWER 7
|
||||
//ATMOS
|
||||
//stuff you should probably leave well alone!
|
||||
#define R_IDEAL_GAS_EQUATION 8.31446261815324 //kPa*L/(K*mol)
|
||||
#define ONE_ATMOSPHERE 101.325 //kPa
|
||||
#define TCMB 2.7 // -270.3degC
|
||||
#define TCRYO 225 // -48.15degC
|
||||
#define T0C 273.15 // 0degC
|
||||
#define T20C 293.15 // 20degC
|
||||
#define STEFANBOLTZMANN (5.670373*10e-8) // W/(m^2*K^4)
|
||||
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
|
||||
#define ONE_ATMOSPHERE 101.325 //kPa
|
||||
#define TCMB 2.7 // -270.3degC
|
||||
#define TCRYO 225 // -48.15degC
|
||||
#define T0C 273.15 // 0degC
|
||||
#define T20C 293.15 // 20degC
|
||||
|
||||
#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
|
||||
#define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity
|
||||
@@ -150,9 +149,9 @@
|
||||
|
||||
//OPEN TURF ATMOS
|
||||
#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn
|
||||
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms
|
||||
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms
|
||||
#define AIRLESS_ATMOS "TEMP=2.7" //space
|
||||
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs
|
||||
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs
|
||||
#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
|
||||
|
||||
//ATMOSPHERICS DEPARTMENT GAS TANK TURFS
|
||||
|
||||
@@ -109,8 +109,16 @@
|
||||
#define MEDIHOUND_SLEEPER (1<<0)
|
||||
#define EATING_NOISES (1<<1)
|
||||
#define DIGESTION_NOISES (1<<2)
|
||||
#define BREAST_ENLARGEMENT (1<<3)
|
||||
#define PENIS_ENLARGEMENT (1<<4)
|
||||
#define FORCED_FEM (1<<5)
|
||||
#define FORCED_MASC (1<<6)
|
||||
#define HYPNO (1<<7)
|
||||
#define NEVER_HYPNO (1<<8)
|
||||
#define NO_APHRO (1<<9)
|
||||
#define NO_ASS_SLAP (1<<10)
|
||||
|
||||
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES)
|
||||
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES|BREAST_ENLARGEMENT|PENIS_ENLARGEMENT)
|
||||
|
||||
//component stuff
|
||||
#define COMSIG_COMBAT_TOGGLED "combatmode_toggled" //called by combat mode toggle on all equipped items. args: (mob/user, combatmode)
|
||||
|
||||
@@ -528,3 +528,5 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
|
||||
#define FOURSPACES " "
|
||||
|
||||
#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
|
||||
|
||||
#define CANT_REENTER_ROUND -1
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
#define TRAIT_NORUNNING "norunning" // You walk!
|
||||
#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
|
||||
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
|
||||
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
|
||||
|
||||
|
||||
//non-mob traits
|
||||
@@ -160,17 +161,15 @@
|
||||
#define TRAIT_TAGGER "tagger"
|
||||
#define TRAIT_PHOTOGRAPHER "photographer"
|
||||
#define TRAIT_MUSICIAN "musician"
|
||||
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
|
||||
#define TRAIT_NYMPHO "nymphomania"
|
||||
#define TRAIT_MASO "masochism"
|
||||
#define TRAIT_EXHIBITIONIST "exhibitionist"
|
||||
#define TRAIT_HIGH_BLOOD "high_blood"
|
||||
#define TRAIT_PHARMA "hepatic_pharmacokinesis"
|
||||
#define TRAIT_PARA "paraplegic"
|
||||
#define TRAIT_EMPATH "empath"
|
||||
#define TRAIT_FRIENDLY "friendly"
|
||||
#define TRAIT_ASSBLASTUSA "assblastusa"
|
||||
#define TRAIT_CULT_EYES "cult_eyes"
|
||||
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
|
||||
#define TRAIT_FREESPRINT "free_sprinting"
|
||||
#define TRAIT_XRAY_VISION "xray_vision"
|
||||
#define TRAIT_THERMAL_VISION "thermal_vision"
|
||||
@@ -195,6 +194,7 @@
|
||||
#define ABSTRACT_ITEM_TRAIT "abstract-item"
|
||||
#define STATUS_EFFECT_TRAIT "status-effect"
|
||||
#define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention
|
||||
#define GHOSTROLE_TRAIT "ghostrole"
|
||||
|
||||
// unique trait sources, still defines
|
||||
#define STATUE_MUTE "statue"
|
||||
@@ -230,6 +230,7 @@
|
||||
#define SLEEPING_CARP_TRAIT "sleeping_carp"
|
||||
#define RISING_BASS_TRAIT "rising_bass"
|
||||
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
|
||||
#define NUKEOP_ANTAGONIST "nukeop-antagonist"
|
||||
#define MADE_UNCLONEABLE "made-uncloneable"
|
||||
#define NUKEOP_TRAIT "nuke-op"
|
||||
#define DEATHSQUAD_TRAIT "deathsquad"
|
||||
|
||||
@@ -447,7 +447,7 @@
|
||||
var/list/candidates = list()
|
||||
|
||||
for(var/mob/dead/observer/G in GLOB.player_list)
|
||||
if(G.reenter_round_timeout < world.realtime)
|
||||
if(G.can_reenter_round(TRUE))
|
||||
candidates += G
|
||||
|
||||
return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates)
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
else
|
||||
return "000"
|
||||
|
||||
#define UNDIE_COLORABLE(U) (U?.has_color)
|
||||
|
||||
/proc/random_underwear(gender)
|
||||
if(!GLOB.underwear_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/bottom, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f)
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
var/list/mob_data = list()
|
||||
if(isnewplayer(m))
|
||||
continue
|
||||
if (m.client && m.client.prefs && m.client.prefs.auto_ooc)
|
||||
if (!(m.client.prefs.chat_toggles & CHAT_OOC))
|
||||
m.client.prefs.chat_toggles ^= CHAT_OOC
|
||||
if(m.mind)
|
||||
if(m.stat != DEAD && !isbrain(m) && !iscameramob(m))
|
||||
num_survivors++
|
||||
|
||||
@@ -115,5 +115,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/clothing/shoes/kindleKicks = 1,
|
||||
/obj/item/autosurgeon/penis = 1,
|
||||
/obj/item/autosurgeon/testicles = 1,
|
||||
/obj/item/storage/box/marshmallow = 2,
|
||||
"" = 3
|
||||
))
|
||||
|
||||
@@ -401,6 +401,9 @@ SUBSYSTEM_DEF(ticker)
|
||||
qdel(player)
|
||||
living.notransform = TRUE
|
||||
if(living.client)
|
||||
if (living.client.prefs && living.client.prefs.auto_ooc)
|
||||
if (living.client.prefs.chat_toggles & CHAT_OOC)
|
||||
living.client.prefs.chat_toggles ^= CHAT_OOC
|
||||
var/obj/screen/splash/S = new(living.client, TRUE)
|
||||
S.Fade(TRUE)
|
||||
livings += living
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
if(ishuman(M) && source.force && source.get_sharpness())
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_HEAD) // Only sleeping, neck grabbed, or crit, can be sliced.
|
||||
if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_PRECISE_MOUTH) // Only sleeping, neck grabbed, or crit, can be sliced.
|
||||
if(H.has_status_effect(/datum/status_effect/neck_slice))
|
||||
user.show_message("<span class='warning'>[H]'s neck has already been already cut, you can't make the bleeding any worse!</span>", 1, \
|
||||
"<span class='warning'>Their neck has already been already cut, you can't make the bleeding any worse!</span>")
|
||||
@@ -120,4 +120,4 @@
|
||||
if(eater.safety_mode || (eater.stat & (BROKEN|NOPOWER))) //I'm so sorry.
|
||||
return
|
||||
if(L.stat == DEAD && (L.butcher_results || L.guaranteed_butcher_results))
|
||||
Butcher(parent, L)
|
||||
Butcher(parent, L)
|
||||
|
||||
@@ -135,6 +135,9 @@
|
||||
if(L.client && L.client.prefs)
|
||||
L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting...
|
||||
L.update_arousal_hud() //Removes the old icon
|
||||
if (L.client.prefs.auto_ooc)
|
||||
if (L.client.prefs.chat_toggles & CHAT_OOC)
|
||||
L.client.prefs.chat_toggles ^= CHAT_OOC
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
var/turf/master_turf //The center of the wave
|
||||
var/steps=0 //How far we've moved
|
||||
var/intensity //How strong it was originaly
|
||||
var/remaining_contam //How much contaminated material it still has
|
||||
var/range_modifier //Higher than 1 makes it drop off faster, 0.5 makes it drop off half etc
|
||||
var/move_dir //The direction of movement
|
||||
var/list/__dirs //The directions to the side of the wave, stored for easy looping
|
||||
@@ -18,6 +19,7 @@
|
||||
__dirs+=turn(dir, -90)
|
||||
|
||||
intensity = _intensity
|
||||
remaining_contam = intensity
|
||||
range_modifier = _range_modifier
|
||||
can_contaminate = _can_contaminate
|
||||
|
||||
@@ -46,8 +48,9 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
radiate(atoms, FLOOR(strength, 1))
|
||||
|
||||
if(radiate(atoms, FLOOR(min(strength,remaining_contam), 1)))
|
||||
//oof ow ouch
|
||||
remaining_contam = max(0,remaining_contam-((min(strength,remaining_contam)-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT))
|
||||
check_obstructions(atoms) // reduce our overall strength if there are radiation insulators
|
||||
|
||||
/datum/radiation_wave/proc/get_rad_atoms()
|
||||
@@ -89,7 +92,8 @@
|
||||
intensity *= (1-((1-thing.rad_insulation)/width))
|
||||
|
||||
/datum/radiation_wave/proc/radiate(list/atoms, strength)
|
||||
var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier))
|
||||
var/can_contam = strength >= RAD_MINIMUM_CONTAMINATION
|
||||
var/list/contam_atoms = list()
|
||||
for(var/k in 1 to atoms.len)
|
||||
var/atom/thing = atoms[k]
|
||||
if(!thing)
|
||||
@@ -109,8 +113,14 @@
|
||||
))
|
||||
if(!can_contaminate || blacklisted[thing.type])
|
||||
continue
|
||||
if(prob(contamination_chance)) // Only stronk rads get to have little baby rads
|
||||
if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
|
||||
continue
|
||||
var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
|
||||
if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
|
||||
continue
|
||||
contam_atoms += thing
|
||||
var/did_contam = 0
|
||||
if(length(can_contam))
|
||||
var/rad_strength = ((strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT)/contam_atoms.len
|
||||
for(var/k in 1 to contam_atoms.len)
|
||||
var/atom/thing = contam_atoms[k]
|
||||
thing.AddComponent(/datum/component/radioactive, rad_strength, source)
|
||||
did_contam = 1
|
||||
return did_contam
|
||||
|
||||
@@ -88,15 +88,6 @@
|
||||
if(quirk_holder)
|
||||
quirk_holder.remove_client_colour(/datum/client_colour/monochrome)
|
||||
|
||||
/datum/quirk/crocrin_immunity
|
||||
name = "Crocin Immunity"
|
||||
desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction."
|
||||
mob_trait = TRAIT_CROCRIN_IMMUNE
|
||||
value = 0
|
||||
gain_text = "<span class='notice'>You feel more prudish.</span>"
|
||||
lose_text = "<span class='notice'>You don't feel as prudish as before.</span>"
|
||||
medical_record_text = "Patient exhibits a special gene that makes them immune to aphrodisiacs."
|
||||
|
||||
/datum/quirk/libido
|
||||
name = "Nymphomania"
|
||||
desc = "You're always feeling a bit in heat. Also, you get aroused faster than usual."
|
||||
@@ -130,23 +121,3 @@
|
||||
mob_trait = TRAIT_EXHIBITIONIST
|
||||
gain_text = "<span class='notice'>You feel like exposing yourself to the world.</span>"
|
||||
lose_text = "<span class='notice'>Indecent exposure doesn't sound as charming to you anymore.</span>"
|
||||
|
||||
/datum/quirk/pharmacokinesis //Prevents unwanted organ additions.
|
||||
name = "Acute hepatic pharmacokinesis"
|
||||
desc = "You've a rare genetic disorder that causes Incubus draft and Sucubus milk to be absorbed by your liver instead."
|
||||
value = 0
|
||||
mob_trait = TRAIT_PHARMA
|
||||
lose_text = "<span class='notice'>Your liver feels different.</span>"
|
||||
medical_record_text = "Non-invasive tests report that the patient's metabolism is indeed incompatible with a certain \"stimulants\"."
|
||||
var/active = FALSE
|
||||
var/power = 0
|
||||
var/cachedmoveCalc = 1
|
||||
|
||||
/datum/quirk/assblastusa
|
||||
name = "Buns of Steel"
|
||||
desc = "You've never skipped ass day. With this trait, you are completely immune to all forms of ass slapping and anyone who tries to slap your rock hard ass usually gets a broken hand."
|
||||
mob_trait = TRAIT_ASSBLASTUSA
|
||||
value = 0
|
||||
medical_record_text = "Patient never skipped ass day."
|
||||
gain_text = "<span class='notice'>Your ass rivals those of golems.</span>"
|
||||
lose_text = "<span class='notice'>Your butt feels more squishy and slappable.</span>"
|
||||
@@ -515,10 +515,10 @@
|
||||
step(src, AM.dir)
|
||||
..()
|
||||
|
||||
/atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback)
|
||||
return throw_at(target, range, speed, thrower, spin, diagonals_first, callback)
|
||||
/atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback, messy_throw = TRUE)
|
||||
return throw_at(target, range, speed, thrower, spin, diagonals_first, callback, messy_throw)
|
||||
|
||||
/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback) //If this returns FALSE then callback will not be called.
|
||||
/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback, messy_throw = TRUE) //If this returns FALSE then callback will not be called.
|
||||
. = FALSE
|
||||
if (!target || speed <= 0)
|
||||
return
|
||||
|
||||
@@ -57,7 +57,6 @@
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
H.dna.add_mutation(CLOWNMUT)
|
||||
H.dna.add_mutation(SMILE)
|
||||
|
||||
/datum/outfit/syndicate/clownop/leader
|
||||
|
||||
@@ -741,7 +741,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
if (M.mind && (M.mind.special_role || M.mind.antag_datums?.len > 0))
|
||||
current_players[CURRENT_LIVING_ANTAGS].Add(M)
|
||||
else
|
||||
if (istype(M,/mob/dead/observer))
|
||||
if (isobserver(M))
|
||||
var/mob/dead/observer/O = M
|
||||
if (O.started_as_observer) // Observers
|
||||
current_players[CURRENT_OBSERVERS].Add(M)
|
||||
|
||||
@@ -222,5 +222,21 @@
|
||||
|
||||
. += "\t<span class='notice'>[attached ? attached : "No one"] is attached.</span>"
|
||||
|
||||
/obj/machinery/iv_drip/telescopic
|
||||
name = "telescopic IV drip"
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down."
|
||||
icon_state = "iv_drip"
|
||||
|
||||
/obj/machinery/iv_drip/telescopic/update_icon()
|
||||
..()
|
||||
icon_state = icon_state + "_tele"
|
||||
|
||||
/obj/machinery/iv_drip/telescopic/AltClick(mob/user)
|
||||
if (attached || beaker || !user.canUseTopic(src, BE_CLOSE))
|
||||
return ..()
|
||||
new /obj/item/tele_iv(get_turf(src))
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
#undef IV_TAKING
|
||||
#undef IV_INJECTING
|
||||
#undef IV_INJECTING
|
||||
|
||||
@@ -578,21 +578,22 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
itempush = 0 //too light to push anything
|
||||
return A.hitby(src, 0, itempush)
|
||||
|
||||
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, messy_throw = TRUE)
|
||||
thrownby = thrower
|
||||
callback = CALLBACK(src, .proc/after_throw, callback) //replace their callback with our own
|
||||
callback = CALLBACK(src, .proc/after_throw, callback, (spin && messy_throw)) //replace their callback with our own
|
||||
. = ..(target, range, speed, thrower, spin, diagonals_first, callback)
|
||||
|
||||
/obj/item/proc/after_throw(datum/callback/callback)
|
||||
/obj/item/proc/after_throw(datum/callback/callback, messy_throw)
|
||||
if (callback) //call the original callback
|
||||
. = callback.Invoke()
|
||||
throw_speed = initial(throw_speed) //explosions change this.
|
||||
item_flags &= ~IN_INVENTORY
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(rand(-170, 170))
|
||||
transform = M
|
||||
pixel_x = rand(-8, 8)
|
||||
pixel_y = rand(-8, 8)
|
||||
if(messy_throw)
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(rand(-170, 170))
|
||||
transform = M
|
||||
pixel_x = rand(-8, 8)
|
||||
pixel_y = rand(-8, 8)
|
||||
|
||||
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage
|
||||
if(!newLoc)
|
||||
|
||||
@@ -1259,3 +1259,12 @@
|
||||
var/obj/item/stack/sheet/cardboard/I = new(user.drop_location())
|
||||
qdel(src)
|
||||
user.put_in_hands(I)
|
||||
|
||||
/obj/item/storage/box/marshmallow
|
||||
name = "box of marshmallows"
|
||||
desc = "A box of marshmallows."
|
||||
illustration = "marshmallow"
|
||||
|
||||
/obj/item/storage/box/marshmallow/PopulateContents()
|
||||
for (var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
|
||||
@@ -0,0 +1,17 @@
|
||||
/obj/item/tele_iv
|
||||
name = "telescopic IV drip"
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down."
|
||||
icon = 'icons/obj/iv_drip.dmi'
|
||||
icon_state = "tele_iv"
|
||||
|
||||
/obj/item/tele_iv/attack_self(mob/user)
|
||||
deploy_iv(user, user.loc)
|
||||
|
||||
/obj/item/tele_iv/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(proximity && isopenturf(target) && user.CanReach(target))
|
||||
deploy_iv(user, target)
|
||||
|
||||
/obj/item/tele_iv/proc/deploy_iv(mob/user, atom/location)
|
||||
new /obj/machinery/iv_drip/telescopic(location)
|
||||
qdel(src)
|
||||
@@ -80,13 +80,12 @@
|
||||
SEND_SIGNAL(src, COMSIG_OBJ_SETANCHORED, anchorvalue)
|
||||
anchored = anchorvalue
|
||||
|
||||
/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
..()
|
||||
/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, messy_throw)
|
||||
. = ..()
|
||||
if(obj_flags & FROZEN)
|
||||
visible_message("<span class='danger'>[src] shatters into a million pieces!</span>")
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/assume_air(datum/gas_mixture/giver)
|
||||
if(loc)
|
||||
return loc.assume_air(giver)
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
return
|
||||
|
||||
var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")
|
||||
if(!UNDIE_COLORABLE(GLOB.underwear_list[H.underwear]))
|
||||
if(!(GLOB.underwear_list[H.underwear]?.has_color))
|
||||
undergarment_choices -= "Underwear Color"
|
||||
if(!UNDIE_COLORABLE(GLOB.undershirt_list[H.undershirt]))
|
||||
if(!(GLOB.undershirt_list[H.undershirt]?.has_color))
|
||||
undergarment_choices -= "Undershirt Color"
|
||||
if(!UNDIE_COLORABLE(GLOB.socks_list[H.socks]))
|
||||
if(!(GLOB.socks_list[H.socks]?.has_color))
|
||||
undergarment_choices -= "Socks Color"
|
||||
|
||||
var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
new/obj/structure/fluff/empty_terrarium(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/human/seed_vault/special(mob/living/carbon/human/new_spawn)
|
||||
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
|
||||
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker
|
||||
@@ -251,6 +253,9 @@
|
||||
new/obj/structure/fluff/empty_cryostasis_sleeper(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/human/hermit/special(mob/living/carbon/human/new_spawn)
|
||||
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
|
||||
|
||||
//Broken rejuvenation pod: Spawns in animal hospitals in lavaland. Ghosts become disoriented interns and are advised to search for help.
|
||||
/obj/effect/mob_spawn/human/doctor/alive/lavaland
|
||||
name = "broken rejuvenation pod"
|
||||
@@ -353,6 +358,9 @@
|
||||
new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src))
|
||||
..()
|
||||
|
||||
/obj/effect/mob_spawn/human/hotel_staff/special(mob/living/carbon/human/new_spawn)
|
||||
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
|
||||
|
||||
/obj/effect/mob_spawn/human/demonic_friend
|
||||
name = "Essence of friendship"
|
||||
desc = "Oh boy! Oh boy! A friend!"
|
||||
@@ -618,6 +626,7 @@
|
||||
O.equip(new_spawn, FALSE, new_spawn.client)
|
||||
SSjob.equip_loadout(null, new_spawn, FALSE)
|
||||
SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
|
||||
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
|
||||
|
||||
/datum/outfit/ghostcafe
|
||||
name = "ID, jumpsuit and shoes"
|
||||
@@ -639,4 +648,4 @@
|
||||
uniform = /obj/item/clothing/under/color/random
|
||||
else
|
||||
uniform = /obj/item/clothing/under/skirt/color/random
|
||||
|
||||
|
||||
|
||||
@@ -492,7 +492,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] assumed direct control of [M].</span>")
|
||||
log_admin("[key_name(usr)] assumed direct control of [M].")
|
||||
var/mob/adminmob = src.mob
|
||||
M.ckey = src.ckey
|
||||
adminmob.transfer_ckey(M, send_signal = FALSE)
|
||||
if( isobserver(adminmob) )
|
||||
qdel(adminmob)
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_shield"
|
||||
desc = "A solid wall of slightly twitching tendrils."
|
||||
var/damaged_desc = "A wall of twitching tendrils."
|
||||
max_integrity = 150
|
||||
brute_resist = 0.25
|
||||
explosion_block = 3
|
||||
@@ -21,10 +22,10 @@
|
||||
|
||||
/obj/structure/blob/shield/update_icon()
|
||||
..()
|
||||
if(obj_integrity <= 70)
|
||||
icon_state = "blob_shield_damaged"
|
||||
name = "weakened strong blob"
|
||||
desc = "A wall of twitching tendrils."
|
||||
if(obj_integrity < max_integrity * 0.5)
|
||||
icon_state = "[initial(icon_state)]_damaged"
|
||||
name = "weakened [initial(name)]"
|
||||
desc = "[damaged_desc]"
|
||||
atmosblock = FALSE
|
||||
if(!weakened)
|
||||
armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
@@ -37,4 +38,27 @@
|
||||
if(weakened)
|
||||
armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
weakened = FALSE
|
||||
air_update_turf(1)
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/blob/shield/reflective
|
||||
name = "reflective blob"
|
||||
desc = "A solid wall of slightly twitching tendrils with a reflective glow."
|
||||
damaged_desc = "A wall of twitching tendrils with a reflective glow."
|
||||
icon_state = "blob_glow"
|
||||
flags_1 = CHECK_RICOCHET_1
|
||||
point_return = 8
|
||||
max_integrity = 50
|
||||
brute_resist = 1
|
||||
explosion_block = 2
|
||||
|
||||
/obj/structure/blob/shield/reflective/handle_ricochet(obj/item/projectile/P)
|
||||
var/turf/p_turf = get_turf(P)
|
||||
var/face_direction = get_dir(src, p_turf)
|
||||
var/face_angle = dir2angle(face_direction)
|
||||
var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (P.Angle + 180))
|
||||
if(abs(incidence_s) > 90 && abs(incidence_s) < 270)
|
||||
return FALSE
|
||||
var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s)
|
||||
P.setAngle(new_angle_s)
|
||||
visible_message("<span class='warning'>[P] reflects off [src]!</span>")
|
||||
return TRUE
|
||||
@@ -113,12 +113,22 @@
|
||||
|
||||
/mob/camera/blob/verb/create_shield_power()
|
||||
set category = "Blob"
|
||||
set name = "Create Shield Blob (15)"
|
||||
set desc = "Create a shield blob, which will block fire and is hard to kill."
|
||||
set name = "Create/Upgrade Shield Blob (15)"
|
||||
set desc = "Create a shield blob, which will block fire and is hard to kill. Using this on an existing shield blob turns it into a reflective blob, capable of reflecting most projectiles but making it much weaker than usual to brute attacks."
|
||||
create_shield()
|
||||
|
||||
/mob/camera/blob/proc/create_shield(turf/T)
|
||||
createSpecial(15, /obj/structure/blob/shield, 0, 0, T)
|
||||
var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T
|
||||
if(S)
|
||||
if(!can_buy(15))
|
||||
return
|
||||
if(S.obj_integrity < S.max_integrity * 0.5)
|
||||
to_chat(src, "<span class='warning'>This shield blob is too damaged to be modified properly!</span>")
|
||||
return
|
||||
to_chat(src, "<span class='warning'>You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced intregrity.</span>")
|
||||
S.change_to(/obj/structure/blob/shield/reflective, src)
|
||||
else
|
||||
createSpecial(15, /obj/structure/blob/shield, 0, 0, T)
|
||||
|
||||
/mob/camera/blob/verb/create_resource()
|
||||
set category = "Blob"
|
||||
@@ -359,7 +369,7 @@
|
||||
to_chat(src, "<b>You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.</b>")
|
||||
to_chat(src, "<i>Normal Blobs</i> will expand your reach and can be upgraded into special blobs that perform certain functions.")
|
||||
to_chat(src, "<b>You can upgrade normal blobs into the following types of blob:</b>")
|
||||
to_chat(src, "<i>Shield Blobs</i> are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires.")
|
||||
to_chat(src, "<i>Shield Blobs</i> are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires. Upgrading them again will result in a reflective blob, capable of reflecting most projectiles at the cost of the strong blob's extra health.")
|
||||
to_chat(src, "<i>Resource Blobs</i> are blobs which produce more resources for you, build as many of these as possible to consume the station. This type of blob must be placed near node blobs or your core to work.")
|
||||
to_chat(src, "<i>Factory Blobs</i> are blobs that spawn blob spores which will attack nearby enemies. This type of blob must be placed near node blobs or your core to work.")
|
||||
to_chat(src, "<i>Blobbernauts</i> can be produced from factories for a cost, and are hard to kill, powerful, and moderately smart. The factory used to create one will become fragile and briefly unable to produce spores.")
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
BuyPower(new /datum/action/bloodsucker/masquerade)
|
||||
BuyPower(new /datum/action/bloodsucker/veil)
|
||||
// Traits
|
||||
for (var/T in defaultTraits)
|
||||
for(var/T in defaultTraits)
|
||||
ADD_TRAIT(owner.current, T, "bloodsucker")
|
||||
if(HAS_TRAIT(owner.current, TRAIT_TOXINLOVER)) //No slime bonuses here, no thank you
|
||||
had_toxlover = TRUE
|
||||
@@ -200,10 +200,10 @@
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
var/datum/species/S = H.dna.species
|
||||
// Make Changes
|
||||
S.brutemod *= 0.5 // <-------------------- Start small, but burn mod increases based on rank!
|
||||
S.coldmod = 0
|
||||
S.stunmod *= 0.25
|
||||
S.siemens_coeff *= 0.75 //base electrocution coefficient 1
|
||||
H.physiology.brute_mod *= 0.8 // <-------------------- Start small, but burn mod increases based on rank!
|
||||
H.physiology.cold_mod = 0
|
||||
H.physiology.stun_mod *= 0.35
|
||||
H.physiology.siemens_coeff *= 0.75 //base electrocution coefficient 1
|
||||
//S.heatmod += 0.5 // Heat shouldn't affect. Only Fire.
|
||||
//S.punchstunthreshold = 8 //damage at which punches from this race will stun 9
|
||||
S.punchdamagelow += 1 //lowest possible punch damage 0
|
||||
@@ -319,12 +319,10 @@ datum/antagonist/bloodsucker/proc/SpendRank()
|
||||
if(ishuman(owner.current))
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
var/datum/species/S = H.dna.species
|
||||
S.burnmod *= 0.025 // Slightly more burn damage
|
||||
S.stunmod *= 0.95 // Slightly less stun time.
|
||||
S.punchdamagelow += 0.5
|
||||
S.punchdamagehigh += 0.5 // NOTE: This affects the hitting power of Brawn.
|
||||
// More Health
|
||||
owner.current.setMaxHealth(owner.current.maxHealth + 5)
|
||||
owner.current.setMaxHealth(owner.current.maxHealth + 10)
|
||||
// Vamp Stats
|
||||
regenRate += 0.05 // Points of brute healed (starts at 0.3)
|
||||
feedAmount += 2 // Increase how quickly I munch down vics (15)
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
// All done!
|
||||
if(convert_progress <= 0)
|
||||
// FAIL: Can't be Vassal
|
||||
if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) && HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY
|
||||
if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) || HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY
|
||||
to_chat(user, "<span class='danger'>[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you, they either have a mindshield or their external loyalties are too difficult for you to break.<i>\[ALT+click to release\]</span>")
|
||||
convert_progress ++ // Pop it back up some. Avoids wasting Blood on a lost cause.
|
||||
// SUCCESS: All done!
|
||||
|
||||
@@ -5,6 +5,14 @@
|
||||
antagpanel_category = "ClownOp"
|
||||
nukeop_outfit = /datum/outfit/syndicate/clownop
|
||||
|
||||
/datum/antagonist/nukeop/clownop/on_gain()
|
||||
. = ..()
|
||||
ADD_TRAIT(owner, TRAIT_CLOWN_MENTALITY, NUKEOP_ANTAGONIST)
|
||||
|
||||
/datum/antagonist/nukeop/clownop/on_removal()
|
||||
REMOVE_TRAIT(owner, TRAIT_CLOWN_MENTALITY, NUKEOP_ANTAGONIST)
|
||||
return ..()
|
||||
|
||||
/datum/antagonist/nukeop/leader/clownop
|
||||
name = "Clown Operative Leader"
|
||||
roundend_category = "clown operatives"
|
||||
|
||||
@@ -154,11 +154,6 @@
|
||||
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
|
||||
var/target_temperature
|
||||
var/target_heat_capacity
|
||||
// first calculate heat from radiation. there's an implied "* 1 tick" here.
|
||||
// 0.05 magic multiplicand is, first, 0.1 deciseconds; second, half of the radiation's going right back into the gas.
|
||||
var/share_constant = STEFANBOLTZMANN*(share_volume**(2/3))*0.05
|
||||
// Minimizing temp to 4 billion is mostly to prevent -infinity temperatures.
|
||||
var/heat = share_constant*(min(air.temperature,4000000000)**4)
|
||||
|
||||
if(isopenturf(target))
|
||||
|
||||
@@ -170,8 +165,8 @@
|
||||
|
||||
if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - target_temperature
|
||||
heat -= share_constant*(min(target_temperature,4000000000)**4)
|
||||
heat += thermal_conductivity*delta_temperature* \
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*target_heat_capacity/(partial_heat_capacity+target_heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
@@ -188,8 +183,7 @@
|
||||
var/sharer_temperature_delta = 0
|
||||
|
||||
if((sharer_heat_capacity>0) && (partial_heat_capacity>0))
|
||||
heat -= share_constant*(min(target_temperature,4000000000)**4)
|
||||
heat += thermal_conductivity*delta_temperature* \
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity))
|
||||
|
||||
self_temperature_delta = -heat/total_heat_capacity
|
||||
@@ -205,12 +199,10 @@
|
||||
if((target.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - target.temperature
|
||||
|
||||
heat -= share_constant*(min(target.temperature,4000000000)**4)
|
||||
heat += thermal_conductivity*delta_temperature* \
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
air.temperature = CLAMP(air.temperature,TCMB,INFINITY) // i have no idea why TCMB needs to be the min but i ain't changing it
|
||||
update = TRUE
|
||||
|
||||
/datum/pipeline/proc/return_air()
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
|
||||
var/turf/T = loc
|
||||
if(istype(T))
|
||||
if(T.blocks_air)
|
||||
if(islava(T))
|
||||
environment_temperature = 5000
|
||||
else if(T.blocks_air)
|
||||
environment_temperature = T.temperature
|
||||
else
|
||||
var/turf/open/OT = T
|
||||
|
||||
@@ -79,4 +79,8 @@
|
||||
var/client_keysend_amount = 0
|
||||
var/next_keysend_reset = 0
|
||||
var/next_keysend_trip_reset = 0
|
||||
var/keysend_tripped = FALSE
|
||||
var/keysend_tripped = FALSE
|
||||
|
||||
// stops players from coming back through ghost/midround roles after suicide/cryo
|
||||
// for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit)
|
||||
var/reenter_round_timeout = 0
|
||||
|
||||
@@ -245,6 +245,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<a href='?_src_=prefs;preference=tab;tab=2' [current_tab == 2 ? "class='linkOn'" : ""]>Character Appearance</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=tab;tab=3' [current_tab == 3 ? "class='linkOn'" : ""]>Loadout</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=tab;tab=1' [current_tab == 1 ? "class='linkOn'" : ""]>Game Preferences</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=tab;tab=4' [current_tab == 4 ? "class='linkOn'" : ""]>Content Preferences</a>"
|
||||
|
||||
if(!path)
|
||||
dat += "<div class='notice'>Please create an account to save your preferences</div>"
|
||||
@@ -721,13 +722,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h2>Clothing & Equipment</h2>"
|
||||
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.underwear_list[underwear]))
|
||||
if(GLOB.underwear_list[underwear]?.has_color)
|
||||
dat += "<b>Underwear Color:</b> <span style='border:1px solid #161616; background-color: #[undie_color];'> </span> <a href='?_src_=prefs;preference=undie_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Undershirt:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt]))
|
||||
if(GLOB.undershirt_list[undershirt]?.has_color)
|
||||
dat += "<b>Undershirt Color:</b> <span style='border:1px solid #161616; background-color: #[shirt_color];'> </span> <a href='?_src_=prefs;preference=shirt_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Socks:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks;task=input'>[socks]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.socks_list[socks]))
|
||||
if(GLOB.socks_list[socks]?.has_color)
|
||||
dat += "<b>Socks Color:</b> <span style='border:1px solid #161616; background-color: #[socks_color];'> </span> <a href='?_src_=prefs;preference=socks_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Backpack:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a>"
|
||||
dat += "<b>Jumpsuit:</b><BR><a href ='?_src_=prefs;preference=suit;task=input'>[jumpsuit_style]</a><BR>"
|
||||
@@ -834,13 +835,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
dat +="<td width='300px' height='300px' valign='top'>"
|
||||
dat += "<h2>Citadel Preferences</h2>" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe.
|
||||
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
|
||||
dat += "<b>Voracious MediHound sleepers:</b> <a href='?_src_=prefs;preference=hound_sleeper'>[(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Sounds:</b> <a href='?_src_=prefs;preference=toggleeatingnoise'>[(cit_toggles & EATING_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Digestion Sounds:</b> <a href='?_src_=prefs;preference=toggledigestionnoise'>[(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Lewdchem:</b><a href='?_src_=prefs;preference=lewdchem'>[lewdchem == TRUE ? "Enabled" : "Disabled"]</a><BR>"
|
||||
dat += "<b>Widescreen:</b> <a href='?_src_=prefs;preference=widescreenpref'>[widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]</a><br>"
|
||||
dat += "<b>Auto stand:</b> <a href='?_src_=prefs;preference=autostand'>[autostand ? "Enabled" : "Disabled"]</a><br>"
|
||||
dat += "<b>Auto OOC:</b> <a href='?_src_=prefs;preference=auto_ooc'>[auto_ooc ? "Enabled" : "Disabled"]</a><br>"
|
||||
dat += "<b>Screen Shake:</b> <a href='?_src_=prefs;preference=screenshake'>[(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]</a><br>"
|
||||
if (user && user.client && !user.client.prefs.screenshake==0)
|
||||
dat += "<b>Damage Screen Shake:</b> <a href='?_src_=prefs;preference=damagescreenshake'>[(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]</a><br>"
|
||||
@@ -991,6 +988,26 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</font>"
|
||||
dat += "</td><td><font size=2><i>[gear.description]</i></font></td></tr>"
|
||||
dat += "</table>"
|
||||
if(4) // Content preferences
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h2>Fetish content prefs</h2>"
|
||||
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
|
||||
dat += "<b>Voracious MediHound sleepers:</b> <a href='?_src_=prefs;preference=hound_sleeper'>[(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Sounds:</b> <a href='?_src_=prefs;preference=toggleeatingnoise'>[(cit_toggles & EATING_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Digestion Sounds:</b> <a href='?_src_=prefs;preference=toggledigestionnoise'>[(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Forced Feminization:</b> <a href='?_src_=prefs;preference=feminization'>[(cit_toggles & FORCED_FEM) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "<b>Forced Masculinization:</b> <a href='?_src_=prefs;preference=masculinization'>[(cit_toggles & FORCED_MASC) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "<b>Lewd Hypno:</b> <a href='?_src_=prefs;preference=hypno'>[(cit_toggles & HYPNO) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "</td>"
|
||||
dat +="<td width='300px' height='300px' valign='top'>"
|
||||
dat += "<h2>Other content prefs</h2>"
|
||||
dat += "<b>Breast Enlargement:</b> <a href='?_src_=prefs;preference=breast_enlargement'>[(cit_toggles & BREAST_ENLARGEMENT) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "<b>Penis Enlargement:</b> <a href='?_src_=prefs;preference=penis_enlargement'>[(cit_toggles & PENIS_ENLARGEMENT) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "<b>Hypno:</b> <a href='?_src_=prefs;preference=never_hypno'>[(cit_toggles & NEVER_HYPNO) ? "Disallowed" : "Allowed"]</a><br>"
|
||||
dat += "<b>Aphrodisiacs:</b> <a href='?_src_=prefs;preference=aphro'>[(cit_toggles & NO_APHRO) ? "Disallowed" : "Allowed"]</a><br>"
|
||||
dat += "<b>Ass Slapping:</b> <a href='?_src_=prefs;preference=ass_slap'>[(cit_toggles & NO_ASS_SLAP) ? "Disallowed" : "Allowed"]</a><br>"
|
||||
dat += "<br>"
|
||||
|
||||
|
||||
dat += "<hr><center>"
|
||||
|
||||
@@ -2036,8 +2053,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["genitals_use_skintone"] = !features["genitals_use_skintone"]
|
||||
if("arousable")
|
||||
arousable = !arousable
|
||||
if("lewdchem")
|
||||
lewdchem = !lewdchem
|
||||
if("has_cock")
|
||||
features["has_cock"] = !features["has_cock"]
|
||||
if(features["has_cock"] == FALSE)
|
||||
@@ -2069,6 +2084,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
user.client.change_view(CONFIG_GET(string/default_view))
|
||||
if("autostand")
|
||||
autostand = !autostand
|
||||
if("auto_ooc")
|
||||
auto_ooc = !auto_ooc
|
||||
if ("screenshake")
|
||||
var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num
|
||||
if (!isnull(desiredshake))
|
||||
@@ -2184,6 +2201,31 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
if("toggledigestionnoise")
|
||||
cit_toggles ^= DIGESTION_NOISES
|
||||
|
||||
if("breast_enlargement")
|
||||
cit_toggles ^= BREAST_ENLARGEMENT
|
||||
|
||||
if("penis_enlargement")
|
||||
cit_toggles ^= PENIS_ENLARGEMENT
|
||||
|
||||
if("feminization")
|
||||
cit_toggles ^= FORCED_FEM
|
||||
|
||||
if("masculinization")
|
||||
cit_toggles ^= FORCED_MASC
|
||||
|
||||
if("hypno")
|
||||
cit_toggles ^= HYPNO
|
||||
|
||||
if("never_hypno")
|
||||
cit_toggles ^= NEVER_HYPNO
|
||||
|
||||
if("aphro")
|
||||
cit_toggles ^= NO_APHRO
|
||||
|
||||
if("ass_slap")
|
||||
cit_toggles ^= NO_ASS_SLAP
|
||||
|
||||
//END CITADEL EDIT
|
||||
|
||||
if("ambientocclusion")
|
||||
|
||||
@@ -181,8 +181,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["widescreenpref"] >> widescreenpref
|
||||
S["autostand"] >> autostand
|
||||
S["cit_toggles"] >> cit_toggles
|
||||
S["lewdchem"] >> lewdchem
|
||||
S["preferred_chaos"] >> preferred_chaos
|
||||
S["auto_ooc"] >> auto_ooc
|
||||
|
||||
|
||||
//try to fix any outdated data if necessary
|
||||
@@ -219,7 +219,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref))
|
||||
autostand = sanitize_integer(autostand, 0, 1, initial(autostand))
|
||||
cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles))
|
||||
|
||||
auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc))
|
||||
|
||||
return 1
|
||||
|
||||
@@ -278,8 +278,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["widescreenpref"], widescreenpref)
|
||||
WRITE_FILE(S["autostand"], autostand)
|
||||
WRITE_FILE(S["cit_toggles"], cit_toggles)
|
||||
WRITE_FILE(S["lewdchem"], lewdchem)
|
||||
WRITE_FILE(S["preferred_chaos"], preferred_chaos)
|
||||
WRITE_FILE(S["auto_ooc"], auto_ooc)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -517,6 +517,21 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
all_quirks = SANITIZE_LIST(all_quirks)
|
||||
|
||||
for(var/V in all_quirks) // quirk migration
|
||||
switch(V)
|
||||
if("Acute hepatic pharmacokinesis")
|
||||
DISABLE_BITFIELD(cit_toggles, PENIS_ENLARGEMENT)
|
||||
DISABLE_BITFIELD(cit_toggles, BREAST_ENLARGEMENT)
|
||||
ENABLE_BITFIELD(cit_toggles,FORCED_FEM)
|
||||
ENABLE_BITFIELD(cit_toggles,FORCED_MASC)
|
||||
all_quirks -= V
|
||||
if("Crocin Immunity")
|
||||
ENABLE_BITFIELD(cit_toggles,NO_APHRO)
|
||||
all_quirks -= V
|
||||
if("Buns of Steel")
|
||||
ENABLE_BITFIELD(cit_toggles,NO_ASS_SLAP)
|
||||
all_quirks -= V
|
||||
|
||||
cit_character_pref_load(S)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -298,6 +298,33 @@ BLIND // can't see anything
|
||||
user.regenerate_icons()
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/neck/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
return
|
||||
// Polychrome stuff:
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays
|
||||
switch(choice) //Lets the list's options actually lead to something
|
||||
if("Primary Color")
|
||||
var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it.
|
||||
if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL.
|
||||
primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly
|
||||
update_icon() //updates the item icon
|
||||
user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works.
|
||||
if("Secondary Color")
|
||||
var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null
|
||||
if(secondary_color_input)
|
||||
secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
user.regenerate_icons()
|
||||
if("Tertiary Color")
|
||||
var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null
|
||||
if(tertiary_color_input)
|
||||
tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
user.regenerate_icons()
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/under/verb/jumpsuit_adjust()
|
||||
set name = "Adjust Jumpsuit Style"
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
for(var/i in rad_places)
|
||||
var/turf/place = i
|
||||
if(get_dist(user, place) >= range*2) //Rads are easier to see than wires under the floor
|
||||
if(get_dist(user, place) >= range*8) //Rads are easier to see than wires under the floor
|
||||
continue
|
||||
var/strength = round(rad_places[i] / 1000, 0.1)
|
||||
var/image/pic = new(loc = place)
|
||||
@@ -139,7 +139,6 @@
|
||||
item_state = "trayson-t-ray"
|
||||
desc = "Used by engineering staff to see underfloor objects such as cables and pipes."
|
||||
range = 2
|
||||
|
||||
modes = list(MODE_NONE = MODE_TRAY, MODE_TRAY = MODE_NONE)
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/tray/prescription
|
||||
@@ -152,7 +151,6 @@
|
||||
icon_state = "trayson-shuttle"
|
||||
item_state = "trayson-shuttle"
|
||||
desc = "Used to see the boundaries of shuttle regions."
|
||||
|
||||
modes = list(MODE_NONE = MODE_SHUTTLE, MODE_SHUTTLE = MODE_NONE)
|
||||
|
||||
#undef MODE_NONE
|
||||
|
||||
@@ -89,12 +89,12 @@
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(user.mind && user.mind.assigned_role == "Clown")
|
||||
if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))
|
||||
SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "noshoes")
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/dropped(mob/user)
|
||||
. = ..()
|
||||
if(user.mind && user.mind.assigned_role == "Clown")
|
||||
if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/jester
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown"))
|
||||
if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY)))
|
||||
return
|
||||
if(slot == SLOT_SHOES)
|
||||
spells = new
|
||||
|
||||
@@ -590,8 +590,7 @@
|
||||
/obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, slot)
|
||||
if(!..() || !ishuman(M))
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.mind.assigned_role == "Clown")
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_CLOWN_MENTALITY))
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
@@ -467,6 +467,33 @@
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/sundresswhite
|
||||
name = "white sundress"
|
||||
desc = "Makes you want to frolic in a field of lillies."
|
||||
icon_state = "sundress_white"
|
||||
item_color = "sundress_white"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/greendress
|
||||
name = "green dress"
|
||||
desc = "A tight green dress"
|
||||
icon_state = "dress_green"
|
||||
item_color = "dress_green"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/pinkdress
|
||||
name = "pink dress"
|
||||
desc = "A tight pink dress"
|
||||
icon_state = "dress_pink"
|
||||
item_color = "dress_pink"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/captainparade
|
||||
name = "captain's parade uniform"
|
||||
desc = "A captain's luxury-wear, for special occasions."
|
||||
@@ -509,6 +536,24 @@
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/westernbustle
|
||||
name = "western bustle dress"
|
||||
desc = "Filled with Western fire."
|
||||
icon_state = "western_bustle"
|
||||
item_state = "wcoat"
|
||||
item_color = "western_bustle"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/flamenco
|
||||
name = "flamenco dress"
|
||||
desc = "Filled with Latin fire."
|
||||
icon_state = "flamenco"
|
||||
item_state = "wcoat"
|
||||
item_color = "flamenco"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/stripeddress
|
||||
name = "striped dress"
|
||||
desc = "Fashion in space."
|
||||
@@ -529,6 +574,44 @@
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/flowerdress
|
||||
name = "flower dress"
|
||||
desc = "Lovely dress"
|
||||
icon_state = "flower_dress"
|
||||
item_state = "sailordress"
|
||||
item_color = "flower_dress"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/sweptskirt
|
||||
name = "swept skirt"
|
||||
desc = "Formal skirt"
|
||||
icon_state = "skirt_swept"
|
||||
item_color = "skirt_swept"
|
||||
body_parts_covered = GROIN
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/corset
|
||||
name = "black corset"
|
||||
desc = "Nanotrasen is not resposible for any organ damage"
|
||||
icon_state = "corset"
|
||||
item_color = "corset"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/croptop
|
||||
name = "crop top"
|
||||
desc = "We've saved money by giving you half a shirt!"
|
||||
icon_state = "sailor_dress"
|
||||
item_state = "sailordress"
|
||||
item_color = "sailor_dress"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/redeveninggown
|
||||
name = "red evening gown"
|
||||
desc = "Fancy dress for space bar singers."
|
||||
|
||||
@@ -75,3 +75,34 @@
|
||||
desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station."
|
||||
icon_state = "camopants"
|
||||
item_color = "camopants"
|
||||
|
||||
/obj/item/clothing/under/pants/jeanripped
|
||||
name = "ripped jeans"
|
||||
desc = "If you're wearing this you're poor or a rebel"
|
||||
icon_state = "jean_ripped"
|
||||
item_color = "jean_ripped"
|
||||
|
||||
/obj/item/clothing/under/pants/jeanshort
|
||||
name = "jean shorts"
|
||||
desc = "These are really just jeans cut in half"
|
||||
icon_state = "jean_shorts"
|
||||
item_color = "jean_shorts"
|
||||
|
||||
/obj/item/clothing/under/pants/denimskirt
|
||||
name = "denim skirt"
|
||||
desc = "These are really just a jean leg hole cut from a pair"
|
||||
icon_state = "denim_skirt"
|
||||
item_color = "denim_skirt"
|
||||
|
||||
/obj/item/clothing/under/pants/chaps
|
||||
name = "black chaps"
|
||||
body_parts_covered = LEGS
|
||||
desc = "Yeehaw"
|
||||
icon_state = "chaps"
|
||||
item_color = "chaps"
|
||||
|
||||
/obj/item/clothing/under/pants/yoga
|
||||
name = "yoga pants"
|
||||
desc = "Comfy!"
|
||||
icon_state = "yoga_pants"
|
||||
item_color = "yoga_pants"
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
continue
|
||||
if(!H.client)
|
||||
continue
|
||||
if(HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if(HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) //Don't pick someone who's virus immune, only for it to not do anything.
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/datum/round_event/heart_attack/start()
|
||||
var/list/heart_attack_contestants = list()
|
||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.player_list))
|
||||
if(!H.client || H.stat == DEAD || H.InCritical() || !H.can_heartattack() || H.has_status_effect(STATUS_EFFECT_EXERCISED) || (/datum/disease/heart_failure in H.diseases) || H.undergoing_cardiac_arrest())
|
||||
if(!H.client || H.stat == DEAD || H.InCritical() || !H.can_heartattack() || H.has_status_effect(STATUS_EFFECT_EXERCISED) || (/datum/disease/heart_failure in H.diseases) || H.undergoing_cardiac_arrest() || HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(H.satiety <= -60) //Multiple junk food items recently
|
||||
heart_attack_contestants[H] = 3
|
||||
|
||||
@@ -35,4 +35,6 @@
|
||||
/datum/hallucination/delusion,
|
||||
/datum/hallucination/oh_yeah)
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
if (HAS_TRAIT(C,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
new picked_hallucination(C, TRUE)
|
||||
@@ -15,6 +15,8 @@
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if (HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(!H.getorgan(/obj/item/organ/appendix)) //Don't give the disease to some who lacks it, only for it to be auto-cured
|
||||
continue
|
||||
if(!(MOB_ORGANIC in H.mob_biotypes)) //biotype sleeper bugs strike again, once again making appendicitis pick a target that can't take it
|
||||
|
||||
@@ -609,4 +609,68 @@
|
||||
filling_color = "#ECA735"
|
||||
tastes = list("fried corn" = 1)
|
||||
foodtype = JUNKFOOD | FRIED
|
||||
dunkable = TRUE
|
||||
dunkable = TRUE
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/marshmallow
|
||||
name = "marshmallow"
|
||||
desc = "A marshmallow filled with fluffy marshmallow fluff."
|
||||
icon_state = "marshmallow"
|
||||
list_reagents = list("sugar" = 5, "nutriment" = 2)
|
||||
filling_color = "#fafafa"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
tastes = list("marshmallow" = 2)
|
||||
foodtype = SUGAR | JUNKFOOD
|
||||
var/burned = 0
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/marshmallow/attackby(obj/item/I, mob/user)
|
||||
switch (I.get_temperature())
|
||||
if (355 to 1500)
|
||||
if (prob(30))
|
||||
burnmallow()
|
||||
if (1500 to 2000)
|
||||
if (prob(50))
|
||||
burnmallow()
|
||||
else
|
||||
burnmallow(TRUE)
|
||||
if (2000 to 3000)
|
||||
if (prob(10))
|
||||
burnmallow()
|
||||
else
|
||||
burnmallow(TRUE)
|
||||
if (3000 to INFINITY)
|
||||
burnmallow(TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/marshmallow/proc/burnmallow(reallyburned = FALSE)
|
||||
if (reallyburned && burned == 1)
|
||||
icon_state = "marshmallowrburned"
|
||||
else if (burned == 0)
|
||||
icon_state = "marshmallowburned"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/marshmallow/examine(mob/user)
|
||||
. = ..()
|
||||
if (burned == 2)
|
||||
. += "It looks very burned."
|
||||
if (burned == 1)
|
||||
. += "It looks just right for eating!"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/marshmallow/fire_act(temp,volume)
|
||||
switch (temp)
|
||||
if (355 to 1500)
|
||||
if (prob(30))
|
||||
burnmallow()
|
||||
if (1500 to 2000)
|
||||
if (prob(50))
|
||||
burnmallow()
|
||||
else
|
||||
burnmallow(TRUE)
|
||||
if (2000 to 3000)
|
||||
if (prob(10))
|
||||
burnmallow()
|
||||
else
|
||||
burnmallow(TRUE)
|
||||
if (3000 to 7000)
|
||||
burnmallow(TRUE)
|
||||
if (7000 to INFINITY)
|
||||
burn()
|
||||
..()
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
icon_grow = "sunflower-grow"
|
||||
icon_dead = "sunflower-dead"
|
||||
mutatelist = list(/obj/item/seeds/sunflower/moonflower, /obj/item/seeds/sunflower/novaflower)
|
||||
reagents_add = list("cornoil" = 0.08, "nutriment" = 0.04)
|
||||
reagents_add = list("cooking_oil" = 0.08, "nutriment" = 0.04)
|
||||
|
||||
/obj/item/grown/sunflower // FLOWER POWER!
|
||||
seed = /obj/item/seeds/sunflower
|
||||
@@ -316,4 +316,4 @@
|
||||
filling_color = "#FF6347"
|
||||
bitesize_mod = 8
|
||||
tastes = list("wax" = 1)
|
||||
foodtype = SUGAR
|
||||
foodtype = SUGAR
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
bitesize_mod = 2
|
||||
var/stacktype = /obj/item/stack/tile/grass
|
||||
var/tile_coefficient = 0.02 // 1/50
|
||||
wine_power = 15
|
||||
distill_reagent = /datum/reagent/consumable/ethanol/beer/light
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/grass/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>You prepare the astroturf.</span>")
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
access = list(ACCESS_THEATRE)
|
||||
minimal_access = list(ACCESS_THEATRE)
|
||||
|
||||
mind_traits = list(TRAIT_CLOWN_MENTALITY)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CLOWN
|
||||
|
||||
/datum/outfit/job/clown
|
||||
|
||||
@@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(exp_jobsmap, list(
|
||||
GLOBAL_LIST_INIT(exp_specialmap, list(
|
||||
EXP_TYPE_LIVING = list(), // all living mobs
|
||||
EXP_TYPE_ANTAG = list(),
|
||||
EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role"), // Ghost roles
|
||||
EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role", "Ghost Cafe Visitor"), // Ghost roles
|
||||
EXP_TYPE_GHOST = list() // dead people, observers
|
||||
))
|
||||
GLOBAL_PROTECT(exp_jobsmap)
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
|
||||
/datum/language_holder/synthetic
|
||||
languages = list(/datum/language/common)
|
||||
shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic)
|
||||
shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic, /datum/language/slime)
|
||||
|
||||
/datum/language_holder/empty
|
||||
languages = list()
|
||||
|
||||
@@ -67,11 +67,18 @@
|
||||
new /obj/effect/particle_effect/smoke(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
//Non-default pods
|
||||
|
||||
/obj/item/survivalcapsule/luxury
|
||||
name = "luxury bluespace shelter capsule"
|
||||
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
|
||||
template_id = "shelter_beta"
|
||||
|
||||
/obj/item/survivalcapsule/luxuryelite
|
||||
name = "luxury elite bar capsule"
|
||||
desc = "A luxury bar in a capsule. Bartender required and not included."
|
||||
template_id = "shelter_charlie"
|
||||
|
||||
//Pod objects
|
||||
|
||||
//Window
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
||||
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
|
||||
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
|
||||
new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxuryelite, 10000),
|
||||
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
|
||||
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
|
||||
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
|
||||
|
||||
@@ -58,3 +58,18 @@
|
||||
. = ..()
|
||||
whitelisted_turfs = typecacheof(/turf/closed/mineral)
|
||||
banned_objects = typecacheof(/obj/structure/stone_tile)
|
||||
|
||||
/datum/map_template/shelter/charlie
|
||||
name = "Shelter Charlie"
|
||||
shelter_id = "shelter_charlie"
|
||||
description = "A luxury elite bar which holds an entire bar \
|
||||
along with two vending machines, tables, and a restroom that \
|
||||
also has a sink. This isn't a survival capsule and so you can \
|
||||
expect that this won't save you if you're bleeding out to \
|
||||
death."
|
||||
mappath = "_maps/templates/shelter_3.dmm"
|
||||
|
||||
/datum/map_template/shelter/charlie/New()
|
||||
. = ..()
|
||||
whitelisted_turfs = typecacheof(/turf/closed/mineral)
|
||||
banned_objects = typecacheof(/obj/structure/stone_tile)
|
||||
@@ -74,4 +74,5 @@
|
||||
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
var/has_color = FALSE
|
||||
var/has_color = FALSE
|
||||
var/has_digitigrade = FALSE
|
||||
@@ -2,6 +2,9 @@
|
||||
// Socks Definitions //
|
||||
///////////////////////
|
||||
|
||||
/datum/sprite_accessory/underwear/socks
|
||||
has_digitigrade = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
@@ -28,41 +28,49 @@
|
||||
name = "Boxers"
|
||||
icon_state = "boxers"
|
||||
has_color = TRUE
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_bee
|
||||
name = "Boxers - Bee"
|
||||
icon_state = "bee_shorts"
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_hearts
|
||||
name = "Boxers - Heart"
|
||||
icon_state = "boxers_heart"
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_stripe
|
||||
name = "Boxers - Striped"
|
||||
icon_state = "boxers_striped"
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_commie
|
||||
name = "Boxers - Striped Communist"
|
||||
icon_state = "boxers_commie"
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_usastripe
|
||||
name = "Boxers - Striped Freedom"
|
||||
icon_state = "boxers_assblastusa"
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_uk
|
||||
name = "Boxers - Striped UK"
|
||||
icon_state = "boxers_uk"
|
||||
has_digitigrade = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/boxer_briefs
|
||||
name = "Boxer Briefs"
|
||||
icon_state = "boxer_briefs"
|
||||
has_digitigrade = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/panties
|
||||
@@ -140,6 +148,7 @@
|
||||
/datum/sprite_accessory/underwear/bottom/longjon
|
||||
name = "Long John Bottoms"
|
||||
icon_state = "ljonb"
|
||||
has_digitigrade = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit_red
|
||||
|
||||
@@ -18,3 +18,6 @@
|
||||
|
||||
update_icon(preferred_form)
|
||||
updateghostimages()
|
||||
|
||||
client.reenter_round_timeout = max(client.reenter_round_timeout, clientless_round_timeout)
|
||||
clientless_round_timeout = client.reenter_round_timeout
|
||||
|
||||
@@ -3,8 +3,6 @@ GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as t
|
||||
|
||||
GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
|
||||
#define CANT_REENTER_ROUND -1
|
||||
|
||||
/mob/dead/observer
|
||||
name = "ghost"
|
||||
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
|
||||
@@ -21,7 +19,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
hud_type = /datum/hud/ghost
|
||||
movement_type = GROUND | FLYING
|
||||
var/can_reenter_corpse
|
||||
var/reenter_round_timeout = 0 // used to prevent people from coming back through ghost roles/midround antags as they suicide/cryo for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit)
|
||||
var/clientless_round_timeout = 0 //mobs will lack a client as long as their player is disconnected. See client_defines.dm "reenter_round_timeout"
|
||||
var/datum/hud/living/carbon/hud = null // hud
|
||||
var/bootime = 0
|
||||
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
|
||||
@@ -278,9 +276,16 @@ Works together with spawning an observer, noted above.
|
||||
if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed.
|
||||
penalty += roundstart_quit_limit - world.time
|
||||
if(penalty)
|
||||
ghost.reenter_round_timeout = world.realtime + penalty
|
||||
if(ghost.reenter_round_timeout - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
|
||||
ghost.reenter_round_timeout = CANT_REENTER_ROUND
|
||||
penalty += world.realtime
|
||||
if(penalty - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
|
||||
penalty = CANT_REENTER_ROUND
|
||||
if(client)
|
||||
client.reenter_round_timeout = penalty
|
||||
else //A disconnected player (quite likely for cryopods)
|
||||
ghost.clientless_round_timeout = penalty
|
||||
if (client && client.prefs && client.prefs.auto_ooc)
|
||||
if (!(client.prefs.chat_toggles & CHAT_OOC))
|
||||
client.prefs.chat_toggles ^= CHAT_OOC
|
||||
transfer_ckey(ghost, FALSE)
|
||||
return ghost
|
||||
|
||||
@@ -339,10 +344,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
ghostize(0, penalize = TRUE)
|
||||
|
||||
/mob/dead/observer/proc/can_reenter_round(silent = FALSE)
|
||||
if(reenter_round_timeout != CANT_REENTER_ROUND && reenter_round_timeout <= world.realtime)
|
||||
var/timeout = clientless_round_timeout
|
||||
if(client)
|
||||
timeout = client.reenter_round_timeout
|
||||
if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime)
|
||||
return TRUE
|
||||
if(!silent)
|
||||
to_chat(src, "<span class='warning'>You are unable to reenter the round[reenter_round_timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(reenter_round_timeout - world.realtime)]" : ""].</span>")
|
||||
if(!silent && client)
|
||||
to_chat(src, "<span class='warning'>You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].</span>")
|
||||
return FALSE
|
||||
|
||||
/mob/dead/observer/Move(NewLoc, direct)
|
||||
@@ -898,5 +906,3 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
spawners_menu = new(src)
|
||||
|
||||
spawners_menu.ui_interact(src)
|
||||
|
||||
#undef CANT_REENTER_ROUND
|
||||
@@ -103,15 +103,17 @@
|
||||
new_xeno.notransform = 0
|
||||
new_xeno.invisibility = 0
|
||||
|
||||
var/mob/living/carbon/old_owner = owner
|
||||
if(kill_on_sucess) //ITS TOO LATE
|
||||
new_xeno.visible_message("<span class='danger'>[new_xeno] bursts out of [owner]!</span>", "<span class='userdanger'>You exit [owner], your previous host.</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
|
||||
owner.apply_damage(rand(100,300),BRUTE,zone,FALSE) //Random high damage to torso so health sensors don't metagame.
|
||||
owner.spill_organs(TRUE,FALSE,TRUE) //Lets still make the death gruesome and impossible to just simply defib someone.
|
||||
var/obj/item/bodypart/B = owner.get_bodypart(zone)
|
||||
B.drop_organs(owner) //Lets still make the death gruesome and impossible to just simply defib someone.
|
||||
owner.death(FALSE) //Just in case some freak occurance occurs where you somehow survive all your organs being removed from you and the 100-300 brute damage.
|
||||
else //When it is removed via surgery at a late stage, rather than forced.
|
||||
new_xeno.visible_message("<span class='danger'>[new_xeno] wriggles out of [owner]!</span>", "<span class='userdanger'>You exit [owner], your previous host.</span>")
|
||||
owner.adjustBruteLoss(40)
|
||||
owner.cut_overlay(overlay)
|
||||
old_owner.cut_overlay(overlay)
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -308,7 +308,7 @@
|
||||
var/obj/item/organ/vocal_cords/Vc = user.getorganslot(ORGAN_SLOT_VOICE)
|
||||
if(Vc)
|
||||
if(istype(Vc, /obj/item/organ/vocal_cords/velvet))
|
||||
if(client?.prefs.lewdchem)
|
||||
if(client.prefs.cit_toggles & HYPNO)
|
||||
msg += "<span class='velvet'><i>You feel your chords resonate looking at them.</i></span>\n"
|
||||
|
||||
|
||||
|
||||
@@ -652,7 +652,7 @@
|
||||
if(mind)
|
||||
if((mind.assigned_role == "Station Engineer") || (mind.assigned_role == "Chief Engineer") )
|
||||
gain = 100
|
||||
if(mind.assigned_role == "Clown")
|
||||
if(HAS_TRAIT(mind, TRAIT_CLOWN_MENTALITY))
|
||||
gain = rand(-300, 300)
|
||||
investigate_log("([key_name(src)]) has been consumed by the singularity.", INVESTIGATE_SINGULO) //Oh that's where the clown ended up!
|
||||
gib()
|
||||
|
||||
@@ -554,6 +554,20 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
|
||||
//Underwear, Undershirts & Socks
|
||||
if(!(NO_UNDERWEAR in species_traits))
|
||||
|
||||
if(H.socks && H.get_num_legs(FALSE) >= 2)
|
||||
if(H.hidden_socks)
|
||||
H.socks = "Nude"
|
||||
else
|
||||
H.socks = H.saved_socks
|
||||
var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[H.socks]
|
||||
if(S)
|
||||
var/digilegs = ((DIGITIGRADE in species_traits) && S.has_digitigrade) ? "_d" : ""
|
||||
var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER)
|
||||
if(S.has_color)
|
||||
MA.color = "#[H.socks_color]"
|
||||
standing += MA
|
||||
|
||||
if(H.underwear)
|
||||
if(H.hidden_underwear)
|
||||
H.underwear = "Nude"
|
||||
@@ -561,8 +575,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
H.underwear = H.saved_underwear
|
||||
var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[H.underwear]
|
||||
if(B)
|
||||
var/mutable_appearance/MA = mutable_appearance(B.icon, B.icon_state, -BODY_LAYER)
|
||||
if(UNDIE_COLORABLE(B))
|
||||
var/digilegs = ((DIGITIGRADE in species_traits) && B.has_digitigrade) ? "_d" : ""
|
||||
var/mutable_appearance/MA = mutable_appearance(B.icon, "[B.icon_state][digilegs]", -BODY_LAYER)
|
||||
if(B.has_color)
|
||||
MA.color = "#[H.undie_color]"
|
||||
standing += MA
|
||||
|
||||
@@ -573,28 +588,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
H.undershirt = H.saved_undershirt
|
||||
var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[H.undershirt]
|
||||
if(T)
|
||||
var/state = "[T.icon_state][((DIGITIGRADE in species_traits) && T.has_digitigrade) ? "_d" : ""]"
|
||||
var/mutable_appearance/MA
|
||||
if(H.dna.species.sexes && H.gender == FEMALE)
|
||||
MA = wear_female_version(T.icon_state, T.icon, BODY_LAYER)
|
||||
MA = wear_female_version(state, T.icon, BODY_LAYER)
|
||||
else
|
||||
MA = mutable_appearance(T.icon, T.icon_state, -BODY_LAYER)
|
||||
if(UNDIE_COLORABLE(T))
|
||||
MA = mutable_appearance(T.icon, state, -BODY_LAYER)
|
||||
if(T.has_color)
|
||||
MA.color = "#[H.shirt_color]"
|
||||
standing += MA
|
||||
|
||||
if(H.socks && H.get_num_legs(FALSE) >= 2)
|
||||
if(H.hidden_socks)
|
||||
H.socks = "Nude"
|
||||
else
|
||||
H.socks = H.saved_socks
|
||||
var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[H.socks]
|
||||
if(S)
|
||||
var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : ""
|
||||
var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER)
|
||||
if(UNDIE_COLORABLE(S))
|
||||
MA.color = "#[H.socks_color]"
|
||||
standing += MA
|
||||
|
||||
if(standing.len)
|
||||
H.overlays_standing[BODY_LAYER] = standing
|
||||
|
||||
@@ -1598,20 +1601,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
return FALSE
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
if(target.client?.prefs.cit_toggles & NO_ASS_SLAP)
|
||||
to_chat(user,"A force stays your hand, preventing you from slapping \the [target]'s ass!")
|
||||
return FALSE
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
if(HAS_TRAIT(target, TRAIT_ASSBLASTUSA))
|
||||
var/hit_zone = (user.held_index_to_dir(user.active_hand_index) == "l" ? "l_":"r_") + "arm"
|
||||
user.adjustStaminaLoss(20, affected_zone = hit_zone)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>\The [user] slaps \the [target]'s ass, but their hand bounces off like they hit metal!</span>",\
|
||||
"<span class='danger'>You slap [user == target ? "your" : "\the [target]'s"] ass, but feel an intense amount of pain as you realise their buns are harder than steel!</span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
playsound(target.loc, 'sound/weapons/tap.ogg', 50, 1, -1)
|
||||
user.emote("scream")
|
||||
return FALSE
|
||||
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
user.visible_message(\
|
||||
"<span class='danger'>\The [user] slaps \the [target]'s ass!</span>",\
|
||||
|
||||
@@ -51,11 +51,7 @@
|
||||
. = ..()
|
||||
to_chat(C, "[info_text]")
|
||||
|
||||
C.real_name = "[pick(GLOB.nightmare_names)]"
|
||||
C.name = C.real_name
|
||||
if(C.mind)
|
||||
C.mind.name = C.real_name
|
||||
C.dna.real_name = C.real_name
|
||||
C.fully_replace_character_name("[pick(GLOB.nightmare_names)]")
|
||||
|
||||
/datum/species/shadow/nightmare/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
var/turf/T = H.loc
|
||||
@@ -127,8 +123,8 @@
|
||||
/obj/item/organ/heart/nightmare/Remove(mob/living/carbon/M, special = 0)
|
||||
respawn_progress = 0
|
||||
if(blade && special != HEART_SPECIAL_SHADOWIFY)
|
||||
QDEL_NULL(blade)
|
||||
M.visible_message("<span class='warning'>\The [blade] disintegrates!</span>")
|
||||
QDEL_NULL(blade)
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/nightmare/Stop()
|
||||
@@ -183,15 +179,21 @@
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(isopenturf(AM)) //So you can actually melee with it
|
||||
return
|
||||
if(isliving(AM))
|
||||
if(isopenturf(AM))
|
||||
var/turf/open/T = AM
|
||||
if(T.light_range && !isspaceturf(T)) //no fairy grass or light tile can escape the fury of the darkness.
|
||||
to_chat(user, "<span class='notice'>You scrape away [T] with your [name] and snuff out its lights.</span>")
|
||||
T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
|
||||
else if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(iscyborg(AM))
|
||||
var/mob/living/silicon/robot/borg = AM
|
||||
if(!borg.lamp_cooldown)
|
||||
if(borg.lamp_intensity)
|
||||
borg.update_headlamp(TRUE, INFINITY)
|
||||
to_chat(borg, "<span class='danger'>Your headlamp is fried! You'll need a human to help replace it.</span>")
|
||||
for(var/obj/item/assembly/flash/cyborg/F in borg.held_items)
|
||||
if(!F.crit_fail)
|
||||
F.burn_out()
|
||||
else
|
||||
for(var/obj/item/O in AM)
|
||||
if(O.light_range && O.light_power)
|
||||
|
||||
@@ -91,7 +91,9 @@
|
||||
if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf) && !(signal & COMPONENT_BLOCK_DEATH_BROADCAST))
|
||||
var/rendered = "<span class='deadsay'><b>[mind.name]</b> has died at <b>[get_area_name(T)]</b>.</span>"
|
||||
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
|
||||
|
||||
if (client && client.prefs && client.prefs.auto_ooc)
|
||||
if (!(client.prefs.chat_toggles & CHAT_OOC))
|
||||
client.prefs.chat_toggles ^= CHAT_OOC
|
||||
if (client)
|
||||
client.move_delay = initial(client.move_delay)
|
||||
|
||||
|
||||
@@ -63,7 +63,8 @@
|
||||
emitterhealth = CLAMP((emitterhealth - amount), -50, emittermaxhealth)
|
||||
if(emitterhealth < 0)
|
||||
fold_in(force = TRUE)
|
||||
to_chat(src, "<span class='userdanger'>The impact degrades your holochassis!</span>")
|
||||
if(amount > 0)
|
||||
to_chat(src, "<span class='userdanger'>The impact degrades your holochassis!</span>")
|
||||
return amount
|
||||
|
||||
/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
|
||||
@@ -594,12 +594,15 @@ Difficulty: Normal
|
||||
var/list/hit_things = list() //we hit these already, ignore them
|
||||
var/friendly_fire_check = FALSE
|
||||
var/bursting = FALSE //if we're bursting and need to hit anyone crossing us
|
||||
var/list/nohurt
|
||||
|
||||
/obj/effect/temp_visual/hierophant/blast/Initialize(mapload, new_caster, friendly_fire, list/only_hit_once)
|
||||
/obj/effect/temp_visual/hierophant/blast/Initialize(mapload, new_caster, friendly_fire, list/only_hit_once, list/donthurt = null)
|
||||
. = ..()
|
||||
if(only_hit_once)
|
||||
hit_things = only_hit_once
|
||||
friendly_fire_check = friendly_fire
|
||||
if(donthurt)
|
||||
hit_things += donthurt
|
||||
if(new_caster)
|
||||
hit_things += new_caster
|
||||
if(ismineralturf(loc)) //drill mineral turfs
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
var/list/attack_action_types = list()
|
||||
var/can_talk = FALSE
|
||||
var/obj/loot_drop = null
|
||||
|
||||
var/owner
|
||||
|
||||
//Gives player-controlled variants the ability to swap attacks
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -53,14 +54,14 @@
|
||||
if(ismineralturf(target))
|
||||
var/turf/closed/mineral/M = target
|
||||
M.gets_drilled()
|
||||
|
||||
|
||||
//Elites can't talk (normally)!
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
if(can_talk)
|
||||
. = ..()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
/*Basic setup for elite attacks, based on Whoneedspace's megafauna attack setup.
|
||||
While using this makes the system rely on OnFire, it still gives options for timers not tied to OnFire, and it makes using attacks consistent accross the board for player-controlled elites.*/
|
||||
|
||||
@@ -82,11 +83,11 @@ While using this makes the system rely on OnFire, it still gives options for tim
|
||||
/datum/action/innate/elite_attack/Activate()
|
||||
M.chosen_attack = chosen_attack_num
|
||||
to_chat(M, chosen_message)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/updatehealth()
|
||||
. = ..()
|
||||
update_health_hud()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/update_health_hud()
|
||||
if(hud_used)
|
||||
var/severity = 0
|
||||
@@ -144,7 +145,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
|
||||
gpstag = "Menacing Signal"
|
||||
desc = "You're not quite sure how a signal can be menacing."
|
||||
invisibility = 100
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user))
|
||||
@@ -179,7 +180,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
|
||||
activity = TUMOR_INACTIVE
|
||||
activator = null
|
||||
|
||||
|
||||
|
||||
obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind)
|
||||
var/selectedspawn = pick(potentialspawns)
|
||||
mychild = new selectedspawn(loc)
|
||||
@@ -199,18 +200,18 @@ obj/structure/elite_tumor/proc/return_elite()
|
||||
if(boosted)
|
||||
mychild.maxHealth = mychild.maxHealth * 2
|
||||
mychild.health = mychild.maxHealth
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/Initialize(mapload)
|
||||
. = ..()
|
||||
internal = new/obj/item/gps/internal/elite(src)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
mychild = null
|
||||
activator = null
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/process()
|
||||
if(isturf(loc))
|
||||
for(var/mob/living/simple_animal/hostile/asteroid/elite/elitehere in loc)
|
||||
@@ -218,7 +219,7 @@ obj/structure/elite_tumor/proc/return_elite()
|
||||
mychild.adjustHealth(-mychild.maxHealth*0.05)
|
||||
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(mychild))
|
||||
H.color = "#FF0000"
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/attackby(obj/item/I, mob/user, params)
|
||||
. = ..()
|
||||
if(istype(I, /obj/item/organ/regenerative_core) && activity == TUMOR_INACTIVE && !boosted)
|
||||
@@ -232,7 +233,7 @@ obj/structure/elite_tumor/proc/return_elite()
|
||||
desc = "[desc] This one seems to glow with a strong intensity."
|
||||
qdel(core)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/proc/arena_checks()
|
||||
if(activity != TUMOR_ACTIVE || QDELETED(src))
|
||||
return
|
||||
@@ -240,13 +241,13 @@ obj/structure/elite_tumor/proc/return_elite()
|
||||
INVOKE_ASYNC(src, .proc/arena_trap) //Gets another arena trap queued up for when this one runs out.
|
||||
INVOKE_ASYNC(src, .proc/border_check) //Checks to see if our fighters got out of the arena somehow.
|
||||
addtimer(CALLBACK(src, .proc/arena_checks), 50)
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/proc/fighters_check()
|
||||
if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator))
|
||||
onEliteWon()
|
||||
if(mychild != null && mychild.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(mychild))
|
||||
onEliteLoss()
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/proc/arena_trap()
|
||||
var/turf/T = get_turf(src)
|
||||
if(loc == null)
|
||||
@@ -257,7 +258,7 @@ obj/structure/elite_tumor/proc/return_elite()
|
||||
newwall = new /obj/effect/temp_visual/elite_tumor_wall(t, src)
|
||||
newwall.activator = src.activator
|
||||
newwall.ourelite = src.mychild
|
||||
|
||||
|
||||
/obj/structure/elite_tumor/proc/border_check()
|
||||
if(activator != null && get_dist(src, activator) >= 12)
|
||||
activator.forceMove(loc)
|
||||
@@ -267,7 +268,7 @@ obj/structure/elite_tumor/proc/return_elite()
|
||||
mychild.forceMove(loc)
|
||||
visible_message("<span class='boldwarning'>[mychild] suddenly reappears above [src]!</span>")
|
||||
playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE)
|
||||
|
||||
|
||||
obj/structure/elite_tumor/proc/onEliteLoss()
|
||||
playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, TRUE, TRUE)
|
||||
visible_message("<span class='boldwarning'>[src] begins to convulse violently before beginning to dissipate.</span>")
|
||||
@@ -286,7 +287,7 @@ obj/structure/elite_tumor/proc/onEliteLoss()
|
||||
mychild = null
|
||||
activator = null
|
||||
qdel(src)
|
||||
|
||||
|
||||
obj/structure/elite_tumor/proc/onEliteWon()
|
||||
activity = TUMOR_PASSIVE
|
||||
activator = null
|
||||
@@ -300,7 +301,7 @@ obj/structure/elite_tumor/proc/onEliteWon()
|
||||
to_chat(mychild, "<span class='boldwarning'>As the life in the activator's eyes fade, the forcefield around you dies out and you feel your power subside.\nDespite this inferno being your home, you feel as if you aren't welcome here anymore.\nWithout any guidance, your purpose is now for you to decide.</span>")
|
||||
to_chat(mychild, "<b>Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\nBear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\nAlso, be weary of your fellow inhabitants, they likely won't be happy to see you!</b>")
|
||||
to_chat(mychild, "<span class='big bold'>Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!</span>")
|
||||
|
||||
|
||||
/obj/item/tumor_shard
|
||||
name = "tumor shard"
|
||||
desc = "A strange, sharp, crystal shard from an odd tumor on Lavaland. Stabbing the corpse of a lavaland elite with this will revive them, assuming their soul still lingers. Revived lavaland elites only have half their max health, but are completely loyal to their reviver."
|
||||
@@ -313,7 +314,7 @@ obj/structure/elite_tumor/proc/onEliteWon()
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
|
||||
|
||||
/obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag)
|
||||
. = ..()
|
||||
if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag)
|
||||
@@ -331,10 +332,11 @@ obj/structure/elite_tumor/proc/onEliteWon()
|
||||
E.health = E.maxHealth
|
||||
E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people."
|
||||
E.sentience_type = SENTIENCE_ORGANIC
|
||||
E.owner = user
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='info'>[src] only works on the corpse of a sentient lavaland elite.</span>")
|
||||
|
||||
|
||||
/obj/effect/temp_visual/elite_tumor_wall
|
||||
name = "magic wall"
|
||||
icon = 'icons/turf/walls/hierophant_wall_temp.dmi'
|
||||
@@ -347,7 +349,7 @@ obj/structure/elite_tumor/proc/onEliteWon()
|
||||
color = rgb(255,0,0)
|
||||
light_range = MINIMUM_USEFUL_LIGHT_RANGE
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
|
||||
/obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster)
|
||||
. = ..()
|
||||
queue_smooth_neighbors(src)
|
||||
|
||||
@@ -44,34 +44,34 @@
|
||||
/datum/action/innate/elite_attack/magic_box,
|
||||
/datum/action/innate/elite_attack/pandora_teleport,
|
||||
/datum/action/innate/elite_attack/aoe_squares)
|
||||
|
||||
|
||||
var/sing_shot_length = 8
|
||||
var/cooldown_time = 20
|
||||
|
||||
|
||||
/datum/action/innate/elite_attack/singular_shot
|
||||
name = "Singular Shot"
|
||||
button_icon_state = "singular_shot"
|
||||
chosen_message = "<span class='boldwarning'>You are now creating a single linear magic square.</span>"
|
||||
chosen_attack_num = SINGULAR_SHOT
|
||||
|
||||
|
||||
/datum/action/innate/elite_attack/magic_box
|
||||
name = "Magic Box"
|
||||
button_icon_state = "magic_box"
|
||||
chosen_message = "<span class='boldwarning'>You are now attacking with a box of magic squares.</span>"
|
||||
chosen_attack_num = MAGIC_BOX
|
||||
|
||||
|
||||
/datum/action/innate/elite_attack/pandora_teleport
|
||||
name = "Line Teleport"
|
||||
button_icon_state = "pandora_teleport"
|
||||
chosen_message = "<span class='boldwarning'>You will now teleport to your target.</span>"
|
||||
chosen_attack_num = PANDORA_TELEPORT
|
||||
|
||||
|
||||
/datum/action/innate/elite_attack/aoe_squares
|
||||
name = "AOE Blast"
|
||||
button_icon_state = "aoe_squares"
|
||||
chosen_message = "<span class='boldwarning'>Your attacks will spawn an AOE blast at your target location.</span>"
|
||||
chosen_attack_num = AOE_SQUARES
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire()
|
||||
if(client)
|
||||
switch(chosen_attack)
|
||||
@@ -94,7 +94,7 @@
|
||||
pandora_teleport(target)
|
||||
if(AOE_SQUARES)
|
||||
aoe_squares(target)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/Life()
|
||||
. = ..()
|
||||
if(health >= maxHealth * 0.5)
|
||||
@@ -105,28 +105,28 @@
|
||||
return
|
||||
else
|
||||
cooldown_time = 10
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target)
|
||||
ranged_cooldown = world.time + (cooldown_time * 0.5)
|
||||
var/dir_to_target = get_dir(get_turf(src), get_turf(target))
|
||||
var/turf/T = get_step(get_turf(src), dir_to_target)
|
||||
singular_shot_line(sing_shot_length, dir_to_target, T)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot_line(var/procsleft, var/angleused, var/turf/T)
|
||||
if(procsleft <= 0)
|
||||
return
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(T, src, null, null, list(owner))
|
||||
T = get_step(T, angleused)
|
||||
procsleft = procsleft - 1
|
||||
addtimer(CALLBACK(src, .proc/singular_shot_line, procsleft, angleused, T), 2)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/magic_box(target)
|
||||
ranged_cooldown = world.time + cooldown_time
|
||||
var/turf/T = get_turf(target)
|
||||
for(var/t in spiral_range_turfs(3, T))
|
||||
if(get_dist(t, T) > 1)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
|
||||
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner))
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport(target)
|
||||
ranged_cooldown = world.time + cooldown_time
|
||||
var/turf/T = get_turf(target)
|
||||
@@ -135,45 +135,45 @@
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(source, src)
|
||||
playsound(source,'sound/machines/airlockopen.ogg', 200, 1)
|
||||
addtimer(CALLBACK(src, .proc/pandora_teleport_2, T, source), 2)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(var/turf/T, var/turf/source)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner))
|
||||
for(var/t in RANGE_TURFS(1, source))
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner))
|
||||
animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out
|
||||
visible_message("<span class='hierophant_warning'>[src] fades out!</span>")
|
||||
density = FALSE
|
||||
addtimer(CALLBACK(src, .proc/pandora_teleport_3, T), 2)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_3(var/turf/T)
|
||||
forceMove(T)
|
||||
animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN
|
||||
density = TRUE
|
||||
visible_message("<span class='hierophant_warning'>[src] fades in!</span>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares(target)
|
||||
ranged_cooldown = world.time + cooldown_time
|
||||
var/turf/T = get_turf(target)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(T, src, null, null, list(owner))
|
||||
var/max_size = 2
|
||||
addtimer(CALLBACK(src, .proc/aoe_squares_2, T, 0, max_size), 2)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares_2(var/turf/T, var/ring, var/max_size)
|
||||
if(ring > max_size)
|
||||
return
|
||||
for(var/t in spiral_range_turfs(ring, T))
|
||||
if(get_dist(t, T) == ring)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
|
||||
new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner))
|
||||
addtimer(CALLBACK(src, .proc/aoe_squares_2, T, (ring + 1), max_size), 2)
|
||||
|
||||
|
||||
//The specific version of hiero's squares pandora uses
|
||||
/obj/effect/temp_visual/hierophant/blast/pandora
|
||||
damage = 20
|
||||
monster_damage_boost = FALSE
|
||||
|
||||
|
||||
//Pandora's loot: Hope
|
||||
/obj/item/clothing/accessory/pandora_hope
|
||||
name = "Hope"
|
||||
@@ -181,7 +181,7 @@
|
||||
icon = 'icons/obj/lavaland/elite_trophies.dmi'
|
||||
icon_state = "hope"
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user)
|
||||
var/mob/living/L = user
|
||||
if(L && L.mind)
|
||||
|
||||
@@ -459,6 +459,11 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
|
||||
if(!ckey || !new_mob)
|
||||
CRASH("transfer_ckey() called [ckey ? "" : "on a ckey-less mob[new_mob ? "" : " and "]"][new_mob ? "" : "without a valid mob target"]!")
|
||||
SEND_SIGNAL(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, new_mob, src)
|
||||
if (client && client.prefs && client.prefs.auto_ooc)
|
||||
if (client.prefs.chat_toggles & CHAT_OOC && isliving(new_mob))
|
||||
client.prefs.chat_toggles ^= CHAT_OOC
|
||||
if (!(client.prefs.chat_toggles & CHAT_OOC) && isdead(new_mob))
|
||||
client.prefs.chat_toggles ^= CHAT_OOC
|
||||
new_mob.ckey = ckey
|
||||
if(send_signal)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_KEY_CHANGE, new_mob, src)
|
||||
|
||||
@@ -352,7 +352,7 @@
|
||||
clumsy_check = 0
|
||||
|
||||
/obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user)
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown"))
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)))
|
||||
return ..()
|
||||
if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD))
|
||||
user.visible_message("<span class='warning'>[user] somehow manages to shoot [user.p_them()]self in the face!</span>", "<span class='userdanger'>You somehow shoot yourself in the face! How the hell?!</span>")
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
// A gun with ultra-honk pin is useful for clown and useless for everyone else.
|
||||
/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user)
|
||||
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
|
||||
if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")))
|
||||
if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -622,7 +622,7 @@
|
||||
M.adjustBruteLoss(-1*REM, 0)
|
||||
M.adjustFireLoss(-1*REM, 0)
|
||||
M.adjustOxyLoss(-1*REM, 0)
|
||||
M.adjustToxLoss(-1*REM, 0)
|
||||
M.adjustToxLoss(-1*REM, 0, TRUE) //heals TOXINLOVERs
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/honey/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
|
||||
@@ -26,12 +26,11 @@ Borg Hypospray
|
||||
var/bypass_protection = 0 //If the hypospray can go through armor or thick material
|
||||
|
||||
var/list/datum/reagents/reagent_list = list()
|
||||
var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "antitoxin", "epinephrine", "spaceacillin", "salglu_solution")
|
||||
var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "antitoxin", "epinephrine", "spaceacillin", "salglu_solution", "insulin")
|
||||
var/accepts_reagent_upgrades = TRUE //If upgrades can increase number of reagents dispensed.
|
||||
var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values.
|
||||
//Used as list for input() in shakers.
|
||||
|
||||
|
||||
/obj/item/reagent_containers/borghypo/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -40,12 +39,10 @@ Borg Hypospray
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/borghypo/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
|
||||
charge_tick++
|
||||
if(charge_tick >= recharge_time)
|
||||
@@ -162,7 +159,7 @@ Borg Hypospray
|
||||
icon_state = "borghypo_s"
|
||||
charge_cost = 20
|
||||
recharge_time = 2
|
||||
reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine")
|
||||
reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine", "insulin")
|
||||
bypass_protection = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
@@ -178,7 +175,6 @@ Borg Shaker
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "milk", "coffee", "banana", "lemonjuice")
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user)
|
||||
@@ -234,23 +230,21 @@ Borg Shaker
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("fakebeer", "fernet")
|
||||
|
||||
/obj/item/reagent_containers/borghypo/peace
|
||||
name = "Peace Hypospray"
|
||||
|
||||
reagent_ids = list("dizzysolution","tiresolution","synthpax")
|
||||
reagent_ids = list("dizzysolution", "tiresolution", "synthpax", "insulin")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/peace/hacked
|
||||
desc = "Everything's peaceful in death!"
|
||||
icon_state = "borghypo_s"
|
||||
reagent_ids = list("dizzysolution","tiresolution","synthpax","tirizene","sulfonal","sodium_thiopental","cyanide","fentanyl")
|
||||
reagent_ids = list("dizzysolution", "tiresolution", "synthpax", "tirizene", "sulfonal", "sodium_thiopental", "cyanide", "fentanyl")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/epi
|
||||
name = "epinephrine injector"
|
||||
name = "Stabilizer injector"
|
||||
desc = "An advanced chemical synthesizer and injection system, designed to stabilize patients."
|
||||
reagent_ids = list("epinephrine")
|
||||
reagent_ids = list("epinephrine", "insulin")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
@@ -152,6 +152,16 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/telescopiciv
|
||||
name = "Telescopic IV Drip"
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down."
|
||||
id = "telescopiciv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 3500, MAT_SILVER = 1000)
|
||||
build_path = /obj/item/tele_iv
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/holobarrier_med
|
||||
name = "PENLITE holobarrier projector"
|
||||
desc = "PENLITE holobarriers, a device that halts individuals with malicious diseases."
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
display_name = "Biological Technology"
|
||||
description = "What makes us tick." //the MC, silly!
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen","genescanner")
|
||||
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv","genescanner")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
|
||||
else
|
||||
SSshuttle.emergency.modTimer(1.5)
|
||||
GLOB.security_level = SEC_LEVEL_BLUE
|
||||
sound_to_playing_players('sound/misc/voybluealert.ogg') // Citadel change - Makes alerts play a sound
|
||||
sound_to_playing_players('sound/misc/voybluealert.ogg', volume = 50) // Citadel change - Makes alerts play a sound
|
||||
for(var/obj/machinery/firealarm/FA in GLOB.machines)
|
||||
if(is_station_level(FA.z))
|
||||
FA.update_icon()
|
||||
@@ -66,7 +66,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
|
||||
SSshuttle.emergency.modTimer(1.6)
|
||||
GLOB.security_level = SEC_LEVEL_AMBER
|
||||
sound_to_playing_players('sound/effects/alert.ogg') // Citadel change - Makes alerts play a sound
|
||||
sound_to_playing_players('sound/effects/alert.ogg', volume = 50) // Citadel change - Makes alerts play a sound
|
||||
for(var/obj/machinery/firealarm/FA in GLOB.machines)
|
||||
if(is_station_level(FA.z))
|
||||
FA.update_icon()
|
||||
@@ -83,7 +83,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
|
||||
else
|
||||
minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!")
|
||||
GLOB.security_level = SEC_LEVEL_RED
|
||||
sound_to_playing_players('sound/misc/voyalert.ogg') // Citadel change - Makes alerts play a sound
|
||||
sound_to_playing_players('sound/misc/voyalert.ogg', volume = 50) // Citadel change - Makes alerts play a sound
|
||||
|
||||
for(var/obj/machinery/firealarm/FA in GLOB.machines)
|
||||
if(is_station_level(FA.z))
|
||||
|
||||
@@ -560,7 +560,7 @@
|
||||
else if((findtext(message, honk_words)))
|
||||
cooldown = COOLDOWN_MEME
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, get_turf(user), 'sound/items/bikehorn.ogg', 300, 1), 25)
|
||||
if(user.mind && user.mind.assigned_role == "Clown")
|
||||
if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
C.slip(140 * power_multiplier)
|
||||
cooldown = COOLDOWN_MEME
|
||||
@@ -807,9 +807,8 @@
|
||||
E.enthrallTally += (power_multiplier*(((length(message))/200) + 1)) //encourage players to say more than one word.
|
||||
else
|
||||
E.enthrallTally += power_multiplier*1.25 //thinking about it, I don't know how this can proc
|
||||
if(L.canbearoused)
|
||||
if(L.client?.prefs.lewdchem)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'><i><b>[E.enthrallGender] is so nice to listen to.</b></i></span>"), 5)
|
||||
if(L.canbearoused && E.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'><i><b>[E.enthrallGender] is so nice to listen to.</b></i></span>"), 5)
|
||||
E.cooldown += 1
|
||||
|
||||
//REWARD mixable works
|
||||
@@ -820,7 +819,7 @@
|
||||
power_multiplier *= distancelist[get_dist(user, V)+1]
|
||||
if(L == user)
|
||||
continue
|
||||
if (L.client?.prefs.lewdchem)
|
||||
if (E.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='love'>[E.enthrallGender] has praised me!!</span>"), 5)
|
||||
if(HAS_TRAIT(L, TRAIT_NYMPHO))
|
||||
L.adjustArousalLoss(2*power_multiplier)
|
||||
@@ -832,7 +831,7 @@
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'><b><i>I've been praised for doing a good job!</b></i></span>"), 5)
|
||||
E.resistanceTally -= power_multiplier
|
||||
E.enthrallTally += power_multiplier
|
||||
var/descmessage = "<span class='love'><i>[(L.client?.prefs.lewdchem?"I feel so happy! I'm a good pet who [E.enthrallGender] loves!":"I did a good job!")]</i></span>"
|
||||
var/descmessage = "<span class='love'><i>[(E.lewd?"I feel so happy! I'm a good pet who [E.enthrallGender] loves!":"I did a good job!")]</i></span>"
|
||||
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallpraise", /datum/mood_event/enthrallpraise, descmessage)
|
||||
E.cooldown += 1
|
||||
|
||||
@@ -841,10 +840,10 @@
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
var/descmessage = "[(L.client?.prefs.lewdchem?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]"
|
||||
var/descmessage = "[(E.lewd?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]"
|
||||
if(L == user)
|
||||
continue
|
||||
if (L.client?.prefs.lewdchem)
|
||||
if (E.lewd)
|
||||
if(HAS_TRAIT(L, TRAIT_MASO))
|
||||
L.adjustArousalLoss(3*power_multiplier)
|
||||
descmessage += "And yet, it feels so good..!</span>" //I don't really understand masco, is this the right sort of thing they like?
|
||||
@@ -871,7 +870,7 @@
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
REMOVE_TRAIT(C, TRAIT_MUTE, "enthrall")
|
||||
C.silent = 0
|
||||
if(C.client?.prefs.lewdchem)
|
||||
if(E.lewd)
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.enthrallGender]"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.master]"), 5)
|
||||
@@ -887,7 +886,7 @@
|
||||
E.phase = 3
|
||||
E.status = null
|
||||
user.emote("snap")
|
||||
if(L.client?.prefs.lewdchem)
|
||||
if(E.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='big warning'>The snapping of your [E.enthrallGender]'s fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='big warning'>The snapping of [E.master]'s fingers brings you back to being under their influence.</b></span>"), 5)
|
||||
@@ -910,11 +909,11 @@
|
||||
addtimer(CALLBACK(H, /atom/movable/proc/say, "I feel happy being with you."), 5)
|
||||
continue
|
||||
if(2)
|
||||
speaktrigger += "[(H.client?.prefs.lewdchem?"I think I'm in love with you... ":"I find you really inspirational, ")]" //'
|
||||
speaktrigger += "[(E.lewd?"I think I'm in love with you... ":"I find you really inspirational, ")]" //'
|
||||
if(3)
|
||||
speaktrigger += "[(H.client?.prefs.lewdchem?"I'm devoted to being your pet":"I'm commited to following your cause!")]! "
|
||||
speaktrigger += "[(E.lewd?"I'm devoted to being your pet":"I'm commited to following your cause!")]! "
|
||||
if(4)
|
||||
speaktrigger += "[(H.client?.prefs.lewdchem?"You are my whole world and all of my being belongs to you, ":"I cannot think of anything else but aiding your cause, ")] "//Redflags!!
|
||||
speaktrigger += "[(E.lewd?"You are my whole world and all of my being belongs to you, ":"I cannot think of anything else but aiding your cause, ")] "//Redflags!!
|
||||
|
||||
//mood
|
||||
var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
|
||||
@@ -1003,7 +1002,7 @@
|
||||
speaktrigger += "I feel like I'm on the brink of losing my mind, "
|
||||
|
||||
//horny
|
||||
if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && H.client?.prefs.lewdchem)
|
||||
if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && E.lewd)
|
||||
switch(H.getArousalLoss())
|
||||
if(40 to 60)
|
||||
speaktrigger += "I'm feeling a little horny, "
|
||||
@@ -1013,10 +1012,10 @@
|
||||
speaktrigger += "I'm really, really horny, "
|
||||
|
||||
//collar
|
||||
if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && H.client?.prefs.lewdchem)
|
||||
if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && E.lewd)
|
||||
speaktrigger += "I love the collar you gave me, "
|
||||
//End
|
||||
if(H.client?.prefs.lewdchem)
|
||||
if(E.lewd)
|
||||
speaktrigger += "[E.enthrallGender]!"
|
||||
else
|
||||
speaktrigger += "[user.first_name()]!"
|
||||
@@ -1044,7 +1043,7 @@
|
||||
REMOVE_TRAIT(C, TRAIT_MUTE, "enthrall")
|
||||
C.silent = 0
|
||||
E.cooldown += 3
|
||||
to_chat(user, "<span class='notice'><i>You [(C.client?.prefs.lewdchem?"allow [C] to speak again":"encourage [C] to speak again")].</i></span>")
|
||||
to_chat(user, "<span class='notice'><i>You [(E.lewd?"allow [C] to speak again":"encourage [C] to speak again")].</i></span>")
|
||||
|
||||
|
||||
//Antiresist
|
||||
@@ -1074,7 +1073,7 @@
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase == 4)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='warning'>You're unable to forget about [(C.client?.prefs.lewdchem?"the dominating presence of [E.enthrallGender]":"[E.master]")]!</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='warning'>You're unable to forget about [(E.lewd?"the dominating presence of [E.enthrallGender]":"[E.master]")]!</b></span>"), 5)
|
||||
continue
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='warning'>You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!</b></span>"), 5)
|
||||
C.Sleeping(50)
|
||||
@@ -1086,7 +1085,7 @@
|
||||
if(3)
|
||||
E.phase = 0
|
||||
E.cooldown = 0
|
||||
if(C.client?.prefs.lewdchem)
|
||||
if(E.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened.</b></span>"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master].</b></span>"), 5)
|
||||
@@ -1112,7 +1111,7 @@
|
||||
var/mob/living/carbon/human/H = V
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase > 1)
|
||||
if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && H.client?.prefs.lewdchem) // probably a redundant check but for good measure
|
||||
if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && E.lewd) // probably a redundant check but for good measure
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='love'>Your [E.enthrallGender] pushes you over the limit, overwhelming your body with pleasure.</b></span>"), 5)
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.SetStun(20)
|
||||
@@ -1168,7 +1167,7 @@
|
||||
for(var/obj/item/W in items)
|
||||
if(W == H.wear_suit)
|
||||
H.dropItemToGround(W, TRUE)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='[(H.client?.prefs.lewdchem?"love":"warning")]'>Before you can even think about it, you quickly remove your clothes in response to [(H.client?.prefs.lewdchem?"your [E.enthrallGender]'s command'":"[E.master]'s directive'")].</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='[(E.lewd?"love":"warning")]'>Before you can even think about it, you quickly remove your clothes in response to [(E.lewd?"your [E.enthrallGender]'s command'":"[E.master]'s directive'")].</b></span>"), 5)
|
||||
E.cooldown += 10
|
||||
|
||||
//WALK
|
||||
@@ -1206,7 +1205,7 @@
|
||||
if(2 to INFINITY)
|
||||
L.lay_down()
|
||||
E.cooldown += 10
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[(L.client?.prefs.lewdchem?"<span class='love'>You eagerly lie down!":"<span class='notice'>You suddenly lie down!")]</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[(E.lewd?"<span class='love'>You eagerly lie down!":"<span class='notice'>You suddenly lie down!")]</b></span>"), 5)
|
||||
to_chat(user, "<span class='notice'><i>You encourage [L] to lie down.</i></span>")
|
||||
|
||||
//KNOCKDOWN
|
||||
@@ -1237,7 +1236,7 @@
|
||||
for (var/trigger in E.customTriggers)
|
||||
speaktrigger += "[trigger], "
|
||||
to_chat(user, "<b>[C]</b> whispers, \"<i>[speaktrigger] are my triggers.</i>\"")//So they don't trigger themselves!
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='notice'>You whisper your triggers to [(C.client?.prefs.lewdchem?"Your [E.enthrallGender]":"[E.master]")].</span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='notice'>You whisper your triggers to [(E.lewd?"Your [E.enthrallGender]":"[E.master]")].</span>"), 5)
|
||||
|
||||
|
||||
//CUSTOM TRIGGERS
|
||||
@@ -1249,7 +1248,7 @@
|
||||
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
|
||||
to_chat(user, "<span class='warning'>You need to be next to your pet to give them a new trigger!</b></span>")
|
||||
continue
|
||||
if(!H.client?.prefs.lewdchem)
|
||||
if(!E.lewd)
|
||||
to_chat(user, "<span class='warning'>[H] seems incapable of being implanted with triggers.</b></span>")
|
||||
continue
|
||||
else
|
||||
@@ -1272,7 +1271,7 @@
|
||||
E.customTriggers[trigger] = trigger2
|
||||
log_game("FERMICHEM: [H] has been implanted by [user] with [trigger], triggering [trigger2].")
|
||||
E.mental_capacity -= 5
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.client?.prefs.lewdchem?"your [E.enthrallGender]":"[E.master]")] whispers you a new trigger.</span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(E.lewd?"your [E.enthrallGender]":"[E.master]")] whispers you a new trigger.</span>"), 5)
|
||||
to_chat(user, "<span class='notice'><i>You sucessfully set the trigger word [trigger] in [H]</i></span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Your pet looks at you confused, it seems they don't understand that effect!</b></span>")
|
||||
@@ -1290,7 +1289,7 @@
|
||||
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
|
||||
to_chat(user, "<span class='warning'>You need to be next to your pet to give them a new echophrase!</b></span>")
|
||||
continue
|
||||
if(!H.client?.prefs.lewdchem)
|
||||
if(!E.lewd)
|
||||
to_chat(user, "<span class='warning'>[H] seems incapable of being implanted with an echoing phrase.</b></span>")
|
||||
continue
|
||||
else
|
||||
@@ -1334,7 +1333,7 @@
|
||||
objective = replacetext(lowertext(objective), "suicide", "self-love")
|
||||
message_admins("[H] has been implanted by [user] with the objective [objective].")
|
||||
log_game("FERMICHEM: [H] has been implanted by [user] with the objective [objective] via MKUltra.")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.client?.prefs.lewdchem?"Your [E.enthrallGender]":"[E.master]")] whispers you a new objective.</span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(E.lewd?"Your [E.enthrallGender]":"[E.master]")] whispers you a new objective.</span>"), 5)
|
||||
brainwash(H, objective)
|
||||
E.mental_capacity -= 200
|
||||
to_chat(user, "<span class='notice'><i>You sucessfully give an objective to [H]</i></span>")
|
||||
@@ -1348,7 +1347,7 @@
|
||||
for(var/V in listeners)
|
||||
var/mob/living/carbon/human/H = V
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase >= 3 && H.client?.prefs.lewdchem)
|
||||
if(E.phase >= 3 && E.lewd)
|
||||
var/instill = stripped_input(user, "Instill an emotion in [H].", MAX_MESSAGE_LEN)
|
||||
to_chat(H, "<i>[instill]</i>")
|
||||
to_chat(user, "<span class='notice'><i>You sucessfully instill a feeling in [H]</i></span>")
|
||||
@@ -1363,7 +1362,7 @@
|
||||
if(E.phase > 1)
|
||||
if(user.ckey == E.enthrallID && user.real_name == E.master.real_name)
|
||||
E.master = user
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='nicegreen'>[(H.client?.prefs.lewdchem?"You hear the words of your [E.enthrallGender] again!! They're back!!":"You recognise the voice of [E.master].")]</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='nicegreen'>[(E.lewd?"You hear the words of your [E.enthrallGender] again!! They're back!!":"You recognise the voice of [E.master].")]</b></span>"), 5)
|
||||
to_chat(user, "<span class='notice'><i>[H] looks at you with sparkling eyes, recognising you!</i></span>")
|
||||
|
||||
//I dunno how to do state objectives without them revealing they're an antag
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/obj/vehicle/sealed/car/clowncar/auto_assign_occupant_flags(mob/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.mind && H.mind.assigned_role == "Clown") //Ensures only clowns can drive the car. (Including more at once)
|
||||
if(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY)) //Ensures only clowns can drive the car. (Including more at once)
|
||||
add_control_flags(M, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_PERMISSION)
|
||||
return
|
||||
add_control_flags(M, VEHICLE_CONTROL_KIDNAPPED)
|
||||
|
||||
@@ -70,14 +70,22 @@
|
||||
/obj/item/clothing/under/skirt/red = 3,
|
||||
/obj/item/clothing/under/skirt/purple = 3,
|
||||
/obj/item/clothing/under/sundress = 4,
|
||||
/obj/item/clothing/under/sundresswhite = 4,
|
||||
/obj/item/clothing/under/stripeddress = 3,
|
||||
/obj/item/clothing/under/sailordress = 3,
|
||||
/obj/item/clothing/under/sweptskirt = 3,
|
||||
/obj/item/clothing/under/greendress = 3,
|
||||
/obj/item/clothing/under/pinkdress = 3,
|
||||
/obj/item/clothing/under/redeveninggown = 3,
|
||||
/obj/item/clothing/under/blacktango = 3,
|
||||
/obj/item/clothing/under/westernbustle = 3,
|
||||
/obj/item/clothing/under/flamenco = 3,
|
||||
/obj/item/clothing/under/flowerdress = 3,
|
||||
/obj/item/clothing/under/plaid_skirt = 3,
|
||||
/obj/item/clothing/under/plaid_skirt/blue = 3,
|
||||
/obj/item/clothing/under/plaid_skirt/purple = 3,
|
||||
/obj/item/clothing/under/plaid_skirt/green = 3,
|
||||
/obj/item/clothing/under/croptop = 3,
|
||||
/obj/item/clothing/glasses/regular = 2,
|
||||
/obj/item/clothing/glasses/regular/jamjar = 2,
|
||||
/obj/item/clothing/head/sombrero = 3,
|
||||
|
||||
@@ -50,6 +50,328 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">30 December 2019</h2>
|
||||
<h3 class="author">AnturK updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed ranged syndicate mobs stormtrooper training.</li>
|
||||
</ul>
|
||||
<h3 class="author">Arturlang updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds Bloodsuckers, beware.</li>
|
||||
</ul>
|
||||
<h3 class="author">BlueWildrose updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed stargazers being unable to link to themselves if mindshielded or if holding psionic shielding devices (tinfoil hats) when the species is set.</li>
|
||||
<li class="bugfix">Fixes non-roundstart slimes being unable to wag their tail.</li>
|
||||
</ul>
|
||||
<h3 class="author">Commandersand updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">added two words to clown filter</li>
|
||||
<li class="rscadd">Added new things to loadouts, check em</li>
|
||||
</ul>
|
||||
<h3 class="author">DeltaFire15 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Clock cult kindle no longer cares about oxygen damage</li>
|
||||
<li class="tweak">changed mecha internals access for some special mechs.</li>
|
||||
<li class="tweak">no more mech maintenance access for engineers.</li>
|
||||
<li class="tweak">All heads of staff can now message CC</li>
|
||||
<li class="code_imp">Removes a magicnumber</li>
|
||||
<li class="balance">Rebalanced cult vs cult stun effects to debuff instead of stun</li>
|
||||
</ul>
|
||||
<h3 class="author">Detective-Google updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">short hair 80's is no longer jank</li>
|
||||
</ul>
|
||||
<h3 class="author">Fermis updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">tweaked how super bases/acids work but limiting them</li>
|
||||
</ul>
|
||||
<h3 class="author">Fikou updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">the windup toolbox now has some more "realistic" sounds</li>
|
||||
<li class="bugfix">the windup toolbox now rumbles again</li>
|
||||
</ul>
|
||||
<h3 class="author">Ghommie updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed hulks, sleeping carp users, pacifists and people with chunky fingers being able to unrestrictly use gun and pneumatic cannon circuit assemblies.</li>
|
||||
<li class="bugfix">Fixed gun circuit assemblies being only usable by human mobs.</li>
|
||||
<li class="balance">Doubled the locomotion circuit external cooldown, thus halving the movable assemblies' movespeed.</li>
|
||||
<li class="tweak">Made wooden cabinet/closets... actually made of wood.</li>
|
||||
<li class="tweak">Wooden cabinets are now deconstructable with a screwdriver.</li>
|
||||
<li class="tweak">Deconstruction of large crates and other closet subtypes deconstructable with tools other than the welder is no longer instant.</li>
|
||||
<li class="tweak">You shouldn't be able to target objects you can't see (excluding darkness) with the ARCD and RLD</li>
|
||||
<li class="tweak">The admin RCD is ranged too, just like the ARCD.</li>
|
||||
<li class="bugfix">Fixed welding, thirteen loko, welding and wraith spectacles not blinding people as expected. Thank you all whomst reported this issue in the suggestions box channel instead of the github repository's issues section, very smart!</li>
|
||||
<li class="bugfix">Fixed on_mob eyes overlays not updating properly in certain cases.</li>
|
||||
<li class="bugfix">Fixed deconversion from bloodshot eyes blood cult resetting your eyes' color to pitch black instead of their previous color, more or less.</li>
|
||||
<li class="balance">Spinfusor nerf: Upped the casing and ammo box size by one step, removed the projectile's dismemberment value (explosions can still rip a limb or two off), halved the ammo box capacity, reduced the spinfusor ammo supply pack contents from 32 to 8, removed the casing's ability to explode when thrown.</li>
|
||||
<li class="bugfix">Fixes bubblegum's death not unlocking the arena shuttle buyment.</li>
|
||||
<li class="bugfix">Fixed alien tech node not being unlockable with subtypes of the accepted items.</li>
|
||||
<li class="bugfix">Fixed reactive armor onmob overlays not updating when toggled and reactive teleport armor still using forceMove() instead of do_teleport()</li>
|
||||
<li class="bugfix">Fixed space hermit asteroid rocks unintendedly spawning airless asteroid turf when mined, save for the perimeter.</li>
|
||||
<li class="bugfix">Fixes reviver implant having been a crapshot ever since soft-crit was introduced years ago.</li>
|
||||
<li class="tweak">Added a "convalescence" time (about 15 seconds) after the user is out of unconsciousbess/crit to ensure they are properly stabilized.</li>
|
||||
<li class="tweak">Added a 15 minutes hardcap for accumulated revive cooldown (equivalent to 150 points of brute or burn healed) above which the implant starts cooling down regardless of user's conditions.</li>
|
||||
<li class="bugfix">Fixed AI core displays I may have broken with my coding extravaganza.</li>
|
||||
<li class="soundadd">Blue, Amber and Red security alert sounds should be half as loud now.</li>
|
||||
<li class="balance">Buffed clown ops by removing their clumsiness and adding a new trait to be used in place of several clown role checks.</li>
|
||||
<li class="tweak">Clown ops too also suffer from not holding or wearing clown shoes now.</li>
|
||||
<li class="bugfix">Fixed a few holo barriers lacking transparency.</li>
|
||||
<li class="bugfix">Fixed character setup preview bodyparts not displaying correctly most of times.</li>
|
||||
<li class="bugfix">Fixed character appearance preview displaying the mannequin in job attire instead of undergarments.</li>
|
||||
<li class="bugfix">Fixed raven's shuttle computer not being of the emergency shuttle type.</li>
|
||||
<li class="tweak">Blood bank generators can now be anchored and unanchored now.</li>
|
||||
<li class="admin">Ghost mentors can now orbit around the target instead of setting their view to theirs'.</li>
|
||||
<li class="bugfix">Fixes a ghostchat eavesdropping exploit concerning VR.</li>
|
||||
<li class="bugfix">Fixes VR deaths being broadcasted in deadchat.</li>
|
||||
<li class="bugfix">Fixed a few pill bottle issues with the ChemMaster.</li>
|
||||
<li class="bugfix">Fixes a few negative quirks not being properly removed when deleted.</li>
|
||||
<li class="tweak">Phobia and mute quirks are no longer cheesed by brain surgery grade healing or medicines.</li>
|
||||
<li class="bugfix">Fixed double-flavour (and bland custom) ice creams.</li>
|
||||
<li class="bugfix">Fixed Pubbystation's wall Nanomeds being inconsistent with other stations'.</li>
|
||||
<li class="bugfix">dextrous simplemobs can now swap action intent with 1, 2, 3, 4 now. Just like humies, ayys and monkys.</li>
|
||||
<li class="bugfix">Stops humanoids whose skin_tone variable is set to "albino" from showing up as pale when examined should their species not use skintones anyway.</li>
|
||||
<li class="rscdel">Removed the old (almost) unused roboticist encryption key and headset.</li>
|
||||
<li class="bugfix">Fixed goose meat.</li>
|
||||
<li class="bugfix">Fixed a little door assembly glass dupe exploit</li>
|
||||
<li class="bugfix">Fixed AI holopad speech text being small and whispers that in multiple exclamation marks echo through multiple areas.</li>
|
||||
<li class="rscdel">Removed literally atrocious polka dotted accessories. They were even more atrocious than the yellow horrible tie.</li>
|
||||
</ul>
|
||||
<h3 class="author">Ghommie (also porting PRs by AnturK and Arkatos) updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed light eaters not burning out borg lamplights and flashes. fix Fixed light eater not affecting open turfs emitting lights such as light tiles and fairy grass.</li>
|
||||
<li class="bugfix">Fixed an empty reference about light eater armblade disintegration after Heart of Darkness removal.</li>
|
||||
</ul>
|
||||
<h3 class="author">Ghommie, Skogol updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="refactor">refactored altclick interaction to allow alt-click interactable objects to parent call without forcing the turf contents stat menu open.</li>
|
||||
<li class="tweak">Alt clicking will no longer show turf contents for items inside bags etc.</li>
|
||||
<li class="tweak">Alt clicking the source of your turf contents stat menu will now close said menu.</li>
|
||||
</ul>
|
||||
<h3 class="author">GrayRachnid updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixes consistency</li>
|
||||
</ul>
|
||||
<h3 class="author">Hatterhat updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Regenerative nanites, a "chemical" used in the combat stimulant injector. Actually quite stimulating, and not bad in a pinch for a nuclear operative. Check the Combat Medic Kit!</li>
|
||||
<li class="tweak">The Combat Medic Kit now has an advanced health analyzer and medisprays instead of patches and a chloral syringe.</li>
|
||||
<li class="balance">The Advanced Syndicate Surgery Duffelbag or whatever it was doesn't get the better injector, because nobody uses it and so nobody's bothered to update it.</li>
|
||||
<li class="rscadd">.357 speedloaders can now be printed with the Advanced Illegal Ballistics node on the tech tree!</li>
|
||||
<li class="balance">okay so i may have given the .357 an extra speedloader at the same cost but it comes in a box now</li>
|
||||
</ul>
|
||||
<h3 class="author">ItzGabby updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed AltClick on polychromic collars so they actually work now.</li>
|
||||
</ul>
|
||||
<h3 class="author">KeRSedChaplain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="soundadd">Extends the file "deltakalaxon.ogg" to a 38 second .ogg.</li>
|
||||
</ul>
|
||||
<h3 class="author">Linzolle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">neck slice. harm intent someone's head while they are unconscious or in a neck grab to make them bleed uncontrollably.</li>
|
||||
<li class="bugfix">officer's sabre now properly makes the unsheating and resheating noise</li>
|
||||
<li class="bugfix">fireman failure has a different message depending on the circumstance</li>
|
||||
<li class="rscadd">Abductor chem dispenser, and added it to the abductor console.</li>
|
||||
<li class="rscadd">"Superlingual matrix" to the abductor console. It's the abductor's tongue. Can be used to link it to your abductor communication channel and then implanted into a test subject.</li>
|
||||
<li class="rscadd">Shrink ray and added it to the abductor console.</li>
|
||||
<li class="soundadd">Shrink ray sound effect (its the fucking mega man death sound)</li>
|
||||
<li class="rscadd">special jumpsuit for abductors</li>
|
||||
<li class="imageadd">abductor jumpsuit, including digi version if a digitigrade person somehow manages to get their hands on it. sprites for the shrink ray and chem dispenser.</li>
|
||||
<li class="rscadd">new glands to play with, including the all-access gland, the quantum gland, and the blood type randomiser.</li>
|
||||
<li class="code_imp">split every gland into its own file instead of all being in one file</li>
|
||||
<li class="tweak">cosmic coat crafting recipe changed to coat + cosmic bedsheet</li>
|
||||
</ul>
|
||||
<h3 class="author">Mickyan, nemvar, RaveRadbury, AnturK, SpaceManiac updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Certain incompatible quirks can no longer be taken together.</li>
|
||||
<li class="bugfix">If an admin sends a ghost back to the lobby, they can now choose a different set of quirks.</li>
|
||||
<li class="spellcheck">the quirk menu went through some minor formatting changes.</li>
|
||||
<li class="bugfix">Podcloning now lets you keep your quirks.</li>
|
||||
<li class="rscadd">Quirks have flavor text in medical records.</li>
|
||||
<li class="spellcheck">All quirk medical records refer to "Patient", removing a few instances of "Subject".</li>
|
||||
<li class="tweak">Quirks no longer apply to off-station roundstart antagonists.</li>
|
||||
<li class="code_imp">Mood quirks are now only processed by the quirk holders</li>
|
||||
</ul>
|
||||
<h3 class="author">Narcissisko (ported by Hatterhat) updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Luxury Bar Capsule, at 10,000 points. Comes with no medical supplies, a bar, and a bunch of cigars. Ported from tgstation/tgstation#45547.</li>
|
||||
</ul>
|
||||
<h3 class="author">Nervere and subject217, Militaires, py01, nemvar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">The cook's CQC now only works when in the kitchen or the kitchen backroom.</li>
|
||||
<li class="spellcheck">corrected CQC help instructions</li>
|
||||
<li class="bugfix">CQC and Sleeping Carp are properly logged.</li>
|
||||
<li class="tweak">CQC can passively grab targets when not on grab intent. Passive grabs do not count towards combos for CQC or Sleeping carp.</li>
|
||||
<li class="code_imp">Martial Art and NOGUN cleanup.</li>
|
||||
</ul>
|
||||
<h3 class="author">PersianXerxes updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Removed night vision quirk</li>
|
||||
</ul>
|
||||
<h3 class="author">Putnam updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">acute hepatic pharmacokinesis now works if you already have relevant genitals</li>
|
||||
<li class="balance">Contamination is no longer an infinitely spreading deadly contagion causing mass panic</li>
|
||||
<li class="tweak">Dynamic rulesets have lower weight if a round recently featured them (except traitor).</li>
|
||||
</ul>
|
||||
<h3 class="author">Putnam3145 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Buffed HE pipes by making them realistically radiate away heat.</li>
|
||||
<li class="bugfix">Dynamic has a (totally unused for any relevant purpose) roundstart report now.</li>
|
||||
<li class="admin">A whole bunch of dynamic data is now available for statbus</li>
|
||||
<li class="bugfix">Dynamic from-ghost antags no longer double dip on threat refunds when the mode fails due to not enough applications.</li>
|
||||
<li class="bugfix">whoops broke quirks</li>
|
||||
<li class="bugfix">quirks work</li>
|
||||
<li class="rscadd">New tab in preferences screen: "ERP preferences"</li>
|
||||
<li class="rscadd">New opt-outs for individual effects of incubus draught, succubus milk</li>
|
||||
<li class="rscdel">Acute hepatic pharmacokinesis has been removed, replaced with above</li>
|
||||
<li class="tweak">Renamed "Toggle Lewdchem" to "Toggle Lewd MKUltra", since that's what it actually means, and made it toggle the "hypno" setting (rename it again if more hypno mechanics are added).</li>
|
||||
<li class="tweak">Made MKUltra's lewd messages require both people involved to have hypno opted-in.</li>
|
||||
<li class="config">Buncha dynamic config tweaks</li>
|
||||
<li class="bugfix">Ghost cafe spawns are actual ghost roles by the game's reckoning now</li>
|
||||
<li class="bugfix">a runtime in radioactive contamination</li>
|
||||
<li class="balance">Bomb armor now acts like other armor types.</li>
|
||||
<li class="balance">Devastation-level explosions on armorless people no longer destroys everything in their bags.</li>
|
||||
</ul>
|
||||
<h3 class="author">Seris02 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">the clowns headset</li>
|
||||
<li class="bugfix">distance checks</li>
|
||||
<li class="bugfix">the sprites</li>
|
||||
<li class="rscadd">added the runed and brass winter coats (cosmetic ratvarian/narsian)</li>
|
||||
<li class="tweak">how the narsian/ratvarian coats can be made</li>
|
||||
<li class="bugfix">fixes some ghost roles from dying of stupid shit</li>
|
||||
<li class="bugfix">pandoras attacking their owners</li>
|
||||
<li class="rscadd">Added Rising Bass and the shifting scroll.</li>
|
||||
<li class="tweak">Changes the martial arts scroll in the uplink to "Sleeping Carp Scroll"</li>
|
||||
</ul>
|
||||
<h3 class="author">ShizCalev updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed floodlights not turning off properly when they're underpowered.</li>
|
||||
<li class="bugfix">Fixed emitters not changing icons properly when they're underpowered.</li>
|
||||
</ul>
|
||||
<h3 class="author">Sishen1542 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Clicking a pack of seeds with a pen allows you to set the plant's name, description and the pack of seeds' description. Useful for differentiating genetically modified plants. These changes will persist through different generations of the plant.</li>
|
||||
<li class="rscadd">Hydroponics trays update their name and description to reflect the plant inside them. They revert to default when emptied.</li>
|
||||
</ul>
|
||||
<h3 class="author">Toriate updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Polychromic shorts now have a digitigrade state</li>
|
||||
</ul>
|
||||
<h3 class="author">Trilbyspaceclone updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">ports all the new donuts, burgars, and chicken stuff from RG</li>
|
||||
<li class="rscadd">ports new snowcone</li>
|
||||
<li class="rscadd">ports grill</li>
|
||||
<li class="rscadd">ports beakfeast tag/mood lit as TG has it</li>
|
||||
<li class="rscadd">ports all the amazing new sprites</li>
|
||||
<li class="tweak">ports crafting for many things like snowcones needing water</li>
|
||||
<li class="balance">ports of many craftings</li>
|
||||
<li class="soundadd">lowers fryers sound</li>
|
||||
<li class="imageadd">ported icons for new food/grill</li>
|
||||
<li class="imagedel">ports the deletion of some icons and images</li>
|
||||
<li class="spellcheck">ports a spell check for the snowcones</li>
|
||||
<li class="code_imp">ports fixes for stuff I didnt know were even broken with snowcones</li>
|
||||
<li class="bugfix">coder cat failers to push the last commit from year(s) ago</li>
|
||||
<li class="admin">Updates the changlogs</li>
|
||||
<li class="tweak">meat hook from HUGE to bulky</li>
|
||||
<li class="tweak">CE hardsuit is now more rad-proof</li>
|
||||
<li class="bugfix">Wrong icon names, missing dog fashion with telegram hat</li>
|
||||
<li class="rscadd">New softdrink that comes in its own vender!</li>
|
||||
<li class="rscadd">Honey now has a reaction with plants</li>
|
||||
<li class="tweak">Buzz fuzz now only has a 5% to give honey and will now give 1u of sugar not 2</li>
|
||||
<li class="rscadd">Blaster shotguns back into armory</li>
|
||||
<li class="rscdel">Removed Lighters in thunderdomes</li>
|
||||
<li class="rscadd">Silicons now know what a slime is saying!</li>
|
||||
<li class="balance">honey now will not kill slimes. Honey slimepeople can be a thing now, go sci.</li>
|
||||
<li class="rscadd">Added insulin into many of the borg hypo's</li>
|
||||
</ul>
|
||||
<h3 class="author">Useroth updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">bamboo which can be used to build punji sticks/ blowguns available as a sugarcane mutation or in exotic seed crate</li>
|
||||
<li class="tweak">changed the sugar cane growth stages because fuck if I know why, but it was in the PR</li>
|
||||
<li class="rscadd">New lavaland ruin: Pulsating tumor</li>
|
||||
<li class="rscadd">New class of lavaland mobs, a bit weaker than megafauna but still stronger than most of what you normally see</li>
|
||||
<li class="rscadd">Ghost cafe spawner. For letting people spawn as their own character in the ninja holding facility. It bypasses the usual check, so people who have suicided/ghosted/cryod may use it.</li>
|
||||
<li class="rscadd">Dorms in the ninja holding facility.</li>
|
||||
</ul>
|
||||
<h3 class="author">Xantholne updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Santa Hats to Loadout and Clothesmate</li>
|
||||
<li class="rscadd">Christmas Wintercoats to Loadout and Clothesmate</li>
|
||||
<li class="rscadd">Christmas male and female uniforms to loadout and Clothesmate</li>
|
||||
<li class="rscadd">Red, Green, and Traditional Santa boots to loadout and Clothesmate</li>
|
||||
<li class="rscadd">Christmas Socks, Red candycane socks, Green candycane socks to sock selection</li>
|
||||
</ul>
|
||||
<h3 class="author">kappa-sama updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">legion drops more crates now</li>
|
||||
<li class="balance">.357 speedloaders in autolathes are now individual bullets instead, speedloaders are now illegal tech, costs less total metal to make 7 bullets than a previous speedloader. 7.62mm bullets in autolathe when hacked and costs more metal to make 5 7.62mm bullets than getting a clip from the seclathe.</li>
|
||||
<li class="tweak">mentions that you can refill speedloaders on .357 uplink description</li>
|
||||
<li class="bugfix">you can now strip people while aggrograbbing or higher</li>
|
||||
<li class="rscadd">plasmafist to wizard</li>
|
||||
<li class="code_imp">modular is gone</li>
|
||||
<li class="rscadd">martial apprentices for the local Chinese wizard</li>
|
||||
<li class="bugfix">broodmother baby lag</li>
|
||||
<li class="balance">you can no longer get 100k credits by spending 4k roundstart</li>
|
||||
<li class="balance">cooking oil in sunflowers instead of corn oil</li>
|
||||
<li class="bugfix">throats are no longer slit happy</li>
|
||||
</ul>
|
||||
<h3 class="author">keronshb updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds reflector blobs to shield blob upgrades</li>
|
||||
</ul>
|
||||
<h3 class="author">kevinz000 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Launchpads can now take number inputs for offsets rather than just buttons.</li>
|
||||
<li class="balance">nanites no longer spread through air blocking objects</li>
|
||||
<li class="rscadd">Night vision readded as a darkness dampening effect rather than darksight.</li>
|
||||
<li class="rscdel">conveyors can only stack items on tiles to 150 now.</li>
|
||||
<li class="rscadd">added 8 character save slots</li>
|
||||
<li class="rscadd">Cargo shuttle now silently ignores slaughter demons/revenants instead of being blocked even while they are jaunted. A drawback is that manifested ones can't block it either, any more.</li>
|
||||
<li class="balance">flashbangs process light/sound separately and uses viewers(), so xray users beware.</li>
|
||||
<li class="tweak">Stat() slowed down for anti-lag measures.</li>
|
||||
<li class="bugfix">sprint/stamina huds now work again</li>
|
||||
<li class="balance">Combat defibs now instant stun on disarm rather than 1 second again</li>
|
||||
<li class="balance">Defibs are now always emagged when emagged with an emag rather than EMP.</li>
|
||||
<li class="bugfix">aooc toggling now only broadcasts to antagonists</li>
|
||||
<li class="code_imp">Antag rep proc is now easier to read and supports returning a list.</li>
|
||||
<li class="balance">Clockwork marauders are now on a configured summon cooldown if being summoned on station. They also rapidly bleed health while in or next to space. And they glow brighter.</li>
|
||||
</ul>
|
||||
<h3 class="author">lolman360 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added ability to pick up certain simplemobs.</li>
|
||||
</ul>
|
||||
<h3 class="author">nemvar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">The brains of roundstart borgs no longer decay.</li>
|
||||
<li class="code_imp">Refactored the visibility of reagents for mobs.</li>
|
||||
</ul>
|
||||
<h3 class="author">nicbn, Kevinz000, ShizCalev updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Fire alarm is now simpler. Touch it to activate, touch it to deactivate. When activated, it will blink inconsistently if it is emagged.</li>
|
||||
<li class="bugfix">You can no longer spam fire alarms. Also, they're logged again.</li>
|
||||
<li class="bugfix">Fixed fire alarms not updating icons properly after being emagged and hacked by Malf AI's.</li>
|
||||
</ul>
|
||||
<h3 class="author">r4d6 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a N2O pressure tank</li>
|
||||
<li class="rscdel">Removed a AM Shielding from the crate</li>
|
||||
<li class="rscadd">Added Handshakes</li>
|
||||
<li class="rscadd">Added Nose booping</li>
|
||||
<li class="rscadd">Added submaps for the SM, Tesla and Singulo</li>
|
||||
<li class="rscadd">Added a placeholder on Boxstation for the Engines</li>
|
||||
<li class="bugfix">fixed Nose boops not triggering</li>
|
||||
</ul>
|
||||
<h3 class="author">shellspeed1 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds Insect markings</li>
|
||||
<li class="rscadd">Adds three new moth wings.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">07 December 2019</h2>
|
||||
<h3 class="author">AffectedArc07 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -23656,3 +23656,327 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- tweak: Supply ordered looms are unanchored. Bring a wrench.
|
||||
r4d6:
|
||||
- rscadd: Added Departements Winter Coats to the loadout list.
|
||||
2019-12-30:
|
||||
AnturK:
|
||||
- bugfix: Fixed ranged syndicate mobs stormtrooper training.
|
||||
Arturlang:
|
||||
- rscadd: Adds Bloodsuckers, beware.
|
||||
BlueWildrose:
|
||||
- bugfix: Fixed stargazers being unable to link to themselves if mindshielded or
|
||||
if holding psionic shielding devices (tinfoil hats) when the species is set.
|
||||
- bugfix: Fixes non-roundstart slimes being unable to wag their tail.
|
||||
Commandersand:
|
||||
- tweak: added two words to clown filter
|
||||
- rscadd: Added new things to loadouts, check em
|
||||
DeltaFire15:
|
||||
- balance: Clock cult kindle no longer cares about oxygen damage
|
||||
- tweak: changed mecha internals access for some special mechs.
|
||||
- tweak: no more mech maintenance access for engineers.
|
||||
- tweak: All heads of staff can now message CC
|
||||
- code_imp: Removes a magicnumber
|
||||
- balance: Rebalanced cult vs cult stun effects to debuff instead of stun
|
||||
Detective-Google:
|
||||
- bugfix: short hair 80's is no longer jank
|
||||
Fermis:
|
||||
- tweak: tweaked how super bases/acids work but limiting them
|
||||
Fikou:
|
||||
- tweak: the windup toolbox now has some more "realistic" sounds
|
||||
- bugfix: the windup toolbox now rumbles again
|
||||
Ghommie:
|
||||
- bugfix: Fixed hulks, sleeping carp users, pacifists and people with chunky fingers
|
||||
being able to unrestrictly use gun and pneumatic cannon circuit assemblies.
|
||||
- bugfix: Fixed gun circuit assemblies being only usable by human mobs.
|
||||
- balance: Doubled the locomotion circuit external cooldown, thus halving the movable
|
||||
assemblies' movespeed.
|
||||
- tweak: Made wooden cabinet/closets... actually made of wood.
|
||||
- tweak: Wooden cabinets are now deconstructable with a screwdriver.
|
||||
- tweak: Deconstruction of large crates and other closet subtypes deconstructable
|
||||
with tools other than the welder is no longer instant.
|
||||
- tweak: You shouldn't be able to target objects you can't see (excluding darkness)
|
||||
with the ARCD and RLD
|
||||
- tweak: The admin RCD is ranged too, just like the ARCD.
|
||||
- bugfix: Fixed welding, thirteen loko, welding and wraith spectacles not blinding
|
||||
people as expected. Thank you all whomst reported this issue in the suggestions
|
||||
box channel instead of the github repository's issues section, very smart!
|
||||
- bugfix: Fixed on_mob eyes overlays not updating properly in certain cases.
|
||||
- bugfix: Fixed deconversion from bloodshot eyes blood cult resetting your eyes'
|
||||
color to pitch black instead of their previous color, more or less.
|
||||
- balance: 'Spinfusor nerf: Upped the casing and ammo box size by one step, removed
|
||||
the projectile''s dismemberment value (explosions can still rip a limb or two
|
||||
off), halved the ammo box capacity, reduced the spinfusor ammo supply pack contents
|
||||
from 32 to 8, removed the casing''s ability to explode when thrown.'
|
||||
- bugfix: Fixes bubblegum's death not unlocking the arena shuttle buyment.
|
||||
- bugfix: Fixed alien tech node not being unlockable with subtypes of the accepted
|
||||
items.
|
||||
- bugfix: Fixed reactive armor onmob overlays not updating when toggled and reactive
|
||||
teleport armor still using forceMove() instead of do_teleport()
|
||||
- bugfix: Fixed space hermit asteroid rocks unintendedly spawning airless asteroid
|
||||
turf when mined, save for the perimeter.
|
||||
- bugfix: Fixes reviver implant having been a crapshot ever since soft-crit was
|
||||
introduced years ago.
|
||||
- tweak: Added a "convalescence" time (about 15 seconds) after the user is out of
|
||||
unconsciousbess/crit to ensure they are properly stabilized.
|
||||
- tweak: Added a 15 minutes hardcap for accumulated revive cooldown (equivalent
|
||||
to 150 points of brute or burn healed) above which the implant starts cooling
|
||||
down regardless of user's conditions.
|
||||
- bugfix: Fixed AI core displays I may have broken with my coding extravaganza.
|
||||
- soundadd: Blue, Amber and Red security alert sounds should be half as loud now.
|
||||
- balance: Buffed clown ops by removing their clumsiness and adding a new trait
|
||||
to be used in place of several clown role checks.
|
||||
- tweak: Clown ops too also suffer from not holding or wearing clown shoes now.
|
||||
- bugfix: Fixed a few holo barriers lacking transparency.
|
||||
- bugfix: Fixed character setup preview bodyparts not displaying correctly most
|
||||
of times.
|
||||
- bugfix: Fixed character appearance preview displaying the mannequin in job attire
|
||||
instead of undergarments.
|
||||
- bugfix: Fixed raven's shuttle computer not being of the emergency shuttle type.
|
||||
- tweak: Blood bank generators can now be anchored and unanchored now.
|
||||
- admin: Ghost mentors can now orbit around the target instead of setting their
|
||||
view to theirs'.
|
||||
- bugfix: Fixes a ghostchat eavesdropping exploit concerning VR.
|
||||
- bugfix: Fixes VR deaths being broadcasted in deadchat.
|
||||
- bugfix: Fixed a few pill bottle issues with the ChemMaster.
|
||||
- bugfix: Fixes a few negative quirks not being properly removed when deleted.
|
||||
- tweak: Phobia and mute quirks are no longer cheesed by brain surgery grade healing
|
||||
or medicines.
|
||||
- bugfix: Fixed double-flavour (and bland custom) ice creams.
|
||||
- bugfix: Fixed Pubbystation's wall Nanomeds being inconsistent with other stations'.
|
||||
- bugfix: dextrous simplemobs can now swap action intent with 1, 2, 3, 4 now. Just
|
||||
like humies, ayys and monkys.
|
||||
- bugfix: Stops humanoids whose skin_tone variable is set to "albino" from showing
|
||||
up as pale when examined should their species not use skintones anyway.
|
||||
- rscdel: Removed the old (almost) unused roboticist encryption key and headset.
|
||||
- bugfix: Fixed goose meat.
|
||||
- bugfix: Fixed a little door assembly glass dupe exploit
|
||||
- bugfix: Fixed AI holopad speech text being small and whispers that in multiple
|
||||
exclamation marks echo through multiple areas.
|
||||
- rscdel: Removed literally atrocious polka dotted accessories. They were even more
|
||||
atrocious than the yellow horrible tie.
|
||||
Ghommie (also porting PRs by AnturK and Arkatos):
|
||||
- bugfix: Fixed light eaters not burning out borg lamplights and flashes. fix Fixed
|
||||
light eater not affecting open turfs emitting lights such as light tiles and
|
||||
fairy grass.
|
||||
- bugfix: Fixed an empty reference about light eater armblade disintegration after
|
||||
Heart of Darkness removal.
|
||||
Ghommie, Skogol:
|
||||
- refactor: refactored altclick interaction to allow alt-click interactable objects
|
||||
to parent call without forcing the turf contents stat menu open.
|
||||
- tweak: Alt clicking will no longer show turf contents for items inside bags etc.
|
||||
- tweak: Alt clicking the source of your turf contents stat menu will now close
|
||||
said menu.
|
||||
GrayRachnid:
|
||||
- bugfix: fixes consistency
|
||||
Hatterhat:
|
||||
- rscadd: Regenerative nanites, a "chemical" used in the combat stimulant injector.
|
||||
Actually quite stimulating, and not bad in a pinch for a nuclear operative.
|
||||
Check the Combat Medic Kit!
|
||||
- tweak: The Combat Medic Kit now has an advanced health analyzer and medisprays
|
||||
instead of patches and a chloral syringe.
|
||||
- balance: The Advanced Syndicate Surgery Duffelbag or whatever it was doesn't get
|
||||
the better injector, because nobody uses it and so nobody's bothered to update
|
||||
it.
|
||||
- rscadd: .357 speedloaders can now be printed with the Advanced Illegal Ballistics
|
||||
node on the tech tree!
|
||||
- balance: okay so i may have given the .357 an extra speedloader at the same cost
|
||||
but it comes in a box now
|
||||
ItzGabby:
|
||||
- bugfix: Fixed AltClick on polychromic collars so they actually work now.
|
||||
KeRSedChaplain:
|
||||
- soundadd: Extends the file "deltakalaxon.ogg" to a 38 second .ogg.
|
||||
Linzolle:
|
||||
- rscadd: neck slice. harm intent someone's head while they are unconscious or in
|
||||
a neck grab to make them bleed uncontrollably.
|
||||
- bugfix: officer's sabre now properly makes the unsheating and resheating noise
|
||||
- bugfix: fireman failure has a different message depending on the circumstance
|
||||
- rscadd: Abductor chem dispenser, and added it to the abductor console.
|
||||
- rscadd: '"Superlingual matrix" to the abductor console. It''s the abductor''s
|
||||
tongue. Can be used to link it to your abductor communication channel and then
|
||||
implanted into a test subject.'
|
||||
- rscadd: Shrink ray and added it to the abductor console.
|
||||
- soundadd: Shrink ray sound effect (its the fucking mega man death sound)
|
||||
- rscadd: special jumpsuit for abductors
|
||||
- imageadd: abductor jumpsuit, including digi version if a digitigrade person somehow
|
||||
manages to get their hands on it. sprites for the shrink ray and chem dispenser.
|
||||
- rscadd: new glands to play with, including the all-access gland, the quantum gland,
|
||||
and the blood type randomiser.
|
||||
- code_imp: split every gland into its own file instead of all being in one file
|
||||
- tweak: cosmic coat crafting recipe changed to coat + cosmic bedsheet
|
||||
Mickyan, nemvar, RaveRadbury, AnturK, SpaceManiac:
|
||||
- bugfix: Certain incompatible quirks can no longer be taken together.
|
||||
- bugfix: If an admin sends a ghost back to the lobby, they can now choose a different
|
||||
set of quirks.
|
||||
- spellcheck: the quirk menu went through some minor formatting changes.
|
||||
- bugfix: Podcloning now lets you keep your quirks.
|
||||
- rscadd: Quirks have flavor text in medical records.
|
||||
- spellcheck: All quirk medical records refer to "Patient", removing a few instances
|
||||
of "Subject".
|
||||
- tweak: Quirks no longer apply to off-station roundstart antagonists.
|
||||
- code_imp: Mood quirks are now only processed by the quirk holders
|
||||
Narcissisko (ported by Hatterhat):
|
||||
- rscadd: Luxury Bar Capsule, at 10,000 points. Comes with no medical supplies,
|
||||
a bar, and a bunch of cigars. Ported from tgstation/tgstation#45547.
|
||||
Nervere and subject217, Militaires, py01, nemvar:
|
||||
- balance: The cook's CQC now only works when in the kitchen or the kitchen backroom.
|
||||
- spellcheck: corrected CQC help instructions
|
||||
- bugfix: CQC and Sleeping Carp are properly logged.
|
||||
- tweak: CQC can passively grab targets when not on grab intent. Passive grabs do
|
||||
not count towards combos for CQC or Sleeping carp.
|
||||
- code_imp: Martial Art and NOGUN cleanup.
|
||||
PersianXerxes:
|
||||
- rscdel: Removed night vision quirk
|
||||
Putnam:
|
||||
- bugfix: acute hepatic pharmacokinesis now works if you already have relevant genitals
|
||||
- balance: Contamination is no longer an infinitely spreading deadly contagion causing
|
||||
mass panic
|
||||
- tweak: Dynamic rulesets have lower weight if a round recently featured them (except
|
||||
traitor).
|
||||
Putnam3145:
|
||||
- balance: Buffed HE pipes by making them realistically radiate away heat.
|
||||
- bugfix: Dynamic has a (totally unused for any relevant purpose) roundstart report
|
||||
now.
|
||||
- admin: A whole bunch of dynamic data is now available for statbus
|
||||
- bugfix: Dynamic from-ghost antags no longer double dip on threat refunds when
|
||||
the mode fails due to not enough applications.
|
||||
- bugfix: whoops broke quirks
|
||||
- bugfix: quirks work
|
||||
- rscadd: 'New tab in preferences screen: "ERP preferences"'
|
||||
- rscadd: New opt-outs for individual effects of incubus draught, succubus milk
|
||||
- rscdel: Acute hepatic pharmacokinesis has been removed, replaced with above
|
||||
- tweak: Renamed "Toggle Lewdchem" to "Toggle Lewd MKUltra", since that's what it
|
||||
actually means, and made it toggle the "hypno" setting (rename it again if more
|
||||
hypno mechanics are added).
|
||||
- tweak: Made MKUltra's lewd messages require both people involved to have hypno
|
||||
opted-in.
|
||||
- config: Buncha dynamic config tweaks
|
||||
- bugfix: Ghost cafe spawns are actual ghost roles by the game's reckoning now
|
||||
- bugfix: a runtime in radioactive contamination
|
||||
- balance: Bomb armor now acts like other armor types.
|
||||
- balance: Devastation-level explosions on armorless people no longer destroys everything
|
||||
in their bags.
|
||||
Seris02:
|
||||
- rscadd: the clowns headset
|
||||
- bugfix: distance checks
|
||||
- bugfix: the sprites
|
||||
- rscadd: added the runed and brass winter coats (cosmetic ratvarian/narsian)
|
||||
- tweak: how the narsian/ratvarian coats can be made
|
||||
- bugfix: fixes some ghost roles from dying of stupid shit
|
||||
- bugfix: pandoras attacking their owners
|
||||
- rscadd: Added Rising Bass and the shifting scroll.
|
||||
- tweak: Changes the martial arts scroll in the uplink to "Sleeping Carp Scroll"
|
||||
ShizCalev:
|
||||
- bugfix: Fixed floodlights not turning off properly when they're underpowered.
|
||||
- bugfix: Fixed emitters not changing icons properly when they're underpowered.
|
||||
Sishen1542:
|
||||
- rscadd: Clicking a pack of seeds with a pen allows you to set the plant's name,
|
||||
description and the pack of seeds' description. Useful for differentiating genetically
|
||||
modified plants. These changes will persist through different generations of
|
||||
the plant.
|
||||
- rscadd: Hydroponics trays update their name and description to reflect the plant
|
||||
inside them. They revert to default when emptied.
|
||||
Toriate:
|
||||
- rscadd: Polychromic shorts now have a digitigrade state
|
||||
Trilbyspaceclone:
|
||||
- rscadd: ports all the new donuts, burgars, and chicken stuff from RG
|
||||
- rscadd: ports new snowcone
|
||||
- rscadd: ports grill
|
||||
- rscadd: ports beakfeast tag/mood lit as TG has it
|
||||
- rscadd: ports all the amazing new sprites
|
||||
- tweak: ports crafting for many things like snowcones needing water
|
||||
- balance: ports of many craftings
|
||||
- soundadd: lowers fryers sound
|
||||
- imageadd: ported icons for new food/grill
|
||||
- imagedel: ports the deletion of some icons and images
|
||||
- spellcheck: ports a spell check for the snowcones
|
||||
- code_imp: ports fixes for stuff I didnt know were even broken with snowcones
|
||||
- bugfix: coder cat failers to push the last commit from year(s) ago
|
||||
- admin: Updates the changlogs
|
||||
- tweak: meat hook from HUGE to bulky
|
||||
- tweak: CE hardsuit is now more rad-proof
|
||||
- bugfix: Wrong icon names, missing dog fashion with telegram hat
|
||||
- rscadd: New softdrink that comes in its own vender!
|
||||
- rscadd: Honey now has a reaction with plants
|
||||
- tweak: Buzz fuzz now only has a 5% to give honey and will now give 1u of sugar
|
||||
not 2
|
||||
- rscadd: Blaster shotguns back into armory
|
||||
- rscdel: Removed Lighters in thunderdomes
|
||||
- rscadd: Silicons now know what a slime is saying!
|
||||
- balance: honey now will not kill slimes. Honey slimepeople can be a thing now,
|
||||
go sci.
|
||||
- rscadd: Added insulin into many of the borg hypo's
|
||||
Useroth:
|
||||
- rscadd: bamboo which can be used to build punji sticks/ blowguns available as
|
||||
a sugarcane mutation or in exotic seed crate
|
||||
- tweak: changed the sugar cane growth stages because fuck if I know why, but it
|
||||
was in the PR
|
||||
- rscadd: 'New lavaland ruin: Pulsating tumor'
|
||||
- rscadd: New class of lavaland mobs, a bit weaker than megafauna but still stronger
|
||||
than most of what you normally see
|
||||
- rscadd: Ghost cafe spawner. For letting people spawn as their own character in
|
||||
the ninja holding facility. It bypasses the usual check, so people who have
|
||||
suicided/ghosted/cryod may use it.
|
||||
- rscadd: Dorms in the ninja holding facility.
|
||||
Xantholne:
|
||||
- rscadd: Santa Hats to Loadout and Clothesmate
|
||||
- rscadd: Christmas Wintercoats to Loadout and Clothesmate
|
||||
- rscadd: Christmas male and female uniforms to loadout and Clothesmate
|
||||
- rscadd: Red, Green, and Traditional Santa boots to loadout and Clothesmate
|
||||
- rscadd: Christmas Socks, Red candycane socks, Green candycane socks to sock selection
|
||||
kappa-sama:
|
||||
- balance: legion drops more crates now
|
||||
- balance: .357 speedloaders in autolathes are now individual bullets instead, speedloaders
|
||||
are now illegal tech, costs less total metal to make 7 bullets than a previous
|
||||
speedloader. 7.62mm bullets in autolathe when hacked and costs more metal to
|
||||
make 5 7.62mm bullets than getting a clip from the seclathe.
|
||||
- tweak: mentions that you can refill speedloaders on .357 uplink description
|
||||
- bugfix: you can now strip people while aggrograbbing or higher
|
||||
- rscadd: plasmafist to wizard
|
||||
- code_imp: modular is gone
|
||||
- rscadd: martial apprentices for the local Chinese wizard
|
||||
- bugfix: broodmother baby lag
|
||||
- balance: you can no longer get 100k credits by spending 4k roundstart
|
||||
- balance: cooking oil in sunflowers instead of corn oil
|
||||
- bugfix: throats are no longer slit happy
|
||||
keronshb:
|
||||
- rscadd: Adds reflector blobs to shield blob upgrades
|
||||
kevinz000:
|
||||
- rscadd: Launchpads can now take number inputs for offsets rather than just buttons.
|
||||
- balance: nanites no longer spread through air blocking objects
|
||||
- rscadd: Night vision readded as a darkness dampening effect rather than darksight.
|
||||
- rscdel: conveyors can only stack items on tiles to 150 now.
|
||||
- rscadd: added 8 character save slots
|
||||
- rscadd: Cargo shuttle now silently ignores slaughter demons/revenants instead
|
||||
of being blocked even while they are jaunted. A drawback is that manifested
|
||||
ones can't block it either, any more.
|
||||
- balance: flashbangs process light/sound separately and uses viewers(), so xray
|
||||
users beware.
|
||||
- tweak: Stat() slowed down for anti-lag measures.
|
||||
- bugfix: sprint/stamina huds now work again
|
||||
- balance: Combat defibs now instant stun on disarm rather than 1 second again
|
||||
- balance: Defibs are now always emagged when emagged with an emag rather than EMP.
|
||||
- bugfix: aooc toggling now only broadcasts to antagonists
|
||||
- code_imp: Antag rep proc is now easier to read and supports returning a list.
|
||||
- balance: Clockwork marauders are now on a configured summon cooldown if being
|
||||
summoned on station. They also rapidly bleed health while in or next to space.
|
||||
And they glow brighter.
|
||||
lolman360:
|
||||
- rscadd: Added ability to pick up certain simplemobs.
|
||||
nemvar:
|
||||
- bugfix: The brains of roundstart borgs no longer decay.
|
||||
- code_imp: Refactored the visibility of reagents for mobs.
|
||||
nicbn, Kevinz000, ShizCalev:
|
||||
- tweak: Fire alarm is now simpler. Touch it to activate, touch it to deactivate.
|
||||
When activated, it will blink inconsistently if it is emagged.
|
||||
- bugfix: You can no longer spam fire alarms. Also, they're logged again.
|
||||
- bugfix: Fixed fire alarms not updating icons properly after being emagged and
|
||||
hacked by Malf AI's.
|
||||
r4d6:
|
||||
- rscadd: Added a N2O pressure tank
|
||||
- rscdel: Removed a AM Shielding from the crate
|
||||
- rscadd: Added Handshakes
|
||||
- rscadd: Added Nose booping
|
||||
- rscadd: Added submaps for the SM, Tesla and Singulo
|
||||
- rscadd: Added a placeholder on Boxstation for the Engines
|
||||
- bugfix: fixed Nose boops not triggering
|
||||
shellspeed1:
|
||||
- rscadd: Adds Insect markings
|
||||
- rscadd: Adds three new moth wings.
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Linzolle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "neck slice. harm intent someone's head while they are unconscious or in a neck grab to make them bleed uncontrollably."
|
||||
@@ -1,6 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixed hulks, sleeping carp users, pacifists and people with chunky fingers being able to unrestrictly use gun and pneumatic cannon circuit assemblies."
|
||||
- bugfix: "Fixed gun circuit assemblies being only usable by human mobs."
|
||||
- balance: "Doubled the locomotion circuit external cooldown, thus halving the movable assemblies' movespeed."
|
||||
@@ -1,6 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Made wooden cabinet/closets... actually made of wood."
|
||||
- tweak: "Wooden cabinets are now deconstructable with a screwdriver."
|
||||
- tweak: "Deconstruction of large crates and other closet subtypes deconstructable with tools other than the welder is no longer instant."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "You shouldn't be able to target objects you can't see (excluding darkness) with the ARCD and RLD"
|
||||
- tweak: "The admin RCD is ranged too, just like the ARCD."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "kappa-sama"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "legion drops more crates now"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixed welding, thirteen loko, welding and wraith spectacles not blinding people as expected. Thank you all whomst reported this issue in the suggestions box channel instead of the github repository's issues section, very smart!"
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "kappa-sama"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: ".357 speedloaders in autolathes are now individual bullets instead, speedloaders are now illegal tech, costs less total metal to make 7 bullets than a previous speedloader. 7.62mm bullets in autolathe when hacked and costs more metal to make 5 7.62mm bullets than getting a clip from the seclathe."
|
||||
- tweak: "mentions that you can refill speedloaders on .357 uplink description"
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixed on_mob eyes overlays not updating properly in certain cases."
|
||||
- bugfix: "Fixed deconversion from bloodshot eyes blood cult resetting your eyes' color to pitch black instead of their previous color, more or less."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Spinfusor nerf: Upped the casing and ammo box size by one step, removed the projectile's dismemberment value (explosions can still rip a limb or two off), halved the ammo box capacity, reduced the spinfusor ammo supply pack contents from 32 to 8, removed the casing's ability to explode when thrown."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "lolman360"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added ability to pick up certain simplemobs."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "Sishen1542"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Clicking a pack of seeds with a pen allows you to set the plant's name, description and the pack of seeds' description. Useful for differentiating genetically modified plants. These changes will persist through different generations of the plant."
|
||||
- rscadd: "Hydroponics trays update their name and description to reflect the plant inside them. They revert to default when emptied."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "Fikou"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "the windup toolbox now has some more \"realistic\" sounds"
|
||||
- bugfix: "the windup toolbox now rumbles again"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixes bubblegum's death not unlocking the arena shuttle buyment."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "Useroth"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "bamboo which can be used to build punji sticks/ blowguns available as a sugarcane mutation or in exotic seed crate"
|
||||
- tweak: "changed the sugar cane growth stages because fuck if I know why, but it was in the PR"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixed alien tech node not being unlockable with subtypes of the accepted items."
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user