Merge branch 'master' into Dispencer-UI-change

This commit is contained in:
Fermi
2021-01-04 16:21:06 +00:00
74 changed files with 1849 additions and 1088 deletions

View File

@@ -6034,12 +6034,15 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/machinery/door/firedoor,
/obj/item/flashlight/lamp,
/obj/machinery/door/window/westright{
name = "Security Checkpoint";
req_access_txt = "1"
},
/obj/machinery/door/firedoor/border_only{
dir = 8;
name = "west facing firelock"
},
/turf/open/floor/plasteel,
/area/security/checkpoint)
"aoB" = (
@@ -9593,12 +9596,15 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/machinery/door/firedoor,
/obj/item/folder/red,
/obj/machinery/door/window/westleft{
name = "Security Checkpoint";
req_access_txt = "1"
},
/obj/machinery/door/firedoor/border_only{
dir = 8;
name = "west facing firelock"
},
/turf/open/floor/plasteel,
/area/security/checkpoint)
"awu" = (
@@ -23201,7 +23207,25 @@
/area/hallway/primary/port/fore)
"aYW" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/pen/blue,
/obj/machinery/camera{
c_tag = "Customs - Fore";
dir = 4
},
/obj/structure/window/reinforced/spawner/north,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPFore";
name = "HoP Fore Desk Shutters"
},
/obj/machinery/atmospherics/pipe/simple/orange/hidden,
/obj/machinery/door/firedoor/border_only{
dir = 1;
name = "north facing firelock"
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
"aYX" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/northright{
name = "Customs Desk";
req_access_txt = "57"
@@ -23210,16 +23234,9 @@
id = "HoPFore";
name = "HoP Fore Desk Shutters"
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
"aYX" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/flashlight/lamp,
/obj/structure/window/reinforced/spawner/north,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPFore";
name = "HoP Fore Desk Shutters"
/obj/machinery/door/firedoor/border_only{
dir = 1;
name = "north facing firelock"
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
@@ -25410,7 +25427,7 @@
dir = 4
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bdM" = (
/turf/open/floor/plasteel,
/area/quartermaster/office)
@@ -25688,7 +25705,7 @@
/area/security/courtroom)
"bey" = (
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bez" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -25764,7 +25781,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"beI" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
@@ -25778,7 +25795,7 @@
/obj/effect/turf_decal/delivery,
/obj/machinery/atmospherics/pipe/simple/orange/hidden,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"beJ" = (
/turf/open/floor/plasteel,
/area/hallway/primary/central)
@@ -25967,7 +25984,7 @@
icon_state = "0-4"
},
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"bfi" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 10
@@ -25985,13 +26002,13 @@
icon_state = "0-4"
},
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"bfk" = (
/obj/structure/cable{
icon_state = "2-8"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bfl" = (
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
@@ -26943,7 +26960,7 @@
icon_state = "2-4"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bhm" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/engine,
@@ -27313,7 +27330,7 @@
icon_state = "4-8"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bia" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -27399,7 +27416,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bik" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -27415,7 +27432,7 @@
"bil" = (
/obj/structure/window/reinforced/spawner,
/turf/open/floor/plasteel/dark,
/area/science/server)
/area/science/server/compcore)
"bim" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -27513,7 +27530,7 @@
dir = 5
},
/turf/open/floor/plasteel/dark,
/area/science/server)
/area/science/server/compcore)
"bix" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/delivery,
@@ -27576,7 +27593,7 @@
dir = 10
},
/turf/open/floor/plasteel/dark,
/area/science/server)
/area/science/server/compcore)
"biF" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -27615,7 +27632,7 @@
icon_state = "1-2"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"biI" = (
/obj/machinery/light{
dir = 4;
@@ -28416,7 +28433,7 @@
},
/obj/machinery/photocopier,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bku" = (
/obj/structure/closet,
/turf/open/floor/plasteel,
@@ -28455,7 +28472,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bkA" = (
/obj/machinery/light_switch{
pixel_y = -24
@@ -28566,7 +28583,7 @@
pixel_y = 24
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bkK" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -28674,7 +28691,7 @@
/area/maintenance/department/eva)
"bkW" = (
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bkX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/disposalpipe/segment,
@@ -28918,25 +28935,26 @@
"blv" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"blw" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/machinery/atmospherics/pipe/simple/orange/hidden,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"blx" = (
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/power/apc{
areastring = "/area/science/server/compcore";
dir = 1;
name = "Computer Core APC";
pixel_y = 24
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bly" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -29001,7 +29019,7 @@
light_color = "#e8eaff"
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"blE" = (
/obj/machinery/light{
dir = 8
@@ -29216,7 +29234,7 @@
dir = 4
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bma" = (
/obj/structure/chair{
dir = 8
@@ -29522,7 +29540,7 @@
icon_state = "1-2"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bmG" = (
/turf/open/floor/engine,
/area/gateway)
@@ -30215,7 +30233,7 @@
pixel_y = 1
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bnT" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -30228,7 +30246,7 @@
dir = 9
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bnU" = (
/obj/structure/rack,
/obj/item/clothing/suit/space/fragile,
@@ -30280,18 +30298,16 @@
/area/engine/teg)
"bnZ" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/pen/blue,
/obj/machinery/camera{
c_tag = "Customs - Fore";
dir = 4
},
/obj/item/flashlight/lamp,
/obj/structure/window/reinforced/spawner/north,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPFore";
name = "HoP Fore Desk Shutters"
},
/obj/machinery/atmospherics/pipe/simple/orange/hidden,
/obj/machinery/door/firedoor/border_only{
dir = 1;
name = "north facing firelock"
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
"boa" = (
@@ -30314,24 +30330,22 @@
/area/crew_quarters/heads/chief)
"bod" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
/obj/machinery/camera{
c_tag = "Customs - Aft";
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
/obj/structure/window/reinforced/spawner,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPAft";
name = "HoP Aft Desk Shutters"
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southleft{
name = "Primary Tool Storage Desk";
req_access_txt = "11"
},
/obj/item/folder/yellow,
/turf/open/floor/plasteel,
/area/storage/primary)
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
"boe" = (
/obj/machinery/door/airlock/vault{
name = "Vault Door";
@@ -30351,7 +30365,7 @@
req_access = list(16)
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bog" = (
/obj/machinery/atmospherics/pipe/simple/supply/visible,
/obj/machinery/door/airlock/engineering/glass{
@@ -30380,7 +30394,7 @@
dir = 5
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"boj" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -30451,7 +30465,7 @@
dir = 8
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"boq" = (
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
@@ -30464,7 +30478,7 @@
dir = 8
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bor" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/maintenance,
@@ -30503,7 +30517,7 @@
dir = 8
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bou" = (
/obj/effect/turf_decal/plaque{
icon_state = "L2"
@@ -30859,7 +30873,7 @@
},
/obj/item/book/manual/wiki/robotics_cyborgs,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bpi" = (
/obj/machinery/firealarm{
pixel_y = 26
@@ -31095,7 +31109,7 @@
dir = 4
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bpL" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -31105,7 +31119,7 @@
dir = 1
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bpM" = (
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
@@ -31116,7 +31130,7 @@
},
/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bpO" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -31164,7 +31178,7 @@
/obj/effect/turf_decal/tile/green,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bpW" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -31350,7 +31364,7 @@
dir = 4
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bqu" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -31546,7 +31560,7 @@
},
/obj/item/storage/box/disks,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bqP" = (
/obj/machinery/camera{
c_tag = "Engine Room - Port Quarter";
@@ -34882,7 +34896,7 @@
},
/obj/structure/window/reinforced/spawner,
/turf/open/floor/plasteel/dark,
/area/science/server)
/area/science/server/compcore)
"byf" = (
/obj/machinery/door/airlock/engineering/glass{
name = "Telecommunications Mainframe";
@@ -35576,7 +35590,7 @@
"bzN" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"bzO" = (
/obj/machinery/conveyor_switch/oneway{
id = "recycler";
@@ -35605,7 +35619,7 @@
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bzS" = (
/obj/structure/table,
/obj/machinery/light/small{
@@ -35924,7 +35938,7 @@
/obj/structure/disposalpipe/segment,
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bAz" = (
/obj/structure/disposalpipe/junction/flip{
dir = 1
@@ -36037,7 +36051,7 @@
},
/obj/structure/window/reinforced/spawner,
/turf/open/floor/plasteel/dark,
/area/science/server)
/area/science/server/compcore)
"bAI" = (
/obj/machinery/photocopier,
/obj/machinery/requests_console{
@@ -36545,7 +36559,7 @@
/obj/effect/turf_decal/delivery,
/obj/machinery/rnd/server,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bBT" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -36623,10 +36637,10 @@
name = "RD Server Lockup"
},
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bCb" = (
/turf/open/floor/circuit/green,
/area/science/server)
/area/science/server/compcore)
"bCc" = (
/obj/effect/turf_decal/delivery,
/obj/structure/cable{
@@ -36998,7 +37012,7 @@
"bCW" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/circuit/green,
/area/science/server)
/area/science/server/compcore)
"bCX" = (
/obj/machinery/rnd/production/circuit_imprinter/department/science,
/obj/item/reagent_containers/glass/beaker/sulphuric,
@@ -38773,7 +38787,7 @@
"bGv" = (
/obj/item/caution,
/turf/open/floor/plasteel,
/area/science/server)
/area/science/server/compcore)
"bGw" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -38897,7 +38911,7 @@
/obj/item/circuitboard/machine/rdserver,
/obj/item/disk/tech_disk,
/turf/open/floor/circuit/green,
/area/science/server)
/area/science/server/compcore)
"bGL" = (
/obj/structure/chair{
dir = 1
@@ -38946,7 +38960,7 @@
/obj/machinery/light,
/obj/structure/disposalpipe/segment,
/turf/open/floor/circuit/green,
/area/science/server)
/area/science/server/compcore)
"bGQ" = (
/obj/structure/lattice/catwalk,
/obj/structure/disposalpipe/segment{
@@ -39522,7 +39536,7 @@
network = list("minisat")
},
/turf/open/floor/circuit/green,
/area/science/server)
/area/science/server/compcore)
"bIh" = (
/obj/machinery/disposal/bin,
/obj/effect/turf_decal/delivery/white,
@@ -40062,7 +40076,7 @@
icon_state = "1-4"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bJo" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -40233,7 +40247,7 @@
icon_state = "0-4"
},
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"bJG" = (
/obj/structure/extinguisher_cabinet{
pixel_y = -32
@@ -40574,7 +40588,7 @@
icon_state = "1-8"
},
/turf/closed/wall/r_wall,
/area/science/server)
/area/science/server/compcore)
"bKt" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -42597,7 +42611,7 @@
icon_state = "0-2"
},
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"bOA" = (
/obj/effect/turf_decal/tile/green{
dir = 4
@@ -42830,18 +42844,23 @@
/area/science/xenobiology)
"bOY" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
/obj/machinery/camera{
c_tag = "Customs - Aft";
dir = 4
/obj/item/clipboard,
/obj/item/stamp/denied{
pixel_x = 4;
pixel_y = 4
},
/obj/item/stamp,
/obj/machinery/door/window/southright{
name = "Customs Desk";
req_access_txt = "57"
},
/obj/structure/window/reinforced/spawner,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPAft";
name = "HoP Aft Desk Shutters"
},
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
"bOZ" = (
@@ -44439,7 +44458,7 @@
},
/obj/structure/cable,
/turf/open/floor/plating,
/area/science/server)
/area/science/server/compcore)
"bSp" = (
/obj/machinery/conveyor_switch/oneway{
id = "cargoload"
@@ -46307,26 +46326,17 @@
/area/engine/atmos)
"bVY" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
/obj/item/flashlight/lamp,
/obj/structure/window/reinforced/spawner,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPAft";
name = "HoP Aft Desk Shutters"
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southright{
name = "Primary Tool Storage Desk";
req_access_txt = "11"
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/storage/primary)
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
"bVZ" = (
/obj/machinery/power/apc{
name = "Cargo Bay APC";
@@ -54609,26 +54619,26 @@
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"cmT" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/item/folder/red,
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/machinery/door/window/northright{
name = "Security Checkpoint";
req_access_txt = "1"
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/effect/turf_decal/stripes/white/full,
/obj/structure/window/reinforced/spawner/north,
/obj/machinery/door/firedoor/border_only{
dir = 1;
name = "north facing firelock"
},
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
/area/engine/workshop)
"cmU" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -57988,20 +57998,25 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"ctl" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/effect/turf_decal/stripes/white/full,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow,
/obj/machinery/modular_computer/console/preset/engineering,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/window/reinforced/spawner/north,
/obj/machinery/door/firedoor/border_only{
dir = 1;
name = "north facing firelock"
},
/turf/open/floor/plasteel,
/area/engine/workshop)
"ctm" = (
@@ -58202,21 +58217,17 @@
/turf/open/floor/plating,
/area/medical/virology)
"ctE" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
/obj/structure/table/reinforced,
/obj/machinery/door/window/southleft{
name = "Workshop Desk";
req_access_txt = "11"
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
/obj/item/paper_bin,
/obj/item/pen,
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow,
/obj/machinery/modular_computer/console/preset/engineering,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/window/reinforced/spawner/north,
/turf/open/floor/plasteel,
/area/engine/workshop)
"ctF" = (
@@ -59567,34 +59578,38 @@
/area/science/xenobiology)
"cvZ" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/clipboard,
/obj/item/stamp/denied{
pixel_x = 4;
pixel_y = 4
},
/obj/item/stamp,
/obj/machinery/door/window/southright{
name = "Customs Desk";
req_access_txt = "57"
name = "Workshop Desk";
req_access_txt = "11"
},
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPAft";
name = "HoP Aft Desk Shutters"
/obj/item/folder/yellow,
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
/turf/open/floor/plasteel,
/area/engine/workshop)
"cwa" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/flashlight/lamp,
/obj/structure/window/reinforced/spawner,
/obj/machinery/door/poddoor/shutters/preopen{
id = "HoPAft";
name = "HoP Aft Desk Shutters"
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/customs)
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/machinery/door/window/southleft{
name = "Primary Tool Storage Desk";
req_access_txt = "11"
},
/obj/item/folder/yellow,
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/turf/open/floor/plasteel,
/area/storage/primary)
"cwb" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -60704,6 +60719,7 @@
pixel_y = 24
},
/obj/machinery/power/apc{
areastring = "/area/crew_quarters/toilet/restrooms";
dir = 4;
name = "Restrooms APC";
pixel_x = 24
@@ -68681,6 +68697,30 @@
/obj/machinery/light,
/turf/open/floor/plasteel,
/area/router/air)
"cNm" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/machinery/door/window/southright{
name = "Primary Tool Storage Desk";
req_access_txt = "11"
},
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/door/firedoor/border_only{
name = "south facing firelock"
},
/turf/open/floor/plasteel,
/area/storage/primary)
"cNn" = (
/obj/machinery/conveyor/auto{
dir = 8;
@@ -68693,26 +68733,28 @@
/area/engine/workshop)
"cNp" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southleft{
name = "Workshop Desk";
req_access_txt = "11"
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/item/paper_bin,
/obj/item/pen,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/engine/workshop)
"cNq" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southright{
name = "Workshop Desk";
req_access_txt = "11"
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/item/folder/red,
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/machinery/door/window/northright{
name = "Security Checkpoint";
req_access_txt = "1"
},
/obj/machinery/door/firedoor/border_only{
dir = 1;
name = "north facing firelock"
},
/obj/item/folder/yellow,
/turf/open/floor/plasteel,
/area/engine/workshop)
/area/security/checkpoint/supply)
"cNr" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -94872,11 +94914,11 @@ aUV
aYB
bbg
bcH
bnZ
aYW
bqi
bIl
bcJ
bOY
bod
bdr
beJ
beJ
@@ -95129,11 +95171,11 @@ bcN
aYJ
aNL
aVJ
aYW
aYX
baF
bIr
bcx
cvZ
bOY
bdr
beJ
beT
@@ -95386,11 +95428,11 @@ bcQ
aUC
aNL
aVJ
aYX
bnZ
baD
bIV
bKg
cwa
bVY
bdr
beJ
bfd
@@ -107000,7 +107042,7 @@ cvb
cvd
cvd
cNa
cNp
ctE
ber
cIQ
cgB
@@ -107257,7 +107299,7 @@ cuV
cyv
cuV
cNb
cNq
cvZ
beW
cIM
cgB
@@ -108022,7 +108064,7 @@ cqs
cqG
crt
cdm
ctl
cmT
cuL
cvd
cAp
@@ -108279,7 +108321,7 @@ bxz
bwP
cBn
cBH
ctE
ctl
cuM
cvg
cBa
@@ -111626,7 +111668,7 @@ ciL
cLr
cwQ
bPx
bod
cwa
beW
bXX
cIM
@@ -111883,7 +111925,7 @@ con
coo
cwR
bPy
bVY
cNm
bWn
bYO
cJc
@@ -117286,7 +117328,7 @@ bdM
cNA
bhb
ciE
cmT
cNp
cnB
csh
cHV

