Merge branch 'tgstation-master'

This commit is contained in:
EgorDinamit
2020-02-13 22:50:58 +04:00
85 changed files with 4842 additions and 3650 deletions
@@ -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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4
View File
@@ -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.
-2
View File
@@ -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
+60 -75
View File
@@ -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"
+4 -4
View File
@@ -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
+11 -15
View File
@@ -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"
+3 -3
View File
@@ -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
-9
View File
@@ -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."
+4 -7
View File
@@ -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
+21 -9
View File
@@ -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)
+40 -19
View File
@@ -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)
+96
View File
@@ -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>")
+6 -5
View File
@@ -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"
+38 -2
View File
@@ -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
+7
View File
@@ -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
+7 -8
View File
@@ -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."
+9
View File
@@ -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."
+43
View File
@@ -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)]"
+17 -11
View File
@@ -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
//////////////////////////////////////////////////////////////////////////
+39 -39
View File
@@ -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))
+47 -52
View File
@@ -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
-33
View File
@@ -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>")
+1
View File
@@ -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"
+2 -2
View File
@@ -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)
+9 -26
View File
@@ -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
+1 -1
View File
@@ -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
+2 -7
View File
@@ -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
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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)
+41
View File
@@ -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 ..()
-1
View File
@@ -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,
-1
View File
@@ -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,
+1
View File
@@ -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,
+68
View File
@@ -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">
+50
View File
@@ -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"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.
+1
View File
@@ -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>
);
};
File diff suppressed because one or more lines are too long
+10
View File
@@ -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,