Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into ilowkeydespiseatmospherics

# Conflicts:
#	_maps/map_files/BoxStation/BoxStation.dmm
This commit is contained in:
ZeroMan
2020-04-30 13:48:48 -04:00
73 changed files with 1977 additions and 5067 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+40 -106
View File
@@ -3,50 +3,30 @@
/turf/closed/wall/mineral/titanium,
/area/shuttle/supply)
"b" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"c" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"d" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"e" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"f" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -55,18 +35,7 @@
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"g" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"h" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -91,20 +60,10 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"k" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"l" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -126,10 +85,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"n" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -140,20 +95,12 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"o" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"p" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -176,10 +123,6 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"q" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -196,19 +139,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"s" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"t" = (
/obj/machinery/door/poddoor{
id = "QMLoaddoor2";
@@ -228,28 +158,15 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"v" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/end{
dir = 8
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"w" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"x" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -260,10 +177,6 @@
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/supply)
"z" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
@@ -290,6 +203,27 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating/airless,
/area/shuttle/supply)
"K" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"Q" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"Z" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
(1,1,1) = {"
a
@@ -323,12 +257,12 @@ C
a
c
o
g
k
g
K
Z
w
o
g
s
K
Q
e
A
D
@@ -336,13 +270,13 @@ D
(4,1,1) = {"
a
c
g
g
g
g
g
g
g
w
w
w
w
w
w
w
z
A
D
@@ -350,13 +284,13 @@ D
(5,1,1) = {"
a
c
g
g
g
g
g
g
w
w
w
w
w
w
k
x
A
D
+1 -50
View File
@@ -144,7 +144,6 @@
pixel_y = 4
},
/obj/item/folder/blue,
/obj/item/gun/energy/e_gun/mini,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"av" = (
@@ -172,10 +171,6 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"ax" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
},
@@ -288,10 +283,6 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"aM" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
@@ -301,10 +292,6 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"aN" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -725,10 +712,6 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"bB" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -791,14 +774,6 @@
/obj/machinery/recharge_station,
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"bG" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"bH" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/bot,
@@ -1057,20 +1032,12 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"cj" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"ck" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"cm" = (
@@ -1079,27 +1046,15 @@
/area/shuttle/escape)
"cr" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"cs" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"cA" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -1159,10 +1114,6 @@
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"Xo" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -1543,7 +1494,7 @@ bn
bi
ac
cj
bG
cr
bR
cK
cT
-12
View File
@@ -70,10 +70,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/transport)
"m" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -115,10 +111,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/transport)
"r" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -126,10 +118,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/transport)
"s" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/corner,
/obj/effect/turf_decal/stripes/corner{
dir = 1
+1 -52
View File
@@ -29,10 +29,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/labor)
"f" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -47,10 +43,6 @@
req_access_txt = "1"
},
/obj/machinery/light,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -63,10 +55,6 @@
pixel_x = 30;
pixel_y = 30
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -111,10 +99,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/labor)
"l" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -127,10 +111,6 @@
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -141,17 +121,12 @@
machinedir = 1;
pixel_x = 30
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
"o" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -164,10 +139,6 @@
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
"p" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
@@ -177,9 +148,6 @@
pixel_x = 25
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/structure/chair/comfy/shuttle{
dir = 8
},
@@ -189,31 +157,12 @@
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
"r" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/structure/closet/crate,
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/labor)
"s" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/loading_area{
dir = 4
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/labor)
"t" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/labor)
@@ -284,7 +233,7 @@ g
a
m
p
s
t
w
y
"}
-25
View File
@@ -15,7 +15,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
"d" = (
/obj/effect/turf_decal/bot,
/obj/machinery/computer/shuttle/mining,
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
@@ -31,10 +30,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
"f" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -48,10 +43,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
"h" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -61,20 +52,12 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/mining)
"i" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/mining)
"j" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/machinery/status_display/evac{
pixel_x = -32
},
@@ -114,10 +97,6 @@
/turf/open/floor/plating,
/area/shuttle/mining)
"m" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -134,10 +113,6 @@
/turf/open/floor/plating/airless,
/area/shuttle/mining)
"p" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/general/hidden{
icon_state = "pipe11-2";
+2
View File
@@ -61,7 +61,9 @@
#define BELOW_MOB_LAYER 3.7
#define LYING_MOB_LAYER 3.8
#define MOB_LOWER_LAYER 3.95
//#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define
#define MOB_UPPER_LAYER 4.05
#define ABOVE_MOB_LAYER 4.1
#define WALL_OBJ_LAYER 4.25
#define EDGED_TURF_LAYER 4.3
+28
View File
@@ -0,0 +1,28 @@
/// true/false
#define SKILL_PROGRESSION_BINARY 1
/// numerical
#define SKILL_PROGRESSION_NUMERICAL 2
/// Enum
#define SKILL_PROGRESSION_ENUM 3
/// Max value of skill for numerical skills
#define SKILL_NUMERICAL_MAX 100
/// Min value of skill for numerical skills
#define SKILL_NUMERICAL_MIN 0
// Standard values for job starting skills
#define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX
// Standard values for job starting skill affinities
#define STARTING_SKILL_AFFINITY_SURGERY_MEDICAL 1.2
// Standard values for skill gain (this is multiplied by affinity)
#define SKILL_GAIN_SURGERY_PER_STEP 0.25
// Misc
/// 40% speedup at 100 skill
#define SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(number) clamp(number / 250, 1, 2)
+3
View File
@@ -387,6 +387,9 @@ SUBSYSTEM_DEF(ticker)
for(var/mob/dead/new_player/N in GLOB.player_list)
var/mob/living/carbon/human/player = N.new_character
if(istype(player) && player.mind && player.mind.assigned_role)
var/datum/job/J = SSjob.GetJob(player.mind.assigned_role)
if(J)
J.standard_assign_skills(player.mind)
if(player.mind.assigned_role == "Captain")
captainless=0
if(player.mind.assigned_role != player.mind.special_role)
+1 -1
View File
@@ -352,7 +352,6 @@ SUBSYSTEM_DEF(vote)
if("dynamic")
if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started.
return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.")
GLOB.master_mode = "dynamic"
var/list/runnable_storytellers = config.get_runnable_storytellers()
var/datum/dynamic_storyteller/picked
for(var/T in runnable_storytellers)
@@ -489,6 +488,7 @@ SUBSYSTEM_DEF(vote)
modes_to_add -= "traitor" // makes it so that traitor is always available
choices.Add(modes_to_add)
if("dynamic")
GLOB.master_mode = "dynamic"
var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight)
for(var/T in config.storyteller_cache)
var/datum/dynamic_storyteller/S = T
@@ -115,6 +115,33 @@
//Tools & Storage//
///////////////////
/datum/crafting_recipe/upgraded_gauze
name = "Improved Gauze"
result = /obj/item/stack/medical/gauze/adv
time = 1
reqs = list(/obj/item/stack/medical/gauze = 1,
/datum/reagent/space_cleaner/sterilizine = 10)
category = CAT_MISC
subcategory = CAT_TOOL
/datum/crafting_recipe/bruise_pack
name = "Bruise Pack"
result = /obj/item/stack/medical/bruise_pack
time = 1
reqs = list(/obj/item/stack/medical/gauze = 1,
/datum/reagent/medicine/styptic_powder = 10)
category = CAT_MISC
subcategory = CAT_TOOL
/datum/crafting_recipe/burn_pack
name = "Brun Ointment"
result = /obj/item/stack/medical/ointment
time = 1
reqs = list(/obj/item/stack/medical/gauze = 1,
/datum/reagent/medicine/silver_sulfadiazine = 10)
category = CAT_MISC
subcategory = CAT_TOOL
/datum/crafting_recipe/ghettojetpack
name = "Improvised Jetpack"
result = /obj/item/tank/jetpack/improvised
+5
View File
@@ -198,6 +198,7 @@
/datum/component/riding/human/Initialize()
. = ..()
directional_vehicle_layers = list(TEXT_NORTH = MOB_LOWER_LAYER, TEXT_SOUTH = MOB_UPPER_LAYER, TEXT_EAST = MOB_UPPER_LAYER, TEXT_WEST = MOB_UPPER_LAYER)
RegisterSignal(parent, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/on_host_unarmed_melee)
/datum/component/riding/human/vehicle_mob_unbuckle(datum/source, mob/living/M, force = FALSE)
@@ -261,6 +262,10 @@
/datum/component/riding/cyborg
/datum/component/riding/cyborg/Initialize()
. = ..()
directional_vehicle_layers = list(TEXT_NORTH = MOB_LOWER_LAYER, TEXT_SOUTH = MOB_UPPER_LAYER, TEXT_EAST = MOB_UPPER_LAYER, TEXT_WEST = MOB_UPPER_LAYER)
/datum/component/riding/cyborg/ride_check(mob/user)
var/atom/movable/AM = parent
if(user.incapacitated())
+4
View File
@@ -63,7 +63,11 @@
var/force_escaped = FALSE // Set by Into The Sunset command of the shuttle manipulator
var/list/learned_recipes //List of learned recipe TYPES.
/// Our skill holder.
var/datum/skill_holder/skill_holder
/datum/mind/New(var/key)
skill_holder = new
src.key = key
soulOwner = src
martial_art = default_martial_art
+16
View File
@@ -0,0 +1,16 @@
// yeah yeah verbs suck whatever I suck at this fix this someone please - kevinz000
/mob/verb/check_skills()
set name = "Check Skills"
set category = "IC"
set desc = "Check your skills (if you have any..)"
if(!mind)
to_chat(usr, "<span class='warning'>How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without a mind?</span>")
return
if(!mind.skill_holder)
to_chat(usr, "<span class='warning'>How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without the capability for skills? (PROBABLY A BUG, PRESS F1.)</span>")
return
var/datum/browser/B = new(usr, "skilldisplay_[REF(src)]", "Skills of [src]")
B.set_content(mind.skill_holder.html_readout())
B.open()
+95
View File
@@ -0,0 +1,95 @@
GLOBAL_LIST_INIT(skill_datums, init_skill_datums())
/proc/init_skill_datums()
. = list()
for(var/path in subtypesof(/datum/skill))
var/datum/skill/S = path
if(initial(S.abstract_type) == path)
continue
S = new path
.[S.type] = S
/proc/get_skill_datum(path)
return GLOB.skill_datums[path]
/proc/sanitize_skill_value(path, value)
var/datum/skill/S = get_skill_datum(path)
// don't check, if we runtime let it happen.
return S.sanitize_value(value)
/proc/is_skill_value_greater(path, existing, new_value)
var/datum/skill/S = get_skill_datum(path)
// don't check, if we runtime let it happen.
return S.is_value_greater(existing, new_value)
/**
* Skill datums
*/
/datum/skill
/// Our name
var/name
/// Our description
var/desc
/// Our progression type
var/progression_type
/// Abstract type
var/abstract_type = /datum/skill
/**
* Ensures what someone's setting as a value for this skill is valid.
*/
/datum/skill/proc/sanitize_value(new_value)
return new_value
/**
* Checks if a value is greater
*/
/datum/skill/proc/is_value_greater(existing, new_value)
if(!existing)
return TRUE
return new_value > existing
/**
* Standard value "render"
*/
/datum/skill/proc/standard_render_value(value)
return value
// Just saying, the choice to use different sub-parent-types is to force coders to resolve issues as I won't be implementing custom procs to grab skill levels in a certain context.
// Aka: So people don't forget to change checks if they change a skill's progression type.
/datum/skill/binary
abstract_type = /datum/skill/binary
progression_type = SKILL_PROGRESSION_BINARY
/datum/skill/binary/sanitize_value(new_value)
return new_value? TRUE : FALSE
/datum/skill/binary/standard_render_value(value)
return value? "Yes" : "No"
/datum/skill/numerical
abstract_type = /datum/skill/numerical
progression_type = SKILL_PROGRESSION_NUMERICAL
/// Max value of this skill
var/max_value = 100
/// Min value of this skill
var/min_value = 0
/// Display as a percent in standard_render_value?
var/display_as_percent = FALSE
/datum/skill/numerical/sanitize_value(new_value)
return clamp(new_value, min_value, max_value)
/datum/skill/numerical/standard_render_value(value)
return display_as_percent? "[round(value/max_value/100, 0.01)]%" : "[value] / [max_value]"
/datum/skill/enum
abstract_type = /datum/skill/enum
progression_type = SKILL_PROGRESSION_ENUM
/// Valid values for the skill
var/list/valid_values = list()
/datum/skill/enum/sanitize_value(new_value)
if(new_value in valid_values)
return new_value
+78
View File
@@ -0,0 +1,78 @@
/**
* Skill holder datums
*/
/datum/skill_holder
/// Our list of skills and values. Lazylist. Associative. Keys are datum typepaths to the skill.
var/list/skills
/// Same as [skills] but affinities, which are multiplied to increase amount when gaining skills.
var/list/skill_affinities
/**
* Grabs the value of a skill.
*/
/datum/skill_holder/proc/get_skill_value(skill)
if(!ispath(skill))
CRASH("Invalid get_skill_value call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
if(!skills)
return null
return skills[skill]
/**
* Grabs our affinity for a skill. !!This is a multiplier!!
*/
/datum/skill_holder/proc/get_skill_affinity(skill)
if(!ispath(skill))
CRASH("Invalid get_skill_affinity call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
if(!skills)
return 1
var/affinity = skill_affinities[skill]
if(isnull(affinity))
return 1
return affinity
/**
* Sets the value of a skill.
*/
/datum/skill_holder/proc/set_skill_value(skill, value)
if(!ispath(skill))
CRASH("Invalid set_skill_value call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
LAZYINITLIST(skills)
value = sanitize_skill_value(skill, value)
if(!isnull(value))
skills[skill] = value
return TRUE
return FALSE
/**
* Boosts a skill to a value if not aobve
*/
/datum/skill_holder/proc/boost_skill_value_to(skill, value)
var/current = get_skill_value(skill)
if(!is_skill_value_greater(skill, current, value))
return FALSE
set_skill_value(skill, value)
return TRUE
/**
* Automatic skill increase, multiplied by skill affinity if existing.
* Only works if skill is numerical.
*/
/datum/skill_holder/proc/auto_gain_experience(skill, value)
if(!ispath(skill, /datum/skill/numerical))
CRASH("You cannot auto increment a non numerical skill!")
var/current = get_skill_value(skill)
var/affinity = get_skill_affinity(skill)
boost_skill_value_to(skill, current + (value * affinity))
/**
* Generates a HTML readout of our skills.
* Port to tgui-next when?
*/
/datum/skill_holder/proc/html_readout()
var/list/out = list("<center><h1>Skills</h1></center><hr>")
out += "<table style=\"width:100%\"><tr><th><b>Skill</b><th><b>Value</b></tr>"
for(var/path in skills)
var/datum/skill/S = GLOB.skill_datums[path]
out += "<tr><td>[S.name]</td><td>[S.standard_render_value(skills[path])]</td></tr>"
out += "</table>"
return out.Join("")
+3
View File
@@ -0,0 +1,3 @@
/datum/skill/numerical/surgery
name = "Surgery"
desc = "How proficient you are at doing surgery."
+7 -3
View File
@@ -40,8 +40,10 @@ GLOBAL_VAR_INIT(dynamic_stacking_limit, 90)
GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset)
// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
// Storyteller picked by the voting.
GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
// Storyteller forced by admins during voting--will be used instead of above.
GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
/datum/game_mode/dynamic
name = "dynamic mode"
@@ -252,7 +254,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
/datum/game_mode/dynamic/send_intercept()
. = "<b><i>Central Command Status Summary</i></b><hr>"
switch(round(threat_level))
if(0 to 20)
if(-INFINITY to 20)
. += "<b>Peaceful Waypoint</b></center><BR>"
. += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive. However, even deep in our territory there may be subversive elements, especially for such a high-value target as your station. Keep an eye out, but don't expect much trouble."
set_security_level(SEC_LEVEL_GREEN)
@@ -284,7 +286,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
. += "<b>Black Orbit</b></center><BR>"
. += "As part of a mandatory security protocol, we are required to inform you that as a result of your orbital pattern directly behind an astrological body (oriented from our nearest observatory), your station will be under decreased monitoring and support. It is anticipated that your extreme location and decreased surveillance could pose security risks. Avoid unnecessary risks and attempt to keep your station in one piece."
set_security_level(SEC_LEVEL_AMBER)
if(96 to 100)
if(96 to INFINITY)
. += "<b>Impending Doom</b></center><BR>"
. += "Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station.<BR>"
. += "Good luck."
@@ -355,6 +357,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful")
/datum/game_mode/dynamic/can_start()
if(GLOB.dynamic_forced_storyteller)
GLOB.dynamic_storyteller_type = GLOB.dynamic_forced_storyteller
storyteller = new GLOB.dynamic_storyteller_type // this is where all the initialization happens
storyteller.on_start()
SSblackbox.record_feedback("text","dynamic_storyteller",1,storyteller.name)
+1 -1
View File
@@ -393,7 +393,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
qdel(src)
item_flags &= ~IN_INVENTORY
if(SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) & COMPONENT_DROPPED_RELOCATION)
return ITEM_RELOCATED_BY_DROPPED
. = ITEM_RELOCATED_BY_DROPPED
user.update_equipment_speed_mods()
// called just as an item is picked up (loc is not yet changed)
@@ -100,6 +100,7 @@
if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression
H.suppress_bloodloss(stop_bleeding)
to_chat(user, "<span class='notice'>You stop the bleeding of [M]!</span>")
H.adjustBruteLoss(-(heal_brute))
return TRUE
to_chat(user, "<span class='notice'>You can not use \the [src] on [M]!</span>")
@@ -127,6 +128,12 @@
stop_bleeding = 900
heal_brute = 0
/obj/item/stack/medical/gauze/adv
name = "sterilized medical gauze"
desc = "A roll of elastic sterilized cloth that is extremely effective at stopping bleeding, heals minor wounds and cleans them."
singular_name = "sterilized medical gauze"
self_delay = 5
/obj/item/stack/medical/gauze/cyborg
custom_materials = null
is_cyborg = 1
+4 -1
View File
@@ -695,7 +695,10 @@
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box,
/obj/item/toy/gun,
/obj/item/gun/energy/e_gun/mini
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/ballistic/automatic/magrifle/pistol,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/taser
))
/obj/item/storage/belt/holster/full/PopulateContents()
+5 -1
View File
@@ -429,6 +429,10 @@
for(var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset)
dat += {"<A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_remove=\ref[rule]'>-> [rule.name] <-</A><br>"}
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_clear=1'>(Clear Rulesets)</A><br>"
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_storyteller=1'>(Force Storyteller)</A><br>"
if (GLOB.dynamic_forced_storyteller)
var/datum/dynamic_storyteller/S = GLOB.dynamic_forced_storyteller
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_storyteller_clear=1'>-> [initial(S.name)] <-</A><br>"
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_options=1'>(Dynamic mode options)</A><br>"
else if (SSticker.IsRoundInProgress())
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_latejoin=1'>(Force Next Latejoin Ruleset)</A><br>"
@@ -690,7 +694,7 @@
var/prev_dynamic_voting = CONFIG_GET(flag/dynamic_voting)
CONFIG_SET(flag/dynamic_voting,!prev_dynamic_voting)
if (!prev_dynamic_voting)
to_chat(world, "<B>Vote is now a ranked choice of dynamic storytellers.</B>")
to_chat(world, "<B>Vote is now between dynamic storytellers.</B>")
else
to_chat(world, "<B>Vote is now between extended and secret.</B>")
log_admin("[key_name(usr)] [prev_dynamic_voting ? "disabled" : "enabled"] dynamic voting.")
+26
View File
@@ -1394,6 +1394,32 @@
log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.")
message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1)
else if(href_list["f_dynamic_storyteller"])
if(!check_rights(R_ADMIN))
return
if(SSticker && SSticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
if(GLOB.master_mode != "dynamic")
return alert(usr, "The game mode has to be dynamic mode.", null, null, null, null)
var/list/choices = list()
for(var/T in config.storyteller_cache)
var/datum/dynamic_storyteller/S = T
choices[initial(S.name)] = T
var/choice = choices[input("Select storyteller:", "Storyteller", "Classic") as null|anything in choices]
if(choice)
GLOB.dynamic_forced_storyteller = choice
log_admin("[key_name(usr)] forced the storyteller to [GLOB.dynamic_forced_storyteller].")
message_admins("[key_name(usr)] forced the storyteller to [GLOB.dynamic_forced_storyteller].")
Game()
else if(href_list["f_dynamic_storyteller_clear"])
if(!check_rights(R_ADMIN))
return
GLOB.dynamic_forced_storyteller = null
Game()
log_admin("[key_name(usr)] cleared the forced storyteller. The mode will pick one as normal.")
message_admins("[key_name(usr)] cleared the forced storyteller. The mode will pick one as normal.", 1)
else if(href_list["f_dynamic_latejoin"])
if(!check_rights(R_ADMIN))
return
@@ -6,6 +6,7 @@
status = ORGAN_ROBOTIC
beating = TRUE
organ_flags = ORGAN_NO_SPOIL
no_pump = TRUE
var/true_name = "baseline placebo referencer"
var/cooldown_low = 300
var/cooldown_high = 300
@@ -92,6 +93,7 @@
update_gland_hud()
/obj/item/organ/heart/gland/on_life()
. = ..()
if(!beating)
// alien glands are immune to stopping.
beating = TRUE
+16 -1
View File
@@ -66,6 +66,11 @@
// How much threat this job is worth in dynamic. Is subtracted if the player's not an antag, added if they are.
var/threat = 0
/// Starting skill levels.
var/list/starting_skills
/// Skill affinities to set
var/list/skill_affinities
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
@@ -142,7 +147,6 @@
return TRUE //Available in 0 days = available right now = player is old enough to play.
return FALSE
/datum/job/proc/available_in_days(client/C)
if(!C)
return 0
@@ -166,6 +170,17 @@
/datum/job/proc/radio_help_message(mob/M)
to_chat(M, "<b>Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset.</b>")
/datum/job/proc/standard_assign_skills(datum/mind/M)
if(!starting_skills)
return
for(var/skill in starting_skills)
M.skill_holder.boost_skill_value_to(skill, starting_skills[skill])
// do wipe affinities though
M.skill_holder.skill_affinities = list()
for(var/skill in skill_affinities)
M.skill_holder.skill_affinities[skill] = skill_affinities[skill]
UNSETEMPTY(M.skill_holder.skill_affinities) //if we didn't set any.
/datum/outfit/job
name = "Standard Gear"
+3
View File
@@ -19,6 +19,9 @@
display_order = JOB_DISPLAY_ORDER_CHEMIST
threat = 1.5
starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
/datum/outfit/job/chemist
name = "Chemist"
jobtype = /datum/job/chemist
@@ -29,6 +29,9 @@
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
threat = 2
starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
/datum/outfit/job/cmo
name = "Chief Medical Officer"
jobtype = /datum/job/cmo
@@ -19,6 +19,8 @@
display_order = JOB_DISPLAY_ORDER_GENETICIST
threat = 1.5
starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
/datum/outfit/job/geneticist
name = "Geneticist"
jobtype = /datum/job/geneticist
@@ -17,6 +17,9 @@
display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
threat = 0.5
starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
/datum/outfit/job/doctor
name = "Medical Doctor"
jobtype = /datum/job/doctor
+3
View File
@@ -19,6 +19,9 @@
threat = 0.5
starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
/datum/outfit/job/paramedic
name = "Paramedic"
jobtype = /datum/job/paramedic
@@ -20,6 +20,9 @@
threat = 1.5
starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
/datum/outfit/job/virologist
name = "Virologist"
jobtype = /datum/job/virologist
@@ -65,7 +65,7 @@
qdel(src)
/obj/item/organ/regenerative_core/on_life()
..()
. = ..()
if(owner.health < owner.crit_threshold)
ui_action_click()
@@ -392,6 +392,8 @@
character.update_parallax_teleport()
job.standard_assign_skills(character.mind)
SSticker.minds += character.mind
var/mob/living/carbon/human/humanc
+10 -16
View File
@@ -245,23 +245,17 @@
. = adjusted_amount
*/
/obj/item/organ/brain/on_life()
if(damage >= BRAIN_DAMAGE_DEATH) //rip
to_chat(owner, "<span class='userdanger'>The last spark of life in your brain fizzles out...</span>")
owner.death()
brain_death = TRUE
return
..()
/obj/item/organ/brain/on_death()
if(damage <= BRAIN_DAMAGE_DEATH) //rip
brain_death = FALSE
..()
/obj/item/organ/brain/applyOrganDamage(var/d, var/maximum = maxHealth)
..()
. = ..()
if(!. || !owner)
return
if(damage >= BRAIN_DAMAGE_DEATH) //rip
if(owner.stat != DEAD)
to_chat(owner, "<span class='userdanger'>The last spark of life in your brain fizzles out...</span>")
owner.death()
brain_death = TRUE
else
brain_death = FALSE
/obj/item/organ/brain/check_damage_thresholds(mob/M)
. = ..()
@@ -77,6 +77,9 @@
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
/obj/item/organ/alien/plasmavessel/on_life()
. = ..()
if(!.)
return
//If there are alien weeds on the ground then heal if needed or give some plasma
if(locate(/obj/structure/alien/weeds) in owner.loc)
if(owner.health >= owner.maxHealth)
@@ -23,6 +23,8 @@
/obj/item/organ/body_egg/alien_embryo/on_life()
. = ..()
if(!owner)
return
switch(stage)
if(2, 3)
if(prob(2))
@@ -38,7 +38,7 @@
adjustCloneLoss(damage_amount, forced = forced)
if(STAMINA)
if(BP)
if(damage > 0 ? BP.receive_damage(0, 0, damage_amount) : BP.heal_damage(0, 0, abs(damage_amount)))
if(damage > 0 ? BP.receive_damage(0, 0, damage_amount) : BP.heal_damage(0, 0, abs(damage_amount), FALSE, FALSE))
update_damage_overlays()
else
adjustStaminaLoss(damage_amount, forced = forced)
@@ -101,12 +101,11 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //
/obj/item/organ/dwarfgland/on_life() //Primary loop to hook into to start delayed loops for other loops..
. = ..()
dwarf_cycle_ticker()
if(!owner || owner.stat == DEAD)
dwarf_cycle_ticker()
//Handles the delayed tick cycle by just adding on increments per each on_life() tick
/obj/item/organ/dwarfgland/proc/dwarf_cycle_ticker()
if(owner.stat == DEAD)
return //We make sure they are not dead, so they don't increment any tickers.
dwarf_eth_ticker++
dwarf_filth_ticker++
@@ -91,4 +91,9 @@
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail_lizard"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
C.dna.features["tail_lizard"] = "Smooth"
C.update_body()
if(C.dna.features["legs"] != "digitigrade")
C.dna.features["legs"] = "digitigrade"
for(var/obj/item/bodypart/leggie in C.bodyparts)
if(leggie.body_zone == BODY_ZONE_L_LEG || leggie.body_zone == BODY_ZONE_R_LEG)
leggie.update_limb(FALSE, C)
return ..()
@@ -19,6 +19,11 @@
path_image_color = "#993299"
weather_immunities = list("lava","ash")
var/clean_time = 50 //How long do we take to clean?
var/broom = FALSE //Do we have an speed buff from a broom?
var/adv_mop = FALSE //Do we have a cleaning buff from a better mop?
var/blood = 1
var/trash = 0
var/pests = 0
@@ -75,6 +80,26 @@
to_chat(user, "<span class='warning'>Please close the access panel before locking it.</span>")
else
to_chat(user, "<span class='notice'>\The [src] doesn't seem to respect your authority.</span>")
if(istype(W, /obj/item/mop/advanced))
if(bot_core.allowed(user) && open && adv_mop == TRUE)
to_chat(user, "<span class='notice'>You replace \the [src] old mop with a new better one!</span>")
adv_mop = TRUE
clean_time = 20 //2.5 the speed!
window_name = "Automatic Station Cleaner v2.1 BETA" //New!
qdel(W)
else
to_chat(user, "<span class='notice'>\the [src] already has this mop!</span>")
if(istype(W, /obj/item/twohanded/broom))
if(bot_core.allowed(user) && open && broom == TRUE)
to_chat(user, "<span class='notice'>You add to \the [src] a broom speeding it up!</span>")
broom = TRUE
base_speed = 1 //2x faster!
qdel(W)
else
to_chat(user, "<span class='notice'>\the [src] already has a broom!</span>")
else
return ..()
@@ -221,7 +246,7 @@
icon_state = "cleanbot-c"
visible_message("<span class='notice'>[src] begins to clean up [A].</span>")
mode = BOT_CLEANING
spawn(50)
spawn(clean_time)
if(mode == BOT_CLEANING)
if(A && isturf(A.loc))
var/atom/movable/AM = A
@@ -3,6 +3,10 @@
select_name = "ion"
fire_sound = 'sound/weapons/ionrifle.ogg'
/obj/item/ammo_casing/energy/ion/hos
projectile_type = /obj/item/projectile/ion/weak
e_cost = 300
/obj/item/ammo_casing/energy/declone
projectile_type = /obj/item/projectile/energy/declone
select_name = "declone"
@@ -16,9 +16,6 @@
fire_sound = 'sound/weapons/gunshot.ogg'
e_cost = 100
/obj/item/ammo_casing/energy/electrode/hos
projectile_type = /obj/item/projectile/energy/electrode/security/hos
e_cost = 200
/obj/item/ammo_casing/energy/electrode/old
e_cost = 1000
@@ -52,13 +52,16 @@
/obj/item/gun/energy/e_gun/hos
name = "\improper X-01 MultiPhase Energy Gun"
desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time."
desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time in exchange for inbuilt advanced firearm EMP shielding."
icon_state = "hoslaser"
force = 10
ammo_type = list(/obj/item/ammo_casing/energy/electrode/hos, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/hos)
ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/ion/hos)
ammo_x_offset = 4
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/obj/item/gun/energy/e_gun/hos/emp_act(severity)
return
/obj/item/gun/energy/e_gun/dragnet
name = "\improper DRAGnet"
desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology."
+2
View File
@@ -315,6 +315,8 @@
objs += O
var/obj/O = safepick(objs)
if(O)
if(length(O.buckled_mobs))
return pick(O.buckled_mobs)
return O
//Nothing else is here that we can hit, hit the turf if we haven't.
if(!(T in permutated) && can_hit_target(T, permutated, T == original, TRUE))
@@ -3,7 +3,7 @@
icon_state = "ion"
damage = 0
damage_type = BURN
nodamage = 1
nodamage = TRUE
flag = "energy"
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
var/emp_radius = 1
@@ -14,4 +14,4 @@
return BULLET_ACT_HIT
/obj/item/projectile/ion/weak
emp_radius = 0
emp_radius = 0
@@ -246,6 +246,13 @@
metabolization_rate = 5 * REAGENTS_METABOLISM
overdose_threshold = 50
/datum/reagent/medicine/silver_sulfadiazine/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/item/stack/medical/gauze))
var/obj/item/stack/medical/gauze/G = O
reac_volume = min((reac_volume / 10), G.amount)
new/obj/item/stack/medical/ointment(get_turf(G), reac_volume)
G.use(reac_volume)
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
if(method in list(INGEST, VAPOR, INJECT))
@@ -321,6 +328,12 @@
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
..()
/datum/reagent/medicine/styptic_powder/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/item/stack/medical/gauze))
var/obj/item/stack/medical/gauze/G = O
reac_volume = min((reac_volume / 10), G.amount)
new/obj/item/stack/medical/bruise_pack(get_turf(G), reac_volume)
G.use(reac_volume)
/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-2*REM, 0)
@@ -1045,6 +1045,14 @@
// +20% success propability on each step, useful while operating in less-than-perfect conditions
..()
/datum/reagent/space_cleaner/sterilizine/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/item/stack/medical/gauze))
var/obj/item/stack/medical/gauze/G = O
reac_volume = min((reac_volume / 10), G.amount)
new/obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
G.use(reac_volume)
/datum/reagent/iron
name = "Iron"
description = "Pure iron is a metal."
+3 -5
View File
@@ -12,12 +12,10 @@
var/inflamed
/obj/item/organ/appendix/on_life()
..()
if(!(organ_flags & ORGAN_FAILING))
. = ..()
if(.)
return
var/mob/living/carbon/M = owner
if(M)
M.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person
owner.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person
/obj/item/organ/appendix/update_icon_state()
if(inflamed)
@@ -16,7 +16,8 @@
slot = ORGAN_SLOT_STOMACH_AID
/obj/item/organ/cyberimp/chest/nutriment/on_life()
if(synthesizing)
. = ..()
if(!. || synthesizing)
return
if(owner.nutrition <= hunger_threshold)
@@ -59,23 +60,25 @@
var/convalescence_time = 0
/obj/item/organ/cyberimp/chest/reviver/on_life()
. = ..()
if(reviving)
var/do_heal = world.time < convalescence_time
var/do_heal = . && world.time < convalescence_time
if(revive_cost >= MAX_HEAL_COOLDOWN)
do_heal = FALSE
else if(owner.stat && owner.stat != DEAD)
else if(owner?.stat && owner.stat != DEAD)
do_heal = TRUE
else if(!do_heal)
convalescence_time = world.time + DEF_CONVALESCENCE_TIME
if(do_heal)
if(. && (do_heal || world.time < convalescence_time))
addtimer(CALLBACK(src, .proc/heal), 3 SECONDS)
else
cooldown = revive_cost + world.time
reviving = FALSE
to_chat(owner, "<span class='notice'>Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].</span>")
if(owner)
to_chat(owner, "<span class='notice'>Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].</span>")
return
if(cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding)
if(!. || cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding)
return
revive_cost = 0
@@ -102,8 +102,8 @@
slot = ORGAN_SLOT_BRAIN_ANTISTUN
/obj/item/organ/cyberimp/brain/anti_stun/on_life()
..()
if(crit_fail || !(organ_flags & ORGAN_FAILING))
. = ..()
if(!. || crit_fail)
return
owner.adjustStaminaLoss(-3.5, FALSE) //Citadel edit, makes it more useful in Stamina based combat
owner.HealAllImmobilityUpTo(STUN_SET_AMOUNT)
+6 -11
View File
@@ -29,22 +29,17 @@
var/damage_multiplier = 1
/obj/item/organ/ears/on_life()
if(!iscarbon(owner))
return
..()
var/mob/living/carbon/C = owner
if((damage < maxHealth) && (organ_flags & ORGAN_FAILING)) //ear damage can be repaired from the failing condition
organ_flags &= ~ORGAN_FAILING
. = ..()
// genetic deafness prevents the body from using the ears, even if healthy
if(HAS_TRAIT(C, TRAIT_DEAF))
if(owner && HAS_TRAIT(owner, TRAIT_DEAF))
deaf = max(deaf, 1)
else if(!(organ_flags & ORGAN_FAILING)) // if this organ is failing, do not clear deaf stacks.
else if(.) // if this organ is failing, do not clear deaf stacks.
deaf = max(deaf - 1, 0)
if(prob(damage / 20) && (damage > low_threshold))
adjustEarDamage(0, 4)
SEND_SOUND(C, sound('sound/weapons/flash_ring.ogg'))
to_chat(C, "<span class='warning'>The ringing in your ears grows louder, blocking out any external noises for a moment.</span>")
else if((organ_flags & ORGAN_FAILING) && (deaf == 0))
SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg'))
to_chat(owner, "<span class='warning'>The ringing in your ears grows louder, blocking out any external noises for a moment.</span>")
else if(!. && !deaf)
deaf = 1 //stop being not deaf you deaf idiot
/obj/item/organ/ears/proc/restoreEars()
+54 -40
View File
@@ -1,3 +1,7 @@
#define BLURRY_VISION_ONE 1
#define BLURRY_VISION_TWO 2
#define BLIND_VISION_THREE 3
/obj/item/organ/eyes
name = BODY_ZONE_PRECISE_EYES
icon_state = "eyeballs"
@@ -10,7 +14,7 @@
decay_factor = STANDARD_ORGAN_DECAY
maxHealth = 0.5 * STANDARD_ORGAN_THRESHOLD //half the normal health max since we go blind at 30, a permanent blindness at 50 therefore makes sense unless medicine is administered
high_threshold = 0.3 * STANDARD_ORGAN_THRESHOLD //threshold at 30
low_threshold = 0.15 * STANDARD_ORGAN_THRESHOLD //threshold at 15
low_threshold = 0.2 * STANDARD_ORGAN_THRESHOLD //threshold at 15
low_threshold_passed = "<span class='info'>Distant objects become somewhat less tangible.</span>"
high_threshold_passed = "<span class='info'>Everything starts to look a lot less clear.</span>"
@@ -27,14 +31,17 @@
var/flash_protect = 0
var/see_invisible = SEE_INVISIBLE_LIVING
var/lighting_alpha
var/damaged = FALSE //damaged indicates that our eyes are undergoing some level of negative effect
var/eye_damaged = FALSE //indicates that our eyes are undergoing some level of negative effect
/obj/item/organ/eyes/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = FALSE)
. = ..()
if(!.)
return
if(damage == initial(damage))
clear_eye_trauma()
switch(eye_damaged)
if(BLURRY_VISION_ONE, BLURRY_VISION_TWO)
owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged)
if(BLIND_VISION_THREE)
owner.become_blind(EYE_DAMAGE)
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
old_eye_color = H.eye_color
@@ -48,46 +55,49 @@
owner.update_sight()
/obj/item/organ/eyes/Remove(special = FALSE)
clear_eye_trauma()
. = ..()
var/mob/living/carbon/C = .
if(!QDELETED(C))
if(ishuman(C) && eye_color)
var/mob/living/carbon/human/H = C
H.eye_color = old_eye_color
if(!special)
H.dna.species.handle_body(H)
if(QDELETED(C))
return
switch(eye_damaged)
if(BLURRY_VISION_ONE, BLURRY_VISION_TWO)
C.clear_fullscreen("eye_damage")
if(BLIND_VISION_THREE)
C.cure_blind(EYE_DAMAGE)
if(ishuman(C) && eye_color)
var/mob/living/carbon/human/H = C
H.eye_color = old_eye_color
if(!special)
C.update_tint()
C.update_sight()
H.dna.species.handle_body(H)
if(!special)
C.update_tint()
C.update_sight()
/obj/item/organ/eyes/on_life()
..()
var/mob/living/carbon/C = owner
//since we can repair fully damaged eyes, check if healing has occurred
if((organ_flags & ORGAN_FAILING) && (damage < maxHealth))
organ_flags &= ~ORGAN_FAILING
C.cure_blind(EYE_DAMAGE)
//various degrees of "oh fuck my eyes", from "point a laser at your eye" to "staring at the Sun" intensities
if(damage > 20)
damaged = TRUE
if(organ_flags & ORGAN_FAILING)
C.become_blind(EYE_DAMAGE)
else if(damage > 30)
C.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
/obj/item/organ/eyes/applyOrganDamage(d, maximum = maxHealth)
. = ..()
if(!.)
return
var/old_damaged = eye_damaged
switch(damage)
if(INFINITY to maxHealth)
eye_damaged = BLIND_VISION_THREE
if(maxHealth to high_threshold)
eye_damaged = BLURRY_VISION_TWO
if(high_threshold to low_threshold)
eye_damaged = BLURRY_VISION_ONE
else
C.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
//called once since we don't want to keep clearing the screen of eye damage for people who are below 20 damage
else if(damaged)
damaged = FALSE
C.clear_fullscreen("eye_damage")
return
/obj/item/organ/eyes/proc/clear_eye_trauma()
var/mob/living/carbon/C = owner
C.clear_fullscreen("eye_damage")
C.cure_blind(EYE_DAMAGE)
damaged = FALSE
eye_damaged = FALSE
if(eye_damaged == old_damaged || !owner)
return
if(old_damaged == BLIND_VISION_THREE)
owner.cure_blind(EYE_DAMAGE)
else if(eye_damaged == BLIND_VISION_THREE)
owner.become_blind(EYE_DAMAGE)
if(eye_damaged && eye_damaged != BLIND_VISION_THREE)
owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged)
else
owner.clear_fullscreen("eye_damage")
/obj/item/organ/eyes/night_vision
name = "shadow eyes"
@@ -382,4 +392,8 @@
/obj/item/organ/eyes/ipc
name = "ipc eyes"
icon_state = "cybernetic_eyeballs"
icon_state = "cybernetic_eyeballs"
#undef BLURRY_VISION_ONE
#undef BLURRY_VISION_TWO
#undef BLIND_VISION_THREE
+19 -11
View File
@@ -15,6 +15,7 @@
// Heart attack code is in code/modules/mob/living/carbon/human/life.dm
var/beating = 1
var/no_pump = FALSE
var/icon_base = "heart"
attack_verb = list("beat", "thumped")
var/beat = BEAT_NONE//is this mob having a heatbeat sound played? if so, which?
@@ -66,27 +67,28 @@
return S
/obj/item/organ/heart/on_life()
..()
. = ..()
if(!owner || no_pump)
return
if(owner.client && beating)
failed = FALSE
var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE)
var/sound/fastbeat = sound('sound/health/fastbeat.ogg', repeat = TRUE)
var/mob/living/carbon/H = owner
if(H.health <= H.crit_threshold && beat != BEAT_SLOW)
if(owner.health <= owner.crit_threshold && beat != BEAT_SLOW)
beat = BEAT_SLOW
H.playsound_local(get_turf(H), slowbeat,40,0, channel = CHANNEL_HEARTBEAT)
owner.playsound_local(get_turf(owner), slowbeat,40,0, channel = CHANNEL_HEARTBEAT)
to_chat(owner, "<span class = 'notice'>You feel your heart slow down...</span>")
if(beat == BEAT_SLOW && H.health > H.crit_threshold)
H.stop_sound_channel(CHANNEL_HEARTBEAT)
if(beat == BEAT_SLOW && owner.health > owner.crit_threshold)
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
if(H.jitteriness)
if(H.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT)
if(owner.jitteriness)
if(owner.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
owner.playsound_local(get_turf(owner),fastbeat,40,0, channel = CHANNEL_HEARTBEAT)
beat = BEAT_FAST
else if(beat == BEAT_FAST)
H.stop_sound_channel(CHANNEL_HEARTBEAT)
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
if(organ_flags & ORGAN_FAILING) //heart broke, stopped beating, death imminent
@@ -107,6 +109,7 @@ obj/item/organ/heart/slime
icon_state = "cursedheart-off"
icon_base = "cursedheart"
decay_factor = 0
no_pump = TRUE
actions_types = list(/datum/action/item_action/organ_action/cursed_heart)
var/last_pump = 0
var/add_colour = TRUE //So we're not constantly recreating colour datums
@@ -128,6 +131,9 @@ obj/item/organ/heart/slime
return ..()
/obj/item/organ/heart/cursed/on_life()
. = ..()
if(!owner)
return
if(world.time > (last_pump + pump_delay))
if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects.
var/mob/living/carbon/human/H = owner
@@ -208,6 +214,8 @@ obj/item/organ/heart/slime
obj/item/organ/heart/cybernetic/upgraded/on_life()
. = ..()
if(!.)
return
if(dose_available && owner.health <= owner.crit_threshold && !owner.reagents.has_reagent(rid))
owner.reagents.add_reagent(rid, ramount)
used_dose()
@@ -233,7 +241,7 @@ obj/item/organ/heart/cybernetic/upgraded/on_life()
/obj/item/organ/heart/freedom/on_life()
. = ..()
if(owner.health < 5 && world.time > min_next_adrenaline)
if(. && owner.health < 5 && world.time > min_next_adrenaline)
min_next_adrenaline = world.time + rand(250, 600) //anywhere from 4.5 to 10 minutes
to_chat(owner, "<span class='userdanger'>You feel yourself dying, but you refuse to give up!</span>")
owner.heal_overall_damage(15, 15)
+15 -16
View File
@@ -25,25 +25,24 @@
var/cachedmoveCalc = 1
/obj/item/organ/liver/on_life()
var/mob/living/carbon/C = owner
. = ..()
if(!.)//can't process reagents with a failing liver
return
if(istype(C))
if(!(organ_flags & ORGAN_FAILING))//can't process reagents with a failing liver
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
//handle liver toxin filtration
for(var/datum/reagent/toxin/T in owner.reagents.reagent_list)
var/thisamount = owner.reagents.get_reagent_amount(T.type)
if (thisamount && thisamount <= toxTolerance)
owner.reagents.remove_reagent(T.type, 1)
else
damage += (thisamount*toxLethality)
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
//handle liver toxin filtration
for(var/datum/reagent/toxin/T in C.reagents.reagent_list)
var/thisamount = C.reagents.get_reagent_amount(T.type)
if (thisamount && thisamount <= toxTolerance)
C.reagents.remove_reagent(T.type, 1)
else
damage += (thisamount*toxLethality)
//metabolize reagents
owner.reagents.metabolize(owner, can_overdose=TRUE)
//metabolize reagents
C.reagents.metabolize(C, can_overdose=TRUE)
if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
to_chat(C, "<span class='warning'>You feel a dull pain in your abdomen.</span>")
if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
to_chat(owner, "<span class='warning'>You feel a dull pain in your abdomen.</span>")
/obj/item/organ/liver/prepare_eat()
var/obj/S = ..()
+9 -8
View File
@@ -446,17 +446,17 @@
if(prob(20))
to_chat(H, "<span class='warning'>You feel [hot_message] in your [name]!</span>")
/obj/item/organ/lungs/on_life()
..()
if((!failed) && ((organ_flags & ORGAN_FAILING)))
if(owner.stat == CONSCIOUS)
/obj/item/organ/lungs/applyOrganDamage(d, maximum = maxHealth)
. = ..()
if(!.)
return
if(!failed && organ_flags & ORGAN_FAILING)
if(owner && owner.stat == CONSCIOUS)
owner.visible_message("<span class='danger'>[owner] grabs [owner.p_their()] throat, struggling for breath!</span>", \
"<span class='userdanger'>You suddenly feel like you can't breathe!</span>")
failed = TRUE
else if(!(organ_flags & ORGAN_FAILING))
failed = FALSE
return
/obj/item/organ/lungs/prepare_eat()
var/obj/S = ..()
@@ -547,5 +547,6 @@
color = "#68e83a"
/obj/item/organ/lungs/yamerol/on_life()
..()
damage += 2 //Yamerol lungs are temporary
. = ..()
if(.)
applyOrganDamage(2) //Yamerol lungs are temporary
+13 -14
View File
@@ -134,18 +134,19 @@
organ_flags &= ~ORGAN_FROZEN
return FALSE
/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing
if(organ_flags & ORGAN_FAILING)
return
/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing or synthetic
if(organ_flags & ORGAN_FAILING || !owner)
return FALSE
if(is_cold())
return
///Damage decrements by a percent of its maxhealth
var/healing_amount = -(maxHealth * healing_factor)
///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's health
healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0
if(healing_amount)
applyOrganDamage(healing_amount) //to FERMI_TWEAK
//Make it so each threshold is stuck.
return FALSE
if(damage)
///Damage decrements by a percent of its maxhealth
var/healing_amount = -(maxHealth * healing_factor)
///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's satiety
healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0
if(healing_amount)
applyOrganDamage(healing_amount) //to FERMI_TWEAK
return TRUE
/obj/item/organ/examine(mob/user)
. = ..()
@@ -205,9 +206,7 @@
///Adjusts an organ's damage by the amount "d", up to a maximum amount, which is by default max damage
/obj/item/organ/proc/applyOrganDamage(var/d, var/maximum = maxHealth) //use for damaging effects
if(!d) //Micro-optimization.
return FALSE
if(maximum < damage)
if(!d || maximum < damage) //Micro-optimization.
return FALSE
damage = clamp(damage + d, 0, maximum)
var/mess = check_damage_thresholds()
+12 -21
View File
@@ -17,33 +17,24 @@
low_threshold_cleared = "<span class='info'>The last bouts of pain in your stomach have died out.</span>"
/obj/item/organ/stomach/on_life()
..()
var/datum/reagent/consumable/nutriment/Nutri
. = ..()
if(!owner)
return
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
if(!(organ_flags & ORGAN_FAILING))
if(.)
H.dna.species.handle_digestion(H)
handle_disgust(H)
Nutri = locate(/datum/reagent/consumable/nutriment) in H.reagents.reagent_list
if(Nutri)
if(prob((damage/40) * Nutri.volume * Nutri.volume))
H.vomit(damage)
to_chat(H, "<span class='warning'>Your stomach reels in pain as you're incapable of holding down all that food!</span>")
else if(Nutri && damage > high_threshold)
if(prob((damage/10) * Nutri.volume * Nutri.volume))
H.vomit(damage)
to_chat(H, "<span class='warning'>Your stomach reels in pain as you're incapable of holding down all that food!</span>")
else if(iscarbon(owner))
var/mob/living/carbon/C = owner
Nutri = locate(/datum/reagent/consumable/nutriment) in C.reagents.reagent_list
if(damage < low_threshold)
if(!damage)
return
var/datum/reagent/consumable/nutriment/Nutri = locate(/datum/reagent/consumable/nutriment) in owner.reagents.reagent_list
if(!Nutri)
return
var/prob_divisor = damage > high_threshold ? 10 : 40
if(prob((damage/prob_divisor) * (Nutri.volume**2)))
owner.vomit(damage)
to_chat(owner, "<span class='warning'>Your stomach reels in pain as you're incapable of holding down all that food!</span>")
/obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/H)
if(H.disgust)
+5 -1
View File
@@ -58,7 +58,10 @@
return FALSE
if(tool)
speed_mod = tool.toolspeed
if(do_after(user, time * speed_mod, target = target))
var/skill_mod = 1
if(user?.mind?.skill_holder)
skill_mod = SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(user.mind.skill_holder.get_skill_value(/datum/skill/numerical/surgery))
if(do_after(user, time * speed_mod * skill_mod, target = target))
var/prob_chance = 100
if(implement_type) //this means it isn't a require hand or any item step.
prob_chance = implements[implement_type]
@@ -66,6 +69,7 @@
if((prob(prob_chance) || (iscyborg(user) && !silicons_obey_prob)) && chem_check(target) && !try_to_fail)
if(success(user, target, target_zone, tool, surgery))
user?.mind?.skill_holder?.auto_gain_experience(/datum/skill/numerical/surgery, SKILL_GAIN_SURGERY_PER_STEP)
advance = TRUE
else
if(failure(user, target, target_zone, tool, surgery))
+1 -1
View File
@@ -21,7 +21,7 @@
/obj/item/clothing/head/helmet/blueshirt = 1,
/obj/item/clothing/suit/armor/vest/blueshirt = 1,
/obj/item/clothing/under/rank/security/officer/blueshirt = 1,
/obj/item/clothing/gloves/tackler = 5,
/obj/item/clothing/gloves/tackler = 5,
/obj/item/ssword_kit = 1)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
-549
View File
@@ -833,555 +833,6 @@
<li class="bugfix">box brig miscellaneous issues</li>
<li class="bugfix">box station hos office</li>
</ul>
<h2 class="date">26 February 2020</h2>
<h3 class="author">AnturK ported by kevinz000 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Dueling pistols have been added.</li>
</ul>
<h3 class="author">Arturlang updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Replaces a lot of ingame UIs with TGUI next, increasing performance drastically.</li>
<li class="rscadd">Each night for bloodsuckers will last longer due to the sun dimming.</li>
<li class="tweak">You cant level up for free, now you have to pay blood for power.</li>
<li class="balance">Bloodsuckers are no longer as resistant to hard stuns and regenerate less stamina. and a lot of their cooldowns are a lot higher.</li>
<li class="rscdel">Removed text macros from the chem dispenser.</li>
<li class="rscadd">Replaced with dispenser input recording macros.</li>
<li class="bugfix">Fancifying makeshift switchblades now works</li>
<li class="balance">Shields will no longer block lasers, and will break if they take too much damage.</li>
<li class="rscadd">Added a TGUI Next interface for crafting</li>
<li class="rscdel">Removed the old TGUI slow crafting interface</li>
<li class="tweak">The MK2 hypospray now</li>
<li class="admin">The debug outfit is now kitted out for whatever debbuging needs.</li>
<li class="bugfix">Fixed the pandemic naming and the radiation healing symptom UI crashing</li>
<li class="tweak">Hyposprays now switch modes on CTRL click, instead of alt, as it was already reserved for dispension amount.</li>
<li class="rscadd">Nanite interfaces have gotten a rework to TGUI Next, and can now support sub-programs. add:Adds the nanite sting program, which will allow you to manually sting people to give them nanites, changeling style.</li>
<li class="balance">The pandemic can no longer make vaccines or synthblood as quickly.</li>
<li class="rscadd">The syndicate uplinks interface has been redone in TGUI Next</li>
<li class="tweak">Valentines can now be converted by bloodsuckers</li>
</ul>
<h3 class="author">Bhijn updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Click-dragging will now only perform the quick item usage behavior if you're in combat mode.</li>
</ul>
<h3 class="author">BlueWildrose updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">podpeople tail wagging</li>
<li class="tweak">lifebringer ghost role fixes</li>
</ul>
<h3 class="author">BuffEngineering, nemvar. updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Addicts can now feel like they're getting their fix or kicking it.</li>
<li class="bugfix">Aheals now remove addictions and restore your mood to default.</li>
</ul>
<h3 class="author">CameronWoof updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Lighting looks better now. I can say that because the PR wouldn't be merged and you wouldn't be reading this if it wasn't true.</li>
<li class="rscadd">Ammonia and saltpetre can now be made at the biogenerator.</li>
</ul>
<h3 class="author">Commandersand updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">uplink centcomm suit doesn't have sensors</li>
</ul>
<h3 class="author">DeltaFire15 updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Nar'Sie runes no longer benefit from runed floors.</li>
</ul>
<h3 class="author">Detective-Google updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">the POOL. remove: boxstation dorms 7</li>
<li class="bugfix">valentines candy no longer prefbreaks</li>
<li class="rscadd">Loudness Booster pAI program</li>
<li class="rscadd">Encryption Key pAI program</li>
</ul>
<h3 class="author">EmeraldSundisk updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Connects mining's disposal unit on Delta.</li>
<li class="tweak">Slight visual adjustments to the immediate affected area.</li>
</ul>
<h3 class="author">Feasel updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Buffed dissection success chances.</li>
</ul>
<h3 class="author">Ghommie updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">The anomalous honking crystal should now properly clown your mind.</li>
<li class="bugfix">Stopped the ellipsis question mark from being displayed twice in the examine message for masked/unknown human mobs.</li>
<li class="tweak">Made the aforementioned ellipsis question mark display on flavor-text-less masked/unknown human mobs too for consistency.</li>
<li class="bugfix">Stopped an APTFT exploit with spray bottles.</li>
<li class="bugfix">Fixed the detective revolver being quite risky to use.</li>
<li class="bugfix">Hair styles and undergarments are yet again free from gender restrictions.</li>
<li class="tweak">Clown ops will find bombananas and clown bomb beacons instead of minibombs and bomb beacons in their infiltrator ship now.</li>
<li class="tweak">For safety, the syndicate shuttle minibombs and bombananas come shipped in a box. Please don't instinctively eat any of those nanas, thank you.</li>
<li class="tweak">Uplink items excluded (such as mulligan, chameleon, ebow) from or exclusive (such as cyber implants) to normal nuke ops will now be properly unavailable/available to clown ops.</li>
<li class="bugfix">Fixed bananium energy sword/shield slips.</li>
<li class="balance">Buffed said slips to ignore no-grav/crawling/flying as well as adding some deadly force to the e-sword.</li>
<li class="bugfix">Fixed the 'stache grenade anti-non-clumsy user check.</li>
<li class="balance">Doubled the timer for the sticky mustaches effect from the above grenade (from 1 to 2 minutes)</li>
<li class="bugfix">Fixed an edge case with the chaplain armaments beacon spawning the box in nullspace.</li>
<li class="tweak">The playback device's cooldown now proportionally increases with messages longer than 60 characters (3 seconds is the default assembly cooldown).</li>
<li class="bugfix">Fixed space ninjas "Nothing" objective. Now you gotta steal some dandy stuff such as corgi meat and pinpointers as a ninja too.</li>
<li class="bugfix">Fixed maploaded APC terminals direction.</li>
<li class="balance">Nerfed magnetic rifles/pistols by re(?)adding power cell requirements for it. These firearms must be recharged after firing 2 magazines worth of projectiles and are slightly more susceptible to EMPs.</li>
<li class="bugfix">Fixed the tearstache nade not properly working.</li>
<li class="balance">Buffed it against space helmet internals.</li>
<li class="tweak">Holographic fans won't display above mobs and other objects anymore.</li>
<li class="bugfix">Fixed paraplegics appearing as shoeless.</li>
<li class="bugfix">Fixed the petting element.</li>
<li class="bugfix">Fixed slipping.</li>
<li class="refactor">Refactored mob holders into an element.</li>
<li class="bugfix">Fixed a few minor issues with that feature. such as mismatching sprites for certain held mobs and a slight lack of safety checks.</li>
<li class="rscdel">holdable mobs can't force themselves into people's hands anymore.</li>
<li class="bugfix">Milkies fix.</li>
<li class="bugfix">Fixed some mounted defibrillator issue with the altclicking functionality.</li>
<li class="bugfix">Fixed no-grav lavaland labor/mining shuttle areas.</li>
<li class="bugfix">Fixed a little issue with sleeper UI and blood types.</li>
<li class="bugfix">Fixing accidental nerfs to the magpistol magazine.</li>
<li class="bugfix">The Lavaland's Herald speech sound should only play if they are actually speaking.</li>
<li class="bugfix">Nerfed cargo passive points generation from 500 to 125 creds per minute.</li>
<li class="bugfix">Fixed whitelisted/donor loadouts</li>
<li class="bugfix">Childproofs double-esword and hypereuplastic blade toys.</li>
<li class="balance">Some reagent holders (such as cigarettes, food) are not suitable for reagents export anymore, while unprocessed botany crops will only net 1/3 of the standard reagents values.</li>
<li class="bugfix">Export scanners now include the reagents value in the price report.</li>
<li class="bugfix">Fixed a little inconvenience with the character setup preview dummy having extra unwarranted bits.</li>
<li class="bugfix">Stopped role restricted uplink items from being discounted despite not being purchasable most times.</li>
<li class="bugfix">Missing words replacement file for the gondola mask.</li>
<li class="bugfix">Fixed an issue with the nearsighted prescription glasses taking over worn eyewear.</li>
<li class="bugfix">Fixed AI unanchoring not properly removing the no teleport trait. My bad.</li>
<li class="bugfix">Fixed another issue with hering comsig.</li>
<li class="imageadd">Fixed dozen missing privates sprites.</li>
<li class="bugfix">A little fix concerning some R&D and reagents.</li>
<li class="bugfix">Further mob holder fixes.</li>
<li class="bugfix">Fixed being unable to dump a trash bag's contents directly into disposal bins.</li>
<li class="bugfix">Doubled the halved flavor text maximum length.</li>
<li class="bugfix">Reduced tongue organ damage and tasting pH message spam.</li>
<li class="bugfix">Fixed agent IDs not registering the inputted name. Thanks MrPerson.</li>
<li class="bugfix">Fixed solar panels/trackers (de)construction being a bit wonky.</li>
<li class="bugfix">Fixed something about slime blood and the law of conservation of mass.</li>
<li class="bugfix">Fixed flypeople being emetic machine guns.</li>
<li class="bugfix">Fixed virology being unable to be done with synthetic blood.</li>
<li class="rscdel">Renamed "blaster carbine" and "blaster rifles" back to "energy gun" and "laser gun" respectively</li>
<li class="bugfix">Fixed magnetic rifles & co being inconsistent with printed energy guns and start with an empty power cell.</li>
<li class="imagedel">Reverted practice laser gun sprites back to their former glory. Mostly.</li>
<li class="bugfix">Fixed sprint buffer cost and regen being rounded down.</li>
<li class="balance">Nerfed the fermenting barrel export industry.</li>
<li class="tweak">Reagent dispensers selling price no longer takes in account the reagents volume. It's already handled by reagents export.</li>
<li class="bugfix">pAIs are yet again unable to perform certain silicon interactions with machineries yet again.</li>
<li class="bugfix">Fixed pAI radios inability to be toggled on/off.</li>
</ul>
<h3 class="author">Ghommie (original PRs by Floyd/Qustinnus, 4Dplanner, Willox, ninjanomnom, mrdoombringer, Fikou, Fox McCloud, TheChosenEvilOne, nemvar, bobbahbrown, Time-Green, Stonebaykyle, MrPerson, ArcaneMusic and zxaber) updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">You can now make toolboxes out of almost any solid material in an autolathe</li>
<li class="rscadd">adds Knight's Armour made out of any materials</li>
<li class="rscadd">new ruin found in lavaland protected by dark wizards, I wonder what they're guarding</li>
<li class="rscadd">You can now put a bunch more mats in the coin mint and autolathe</li>
<li class="rscadd">Adamantine and Mythril are now materials (Adamantine still only from xenobio, Mythril still only from badminnery). Adamantine boosts an item's force by 1.5, Mythril gives an item RPG statistics.</li>
<li class="rscdel">most custom sprites for coins have been lost</li>
<li class="rscadd">You can now give your ass acute radiation poisoning</li>
<li class="rscadd">floydmats now apply to all objs / items</li>
<li class="rscadd">you can now make tables and chairs out of any material</li>
<li class="bugfix">Fixes being able to exploit fully upgraded destructive analyzers to multiply materials</li>
<li class="rscadd">An old monastery from a previously abandoned sector of space has recently resurfaced in some regions surrounding the station.</li>
<li class="rscadd">Latent scans of the surrounding systems have picked up trace signs of new, smaller cult constructs, however these signatures quickly vanished.</li>
<li class="rscadd">In other news, scavengers in your sector have been seen occasionally with classically recreated maces, so autolathe firmware has been upgraded to accommodate this.</li>
</ul>
<h3 class="author">Hatterhat updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Zombie powder is now instant when ingested, but delayed when injected or applied through touch.</li>
<li class="tweak">The H.E.C.K. suit is now goliath tentacle resistant and probably better for acid resistance.</li>
<li class="rscadd">The Engineering techfab can now print standard and large RCD compressed matter cartridges.</li>
<li class="rscadd">The Experimental Tools node now has the Combifan projector, blocking both temperature and atmospheric changes.</li>
<li class="tweak">fiddles with the seed extractor upgrade examine to make it not shit</li>
<li class="rscadd">Formaldehyde prevents organ decay and corpses' miasma production at 1u in the body.</li>
<li class="rscadd">Epinephrine pens now contain 3u formaldehyde. This should not kill you.</li>
<li class="rscadd">The ships often crashed by Free Golems on Lavaland now have GPSes. They're off, by default, but an awakening Golem could easily turn one on.</li>
<li class="tweak">Standard RCD ammo can now be printed from Engineering-keyed techfabs once you hit Industrial Engineering.</li>
<li class="tweak">Consoleless interfaces are now default - this means unrestricted protolathes and circuit imprinters can now be interfaced with by interacting with the machine itself.</li>
<li class="bugfix">Multitools can now actually be printed from Engineering and Science protolathes/techfabs once you unlock Basic Tools.</li>
<li class="rscadd">Husking (from being burned to shit) can now be reverted! 5u rezadone or 100u synthflesh, at below 50 burn.</li>
<li class="balance">Turning a body into a burnt husk now takes more effort. 300 burn's worth of effort.</li>
<li class="balance">Buckshot individual pellet damage up from 10 to 12.5. Still firing 6 pellets.</li>
<li class="rscadd">Preservahyde! Made with water, bromine, and formaldehyde, it doesn't decay into histamine. Instead, it just prevents your organs from rotting into nothing.</li>
<li class="balance">You can now purify eldritch longswords with a bible. This creates purified longswords, which do not have anti-magic properties, but are still good for swinging at cultists.</li>
<li class="rscadd">Extend votes! Ported from Hyper, ported from AUstation.</li>
<li class="bugfix">mechs with stock parts now have icons</li>
<li class="balance">Pie reagent transfer now requires an uncovered mouth.</li>
<li class="bugfix">Biogenerators can now actually generate universal enzyme.</li>
<li class="bugfix">The Basic Tools node now unlocks the multitool for printing on Engineering and Science fabricators.</li>
<li class="rscadd">The Ash Walkers' nest on Lavaland now starts with three bowyery slabs.</li>
<li class="rscadd">You can now welder-harden arrows. It might take longer.</li>
<li class="balance">Silkstring's costs adjusted for bows and whatnot.</li>
<li class="spellcheck">Grammar adjusted on a lot of things relating to bows.</li>
<li class="bugfix">Pipe bows' bowstring doesn't look like it replicated itself upon draw.</li>
</ul>
<h3 class="author">IHOPMommyLich updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Changed the multiplicative_slowdown of Stimulants from -1 to -0.5</li>
</ul>
<h3 class="author">IronEleven updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Minor stat changes to Choking, Spontaneous Combustion, Autophagocytosis Necrosis, Hallucigen, Narcolepsy, Shivering, and Vomiting symptoms.</li>
</ul>
<h3 class="author">KathrinBailey updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Missing turf_decals in Cargo Office.</li>
<li class="bugfix">Turns on the docking beacons on Box.</li>
<li class="bugfix">Fixes Starboard Quarter maint room being spaced. It was never intended to be like how it was.</li>
<li class="bugfix">The aforementioned maint room not having stuff in it.</li>
<li class="bugfix">varedited photocopier sometimes not opening any UI.</li>
<li class="bugfix">Atmos differences in Starboard Quarter maint.</li>
<li class="bugfix">Atmos differences in destroyed shuttle/EVA bridge. Plating replaced with airless plating.</li>
<li class="bugfix">Rotates AI satellite computers. These have probably been like this since computers had the old sprites and no directional ones. You shouldn't sit at a chair to operate a sideways computer.</li>
</ul>
<h3 class="author">KrabSpider updated:</h3>
<ul class="changes bgimages16">
<li class="imageadd">The Van Dyke is no longer Fu Manchu.</li>
<li class="imagedel">Gets rid of a Fu Manchu imitation.</li>
</ul>
<h3 class="author">Kraseo updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">You can no longer pull before wearing boxing gloves to bypass the grab check.</li>
<li class="bugfix">Nightmares no longer delete entire guns from existence for merely having a light on them.</li>
</ul>
<h3 class="author">Linzolle updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Bows now will not delete an arrow if it cant fire it.</li>
<li class="bugfix">bows now like and respect sprite changes</li>
</ul>
<h3 class="author">MalricB updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">"Shaggy" sprite from virgo</li>
<li class="rscadd">"shaggy" option in the character customization</li>
</ul>
<h3 class="author">MrJWhit updated:</h3>
<ul class="changes bgimages16">
<li class="rscdel">Removed meteor defense tech node</li>
<li class="tweak">TEG</li>
</ul>
<h3 class="author">Naksu updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Odysseus chem synthesizing now works again.</li>
</ul>
<h3 class="author">Owai-Seek updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Burger, Cargo Packaging, Dirty Magazine, Air Pump, and Scrubber crates.</li>
<li class="rscdel">Duplicate Crate, Festive Wrapping Paper Crate, Contraband Monkey Meat Crate</li>
<li class="tweak">Gave Seed Crate Ambrosia Seed, gave Biker Gang Crate Spraypaint.</li>
<li class="tweak">Organised some crates with sub-categories. Also, moved all vendor refills to a new tab.</li>
<li class="tweak">Moved Grill to Service Tab</li>
<li class="bugfix">Engineering Hardsuit Access</li>
<li class="tweak">Blood Crate now has all of the current blood types.</li>
<li class="tweak">Birthday Cake Recipe is now the same as TG.</li>
<li class="tweak">Added Soy Sauce and BBQ Packets to Dinnerware Vendor.</li>
<li class="tweak">Added nurse outfit, nurse cap, and mailman hat to loadout.</li>
<li class="tweak">Changed the name of scrubs to blue, green, and purple scrubs.</li>
<li class="rscadd">Bacon and Eggs food item. Delicious! Added a Lemony Poppy Seed Muffin.</li>
<li class="tweak">Snack Vendor has Chocolates, Tortilla Chips, and a Marshmallow Box</li>
<li class="balance">Mops can now be printed at service lathe once tools are researched.</li>
<li class="balance">Biobags can hold most organic limbs/organs, but not brains, implants, or cybernetics.</li>
<li class="balance">Trash Bag can now hold limbs (but not heads.)</li>
<li class="balance">Most snack vendor items reduced by 1.</li>
<li class="bugfix">Trash Cans are now actually craftable, and only require metal instead of plastic.</li>
<li class="imageadd">Bacon and Eggs, Drying Agent Bottle.</li>
<li class="imageadd">Mugs now show reagent colors of contained reagents. Thanks Seris!</li>
<li class="tweak">Reorganized all food recipes, (hopefully) making things easier to find.</li>
<li class="balance">Trays now have a whitelist, allowing them to pick up normal sized foods, bowls, glassware, booze, ect.</li>
<li class="bugfix">Easter foods are no longer their own Misc Food Category on the top of the menu.</li>
<li class="spellcheck">fixed a few typos/capitalization consistency.</li>
<li class="tweak">Mexican Foods are their own Subcategory.</li>
<li class="tweak">Donuts are their own Subcategory</li>
<li class="tweak">Moved Sweets from Misc Food in with Pies. Renamed to Pies & Sweets</li>
<li class="rscadd">BROOM</li>
<li class="tweak">Janitor Vendor now has gear for two Janitors.</li>
</ul>
<h3 class="author">PersianXerxes updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">SMES and PACMAN attached to gulag Security to power electrified windows remove: Removed Sec vendor from gulag Security</li>
<li class="tweak">Separation of gulag and public mining</li>
<li class="rscadd">Better clarified the comment explaining the contraband tag.</li>
<li class="tweak">Cargo nuclear defusal kits now require an emag'd drop pod console to be purchased.</li>
<li class="rscadd">Added Kilo Station</li>
<li class="tweak">Adjusts Kilo Station to be more in line with Citadel standards</li>
<li class="imageadd">Added area icons required to make Kilo Station editable on Citadel code</li>
<li class="code_imp">Fixed a reagent container on Kilo pointing to a nonexistent reagent</li>
<li class="config">Adds Kilo Station to the maps config file, does not fix Meta Station's population requirement</li>
</ul>
<h3 class="author">Psody-Mordheim updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">You can now make synth-flesh with synthetic blood.</li>
<li class="rscadd">You can now make synthetic blood via mixing saline glucose, iron, stable plasma and heating it to 350 temp.</li>
<li class="rscadd">You can mix synthetic blood and cryoxadone to create synth-meat in addition to normal blood.</li>
<li class="rscadd">Disfiguration Symptom.</li>
<li class="rscadd">Deoxyribonucleic Acid Saboteur Symptom.</li>
<li class="rscadd">Polyvitiligo Symptom.</li>
<li class="rscdel">Revitiligo Symptom.</li>
<li class="rscdel">Vitiligo Symptom.</li>
</ul>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
<li class="admin">Added logging to various consent things.</li>
<li class="rscadd">Lots of new traitor objectives</li>
<li class="bugfix">gender change potion now respects prefs</li>
<li class="bugfix">Hypno prefs work better.</li>
<li class="admin">Panic bunker is now round-to-round persistent</li>
<li class="tweak">Relief valve now has a TGUI-next UI</li>
<li class="bugfix">Atmos reaction priority works now.</li>
<li class="rscadd">map voting doesn't suck anymore</li>
<li class="bugfix">Dynamic now defaults to "classic" storyteller instead of just failing if the vote didn't choose a storyteller.</li>
<li class="bugfix">antag quirk blacklisting works now</li>
<li class="tweak">default should be... default</li>
<li class="balance">all supermatter damage is now hardcapped</li>
<li class="tweak">Supermatter sabotage objective no longer shows up with no supermatter</li>
<li class="bugfix">Mining vendors no longer fail and eat your points iff you have precisely enough points to pay for an item</li>
<li class="tweak">Licking pref</li>
<li class="bugfix">Fixed IRV.</li>
<li class="bugfix">Runtime if nobody has a chaos pref set</li>
<li class="bugfix">IRV fixed... again</li>
<li class="bugfix">temporary flavor text can now be of reasonable length</li>
<li class="balance">Shooting the supermatter now adds to the supermatter's power. CO2 setups beware!</li>
<li class="rscadd">Logging for renaming</li>
</ul>
<h3 class="author">Raiq & Linzolle updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Bone bow - Ash walkers crafting , bone arrows - Ash walkers crafting, silk string used in bow crafting, harden arrows - Ash walkers crafting, ash walker only crafting book, basic pipe bow, and bow & arrow selling. Quivers for ash walkers as well, just to hold some arrows well out on the hunt!</li>
</ul>
<h3 class="author">Seris02 updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">tweaked the way the SM works</li>
<li class="rscadd">custom reagent pie smite</li>
<li class="rscadd">hijack implant</li>
<li class="code_imp">changed mentions of the issilion proc to hasSiliconAccessInArea based on what the proc is used for</li>
<li class="rscadd">recipe for mammal mutation toxin</li>
<li class="rscadd">polychromic winter coat</li>
<li class="rscadd">thief's gloves</li>
<li class="rscadd">crushing magboots</li>
<li class="bugfix">golden plastitanium toolbox being actually plastitanuium</li>
<li class="bugfix">character slot amount</li>
<li class="balance">rebalanced rising bass</li>
<li class="bugfix">string highlighting whitespace</li>
<li class="bugfix">glitch with PKA</li>
<li class="bugfix">meteor hallucinations (again)</li>
<li class="rscadd">Added naked hallucination</li>
<li class="rscadd">crowbarring manifests off crates</li>
<li class="balance">makes RCDs cost a better amount</li>
<li class="bugfix">apc icons</li>
<li class="rscadd">rest hotkey</li>
<li class="rscadd">hsl instead of sum of rgb for spraycan lum check</li>
<li class="balance">bloodcrawl's cooldown</li>
</ul>
<h3 class="author">ShadeAware updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Craftable Switchblades, a weaker subtype of normal switchblades that can be crafted using a Kitchen Knife, Modular Receiver, Rifle Stock and some Cable Coil. Requires a welder to complete.</li>
<li class="bugfix">You can now actually craft Switchblades.</li>
<li class="bugfix">Switchblades no longer regain their old Makeshift sprite after retracting if you've made them fancy with Silver.</li>
<li class="rscadd">The Captain's Wardrobe, a special one-of-a-kind and ID-locked wardrobe for the Captain that holds all of their snowflakey gear. Remove: Snowflake gear from the Captain's locker, since now it has its own vendor.</li>
</ul>
<h3 class="author">Tlaltecuhtli, ported by Hatterhat updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Ripley, Firefighter, Odysseus and H.O.N.K. mechs now also use scanning modules and capacitors on construction. This means that they also gain reduced power consumption and EMP protection from higher-tier stock parts.</li>
</ul>
<h3 class="author">Trilbyspaceclone updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Vault hallway door being all access</li>
<li class="server">Updates change logs</li>
<li class="rscadd">Crafts are now made of plasteel and can be made with 5 sheets</li>
<li class="rscadd">Takes away NT's connections to the Aliens that run the Syndicats</li>
<li class="rscadd">Carps have evolved to take more damage</li>
<li class="rscadd">restock crates for each vender</li>
<li class="rscadd">restock units for all station venders</li>
<li class="bugfix">Sec-vender missing icon</li>
<li class="bugfix">Box station captain office issues maping: Gulag on box can now be accessed</li>
<li class="rscadd">Alien stools and chairs</li>
<li class="tweak">Bone armor/Dagger are now crafting from bones rather then crafting menu</li>
<li class="rscadd">Firing pins that only works when not on station</li>
<li class="rscadd">Medical locked crates</li>
<li class="balance">Russian gear crates have less gear in some cases but all will cost more</li>
<li class="bugfix">Medical locked crates that were not locked</li>
<li class="spellcheck">Crates that were out of date are corrected</li>
<li class="balance">Heads of staff have been better screened by NT before being promoted</li>
<li class="balance">The suit full of spiders also known as a ninja now is a tactical turtleneck</li>
<li class="balance">The Wiznerds now dont have suits set to max</li>
<li class="tweak">Meat wheat no longer has blood</li>
<li class="bugfix">Flat guns can no longer be suppressed</li>
<li class="tweak">replaced stickmans .45 caliber with 10mm, for consistency.</li>
<li class="tweak">Meatwheat and Oats now have rarity</li>
<li class="balance">Oats now have at lest 50% more flour in them</li>
<li class="balance">BDM now uses a PKA rather then a normal KA</li>
<li class="tweak">Gang tower shield is no longer transparent</li>
<li class="tweak">Cosmic winter coat now glows like the bedsheet, and holds normal winter coat gear</li>
<li class="server">Express console is now logging what it buys, like the normal console should</li>
<li class="bugfix">Crabs are now made of crab meat.</li>
<li class="bugfix">AIs now understand the old ways of drunken dwarfs</li>
<li class="balance">Removes some armored Russian hats from box station round start</li>
<li class="bugfix">Doner items spawning</li>
<li class="balance">Engi/Sec Trek suit no longer has 10% melee protection</li>
<li class="bugfix">IPC hearts are now made of robomeat and roboblood thats emp proof. Heals and is all and all just like an normal heart</li>
<li class="imageadd">All robotic organs now have an animation.</li>
<li class="imageadd">IPC's now organs now look like robotic ones, even tho thats not the case game wise</li>
<li class="imageadd">Added a new bee themed bar sign</li>
<li class="imageadd">Makes plywood chair not look as bad.</li>
<li class="bugfix">corndog sprite being miss-spelled</li>
<li class="bugfix">Ash from land of lava now is useable for sandstone</li>
<li class="bugfix">Peach cake slices are no long made by mimes</li>
</ul>
<h3 class="author">Tupinambis updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">the portion of laws that require harm prevention by silicons has been removed.</li>
<li class="server">silicon_laws.txt config file is required to be modified for full implementation.</li>
<li class="bugfix">masks no longer improperly stick out of helmets when they should be hidden.</li>
<li class="bugfix">Status Displays should now update correctly.</li>
<li class="balance">stunbatons now take 4 hits to inflict hard crit, up from 3.</li>
<li class="balance">stunbatons no longer disarm targets.</li>
</ul>
<h3 class="author">Yakumo Chen updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Rings for your fingers!</li>
<li class="rscadd">New cargo crates and loadout options to bling your rings!</li>
</ul>
<h3 class="author">YakumoChen updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Observe is back in the OOC tab</li>
<li class="imageadd">Rings look nicer. Sprites used from RP.</li>
<li class="imageadd">Ring on-hands. Diamond rings sparkle!</li>
<li class="tweak">You can now propose using a diamond ring in your hand.</li>
<li class="tweak">Legion skulls behave like bees!!!!</li>
</ul>
<h3 class="author">Zellular updated:</h3>
<ul class="changes bgimages16">
<li class="imageadd">Movement state for pupdozer and its decals</li>
<li class="tweak">Tweaked the movement state for the pupdozer's eyes</li>
</ul>
<h3 class="author">ancientpower updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes an error in pH strips' feedback message.</li>
<li class="rscadd">Ported drink sliding from /vg/station.</li>
<li class="bugfix">Fixes color mismatching with the "genitals use skintone" preference.</li>
<li class="imageadd">Bunny ear style for humanoid species.</li>
<li class="tweak">Ghosts are now literate.</li>
</ul>
<h3 class="author">bunny232 updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Changes the simple animal sentience event from the xenomorph preference to sentience potion preference.</li>
</ul>
<h3 class="author">coiax updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Admin and event only pair pinpointers! They come in a box of two, and each pinpointer will always point at its corresponding pair. Aww.</li>
</ul>
<h3 class="author">deathride58 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Spacemen no longer run at lightspeed on local servers.</li>
</ul>
<h3 class="author">kappa-sama updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">the plant dudes can actually make plant disks now</li>
</ul>
<h3 class="author">keronshb updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added repairable turrets</li>
<li class="rscadd">Adds Tiny Fans to the pirate ship</li>
<li class="tweak">changes some reinforced windows to plastinanium pirate windows</li>
<li class="tweak">made the pirate shuttle + turrets bomb resistant</li>
<li class="tweak">made most pirate machines + consoles indestructible</li>
<li class="tweak">increased pirate turret health</li>
<li class="rscadd">Adds the CogChamp drink and Sprite</li>
<li class="rscadd">Added burn and knockback to stunhand during HALOS on cult.</li>
<li class="bugfix">fixed accelerated regeneration nanites</li>
<li class="bugfix">fixed mechanical repair nanites</li>
<li class="bugfix">fixed bio reconstruction nanites</li>
</ul>
<h3 class="author">kevinz000 updated:</h3>
<ul class="changes bgimages16">
<li class="refactor">Custom snowflake plushies are now in config rather than code.</li>
<li class="balance">Abductor mindsnapping (aka abductee objectives) can now be "cured" with brain surgery.</li>
<li class="rscadd">Shuttle hijacking has been completely reworked. Alt-click the shuttle as a hijack-capable mind (so traitors, and especially traitors with hijack) to begin or continue a hacking process.</li>
<li class="refactor">A good amount of the blood RGB rework was cleaned up/reverted, with some notable gameplay changes including: Gibs and blood not having max blood by default (no more easy rampages, cultists), infinite gib streaking, etc etc.</li>
<li class="balance">meteor waves are now directional and announces the direction on the command report.</li>
<li class="rscadd">CTF CLAYMORES</li>
<li class="balance">shoves buffed, now shoving into a wall twice rapidly will also disarm their weapon.</li>
<li class="balance">traitor+bro gamemode minimum population set to 25 until there can be more in depth configuration systems for gamemodes.</li>
<li class="bugfix">no more bluespace skittish locker diving,</li>
<li class="rscadd">moths now have unique laughs and can *chitter.</li>
<li class="tweak">nuke explosion is now full dev radius for anti lag purposes</li>
<li class="balance">Gangs can now only tag with a gang uplink bought spraycan.</li>
<li class="tweak">dueling pistol accesses have been changed to be more accessible.</li>
<li class="bugfix">mechs no longer have admin logs flooding into IC control console log viewing</li>
<li class="refactor">Guncode and energy guns have been refactored a bit.</li>
<li class="rscadd">You can now combat mode ight click on an energy gun to attempt to switch firing modes. This only works on guns without right click functions overridden.</li>
<li class="balance">shoes can now fit magpistols again.</li>
<li class="balance">Projectiles now always hit chest if targeting chest, snipers have 100% targeting zone accuracy. All other cases are unchanged.</li>
<li class="tweak">The lawyer's PDA cartridge has been rebranded to something more accurate to its true nature.</li>
<li class="refactor">Refactored ghostreading/etc</li>
<li class="balance">Cyborgization will now de-gang people, even gangheads.</li>
<li class="bugfix">reactive repulse armor now has an item limit</li>
<li class="bugfix">beam rifle runtime fix during aiming_beam</li>
<li class="bugfix">fail2topic runtime fix: taking out an ip while incrementing index resulted in accessing the next-next entry instead of the next and results in out of bound errors.</li>
<li class="rscadd">gravity gun repulse and chaos now work in all angles, rather than just basic cardinals and diagonals. fun.</li>
<li class="balance">Public autolathes can no longer be hacked.</li>
<li class="bugfix">Energy weapons now once again have their lens in contents.</li>
<li class="bugfix">pais are no longer muted for literally a whole hour on emp.</li>
<li class="rscadd">auto profiler subsystem from tg</li>
<li class="bugfix">Brig cells now are more accurate by using timeofday instead of realtime</li>
<li class="bugfix">Cryo now actually transfers reagents at tier 4 on enter rather than every 80 machine fire()-process()s regardless of if it was "reset" by open/close.</li>
<li class="rscadd">cmo now gets advanced surgery drapes that techweb-sync for advanced surgeries without an operating console.</li>
<li class="bugfix">ctf claymores now actually spawn (and fit).</li>
<li class="bugfix">STOP_PROCESSING now removes from currentrun to prevent another process cycle from happening where it shouldn't.</li>
<li class="balance">hand teleporters now require 30 deciseconds of still movement by the user to dispel portals. there's a beam effect too.</li>
<li class="balance">Sort of a bugfix but cult blood magic and all guns now respect stamina softcrit.</li>
<li class="balance">Organ healing rate doubled. Organ decay rate halved to match its define (15 minutes for full decay, so at around 8-10 minutes it'll be really fucked).</li>
<li class="tweak">Storage now caches max screen size and only stores when being opened by a non ghost, meaning ghosts will no longer distort living player screens when viewing storage.</li>
<li class="balance">Stunbatons changed yet again.</li>
<li class="tweak">the game's built in autoclicker aka CanMobAutoclick no longer triggers client/Click()'s anti clickspam guard.</li>
<li class="balance">pais can no longer bodyblock bullets</li>
<li class="balance">pai radio short changed to 3 minutes down from 5</li>
<li class="balance">pais are no longer fulltile click opacity.</li>
<li class="refactor">vampire "immortal haste" has been reworked to be more reliable and consistent.</li>
<li class="tweak">hand teles use a less atrocious beam</li>
</ul>
<h3 class="author">necromanceranne updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Ebows now disarm people hit by them.</li>
<li class="rscadd">Ebows now do 60 stamina damage on hit.</li>
<li class="rscdel">Ebows no longer inflict drowsiness</li>
<li class="balance">Miniature ebows do 15 toxin damage, up from 8.</li>
<li class="balance">Ebows have considerably shorter knockdowns.</li>
<li class="balance">Ebows now make you slur rather than stutter.</li>
<li class="balance">Large ebows are now heavy and bulky.</li>
<li class="rscdel">You can no longer order spinfusors or their ammo from cargo.</li>
<li class="rscdel">Removed the formal security officer jacket from the secdrobe</li>
<li class="tweak">formal security jackets are now armor vests</li>
<li class="rscdel">Bullets causing bleed rates equal to unmitigated damage through all forms of defense.</li>
<li class="balance">Reverted #9092, crew mecha no longer spawn with tracking beacons.</li>
<li class="balance">[Port] Mecha ballistics weapons now require ammo created from an Exosuit Fabricator or the Security Protolathe, though they will start with a full magazine and in most cases enough for one full reload. Reloading these weapons no longer chunks your power cell. Clown (and mime) mecha equipment have not changed.</li>
<li class="balance">[Port] The SRM-8 Missile Launcher has been replaced with the BRM-6 Breaching Missile Launcher in techwebs (Nukie Mauler remains equipped with the SRM-8).</li>
<li class="balance">[Port] Both Missile Launchers and the Clusterbang Launcher do not have an ammo cache, and cannot be reloaded by the pilot. Once the initial loaded ammo has been spent, you can use the appropriate ammo box to load the weapon directly.</li>
<li class="rscadd">[Port] Utility mechs that have a clamp equipped can load ammo from their own cargo hold into other mechs.</li>
<li class="rscadd">[Port] Nuke Ops can purchase spare ammo duffel bags for their mecha weapons, should they run low.</li>
<li class="bugfix">Literally unclickability with a cham projector</li>
</ul>
<h3 class="author">nemvar updated:</h3>
<ul class="changes bgimages16">
<li class="code_imp">Slight changes the self-repair borg module. It no longer references the borg that owns it.</li>
<li class="bugfix">Trash from food now gets generated at the location of the food item, instead of in the hands of the eater.</li>
<li class="code_imp">Changed mob biotypes from lists to flags.</li>
</ul>
<h3 class="author">r4d6 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added a dwarf language</li>
<li class="rscadd">Added more engines</li>
<li class="tweak">RPD subcategories and preview icons reorganized.</li>
<li class="rscadd">RPD now starts with painting turned off, hitting pipes with build and no paint will target the turf underneath instead. Bye bye turf pixelhunting.</li>
<li class="config">Made dwarves into a roundstart races</li>
<li class="tweak">Meteor Timer back to 3-5 minutes</li>
<li class="bugfix">Mining no longer lead to spess</li>
<li class="rscadd">Added Plasteel Pickaxe</li>
<li class="rscadd">Added Titanium Pickaxe</li>
<li class="bugfix">fixed a missing tile</li>
</ul>
<h3 class="author">tralezab, bandit, Skoglol updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">The mime's PDA messages are silent now!</li>
<li class="rscadd">30 new emoji have been added. Mime buff, mime now OP.</li>
</ul>
</div>
<b>GoonStation 13 Development Team</b>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

@@ -150,7 +150,8 @@
aroused_state = FALSE
/obj/item/organ/genital/on_life()
if(!reagents || !owner)
. = ..()
if(!reagents || !.)
return
reagents.maximum_volume = fluid_max_volume
if(fluid_id && CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION))
@@ -15,7 +15,7 @@
if(!forced && (status_flags & GODMODE))
return FALSE
var/obj/item/bodypart/BP = isbodypart(affected_zone)? affected_zone : (get_bodypart(check_zone(affected_zone)) || bodyparts[1])
if(amount > 0? BP.receive_damage(0, 0, amount * incomingstammult) : BP.heal_damage(0, 0, abs(amount)))
if(amount > 0? BP.receive_damage(0, 0, amount * incomingstammult) : BP.heal_damage(0, 0, abs(amount), FALSE, FALSE))
update_damage_overlays()
if(updating_health)
updatehealth()
@@ -131,7 +131,7 @@
item_state = "particleblaster"
lefthand_file = 'modular_citadel/icons/mob/inhands/guns_lefthand.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/guns_righthand.dmi'
ammo_type = list(/obj/item/ammo_casing/energy/electrode/pump, /obj/item/ammo_casing/energy/laser/pump)
ammo_type = list(/obj/item/ammo_casing/energy/disabler/pump, /obj/item/ammo_casing/energy/laser/pump)
ammo_x_offset = 2
modifystate = 1
@@ -152,19 +152,19 @@
fire_sound = 'sound/weapons/LaserSlugv3.ogg'
/obj/item/ammo_casing/energy/laser/pump
projectile_type = /obj/item/projectile/beam/weak
e_cost = 200
projectile_type = /obj/item/projectile/beam/pump
e_cost = 350
select_name = "kill"
pellets = 3
pellets = 6
variance = 15
fire_sound = 'sound/weapons/ParticleBlaster.ogg'
/obj/item/ammo_casing/energy/electrode/pump
projectile_type = /obj/item/projectile/energy/electrode/pump
select_name = "stun"
/obj/item/ammo_casing/energy/disabler/pump
projectile_type = /obj/item/projectile/energy/disabler/pump
select_name = "disable"
fire_sound = 'sound/weapons/LaserSlugv3.ogg'
e_cost = 300
pellets = 3
e_cost = 150
pellets = 6
variance = 20
//PROJECTILES
@@ -181,19 +181,13 @@
speed = 0.6
icon_state = "disablerslug"
/obj/item/projectile/energy/electrode/pump
name = "electron blast"
icon_state = "stunjectile"
/obj/item/projectile/beam/pump
damage = 9
range = 6
/obj/item/projectile/energy/disabler/pump
name = "disabling blast"
icon_state = "disablerslug"
color = null
nodamage = TRUE
knockdown = 100
knockdown_stamoverride = 0
knockdown_stam_max = 0
stamina = 18
stutter = 5
jitter = 20
strong_tase = FALSE
tase_duration = 0
hitsound = 'sound/weapons/taserhit.ogg'
range = 3
strong_tase = FALSE
stamina = 13
range = 6
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -63,6 +63,7 @@ As a Roboticist, you can reset a cyborg's module by cutting and mending the rese
As a Roboticist, you can greatly help out Shaft Miners by building a Firefighter APLU equipped with a hydraulic clamp and plasma cutter. The mech is ash storm proof and can even walk across lava!
As a Roboticist, you can augment people with cyborg limbs. Augmented limbs can easily be repaired with cables and welders.
As a Roboticist, you can use your printer that is linked to the ore silo to teleport mats into your work place!
As a Roboticist, you can upgrade cleanbots with adv mops and brooms to make them faster and better!
As the AI, you can click on people's names to look at them. This only works if there are cameras that can see them.
As the AI, you can quickly open and close doors by holding shift while clicking them, bolt them when holding ctrl, and even shock them while holding alt.
As the AI, you can take pictures with your camera and upload them to newscasters.
+5
View File
@@ -125,6 +125,7 @@
#include "code\__DEFINES\dcs\signals.dm"
#include "code\__DEFINES\flags\shields.dm"
#include "code\__DEFINES\misc\return_values.dm"
#include "code\__DEFINES\skills\skills.dm"
#include "code\__HELPERS\_cit_helpers.dm"
#include "code\__HELPERS\_lists.dm"
#include "code\__HELPERS\_logging.dm"
@@ -570,6 +571,10 @@
#include "code\datums\ruins\lavaland.dm"
#include "code\datums\ruins\space.dm"
#include "code\datums\ruins\station.dm"
#include "code\datums\skills\_check_skills.dm"
#include "code\datums\skills\_skill.dm"
#include "code\datums\skills\_skill_holder.dm"
#include "code\datums\skills\medical.dm"
#include "code\datums\status_effects\buffs.dm"
#include "code\datums\status_effects\debuffs.dm"
#include "code\datums\status_effects\gas.dm"