File diff suppressed because it is too large Load Diff

View File

@@ -55,6 +55,9 @@
//donator items
#define LOADOUT_CATEGORY_DONATOR "Donator"
//unlockable items
#define LOADOUT_CATEGORY_UNLOCKABLE "Unlockable"
//how many prosthetics can we have
#define MAXIMUM_LOADOUT_PROSTHETICS 2

View File

@@ -5,6 +5,7 @@
#define SPECIES_ANDROID "android"
#define SPECIES_ANGEL "angel"
#define SPECIES_MAMMAL "mammal"
#define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic"
#define SPECIES_ARACHNID "arachnid"
#define SPECIES_INSECT "insect"
#define SPECIES_DULLAHAN "dullahan"

View File

@@ -86,10 +86,6 @@
if (CONFIG_GET(flag/log_attack))
WRITE_LOG(GLOB.world_attack_log, "ATTACK: [text]")
/proc/log_wounded(text)
if (CONFIG_GET(flag/log_attack))
WRITE_LOG(GLOB.world_attack_log, "WOUND: [text]")
/proc/log_manifest(ckey, datum/mind/mind,mob/body, latejoin = FALSE)
if (CONFIG_GET(flag/log_manifest))
WRITE_LOG(GLOB.world_manifest_log, "[ckey] \\ [body.real_name] \\ [mind.assigned_role] \\ [mind.special_role ? mind.special_role : "NONE"] \\ [latejoin ? "LATEJOIN":"ROUNDSTART"]")

