Merge branch 'tgstation-master'
@@ -159,8 +159,25 @@
|
||||
},
|
||||
/obj/structure/chair/stool,
|
||||
/obj/item/storage/backpack/duffelbag,
|
||||
/obj/item/clothing/under/shorts/red,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"bC" = (
|
||||
/obj/item/reagent_containers/food/drinks/colocup{
|
||||
pixel_x = -7;
|
||||
pixel_y = -2
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/colocup{
|
||||
pixel_x = 5;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/bottle/rum{
|
||||
pixel_x = 4;
|
||||
pixel_y = -3
|
||||
},
|
||||
/turf/open/floor/carpet/red,
|
||||
/area/ruin/powered/beach)
|
||||
"bG" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
@@ -309,6 +326,9 @@
|
||||
},
|
||||
/turf/closed/wall/mineral/sandstone,
|
||||
/area/ruin/powered/beach)
|
||||
"fB" = (
|
||||
/turf/open/floor/plasteel/stairs/medium,
|
||||
/area/ruin/powered/beach)
|
||||
"fL" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
@@ -434,6 +454,7 @@
|
||||
"kd" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/bag/tray,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"kg" = (
|
||||
@@ -511,9 +532,7 @@
|
||||
/turf/open/floor/pod/light,
|
||||
/area/ruin/powered/beach)
|
||||
"oQ" = (
|
||||
/obj/effect/mob_spawn/human/bartender/alive{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/reagent_dispensers/beerkeg,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"oU" = (
|
||||
@@ -624,10 +643,21 @@
|
||||
/turf/closed/wall/mineral/wood/nonmetal,
|
||||
/area/ruin/powered/beach)
|
||||
"sM" = (
|
||||
/obj/structure/reagent_dispensers/beerkeg,
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/secure_closet{
|
||||
icon_state = "cabinet";
|
||||
name = "bartender's closet";
|
||||
req_access = list(25)
|
||||
},
|
||||
/obj/item/clothing/shoes/sandal{
|
||||
desc = "A very fashionable pair of flip-flops.";
|
||||
name = "flip-flops"
|
||||
},
|
||||
/obj/item/clothing/neck/beads,
|
||||
/obj/item/clothing/glasses/sunglasses/reagent,
|
||||
/obj/item/clothing/suit/hawaiian,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"sV" = (
|
||||
@@ -662,6 +692,30 @@
|
||||
/obj/item/disk/plantgene,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/ruin/powered/beach)
|
||||
"tg" = (
|
||||
/obj/structure/closet/crate/freezer{
|
||||
name = "Cooler"
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/ice,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/obj/item/reagent_containers/food/drinks/beer{
|
||||
desc = "Beer advertised to be the best in space.";
|
||||
name = "Masterbrand Beer"
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/beer{
|
||||
desc = "Beer advertised to be the best in space.";
|
||||
name = "Masterbrand Beer"
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/beer{
|
||||
desc = "Beer advertised to be the best in space.";
|
||||
name = "Masterbrand Beer"
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered/beach)
|
||||
"tn" = (
|
||||
/obj/structure/chair/sofa/right,
|
||||
/turf/open/floor/wood,
|
||||
@@ -689,6 +743,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
|
||||
/obj/structure/table/wood/poker,
|
||||
/obj/item/storage/pill_bottle/dice,
|
||||
/obj/item/stack/spacecash/c1000,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"vi" = (
|
||||
@@ -943,7 +998,6 @@
|
||||
/area/ruin/powered/beach)
|
||||
"EE" = (
|
||||
/obj/structure/dresser,
|
||||
/obj/item/storage/backpack/duffelbag,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"EF" = (
|
||||
@@ -1003,6 +1057,8 @@
|
||||
"Ga" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/book/manual/wiki/cooking_to_serve_man,
|
||||
/obj/item/clothing/suit/apron/chef,
|
||||
/obj/item/clothing/head/chefhat,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"GB" = (
|
||||
@@ -1029,7 +1085,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/stairs/old,
|
||||
/turf/open/floor/plasteel/stairs/left,
|
||||
/area/ruin/powered/beach)
|
||||
"HV" = (
|
||||
/turf/open/floor/plating/beach/coastline_b{
|
||||
@@ -1041,10 +1097,30 @@
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/structure/closet/secure_closet/bar,
|
||||
/obj/item/vending_refill/cigarette,
|
||||
/obj/item/vending_refill/boozeomat,
|
||||
/obj/structure/closet/secure_closet{
|
||||
icon_state = "cabinet";
|
||||
name = "booze storage";
|
||||
req_access = list(25)
|
||||
},
|
||||
/obj/item/storage/backpack/duffelbag,
|
||||
/obj/item/etherealballdeployer,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/obj/item/reagent_containers/food/drinks/colocup,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"Il" = (
|
||||
@@ -1065,6 +1141,9 @@
|
||||
},
|
||||
/turf/closed/wall/mineral/sandstone,
|
||||
/area/ruin/powered/beach)
|
||||
"Iv" = (
|
||||
/turf/open/floor/plasteel/stairs/right,
|
||||
/area/ruin/powered/beach)
|
||||
"IG" = (
|
||||
/turf/open/floor/carpet/royalblue,
|
||||
/area/ruin/powered/beach)
|
||||
@@ -1152,11 +1231,6 @@
|
||||
},
|
||||
/turf/closed/wall/mineral/sandstone,
|
||||
/area/ruin/powered/beach)
|
||||
"Mz" = (
|
||||
/obj/effect/turf_decal/sand,
|
||||
/obj/effect/turf_decal/sand,
|
||||
/turf/open/floor/sepia,
|
||||
/area/ruin/powered/beach)
|
||||
"MO" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
@@ -1231,7 +1305,8 @@
|
||||
/area/ruin/powered/beach)
|
||||
"PN" = (
|
||||
/obj/effect/turf_decal/sand,
|
||||
/obj/machinery/jukebox/disco,
|
||||
/obj/machinery/jukebox,
|
||||
/obj/item/coin/gold,
|
||||
/turf/open/floor/sepia,
|
||||
/area/ruin/powered/beach)
|
||||
"PY" = (
|
||||
@@ -1261,11 +1336,16 @@
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"RB" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/reagent_containers/food/drinks/beer{
|
||||
desc = "Beer advertised to be the best in space.";
|
||||
name = "Masterbrand Beer"
|
||||
/obj/structure/closet/cabinet,
|
||||
/obj/item/storage/backpack/duffelbag,
|
||||
/obj/item/clothing/under/shorts/blue,
|
||||
/obj/item/clothing/suit/ianshirt,
|
||||
/obj/item/clothing/shoes/sandal{
|
||||
desc = "A very fashionable pair of flip-flops.";
|
||||
name = "flip-flops"
|
||||
},
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/clothing/neck/beads,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"RE" = (
|
||||
@@ -1302,6 +1382,10 @@
|
||||
/area/ruin/powered/beach)
|
||||
"SZ" = (
|
||||
/obj/item/storage/crayons,
|
||||
/obj/structure/closet/crate/wooden,
|
||||
/obj/item/canvas/twentythreeXtwentythree,
|
||||
/obj/item/canvas/twentythreeXtwentythree,
|
||||
/obj/item/canvas/twentythreeXtwentythree,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered/beach)
|
||||
"Ti" = (
|
||||
@@ -1398,10 +1482,14 @@
|
||||
/turf/closed/wall/mineral/sandstone,
|
||||
/area/ruin/powered/beach)
|
||||
"VL" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/crate{
|
||||
name = "fuel crate"
|
||||
},
|
||||
/obj/item/stack/sheet/mineral/coal/ten,
|
||||
/obj/item/stack/sheet/mineral/coal/ten,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/powered/beach)
|
||||
"VN" = (
|
||||
@@ -1429,6 +1517,19 @@
|
||||
/obj/machinery/computer/arcade/battle,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"Wy" = (
|
||||
/obj/structure/closet/cabinet,
|
||||
/obj/item/storage/backpack/duffelbag,
|
||||
/obj/item/clothing/under/shorts/purple,
|
||||
/obj/item/clothing/suit/vapeshirt,
|
||||
/obj/item/clothing/shoes/cookflops{
|
||||
desc = "A very fashionable pair of flip flops.";
|
||||
name = "flip-flops"
|
||||
},
|
||||
/obj/item/clothing/glasses/sunglasses/big,
|
||||
/obj/item/clothing/neck/beads,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"WF" = (
|
||||
/obj/effect/turf_decal/sand,
|
||||
/mob/living/simple_animal/crab{
|
||||
@@ -1476,6 +1577,9 @@
|
||||
/obj/structure/sign/poster/official/high_class_martini{
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/effect/mob_spawn/human/bartender/alive{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/powered/beach)
|
||||
"ZA" = (
|
||||
@@ -1717,7 +1821,7 @@ xE
|
||||
zT
|
||||
ap
|
||||
ar
|
||||
bM
|
||||
fB
|
||||
lq
|
||||
uz
|
||||
uz
|
||||
@@ -1749,7 +1853,7 @@ ap
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
bM
|
||||
fB
|
||||
lq
|
||||
uz
|
||||
uz
|
||||
@@ -1781,7 +1885,7 @@ ar
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
bM
|
||||
fB
|
||||
lq
|
||||
uz
|
||||
uz
|
||||
@@ -1813,12 +1917,12 @@ ar
|
||||
ar
|
||||
ar
|
||||
DK
|
||||
bM
|
||||
Iv
|
||||
lq
|
||||
lq
|
||||
lq
|
||||
lq
|
||||
lq
|
||||
Mz
|
||||
Fr
|
||||
yc
|
||||
"}
|
||||
@@ -1842,7 +1946,7 @@ QS
|
||||
ar
|
||||
ar
|
||||
ER
|
||||
ar
|
||||
tg
|
||||
ar
|
||||
bR
|
||||
vi
|
||||
@@ -1873,7 +1977,7 @@ RE
|
||||
Uk
|
||||
ar
|
||||
ar
|
||||
Ti
|
||||
bC
|
||||
Ti
|
||||
ar
|
||||
bR
|
||||
@@ -2317,7 +2421,7 @@ aj
|
||||
aj
|
||||
EE
|
||||
aC
|
||||
RB
|
||||
Wy
|
||||
MZ
|
||||
Ut
|
||||
aA
|
||||
|
||||
@@ -352,6 +352,10 @@
|
||||
#define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species)
|
||||
#define COMSIG_SPECIES_LOSS "species_loss" //from datum/species/on_species_loss(): (datum/species/lost_species)
|
||||
|
||||
// /datum/song signals
|
||||
#define COMSIG_SONG_START "song_start" //sent to the instrument when a song starts playing
|
||||
#define COMSIG_SONG_END "song_end" //sent to the instrument when a song stops playing
|
||||
|
||||
/*******Component Specific Signals*******/
|
||||
//Janitor
|
||||
#define COMSIG_TURF_IS_WET "check_turf_wet" //(): Returns bitflags of wet values.
|
||||
|
||||
@@ -44,10 +44,8 @@ Ask ninjanomnom if they're around
|
||||
#define RAD_FULL_INSULATION 0 // Unused
|
||||
|
||||
// WARNING: The defines below could have disastrous consequences if tweaked incorrectly. See: The great SM purge of Oct.6.2017
|
||||
// contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1/(steps*RAD_DISTANCE_COEFFICIENT), 1))
|
||||
// contamination_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
|
||||
#define RAD_MINIMUM_CONTAMINATION 350 // How strong does a radiation wave have to be to contaminate objects
|
||||
#define RAD_CONTAMINATION_CHANCE_COEFFICIENT 0.01 // Higher means higher strength scaling contamination chance
|
||||
#define RAD_CONTAMINATION_STR_COEFFICIENT 0.25 // Higher means higher strength scaling contamination strength
|
||||
#define RAD_DISTANCE_COEFFICIENT 1 // Lower means further rad spread
|
||||
|
||||
|
||||
@@ -17,21 +17,6 @@
|
||||
Therefore, the top right corner (except during admin shenanigans) is at "15,15"
|
||||
*/
|
||||
|
||||
//Lower left, persistent menu
|
||||
#define ui_inventory "WEST:6,SOUTH:5"
|
||||
|
||||
//Middle left indicators
|
||||
#define ui_lingchemdisplay "WEST,CENTER-1:15"
|
||||
#define ui_lingstingdisplay "WEST:6,CENTER-3:11"
|
||||
|
||||
#define ui_devilsouldisplay "WEST:6,CENTER-1:15"
|
||||
|
||||
//Lower center, persistent menu
|
||||
#define ui_sstore1 "CENTER-5:10,SOUTH:5"
|
||||
#define ui_id "CENTER-4:12,SOUTH:5"
|
||||
#define ui_belt "CENTER-3:14,SOUTH:5"
|
||||
#define ui_back "CENTER-2:14,SOUTH:5"
|
||||
|
||||
/proc/ui_hand_position(i) //values based on old hand ui positions (CENTER:-/+16,SOUTH:5)
|
||||
var/x_off = -(!(i % 2))
|
||||
var/y_off = round((i-1) / 2)
|
||||
@@ -46,35 +31,22 @@
|
||||
var/y_off = round((M.held_items.len-1) / 2)
|
||||
return "CENTER+[x_off]:16,SOUTH+[y_off+1]:5"
|
||||
|
||||
//Lower left, persistent menu
|
||||
#define ui_inventory "WEST:6,SOUTH:5"
|
||||
|
||||
//Middle left indicators
|
||||
#define ui_lingchemdisplay "WEST,CENTER-1:15"
|
||||
#define ui_lingstingdisplay "WEST:6,CENTER-3:11"
|
||||
#define ui_devilsouldisplay "WEST:6,CENTER-1:15"
|
||||
|
||||
//Lower center, persistent menu
|
||||
#define ui_sstore1 "CENTER-5:10,SOUTH:5"
|
||||
#define ui_id "CENTER-4:12,SOUTH:5"
|
||||
#define ui_belt "CENTER-3:14,SOUTH:5"
|
||||
#define ui_back "CENTER-2:14,SOUTH:5"
|
||||
#define ui_storage1 "CENTER+1:18,SOUTH:5"
|
||||
#define ui_storage2 "CENTER+2:20,SOUTH:5"
|
||||
|
||||
#define ui_borg_sensor "CENTER-3:16, SOUTH:5" //borgs
|
||||
#define ui_borg_lamp "CENTER-4:16, SOUTH:5" //borgs
|
||||
#define ui_borg_thrusters "CENTER-5:16, SOUTH:5" //borgs
|
||||
#define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs
|
||||
#define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs
|
||||
#define ui_inv3 "CENTER :16,SOUTH:5" //borgs
|
||||
#define ui_borg_module "CENTER+1:16,SOUTH:5" //borgs
|
||||
#define ui_borg_store "CENTER+2:16,SOUTH:5" //borgs
|
||||
#define ui_borg_camera "CENTER+3:21,SOUTH:5" //borgs
|
||||
#define ui_borg_album "CENTER+4:21,SOUTH:5" //borgs
|
||||
#define ui_borg_language_menu "CENTER+4:21,SOUTH+1:5" //borgs
|
||||
|
||||
#define ui_monkey_head "CENTER-5:13,SOUTH:5" //monkey
|
||||
#define ui_monkey_mask "CENTER-4:14,SOUTH:5" //monkey
|
||||
#define ui_monkey_neck "CENTER-3:15,SOUTH:5" //monkey
|
||||
#define ui_monkey_back "CENTER-2:16,SOUTH:5" //monkey
|
||||
|
||||
//#define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien
|
||||
#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien
|
||||
#define ui_alien_language_menu "EAST-3:26,SOUTH:5" //alien
|
||||
|
||||
#define ui_drone_drop "CENTER+1:18,SOUTH:5" //maintenance drones
|
||||
#define ui_drone_pull "CENTER+2:2,SOUTH:5" //maintenance drones
|
||||
#define ui_drone_storage "CENTER-2:14,SOUTH:5" //maintenance drones
|
||||
#define ui_drone_head "CENTER-3:14,SOUTH:5" //maintenance drones
|
||||
|
||||
//Lower right, persistent menu
|
||||
#define ui_drop_throw "EAST-1:28,SOUTH+1:7"
|
||||
#define ui_above_movement "EAST-2:26,SOUTH+1:7"
|
||||
@@ -88,11 +60,6 @@
|
||||
#define ui_language_menu "EAST-4:6,SOUTH:21"
|
||||
#define ui_skill_menu "EAST-4:22,SOUTH:5"
|
||||
|
||||
#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
|
||||
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
|
||||
#define ui_borg_intents "EAST-2:26,SOUTH:5"
|
||||
|
||||
|
||||
//Upper-middle right (alerts)
|
||||
#define ui_alert1 "EAST-1:28,CENTER+5:27"
|
||||
#define ui_alert2 "EAST-1:28,CENTER+4:25"
|
||||
@@ -100,35 +67,68 @@
|
||||
#define ui_alert4 "EAST-1:28,CENTER+2:21"
|
||||
#define ui_alert5 "EAST-1:28,CENTER+1:19"
|
||||
|
||||
|
||||
//Middle right (status indicators)
|
||||
#define ui_healthdoll "EAST-1:28,CENTER-2:13"
|
||||
#define ui_health "EAST-1:28,CENTER-1:15"
|
||||
#define ui_internal "EAST-1:28,CENTER:17"
|
||||
#define ui_mood "EAST-1:28,CENTER-3:10"
|
||||
|
||||
//living
|
||||
//Pop-up inventory
|
||||
#define ui_shoes "WEST+1:8,SOUTH:5"
|
||||
#define ui_iclothing "WEST:6,SOUTH+1:7"
|
||||
#define ui_oclothing "WEST+1:8,SOUTH+1:7"
|
||||
#define ui_gloves "WEST+2:10,SOUTH+1:7"
|
||||
#define ui_glasses "WEST:6,SOUTH+3:11"
|
||||
#define ui_mask "WEST+1:8,SOUTH+2:9"
|
||||
#define ui_ears "WEST+2:10,SOUTH+2:9"
|
||||
#define ui_neck "WEST:6,SOUTH+2:9"
|
||||
#define ui_head "WEST+1:8,SOUTH+3:11"
|
||||
|
||||
//Generic living
|
||||
#define ui_living_pull "EAST-1:28,CENTER-3:15"
|
||||
#define ui_living_health "EAST-1:28,CENTER:15"
|
||||
#define ui_living_healthdoll "EAST-1:28,CENTER-2:13"
|
||||
#define ui_living_healthdoll "EAST-1:28,CENTER-1:15"
|
||||
|
||||
//borgs
|
||||
#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator.
|
||||
//Monkeys
|
||||
#define ui_monkey_head "CENTER-5:13,SOUTH:5"
|
||||
#define ui_monkey_mask "CENTER-4:14,SOUTH:5"
|
||||
#define ui_monkey_neck "CENTER-3:15,SOUTH:5"
|
||||
#define ui_monkey_back "CENTER-2:16,SOUTH:5"
|
||||
|
||||
//aliens
|
||||
#define ui_alien_health "EAST,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator.
|
||||
//Drones
|
||||
#define ui_drone_drop "CENTER+1:18,SOUTH:5"
|
||||
#define ui_drone_pull "CENTER+2:2,SOUTH:5"
|
||||
#define ui_drone_storage "CENTER-2:14,SOUTH:5"
|
||||
#define ui_drone_head "CENTER-3:14,SOUTH:5"
|
||||
|
||||
//Cyborgs
|
||||
#define ui_borg_health "EAST-1:28,CENTER-1:15"
|
||||
#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
|
||||
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
|
||||
#define ui_borg_intents "EAST-2:26,SOUTH:5"
|
||||
#define ui_borg_sensor "CENTER-3:16, SOUTH:5"
|
||||
#define ui_borg_lamp "CENTER-4:16, SOUTH:5"
|
||||
#define ui_borg_thrusters "CENTER-5:16, SOUTH:5"
|
||||
#define ui_inv1 "CENTER-2:16,SOUTH:5"
|
||||
#define ui_inv2 "CENTER-1 :16,SOUTH:5"
|
||||
#define ui_inv3 "CENTER :16,SOUTH:5"
|
||||
#define ui_borg_module "CENTER+1:16,SOUTH:5"
|
||||
#define ui_borg_store "CENTER+2:16,SOUTH:5"
|
||||
#define ui_borg_camera "CENTER+3:21,SOUTH:5"
|
||||
#define ui_borg_album "CENTER+4:21,SOUTH:5"
|
||||
#define ui_borg_language_menu "CENTER+4:21,SOUTH+1:5"
|
||||
|
||||
//Aliens
|
||||
#define ui_alien_health "EAST,CENTER-1:15"
|
||||
#define ui_alienplasmadisplay "EAST,CENTER-2:15"
|
||||
#define ui_alien_queen_finder "EAST,CENTER-3:15"
|
||||
#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"
|
||||
#define ui_alien_language_menu "EAST-3:26,SOUTH:5"
|
||||
|
||||
//constructs
|
||||
//Constructs
|
||||
#define ui_construct_pull "EAST,CENTER-2:15"
|
||||
#define ui_construct_health "EAST,CENTER:15" //same as humans and slimes
|
||||
|
||||
//slimes
|
||||
#define ui_slime_health "EAST,CENTER:15" //same as humans and constructs
|
||||
#define ui_construct_health "EAST,CENTER:15"
|
||||
|
||||
// AI
|
||||
|
||||
#define ui_ai_core "SOUTH:6,WEST"
|
||||
#define ui_ai_camera_list "SOUTH:6,WEST+1"
|
||||
#define ui_ai_track_with_camera "SOUTH:6,WEST+2"
|
||||
@@ -148,7 +148,6 @@
|
||||
#define ui_ai_add_multicam "SOUTH+1:6,WEST+14"
|
||||
|
||||
// pAI
|
||||
|
||||
#define ui_pai_software "SOUTH:6,WEST"
|
||||
#define ui_pai_shell "SOUTH:6,WEST+1"
|
||||
#define ui_pai_chassis "SOUTH:6,WEST+2"
|
||||
@@ -163,21 +162,7 @@
|
||||
#define ui_pai_take_picture "SOUTH:6,WEST+12"
|
||||
#define ui_pai_view_images "SOUTH:6,WEST+13"
|
||||
|
||||
//Pop-up inventory
|
||||
#define ui_shoes "WEST+1:8,SOUTH:5"
|
||||
|
||||
#define ui_iclothing "WEST:6,SOUTH+1:7"
|
||||
#define ui_oclothing "WEST+1:8,SOUTH+1:7"
|
||||
#define ui_gloves "WEST+2:10,SOUTH+1:7"
|
||||
|
||||
#define ui_glasses "WEST:6,SOUTH+3:11"
|
||||
#define ui_mask "WEST+1:8,SOUTH+2:9"
|
||||
#define ui_ears "WEST+2:10,SOUTH+2:9"
|
||||
#define ui_neck "WEST:6,SOUTH+2:9"
|
||||
#define ui_head "WEST+1:8,SOUTH+3:11"
|
||||
|
||||
//Ghosts
|
||||
|
||||
#define ui_ghost_jumptomob "SOUTH:6,CENTER-2:24"
|
||||
#define ui_ghost_orbit "SOUTH:6,CENTER-1:24"
|
||||
#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/hud/lavaland_elite
|
||||
ui_style = 'icons/mob/screen_elite.dmi'
|
||||
|
||||
/datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite)
|
||||
/datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite/owner)
|
||||
..()
|
||||
|
||||
pull_icon = new /obj/screen/pull()
|
||||
@@ -11,6 +11,6 @@
|
||||
pull_icon.hud = src
|
||||
static_inventory += pull_icon
|
||||
|
||||
healths = new /obj/screen/healths/lavaland_elite()
|
||||
healths.hud = src
|
||||
infodisplay += healths
|
||||
healthdoll = new /obj/screen/healthdoll/lavaland_elite()
|
||||
healthdoll.hud = src
|
||||
infodisplay += healthdoll
|
||||
|
||||
@@ -609,21 +609,19 @@
|
||||
|
||||
/obj/screen/healths/blob/naut/core
|
||||
name = "overmind health"
|
||||
screen_loc = ui_health
|
||||
icon_state = "corehealth"
|
||||
screen_loc = ui_health
|
||||
|
||||
/obj/screen/healths/guardian
|
||||
name = "summoner health"
|
||||
icon = 'icons/mob/guardian.dmi'
|
||||
icon_state = "base"
|
||||
screen_loc = ui_living_health
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/screen/healths/revenant
|
||||
name = "essence"
|
||||
icon = 'icons/mob/actions/backgrounds.dmi'
|
||||
icon_state = "bg_revenant"
|
||||
screen_loc = ui_living_health
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/screen/healths/construct
|
||||
@@ -632,18 +630,6 @@
|
||||
screen_loc = ui_construct_health
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/screen/healths/slime
|
||||
icon = 'icons/mob/screen_slime.dmi'
|
||||
icon_state = "slime_health0"
|
||||
screen_loc = ui_slime_health
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/screen/healths/lavaland_elite
|
||||
icon = 'icons/mob/screen_elite.dmi'
|
||||
icon_state = "elite_health0"
|
||||
screen_loc = ui_living_health
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/screen/healthdoll
|
||||
name = "health doll"
|
||||
screen_loc = ui_healthdoll
|
||||
@@ -658,6 +644,16 @@
|
||||
screen_loc = ui_living_healthdoll
|
||||
var/filtered = FALSE //so we don't repeatedly create the mask of the mob every update
|
||||
|
||||
/obj/screen/healthdoll/slime
|
||||
icon = 'icons/mob/screen_slime.dmi'
|
||||
icon_state = "slime_health0"
|
||||
screen_loc = ui_living_healthdoll
|
||||
|
||||
/obj/screen/healthdoll/lavaland_elite
|
||||
icon = 'icons/mob/screen_elite.dmi'
|
||||
icon_state = "elite_health0"
|
||||
screen_loc = ui_living_healthdoll
|
||||
|
||||
/obj/screen/mood
|
||||
name = "mood"
|
||||
icon_state = "mood5"
|
||||
|
||||
@@ -11,6 +11,6 @@
|
||||
pull_icon.hud = src
|
||||
static_inventory += pull_icon
|
||||
|
||||
healths = new /obj/screen/healths/slime()
|
||||
healths.hud = src
|
||||
infodisplay += healths
|
||||
healthdoll = new /obj/screen/healthdoll/slime()
|
||||
healthdoll.hud = src
|
||||
infodisplay += healthdoll
|
||||
|
||||
@@ -272,15 +272,6 @@
|
||||
if(istype(H))
|
||||
H.toggle_welding_screen(owner)
|
||||
|
||||
/datum/action/item_action/toggle_headphones
|
||||
name = "Toggle Headphones"
|
||||
desc = "UNTZ UNTZ UNTZ"
|
||||
|
||||
/datum/action/item_action/toggle_headphones/Trigger()
|
||||
var/obj/item/clothing/ears/headphones/H = target
|
||||
if(istype(H))
|
||||
H.toggle(owner)
|
||||
|
||||
/datum/action/item_action/toggle_unfriendly_fire
|
||||
name = "Toggle Friendly Fire \[ON\]"
|
||||
desc = "Toggles if the club's blasts cause friendly fire."
|
||||
|
||||
@@ -192,15 +192,12 @@
|
||||
|
||||
///Sets sanity to the specified amount and applies effects.
|
||||
/datum/component/mood/proc/setSanity(amount, minimum=SANITY_INSANE, maximum=SANITY_GREAT, override = FALSE)
|
||||
// If we're out of the acceptable minimum-maximum range move back towards it in steps of 0.5
|
||||
// If we're out of the acceptable minimum-maximum range move back towards it in steps of 0.7
|
||||
// If the new amount would move towards the acceptable range faster then use it instead
|
||||
if(amount < minimum)
|
||||
amount += CLAMP(minimum - sanity, 0, 0.7)
|
||||
else
|
||||
if(!override && HAS_TRAIT(parent, TRAIT_UNSTABLE))
|
||||
maximum = sanity
|
||||
if(amount > maximum)
|
||||
amount = min(maximum, sanity)
|
||||
amount += clamp(minimum - amount, 0, 0.7)
|
||||
if((!override && HAS_TRAIT(parent, TRAIT_UNSTABLE)) || amount > maximum)
|
||||
amount = min(sanity, amount)
|
||||
if(amount == sanity) //Prevents stuff from flicking around.
|
||||
return
|
||||
sanity = amount
|
||||
|
||||
@@ -368,17 +368,29 @@
|
||||
|
||||
/datum/mutation/human/extrastun
|
||||
name = "Two Left Feet"
|
||||
desc = "A mutation that replaces the right foot with another left foot. It makes standing up after getting knocked down very difficult."
|
||||
desc = "A mutation that replaces the right foot with another left foot. Symptoms include kissing the floor when taking a step."
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='warning'>Your right foot feels... left.</span>"
|
||||
text_lose_indication = "<span class'notice'>Your right foot feels alright.</span>"
|
||||
difficulty = 16
|
||||
var/stun_cooldown = 0
|
||||
|
||||
/datum/mutation/human/extrastun/on_life()
|
||||
if(world.time > stun_cooldown)
|
||||
if(owner.AmountKnockdown() || owner.AmountStun())
|
||||
owner.SetKnockdown(owner.AmountKnockdown()*2)
|
||||
owner.SetStun(owner.AmountStun()*2)
|
||||
owner.visible_message("<span class='danger'>[owner] tries to stand up, but trips!</span>", "<span class='userdanger'>You trip over your own feet!</span>")
|
||||
stun_cooldown = world.time + 300
|
||||
/datum/mutation/human/extrastun/on_acquiring()
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/on_move)
|
||||
|
||||
/datum/mutation/human/extrastun/on_losing()
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
///Triggers on moved(). Randomly makes the owner trip
|
||||
/datum/mutation/human/extrastun/proc/on_move()
|
||||
if(prob(99.5)) //The brawl mutation
|
||||
return
|
||||
if(owner.buckled || owner.lying || !((owner.mobility_flags & (MOBILITY_STAND | MOBILITY_MOVE)) == (MOBILITY_STAND | MOBILITY_MOVE)) || owner.throwing || owner.movement_type & (VENTCRAWLING | FLYING | FLOATING))
|
||||
return //remove the 'edge' cases
|
||||
to_chat(owner, "<span class='danger'>You trip over your own feet.</span>")
|
||||
owner.Knockdown(30)
|
||||
|
||||
@@ -1,11 +1,21 @@
|
||||
/datum/radiation_wave
|
||||
/// The thing that spawned this radiation wave
|
||||
var/source
|
||||
var/turf/master_turf //The center of the wave
|
||||
var/steps=0 //How far we've moved
|
||||
var/intensity //How strong it was originaly
|
||||
var/range_modifier //Higher than 1 makes it drop off faster, 0.5 makes it drop off half etc
|
||||
var/move_dir //The direction of movement
|
||||
var/list/__dirs //The directions to the side of the wave, stored for easy looping
|
||||
/// The center of the wave
|
||||
var/turf/master_turf
|
||||
/// How far we've moved
|
||||
var/steps=0
|
||||
/// How strong it was originaly
|
||||
var/intensity
|
||||
/// How much contaminated material it still has
|
||||
var/remaining_contam
|
||||
/// Higher than 1 makes it drop off faster, 0.5 makes it drop off half etc
|
||||
var/range_modifier
|
||||
/// The direction of movement
|
||||
var/move_dir
|
||||
/// The directions to the side of the wave, stored for easy looping
|
||||
var/list/__dirs
|
||||
/// Whether or not this radiation wave can create contaminated objects
|
||||
var/can_contaminate
|
||||
|
||||
/datum/radiation_wave/New(atom/_source, dir, _intensity=0, _range_modifier=RAD_DISTANCE_COEFFICIENT, _can_contaminate=TRUE)
|
||||
@@ -20,6 +30,7 @@
|
||||
__dirs+=turn(dir, -90)
|
||||
|
||||
intensity = _intensity
|
||||
remaining_contam = intensity
|
||||
range_modifier = _range_modifier
|
||||
can_contaminate = _can_contaminate
|
||||
|
||||
@@ -47,9 +58,7 @@
|
||||
if(strength<RAD_BACKGROUND_RADIATION)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
radiate(atoms, FLOOR(strength, 1))
|
||||
|
||||
radiate(atoms, strength)
|
||||
check_obstructions(atoms) // reduce our overall strength if there are radiation insulators
|
||||
|
||||
/datum/radiation_wave/proc/get_rad_atoms()
|
||||
@@ -91,10 +100,14 @@
|
||||
intensity *= (1-((1-thing.rad_insulation)/width))
|
||||
|
||||
/datum/radiation_wave/proc/radiate(list/atoms, strength)
|
||||
var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier))
|
||||
for(var/k in 1 to atoms.len)
|
||||
var/atom/thing = atoms[k]
|
||||
if(!thing)
|
||||
var/can_contam = strength >= RAD_MINIMUM_CONTAMINATION
|
||||
var/contamination_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
|
||||
contamination_strength = max(contamination_strength, RAD_BACKGROUND_RADIATION)
|
||||
// It'll never reach 100% chance but the further out it gets the more likely it'll contaminate
|
||||
var/contamination_chance = 100 - (90 / (1 + steps * 0.1))
|
||||
for(var/k in atoms)
|
||||
var/atom/thing = k
|
||||
if(QDELETED(thing))
|
||||
continue
|
||||
thing.rad_act(strength)
|
||||
|
||||
@@ -110,10 +123,18 @@
|
||||
/obj/item/implant,
|
||||
/obj/singularity
|
||||
))
|
||||
if(!can_contaminate || blacklisted[thing.type])
|
||||
if(!can_contaminate || !can_contam || blacklisted[thing.type])
|
||||
continue
|
||||
if(prob(contamination_chance)) // Only stronk rads get to have little baby rads
|
||||
if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
|
||||
continue
|
||||
var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
|
||||
thing.AddComponent(/datum/component/radioactive, rad_strength, source)
|
||||
if(thing.rad_flags & RAD_NO_CONTAMINATE || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
|
||||
continue
|
||||
|
||||
if(contamination_strength > remaining_contam)
|
||||
contamination_strength = remaining_contam
|
||||
if(!prob(contamination_chance))
|
||||
continue
|
||||
if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
|
||||
continue
|
||||
remaining_contam -= contamination_strength
|
||||
if(remaining_contam < RAD_BACKGROUND_RADIATION)
|
||||
can_contaminate = FALSE
|
||||
thing.AddComponent(/datum/component/radioactive, contamination_strength, source)
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
/obj/machinery/medipen_refiller
|
||||
name = "Medipen Refiller"
|
||||
desc = "A machine that refills used medipens with chemicals."
|
||||
icon = 'icons/obj/machines/medipen_refiller.dmi'
|
||||
icon_state = "medipen_refiller"
|
||||
density = TRUE
|
||||
circuit = /obj/item/circuitboard/machine/medipen_refiller
|
||||
idle_power_usage = 100
|
||||
/// list of medipen subtypes it can refill
|
||||
var/list/allowed = list(/obj/item/reagent_containers/hypospray/medipen = /datum/reagent/medicine/epinephrine,
|
||||
/obj/item/reagent_containers/hypospray/medipen/atropine = /datum/reagent/medicine/atropine,
|
||||
/obj/item/reagent_containers/hypospray/medipen/salbutamol = /datum/reagent/medicine/salbutamol,
|
||||
/obj/item/reagent_containers/hypospray/medipen/oxandrolone = /datum/reagent/medicine/oxandrolone,
|
||||
/obj/item/reagent_containers/hypospray/medipen/salacid = /datum/reagent/medicine/sal_acid,
|
||||
/obj/item/reagent_containers/hypospray/medipen/penacid = /datum/reagent/medicine/pen_acid)
|
||||
/// var to prevent glitches in the animation
|
||||
var/busy = FALSE
|
||||
|
||||
/obj/machinery/medipen_refiller/Initialize()
|
||||
. = ..()
|
||||
create_reagents(100, TRANSPARENT)
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
reagents.maximum_volume += 100 * B.rating
|
||||
AddComponent(/datum/component/plumbing/simple_demand)
|
||||
|
||||
|
||||
/obj/machinery/medipen_refiller/RefreshParts()
|
||||
var/new_volume = 100
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
new_volume += 100 * B.rating
|
||||
if(!reagents)
|
||||
create_reagents(new_volume, TRANSPARENT)
|
||||
reagents.maximum_volume = new_volume
|
||||
return TRUE
|
||||
|
||||
/// handles the messages and animation, calls refill to end the animation
|
||||
/obj/machinery/medipen_refiller/attackby(obj/item/I, mob/user, params)
|
||||
if(busy)
|
||||
to_chat(user, "<span class='danger'>The machine is busy.</span>")
|
||||
return
|
||||
if(istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
var/obj/item/reagent_containers/RC = I
|
||||
var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this, transfered_by = user)
|
||||
if(units)
|
||||
to_chat(user, "<span class='notice'>You transfer [units] units of the solution to the [name].</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='danger'>The [name] is full.</span>")
|
||||
return
|
||||
if(istype(I, /obj/item/reagent_containers/hypospray/medipen))
|
||||
var/obj/item/reagent_containers/hypospray/medipen/P = I
|
||||
if(!(LAZYFIND(allowed, P.type)))
|
||||
to_chat(user, "<span class='danger'>Error! Unknown schematics.</span>")
|
||||
return
|
||||
if(P.reagents?.reagent_list.len)
|
||||
to_chat(user, "<span class='notice'>The medipen is already filled.</span>")
|
||||
return
|
||||
if(reagents.has_reagent(allowed[P.type], 10))
|
||||
busy = TRUE
|
||||
add_overlay("active")
|
||||
addtimer(CALLBACK(src, .proc/refill, P, user), 20)
|
||||
qdel(P)
|
||||
return
|
||||
to_chat(user, "<span class='danger'>There aren't enough reagents to finish this operation.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/machinery/medipen_refiller/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
|
||||
to_chat(user, "<span class='notice'>You start furiously plunging [name].")
|
||||
if(do_after(user, 30, target = src))
|
||||
to_chat(user, "<span class='notice'>You finish plunging the [name].")
|
||||
reagents.reaction(get_turf(src), TOUCH)
|
||||
reagents.clear_reagents()
|
||||
|
||||
/obj/machinery/medipen_refiller/wrench_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
default_unfasten_wrench(user, I)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/medipen_refiller/crowbar_act(mob/user, obj/item/I)
|
||||
..()
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/medipen_refiller/screwdriver_act(mob/living/user, obj/item/I)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return default_deconstruction_screwdriver(user, "medipen_refiller_open", "medipen_refiller", I)
|
||||
|
||||
/// refills the medipen
|
||||
/obj/machinery/medipen_refiller/proc/refill(obj/item/reagent_containers/hypospray/medipen/P, mob/user)
|
||||
new P.type(loc)
|
||||
reagents.remove_reagent(allowed[P.type], 10)
|
||||
cut_overlays()
|
||||
busy = FALSE
|
||||
to_chat(user, "<span class='notice'>Medipen refilled.</span>")
|
||||
@@ -26,10 +26,11 @@
|
||||
name = "\improper Dark Gygax"
|
||||
icon_state = "darkgygax"
|
||||
max_integrity = 300
|
||||
deflect_chance = 15
|
||||
deflect_chance = 20
|
||||
armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" =20, "fire" = 100, "acid" = 100)
|
||||
max_temperature = 35000
|
||||
leg_overload_coeff = 70
|
||||
force = 30
|
||||
operation_req_access = list(ACCESS_SYNDICATE)
|
||||
internals_req_access = list(ACCESS_SYNDICATE)
|
||||
wreckage = /obj/structure/mecha_wreckage/gygax/dark
|
||||
@@ -40,11 +41,11 @@
|
||||
. = ..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src)
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/teleporter
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
|
||||
ME.attach(src)
|
||||
@@ -55,7 +56,7 @@
|
||||
C.forceMove(src)
|
||||
cell = C
|
||||
return
|
||||
cell = new /obj/item/stock_parts/cell/hyper(src)
|
||||
cell = new /obj/item/stock_parts/cell/bluespace(src)
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/GrantActions(mob/living/user, human_occupant = 0)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
name = "salt pile"
|
||||
desc = "A sizable pile of table salt. Someone must be upset."
|
||||
icon_state = "salt_pile"
|
||||
var/safepasses = 3 //how many times can this salt pile be passed before dissipating
|
||||
|
||||
/obj/effect/decal/cleanable/food/salt/CanAllowThrough(atom/movable/AM, turf/target)
|
||||
. = ..()
|
||||
@@ -41,6 +42,18 @@
|
||||
if(is_species(AM, /datum/species/snail))
|
||||
to_chat(AM, "<span class='danger'>Your path is obstructed by <span class='phobia'>salt</span>.</span>")
|
||||
|
||||
/obj/effect/decal/cleanable/food/salt/Crossed(atom/movable/AM)
|
||||
..()
|
||||
if(!isliving(AM))
|
||||
return
|
||||
if(iscarbon(AM))
|
||||
var/mob/living/carbon/C = AM
|
||||
if(C.m_intent == MOVE_INTENT_WALK)
|
||||
return
|
||||
safepasses--
|
||||
if(safepasses <= 0 && !QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/food/flour
|
||||
name = "flour"
|
||||
desc = "It's still good. Four second rule!"
|
||||
|
||||
@@ -758,6 +758,13 @@
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/medipen_refiller
|
||||
name = "Medipen Refiller (Machine Board)"
|
||||
icon_state = "medical"
|
||||
build_path = /obj/machinery/medipen_refiller
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/techfab/department/medical
|
||||
name = "\improper Departmental Techfab (Machine Board) - Medical"
|
||||
icon_state = "medical"
|
||||
|
||||
@@ -10,10 +10,11 @@
|
||||
var/datum/song/handheld/song
|
||||
var/instrumentId = "generic"
|
||||
var/instrumentExt = "mid"
|
||||
var/instrumentRange = 15
|
||||
|
||||
/obj/item/instrument/Initialize()
|
||||
. = ..()
|
||||
song = new(instrumentId, src, instrumentExt)
|
||||
song = new(instrumentId, src, instrumentExt, instrumentRange)
|
||||
|
||||
/obj/item/instrument/Destroy()
|
||||
QDEL_NULL(song)
|
||||
@@ -44,6 +45,12 @@
|
||||
user.set_machine(src)
|
||||
song.interact(user)
|
||||
|
||||
/obj/item/instrument/proc/start_playing()
|
||||
return
|
||||
|
||||
/obj/item/instrument/proc/stop_playing()
|
||||
return
|
||||
|
||||
/obj/item/instrument/violin
|
||||
name = "space violin"
|
||||
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
||||
@@ -79,6 +86,34 @@
|
||||
return
|
||||
return changeInstrument(chosen)
|
||||
|
||||
/obj/item/instrument/piano_synth/headphones
|
||||
name = "headphones"
|
||||
desc = "Unce unce unce unce. Boop!"
|
||||
icon = 'icons/obj/clothing/accessories.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
|
||||
icon_state = "headphones"
|
||||
item_state = "headphones"
|
||||
slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD
|
||||
force = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
custom_price = 125
|
||||
instrumentRange = 1
|
||||
|
||||
/obj/item/instrument/piano_synth/headphones/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/update_icon_updates_onmob)
|
||||
RegisterSignal(src, COMSIG_SONG_START, .proc/start_playing)
|
||||
RegisterSignal(src, COMSIG_SONG_END, .proc/stop_playing)
|
||||
|
||||
/obj/item/instrument/piano_synth/headphones/start_playing()
|
||||
icon_state = "[initial(icon_state)]_on"
|
||||
update_icon()
|
||||
|
||||
/obj/item/instrument/piano_synth/headphones/stop_playing()
|
||||
icon_state = "[initial(icon_state)]"
|
||||
update_icon()
|
||||
|
||||
/obj/item/instrument/banjo
|
||||
name = "banjo"
|
||||
desc = "A 'Mura' brand banjo. It's pretty much just a drum with a neck and strings."
|
||||
@@ -266,7 +301,8 @@
|
||||
/obj/item/instrument/saxophone,
|
||||
/obj/item/instrument/trombone,
|
||||
/obj/item/instrument/recorder,
|
||||
/obj/item/instrument/harmonica
|
||||
/obj/item/instrument/harmonica,
|
||||
/obj/item/instrument/piano_synth/headphones
|
||||
)
|
||||
for(var/V in templist)
|
||||
var/atom/A = V
|
||||
|
||||
@@ -181,3 +181,10 @@
|
||||
/obj/item/inducer/sci/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/inducer/syndicate
|
||||
icon_state = "inducer-syndi"
|
||||
item_state = "inducer-syndi"
|
||||
desc = "A tool for inductively charging internal power cells. This one has a suspicious colour scheme, and seems to be rigged to transfer charge at a much faster rate."
|
||||
powertransfer = 2000
|
||||
cell_type = /obj/item/stock_parts/cell/super
|
||||
|
||||
@@ -508,16 +508,15 @@
|
||||
for(var/i in 1 to 9)
|
||||
new /obj/item/ammo_box/magazine/smgm45(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech
|
||||
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax/PopulateContents()
|
||||
new /obj/item/mecha_ammo/incendiary(src)
|
||||
new /obj/item/mecha_ammo/incendiary(src)
|
||||
new /obj/item/mecha_ammo/incendiary(src)
|
||||
new /obj/item/mecha_ammo/flashbang(src)
|
||||
new /obj/item/mecha_ammo/flashbang(src)
|
||||
new /obj/item/mecha_ammo/flashbang(src)
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech/PopulateContents()
|
||||
new /obj/item/mecha_ammo/scattershot(src)
|
||||
new /obj/item/mecha_ammo/scattershot(src)
|
||||
new /obj/item/mecha_ammo/scattershot(src)
|
||||
new /obj/item/mecha_ammo/scattershot(src)
|
||||
new /obj/item/storage/belt/utility/syndicate(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler
|
||||
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
|
||||
|
||||
@@ -111,6 +111,15 @@
|
||||
new /obj/item/t_scanner(src)
|
||||
new /obj/item/extinguisher/mini(src)
|
||||
|
||||
/obj/item/storage/belt/utility/syndicate/PopulateContents()
|
||||
new /obj/item/screwdriver/nuke(src)
|
||||
new /obj/item/wrench/combat(src)
|
||||
new /obj/item/weldingtool/largetank(src)
|
||||
new /obj/item/crowbar(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/inducer/syndicate(src)
|
||||
|
||||
/obj/item/storage/belt/medical
|
||||
name = "medical belt"
|
||||
desc = "Can hold various medical equipment."
|
||||
|
||||
@@ -74,3 +74,46 @@
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "wrench_cyborg"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/wrench/combat
|
||||
name = "combat wrench"
|
||||
desc = "It's like a normal wrench but edgier. Can be found on the battlefield."
|
||||
icon_state = "wrench_combat"
|
||||
item_state = "wrench_combat"
|
||||
attack_verb = list("devastated", "brutalized", "committed a war crime against", "obliterated", "humiliated")
|
||||
tool_behaviour = null
|
||||
toolspeed = null
|
||||
var/on = FALSE
|
||||
|
||||
/obj/item/wrench/combat/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/update_icon_updates_onmob)
|
||||
|
||||
/obj/item/wrench/combat/attack_self(mob/living/user)
|
||||
if(on)
|
||||
on = FALSE
|
||||
force = initial(force)
|
||||
w_class = initial(w_class)
|
||||
throwforce = initial(throwforce)
|
||||
tool_behaviour = initial(tool_behaviour)
|
||||
toolspeed = initial(toolspeed)
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 5, TRUE)
|
||||
to_chat(user, "<span class='warning'>[src] can now be kept at bay.</span>")
|
||||
else
|
||||
on = TRUE
|
||||
force = 6
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
throwforce = 8
|
||||
tool_behaviour = TOOL_WRENCH
|
||||
toolspeed = 1
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 5, TRUE)
|
||||
to_chat(user, "<span class='warning'>[src] is now active. Woe onto your enemies!</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/wrench/combat/update_icon_state()
|
||||
if(on)
|
||||
icon_state = "[initial(icon_state)]_on"
|
||||
item_state = "[initial(item_state)]1"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]"
|
||||
item_state = "[initial(item_state)]"
|
||||
|
||||
@@ -16,15 +16,17 @@
|
||||
|
||||
var/instrumentDir = "piano" // the folder with the sounds
|
||||
var/instrumentExt = "ogg" // the file extension
|
||||
var/instrumentRange = 15 // how far the sound can be heard
|
||||
var/obj/instrumentObj = null // the associated obj playing the sound
|
||||
var/last_hearcheck = 0
|
||||
var/list/hearing_mobs
|
||||
|
||||
/datum/song/New(dir, obj, ext = "ogg")
|
||||
/datum/song/New(dir, obj, ext = "ogg", range)
|
||||
tempo = sanitize_tempo(tempo)
|
||||
instrumentDir = dir
|
||||
instrumentObj = obj
|
||||
instrumentExt = ext
|
||||
instrumentRange = range
|
||||
|
||||
/datum/song/Destroy()
|
||||
instrumentObj = null
|
||||
@@ -66,7 +68,7 @@
|
||||
var/turf/source = get_turf(instrumentObj)
|
||||
if((world.time - MUSICIAN_HEARCHECK_MINDELAY) > last_hearcheck)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/M in get_hearers_in_view(15, source))
|
||||
for(var/mob/M in get_hearers_in_view(instrumentRange, source))
|
||||
LAZYADD(hearing_mobs, M)
|
||||
last_hearcheck = world.time
|
||||
|
||||
@@ -104,8 +106,7 @@
|
||||
var/list/notes = splittext(beat, "/")
|
||||
for(var/note in splittext(notes[1], "-"))
|
||||
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
|
||||
playing = FALSE
|
||||
hearing_mobs = null
|
||||
toggle_playing(user, FALSE)
|
||||
return
|
||||
if(!length(note))
|
||||
continue
|
||||
@@ -138,8 +139,7 @@
|
||||
else
|
||||
sleep(tempo)
|
||||
repeat--
|
||||
hearing_mobs = null
|
||||
playing = FALSE
|
||||
toggle_playing(user, FALSE)
|
||||
repeat = 0
|
||||
updateDialog(user)
|
||||
|
||||
@@ -270,8 +270,7 @@
|
||||
tempo = sanitize_tempo(tempo + text2num(href_list["tempo"]))
|
||||
|
||||
else if(href_list["play"])
|
||||
playing = TRUE
|
||||
INVOKE_ASYNC(src, .proc/playsong, usr)
|
||||
toggle_playing(usr, TRUE)
|
||||
|
||||
else if(href_list["newline"])
|
||||
var/newline = html_encode(input("Enter your line: ", instrumentObj.name) as text|null)
|
||||
@@ -299,8 +298,7 @@
|
||||
lines[num] = content
|
||||
|
||||
else if(href_list["stop"])
|
||||
playing = FALSE
|
||||
hearing_mobs = null
|
||||
toggle_playing(usr, FALSE)
|
||||
|
||||
updateDialog(usr)
|
||||
return
|
||||
@@ -309,6 +307,15 @@
|
||||
new_tempo = abs(new_tempo)
|
||||
return max(round(new_tempo, world.tick_lag), world.tick_lag)
|
||||
|
||||
/datum/song/proc/toggle_playing(user, new_play_state)
|
||||
playing = new_play_state
|
||||
if(playing)
|
||||
INVOKE_ASYNC(src, .proc/playsong, user)
|
||||
SEND_SIGNAL(instrumentObj, COMSIG_SONG_START)
|
||||
else
|
||||
hearing_mobs = null
|
||||
SEND_SIGNAL(instrumentObj, COMSIG_SONG_END)
|
||||
|
||||
// subclass for handheld instruments, like violin
|
||||
/datum/song/handheld
|
||||
|
||||
@@ -321,7 +328,6 @@
|
||||
else
|
||||
return TRUE
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,10 @@
|
||||
icon_state = "infrared"
|
||||
custom_materials = list(/datum/material/iron=1000, /datum/material/glass=500)
|
||||
is_position_sensitive = TRUE
|
||||
|
||||
drop_sound = 'sound/items/handling/component_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/component_pickup.ogg'
|
||||
var/ui_x = 225
|
||||
var/ui_y = 110
|
||||
var/on = FALSE
|
||||
var/visible = FALSE
|
||||
var/maxlength = 8
|
||||
@@ -12,8 +15,6 @@
|
||||
var/olddir = 0
|
||||
var/turf/listeningTo
|
||||
var/hearing_range = 3
|
||||
drop_sound = 'sound/items/handling/component_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/component_pickup.ogg'
|
||||
|
||||
/obj/item/assembly/infra/Initialize()
|
||||
. = ..()
|
||||
@@ -45,7 +46,7 @@
|
||||
|
||||
/obj/item/assembly/infra/activate()
|
||||
if(!..())
|
||||
return FALSE//Cooldown check
|
||||
return FALSE //Cooldown check
|
||||
on = !on
|
||||
refreshBeam()
|
||||
update_icon()
|
||||
@@ -183,54 +184,53 @@
|
||||
return
|
||||
return refreshBeam()
|
||||
|
||||
/obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel
|
||||
. = ..()
|
||||
if(is_secured(user))
|
||||
user.set_machine(src)
|
||||
var/dat = "<TT><B>Infrared Laser</B></TT>"
|
||||
dat += "<BR><B>Status</B>: [on ? "<A href='?src=[REF(src)];state=0'>On</A>" : "<A href='?src=[REF(src)];state=1'>Off</A>"]"
|
||||
dat += "<BR><B>Visibility</B>: [visible ? "<A href='?src=[REF(src)];visible=0'>Visible</A>" : "<A href='?src=[REF(src)];visible=1'>Invisible</A>"]"
|
||||
dat += "<BR><BR><A href='?src=[REF(src)];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=[REF(src)];close=1'>Close</A>"
|
||||
user << browse(dat, "window=infra")
|
||||
onclose(user, "infra")
|
||||
return
|
||||
|
||||
/obj/item/assembly/infra/Topic(href, href_list)
|
||||
..()
|
||||
if(!usr.canUseTopic(src, BE_CLOSE))
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
|
||||
if(href_list["state"])
|
||||
on = !(on)
|
||||
update_icon()
|
||||
refreshBeam()
|
||||
if(href_list["visible"])
|
||||
visible = !(visible)
|
||||
update_icon()
|
||||
refreshBeam()
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=infra")
|
||||
return
|
||||
if(usr)
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/assembly/infra/setDir()
|
||||
. = ..()
|
||||
refreshBeam()
|
||||
|
||||
/obj/item/assembly/infra/ui_status(mob/user)
|
||||
if(is_secured(user))
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/item/assembly/infra/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "infrared_emitter", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/assembly/infra/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["on"] = on
|
||||
data["visible"] = visible
|
||||
return data
|
||||
|
||||
/obj/item/assembly/infra/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("power")
|
||||
on = !on
|
||||
. = TRUE
|
||||
if("visibility")
|
||||
visible = !visible
|
||||
. = TRUE
|
||||
|
||||
update_icon()
|
||||
refreshBeam()
|
||||
|
||||
/***************************IBeam*********************************/
|
||||
|
||||
/obj/effect/beam/i_beam
|
||||
name = "infrared beam"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "ibeam"
|
||||
var/obj/item/assembly/infra/master
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW
|
||||
var/obj/item/assembly/infra/master
|
||||
|
||||
/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj)
|
||||
if(istype(AM, /obj/effect/beam))
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
icon_state = "prox"
|
||||
custom_materials = list(/datum/material/iron=800, /datum/material/glass=200)
|
||||
attachable = TRUE
|
||||
|
||||
drop_sound = 'sound/items/handling/component_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/component_pickup.ogg'
|
||||
var/ui_x = 250
|
||||
var/ui_y = 185
|
||||
var/scanning = FALSE
|
||||
var/timing = FALSE
|
||||
var/time = 10
|
||||
var/sensitivity = 1
|
||||
var/hearing_range = 3
|
||||
drop_sound = 'sound/items/handling/component_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/component_pickup.ogg'
|
||||
|
||||
|
||||
/obj/item/assembly/prox_sensor/Initialize()
|
||||
. = ..()
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
/obj/item/assembly/prox_sensor/activate()
|
||||
if(!..())
|
||||
return FALSE//Cooldown check
|
||||
return FALSE //Cooldown check
|
||||
if(!scanning)
|
||||
timing = !timing
|
||||
else
|
||||
@@ -44,7 +44,6 @@
|
||||
else
|
||||
proximity_monitor.SetHost(src,src)
|
||||
|
||||
|
||||
/obj/item/assembly/prox_sensor/toggle_secure()
|
||||
secured = !secured
|
||||
if(!secured)
|
||||
@@ -59,8 +58,6 @@
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
|
||||
|
||||
/obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/effect/beam))
|
||||
return
|
||||
@@ -78,7 +75,6 @@
|
||||
next_activate = world.time + 30
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/assembly/prox_sensor/process()
|
||||
if(!timing)
|
||||
return
|
||||
@@ -114,49 +110,48 @@
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/assembly/prox_sensor/ui_interact(mob/user)//TODO: Change this to the wires thingy
|
||||
. = ..()
|
||||
/obj/item/assembly/prox_sensor/ui_status(mob/user)
|
||||
if(is_secured(user))
|
||||
var/second = time % 60
|
||||
var/minute = (time - second) / 60
|
||||
var/dat = "<TT><B>Proximity Sensor</B></TT>"
|
||||
if(!scanning)
|
||||
dat += "<BR>[(timing ? "<A href='?src=[REF(src)];time=0'>Arming</A>" : "<A href='?src=[REF(src)];time=1'>Not Arming</A>")] [minute]:[second]"
|
||||
dat += "<BR><A href='?src=[REF(src)];tp=-30'>-</A> <A href='?src=[REF(src)];tp=-1'>-</A> <A href='?src=[REF(src)];tp=1'>+</A> <A href='?src=[REF(src)];tp=30'>+</A>"
|
||||
dat += "<BR><A href='?src=[REF(src)];scanning=[scanning?"0'>Armed":"1'>Unarmed (Movement sensor active when armed!)"]</A>"
|
||||
dat += "<BR>Detection range: <A href='?src=[REF(src)];sense=down'>-</A> [sensitivity] <A href='?src=[REF(src)];sense=up'>+</A>"
|
||||
dat += "<BR><BR><A href='?src=[REF(src)];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=[REF(src)];close=1'>Close</A>"
|
||||
user << browse(dat, "window=prox")
|
||||
onclose(user, "prox")
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/item/assembly/prox_sensor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "proximity_sensor", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/assembly/prox_sensor/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/time_left = time
|
||||
data["seconds"] = round(time_left % 60)
|
||||
data["minutes"] = round((time_left - data["seconds"]) / 60)
|
||||
data["timing"] = timing
|
||||
data["scanning"] = scanning
|
||||
data["sensitivity"] = sensitivity
|
||||
return data
|
||||
|
||||
/obj/item/assembly/prox_sensor/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
|
||||
/obj/item/assembly/prox_sensor/Topic(href, href_list)
|
||||
..()
|
||||
if(!usr.canUseTopic(src, BE_CLOSE))
|
||||
usr << browse(null, "window=prox")
|
||||
onclose(usr, "prox")
|
||||
return
|
||||
|
||||
if(href_list["sense"])
|
||||
sensitivity_change(((href_list["sense"] == "up") ? 1 : -1))
|
||||
|
||||
if(href_list["scanning"])
|
||||
toggle_scan(text2num(href_list["scanning"]))
|
||||
|
||||
if(href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
update_icon()
|
||||
|
||||
if(href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 600)
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
|
||||
if(usr)
|
||||
attack_self(usr)
|
||||
switch(action)
|
||||
if("scanning")
|
||||
toggle_scan(!scanning)
|
||||
. = TRUE
|
||||
if("sense")
|
||||
var/value = text2num(params["range"])
|
||||
if(value)
|
||||
sensitivity_change(value)
|
||||
. = TRUE
|
||||
if("time")
|
||||
timing = !timing
|
||||
update_icon()
|
||||
. = TRUE
|
||||
if("input")
|
||||
var/value = text2num(params["adjust"])
|
||||
if(value)
|
||||
var/newtime = round(time+value)
|
||||
time = CLAMP(newtime, 0, 600)
|
||||
. = TRUE
|
||||
|
||||
@@ -39,36 +39,3 @@
|
||||
item_state = "spacepods"
|
||||
strip_delay = 100 //air pods don't fall out
|
||||
custom_premium_price = 1800
|
||||
|
||||
/obj/item/clothing/ears/headphones
|
||||
name = "headphones"
|
||||
desc = "Unce unce unce unce. Boop!"
|
||||
icon = 'icons/obj/clothing/accessories.dmi'
|
||||
icon_state = "headphones"
|
||||
item_state = "headphones"
|
||||
slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
|
||||
actions_types = list(/datum/action/item_action/toggle_headphones)
|
||||
var/headphones_on = FALSE
|
||||
custom_price = 125
|
||||
|
||||
/obj/item/clothing/ears/headphones/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/ears/headphones/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/update_icon_updates_onmob)
|
||||
|
||||
/obj/item/clothing/ears/headphones/update_icon_state()
|
||||
icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
|
||||
item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]"
|
||||
|
||||
/obj/item/clothing/ears/headphones/proc/toggle(owner)
|
||||
headphones_on = !headphones_on
|
||||
update_icon()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
H.update_inv_ears()
|
||||
H.update_inv_neck()
|
||||
H.update_inv_head()
|
||||
to_chat(owner, "<span class='notice'>You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]</span>")
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
|
||||
|
||||
/obj/item/clothing/head/hardhat/weldhat
|
||||
name = "welding hard hat"
|
||||
|
||||
@@ -766,3 +766,9 @@
|
||||
icon_state = "capformal"
|
||||
item_state = "capspacesuit"
|
||||
armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
|
||||
/obj/item/clothing/suit/hawaiian
|
||||
name = "hawaiian overshirt"
|
||||
desc = "A cool shirt for chilling on the beach."
|
||||
icon_state = "hawaiian_blue"
|
||||
item_state = "hawaiian_blue"
|
||||
|
||||
@@ -99,13 +99,13 @@
|
||||
if(..())
|
||||
if(prob(50))
|
||||
user.Paralyze(100)
|
||||
to_chat(user, "<span class='userdanger'>You are stunned by the Deathnettle as you try picking it up!</span>")
|
||||
to_chat(user, "<span class='userdanger'>You are stunned by [src] as you try picking it up!</span>")
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/nettle/death/attack(mob/living/carbon/M, mob/user)
|
||||
if(!..())
|
||||
return
|
||||
if(isliving(M))
|
||||
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
|
||||
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of [src]!</span>")
|
||||
log_combat(user, M, "attacked", src)
|
||||
|
||||
M.adjust_blurriness(force/7)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#define TRAY_NAME_UPDATE name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name)
|
||||
|
||||
/obj/machinery/hydroponics
|
||||
name = "hydroponics tray"
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
@@ -90,7 +92,6 @@
|
||||
|
||||
return connected
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/bullet_act(obj/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(!myseed)
|
||||
return ..()
|
||||
@@ -388,12 +389,7 @@
|
||||
pestlevel = 0 // Reset
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>The [oldPlantName] is overtaken by some [myseed.plantname]!</span>")
|
||||
name = "hydroponics tray ([myseed.plantname])"
|
||||
if(myseed.product)
|
||||
desc = initial(myseed.product.desc)
|
||||
else
|
||||
desc = initial(desc)
|
||||
|
||||
TRAY_NAME_UPDATE
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) // Mutates the current seed
|
||||
if(!myseed)
|
||||
@@ -427,12 +423,7 @@
|
||||
sleep(5) // Wait a while
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>[oldPlantName] suddenly mutates into [myseed.plantname]!</span>")
|
||||
name = "hydroponics tray ([myseed.plantname])"
|
||||
if(myseed.product)
|
||||
desc = initial(myseed.product.desc)
|
||||
else
|
||||
desc = initial(desc)
|
||||
|
||||
TRAY_NAME_UPDATE
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant
|
||||
if( weedlevel > 5 )
|
||||
@@ -452,6 +443,7 @@
|
||||
sleep(5) // Wait a while
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>The mutated weeds in [src] spawn some [myseed.plantname]!</span>")
|
||||
TRAY_NAME_UPDATE
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>The few weeds in [src] seem to react, but only for a moment...</span>")
|
||||
|
||||
@@ -797,15 +789,7 @@
|
||||
to_chat(user, "<span class='notice'>You plant [O].</span>")
|
||||
dead = 0
|
||||
myseed = O
|
||||
name = "hydroponics tray ([myseed.plantname])"
|
||||
if(!myseed.productdesc) //we haven't changed our produce's description
|
||||
if(myseed.product)
|
||||
myseed.productdesc = initial(myseed.product.desc)
|
||||
else if(myseed.desc)
|
||||
myseed.productdesc = myseed.desc
|
||||
else
|
||||
myseed.productdesc = "A fascinating specimen."
|
||||
desc = myseed.productdesc
|
||||
TRAY_NAME_UPDATE
|
||||
age = 1
|
||||
plant_health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
@@ -907,8 +891,7 @@
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
update_icon()
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
TRAY_NAME_UPDATE
|
||||
else
|
||||
if(user)
|
||||
examine(user)
|
||||
@@ -926,8 +909,7 @@
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
dead = 0
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
TRAY_NAME_UPDATE
|
||||
update_icon()
|
||||
|
||||
/// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds.///
|
||||
@@ -970,6 +952,7 @@
|
||||
desc = "A patch of dirt."
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "soil"
|
||||
gender = PLURAL
|
||||
circuit = null
|
||||
density = FALSE
|
||||
use_power = NO_POWER_USE
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the research director"
|
||||
selection_color = "#ffeef0"
|
||||
selection_color = "#ffeeff"
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_requirements = 60
|
||||
|
||||
|
||||
@@ -501,25 +501,20 @@
|
||||
var/obj/screen/healthdoll/living/livingdoll = hud_used.healthdoll
|
||||
switch(healthpercent)
|
||||
if(100 to INFINITY)
|
||||
livingdoll.icon_state = "living0"
|
||||
severity = 0
|
||||
if(80 to 100)
|
||||
livingdoll.icon_state = "living1"
|
||||
severity = 1
|
||||
if(60 to 80)
|
||||
livingdoll.icon_state = "living2"
|
||||
severity = 2
|
||||
if(40 to 60)
|
||||
livingdoll.icon_state = "living3"
|
||||
severity = 3
|
||||
if(20 to 40)
|
||||
livingdoll.icon_state = "living4"
|
||||
severity = 4
|
||||
if(1 to 20)
|
||||
livingdoll.icon_state = "living5"
|
||||
severity = 5
|
||||
else
|
||||
livingdoll.icon_state = "living6"
|
||||
severity = 6
|
||||
livingdoll.icon_state = "living[severity]"
|
||||
if(!livingdoll.filtered)
|
||||
livingdoll.filtered = TRUE
|
||||
var/icon/mob_mask = icon(icon, icon_state)
|
||||
|
||||
@@ -88,12 +88,12 @@ While using this makes the system rely on OnFire, it still gives options for tim
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/update_health_hud()
|
||||
if(hud_used)
|
||||
var/severity = 0
|
||||
var/healthpercent = (health/maxHealth) * 100
|
||||
var/severity = 0
|
||||
var/healthpercent = (health/maxHealth) * 100
|
||||
if(hud_used?.healthdoll)
|
||||
switch(healthpercent)
|
||||
if(100 to INFINITY)
|
||||
hud_used.healths.icon_state = "elite_health0"
|
||||
severity = 0
|
||||
if(80 to 100)
|
||||
severity = 1
|
||||
if(60 to 80)
|
||||
@@ -108,11 +108,11 @@ While using this makes the system rely on OnFire, it still gives options for tim
|
||||
severity = 6
|
||||
else
|
||||
severity = 7
|
||||
hud_used.healths.icon_state = "elite_health[severity]"
|
||||
if(severity > 0)
|
||||
overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
|
||||
else
|
||||
clear_fullscreen("brute")
|
||||
hud_used.healthdoll.icon_state = "elite_health[severity]"
|
||||
if(severity > 0)
|
||||
overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
|
||||
else
|
||||
clear_fullscreen("brute")
|
||||
|
||||
//The Pulsing Tumor, the actual "spawn-point" of elites, handles the spawning, arena, and procs for dealing with basic scenarios.
|
||||
|
||||
|
||||
@@ -167,34 +167,31 @@
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/simple_animal/slime/update_health_hud()
|
||||
if(hud_used)
|
||||
var/severity = 0
|
||||
var/healthpercent = (health/maxHealth) * 100
|
||||
var/severity = 0
|
||||
var/healthpercent = (health/maxHealth) * 100
|
||||
if(hud_used?.healthdoll)
|
||||
switch(healthpercent)
|
||||
if(100 to INFINITY)
|
||||
hud_used.healths.icon_state = "slime_health0"
|
||||
severity = 0
|
||||
if(80 to 100)
|
||||
hud_used.healths.icon_state = "slime_health1"
|
||||
severity = 1
|
||||
if(60 to 80)
|
||||
hud_used.healths.icon_state = "slime_health2"
|
||||
severity = 2
|
||||
if(40 to 60)
|
||||
hud_used.healths.icon_state = "slime_health3"
|
||||
severity = 3
|
||||
if(20 to 40)
|
||||
hud_used.healths.icon_state = "slime_health4"
|
||||
severity = 4
|
||||
if(1 to 20)
|
||||
hud_used.healths.icon_state = "slime_health5"
|
||||
if(10 to 20)
|
||||
severity = 5
|
||||
else
|
||||
hud_used.healths.icon_state = "slime_health7"
|
||||
if(1 to 20)
|
||||
severity = 6
|
||||
if(severity > 0)
|
||||
overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
|
||||
else
|
||||
clear_fullscreen("brute")
|
||||
else
|
||||
severity = 7
|
||||
hud_used.healthdoll.icon_state = "slime_health[severity]"
|
||||
if(severity > 0)
|
||||
overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
|
||||
else
|
||||
clear_fullscreen("brute")
|
||||
|
||||
/mob/living/simple_animal/slime/adjust_bodytemperature()
|
||||
. = ..()
|
||||
|
||||
@@ -594,3 +594,11 @@
|
||||
build_path = /obj/item/circuitboard/machine/medical_kiosk
|
||||
category = list ("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/medipen_refiller
|
||||
name = "Machine Design (Medipen Refiller)"
|
||||
desc = "The circuit board for a Medipen Refiller."
|
||||
id = "medipen_refiller"
|
||||
build_path = /obj/item/circuitboard/machine/medipen_refiller
|
||||
category = list ("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
display_name = "Biological Technology"
|
||||
description = "What makes us tick." //the MC, silly!
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("chem_heater", "chem_master", "chem_dispenser", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medigel","genescanner", "med_spray_bottle", "chem_pack", "blood_pack", "medical_kiosk", "crewpinpointerprox")
|
||||
design_ids = list("chem_heater", "chem_master", "chem_dispenser", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medigel","genescanner", "med_spray_bottle", "chem_pack", "blood_pack", "medical_kiosk", "crewpinpointerprox", "medipen_refiller")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
|
||||
@@ -841,10 +841,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 1
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/dark_gygax/bag
|
||||
name = "Dark Gygax Ammo Bag"
|
||||
desc = "A duffel bag containing ammo for three full reloads of the incendiary carbine and flash bang launcher that are equipped on a standard Dark Gygax exosuit."
|
||||
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax
|
||||
/datum/uplink_item/ammo/mech/bag
|
||||
name = "Mech Support Kit Bag"
|
||||
desc = "A duffel bag containing ammo for four full reloads of the scattershotm which is equipped on standard Dark Gygax and Mauler exosuits. Also comes with some support equipment for maintaining the mech, including tools and an inducer."
|
||||
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mech
|
||||
cost = 4
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
key_type = /obj/item/key/security
|
||||
integrity_failure = 0.5
|
||||
|
||||
|
||||
|
||||
///This stores a banana that, when used on the secway, prevents the vehicle from moving until it is removed.
|
||||
var/obj/item/reagent_containers/food/snacks/grown/banana/eddie_murphy
|
||||
///When jammed with a banana, the secway will make a stalling sound. This stores the last time it made a sound to prevent spam.
|
||||
var/stall_cooldown
|
||||
|
||||
/obj/vehicle/ridden/secway/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
@@ -36,8 +43,42 @@
|
||||
if(obj_integrity == max_integrity)
|
||||
to_chat(user, "<span class='notice'>It looks to be fully repaired now.</span>")
|
||||
return TRUE
|
||||
|
||||
if(istype(W, /obj/item/reagent_containers/food/snacks/grown/banana))
|
||||
// ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now!
|
||||
user.visible_message("<span class='warning'>[user] begins stuffing [W] into [src]'s tailpipe.</span>", "<span class='warning'>You begin stuffing [W] into [src]'s tailpipe...</span>", ignored_mobs = occupants)
|
||||
if(do_after(user, 30, TRUE, src))
|
||||
if(user.transferItemToLoc(W, src))
|
||||
user.visible_message("<span class='warning'>[user] stuffs [W] into [src]'s tailpipe.</span>", "<span class='warning'>You stuff [W] into [src]'s tailpipe.</span>", ignored_mobs = occupants)
|
||||
eddie_murphy = W
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/ridden/secway/attack_hand(mob/living/user)
|
||||
if(eddie_murphy) // v lol
|
||||
user.visible_message("<span class='warning'>[user] begins cleaning [eddie_murphy] out of [src].</span>", "<span class='warning'>You begin cleaning [eddie_murphy] out of [src]...</span>")
|
||||
if(do_after(user, 60, target = src))
|
||||
user.visible_message("<span class='warning'>[user] cleans [eddie_murphy] out of [src].</span>", "<span class='warning'>You manage to get [eddie_murphy] out of [src].</span>")
|
||||
eddie_murphy.forceMove(drop_location())
|
||||
eddie_murphy = null
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/ridden/secway/driver_move(mob/user, direction)
|
||||
if(is_key(inserted_key) && eddie_murphy)
|
||||
if(stall_cooldown + 10 < world.time)
|
||||
visible_message("<span class='warning'>[src] sputters and refuses to move!</span>")
|
||||
playsound(src, "sound/effects/stall.ogg", 70)
|
||||
stall_cooldown = world.time
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/ridden/secway/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(eddie_murphy)
|
||||
. += "<span class='warning'>Something appears to be stuck in its exhaust...</span>"
|
||||
|
||||
/obj/vehicle/ridden/secway/obj_destruction()
|
||||
explosion(src, -1, 0, 2, 4, flame_range = 3)
|
||||
return ..()
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
/obj/item/clothing/head/cueball = 1,
|
||||
/obj/item/clothing/under/suit/white_on_white = 1,
|
||||
/obj/item/clothing/under/costume/sailor = 1,
|
||||
/obj/item/clothing/ears/headphones = 2,
|
||||
/obj/item/clothing/head/delinquent = 1,
|
||||
/obj/item/clothing/head/wig/random = 3,
|
||||
/obj/item/clothing/head/shrine_wig = 1,
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
/obj/item/storage/belt/fannypack = 3,
|
||||
/obj/item/storage/belt/fannypack/blue = 3,
|
||||
/obj/item/storage/belt/fannypack/red = 3,
|
||||
/obj/item/clothing/ears/headphones = 2,
|
||||
/obj/item/clothing/under/misc/overalls = 2,
|
||||
/obj/item/clothing/under/pants/jeans = 2,
|
||||
/obj/item/clothing/under/pants/classicjeans = 2,
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
/obj/item/toy/cards/deck/cas = 3,
|
||||
/obj/item/toy/cards/deck/cas/black = 3,
|
||||
/obj/item/hourglass = 2,
|
||||
/obj/item/instrument/piano_synth/headphones = 4,
|
||||
/obj/item/camera = 3)
|
||||
contraband = list(/obj/item/dice/fudge = 9)
|
||||
premium = list(/obj/item/melee/skateboard/pro = 3,
|
||||
|
||||
@@ -51,6 +51,74 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">13 February 2020</h2>
|
||||
<h3 class="author">Arkatos updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">HUDs for various simple mobs are now cleaner and consistent with each other.</li>
|
||||
</ul>
|
||||
<h3 class="author">Buggy123 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Beware! The Syndicate have upgraded their stolen teleportation machinery, they are now capable of providing reinforcements to their elite operatives nearly anywhere, even in the middle of combat! Not that that would be wise, to say the least.</li>
|
||||
</ul>
|
||||
<h3 class="author">Dennok updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">After rigorous training, Nanotrasen zoologists have observed a rise in the level of effectiveness with which non-sentient monkeys utilise certain hand-to-hand weapons.</li>
|
||||
</ul>
|
||||
<h3 class="author">Denton updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="admin">Moved duplicate CID/IP logging from log_access to log_admin_private.</li>
|
||||
</ul>
|
||||
<h3 class="author">Dingo-Dongler updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Examining people with sechuds will let you give someone an on the spot citation.</li>
|
||||
</ul>
|
||||
<h3 class="author">MMMiracles updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Multi-Z power relays can repaired but must be manually updated with a multi-tool when reinstalling/moving around.</li>
|
||||
</ul>
|
||||
<h3 class="author">PKPenguin321 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Salt piles now get kicked around and eventually scattered to the wind when ran over too much.</li>
|
||||
</ul>
|
||||
<h3 class="author">Skoglol updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="admin">Initial ahelps are now multiline too.</li>
|
||||
<li class="bugfix">Contractor tablet should now properly let you shop for rep.</li>
|
||||
</ul>
|
||||
<h3 class="author">Tlaltecuhtli updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">adds medipen refiller machine</li>
|
||||
</ul>
|
||||
<h3 class="author">cacogen updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Swapped positions of Meta Morgue and chem factory</li>
|
||||
<li class="tweak">Resized the space now taken up by Meta chem factory to be slightly larger</li>
|
||||
<li class="tweak">Made Meta Morgue smaller</li>
|
||||
<li class="tweak">Moved Meta maint bar above the new Morgue where rest of the chem factory was</li>
|
||||
<li class="tweak">Moved Meta medbay alcove with NanoMed to opposite side of hall</li>
|
||||
<li class="tweak">Moved Meta Medical Surplus Storeroom above Virology, off maint across from alcove</li>
|
||||
<li class="rscadd">Two new Meta maint Storage Rooms beneath robotics</li>
|
||||
<li class="tweak">Unanchored solar assemblies go off-centre to indicate they need securing. Secured ones centre themselves</li>
|
||||
</ul>
|
||||
<h3 class="author">ike709 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Taking pictures of openspace turfs works now.</li>
|
||||
</ul>
|
||||
<h3 class="author">itseasytosee updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">atmos helmets now properly protect you from pepper spray and face-huggers.</li>
|
||||
</ul>
|
||||
<h3 class="author">nemvar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed an issue where unstable people could regain sanity.</li>
|
||||
</ul>
|
||||
<h3 class="author">nightred updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Hugs are warm now</li>
|
||||
<li class="refactor">natural_bodytemperature_stabilization is now self contained.</li>
|
||||
<li class="refactor">adjust_bodytemperature to allow the use of insulation and change steps</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">11 February 2020</h2>
|
||||
<h3 class="author">ArcaneMusic updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -37056,3 +37056,53 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
for the borg defib upgrade, allowing medical borgs to revive crew without cloning
|
||||
at shift start.
|
||||
- spellcheck: Borgs now get a message when receiving any upgrade.
|
||||
2020-02-13:
|
||||
Arkatos:
|
||||
- tweak: HUDs for various simple mobs are now cleaner and consistent with each other.
|
||||
Buggy123:
|
||||
- tweak: Beware! The Syndicate have upgraded their stolen teleportation machinery,
|
||||
they are now capable of providing reinforcements to their elite operatives nearly
|
||||
anywhere, even in the middle of combat! Not that that would be wise, to say
|
||||
the least.
|
||||
Dennok:
|
||||
- bugfix: After rigorous training, Nanotrasen zoologists have observed a rise in
|
||||
the level of effectiveness with which non-sentient monkeys utilise certain hand-to-hand
|
||||
weapons.
|
||||
Denton:
|
||||
- admin: Moved duplicate CID/IP logging from log_access to log_admin_private.
|
||||
Dingo-Dongler:
|
||||
- rscadd: Examining people with sechuds will let you give someone an on the spot
|
||||
citation.
|
||||
MMMiracles:
|
||||
- tweak: Multi-Z power relays can repaired but must be manually updated with a multi-tool
|
||||
when reinstalling/moving around.
|
||||
PKPenguin321:
|
||||
- rscadd: Salt piles now get kicked around and eventually scattered to the wind
|
||||
when ran over too much.
|
||||
Skoglol:
|
||||
- admin: Initial ahelps are now multiline too.
|
||||
- bugfix: Contractor tablet should now properly let you shop for rep.
|
||||
Tlaltecuhtli:
|
||||
- rscadd: adds medipen refiller machine
|
||||
cacogen:
|
||||
- tweak: Swapped positions of Meta Morgue and chem factory
|
||||
- tweak: Resized the space now taken up by Meta chem factory to be slightly larger
|
||||
- tweak: Made Meta Morgue smaller
|
||||
- tweak: Moved Meta maint bar above the new Morgue where rest of the chem factory
|
||||
was
|
||||
- tweak: Moved Meta medbay alcove with NanoMed to opposite side of hall
|
||||
- tweak: Moved Meta Medical Surplus Storeroom above Virology, off maint across from
|
||||
alcove
|
||||
- rscadd: Two new Meta maint Storage Rooms beneath robotics
|
||||
- tweak: Unanchored solar assemblies go off-centre to indicate they need securing.
|
||||
Secured ones centre themselves
|
||||
ike709:
|
||||
- bugfix: Taking pictures of openspace turfs works now.
|
||||
itseasytosee:
|
||||
- bugfix: atmos helmets now properly protect you from pepper spray and face-huggers.
|
||||
nemvar:
|
||||
- bugfix: Fixed an issue where unstable people could regain sanity.
|
||||
nightred:
|
||||
- rscadd: Hugs are warm now
|
||||
- refactor: natural_bodytemperature_stabilization is now self contained.
|
||||
- refactor: adjust_bodytemperature to allow the use of insulation and change steps
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "Mickyan"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Headphones can now play custom music"
|
||||
- tweak: "Moved headphones to the games vendor in the library"
|
||||
- code_imp: "Added support for instruments with custom effects triggered by playing"
|
||||
@@ -1,6 +0,0 @@
|
||||
author: "nightred"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Hugs are warm now"
|
||||
- refactor: "natural_bodytemperature_stabilization is now self contained."
|
||||
- refactor: "adjust_bodytemperature to allow the use of insulation and change steps"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Dingo-Dongler"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Examining people with sechuds will let you give someone an on the spot citation."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "MMMiracles"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Multi-Z power relays can repaired but must be manually updated with a multi-tool when reinstalling/moving around."
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "Arkatos"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Infrared emitter now uses tgui-next."
|
||||
- rscadd: "Proximity sensor now uses tgui-next."
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "necromanceranne"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "A mech support bag."
|
||||
- rscadd: "Combat wrench."
|
||||
- balance: "Made the dark gygax significantly better by adjusting equipment and stats."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Ryll/Shaps"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "You can now sabotage secways by stuffing a banana in their tailpipe."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Putnam and ninjanomnom"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Radioactive contamination now has a limited amount of material to be used to contaminate things."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "EOBGames"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "The Lavaland Gulag has been rebuilt following repeated complaints about 'human rights violations'."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Buggy123"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Beware! The Syndicate have upgraded their stolen teleportation machinery, they are now capable of providing reinforcements to their elite operatives nearly anywhere, even in the middle of combat! Not that that would be wise, to say the least."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Skoglol"
|
||||
delete-after: True
|
||||
changes:
|
||||
- admin: "Initial ahelps are now multiline too."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "nemvar"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Replaced the effect of the \"two left feet\" mutation with random knockdowns while moving."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Dennok"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "After rigorous training, Nanotrasen zoologists have observed a rise in the level of effectiveness with which non-sentient monkeys utilise certain hand-to-hand weapons."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Denton"
|
||||
delete-after: True
|
||||
changes:
|
||||
- admin: "Moved duplicate CID/IP logging from log_access to log_admin_private."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "ike709"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Taking pictures of openspace turfs works now."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Skoglol"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Contractor tablet should now properly let you shop for rep."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "cacogen"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Unanchored solar assemblies go off-centre to indicate they need securing. Secured ones centre themselves"
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "cacogen"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Soil no longer renames itself hydroponics tray while something is planted in it"
|
||||
- bugfix: "Hydroponics planter names will update when weeds are mutated"
|
||||
- rscdel: "Planters no longer change description to match that of what's planted in them"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Arkatos"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Geneticist now uses science selection color in the preferences menu."
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "EOBGames"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "A hawaiian shirt, currently only in the beach bum ruin."
|
||||
- tweak: "Fixed a couple of issues with the beach bum ruin."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Capsandi"
|
||||
delete-after: True
|
||||
changes:
|
||||
- spellcheck: "Fixed grammar in death-nettle attack and pickup messages"
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 640 B |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
@@ -705,6 +705,7 @@
|
||||
#include "code\game\machinery\magnet.dm"
|
||||
#include "code\game\machinery\mass_driver.dm"
|
||||
#include "code\game\machinery\medical_kiosk.dm"
|
||||
#include "code\game\machinery\medipen_refiller.dm"
|
||||
#include "code\game\machinery\navbeacon.dm"
|
||||
#include "code\game\machinery\newscaster.dm"
|
||||
#include "code\game\machinery\PDApainter.dm"
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import { useBackend } from '../backend';
|
||||
import { Button, Section, LabeledList } from '../components';
|
||||
|
||||
export const InfraredEmitter = props => {
|
||||
const { act, data } = useBackend(props);
|
||||
const {
|
||||
on,
|
||||
visible,
|
||||
} = data;
|
||||
return (
|
||||
<Section>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Status">
|
||||
<Button
|
||||
icon={on ? 'power-off' : 'times'}
|
||||
content={on ? 'On' : 'Off'}
|
||||
selected={on}
|
||||
onClick={() => act('power')} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Visibility">
|
||||
<Button
|
||||
icon={visible ? 'eye' : 'eye-slash'}
|
||||
content={visible ? 'Visible' : 'Invisible'}
|
||||
selected={visible}
|
||||
onClick={() => act('visibility')} />
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,71 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { Button, LabeledList, Section } from '../components';
|
||||
|
||||
export const ProximitySensor = props => {
|
||||
const { act, data } = useBackend(props);
|
||||
const {
|
||||
minutes,
|
||||
seconds,
|
||||
timing,
|
||||
scanning,
|
||||
sensitivity,
|
||||
} = data;
|
||||
return (
|
||||
<Fragment>
|
||||
<Section>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Status">
|
||||
<Button
|
||||
icon={scanning ? 'lock' : 'unlock'}
|
||||
content={scanning ? 'Armed' : 'Not Armed'}
|
||||
selected={scanning}
|
||||
onClick={() => act('scanning')} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Detection Range">
|
||||
<Button
|
||||
icon="backward"
|
||||
onClick={() => act('sense', { range: -1 })} />
|
||||
{' '}
|
||||
{String(sensitivity).padStart(1, '1')}
|
||||
{' '}
|
||||
<Button
|
||||
icon="forward"
|
||||
onClick={() => act('sense', { range: 1 })} />
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section
|
||||
title="Auto Arm"
|
||||
buttons={(
|
||||
<Button
|
||||
icon={"clock-o"}
|
||||
content={timing ? 'Stop' : 'Start'}
|
||||
selected={timing}
|
||||
disabled={scanning}
|
||||
onClick={() => act('time')} />
|
||||
)}>
|
||||
<Button
|
||||
icon="fast-backward"
|
||||
disabled={scanning}
|
||||
onClick={() => act('input', { adjust: -30 })} />
|
||||
<Button
|
||||
icon="backward"
|
||||
disabled={scanning}
|
||||
onClick={() => act('input', { adjust: -1 })} />
|
||||
{' '}
|
||||
{String(minutes).padStart(2, '0')}:
|
||||
{String(seconds).padStart(2, '0')}
|
||||
{' '}
|
||||
<Button
|
||||
icon="forward"
|
||||
disabled={scanning}
|
||||
onClick={() => act('input', { adjust: 1 })} />
|
||||
<Button
|
||||
icon="fast-forward"
|
||||
disabled={scanning}
|
||||
onClick={() => act('input', { adjust: 30 })} />
|
||||
</Section>
|
||||
</Fragment>
|
||||
);
|
||||
};
|
||||
@@ -46,6 +46,7 @@ import { GulagTeleporterConsole } from './interfaces/GulagTeleporterConsole';
|
||||
import { GulagItemReclaimer } from './interfaces/GulagItemReclaimer';
|
||||
import { Holodeck } from './interfaces/Holodeck';
|
||||
import { ImplantChair } from './interfaces/ImplantChair';
|
||||
import { InfraredEmitter } from './interfaces/InfraredEmitter';
|
||||
import { Intellicard } from './interfaces/Intellicard';
|
||||
import { KeycardAuth } from './interfaces/KeycardAuth';
|
||||
import { LaborClaimConsole } from './interfaces/LaborClaimConsole';
|
||||
@@ -82,6 +83,7 @@ import { PersonalCrafting } from './interfaces/PersonalCrafting';
|
||||
import { PortableGenerator } from './interfaces/PortableGenerator';
|
||||
import { PortablePump, PortableScrubber } from './interfaces/PortableAtmos';
|
||||
import { PowerMonitor } from './interfaces/PowerMonitor';
|
||||
import { ProximitySensor } from './interfaces/ProximitySensor';
|
||||
import { Radio } from './interfaces/Radio';
|
||||
import { RapidPipeDispenser } from './interfaces/RapidPipeDispenser';
|
||||
import { Roulette } from './interfaces/Roulette';
|
||||
@@ -309,6 +311,10 @@ const ROUTES = {
|
||||
component: () => ImplantChair,
|
||||
scrollable: false,
|
||||
},
|
||||
infrared_emitter: {
|
||||
component: () => InfraredEmitter,
|
||||
scrollable: false,
|
||||
},
|
||||
intellicard: {
|
||||
component: () => Intellicard,
|
||||
scrollable: true,
|
||||
@@ -489,6 +495,10 @@ const ROUTES = {
|
||||
component: () => PowerMonitor,
|
||||
scrollable: true,
|
||||
},
|
||||
proximity_sensor: {
|
||||
component: () => ProximitySensor,
|
||||
scrollable: false,
|
||||
},
|
||||
radio: {
|
||||
component: () => Radio,
|
||||
scrollable: false,
|
||||
|
||||