@@ -1001,6 +1001,20 @@
|
||||
/obj/item/clothing/glasses/heat,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/awaymission/beach)
|
||||
"np" = (
|
||||
/obj/machinery/shower{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/sand,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/awaymission/beach)
|
||||
"Vi" = (
|
||||
/obj/machinery/shower{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/sand,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/awaymission/beach)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -7892,10 +7906,10 @@ ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
Vi
|
||||
Vi
|
||||
Vi
|
||||
Vi
|
||||
ak
|
||||
ba
|
||||
ba
|
||||
@@ -8213,10 +8227,10 @@ ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
ak
|
||||
np
|
||||
np
|
||||
np
|
||||
np
|
||||
ak
|
||||
ba
|
||||
ba
|
||||
|
||||
@@ -40675,6 +40675,7 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/space_heater,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg3"
|
||||
},
|
||||
@@ -45447,15 +45448,15 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engineering/main)
|
||||
"bYS" = (
|
||||
@@ -45468,15 +45469,15 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engineering/main)
|
||||
"bYT" = (
|
||||
@@ -45492,15 +45493,15 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
@@ -45520,15 +45521,15 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engineering/main)
|
||||
"bYV" = (
|
||||
@@ -45539,6 +45540,12 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
@@ -45551,15 +45558,15 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -45578,15 +45585,15 @@
|
||||
/obj/machinery/firealarm{
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engineering/main)
|
||||
"bYY" = (
|
||||
@@ -47272,6 +47279,10 @@
|
||||
dir = 4;
|
||||
light_color = "#e8eaff"
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
dir = 8;
|
||||
pixel_x = 22
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engineering/main)
|
||||
"cfk" = (
|
||||
@@ -53466,10 +53477,6 @@
|
||||
},
|
||||
/area/maintenance/department/engine)
|
||||
"dEy" = (
|
||||
/obj/machinery/airalarm{
|
||||
dir = 1;
|
||||
pixel_y = -22
|
||||
},
|
||||
/obj/structure/reflector/double/anchored{
|
||||
dir = 9
|
||||
},
|
||||
@@ -55355,6 +55362,10 @@
|
||||
/obj/machinery/power/rad_collector/anchored,
|
||||
/turf/open/floor/engine,
|
||||
/area/engineering/supermatter)
|
||||
"hKX" = (
|
||||
/obj/machinery/space_heater,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/security/brig)
|
||||
"hMx" = (
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
|
||||
/turf/open/floor/plating{
|
||||
@@ -60884,6 +60895,10 @@
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/explab)
|
||||
"tCJ" = (
|
||||
/obj/machinery/space_heater,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/crew_quarters/bar)
|
||||
"tCP" = (
|
||||
/obj/docking_port/stationary/public_mining_dock,
|
||||
/turf/open/floor/plating,
|
||||
@@ -80222,7 +80237,7 @@ aiu
|
||||
xuv
|
||||
aoe
|
||||
ajD
|
||||
ajD
|
||||
hKX
|
||||
aiu
|
||||
apB
|
||||
aiu
|
||||
@@ -91030,7 +91045,7 @@ aKT
|
||||
aLH
|
||||
aNf
|
||||
aKT
|
||||
aLL
|
||||
tCJ
|
||||
aQO
|
||||
aRO
|
||||
aSH
|
||||
@@ -99781,7 +99796,7 @@ aPY
|
||||
bau
|
||||
aLf
|
||||
aFi
|
||||
aFi
|
||||
aMA
|
||||
beI
|
||||
beI
|
||||
bgD
|
||||
@@ -107236,7 +107251,7 @@ aaa
|
||||
aEl
|
||||
aTx
|
||||
aFi
|
||||
aFi
|
||||
aMA
|
||||
aEj
|
||||
bhz
|
||||
lEn
|
||||
|
||||
@@ -268,6 +268,15 @@
|
||||
#define GAS_FLAG_DANGEROUS (1<<0)
|
||||
#define GAS_FLAG_BREATH_PROC (1<<1)
|
||||
|
||||
//SUPERMATTER DEFINES
|
||||
#define HEAT_PENALTY "heat penalties"
|
||||
#define TRANSMIT_MODIFIER "transmit"
|
||||
#define RADIOACTIVITY_MODIFIER "radioactivity"
|
||||
#define HEAT_RESISTANCE "heat resistance"
|
||||
#define POWERLOSS_INHIBITION "powerloss inhibition"
|
||||
#define ALL_SUPERMATTER_GASES "gases we care about"
|
||||
#define POWER_MIX "gas powermix"
|
||||
|
||||
//HELPERS
|
||||
#define PIPING_LAYER_SHIFT(T, PipingLayer) \
|
||||
if(T.dir & (NORTH|SOUTH)) { \
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
#define LOADOUT_CATEGORY_UNLOCKABLE "Unlockable"
|
||||
|
||||
//how many prosthetics can we have
|
||||
#define MAXIMUM_LOADOUT_PROSTHETICS 2
|
||||
#define MAXIMUM_LOADOUT_PROSTHETICS 4
|
||||
|
||||
//what limbs can be amputated or be prosthetic
|
||||
#define LOADOUT_ALLOWED_LIMB_TARGETS list(BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//This file is for glass working types of things!
|
||||
|
||||
/obj/item/glasswork
|
||||
name = "This is a bug report it!"
|
||||
desc = "Failer to code. Contact your local bug remover..."
|
||||
name = "this is a bug!"
|
||||
desc = "Uh oh, the coders did a fucky wucky! Contact your local code monkey and tell them about this!"
|
||||
icon = 'icons/obj/glassworks.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 1
|
||||
@@ -11,45 +11,45 @@
|
||||
tool_behaviour = null
|
||||
|
||||
/obj/item/glasswork/glasskit
|
||||
name = "Glass working tools"
|
||||
desc = "A lovely belt of most the tools you will need to shape, mold, and refine glass into more advanced shapes."
|
||||
name = "glasswork tools"
|
||||
desc = "A set of most the tools you will need to shape, mold, and refine glass into more advanced shapes."
|
||||
icon_state = "glass_tools"
|
||||
tool_behaviour = TOOL_GLASS_CUT //Cutting takes 20 ticks
|
||||
|
||||
/obj/item/glasswork/blowing_rod
|
||||
name = "Glass working blow rod"
|
||||
desc = "A hollow metal stick made for glass blowing."
|
||||
name = "glassblowing rod"
|
||||
desc = "A hollow metal rod made for blowing glass."
|
||||
icon_state = "blowing_rods_unused"
|
||||
tool_behaviour = TOOL_BLOW //Rods take 5 ticks
|
||||
|
||||
/obj/item/glasswork/glass_base //Welding takes 30 ticks
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A sheet of glass set aside for glass working"
|
||||
name = "glass fodder sheet"
|
||||
desc = "A sheet of glass set aside for glass working."
|
||||
icon_state = "glass_base"
|
||||
var/next_step = null
|
||||
var/rod = /obj/item/glasswork/blowing_rod
|
||||
|
||||
/obj/item/tea_plate
|
||||
name = "Tea Plate"
|
||||
name = "tea saucer"
|
||||
desc = "A polished plate for a tea cup. How fancy!"
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "tea_plate"
|
||||
|
||||
/obj/item/tea_cup
|
||||
name = "Tea Cup"
|
||||
desc = "A glass cup made for fake tea!"
|
||||
name = "tea cup"
|
||||
desc = "A glass cup made for sipping tea!"
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "tea_plate"
|
||||
|
||||
//////////////////////Chem Disk/////////////////////
|
||||
//Two Steps //
|
||||
//Sells for 300 cr, takes 10 glass shets //
|
||||
//Usefull for chem spliting //
|
||||
//Useful for chem spliting //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/dish
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass dish. Needs to be cut with some tools."
|
||||
name = "glass fodder sheet (dish)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a small glass dish. It needs to be cut with some glassworking tools."
|
||||
next_step = /obj/item/glasswork/glass_base/dish_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/dish/attackby(obj/item/I, mob/user, params)
|
||||
@@ -60,8 +60,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/dish_part1
|
||||
name = "Half chem dish sheet"
|
||||
desc = "A sheet of glass cut in half, looks like it still needs some more cutting down"
|
||||
name = "half glass fodder sheet (dish)"
|
||||
desc = "A sheet of glass cut in half. It looks like it still needs some more cutting down."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/glass_dish
|
||||
|
||||
@@ -75,12 +75,12 @@
|
||||
//////////////////////Lens//////////////////////////
|
||||
//Six Steps //
|
||||
//Sells for 1600 cr, takes 15 glass shets //
|
||||
//Usefull for selling and later crafting //
|
||||
//Useful for selling and later crafting //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass lens. Needs to be cut with some tools."
|
||||
name = "glass fodder sheet (lens)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a glass lens. It needs to be cut with some glassworking tools."
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens/attackby(obj/item/I, mob/user, params)
|
||||
@@ -91,8 +91,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part1
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass ready to be heated. Needs to be heated with some tools."
|
||||
name = "half glass fodder sheet (lens)"
|
||||
desc = "Cut glass ready to be heated with something very hot."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part2
|
||||
|
||||
@@ -104,8 +104,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part2
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated. Needs to be heated more with some tools."
|
||||
name = "heated half glass fodder sheet (lens)"
|
||||
desc = "Cut glass that has been heated once already and is ready to be heated again."
|
||||
icon_state = "glass_base_heat"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part3
|
||||
|
||||
@@ -117,8 +117,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part3
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube."
|
||||
name = "heated glass blob (lens)"
|
||||
desc = "Cut glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part4
|
||||
|
||||
@@ -131,8 +131,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part4
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube."
|
||||
name = "glassblowing rod (lens)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part5
|
||||
|
||||
@@ -145,8 +145,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part5
|
||||
name = "Unpolished glass lens"
|
||||
desc = "A small unpolished glass lens. Could be polished with some cloth."
|
||||
name = "unpolished glass lens"
|
||||
desc = "An unpolished glass lens. It needs to be polished with some dry cloth."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "glass_optics"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part6
|
||||
@@ -159,8 +159,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part6
|
||||
name = "Unrefined glass lens"
|
||||
desc = "A small polished glass lens. Just needs to be refined with some sandstone."
|
||||
name = "unrefined glass lens"
|
||||
desc = "A polished glass lens. It needs to be refined with some sandstone."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "glass_optics"
|
||||
next_step = /obj/item/glasswork/glass_base/lens
|
||||
@@ -174,12 +174,12 @@
|
||||
//////////////////////Spouty Flask//////////////////
|
||||
//Four Steps //
|
||||
//Sells for 1200 cr, takes 20 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a spout beaker. Needs to be cut with some tools."
|
||||
name = "Glass fodder sheet (spout)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a spouty flask. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/spouty_part2
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty/attackby(obj/item/I, mob/user, params)
|
||||
@@ -190,8 +190,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty_part2
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated. Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (spout)"
|
||||
desc = "Cut glass ready to be heated with something very hot."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/glasswork/glass_base/spouty_part3
|
||||
|
||||
@@ -203,8 +203,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty_part3
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube."
|
||||
name = "heated glass blob (spout)"
|
||||
desc = "Cut glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/spouty_part4
|
||||
|
||||
@@ -217,8 +217,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty_part4
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube."
|
||||
name = "glassblowing rod (spout)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/flask/spouty
|
||||
|
||||
@@ -233,12 +233,12 @@
|
||||
//////////////////////Small Bulb Flask//////////////
|
||||
//Two Steps //
|
||||
//Sells for 600 cr, takes 5 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a small flask. Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (small flask)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a small flask. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/flask_small_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small/attackby(obj/item/I, mob/user, params)
|
||||
@@ -249,8 +249,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small_part1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a small flask. Needs to be blown with some tools."
|
||||
name = "heated glass blob (small flask)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/flask_small_part2
|
||||
|
||||
@@ -263,8 +263,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small_part2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (small flask)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/flask
|
||||
|
||||
@@ -279,12 +279,12 @@
|
||||
//////////////////////Large Bulb Flask//////////////
|
||||
//Two Steps //
|
||||
//Sells for 1000 cr, takes 15 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a large flask. Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (large flask)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a large flask. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/flask_large_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large/attackby(obj/item/I, mob/user, params)
|
||||
@@ -295,8 +295,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large_part1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a large flask. Needs to be blown with some tools."
|
||||
name = "heated glass blob (large flask)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/flask_large_part2
|
||||
|
||||
@@ -309,8 +309,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large_part2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (small flask)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/flask/large
|
||||
|
||||
@@ -325,12 +325,12 @@
|
||||
//////////////////////Tea Plates////////////////////
|
||||
//Three Steps //
|
||||
//Sells for 1000 cr, takes 5 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea plate, how fancy! Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (tea saucer)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a tea saucer. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/tea_plate1
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate/attackby(obj/item/I, mob/user, params)
|
||||
@@ -341,8 +341,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a tea plate. Needs to be blown with some tools."
|
||||
name = "heated glass blob (tea saucer)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_plate2
|
||||
|
||||
@@ -355,8 +355,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (tea saucer)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_plate3
|
||||
|
||||
@@ -369,8 +369,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate3
|
||||
name = "Disk of glass"
|
||||
desc = "A disk of glass that can be cant be used for much. Needs to be polished with some cloth."
|
||||
name = "unpolished glass saucer (tea saucer)"
|
||||
desc = "An unpolished glass saucer. It needs to be polished with some dry cloth."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/tea_plate
|
||||
|
||||
@@ -384,12 +384,12 @@
|
||||
//////////////////////Tea Cup///////////////////////
|
||||
//Four Steps //
|
||||
//Sells for 1600 cr, takes 6 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea cup, how fancy! Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (tea cup)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a tea cup. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup1
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup/attackby(obj/item/I, mob/user, params)
|
||||
@@ -400,8 +400,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a tea cup. Needs to be blown with some tools."
|
||||
name = "heated glass blob (tea cup)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup2
|
||||
|
||||
@@ -414,8 +414,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cupe2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (tea cup)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup3
|
||||
|
||||
@@ -428,8 +428,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup3
|
||||
name = "Disk of glass"
|
||||
desc = "A bowl of glass that can be cant be used for much. Needs to be polished with some cloth."
|
||||
name = "unpolished glass cup (tea cup)"
|
||||
desc = "An unpolished glass cup. It needs to be polished with some dry cloth."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup4
|
||||
|
||||
@@ -441,8 +441,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup4
|
||||
name = "Disk of glass"
|
||||
desc = "A bowl of polished glass that can be cant be used for much. Needs some more glass to make a handle."
|
||||
name = "polished glass cup (tea cup)"
|
||||
desc = "A polished glass cup. It needs some extra glass to form a handle."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/tea_cup
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
//This file is for crafting using a lens!
|
||||
|
||||
/obj/item/glasswork/glass_base/lens
|
||||
name = "Optical lens"
|
||||
desc = "Good for selling or crafting, by itself its useless"
|
||||
name = "optical lens"
|
||||
desc = "A glass lens. Useless by itself, but may prove useful in making something with a focus."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "glass_optics"
|
||||
|
||||
//Laser pointers - 2600
|
||||
/obj/item/glasswork/glass_base/laserpointer_shell
|
||||
name = "Laser pointer assembly"
|
||||
desc = "Good for selling or crafting, by itself its useless. Needs a power capactor."
|
||||
name = "laser pointer assembly"
|
||||
desc = "An empty hull of a laser pointer. It's missing a capacitor."
|
||||
icon_state = "laser_case"
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
next_step = /obj/item/glasswork/glass_base/laserpointer_shell_1
|
||||
@@ -21,8 +21,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/laserpointer_shell_1
|
||||
name = "Laser pointer assembly"
|
||||
desc = "Good for selling or crafting, by itself its useless. Needs a glass lens."
|
||||
name = "powered laser pointer assembly"
|
||||
desc = "A laser pointer hull with a capacitor inside of it. It's missing a lens."
|
||||
icon_state = "laser_wire"
|
||||
icon_state = "laser_case"
|
||||
next_step = /obj/item/glasswork/glass_base/laserpointer_shell_2
|
||||
@@ -34,8 +34,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/laserpointer_shell_2
|
||||
name = "Laser pointer assembly"
|
||||
desc = "Good for selling or crafting, by itself its useless. Needs to be screwed together."
|
||||
name = "near-complete laser pointer assembly"
|
||||
desc = "A laser pointer hull with a capacitor and a lens inside of it. It needs to be screwed together."
|
||||
icon_state = "laser_wire"
|
||||
icon_state = "laser_case"
|
||||
next_step = /obj/item/laser_pointer/blue/handmade
|
||||
@@ -50,8 +50,8 @@
|
||||
//NERD SHIT - 5000
|
||||
|
||||
/obj/item/glasswork/glass_base/glasses_frame
|
||||
name = "Glasses Frame"
|
||||
desc = "Good for crafting a pare of glasses, by itself its useless. Just add a pare of lens."
|
||||
name = "glasses frame"
|
||||
desc = "A pair of glasses without the lenses. You could probably add them yourself, though."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames"
|
||||
next_step = /obj/item/glasswork/glass_base/glasses_frame_1
|
||||
@@ -64,8 +64,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glasses_frame_1
|
||||
name = "Glasses Frame"
|
||||
desc = "Good for crafting a pare of glasses, by itself its useless. Just add a the other lens."
|
||||
name = "glasses frame"
|
||||
desc = "A pair of shoddily-assembled glasses with only one lens. You could probably add the second one yourself, though."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_1"
|
||||
next_step = /obj/item/glasswork/glass_base/glasses_frame_2
|
||||
@@ -78,8 +78,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glasses_frame_2
|
||||
name = "Glasses Frame"
|
||||
desc = "Good for crafting a pare of glasses, by itself its useless. Just adjust the pices into the frame with a screwdriver."
|
||||
name = "glasses frame"
|
||||
desc = "A pair of hastily-assembled unfitted glasses with both lenses intact. Use a screwdriver to fit them."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_2"
|
||||
next_step = /obj/item/glasswork/glasses
|
||||
@@ -92,7 +92,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glasses
|
||||
name = "Handmade Glasses"
|
||||
desc = "Handmade glasses that have not been polished at all making them useless. Selling them could still be worth a few credits."
|
||||
name = "handmade glasses"
|
||||
desc = "A pair of poorly-assembled glasses clearly produced by someone with no qualifications in making glasses. They're smudged, ugly, and don't even fit you. They might be worth some money, though."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_2"
|
||||
|
||||
@@ -47,7 +47,7 @@ Bonus
|
||||
M.adjustOxyLoss(-7, 0)
|
||||
M.losebreath = max(0, M.losebreath - 4)
|
||||
if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio))
|
||||
M.blood_volume += 1
|
||||
M.adjust_integration_blood(1)
|
||||
else
|
||||
if(prob(base_message_chance))
|
||||
to_chat(M, "<span class='notice'>[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]</span>")
|
||||
|
||||
@@ -426,18 +426,21 @@ GENETICS SCANNER
|
||||
if(ishuman(C))
|
||||
if(H.is_bleeding())
|
||||
msg += "<span class='danger'>Subject is bleeding!</span>\n"
|
||||
var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/integrated_blood_percent = round((C.integrating_blood / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/blood_type = C.dna.blood_type
|
||||
if(!(blood_typepath in GLOB.blood_reagent_types))
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_typepath]
|
||||
if(R)
|
||||
blood_type = R.name
|
||||
if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl,</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl,</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
|
||||
if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_SAFE * C.blood_ratio) && (C.scan_blood_volume() + C.integrating_blood) > (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""].</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_OKAY * C.blood_ratio))
|
||||
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""].</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else
|
||||
msg += "<span class='info'>Blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]</span>\n"
|
||||
msg += "<span class='info'>Blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]</span>\n"
|
||||
|
||||
|
||||
var/cyberimp_detect
|
||||
for(var/obj/item/organ/cyberimp/CI in C.internal_organs)
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
owner.Stun(15)
|
||||
owner.adjustToxLoss(-15, TRUE, TRUE)
|
||||
|
||||
owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)
|
||||
owner.adjust_integration_blood(20)
|
||||
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
keep_going = TRUE
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
owner.current.adjustStaminaLoss(-1.5 + (actual_regen * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
|
||||
owner.current.adjustCloneLoss(-0.1 * (actual_regen * 2) * mult, 0)
|
||||
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (actual_regen * 4) * mult)
|
||||
owner.current.integrating_blood = 0
|
||||
// No Bleeding
|
||||
/*if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
|
||||
@@ -297,8 +297,14 @@
|
||||
prof.socks = H.socks
|
||||
prof.socks_color = H.socks_color
|
||||
|
||||
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
|
||||
for(var/slot in slots)
|
||||
var/datum/icon_snapshot/entry = new
|
||||
entry.name = H.name
|
||||
entry.icon = H.icon
|
||||
entry.icon_state = H.icon_state
|
||||
entry.overlays = H.get_overlays_copy(list(HANDS_LAYER, HANDCUFF_LAYER, LEGCUFF_LAYER))
|
||||
prof.profile_snapshot = entry
|
||||
|
||||
for(var/slot in GLOB.slots)
|
||||
if(slot in H.vars)
|
||||
var/obj/item/I = H.vars[slot]
|
||||
if(!I)
|
||||
@@ -518,6 +524,9 @@
|
||||
var/socks
|
||||
var/socks_color
|
||||
|
||||
/// Icon snapshot of the profile
|
||||
var/datum/icon_snapshot/profile_snapshot
|
||||
|
||||
/datum/changelingprofile/Destroy()
|
||||
qdel(dna)
|
||||
. = ..()
|
||||
@@ -535,13 +544,14 @@
|
||||
newprofile.underwear = underwear
|
||||
newprofile.undershirt = undershirt
|
||||
newprofile.socks = socks
|
||||
|
||||
newprofile.profile_snapshot = profile_snapshot
|
||||
|
||||
/datum/antagonist/changeling/xenobio
|
||||
name = "Xenobio Changeling"
|
||||
give_objectives = FALSE
|
||||
show_in_roundend = FALSE //These are here for admin tracking purposes only
|
||||
you_are_greet = FALSE
|
||||
antag_moodlet = FALSE
|
||||
|
||||
/datum/antagonist/changeling/roundend_report()
|
||||
var/list/parts = list()
|
||||
|
||||
@@ -10,15 +10,8 @@
|
||||
//Transform into a human.
|
||||
/obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
var/list/names = list()
|
||||
for(var/datum/changelingprofile/prof in changeling.stored_profiles)
|
||||
names += "[prof.name]"
|
||||
|
||||
var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names
|
||||
if(!chosen_name)
|
||||
return
|
||||
|
||||
var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name)
|
||||
var/datum/changelingprofile/chosen_prof = changeling.select_dna()
|
||||
if(!chosen_prof)
|
||||
return
|
||||
if(!user || user.mob_transforming)
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
if(changeling.chosen_sting)
|
||||
unset_sting(user)
|
||||
return
|
||||
selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA")
|
||||
selected_dna = changeling.select_dna()
|
||||
if(!selected_dna)
|
||||
return
|
||||
if(NOTRANSSTING in selected_dna.dna.species.species_traits)
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
//Change our DNA to that of somebody we've absorbed.
|
||||
/obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA")
|
||||
var/datum/changelingprofile/chosen_prof = changeling.select_dna()
|
||||
|
||||
if(!chosen_prof)
|
||||
return
|
||||
@@ -142,15 +142,21 @@
|
||||
changeling_transform(user, chosen_prof)
|
||||
return TRUE
|
||||
|
||||
/datum/antagonist/changeling/proc/select_dna(var/prompt, var/title)
|
||||
/**
|
||||
* Gives a changeling a list of all possible dnas in their profiles to choose from and returns profile containing their chosen dna
|
||||
*/
|
||||
/datum/antagonist/changeling/proc/select_dna()
|
||||
var/mob/living/carbon/user = owner.current
|
||||
if(!istype(user))
|
||||
return
|
||||
var/list/names = list("Drop Flesh Disguise")
|
||||
for(var/datum/changelingprofile/prof in stored_profiles)
|
||||
names += "[prof.name]"
|
||||
var/list/disguises = list("Drop Flesh Disguise" = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_drop"))
|
||||
for(var/datum/changelingprofile/current_profile in stored_profiles)
|
||||
var/datum/icon_snapshot/snap = current_profile.profile_snapshot
|
||||
var/image/disguise_image = image(icon = snap.icon, icon_state = snap.icon_state)
|
||||
disguise_image.overlays = snap.overlays
|
||||
disguises[current_profile.name] = disguise_image
|
||||
|
||||
var/chosen_name = input(prompt, title, null) as null|anything in names
|
||||
var/chosen_name = show_radial_menu(user, user, disguises, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 40, require_near = TRUE, tooltips = TRUE)
|
||||
if(!chosen_name)
|
||||
return
|
||||
|
||||
@@ -158,6 +164,21 @@
|
||||
for(var/slot in GLOB.slots)
|
||||
if(istype(user.vars[slot], GLOB.slot2type[slot]))
|
||||
qdel(user.vars[slot])
|
||||
return
|
||||
|
||||
var/datum/changelingprofile/prof = get_dna(chosen_name)
|
||||
return prof
|
||||
|
||||
/**
|
||||
* Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The carbon mob interacting with the menu
|
||||
*/
|
||||
/datum/antagonist/changeling/proc/check_menu(mob/living/carbon/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
var/datum/antagonist/changeling/changeling_datum = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(!changeling_datum)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -687,10 +687,10 @@
|
||||
if(H.stat == DEAD)
|
||||
to_chat(user,"<span class='warning'>Only a revive rune can bring back the dead!</span>")
|
||||
return
|
||||
if(H.blood_volume < (BLOOD_VOLUME_SAFE*H.blood_ratio))
|
||||
if(H.functional_blood() < (BLOOD_VOLUME_SAFE*H.blood_ratio))
|
||||
var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume
|
||||
if(uses*2 < restore_blood)
|
||||
H.blood_volume += uses*2
|
||||
if(uses * 2 < restore_blood)
|
||||
H.adjust_integration_blood(uses * 2)
|
||||
to_chat(user,"<span class='danger'>You use the last of your blood rites to restore what blood you could!</span>")
|
||||
uses = 0
|
||||
return ..()
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
if(M.health < M.maxHealth)
|
||||
M.adjustHealth(-3)
|
||||
if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio))
|
||||
L.blood_volume += 1.0
|
||||
L.adjust_integration_blood(1.0)
|
||||
CHECK_TICK
|
||||
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
|
||||
carbon_target.blood_volume -= 20
|
||||
if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all
|
||||
carbon_user.blood_volume += 20
|
||||
carbon_user.adjust_integration_blood(20)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent)
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
if(do_update)
|
||||
update()
|
||||
|
||||
/obj/item/organ/genital/Destroy()
|
||||
if(linked_organ?.linked_organ == src)
|
||||
linked_organ.linked_organ = null
|
||||
linked_organ = null
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/genital/proc/set_aroused_state(new_state,cause = "manual toggle")
|
||||
if(!(genital_flags & GENITAL_CAN_AROUSE))
|
||||
return FALSE
|
||||
|
||||
@@ -3,10 +3,16 @@
|
||||
specific_heat = 20
|
||||
name = "Oxygen"
|
||||
oxidation_temperature = T0C - 100 // it checks max of this and fire temperature, so rarely will things spontaneously combust
|
||||
powermix = 1
|
||||
heat_penalty = 1
|
||||
transmit_modifier = 1.5
|
||||
|
||||
/datum/gas/nitrogen
|
||||
id = GAS_N2
|
||||
specific_heat = 20
|
||||
name = "Nitrogen"
|
||||
powermix = -1
|
||||
heat_penalty = -1.5
|
||||
breath_alert_info = list(
|
||||
not_enough_alert = list(
|
||||
alert_category = "not_enough_nitro",
|
||||
@@ -17,12 +23,14 @@
|
||||
alert_type = /atom/movable/screen/alert/too_much_nitro
|
||||
)
|
||||
)
|
||||
name = "Nitrogen"
|
||||
|
||||
/datum/gas/carbon_dioxide //what the fuck is this?
|
||||
id = GAS_CO2
|
||||
specific_heat = 30
|
||||
name = "Carbon Dioxide"
|
||||
powermix = 1
|
||||
heat_penalty = 0.1
|
||||
powerloss_inhibition = 1
|
||||
breath_results = GAS_O2
|
||||
breath_alert_info = list(
|
||||
not_enough_alert = list(
|
||||
@@ -43,6 +51,9 @@
|
||||
gas_overlay = "plasma"
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
flags = GAS_FLAG_DANGEROUS
|
||||
heat_penalty = 15
|
||||
transmit_modifier = 4
|
||||
powermix = 1
|
||||
// no fire info cause it has its own bespoke reaction for trit generation reasons
|
||||
|
||||
/datum/gas/water_vapor
|
||||
@@ -52,6 +63,8 @@
|
||||
gas_overlay = "water_vapor"
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
fusion_power = 8
|
||||
heat_penalty = 8
|
||||
powermix = 1
|
||||
breath_reagent = /datum/reagent/water
|
||||
|
||||
/datum/gas/hypernoblium
|
||||
@@ -71,6 +84,7 @@
|
||||
fire_products = list(GAS_N2 = 1)
|
||||
oxidation_rate = 0.5
|
||||
oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100
|
||||
heat_resistance = 6
|
||||
|
||||
/datum/gas/nitryl
|
||||
id = GAS_NITRYL
|
||||
@@ -91,6 +105,9 @@
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
flags = GAS_FLAG_DANGEROUS
|
||||
fusion_power = 1
|
||||
powermix = 1
|
||||
heat_penalty = 10
|
||||
transmit_modifier = 30
|
||||
/*
|
||||
these are for when we add hydrogen, trit gets to keep its hardcoded fire for legacy reasons
|
||||
fire_provides = list(GAS_H2O = 2)
|
||||
@@ -105,6 +122,10 @@
|
||||
name = "BZ"
|
||||
flags = GAS_FLAG_DANGEROUS
|
||||
fusion_power = 8
|
||||
powermix = 1
|
||||
heat_penalty = 5
|
||||
transmit_modifier = -2
|
||||
radioactivity_modifier = 5
|
||||
|
||||
/datum/gas/stimulum
|
||||
id = GAS_STIMULUM
|
||||
@@ -119,6 +140,10 @@
|
||||
fusion_power = 10
|
||||
oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 1000 // it is VERY stable
|
||||
oxidation_rate = 8
|
||||
powermix = -1
|
||||
heat_penalty = -1
|
||||
transmit_modifier = -5
|
||||
heat_resistance = 3
|
||||
|
||||
/datum/gas/miasma
|
||||
id = GAS_MIASMA
|
||||
|
||||
@@ -35,6 +35,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
|
||||
var/list/fire_enthalpies = list()
|
||||
var/list/fire_products = list()
|
||||
var/list/fire_burn_rates = list()
|
||||
var/list/supermatter = list()
|
||||
|
||||
|
||||
/datum/gas
|
||||
@@ -55,6 +56,12 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
|
||||
var/list/fire_products = null // what results when this gas is burned (oxidizer or fuel); null for none
|
||||
var/fire_energy_released = 0 // how much energy is released per mole of fuel burned
|
||||
var/fire_burn_rate = 1 // how many moles are burned per product released
|
||||
var/powermix = 0 // how much this gas contributes to the supermatter's powermix ratio
|
||||
var/heat_penalty = 0 // heat and waste penalty from having the supermatter crystal surrounded by this gas; negative numbers reduce
|
||||
var/transmit_modifier = 0 // bonus to supermatter power generation (multiplicative, since it's % based, and divided by 10)
|
||||
var/radioactivity_modifier = 0 // improves effect of transmit modifiers, must be from -10 to 10
|
||||
var/heat_resistance = 0 // makes the crystal more resistant against heat damage.
|
||||
var/powerloss_inhibition = 0 // Reduces how much power the supermatter loses each tick
|
||||
|
||||
/datum/gas/proc/breath(partial_pressure, light_threshold, heavy_threshold, moles, mob/living/carbon/C, obj/item/organ/lungs/lungs)
|
||||
// This is only called on gases with the GAS_FLAG_BREATH_PROC flag. When possible, do NOT use this--
|
||||
@@ -100,12 +107,20 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
|
||||
if(gas.fire_products)
|
||||
fire_products[g] = gas.fire_products
|
||||
fire_enthalpies[g] = gas.fire_energy_released
|
||||
|
||||
add_supermatter_properties(gas)
|
||||
_auxtools_register_gas(gas)
|
||||
|
||||
/proc/finalize_gas_refs()
|
||||
|
||||
/datum/auxgm/New()
|
||||
src.supermatter[HEAT_PENALTY] = list()
|
||||
src.supermatter[TRANSMIT_MODIFIER] = list()
|
||||
src.supermatter[RADIOACTIVITY_MODIFIER] = list()
|
||||
src.supermatter[HEAT_RESISTANCE] = list()
|
||||
src.supermatter[POWERLOSS_INHIBITION] = list()
|
||||
src.supermatter[POWER_MIX] = list()
|
||||
src.supermatter[ALL_SUPERMATTER_GASES] = list()
|
||||
|
||||
for(var/gas_path in subtypesof(/datum/gas))
|
||||
var/datum/gas/gas = new gas_path
|
||||
add_gas(gas)
|
||||
|
||||
@@ -172,15 +172,13 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
|
||||
/// bumper object, the thing that starts actual teleport
|
||||
var/obj/effect/gateway_portal_bumper/portal
|
||||
/// Visual object for handling the viscontents
|
||||
/// DISABLED DUE TO BYOND BUG CAUSING STACK OVERFLOWS OF ANY HUMAN INSTANTIATION NEAR AN ACTIVATED GATEWAY.
|
||||
/// Probably due to it referencing each other through the gateway (there's a deep loop, maybe BYOND isn't catching something when it usually would)
|
||||
// var/obj/effect/gateway_portal_effect/portal_visuals
|
||||
var/obj/effect/gateway_portal_effect/portal_visuals
|
||||
|
||||
/obj/machinery/gateway/Initialize()
|
||||
generate_destination()
|
||||
update_icon()
|
||||
// portal_visuals = new
|
||||
// vis_contents += portal_visuals
|
||||
portal_visuals = new
|
||||
vis_contents += portal_visuals
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gateway/proc/generate_destination()
|
||||
@@ -197,7 +195,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
|
||||
if(use_power == ACTIVE_POWER_USE)
|
||||
use_power = IDLE_POWER_USE
|
||||
update_icon()
|
||||
// portal_visuals.reset_visuals()
|
||||
portal_visuals.reset_visuals()
|
||||
|
||||
/obj/machinery/gateway/process()
|
||||
if((stat & (NOPOWER)) && use_power)
|
||||
@@ -217,7 +215,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
|
||||
return
|
||||
target = D
|
||||
target.activate(destination)
|
||||
// portal_visuals.setup_visuals(target)
|
||||
portal_visuals.setup_visuals(target)
|
||||
generate_bumper()
|
||||
use_power = ACTIVE_POWER_USE
|
||||
update_icon()
|
||||
@@ -359,6 +357,8 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
|
||||
|
||||
animate(get_filter("portal_ripple"), time = 1.3 SECONDS, loop = -1, easing = LINEAR_EASING, radius = 32)
|
||||
|
||||
var/turf/center_turf = our_destination.get_target_turf()
|
||||
/// DISABLED DUE TO BYOND BUG CAUSING STACK OVERFLOWS OF ANY HUMAN INSTANTIATION NEAR AN ACTIVATED GATEWAY.
|
||||
/// Probably due to it referencing each other through the gateway (there's a deep loop, maybe BYOND isn't catching something when it usually would)
|
||||
//var/turf/center_turf = our_destination.get_target_turf()
|
||||
|
||||
vis_contents += block(locate(center_turf.x - 1, center_turf.y - 1, center_turf.z), locate(center_turf.x + 1, center_turf.y + 1, center_turf.z))
|
||||
//vis_contents += block(locate(center_turf.x - 1, center_turf.y - 1, center_turf.z), locate(center_turf.x + 1, center_turf.y + 1, center_turf.z))
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
continue
|
||||
if(L.mob_biotypes & blacklisted_biotypes) //hey can you don't
|
||||
continue
|
||||
if(!(L in GLOB.player_list) && !L.mind)
|
||||
if(!(L in GLOB.player_list) && !L.mind && !L.incapacitated())
|
||||
potential += L
|
||||
|
||||
if(!potential.len)
|
||||
|
||||
@@ -497,6 +497,72 @@
|
||||
/obj/item/reagent_containers/food/drinks/bottle/grenadine/empty
|
||||
list_reagents = null
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank //Don't let players print these from a lathe, bottles should be obtained in mass from the bar only.
|
||||
name = "glass bottle"
|
||||
desc = "This blank bottle is unyieldingly anonymous, offering no clues to it's contents."
|
||||
icon_state = "glassbottle"
|
||||
volume = 90
|
||||
spillable = TRUE
|
||||
obj_flags = UNIQUE_RENAME
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/update_icon()
|
||||
..()
|
||||
add_overlay("[initial(icon_state)]shine")
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/get_part_rating()
|
||||
return reagents.maximum_volume
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/on_reagent_change(changetype)
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/update_overlays()
|
||||
. = ..()
|
||||
if(!cached_icon)
|
||||
cached_icon = icon_state
|
||||
|
||||
if(reagents.total_volume)
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]10", color = mix_color_from_reagents(reagents.reagent_list))
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9)
|
||||
filling.icon_state = "[cached_icon]0"
|
||||
if(10 to 19)
|
||||
filling.icon_state = "[cached_icon]10"
|
||||
if(20 to 29)
|
||||
filling.icon_state = "[cached_icon]20"
|
||||
if(30 to 39)
|
||||
filling.icon_state = "[cached_icon]30"
|
||||
if(40 to 49)
|
||||
filling.icon_state = "[cached_icon]40"
|
||||
if(50 to 59)
|
||||
filling.icon_state = "[cached_icon]50"
|
||||
if(60 to 69)
|
||||
filling.icon_state = "[cached_icon]60"
|
||||
if(70 to 79)
|
||||
filling.icon_state = "[cached_icon]70"
|
||||
if(80 to 89)
|
||||
filling.icon_state = "[cached_icon]80"
|
||||
if(90 to INFINITY)
|
||||
filling.icon_state = "[cached_icon]90"
|
||||
. += filling
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/small
|
||||
name = "small glass bottle"
|
||||
desc = "This small bottle is unyieldingly anonymous, offering no clues to it's contents."
|
||||
icon_state = "glassbottlesmall"
|
||||
volume = 60
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/pitcher
|
||||
name = "glass pitcher"
|
||||
desc = "This is a pitcher for large amounts of liquid of any kind."
|
||||
icon_state = "unipitcher"
|
||||
volume = 120
|
||||
|
||||
////////////////////////// MOLOTOV ///////////////////////
|
||||
/obj/item/reagent_containers/food/drinks/bottle/molotov
|
||||
name = "molotov cocktail"
|
||||
|
||||
@@ -436,13 +436,27 @@
|
||||
|
||||
/datum/sprite_accessory/tails/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
icon_state = "carp"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "carp"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
/datum/sprite_accessory/tails/human/sharkalt
|
||||
name = "Shark (alt)"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/sharkalt
|
||||
name = "Shark (alt)"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
@@ -897,11 +911,21 @@
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
icon_state = "carp"
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/shark
|
||||
name = "Shark"
|
||||
icon_state = "carp"
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/sharkalt
|
||||
name = "Shark (alt)"
|
||||
icon_state = "shark"
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/sharkalt
|
||||
name = "Shark (alt)"
|
||||
icon_state = "shark"
|
||||
matrixed_sections = MATRIX_RED
|
||||
|
||||
|
||||
@@ -39,29 +39,35 @@
|
||||
return
|
||||
|
||||
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood.
|
||||
|
||||
//Blood regeneration if there is some space
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL && !HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
if(integrating_blood > 0)
|
||||
var/blood_integrated = max(integrating_blood - 1, 0)
|
||||
var/blood_diff = integrating_blood - blood_integrated
|
||||
integrating_blood = blood_integrated
|
||||
if(blood_volume < BLOOD_VOLUME_MAXIMUM)
|
||||
blood_volume += blood_diff
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
var/nutrition_ratio = 0
|
||||
switch(nutrition)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
nutrition_ratio = 0.2
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
nutrition_ratio = 0.4
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
|
||||
nutrition_ratio = 0.6
|
||||
if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
|
||||
nutrition_ratio = 0.8
|
||||
else
|
||||
nutrition_ratio = 1
|
||||
if(satiety > 80)
|
||||
nutrition_ratio *= 1.25
|
||||
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR)
|
||||
blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio)
|
||||
if(!HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
switch(nutrition)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
nutrition_ratio = 0.2
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
nutrition_ratio = 0.4
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
|
||||
nutrition_ratio = 0.6
|
||||
if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
|
||||
nutrition_ratio = 0.8
|
||||
else
|
||||
nutrition_ratio = 1
|
||||
if(satiety > 80)
|
||||
nutrition_ratio *= 1.25
|
||||
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR)
|
||||
blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio)
|
||||
|
||||
//Effects of bloodloss
|
||||
var/word = pick("dizzy","woozy","faint")
|
||||
switch(blood_volume)
|
||||
var/blood_effect_volume = blood_volume + integrating_blood
|
||||
switch(blood_effect_volume)
|
||||
if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS)
|
||||
if(prob(10))
|
||||
to_chat(src, "<span class='warning'>You feel terribly bloated.</span>")
|
||||
@@ -94,14 +100,22 @@
|
||||
bleed(temp_bleed)
|
||||
|
||||
//Makes a blood drop, leaking amt units of blood from the mob
|
||||
/mob/living/carbon/proc/bleed(amt)
|
||||
if(blood_volume)
|
||||
/mob/living/carbon/proc/bleed(amt, force)
|
||||
var/bled = FALSE //Have we bled amnt?
|
||||
if(blood_volume > amt || force && blood_volume)
|
||||
blood_volume = max(blood_volume - amt, 0)
|
||||
if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean
|
||||
if(amt >= 10)
|
||||
add_splatter_floor(src.loc)
|
||||
else
|
||||
add_splatter_floor(src.loc, 1)
|
||||
bled = TRUE
|
||||
if(integrating_blood > amt || force && integrating_blood)
|
||||
integrating_blood = max(integrating_blood - amt, 0)
|
||||
bled = TRUE
|
||||
if(!bled && !force) //If we are already cycling back through, don't do this again
|
||||
bleed(amt, TRUE) //we cycle back through to try to bleed SOMETHING, not neccesarily the required amount
|
||||
return
|
||||
if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean
|
||||
if(amt >= 10)
|
||||
add_splatter_floor(src.loc)
|
||||
else
|
||||
add_splatter_floor(src.loc, TRUE)
|
||||
|
||||
/mob/living/carbon/human/bleed(amt)
|
||||
amt *= physiology.bleed_mod
|
||||
@@ -114,6 +128,7 @@
|
||||
|
||||
/mob/living/proc/restore_blood()
|
||||
blood_volume = initial(blood_volume)
|
||||
integrating_blood = 0
|
||||
|
||||
/mob/living/carbon/restore_blood()
|
||||
blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio)
|
||||
@@ -368,10 +383,17 @@
|
||||
return
|
||||
blood_ratio = 1
|
||||
|
||||
/mob/living/proc/AdjustBloodVol(var/value)
|
||||
/mob/living/proc/AdjustBloodVol(value)
|
||||
if(blood_ratio == value)
|
||||
return
|
||||
blood_ratio = value
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.handle_blood()
|
||||
|
||||
/mob/living/proc/adjust_integration_blood(value, remove_actual_blood, force)
|
||||
if(integrating_blood + value < 0 && remove_actual_blood)
|
||||
blood_volume += value + integrating_blood
|
||||
blood_volume = max(blood_volume, 0)
|
||||
integrating_blood += value
|
||||
integrating_blood = clamp(integrating_blood, 0, force ? INFINITY : (BLOOD_VOLUME_MAXIMUM - (integrating_blood + blood_volume)))
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
owner.adjustOxyLoss(-heal_amt)
|
||||
owner.adjustCloneLoss(-heal_amt)
|
||||
if(owner.blood_volume && (owner.blood_volume < BLOOD_VOLUME_NORMAL))
|
||||
owner.blood_volume += 5
|
||||
owner.adjust_integration_blood(5)
|
||||
else
|
||||
owner.adjustPlasma(plasma_rate * 0.1)
|
||||
|
||||
|
||||
@@ -1273,3 +1273,6 @@
|
||||
var/mob/living/carbon/C = usr
|
||||
if(I.can_give())
|
||||
C.give(src)
|
||||
|
||||
/mob/living/carbon/proc/functional_blood()
|
||||
return blood_volume + integrating_blood
|
||||
|
||||
@@ -825,6 +825,7 @@
|
||||
dna.remove_mutation(HM.name)
|
||||
if(blood_volume < (BLOOD_VOLUME_NORMAL*blood_ratio))
|
||||
blood_volume = (BLOOD_VOLUME_NORMAL*blood_ratio)
|
||||
integrating_blood = 0
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker)
|
||||
|
||||
@@ -182,3 +182,8 @@
|
||||
destination.underwear = underwear
|
||||
destination.undershirt = undershirt
|
||||
destination.socks = socks
|
||||
|
||||
/mob/living/carbon/human/adjust_integration_blood(value, force)
|
||||
if(NOBLOOD in dna.species.species_traits) //Can't lose blood if your species doesn't have any
|
||||
return
|
||||
. = ..()
|
||||
|
||||
@@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
|
||||
/datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood))
|
||||
H.blood_volume = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM)
|
||||
H.adjust_integration_blood(round(chem.volume, 0.1))
|
||||
H.reagents.del_reagent(chem.type)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_tail" = "None", "mam_ears" = "None",
|
||||
"insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None")
|
||||
"insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None", "mam_body_markings" = list())
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = SPECIES_FELINID
|
||||
limbs_id = SPECIES_HUMAN
|
||||
|
||||
mutant_bodyparts = list("mam_tail" = "Cat", "mam_ears" = "Cat", "deco_wings" = "None")
|
||||
mutant_bodyparts = list("mam_tail" = "Cat", "mam_ears" = "Cat", "deco_wings" = "None", "mam_body_markings" = list())
|
||||
|
||||
mutantears = /obj/item/organ/ears/cat
|
||||
mutanttail = /obj/item/organ/tail/cat
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
default_color = "FFFFFF"
|
||||
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS_PARTSONLY,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF","tail_human" = "None", "ears" = "None", "taur" = "None", "deco_wings" = "None", "legs" = "Plantigrade")
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF","tail_human" = "None", "ears" = "None", "taur" = "None", "deco_wings" = "None", "legs" = "Plantigrade", "mam_body_markings" = list())
|
||||
use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
disliked_food = GROSS | RAW
|
||||
|
||||
@@ -53,16 +53,16 @@
|
||||
exotic_blood_color = "#" + H.dna.features["mcolor"]
|
||||
|
||||
/datum/species/jelly/spec_life(mob/living/carbon/human/H)
|
||||
if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers
|
||||
if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for bloodsuckers
|
||||
return
|
||||
if(!H.blood_volume)
|
||||
H.blood_volume += 5
|
||||
H.adjust_integration_blood(5)
|
||||
H.adjustBruteLoss(5)
|
||||
to_chat(H, "<span class='danger'>You feel empty!</span>")
|
||||
|
||||
if(H.blood_volume < (BLOOD_VOLUME_NORMAL * H.blood_ratio))
|
||||
if(H.nutrition >= NUTRITION_LEVEL_STARVING)
|
||||
H.blood_volume += 3
|
||||
H.adjust_integration_blood(3)
|
||||
H.nutrition -= 2.5
|
||||
if(H.blood_volume < (BLOOD_VOLUME_OKAY*H.blood_ratio))
|
||||
if(prob(5))
|
||||
@@ -82,7 +82,7 @@
|
||||
consumed_limb.drop_limb()
|
||||
to_chat(H, "<span class='userdanger'>Your [consumed_limb] is drawn back into your body, unable to maintain its shape!</span>")
|
||||
qdel(consumed_limb)
|
||||
H.blood_volume += 20
|
||||
H.adjust_integration_blood(20)
|
||||
|
||||
////////////////////////////////////////////////////////SLIMEPEOPLE///////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
if(prob(5))
|
||||
to_chat(H, "<span class='notice'>You feel very bloated!</span>")
|
||||
else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
H.blood_volume += 3
|
||||
H.adjust_integration_blood(3)
|
||||
H.nutrition -= 2.5
|
||||
|
||||
..()
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added
|
||||
|
||||
var/blood_volume = 0 //how much blood the mob has
|
||||
var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use adjust_integration_blood() instead of modifying directly
|
||||
var/blood_ratio = 1 //How much blood the mob needs, in terms of ratio (i.e 1.2 will require BLOOD_VOLUME_NORMAL of 672) DO NOT GO ABOVE 3.55 Well, actually you can but, then they can't get enough blood.
|
||||
var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
L.SetUnconscious(0, FALSE)
|
||||
L.adjustOxyLoss(-50)// do CPR first
|
||||
if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding
|
||||
L.blood_volume += 30
|
||||
L.adjust_integration_blood(30)
|
||||
L.bleedsuppress = 0
|
||||
if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that
|
||||
var/healing = min(L.getBruteLoss(), 120)
|
||||
|
||||
@@ -12,33 +12,17 @@
|
||||
#define OBJECT (LOWEST + 1)
|
||||
#define LOWEST (1)
|
||||
|
||||
#define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty.
|
||||
#define OXYGEN_HEAT_PENALTY 1
|
||||
#define PLUOXIUM_HEAT_PENALTY -1
|
||||
#define TRITIUM_HEAT_PENALTY 10
|
||||
#define CO2_HEAT_PENALTY 0.1
|
||||
#define NITROGEN_HEAT_PENALTY -1.5
|
||||
#define BZ_HEAT_PENALTY 5
|
||||
#define H2O_HEAT_PENALTY 8
|
||||
//#define FREON_HEAT_PENALTY -10 //very good heat absorbtion and less plasma and o2 generation
|
||||
//#define HYDROGEN_HEAT_PENALTY 10 // similar heat penalty as tritium (dangerous)
|
||||
|
||||
|
||||
//All of these get divided by 10-bzcomp * 5 before having 1 added and being multiplied with power to determine rads
|
||||
//Keep the negative values here above -10 and we won't get negative rads
|
||||
#define OXYGEN_TRANSMIT_MODIFIER 1.5 //Higher == Bigger bonus to power generation.
|
||||
#define PLASMA_TRANSMIT_MODIFIER 4
|
||||
#define BZ_TRANSMIT_MODIFIER -2
|
||||
#define TRITIUM_TRANSMIT_MODIFIER 30 //We divide by 10, so this works out to 3
|
||||
#define PLUOXIUM_TRANSMIT_MODIFIER -5 //Should halve the power output
|
||||
#define H2O_TRANSMIT_MODIFIER 2
|
||||
//#define HYDROGEN_TRANSMIT_MODIFIER 25 //increase the radiation emission, but less than the trit (2.5)
|
||||
|
||||
#define BZ_RADIOACTIVITY_MODIFIER 5 //Improves the effect of transmit modifiers
|
||||
|
||||
#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage.
|
||||
#define PLUOXIUM_HEAT_RESISTANCE 3
|
||||
//#define HYDROGEN_HEAT_RESISTANCE 2 // just a bit of heat resistance to spice it up
|
||||
/datum/auxgm/proc/add_supermatter_properties(datum/gas/gas)
|
||||
var/g = gas.id
|
||||
var/list/props = src.supermatter
|
||||
if(gas.powermix || gas.heat_penalty || gas.transmit_modifier || gas.radioactivity_modifier || gas.heat_resistance || gas.powerloss_inhibition)
|
||||
props[HEAT_PENALTY][g] = gas.heat_penalty
|
||||
props[TRANSMIT_MODIFIER][g] = gas.transmit_modifier
|
||||
props[RADIOACTIVITY_MODIFIER][g] = gas.radioactivity_modifier
|
||||
props[HEAT_RESISTANCE][g] = gas.heat_resistance
|
||||
props[POWERLOSS_INHIBITION][g] = gas.powerloss_inhibition
|
||||
props[POWER_MIX][g] = gas.powermix
|
||||
props[ALL_SUPERMATTER_GASES] += g
|
||||
|
||||
#define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts.
|
||||
#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached
|
||||
@@ -148,90 +132,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
var/power = 0
|
||||
///Determines the rate of positve change in gas comp values
|
||||
var/gas_change_rate = 0.05
|
||||
///The list of gases we will be interacting with in process_atoms()
|
||||
var/list/gases_we_care_about = list(
|
||||
GAS_O2,
|
||||
GAS_H2O,
|
||||
GAS_PLASMA,
|
||||
GAS_CO2,
|
||||
GAS_NITROUS,
|
||||
GAS_N2,
|
||||
GAS_PLUOXIUM,
|
||||
GAS_TRITIUM,
|
||||
GAS_BZ,
|
||||
// /datum/gas/freon,
|
||||
// /datum/gas/hydrogen,
|
||||
)
|
||||
///The list of gases mapped against their current comp. We use this to calculate different values the supermatter uses, like power or heat resistance. It doesn't perfectly match the air around the sm, instead moving up at a rate determined by gas_change_rate per call. Ranges from 0 to 1
|
||||
var/list/gas_comp = list(
|
||||
GAS_O2 = 0,
|
||||
GAS_H2O = 0,
|
||||
GAS_PLASMA = 0,
|
||||
GAS_CO2 = 0,
|
||||
GAS_NITROUS = 0,
|
||||
GAS_N2 = 0,
|
||||
GAS_PLUOXIUM = 0,
|
||||
GAS_TRITIUM = 0,
|
||||
GAS_BZ = 0,
|
||||
// /datum/gas/freon = 0,
|
||||
// /datum/gas/hydrogen = 0,
|
||||
)
|
||||
///The list of gases mapped against their transmit values. We use it to determine the effect different gases have on radiation
|
||||
var/list/gas_trans = list(
|
||||
GAS_O2 = OXYGEN_TRANSMIT_MODIFIER,
|
||||
GAS_H2O = H2O_TRANSMIT_MODIFIER,
|
||||
GAS_PLASMA = PLASMA_TRANSMIT_MODIFIER,
|
||||
GAS_PLUOXIUM = PLUOXIUM_TRANSMIT_MODIFIER,
|
||||
GAS_TRITIUM = TRITIUM_TRANSMIT_MODIFIER,
|
||||
GAS_BZ = BZ_TRANSMIT_MODIFIER,
|
||||
// /datum/gas/hydrogen = HYDROGEN_TRANSMIT_MODIFIER,
|
||||
)
|
||||
///The list of gases mapped against their heat penaltys. We use it to determin molar and heat output
|
||||
var/list/gas_heat = list(
|
||||
GAS_O2 = OXYGEN_HEAT_PENALTY,
|
||||
GAS_H2O = H2O_HEAT_PENALTY,
|
||||
GAS_PLASMA = PLASMA_HEAT_PENALTY,
|
||||
GAS_CO2 = CO2_HEAT_PENALTY,
|
||||
GAS_N2 = NITROGEN_HEAT_PENALTY,
|
||||
GAS_PLUOXIUM = PLUOXIUM_HEAT_PENALTY,
|
||||
GAS_TRITIUM = TRITIUM_HEAT_PENALTY,
|
||||
GAS_BZ = BZ_HEAT_PENALTY,
|
||||
// /datum/gas/freon = FREON_HEAT_PENALTY,
|
||||
// /datum/gas/hydrogen = HYDROGEN_HEAT_PENALTY,
|
||||
)
|
||||
///The list of gases mapped against their heat resistance. We use it to moderate heat damage.
|
||||
var/list/gas_resist = list(
|
||||
GAS_NITROUS = N2O_HEAT_RESISTANCE,
|
||||
GAS_PLUOXIUM = PLUOXIUM_HEAT_RESISTANCE,
|
||||
// /datum/gas/hydrogen = HYDROGEN_HEAT_RESISTANCE,
|
||||
)
|
||||
///The list of gases mapped against their powermix ratio
|
||||
var/list/gas_powermix = list(
|
||||
GAS_O2 = 1,
|
||||
GAS_H2O = 1,
|
||||
GAS_PLASMA = 1,
|
||||
GAS_CO2 = 1,
|
||||
GAS_N2 = -1,
|
||||
GAS_PLUOXIUM = -1,
|
||||
GAS_TRITIUM = 1,
|
||||
GAS_BZ = 1,
|
||||
// /datum/gas/freon = -1,
|
||||
// /datum/gas/hydrogen = 1,
|
||||
)
|
||||
var/list/gas_comp = list()
|
||||
///The last air sample's total molar count, will always be above or equal to 0
|
||||
var/combined_gas = 0
|
||||
///Affects the power gain the sm experiances from heat
|
||||
var/gasmix_power_ratio = 0
|
||||
///Affects the amount of o2 and plasma the sm outputs, along with the heat it makes.
|
||||
var/dynamic_heat_modifier = 1
|
||||
///Affects the amount of damage and minimum point at which the sm takes heat damage
|
||||
var/dynamic_heat_resistance = 1
|
||||
///Uses powerloss_dynamic_scaling and combined_gas to lessen the effects of our powerloss functions
|
||||
var/powerloss_inhibitor = 1
|
||||
///Based on co2 percentage, slowly moves between 0 and 1. We use it to calc the powerloss_inhibitor
|
||||
var/powerloss_dynamic_scaling= 0
|
||||
///Affects the amount of radiation the sm makes. We multiply this with power to find the rads.
|
||||
var/power_transmission_bonus = 0
|
||||
///Used to increase or lessen the amount of damage the sm takes from heat based on molar counts.
|
||||
var/mole_heat_penalty = 0
|
||||
///Takes the energy throwing things into the sm generates and slowly turns it into actual power
|
||||
@@ -481,6 +392,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
removed = new()
|
||||
damage_archived = damage
|
||||
|
||||
var/list/gas_info = GLOB.gas_data.supermatter
|
||||
|
||||
var/list/gases_we_care_about = gas_info[ALL_SUPERMATTER_GASES]
|
||||
|
||||
/********
|
||||
EXPERIMENTAL, HUGBOXY AS HELL CITADEL CHANGES: Even in a vaccum, update gas composition and modifiers.
|
||||
This means that the SM will usually have a very small explosion if it ends up being breached to space,
|
||||
@@ -491,7 +406,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
if(takes_damage)
|
||||
damage += max((power / 1000) * DAMAGE_INCREASE_MULTIPLIER, 0.1) // always does at least some damage
|
||||
combined_gas = max(0, combined_gas - 0.5) // Slowly wear off.
|
||||
for(var/gasID in gases_we_care_about)
|
||||
for(var/gasID in gas_comp)
|
||||
gas_comp[gasID] = max(0, gas_comp[gasID] - 0.05) //slowly ramp down
|
||||
else
|
||||
if(takes_damage)
|
||||
@@ -531,46 +446,49 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
//Prevents huge bursts of gas/heat when a large amount of something is introduced
|
||||
//They range between 0 and 1
|
||||
for(var/gasID in gases_we_care_about)
|
||||
if(!(gasID in gas_comp))
|
||||
gas_comp[gasID] = 0
|
||||
gas_comp[gasID] += clamp(max(removed.get_moles(gasID)/combined_gas, 0) - gas_comp[gasID], -1, gas_change_rate)
|
||||
|
||||
var/list/heat_mod = gases_we_care_about.Copy()
|
||||
var/list/transit_mod = gases_we_care_about.Copy()
|
||||
var/list/resistance_mod = gases_we_care_about.Copy()
|
||||
var/list/threshold_mod = gases_we_care_about.Copy()
|
||||
|
||||
var/list/powermix = gas_info[POWER_MIX]
|
||||
var/list/heat = gas_info[HEAT_PENALTY]
|
||||
var/list/transmit = gas_info[TRANSMIT_MODIFIER]
|
||||
var/list/resist = gas_info[HEAT_RESISTANCE]
|
||||
var/list/radioactivity = gas_info[RADIOACTIVITY_MODIFIER]
|
||||
var/list/inhibition = gas_info[POWERLOSS_INHIBITION]
|
||||
|
||||
//We're concerned about pluoxium being too easy to abuse at low percents, so we make sure there's a substantial amount.
|
||||
var/pluoxiumbonus = (gas_comp[GAS_PLUOXIUM] >= 0.15) //makes pluoxium only work at 15%+
|
||||
var/h2obonus = 1 - (gas_comp[GAS_H2O] * 0.25)//At max this value should be 0.75
|
||||
var/h2obonus = 1 - (gas_comp[GAS_H2O] * 0.25)//At min this value should be 0.75
|
||||
// var/freonbonus = (gas_comp[/datum/gas/freon] <= 0.03) //Let's just yeet power output if this shit is high
|
||||
|
||||
heat_mod[GAS_PLUOXIUM] = pluoxiumbonus
|
||||
transit_mod[GAS_PLUOXIUM] = pluoxiumbonus
|
||||
resistance_mod[GAS_PLUOXIUM] = pluoxiumbonus
|
||||
threshold_mod[GAS_PLUOXIUM] = pluoxiumbonus
|
||||
|
||||
//No less then zero, and no greater then one, we use this to do explosions and heat to power transfer
|
||||
//Be very careful with modifing this var by large amounts, and for the love of god do not push it past 1
|
||||
gasmix_power_ratio = 0
|
||||
for(var/gasID in gas_powermix)
|
||||
gasmix_power_ratio += gas_comp[gasID] * gas_powermix[gasID]
|
||||
gasmix_power_ratio = clamp(gasmix_power_ratio, 0, 1)
|
||||
|
||||
//Minimum value of -10, maximum value of 23. Effects plasma and o2 output and the output heat
|
||||
dynamic_heat_modifier = 0
|
||||
for(var/gasID in gas_heat)
|
||||
dynamic_heat_modifier += gas_comp[gasID] * gas_heat[gasID] * (isnull(heat_mod[gasID]) ? 1 : heat_mod[gasID])
|
||||
dynamic_heat_modifier *= h2obonus
|
||||
dynamic_heat_modifier = max(dynamic_heat_modifier, 0.5)
|
||||
|
||||
//Value between 1 and 10. Effects the damage heat does to the crystal
|
||||
//Affects the amount of o2 and plasma the sm outputs, along with the heat it makes.
|
||||
var/dynamic_heat_modifier = 0
|
||||
//Effects the damage heat does to the crystal.
|
||||
dynamic_heat_resistance = 0
|
||||
for(var/gasID in gas_resist)
|
||||
dynamic_heat_resistance += gas_comp[gasID] * gas_resist[gasID] * (isnull(resistance_mod[gasID]) ? 1 : resistance_mod[gasID])
|
||||
dynamic_heat_resistance = max(dynamic_heat_resistance, 1)
|
||||
|
||||
//Value between -5 and 30, used to determine radiation output as it concerns things like collectors.
|
||||
power_transmission_bonus = 0
|
||||
for(var/gasID in gas_trans)
|
||||
power_transmission_bonus += gas_comp[gasID] * gas_trans[gasID] * (isnull(transit_mod[gasID]) ? 1 : transit_mod[gasID])
|
||||
//We multiply this with power to find the rads.
|
||||
var/power_transmission_bonus = 0
|
||||
var/powerloss_inhibition_gas = 0
|
||||
var/radioactivity_modifier = 0
|
||||
for(var/gasID in gas_comp)
|
||||
var/this_comp = gas_comp[gasID] * (isnull(threshold_mod[gasID] ? 1 : threshold_mod[gasID]))
|
||||
gasmix_power_ratio += this_comp * powermix[gasID]
|
||||
dynamic_heat_modifier += this_comp * heat[gasID]
|
||||
dynamic_heat_resistance += this_comp * resist[gasID]
|
||||
power_transmission_bonus += this_comp * transmit[gasID]
|
||||
powerloss_inhibition_gas += this_comp * inhibition[gasID]
|
||||
radioactivity_modifier += this_comp * radioactivity[gasID]
|
||||
dynamic_heat_modifier *= h2obonus
|
||||
power_transmission_bonus *= h2obonus
|
||||
gasmix_power_ratio = clamp(gasmix_power_ratio, 0, 1)
|
||||
dynamic_heat_modifier = max(dynamic_heat_modifier, 0.5)
|
||||
|
||||
//more moles of gases are harder to heat than fewer, so let's scale heat damage around them
|
||||
mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25)
|
||||
@@ -578,8 +496,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
//Ramps up or down in increments of 0.02 up to the proportion of co2
|
||||
//Given infinite time, powerloss_dynamic_scaling = co2comp
|
||||
//Some value between 0 and 1
|
||||
if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && gas_comp[GAS_CO2] > POWERLOSS_INHIBITION_GAS_THRESHOLD) //If there are more then 20 mols, and more then 20% co2
|
||||
powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(gas_comp[GAS_CO2] - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
|
||||
if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && powerloss_inhibition_gas > POWERLOSS_INHIBITION_GAS_THRESHOLD) //If there are more then 20 mols, and more then 20% co2
|
||||
powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(powerloss_inhibition_gas - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
|
||||
else
|
||||
powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05, 0, 1)
|
||||
//Ranges from 0 to 1(1-(value between 0 and 1 * ranges from 1 to 1.5(mol / 500)))
|
||||
@@ -611,23 +529,15 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
|
||||
if(prob(50))
|
||||
//(1 + (tritRad + pluoxDampen * bzDampen * o2Rad * plasmaRad / (10 - bzrads))) * freonbonus
|
||||
radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus/(10-(gas_comp[GAS_BZ] * BZ_RADIOACTIVITY_MODIFIER)))) * 1))//freonbonus))// RadModBZ(500%)
|
||||
if(gas_comp[GAS_BZ] >= 0.4 && prob(30 * gas_comp[GAS_BZ]))
|
||||
src.fire_nuclear_particle() // Start to emit radballs at a maximum of 30% chance per tick
|
||||
radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus/(10-radioactivity_modifier)))))//freonbonus))// RadModBZ(500%)
|
||||
if(radioactivity_modifier >= 2 && prob(6 * radioactivity_modifier))
|
||||
src.fire_nuclear_particle()
|
||||
|
||||
//Power * 0.55 * a value between 1 and 0.8
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
//Power * 0.55 * (some value between 1.5 and 23) / 5
|
||||
removed.set_temperature(removed.return_temperature() + ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_MODIFIER))
|
||||
//We can only emit so much heat, that being 57500
|
||||
//We don't want our output to be too hot
|
||||
removed.set_temperature(max(0, min(removed.return_temperature(), 2500 * dynamic_heat_modifier)))
|
||||
|
||||
//Calculate how much gas to release
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
set waitfor = FALSE
|
||||
var/turf/B = L
|
||||
atoms += B
|
||||
B.assemble_baseturfs(B.type)
|
||||
for(var/A in B)
|
||||
atoms += A
|
||||
if(istype(A,/obj/structure/cable))
|
||||
|
||||
@@ -586,7 +586,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
if(AmBloodsucker(C))
|
||||
disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons.
|
||||
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
|
||||
C.blood_volume = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss.
|
||||
C.adjust_integration_blood(3) //Bloody Mary quickly restores blood loss.
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/brave_bull
|
||||
@@ -2593,7 +2593,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
alcohol_description = "sweet"
|
||||
else
|
||||
alcohol_description = "watery" //How the hell did you get negative boozepwr?
|
||||
|
||||
|
||||
var/list/fruits = list()
|
||||
if(names_in_order.len <= 3)
|
||||
fruits = names_in_order
|
||||
|
||||
@@ -396,26 +396,34 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 60
|
||||
taste_description = "sweetness and salt"
|
||||
var/extra_regen = 0.25 // in addition to acting as temporary blood, also add this much to their actual blood per tick
|
||||
var/last_added = 0
|
||||
var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active
|
||||
var/extra_regen = 0.25 // in addition to acting as temporary blood, also add this much to their actual blood per tick
|
||||
pH = 5.5
|
||||
|
||||
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M)
|
||||
if((HAS_TRAIT(M, TRAIT_NOMARROW)))
|
||||
return
|
||||
if(last_added)
|
||||
M.blood_volume -= last_added
|
||||
last_added = 0
|
||||
if(M.blood_volume < maximum_reachable) //Can only up to double your effective blood level.
|
||||
var/amount_to_add = min(M.blood_volume, volume*5)
|
||||
var/new_blood_level = min(M.blood_volume + amount_to_add, maximum_reachable)
|
||||
last_added = new_blood_level - M.blood_volume
|
||||
M.blood_volume = new_blood_level + extra_regen
|
||||
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/human/M)
|
||||
if(prob(33))
|
||||
M.adjustBruteLoss(-0.5*REM, 0)
|
||||
M.adjustFireLoss(-0.5*REM, 0)
|
||||
. = TRUE
|
||||
if((HAS_TRAIT(M, TRAIT_NOMARROW)))
|
||||
return ..()
|
||||
if(last_added)
|
||||
M.adjust_integration_blood(-last_added, TRUE)
|
||||
last_added = 0
|
||||
if(M.functional_blood() < maximum_reachable) //Can only up to double your effective blood level.
|
||||
var/new_blood_level = min(volume * 5, maximum_reachable)
|
||||
last_added = new_blood_level
|
||||
M.adjust_integration_blood(new_blood_level + (extra_regen * REM))
|
||||
if(prob(33))
|
||||
M.adjustBruteLoss(-0.5*REM, 0)
|
||||
M.adjustFireLoss(-0.5*REM, 0)
|
||||
. = TRUE
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/salglu_solution/on_mob_delete(mob/living/carbon/human/M)
|
||||
if(last_added)
|
||||
M.adjust_integration_blood(-last_added, TRUE)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M)
|
||||
@@ -1295,7 +1303,7 @@
|
||||
M.adjustCloneLoss(-3*REM, FALSE)
|
||||
M.adjustStaminaLoss(-25*REM,FALSE)
|
||||
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
|
||||
M.blood_volume += 40 // blood fall out man bad
|
||||
M.adjust_integration_blood(40) // blood fall out man bad
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -1316,7 +1324,7 @@
|
||||
M.adjustCloneLoss(-1.25*REM, FALSE)
|
||||
M.adjustStaminaLoss(-4*REM,FALSE)
|
||||
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
|
||||
M.blood_volume += 3
|
||||
M.adjust_integration_blood(3)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
var/mob/living/carbon/C = L
|
||||
var/blood_id = C.get_blood_id()
|
||||
if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood) && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits))))
|
||||
C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio)
|
||||
C.adjust_integration_blood(round(reac_volume, 0.1))
|
||||
// we don't care about bloodtype here, we're just refilling the mob
|
||||
|
||||
if(reac_volume >= 10 && istype(L) && method != INJECT)
|
||||
@@ -253,7 +253,7 @@
|
||||
/datum/reagent/water/on_mob_life(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(M.blood_volume)
|
||||
M.blood_volume += 0.1 // water is good for you!
|
||||
M.adjust_integration_blood(0.1) // water is good for you!
|
||||
|
||||
/*
|
||||
* Water reaction to turf
|
||||
@@ -370,7 +370,7 @@
|
||||
|
||||
/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M)
|
||||
if(M.blood_volume)
|
||||
M.blood_volume += 0.1 // water is good for you!
|
||||
M.adjust_integration_blood(0.1) // water is good for you!
|
||||
if(!data)
|
||||
data = list("misc" = 1)
|
||||
data["misc"]++
|
||||
@@ -456,7 +456,7 @@
|
||||
M.adjustBruteLoss(-2, FALSE)
|
||||
M.adjustFireLoss(-2, FALSE)
|
||||
if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
|
||||
M.blood_volume += 3
|
||||
M.adjust_integration_blood(3)
|
||||
else // Will deal about 90 damage when 50 units are thrown
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
|
||||
M.adjustToxLoss(2, FALSE)
|
||||
@@ -1146,7 +1146,7 @@
|
||||
if((HAS_TRAIT(C, TRAIT_NOMARROW)))
|
||||
return
|
||||
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
|
||||
C.blood_volume += 0.25
|
||||
C.adjust_integration_blood(0.25)
|
||||
..()
|
||||
|
||||
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
@@ -2552,7 +2552,7 @@
|
||||
M.adjustBruteLoss(-3, FALSE)
|
||||
M.adjustFireLoss(-3, FALSE)
|
||||
if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
M.blood_volume += 3
|
||||
M.adjust_integration_blood(3)
|
||||
else
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
|
||||
M.adjustToxLoss(2, FALSE)
|
||||
|
||||
@@ -245,6 +245,36 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/emptybottle
|
||||
name = "Glass Bottle"
|
||||
desc = "A small, empty bottle for storing liquids."
|
||||
id = "emptyglassbottle"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/glass = 400)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/bottle/blank/small
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/largeemptybottle
|
||||
name = "Large Glass Bottle"
|
||||
desc = "A large, empty bottle for storing liquids."
|
||||
id = "largeemptyglassbottle"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/glass = 2000)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/bottle/blank
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/emptypitcher
|
||||
name = "Pitcher"
|
||||
desc = "A large Pitcher to hold vast amounts of liquid."
|
||||
id = "emptypitcher"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/glass = 3600)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/bottle/blank/pitcher
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/air_horn
|
||||
name = "Air Horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
/datum/nanite_program/blood_restoring/active_effect()
|
||||
if(iscarbon(host_mob))
|
||||
var/mob/living/carbon/C = host_mob
|
||||
C.blood_volume += 2
|
||||
C.adjust_integration_blood(2)
|
||||
|
||||
/datum/nanite_program/repairing
|
||||
name = "Mechanical Repair"
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
/datum/techweb_node/bottle_exports
|
||||
id = "bottle_exports"
|
||||
display_name = "Legal Bottling"
|
||||
display_name = "Advanced Bottling"
|
||||
prereq_ids = list("blueprinted_bottles")
|
||||
description = "New bottles for printing and selling."
|
||||
design_ids = list("minikeg", "blooddrop", "slim_gold", "white_bloodmoon", "greenroad")
|
||||
description = "New bottles for printing, storage and selling."
|
||||
design_ids = list("minikeg", "blooddrop", "slim_gold", "white_bloodmoon", "greenroad", "emptyglassbottle", "largeemptyglassbottle", "emptypitcher")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 250)
|
||||
|
||||
@@ -322,7 +322,7 @@ Consuming extracts:
|
||||
playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.blood_volume += 25 //Half a vampire drain.
|
||||
C.adjust_integration_blood(25) //Half a vampire drain.
|
||||
|
||||
/obj/item/slimecross/consuming/green
|
||||
colour = "green"
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
user.adjust_nutrition(50)
|
||||
user.blood_volume += 50
|
||||
user.adjust_integration_blood(50)
|
||||
to_chat(user, "<span class='notice'>You activate [src], and your body is refilled with fresh slime jelly!</span>")
|
||||
return 150
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
return TRUE
|
||||
/datum/surgery_step/revive
|
||||
name = "electrically stimulate brain"
|
||||
implements = list(/obj/item/shockpaddles = 100, /obj/item/abductor/gizmo = 100, /obj/item/melee/baton = 75, /obj/item/organ/cyberimp/arm/baton = 75, /obj/item/organ/cyberimp/arm/gun/taser = 60, /obj/item/gun/energy/e_gun/advtaser = 60, /obj/item/gun/energy/taser = 60)
|
||||
implements = list(/obj/item/shockpaddles = 100, /obj/item/abductor/gizmo = 100, /obj/item/rod_of_asclepius = 100, /obj/item/melee/baton = 75, /obj/item/organ/cyberimp/arm/baton = 75, /obj/item/organ/cyberimp/arm/gun/taser = 60, /obj/item/gun/energy/e_gun/advtaser = 60, /obj/item/gun/energy/taser = 60)
|
||||
time = 120
|
||||
/datum/surgery_step/revive/tool_check(mob/user, obj/item/tool)
|
||||
. = TRUE
|
||||
|
||||
@@ -533,7 +533,7 @@
|
||||
var/total_moles = breath.total_moles()
|
||||
var/pressure = breath.return_pressure()
|
||||
var/plasma_pp = PP(breath, GAS_PLASMA)
|
||||
owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
|
||||
owner.adjust_integration_blood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
|
||||
|
||||
/obj/item/organ/lungs/yamerol
|
||||
name = "Yamerol lungs"
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
icon_deny = "boozeomat-deny"
|
||||
products = list(/obj/item/reagent_containers/food/drinks/drinkingglass = 30,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank = 5,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/small = 10,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blank/pitcher = 2,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/whiskey = 5,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/tequila = 5,
|
||||
|
||||
@@ -11,7 +11,7 @@ export BYOND_MINOR=1556
|
||||
export RUST_G_VERSION=0.4.8
|
||||
|
||||
#auxmos git tag
|
||||
export AUXMOS_VERSION=v0.2.2
|
||||
export AUXMOS_VERSION=v0.2.3
|
||||
|
||||
#node version
|
||||
export NODE_VERSION=12
|
||||
|
||||
@@ -50,6 +50,102 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">23 August 2021</h2>
|
||||
<h3 class="author">zeroisthebiggay updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">i hate the grammarchrist</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">22 August 2021</h2>
|
||||
<h3 class="author">zeroisthebiggay updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">trillby can't spell pair</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">20 August 2021</h2>
|
||||
<h3 class="author">EmeraldSundisk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds a law office/courtroom to OmegaStation</li>
|
||||
<li class="rscadd">Adds a gateway to OmegaStation</li>
|
||||
<li class="rscadd">Adds a pool/maintenance bar to OmegaStation</li>
|
||||
<li class="rscdel">Removes the original maintenance garden in OmegaStation tweak: Relocates the bathrooms to the starboard hall tweak: Modifies port quarter maintenance to include some affected items</li>
|
||||
</ul>
|
||||
<h3 class="author">Putnam3145 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Beach now has showers</li>
|
||||
</ul>
|
||||
<h3 class="author">TripleShades updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">At least four or five space heaters spread across Pubby Station Maints</li>
|
||||
<li class="rscadd">Missing decal in Pubby Station engineering</li>
|
||||
<li class="bugfix">Moved an atmos alarm in the SM emitter chamber so it wont be destroyed</li>
|
||||
</ul>
|
||||
<h3 class="author">WanderingFox95 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Empty bottles and pitchers are available to the bartender now.</li>
|
||||
<li class="imageadd">They even come with 10 different fillstates!</li>
|
||||
<li class="imageadd">Better Shark Tails, dodododododo~</li>
|
||||
<li class="rscadd">The old ones are now listed as carp tails.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">18 August 2021</h2>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">lets you select 4 prosthetic limbs instead of only 2</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">16 August 2021</h2>
|
||||
<h3 class="author">BlueWildrose updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Incapacitated mobs are blacklisted from being human-level intelligence sentience event candidates. This is particularly important due to slimes in BZ stasis on the station.</li>
|
||||
</ul>
|
||||
<h3 class="author">bunny232 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Polyvitiligo actually changes your color now</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">13 August 2021</h2>
|
||||
<h3 class="author">Putnam3145 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">makes certain organs no longer have circular references</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">12 August 2021</h2>
|
||||
<h3 class="author">Arturlang updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Nonslimes and nonvampires will no longer be able to increase their blood to stupid heights</li>
|
||||
</ul>
|
||||
<h3 class="author">Putnam3145 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="refactor">Supermatter values use auxgm</li>
|
||||
</ul>
|
||||
<h3 class="author">cadyn updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="server">precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">11 August 2021</h2>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">lets felinids, humans and moths have markings</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">09 August 2021</h2>
|
||||
<h3 class="author">Arturlang updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Nanite machinery overlays should now work properly</li>
|
||||
<li class="code_imp">screen objects are now atom/movables instead</li>
|
||||
<li class="code_imp">Update appearance is used for updating atoms now instead of update_icon and such</li>
|
||||
</ul>
|
||||
<h3 class="author">BlueWildrose updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Old gateway animation is back. Feedback is given that the gateway is open again.</li>
|
||||
</ul>
|
||||
<h3 class="author">Putnam3145 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Rod of asclepius can now be used for revival surgery</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">07 August 2021</h2>
|
||||
<h3 class="author">BlueWildrose updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -382,212 +478,6 @@
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">no more doubleroasting</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">21 June 2021</h2>
|
||||
<h3 class="author">silicons updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">glowshroom scaling</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">vore is 0.1% less shitcode</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">20 June 2021</h2>
|
||||
<h3 class="author">Arturlang updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Port's TG's nanite storage modification programs from the bepis</li>
|
||||
<li class="bugfix">Fixes infective nanite progreams not syncing cloud ID.</li>
|
||||
<li class="rscadd">Add's off icons for nanite machinery</li>
|
||||
<li class="bugfix">Fixes antitox nanites runtiming on simplemobs</li>
|
||||
<li class="rscadd">Updates the nanite dermal button icon set</li>
|
||||
<li class="rscadd">Adds the ability to select the logic for nanite rules</li>
|
||||
<li class="bugfix">Nanite programs with triggers won't ignore rules.</li>
|
||||
<li class="bugfix">Coagluating nanite program research no longer has the wrong name tweak: Nanite program's have better descriptions now tweak: Nanite subdermal ID's now also include pulled ID's for simplemobs</li>
|
||||
<li class="bugfix">Nanite voice sensors should properly work now.</li>
|
||||
<li class="bugfix">Fixes nanite comm remote, now they should actually work</li>
|
||||
</ul>
|
||||
<h3 class="author">EmeraldSundisk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds ColorMates to Snow Taxi tweak: Slight adjustments near the arrival shuttle landing zone</li>
|
||||
<li class="rscdel">Removes an undesired corporate entity</li>
|
||||
</ul>
|
||||
<h3 class="author">Nanotrasen Structual Engineering Division updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added lables to the atmos tanks on Metastation.</li>
|
||||
<li class="rscadd">Adjusted Pubbystation's emitter room wall layout to prevent light-breakage on startup of emitters.</li>
|
||||
<li class="rscdel">Removed frestanding sink and showers from Metastation science airlock, and Deltastation Xenobio. Added an emergency shower next to the kill room.</li>
|
||||
<li class="bugfix">Removed a leftover pipe in Metastation security hallway.</li>
|
||||
</ul>
|
||||
<h3 class="author">bunny232 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Pressure tanks other then air tanks start with gas!</li>
|
||||
</ul>
|
||||
<h3 class="author">keronshb updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds the Space Dragon midround event</li>
|
||||
<li class="soundadd">Space Dragon sounds</li>
|
||||
<li class="imageadd">Space Dragon + effects</li>
|
||||
<li class="code_imp">Added Spacewalk trait</li>
|
||||
<li class="code_imp">Gibs the original owner if they are turned into a Space Dragon with the traitor panel</li>
|
||||
<li class="admin">logging for Space Dragon creation</li>
|
||||
</ul>
|
||||
<h3 class="author">kiwedespars updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">a downside to wheely heelies ((made it actually detrimental))</li>
|
||||
</ul>
|
||||
<h3 class="author">zeroisthebiggay updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">beltslot sprites for various items</li>
|
||||
<li class="imageadd">resprite for telebaton</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">19 June 2021</h2>
|
||||
<h3 class="author">keronshb updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Ling Bone Gauntlets work again</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">17 June 2021</h2>
|
||||
<h3 class="author">Vynzill updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">ability to change crafted armwrap sprite to alternate one.</li>
|
||||
<li class="imageadd">extended armwrap icon and sprite</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixes an oversight causing embed jostling to do 2x as much damage as it should</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">16 June 2021</h2>
|
||||
<h3 class="author">silicons updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">on_found works again</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">15 June 2021</h2>
|
||||
<h3 class="author">EmeraldSundisk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Xenobiology now has proper lighting</li>
|
||||
<li class="bugfix">The Corporate Showroom now has a proper front door</li>
|
||||
<li class="bugfix">Mining snowmobiles now have keys</li>
|
||||
<li class="bugfix">Adjusts area designations so GENTURF icons should no longer be visible in-game</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">14 June 2021</h2>
|
||||
<h3 class="author">EmeraldSundisk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds a brand new, wholly unique mining base to Snaxi tweak: A thorough redesign of Snaxi (see PR #14818 for more info)</li>
|
||||
<li class="bugfix">Increases the number of electrical connections between substations</li>
|
||||
</ul>
|
||||
<h3 class="author">MrJWhit updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Removes cat meteors.</li>
|
||||
</ul>
|
||||
<h3 class="author">SandPoot updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Tablet computers now have a pen slot, they can almost replace your pda!</li>
|
||||
<li class="spellcheck">Removed a bracket from printer's examine.</li>
|
||||
<li class="bugfix">The cosmetic turtleneck and skirtleneck no longer start with broken sensors.</li>
|
||||
</ul>
|
||||
<h3 class="author">TripleShades updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Lights to AI Sat Walkways</li>
|
||||
<li class="rscadd">Lights to Atmospherics</li>
|
||||
<li class="rscadd">Floor labels to Atmospherics Gas Miner containment units</li>
|
||||
<li class="rscdel">Gas canisters from Gas Miner containment units</li>
|
||||
<li class="rscdel">Excessive wiring in Security and Detective's Office</li>
|
||||
</ul>
|
||||
<h3 class="author">qweq12yt updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Locker orders now properly bundle together in a single locker (still separated by buyer).</li>
|
||||
<li class="bugfix">Changed some package names to be more accurate.</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">bees can go in containers and are released upon opening the container</li>
|
||||
<li class="rscadd">7 more round tips have been added</li>
|
||||
</ul>
|
||||
<h3 class="author">zeroisthebiggay updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">new singularity hammer sprite</li>
|
||||
<li class="imageadd">various slight sprite additions</li>
|
||||
<li class="imageadd">distinctive combat defib sprite</li>
|
||||
<li class="imageadd">a onesleeved croptop accessory sprited by trojan coyote</li>
|
||||
<li class="imageadd">new bank machine sprite</li>
|
||||
<li class="imagedel">unused goon coffin sprite</li>
|
||||
<li class="imageadd">new water cooler sprite</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">12 June 2021</h2>
|
||||
<h3 class="author">silicons updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">xenos are now truly immune to stamina damage.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">10 June 2021</h2>
|
||||
<h3 class="author">Arturlang updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Holoparasites for traitors now cost 12 crystals, for operatives 8, the ricochet eyepath traitor item now 4.</li>
|
||||
</ul>
|
||||
<h3 class="author">DrPainis updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">goliath calamari</li>
|
||||
<li class="rscadd">cat meteors</li>
|
||||
</ul>
|
||||
<h3 class="author">Linzolle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">cults can build in maintenance (and other small areas) again.</li>
|
||||
<li class="bugfix">centcom can no longer be selected as the target area for narsie to be summoned??????</li>
|
||||
</ul>
|
||||
<h3 class="author">MrJWhit updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Moves medical holodeck to the restricted category</li>
|
||||
</ul>
|
||||
<h3 class="author">SandPoot updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="code_imp">Uses some of the existing images for the typing indicators.</li>
|
||||
<li class="bugfix">Fixes soulstone shard not working for non-cultists.</li>
|
||||
</ul>
|
||||
<h3 class="author">WanderingFox95 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">A random event for the cat surgeon to invade the station. Listen for scary noises!</li>
|
||||
<li class="soundadd">Screaming Cat SFX, you know, for the mood.</li>
|
||||
</ul>
|
||||
<h3 class="author">bunny232 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Atmos resin now properly prevents all atmos from moving</li>
|
||||
<li class="bugfix">Air tanks now properly have a 21/79 o2/n2 mix</li>
|
||||
<li class="rscadd">Hydroponics can now make 5u of slimejelly by injecting 3 oil, 2 radium and 1 tinea luxor into a glowshroom</li>
|
||||
</ul>
|
||||
<h3 class="author">keronshb updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">Made it so Off Balance only disarms if they're shoved into a wall or person.</li>
|
||||
<li class="balance">Reduced Off Balance time to 2 seconds.</li>
|
||||
<li class="balance">Pierced Realities despawn after 3 minutes and 15 seconds, new unresearched realities spawn in after that time elsewhere to help other heretics get back into the game.</li>
|
||||
<li class="balance">A required sacrifice amount for heretic's second to last and last powers are added to discourage only rushing for holes.</li>
|
||||
<li class="balance">An announcement automatically plays to everyone that there's a heretic gunning for ascension upon learning the 2nd to last power</li>
|
||||
<li class="balance">Blade Shatters are now used in hand other than with a HUD icon tweak: Adjusted some TGUI menus for the book to reflect how many sacrifices a heretic has and how many are required for certain powers</li>
|
||||
<li class="bugfix">Fixes sprite issue for Void Cloak for people who have digigrade legs.</li>
|
||||
<li class="bugfix">Fixes the Raw Prophet recipe to match the description</li>
|
||||
<li class="balance">Lets the Cargo Shuttle use Disposal Pipes again</li>
|
||||
<li class="rscadd">Adds motivation and adds it to the uplink</li>
|
||||
<li class="rscadd">Adds Judgement Cut projectiles</li>
|
||||
<li class="rscadd">Adds Judgement Cut hit effects and firing effects.</li>
|
||||
<li class="soundadd">added sounds for the firing and hit sounds of Judgement Cuts, created by @dzahlus</li>
|
||||
<li class="rscadd">Adds Floor Cluwnes and event for midround</li>
|
||||
<li class="rscadd">Adds Cluwne mutation</li>
|
||||
<li class="rscadd">Adds Cluwne spell</li>
|
||||
<li class="rscadd">Adds Cluwnes</li>
|
||||
<li class="imageadd">Adds Cluwne Mask + shoes</li>
|
||||
<li class="admin">Adds Floor Cluwne spawn button</li>
|
||||
<li class="admin">Adds Cluwne smite button</li>
|
||||
</ul>
|
||||
<h3 class="author">zeroisthebiggay updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed an exploit allowing you to grab people from anywhere with a clowncar.</li>
|
||||
<li class="balance">revenant essence objective reduced</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<b>GoonStation 13 Development Team</b>
|
||||
|
||||
@@ -29784,3 +29784,63 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
don''t announce they''re ending if they never announced they''re starting tweak:
|
||||
Supernovae say explicitly no rad storms can happen if they can''t'
|
||||
- rscadd: Monstermos is back
|
||||
2021-08-09:
|
||||
Arturlang:
|
||||
- bugfix: Nanite machinery overlays should now work properly
|
||||
- code_imp: screen objects are now atom/movables instead
|
||||
- code_imp: Update appearance is used for updating atoms now instead of update_icon
|
||||
and such
|
||||
BlueWildrose:
|
||||
- bugfix: Old gateway animation is back. Feedback is given that the gateway is open
|
||||
again.
|
||||
Putnam3145:
|
||||
- balance: Rod of asclepius can now be used for revival surgery
|
||||
2021-08-11:
|
||||
timothyteakettle:
|
||||
- rscadd: lets felinids, humans and moths have markings
|
||||
2021-08-12:
|
||||
Arturlang:
|
||||
- rscdel: Nonslimes and nonvampires will no longer be able to increase their blood
|
||||
to stupid heights
|
||||
Putnam3145:
|
||||
- refactor: Supermatter values use auxgm
|
||||
cadyn:
|
||||
- server: precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh
|
||||
2021-08-13:
|
||||
Putnam3145:
|
||||
- bugfix: makes certain organs no longer have circular references
|
||||
2021-08-16:
|
||||
BlueWildrose:
|
||||
- bugfix: Incapacitated mobs are blacklisted from being human-level intelligence
|
||||
sentience event candidates. This is particularly important due to slimes in
|
||||
BZ stasis on the station.
|
||||
bunny232:
|
||||
- bugfix: Polyvitiligo actually changes your color now
|
||||
2021-08-18:
|
||||
timothyteakettle:
|
||||
- rscadd: lets you select 4 prosthetic limbs instead of only 2
|
||||
2021-08-20:
|
||||
EmeraldSundisk:
|
||||
- rscadd: Adds a law office/courtroom to OmegaStation
|
||||
- rscadd: Adds a gateway to OmegaStation
|
||||
- rscadd: Adds a pool/maintenance bar to OmegaStation
|
||||
- rscdel: 'Removes the original maintenance garden in OmegaStation tweak: Relocates
|
||||
the bathrooms to the starboard hall tweak: Modifies port quarter maintenance
|
||||
to include some affected items'
|
||||
Putnam3145:
|
||||
- rscadd: Beach now has showers
|
||||
TripleShades:
|
||||
- rscadd: At least four or five space heaters spread across Pubby Station Maints
|
||||
- rscadd: Missing decal in Pubby Station engineering
|
||||
- bugfix: Moved an atmos alarm in the SM emitter chamber so it wont be destroyed
|
||||
WanderingFox95:
|
||||
- rscadd: Empty bottles and pitchers are available to the bartender now.
|
||||
- imageadd: They even come with 10 different fillstates!
|
||||
- imageadd: Better Shark Tails, dodododododo~
|
||||
- rscadd: The old ones are now listed as carp tails.
|
||||
2021-08-22:
|
||||
zeroisthebiggay:
|
||||
- spellcheck: trillby can't spell pair
|
||||
2021-08-23:
|
||||
zeroisthebiggay:
|
||||
- spellcheck: i hate the grammarchrist
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
author: "Arturlang"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Nanite machinery overlays should now work properly"
|
||||
- code_imp: "screen objects are now atom/movables instead"
|
||||
- code_imp: "Update appearance is used for updating atoms now instead of update_icon and such"
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.7 KiB |
@@ -226,7 +226,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.adjustCloneLoss(-10, 0) //I don't want to make Rezadone obsolete.
|
||||
M.adjustBruteLoss(-25, 0)// Note that this takes a long time to apply and makes you fat and useless when it's in you, I don't think this small burst of healing will be useful considering how long it takes to get there.
|
||||
M.adjustFireLoss(-25, 0)
|
||||
M.blood_volume += 250
|
||||
M.adjust_integration_blood(250)
|
||||
M.heal_bodypart_damage(1,1)
|
||||
M.action_cooldown_mod = 1
|
||||
if (M.nutrition < 1500)
|
||||
@@ -236,7 +236,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
to_chat(M, "<span class='notice'>the cells fail to hold enough mass to generate a clone, instead diffusing into your system.</span>")
|
||||
M.adjustBruteLoss(-10, 0)
|
||||
M.adjustFireLoss(-10, 0)
|
||||
M.blood_volume += 100
|
||||
M.adjust_integration_blood(100)
|
||||
M.action_cooldown_mod = 1
|
||||
if (M.nutrition < 1500)
|
||||
M.adjust_nutrition(500)
|
||||
@@ -309,7 +309,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
|
||||
/datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated)
|
||||
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
|
||||
M.blood_volume += 10
|
||||
M.adjust_integration_blood(10)
|
||||
M.adjustCloneLoss(-2, 0)
|
||||
M.setOrganLoss(ORGAN_SLOT_BRAIN, -1)
|
||||
M.adjust_nutrition(10)
|
||||
|
||||
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 75 KiB |
@@ -58,7 +58,7 @@ fi
|
||||
#Compile and move auxmos binary to repo root
|
||||
echo "Deploying auxmos..."
|
||||
git checkout "$AUXMOS_VERSION"
|
||||
env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks" -- -C target-cpu=native
|
||||
env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features all_reaction_hooks,explosive_decompression -- -C target-cpu=native
|
||||
mv target/i686-unknown-linux-gnu/release/libauxmos.so ../../../../libauxmos.so
|
||||
cd ../..
|
||||
|
||||
|
||||
@@ -6,6 +6,10 @@ shopt -s globstar
|
||||
|
||||
st=0
|
||||
|
||||
if git grep -P "\r\n"; then
|
||||
echo "ERROR: CRLF line endings detected. Please stop using the webeditor, and fix it using a desktop Git client."
|
||||
st = 1
|
||||
fi;
|
||||
if grep -El '^\".+\" = \(.+\)' _maps/**/*.dmm; then
|
||||
echo "ERROR: Non-TGM formatted map detected. Please convert it using Map Merger!"
|
||||
st=1
|
||||
|
||||
@@ -84,7 +84,7 @@ fi
|
||||
|
||||
echo "Deploying auxmos..."
|
||||
git checkout "$AUXMOS_VERSION"
|
||||
env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks" -- -C target-cpu=native
|
||||
env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features all_reaction_hooks,explosive_decompression -- -C target-cpu=native
|
||||
mv -f target/i686-unknown-linux-gnu/release/libauxmos.so "$1/libauxmos.so"
|
||||
cd ..
|
||||
|
||||
|
||||