View File

@@ -9,5 +9,6 @@ GLOBAL_LIST_INIT(loadout_categories, list(
LOADOUT_CATEGORY_SHOES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_GLOVES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_GLASSES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE
LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_UNLOCKABLE = LOADOUT_SUBCATEGORIES_NONE
))

View File

@@ -698,6 +698,8 @@ SUBSYSTEM_DEF(job)
if(polychromic && istype(polychromic))
var/list/polychromic_entry = polychromic.colors_by_atom[I]
if(polychromic_entry)
if(polychromic.suits_with_helmet_typecache[I.type]) //is this one of those toggleable hood/helmet things?
polychromic.connect_helmet(I,i[LOADOUT_COLOR])
polychromic.colors_by_atom[I] = i[LOADOUT_COLOR]
I.update_icon()
else

View File

@@ -72,6 +72,52 @@
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/bokken
name = "Training Bokken"
result = /obj/item/melee/bokken
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/bokken_blade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 1)
time = 60
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/bokken_steelwood
name = "Training Bokken"
result = /obj/item/melee/bokken/steelwood
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/bokken_steelblade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 1)
time = 60
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/wakibokken
name = "Training Wakizashi Bokken"
result = /obj/item/melee/bokken/waki
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/wakibokken_blade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/wakibokken_steelwood
name = "Training Wakizashi Steelwood Bokken"
result = /obj/item/melee/bokken/waki/steelwood
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/wakibokken_steelblade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/bola
name = "Bola"
result = /obj/item/restraints/legcuffs/bola
@@ -434,3 +480,51 @@
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
// BOKKEN CRAFTING
/datum/crafting_recipe/bokken_blade
name = "Training Bokken Blade"
result = /obj/item/bokken_blade
tools = list(/obj/item/hatchet)
reqs = list(/obj/item/stack/sheet/mineral/wood = 5)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/wakibokken_blade
name = "Training Wakizashi Bokken Blade"
result = /obj/item/wakibokken_blade
tools = list(/obj/item/hatchet)
reqs = list(/obj/item/stack/sheet/mineral/wood = 2)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/bokken_steelblade
name = "Training Ironwood Bokken Blade"
result = /obj/item/bokken_steelblade
tools = list(/obj/item/hatchet, TOOL_WELDER)
reqs = list(/obj/item/grown/log/steel = 2)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/wakibokken_blade
name = "Training Wakizashi Ironwood Bokken Blade"
result = /obj/item/wakibokken_steelblade
tools = list(/obj/item/hatchet, TOOL_WELDER)
reqs = list(/obj/item/grown/log/steel = 1)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/bokken_hilt
name = "Training Bokken hilt"
result = /obj/item/bokken_hilt
tools = list(/obj/item/hatchet)
reqs = list(/obj/item/stack/sheet/mineral/wood = 5,
/obj/item/stack/sheet/cloth = 2)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS

View File

@@ -165,6 +165,15 @@
/datum/element/polychromic/proc/on_examine(atom/source, mob/user, list/examine_list)
examine_list += "<span class='notice'>Alt-click to recolor it.</span>"
/datum/element/polychromic/proc/connect_helmet(atom/I, var/applycolor)
if(isitem(I))
if(istype(I,/obj/item/clothing/suit/hooded))
var/obj/item/clothing/suit/hooded/Isuit = I
colors_by_atom[Isuit.hood] = applycolor
else if(istype(I,/obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/Isuit = I
colors_by_atom[Isuit.helmet] = applycolor
/datum/element/polychromic/proc/register_helmet(atom/source, obj/item/clothing/head/H)
if(!isitem(H)) //backup in case if it messes up somehow
if(istype(source,/obj/item/clothing/suit/hooded)) //so how come it be like this, where toggleable headslots are named separately (helmet/hood) anyways?

View File

@@ -1123,6 +1123,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Research Division Server Room"
icon_state = "server"
/area/science/server/compcore
name = "Computer Core"
icon_state = "server"
/area/science/explab
name = "Experimentation Lab"
icon_state = "toxmisc"

View File

@@ -16,9 +16,9 @@ GLOBAL_LIST_EMPTY(power_sinks)
throw_speed = 1
throw_range = 2
custom_materials = list(/datum/material/iron=750)
var/drain_rate = 1600000 // amount of power to drain per tick
var/drain_rate = 2000000 // amount of power to drain per tick. Currently 2MJ.
var/power_drained = 0 // has drained this much power
var/max_power = 1e10 // maximum power that can be drained before exploding
var/max_power = 2000000000 // maximum power that can be drained before exploding. Currently 2GJ. About 17 minutes to explode at the max rate.
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
var/admins_warned = FALSE // stop spam, only warn the admins once that we are about to boom
@@ -155,5 +155,5 @@ GLOBAL_LIST_EMPTY(power_sinks)
if(power_drained >= max_power)
STOP_PROCESSING(SSobj, src)
explosion(src.loc, 4,8,16,32)
explosion(src.loc, 3,7,14,28)
qdel(src)

View File

@@ -24,13 +24,17 @@
create_reagents(mopcap, NONE, NO_REAGENTS_VALUE)
/obj/item/mop/proc/clean(turf/A)
/obj/item/mop/proc/clean(turf/A, mob/user)
if(reagents.has_reagent(/datum/reagent/water, 1) || reagents.has_reagent(/datum/reagent/water/holywater, 1) || reagents.has_reagent(/datum/reagent/consumable/ethanol/vodka, 1) || reagents.has_reagent(/datum/reagent/space_cleaner, 1))
SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
A.clean_blood()
var/cleaned_something = FALSE
for(var/obj/effect/O in A)
if(is_cleanable(O))
cleaned_something = TRUE
qdel(O)
if(cleaned_something && user && user.client)
user.client.increment_progress("janitor", 1)
reagents.reaction(A, TOUCH, 10) //Needed for proper floor wetting.
reagents.remove_any(1) //reaction() doesn't use up the reagents
@@ -59,7 +63,7 @@
if(!L.UseStaminaBuffer(stamusage, warn = TRUE))
return
user.visible_message("[user] cleans \the [T] with [src].", "<span class='notice'>You clean \the [T] with [src].</span>")
clean(T)
clean(T, user)
user.DelayNextAction(CLICK_CD_MELEE)
user.do_attack_animation(T, used_item = src)
playsound(T, "slosh", 50, 1)

View File

@@ -253,7 +253,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
new/datum/stack_recipe("training bokken", /obj/item/melee/bokken, 10, time = 15),\
null, \
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \

View File

@@ -802,7 +802,8 @@
. += "<span class='notice'>Alt-click it to quickly draw the blade.</span>"
/obj/item/storage/belt/sabre/PopulateContents()
new starting_sword(src)
if(starting_sword)
new starting_sword(src)
/obj/item/storage/belt/sabre/rapier
name = "rapier sheath"
@@ -864,6 +865,7 @@
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 2
STR.max_w_class = WEIGHT_CLASS_BULKY + WEIGHT_CLASS_NORMAL //katana and waki.
STR.max_combined_w_class = 7
/obj/item/melee/smith/twohand/katana/on_exit_storage(datum/component/storage/S)
var/obj/item/storage/belt/sabre/twin/B = S.parent

View File

@@ -296,8 +296,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 7 //how much harm mode damage we do
var/stamina_damage_increment = 4 //how much extra damage do we do when in non-harm mode
force = 10 //how much harm mode damage we do
var/stamina_damage_increment = 5 //how much extra damage do we do when in non-harm mode
throwforce = 10
damtype = STAMINA
attack_verb = list("whacked", "smacked", "struck")
@@ -310,11 +310,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/quick_parry = FALSE // false = default parry, true = really small parry window
item_flags = ITEM_CAN_PARRY
block_parry_data = /datum/block_parry_data/bokken
var/default_parry_data = /datum/block_parry_data/bokken
var/quick_parry_data = /datum/block_parry_data/bokken/quick_parry
bare_wound_bonus = 0
wound_bonus = 0
/datum/block_parry_data/bokken // fucked up parry data, emphasizing quicker, shorter parries
parry_stamina_cost = 8 // be wise about when you parry, though, else you won't be able to fight enough to make it count
parry_stamina_cost = 10 // be wise about when you parry, though, else you won't be able to fight enough to make it count
parry_time_windup = 0
parry_time_active = 10 // small parry window
parry_time_spindown = 0
@@ -330,11 +332,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
)
parry_failed_stagger_duration = 3 SECONDS
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
)
/datum/block_parry_data/bokken/quick_parry // emphasizing REALLY SHORT PARRIES
parry_stamina_cost = 6 // still more costly than most parries, but less than a full bokken parry
parry_stamina_cost = 8 // still more costly than most parries, but less than a full bokken parry
parry_time_active = 5 // REALLY small parry window
parry_time_perfect = 2.5 // however...
parry_time_perfect_leeway = 2 // the entire time, the parry is perfect
@@ -371,9 +373,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
. = ..()
quick_parry = !quick_parry
if(quick_parry)
block_parry_data = /datum/block_parry_data/bokken/quick_parry
block_parry_data = quick_parry_data
else
block_parry_data = /datum/block_parry_data/bokken
block_parry_data = default_parry_data
to_chat(user, "<span class='notice'>[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].</span>")
/obj/item/melee/bokken/attackby(obj/item/I, mob/living/user, params)
@@ -410,23 +412,76 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
if(burnt)
. += " Burned into the \"blade\" is [burned_in]."
/obj/item/melee/bokken/steelwood
name = "steelwood bokken"
desc = "A misnomer of sorts, this is effectively a blunt katana made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
icon_state = "bokken_steel"
item_state = "bokken_steel"
force = 12
stamina_damage_increment = 3
/obj/item/melee/bokken/waki
name = "wakizashi bokken"
desc = "A space-Japanese training sword made of wood and shaped like a wakizashi."
icon_state = "wakibokken"
item_state = "wakibokken"
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
force = 6
stamina_damage_increment = 4
block_parry_data = /datum/block_parry_data/bokken/waki
default_parry_data = /datum/block_parry_data/bokken/waki
quick_parry_data = /datum/block_parry_data/bokken/waki/quick_parry
/datum/block_parry_data/bokken/waki // weaker parries than the bigger variant, but cheaper and faster recovery, like quick parry
parry_stamina_cost = 4
parry_time_windup = 0
parry_time_active = 6
parry_time_spindown = 0
parry_time_perfect = 1.5
parry_time_perfect_leeway = 1
parry_imperfect_falloff_percent = 7.5
parry_efficiency_to_counterattack = 120
parry_efficiency_considered_successful = 65
parry_efficiency_perfect = 120
parry_efficiency_perfect_override = list(
TEXT_ATTACK_TYPE_PROJECTILE = 30,
)
parry_failed_stagger_duration = 2 SECONDS
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.5, // 6*1.5 = 9, 7*1.5 = 10.5, 8*1.5 = 12, 9*1.5 = 13.5
)
/datum/block_parry_data/bokken/waki/quick_parry //For the parry spammer in you
parry_stamina_cost = 2 // Slam that parry button
parry_time_active = 2.5
parry_time_perfect = 1
parry_time_perfect_leeway = 1
parry_failed_stagger_duration = 1 SECONDS
parry_failed_clickcd_duration = 1 SECONDS
/datum/block_parry_data/bokken/waki/quick_parry/proj
parry_efficiency_perfect_override = list()
/obj/item/melee/bokken/waki/steelwood
name = "wakizashi steelwood bokken"
desc = "A misnomer of sorts, this is effectively a blunt wakizashi made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
icon_state = "wakibokken_steel"
item_state = "wakibokken_steel"
force = 8
stamina_damage_increment = 2
/obj/item/melee/bokken/debug
name = "funny debug parrying stick"
desc = "if you see this you've fucked up somewhere my good man"
block_parry_data = /datum/block_parry_data/bokken/debug
/obj/item/melee/bokken/debug/AltClick(mob/user)
quick_parry = !quick_parry
if(quick_parry)
block_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
else
block_parry_data = /datum/block_parry_data/bokken/debug
to_chat(user, "<span class='notice'>[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].</span>")
default_parry_data = /datum/block_parry_data/bokken/debug
quick_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
/datum/block_parry_data/bokken/debug
parry_efficiency_perfect_override = list()
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
PARRY_DISARM_ATTACKER = TRUE,
PARRY_KNOCKDOWN_ATTACKER = 10,
PARRY_STAGGER_ATTACKER = 10,
@@ -436,13 +491,63 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/datum/block_parry_data/bokken/quick_parry/debug
parry_efficiency_perfect_override = list()
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
PARRY_DISARM_ATTACKER = TRUE,
PARRY_KNOCKDOWN_ATTACKER = 10,
PARRY_STAGGER_ATTACKER = 10,
PARRY_DAZE_ATTACKER = 10,
)
/// BOKKEN CRAFTNG PIECES
/obj/item/bokken_blade
name = "training bokken wooden blade"
desc = "The blade piece of a bokken katana."
icon = 'icons/obj/smith.dmi'
icon_state = "bokken"
item_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/bokken_steelblade
name = "training bokken steelwood blade"
desc = "The blade piece of a steelwood bokken katana."
icon = 'icons/obj/smith.dmi'
icon_state = "bokken_steel"
item_state = "switchblade_ext"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/wakibokken_blade
name = "training bokken wooden wakizashi blade"
desc = "The blade piece of a bokken wakizashi."
icon = 'icons/obj/smith.dmi'
icon_state = "wakibokken"
item_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/wakibokken_steelblade
name = "training bokken steelwood wakizashi blade"
desc = "The blade piece of a steelwood bokken katana."
icon = 'icons/obj/smith.dmi'
icon_state = "wakibokken_steel"
item_state = "switchblade_ext"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/bokken_hilt
name = "training bokken hilt"
desc = "The hilt piece of a bokken. This hilt is appropriate for any potential blade length or material."
icon = 'icons/obj/smith.dmi'
icon_state = "bokken_hilt"
item_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
/obj/item/wirerod
name = "wired rod"

View File

@@ -243,7 +243,7 @@ LINEN BINS
/obj/item/bedsheet/random/Initialize()
..()
var/type = pick(typesof(/obj/item/bedsheet) - list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon))
var/type = pick(typesof(/obj/item/bedsheet) - (list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon) + typesof(/obj/item/bedsheet/unlockable)))
new type(loc)
return INITIALIZE_HINT_QDEL
@@ -257,9 +257,32 @@ LINEN BINS
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/bedsheet
chameleon_action.chameleon_name = "Bedsheet"
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random), only_root_path = TRUE)
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random, /obj/item/bedsheet/unlockable), only_root_path = FALSE)
chameleon_action.initialize_disguises()
//unlockable bedsheets
/obj/item/bedsheet/unlockable
name = "unlockable bedsheet"
desc = "this shouldn't be here!"
//janitor: clean 100 messes with mop as janitor
/obj/item/bedsheet/unlockable/janitor
name = "janitor bedsheet"
desc = "A white bedsheet, with a warning sign on the front."
icon_state = "sheetjanitor"
//cook: use microwave 100 times properly (contents must make one good item) as cook
/obj/item/bedsheet/unlockable/cook
name = "cook bedsheet"
desc = "A grey bedsheet, with a microwave on the front."
icon_state = "sheetcook"
//miner: redeem 100,000 mining points
/obj/item/bedsheet/unlockable/miner
name = "miner bedsheet"
desc = "A red and black bedsheet. It seems to be made with goliath hide."
icon_state = "sheetminer"
//bedsheet bin
/obj/structure/bedsheetbin
name = "linen bin"

View File

@@ -40,17 +40,18 @@
var/rounded_length = round(length)
var/new_size
var/enlargement = FALSE
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
switch(rounded_length)
if(0 to 6) //If modest size
new_size = 1
if(7 to 11) //If large
new_size = 2
if(12 to 20) //If massive
if(12 to max_D) //If massive
new_size = 3
if(21 to 34) //If massive and due for large effects
if(max_D + 1 to max_D+13) //If massive and due for large effects, modified in case some server owner running recent citcode decides to be insane with dick sizes in the config
new_size = 3
enlargement = TRUE
if(35 to INFINITY) //If comical
if(max_D+14 to INFINITY) //If comical
new_size = 4 //no new sprites for anything larger yet
enlargement = TRUE
if(owner)

View File

@@ -90,6 +90,18 @@
crate_name = "medical hardsuit"
crate_type = /obj/structure/closet/crate/secure/medical
/datum/supply_pack/medical/paramedicevasuit
name = "Paramedic EVA Suit"
desc = "Greytide pushing up daisies with the carp outside the station? Chemistry vented in a meth experiment gone wrong? Be the blue saviour this station desperately needs and get your Paramedical EVA suit today! Requires medical access to open."
cost = 1975
access = ACCESS_MEDICAL
contains = list(/obj/item/tank/internals/emergency_oxygen,
/obj/item/clothing/head/helmet/space/eva/paramedic,
/obj/item/clothing/suit/space/eva/paramedic,
/obj/item/clothing/mask/breath)
crate_name = "paramedic EVA suit"
crate_type = /obj/structure/closet/crate/secure/medical
/datum/supply_pack/medical/supplies
name = "Medical Supplies Crate"
desc = "Contains seven beakers, syringes, and bodybags. Three morphine bottles, four insulin pills. Two charcoal bottles, epinephrine bottles, antitoxin bottles, and large beakers. Finally, a single roll of medical gauze, as well as a bottle of stimulant pills for long, hard work days. German doctor not included."

View File

@@ -1024,3 +1024,25 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
verb_tabs |= verb_to_init.category
verblist[++verblist.len] = list(verb_to_init.category, verb_to_init.name)
src << output("[url_encode(json_encode(verb_tabs))];[url_encode(json_encode(verblist))]", "statbrowser:init_verbs")
//increment progress for an unlockable loadout item
/client/proc/increment_progress(key, amount)
if(prefs)
var/savefile/S = new /savefile(prefs.path)
var/list/unlockable_loadout_data = prefs.unlockable_loadout_data
if(!length(unlockable_loadout_data))
unlockable_loadout_data = list()
unlockable_loadout_data[key] = amount
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(unlockable_loadout_data))
prefs.unlockable_loadout_data = unlockable_loadout_data
return TRUE
else
if(unlockable_loadout_data[key])
unlockable_loadout_data[key] += amount
else
unlockable_loadout_data[key] = amount
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(unlockable_loadout_data))
prefs.unlockable_loadout_data = unlockable_loadout_data
return TRUE
return FALSE

View File

@@ -198,6 +198,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/gear_points = 10
var/list/gear_categories
var/list/loadout_data = list()
var/list/unlockable_loadout_data = list()
var/loadout_slot = 1 //goes from 1 to MAXIMUM_LOADOUT_SAVES
var/gear_category
var/gear_subcategory
@@ -907,12 +908,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1]
extra_color_data += "<BR><a href='?_src_=prefs;preference=gear;loadout_color=1;loadout_gear_name=[html_encode(gear.name)];'>Color</a>"
extra_color_data += "<span style='border: 1px solid #161616; background-color: [loadout_color_non_poly];'>&nbsp;&nbsp;&nbsp;</span>"
else if(gear_points <= 0)
else if((gear_points - gear.cost) < 0)
class_link = "style='white-space:normal;' class='linkOff'"
else if(donoritem)
class_link = "style='white-space:normal;background:#ebc42e;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'"
else
else if(!istype(gear, /datum/gear/unlockable) || can_use_unlockable(gear))
class_link = "style='white-space:normal;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'"
else
class_link = "style='white-space:normal;background:#eb2e2e;' class='linkOff'"
dat += "<tr style='vertical-align:top;'><td width=15%><a [class_link]>[name]</a>[extra_color_data]</td>"
dat += "<td width = 5% style='vertical-align:top'>[gear.cost]</td><td>"
if(islist(gear.restricted_roles))
@@ -925,7 +928,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<font size=2>"
dat += gear.restricted_roles.Join(";")
dat += "</font>"
dat += "</td><td><font size=2><i>[gear.description]</i></font></td></tr>"
if(!istype(gear, /datum/gear/unlockable))
dat += "</td><td><font size=2><i>[gear.description]</i></font></td></tr>"
else
//we add the user's progress to the description assuming they have progress
var/datum/gear/unlockable/unlockable = gear
var/progress_made = unlockable_loadout_data[unlockable.progress_key]
if(!progress_made)
progress_made = 0
dat += "</td><td><font size=2><i>[gear.description] Progress: [min(progress_made, unlockable.progress_required)]/[unlockable.progress_required]</i></font></td></tr>"
dat += "</table>"
if(4) // Content preferences
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
@@ -2675,6 +2687,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(G.donoritem && !G.donator_ckey_check(user.ckey))
to_chat(user, "<span class='danger'>This is an item intended for donator use only. You are not authorized to use this item.</span>")
return
if(istype(G, /datum/gear/unlockable) && !can_use_unlockable(G))
to_chat(user, "<span class='danger'>To use this item, you need to meet the defined requirements!</span>")
return
if(gear_points >= initial(G.cost))
var/list/new_loadout_data = list(LOADOUT_ITEM = "[G.type]")
if(length(G.loadout_initial_colors))
@@ -2960,6 +2975,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(find_gear)
loadout_data["SAVE_[save_slot]"] -= list(find_gear)
/datum/preferences/proc/can_use_unlockable(datum/gear/unlockable/unlockable_gear)
if(unlockable_loadout_data[unlockable_gear.progress_key] >= unlockable_gear.progress_required)
return TRUE
return FALSE
#undef DEFAULT_SLOT_AMT
#undef HANDS_SLOT_AMT
#undef BACKPACK_SLOT_AMT

View File

@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
#define SAVEFILE_VERSION_MAX 47
#define SAVEFILE_VERSION_MAX 48
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -285,6 +285,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["loadout"] = safe_json_encode(loadout_data)
if(current_version < 48) //unlockable loadout items but we need to clear bad data from a mistake
S["unlockable_loadout"] = list()
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
if(!ckey)
return
@@ -427,6 +430,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
verify_keybindings_valid() // one of these days this will runtime and you'll be glad that i put it in a different proc so no one gets their saves wiped
if(S["unlockable_loadout"])
unlockable_loadout_data = safe_json_decode(S["unlockable_loadout"])
else
unlockable_loadout_data = list()
if(needs_update >= 0) //save the updated version
var/old_default_slot = default_slot
var/old_max_save_slots = max_save_slots
@@ -532,6 +540,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["auto_ooc"], auto_ooc)
WRITE_FILE(S["no_tetris_storage"], no_tetris_storage)
if(length(unlockable_loadout_data))
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(unlockable_loadout_data))
else
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(list()))
return 1
/datum/preferences/proc/load_character(slot, bypass_cooldown = FALSE)
@@ -736,7 +749,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
belly_prefs = json_from_file["belly_prefs"]
//gear loadout
loadout_data = safe_json_decode(S["loadout"])
if(S["loadout"])
loadout_data = safe_json_decode(S["loadout"])
else
loadout_data = list()
//try to fix any outdated data if necessary
//preference updating will handle saving the updated data for us.

View File

@@ -24,7 +24,7 @@
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/under/rank/civilian/util
name = "generic utility uniform"
name = "utility uniform"
desc = "A utility uniform worn by various crew."
icon_state = "utilgen"
item_state = "utilgen"

View File

@@ -3,11 +3,12 @@
name = "captain's jumpsuit"
icon_state = "captain"
item_state = "b_suit"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 15)
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
/obj/item/clothing/under/rank/captain/util
name = "Command Utiltiy Uniform"
name = "command utility uniform"
desc = "A utility uniform for command personnel."
icon_state = "utilcom"
item_state = "utilcom"
@@ -26,7 +27,6 @@
/obj/item/clothing/under/rank/captain/suit
name = "captain's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 15)
icon_state = "green_suit"
item_state = "dg_suit"
can_adjust = FALSE

View File

@@ -131,7 +131,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
/obj/item/clothing/under/rank/medical/doctor/util
name = "Medical Utility Uniform"
name = "medical utility uniform"
desc = "Utility jumpsuit for medical personnel"
icon_state = "utilmed"
item_state = "utilmed"

View File

@@ -62,7 +62,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
/obj/item/clothing/under/rank/rnd/scientist/util
name = "Science Utility Uniform"
name = "science utility uniform"
desc = "A utility uniform for science personnel"
icon_state = "utilsci"
item_state = "utilsci"

View File

@@ -195,7 +195,7 @@
/obj/machinery/microwave/AltClick(mob/user)
. = ..()
if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
cook()
cook(user)
return TRUE
/obj/machinery/microwave/ui_interact(mob/user)
@@ -226,7 +226,7 @@
if("eject")
eject()
if("use")
cook()
cook(user)
if("examine")
examine(user)
@@ -236,7 +236,7 @@
AM.forceMove(drop_location())
ingredients.Cut()
/obj/machinery/microwave/proc/cook()
/obj/machinery/microwave/proc/cook(mob/user)
if(stat & (NOPOWER|BROKEN))
return
if(operating || broken > 0 || panel_open || !anchored || dirty == 100)
@@ -257,7 +257,7 @@
start_can_fail()
return
break
start()
start(user)
/obj/machinery/microwave/proc/turn_on()
visible_message("\The [src] turns on.", "<span class='italics'>You hear a microwave humming.</span>")
@@ -277,9 +277,9 @@
#define MICROWAVE_MUCK 1
#define MICROWAVE_PRE 2
/obj/machinery/microwave/proc/start()
/obj/machinery/microwave/proc/start(mob/user)
turn_on()
loop(MICROWAVE_NORMAL, 10)
loop(MICROWAVE_NORMAL, 10, user = user)
/obj/machinery/microwave/proc/start_can_fail()
turn_on()
@@ -292,7 +292,7 @@
update_icon()
loop(MICROWAVE_MUCK, 4)
/obj/machinery/microwave/proc/loop(type, time, wait = max(12 - 2 * productivity, 2)) // standard wait is 10
/obj/machinery/microwave/proc/loop(type, time, wait = max(12 - 2 * productivity, 2), mob/user) // standard wait is 10
if(stat & (NOPOWER|BROKEN))
if(type == MICROWAVE_PRE)
pre_fail()
@@ -300,7 +300,7 @@
if(!time)
switch(type)
if(MICROWAVE_NORMAL)
loop_finish()
loop_finish(user)
if(MICROWAVE_MUCK)
muck_finish()
if(MICROWAVE_PRE)
@@ -308,16 +308,21 @@
return
time--
use_power(500)
addtimer(CALLBACK(src, .proc/loop, type, time, wait), wait)
addtimer(CALLBACK(src, .proc/loop, type, time, wait, user), wait)
/obj/machinery/microwave/proc/loop_finish()
/obj/machinery/microwave/proc/loop_finish(mob/user)
operating = FALSE
var/metal = 0
var/cooked_food = 0
for(var/obj/item/O in ingredients)
O.microwave_act(src)
var/cooked_result = O.microwave_act(src)
if(!istype(cooked_result, /obj/item/reagent_containers/food/snacks/badrecipe))
cooked_food += 1
if(O.custom_materials?.len)
metal += O.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)]
if(cooked_food && user.client)
user.client.increment_progress("cook", cooked_food)
if(metal)
spark()
@@ -336,8 +341,8 @@
spark()
after_finish_loop()
/obj/machinery/microwave/proc/pre_success()
loop(MICROWAVE_NORMAL, 10)
/obj/machinery/microwave/proc/pre_success(mob/user)
loop(MICROWAVE_NORMAL, 10, user)
/obj/machinery/microwave/proc/muck_finish()
visible_message("<span class='warning'>\The [src] gets covered in muck!</span>")

View File

@@ -30,6 +30,8 @@
if(points)
if(I)
I.mining_points += points
if(usr.client)
usr.client.increment_progress("miner", points)
points = 0
else
to_chat(usr, "<span class='warning'>No ID detected.</span>")

View File

@@ -68,7 +68,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/plant
name = "Plant Weeds"
desc = "Plants some alien weeds."
desc = "Plants Alien weeds which spread resin which heals any alien. These weeds also regenerate plasma faster. Costs 50 Plasma."
plasma_cost = 50
check_turf = TRUE
action_icon_state = "alien_plant"
@@ -83,7 +83,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/whisper
name = "Whisper"
desc = "Whisper to someone."
desc = "Whisper to someone through the hivemind. Costs 10 Plasma."
plasma_cost = 10
action_icon_state = "alien_whisper"
@@ -143,7 +143,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/acid
name = "Corrosive Acid"
desc = "Drench an object in acid, destroying it over time."
desc = "Drench an object in acid, destroying it over time. Costs 200 Plasma."
plasma_cost = 200
action_icon_state = "alien_acid"
@@ -189,7 +189,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/neurotoxin
name = "Spit Neurotoxin"
desc = "Spits neurotoxin at someone, paralyzing them for a short time."
desc = "Activates your Neurotoxin glands. You can shoot paralyzing shots. Each shot costs 50 Plasma."
action_icon_state = "alien_neurotoxin_0"
active = FALSE
@@ -254,7 +254,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/resin
name = "Secrete Resin"
desc = "Secrete tough malleable resin."
desc = "Secrete tough malleable resin. Costs 55 Plasma."
plasma_cost = 55
check_turf = TRUE
var/list/structures = list(

View File

@@ -20,7 +20,7 @@
/obj/effect/proc_holder/alien/royal/praetorian/evolve
name = "Evolve"
desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time."
desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time. Costs 500 Plasma."
plasma_cost = 500
action_icon_state = "alien_evolve_praetorian"

View File

@@ -57,7 +57,7 @@
//Queen verbs
/obj/effect/proc_holder/alien/lay_egg
name = "Lay Egg"
desc = "Lay an egg to produce huggers to impregnate prey with."
desc = "Lay an egg to produce huggers to impregnate prey with. Costs 75 Plasma."
plasma_cost = 75
check_turf = TRUE
action_icon_state = "alien_egg"
@@ -77,7 +77,7 @@
//Button to let queen choose her praetorian.
/obj/effect/proc_holder/alien/royal/queen/promote
name = "Create Royal Parasite"
desc = "Produce a royal parasite to grant one of your children the honor of being your Praetorian."
desc = "Produce a royal parasite to grant one of your children the honor of being your Praetorian. Costs 500 Plasma."
plasma_cost = 500 //Plasma cost used on promotion, not spawning the parasite.
action_icon_state = "alien_queen_promote"

View File

@@ -18,3 +18,33 @@
species_category = SPECIES_CATEGORY_FURRY
allowed_limb_ids = list("mammal","aquatic","avian")
/datum/species/mammal/synthetic
name = "Synthetic Anthromorph"
id = SPECIES_MAMMAL_SYNTHETIC
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,ROBOTIC_LIMBS,HAS_FLESH,HAS_BONE,WINGCOLOR,HORNCOLOR)
inherent_traits = list(TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NO_PROCESS_FOOD, TRAIT_ROBOTIC_ORGANISM)
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID|MOB_BEAST
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless)
//Just robo looking parts.
mutant_heart = /obj/item/organ/heart/ipc
mutantlungs = /obj/item/organ/lungs/ipc
mutantliver = /obj/item/organ/liver/ipc
mutantstomach = /obj/item/organ/stomach/ipc
mutanteyes = /obj/item/organ/eyes/ipc
mutantears = /obj/item/organ/ears/ipc
mutanttongue = /obj/item/organ/tongue/robot/ipc
mutant_brain = /obj/item/organ/brain/ipc
//special cybernetic organ for getting power from apcs
mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord)
attack_verb = "claw"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
allowed_limb_ids = list("mammal","aquatic","avian", "human")

View File

@@ -203,6 +203,15 @@
var/obj/item/I = AM
if(I.light_range && I.light_power)
disintegrate(I)
else if (isstructure(AM))
var/obj/structure/S = AM
if(istype(S, /obj/structure/glowshroom) || istype(S, /obj/structure/marker_beacon))
qdel(S)
visible_message("<span class='danger'>[S] is disintegrated by [src]!</span>")
else if(AM.light_range && AM.light_power && !(istype(AM, /obj/machinery/power/apc) || istype(AM, /obj/machinery/airalarm)))
var/obj/target_object = AM
target_object.take_damage(force * 5, BRUTE, "melee", 0)
/obj/item/light_eater/proc/disintegrate(obj/item/O)
if(istype(O, /obj/item/pda))

View File

@@ -508,7 +508,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(LOG_EMOTE)
colored_message = "(EMOTE) [colored_message]"
var/list/timestamped_message = list("\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(src)] [loc_name(src)]" = colored_message)
var/list/timestamped_message = list("\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(src)] [loc_name(src)] (Event #[LAZYLEN(logging[smessage_type])])" = colored_message)
logging[smessage_type] += timestamped_message

View File

@@ -257,9 +257,9 @@
var/amount = text2num(params["amount"])
if(amount == null)
amount = text2num(input(usr,
"Max 10. Buffer content will be split evenly.",
"Max 20. Buffer content will be split evenly.",
"How many to make?", 1))
amount = clamp(round(amount), 0, 10)
amount = clamp(round(amount), 0, 20)
if (amount <= 0)
return FALSE
// Get units per item

View File

@@ -104,3 +104,11 @@
build_path = /obj/item/circuitboard/machine/thermomachine
category = list ("Engineering Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/spaceship_navigation_beacon
name = "Machine Design (Bluespace Navigation Gigabeacon)"
desc = "The circuit board for a Bluespace Navigation Gigabeacon."
id = "spaceship_navigation_beacon"
build_path = /obj/item/circuitboard/machine/spaceship_navigation_beacon
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE

View File

@@ -726,6 +726,32 @@
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////
/////Synth Organs////
/////////////////////
/datum/design/ipc_stomach
name = "IPC cell"
desc = "Effectively the robot equivalent of a stomach, handling power storage."
id = "ipc_stomach"
build_type = PROTOLATHE | MECHFAB
construction_time = 40
materials = list(/datum/material/iron = 1000, /datum/material/glass = 300, /datum/material/silver = 500, /datum/material/gold = 400)
build_path = /obj/item/organ/stomach/ipc
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_power_cord
name = "IPC power cord"
desc = "A implant for Robots designed to siphon power from APCs to recharge their own cell."
id = "ci-power-cord"
build_type = PROTOLATHE | MECHFAB
construction_time = 75
materials = list(/datum/material/iron = 4000, /datum/material/glass = 1500, /datum/material/silver = 1200, /datum/material/gold = 1600, /datum/material/plasma = 1000)
build_path = /obj/item/organ/cyberimp/arm/power_cord
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////
///Surgery Designs///
/////////////////////

View File

@@ -5,7 +5,7 @@
display_name = "Biological Technology"
description = "What makes us tick." //the MC, silly!
prereq_ids = list("base")
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack")
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack", "portable_chem_mixer")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/adv_biotech

View File

@@ -70,7 +70,7 @@
display_name = "Basic Shuttle Research"
description = "Research the technology required to create and use basic shuttles."
prereq_ids = list("practical_bluespace", "adv_engi")
design_ids = list("shuttle_creator", "engine_plasma", "engine_heater", "shuttle_control", "shuttle_docker")
design_ids = list("shuttle_creator", "engine_plasma", "engine_heater", "shuttle_control", "shuttle_docker","spaceship_navigation_beacon")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
/datum/techweb_node/shuttle_route_upgrade

View File

@@ -80,7 +80,7 @@
display_name = "Upgraded Cybernetic Organs"
description = "We have the technology to upgrade him."
prereq_ids = list("cyber_organs")
design_ids = list("cybernetic_ears_u", "cybernetic_heart_u", "cybernetic_liver_u", "cybernetic_lungs_u")
design_ids = list("cybernetic_ears_u", "cybernetic_heart_u", "cybernetic_liver_u", "cybernetic_lungs_u", "ipc_stomach")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
/datum/techweb_node/cyber_implants
@@ -88,7 +88,7 @@
display_name = "Cybernetic Implants"
description = "Electronic implants that improve humans."
prereq_ids = list("adv_biotech", "adv_datatheory")
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-service")
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-service", "ci-power-cord")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/adv_cyber_implants

View File

@@ -11,6 +11,7 @@
var/list/jumpto_ports = list() //hashset of ports to jump to and ignore for collision purposes
var/obj/docking_port/stationary/my_port //the custom docking port placed by this console
var/obj/docking_port/mobile/shuttle_port //the mobile docking port of the connected shuttle
var/list/locked_traits = list(ZTRAIT_RESERVED, ZTRAIT_CENTCOM, ZTRAIT_AWAY, ZTRAIT_REEBE) //traits forbided for custom docking
var/view_range = 0
var/x_offset = 0
var/y_offset = 0
@@ -186,7 +187,7 @@
var/turf/eyeturf = get_turf(the_eye)
if(!eyeturf)
return SHUTTLE_DOCKER_BLOCKED
if(z_lock.len && !(eyeturf.z in z_lock))
if(!eyeturf.z || SSmapping.level_has_any_trait(eyeturf.z, locked_traits))
return SHUTTLE_DOCKER_BLOCKED
. = SHUTTLE_DOCKER_LANDING_CLEAR
@@ -224,9 +225,9 @@
if(hidden_turf_info)
. = SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT
if(space_turfs_only)
if(length(whitelist_turfs))
var/turf_type = hidden_turf_info ? hidden_turf_info[2] : T.type
if(!ispath(turf_type, /turf/open/space))
if(!is_type_in_typecache(turf_type, whitelist_turfs))
return SHUTTLE_DOCKER_BLOCKED
if(length(whitelist_turfs))
@@ -324,12 +325,25 @@
var/list/L = list()
for(var/V in SSshuttle.stationary)
if(!V)
stack_trace("SSshuttle.stationary have null entry!")
continue
var/obj/docking_port/stationary/S = V
if(console.z_lock.len && !(S.z in console.z_lock))
continue
if(console.jumpto_ports[S.id])
L[S.name] = S
L["([L.len])[S.name]"] = S
for(var/V in SSshuttle.beacons)
if(!V)
stack_trace("SSshuttle.beacons have null entry!")
continue
var/obj/machinery/spaceship_navigation_beacon/nav_beacon = V
if(!nav_beacon.z || SSmapping.level_has_any_trait(nav_beacon.z, console.locked_traits))
break
if(!nav_beacon.locked)
L["([L.len]) [nav_beacon.name] located: [nav_beacon.x] [nav_beacon.y] [nav_beacon.z]"] = nav_beacon
else
L["([L.len]) [nav_beacon.name] locked"] = null
playsound(console, 'sound/machines/terminal_prompt.ogg', 25, 0)
var/selected = input("Choose location to jump to", "Locations", null) as null|anything in L

View File

@@ -0,0 +1,63 @@
/obj/item/circuitboard/machine/spaceship_navigation_beacon
name = "Bluespace Navigation Gigabeacon (Machine Board)"
build_path = /obj/machinery/spaceship_navigation_beacon
req_components = list()
/obj/machinery/spaceship_navigation_beacon
name = "Bluespace Navigation Gigabeacon"
desc = "A device that creates a bluespace anchor that allow ships jump near to it."
icon = 'icons/obj/abductor.dmi'
icon_state = "core"
use_power = IDLE_POWER_USE
idle_power_usage = 0
density = TRUE
circuit = /obj/item/circuitboard/machine/spaceship_navigation_beacon
var/locked = FALSE //Locked beacons don't allow to jump to it.
/obj/machinery/spaceship_navigation_beacon/Initialize()
. = ..()
SSshuttle.beacons |= src
obj/machinery/spaceship_navigation_beacon/emp_act()
locked = TRUE
/obj/machinery/spaceship_navigation_beacon/Destroy()
SSshuttle.beacons -= src
return ..()
// update the icon_state
/obj/machinery/spaceship_navigation_beacon/update_icon()
if(powered())
icon_state = "core"
else
icon_state = "core-open"
/obj/machinery/spaceship_navigation_beacon/power_change()
. = ..()
update_icon()
/obj/machinery/spaceship_navigation_beacon/multitool_act(mob/living/user, obj/item/multitool/I)
if(panel_open)
var/new_name = "Beacon_[input("Enter the custom name for this beacon", "It be Beacon ..your input..") as text]"
if(new_name && Adjacent(user))
name = new_name
to_chat(user, "<span class='notice'>You change beacon name to [name].</span>")
else
locked =!locked
to_chat(user, "<span class='notice'>You [locked ? "" : "un"]lock [src].</span>")
return TRUE
/obj/machinery/spaceship_navigation_beacon/examine()
.=..()
. += "<span class='[locked ? "warning" : "nicegreen"]'>Status: [locked ? "LOCKED" : "Stable"] </span>"
/obj/machinery/spaceship_navigation_beacon/attackby(obj/item/W, mob/user, params)
if(default_deconstruction_screwdriver(user, "core-open", "core", W))
return
if(default_deconstruction_crowbar(W))
return
return ..()

View File

@@ -394,11 +394,10 @@
var/datum/wound/new_wound
if(replaced_wound)
new_wound = replaced_wound.replace_wound(possible_wound)
log_wound(owner, new_wound, damage, wound_bonus, bare_wound_bonus, base_roll) // dismembering wounds are logged in the apply_wound() for loss wounds since they delete themselves immediately, these will be immediately returned
else
new_wound = new possible_wound
new_wound.apply_wound(src)
log_wound(owner, new_wound, damage, wound_bonus, bare_wound_bonus, base_roll)
log_wound(owner, new_wound, damage, wound_bonus, bare_wound_bonus, base_roll) // dismembering wounds are logged in the apply_wound() for loss wounds since they delete themselves immediately, these will be immediately returned
return new_wound
// try forcing a specific wound, but only if there isn't already a wound of that severity or greater for that type on this bodypart

View File

@@ -544,7 +544,7 @@
/obj/item/clothing/glasses/sunglasses/gar/supergar = 1,
/obj/item/clothing/gloves/color/captain = 1)
refill_canister = /obj/item/vending_refill/wardrobe/cap_wardrobe
payment_department = ACCOUNT_CIV
payment_department = ACCOUNT_SEC
default_price = PRICE_ALMOST_EXPENSIVE
extra_price = PRICE_ABOVE_EXPENSIVE

View File

@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "adds unlockable loadout items, corresponding category in loadouts, etc"

View File

@@ -0,0 +1,4 @@
author: "shellspeed1"
delete-after: True
changes:
- tweak: "Xenomorph powers now list plasma cost in their description."

View File

@@ -0,0 +1,4 @@
author: "shellspeed1"
delete-after: True
changes:
- rscadd: "The bluespace navigation gigabeacon design has been added to shuttle research for those wanting to take their ships around space more."

View File

@@ -0,0 +1,4 @@
author: "BlueWildrose"
delete-after: True
changes:
- bugfix: "Polychromic hoodies that were obtained from the loadout have functional colorable hoods now."

View File

@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "anthromorphic synth species"

View File

@@ -0,0 +1,4 @@
author: "Chiirno"
delete-after: True
changes:
- rscadd: "Added the paramedics EVA suit as a purchase from the cargo console."

View File

@@ -0,0 +1,4 @@
author: "Chiirno"
delete-after: True
changes:
- bugfix: "Portable Chem Mixer now researchable from biotech node."

View File

@@ -0,0 +1,6 @@
author: "Hatterhat"
delete-after: True
changes:
- spellcheck: "Utility uniforms now comply with the \"nonproper equipment names\" thing."
- bugfix: "The CapDrobe now allows the captain to get his own clothes for free. Probably."
- tweak: "All captains' clothes now offer 15 woundarmor, up from the 5. Because apparently only the suit and tie and its suitskirt subtype have this wound armor, which is dumb."

View File

@@ -0,0 +1,4 @@
author: "DeltaFire15"
delete-after: True
changes:
- rscadd: "IPC cells & power cords are now printable after they are researched."

View File

@@ -0,0 +1,4 @@
author: "Ryll/Shaps"
delete-after: True
changes:
- admin: "Fixed an issue with player logs becoming confused when someone triggers multiple events within one second (like being attacked by two people at the same time) that would cause holes in the logs"

View File

@@ -0,0 +1,4 @@
author: "Chiirno"
delete-after: True
changes:
- tweak: "Chem masters can now dispense 20 instances of its outputs instead of 10."

View File

@@ -0,0 +1,11 @@
author: "necromanceranne"
delete-after: True
changes:
- rscadd: "Bokken now come in two lengths; full and wakizashi, and two varieties: wood and ironwood. They have different stats for all four."
- rscadd: "Bokken require menu crafting and part construction, as well as more complicated materials."
- tweak: "Bokken (long and short) require wood, cloth and leather to craft with a hatchet and screwdriver."
- tweak: "Ironwood bokken (long and short) require ironcap logs, cloth and leather to craft with a hatchet, screwdriver and welder."
- balance: "Twin sheathes can only fit a pair of blades (longsword + shortsword) or they can fit two shortswords."
- bugfix: "Fixed a twin sheath runtime."
- imageadd: "A lot of bokken related sprites received an overhaul. Added overlay sprites for weapons sheathed in the twin sheathes."
- imageadd: "The extradimensional blade received improved sprites for inhands/back sprites."

View File

@@ -0,0 +1,6 @@
author: "TripleShades"
delete-after: True
changes:
- rscadd: "New Paramedic Office next to Genetics where the old Genetics Reception used to be
change: Surgery, Surgery Observation, and Recovery Hall layout revamped drastically
change: Maints below Surgery lowered by one tile to recover lost tile space from Surgery expansion"

View File

@@ -0,0 +1,4 @@
author: "BlueWildrose"
delete-after: True
changes:
- tweak: "You can now have a max-roundstart-dicksize-config inch long johnson before you start suffering blood loss and slowdowns instead of a 20 inch one."

View File

@@ -0,0 +1,6 @@
author: "EmeraldSundisk"
delete-after: True
changes:
- rscadd: "Adds a new \"Computer Core\" area designation for CogStation"
- bugfix: "Fixes some missing area strings"
- tweak: "Replaces some firelocks with directional ones as to ensure desks/counters can still be accessed"

View File

@@ -0,0 +1,5 @@
author: "Chiirno"
delete-after: True
changes:
- tweak: "Nightmare now deals additional damage to most light sources."
- bugfix: "Nightmare now one-shots miners beacons and glowshrooms"

View File

@@ -0,0 +1,6 @@
author: "necromanceranne"
delete-after: True
changes:
- bugfix: "You can now make all the variants of the bokken."
- bugfix: "Removes a duplicate sprite."
- tweak: "Renames all instances of 'ironwood' to 'steelwood'."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,30 @@
/datum/gear/unlockable
category = LOADOUT_CATEGORY_UNLOCKABLE
slot = SLOT_NECK
var/progress_required //what does our progress need to be to unlock it
var/progress_key //what is the key used to retrieve existing progress for this unlockable
/datum/gear/unlockable/janitor
name = "Janitor Bedsheet"
description = "Clean 100 messes with a mop to unlock this. It has a warning sign on!"
path = /obj/item/bedsheet/unlockable/janitor
progress_required = 100
progress_key = "janitor"
/datum/gear/unlockable/cook
name = "Cook Bedsheet"
description = "Cook 250 items using the microwave to unlock this. It has a microwave on!"
path = /obj/item/bedsheet/unlockable/cook
progress_required = 250
progress_key = "cook"
/datum/gear/unlockable/miner
name = "Miner Bedsheet"
description = "Redeem a total of 100,000 miner points to unlock this. It's made out of goliath hide!"
path = /obj/item/bedsheet/unlockable/miner
progress_required = 100000
progress_key = "miner"

View File

@@ -232,7 +232,8 @@
P.Insert(H)
P.modify_size(0.1)
if (ISINRANGE_EX(P.length, 20.5, 21) && (H.w_uniform || H.wear_suit))
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
if (ISINRANGE_EX(P.length, max_D + 0.5, max_D + 1) && (H.w_uniform || H.wear_suit))
var/target = H.get_bodypart(BODY_ZONE_CHEST)
if(!message_spam)
to_chat(H, "<span class='danger'>Your cock begin to strain against your clothes tightly!</b></span>")

View File

@@ -3343,6 +3343,7 @@
#include "code\modules\shuttle\shuttle.dm"
#include "code\modules\shuttle\shuttle_rotate.dm"
#include "code\modules\shuttle\snaxi.dm"
#include "code\modules\shuttle\spaceship_navigation_beacon.dm"
#include "code\modules\shuttle\special.dm"
#include "code\modules\shuttle\supply.dm"
#include "code\modules\shuttle\syndicate.dm"
@@ -3609,6 +3610,7 @@
#include "modular_citadel\code\modules\client\loadout\shoes.dm"
#include "modular_citadel\code\modules\client\loadout\suit.dm"
#include "modular_citadel\code\modules\client\loadout\uniform.dm"
#include "modular_citadel\code\modules\client\loadout\unlockable.dm"
#include "modular_citadel\code\modules\client\verbs\who.dm"
#include "modular_citadel\code\modules\clothing\neck.dm"
#include "modular_citadel\code\modules\clothing\trek.dm"

View File

@@ -205,7 +205,7 @@ const PackagingControlsItem = props => {
stepPixelSize={15}
value={amount}
minValue={1}
maxValue={10}
maxValue={20}
onChange={onChangeAmount} />
<Button
ml={1}

File diff suppressed because one or more lines are too long