Merge branch 'master' into Refactors-beds-stools-chairs

This commit is contained in:
Purpose
2018-09-29 15:36:27 +01:00
committed by GitHub
243 changed files with 2079 additions and 1399 deletions
+3 -3
View File
@@ -37,9 +37,9 @@ actual development.
* Document and explain your pull requests thoroughly. Detail what each commit changes,
and why it changes it. We do not want to have to read all of you commit names to figure
out what your pull request is about.
* Any pull request that is not solely composed of fixes or non gameplay-affecting
refactors must have a changelog. Inline changelogs are supported through the format
described [here](https://github.com/ParadiseSS13/Paradise/pull/3291#issuecomment-172950466)
* Any pull request must have a changelog, this is to allow us to know when a PR is deployed
on the live server. Inline changelogs are supported through the format described
[here](https://github.com/ParadiseSS13/Paradise/pull/3291#issuecomment-172950466)
and should be used rather than manually edited .yml file changelogs.
* Pull requests should not have any merge commits except in the case of fixing merge
conflicts for an existing pull request. New pull requests should not have any merge
+23
View File
@@ -0,0 +1,23 @@
**What does this PR do:**
Include a small to medium description of what your PR changes. Feel free to give it a little flourish if you want to show off a new feature more completely.
**Images of sprite/map changes (IF APPLICABLE):**
If you did not make a map or sprite edit, you may leave this section blank. You may include a gif of your feature if you want
**Changelog:**
*Remove this line, and appropriate fields from the changelog*
:cl: name here
add: Added new things
del: Removed old things
tweak: tweaked a few things
balance: rebalanced something
fix: fixed a few things
wip: added a few works in progress
soundadd: added a new sound thingy
sounddel: removed an old sound thingy
imageadd: added some icons and images
imagedel: deleted some icons and images
spellcheck: fixed a few typos
experiment: added an experimental thingy
/:cl:
@@ -1,7 +1,7 @@
"a" = (/turf/space,/area/space)
"b" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/ruin/powered)
"b" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/ruin/powered)
"c" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/ruin/powered)
"d" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/ruin/powered)
"d" = (/turf/space,/turf/simulated/shuttle/wall{dir = 2; icon_state = "diagonalWall3"},/area/ruin/powered)
"e" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "propulsion"; tag = "icon-propulsion (EAST)"},/turf/space,/area/ruin/powered)
"f" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating,/area/ruin/powered)
"g" = (/obj/structure/table/wood,/obj/item/clothing/under/shorts/black,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered)
@@ -24,22 +24,22 @@
"x" = (/obj/machinery/door_control{name = "Strange Ship Door Control"; pixel_x = 6; pixel_y = 0; id = "strange ship"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/ruin/powered)
"y" = (/obj/machinery/light,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered)
"z" = (/mob/living/simple_animal/bot/medbot,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered)
"A" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "diagonalWall3"},/area/ruin/powered)
"A" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/ruin/powered)
"B" = (/obj/structure/chair,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered)
"C" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/ruin/powered)
"C" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/ruin/powered)
"D" = (/obj/machinery/light,/obj/structure/bed,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered)
(1,1,1) = {"
aabcccccdaaaa
aabcccccAaaaa
aefghijkcaaaa
aeflhhhhccccd
aeflhhhhccccA
bccccmhhcmhjc
cnophhhhqhhrc
shhthhhhuhvwc
xhypzhhhqhhnc
Accccmhhcmhjc
dccccmhhcmhjc
aefBhhhhccccC
aefnnDhjcaaaa
aaAcccccCaaaa
aadcccccCaaaa
"}
+3 -3
View File
@@ -7633,6 +7633,7 @@
"cQO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/genetics)
"cQP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/atmos)
"cQQ" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plasteel,/area/atmos)
"cQR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 0; frequency = 1379; hackProof = 0; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering)
"cQS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage)
"cQT" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos/distribution)
"cQU" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating,/area/storage/secure)
@@ -8229,6 +8230,7 @@
"dcn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/engine/engineering)
"dco" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central/ne)
"dcp" = (/obj/machinery/porta_turret{dir = 1},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
"dcq" = (/obj/machinery/door/airlock/external{aiControlDisabled = 0; frequency = 1379; hackProof = 0; icon_state = "door_locked"; id_tag = "atmospherics_south_outer"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering)
"dcs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/engine/engineering)
"dct" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel,/area/atmos)
"dcv" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
@@ -8626,8 +8628,6 @@
"dmt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"dmu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/maintenance/asmaint2)
"dmv" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "atmospherics_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "atmospherics_south_sensor"; pixel_x = -8; pixel_y = -30},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "atmospherics_south"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_airpump = "atmospherics_south_pump"; tag_chamber_sensor = "atmospherics_south_sensor"; tag_exterior_door = "atmospherics_south_outer"; tag_interior_door = "atmospherics_south_inner"},/turf/simulated/floor/plating,/area/engine/engineering)
"dmw" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 1; frequency = 1379; hackProof = 1; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering)
"dmx" = (/obj/machinery/door/airlock/external{aiControlDisabled = 1; frequency = 1379; hackProof = 1; icon_state = "door_locked"; id_tag = "atmospherics_south_outer"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering)
"dmy" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine)
"dmz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 0; pressure_checks = 2; pump_direction = 0},/obj/structure/sign/vacuum{pixel_y = -30},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine)
"dmA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/igniter{icon_state = "igniter0"; id = "gasturbine"; on = 0},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine)
@@ -9111,7 +9111,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOaabafOafOaabaabaabalwalwcSUcSUcUpdibaaacTDcTEaaaaaaaabdledlfdlgaabaaaaaacUlcTFaaadibcUqcSUcSUdaGcSUcQZdkOdlvdkOcQZdkTdlwdkTcQZdkVdlxdkVcQZaabdhKaaaalwaaadjddgSdgSdgSdlldlmdlndlydlndlmdkPdlpcsLdlAdlrdfMddHcYidlscBPcBQcBQcBQdlKaabaabaaabZZdlBdlCcuQbGGdlDdlJdbgcuQdlPbGGcuQdlzbGGbGGdlLbGGbGHbGHbGHbZZbZZbGHdjQdlSdlRdlUdjQaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaaaaaaaabaabalwcSUcSUcTtdibaaacTxafOaaadlEaabdlFdlGdlHaabaabdjqafOcTxaaadibcTtcSUcSUdaGcSUcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZaabdhKaaaayiaaadjdaaaaaaaaadlIdlmdlVdlXdlWdlmcsLdlMcsLcsLdlNdlOcXrdmcdlQcBPaaaaaaaaaaaaaaaaabaaabZZdlZdmbdlLbGGdgybGGbGGdlLdjobGGcuQcuQcuQcuQcuQbGGbGHaabaaaaaaaaaaabdlTdlTdmddlTdlTaabaabdhcaabaabdjTaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcSUcSCcUodibaaacTxafOaaaaaaaabaabaabaabaabaaaaaaafOcTxaaadibcUncTmcSUdmecSUcSUcSUcSUdmfdhhdhhdhhdhhdhhdhhdhhdhhdhhdhhdmgaabaabaabdjEaaaaaaaaadlYdlmdlndmhdlndlmdmadmidfMdfMdmldmrdmmcBPcBPcBPaaaaaaaaaaaaaaaaabaaabZZdlBdmncuQdbgbGGbGGdmpcuQdmqbGGbGGbGGbGGbGGbGGbGGbGHaabaaaaaaaaaaabaaadlTdmsdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaabcSUcTtdibdmjaaacTDcTEaaaaaaaaaaabaaaaaaaaaaaaaaacUlcTFaaadibdibcTtcSUdmkdmwdmvdaGdmxdmgaabaabaabaabaabaabaabdmoaabaabaabaabaabaabdjEaabaabaabdlYdlmdmydmAdmzdmEaabdmacBPcBQdmtcBQcBPcBPaaaaabaaaaaaaaaaaaaaaaabaabbZZbZZbZZbGHbGHbGHbGGcuQbGHdmubGHbGHdbgbPAcLhbKlcMsbGHaabaaaaaaaaaaabaaadlTdmGdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaabcSUcTtdibdmjaaacTDcTEaaaaaaaaaaabaaaaaaaaaaaaaaacUlcTFaaadibdibcTtcSUdmkcQRdmvdaGdcqdmgaabaabaabaabaabaabaabdmoaabaabaabaabaabaabdjEaabaabaabdlYdlmdmydmAdmzdmEaabdmacBPcBQdmtcBQcBPcBPaaaaabaaaaaaaaaaaaaaaaabaabbZZbZZbZZbGHbGHbGHbGGcuQbGHdmubGHbGHdbgbPAcLhbKlcMsbGHaabaaaaaaaaaaabaaadlTdmGdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcSUcUDdbudiPaabcTxafOdjqaaaaaadjqaaaaaaaaaaaadjqafOcTxaaadiRdbQcUEcSUdmLcSUcSUcSUcSUcSUcSUaaaaaaaabaaaaaaaaadmoaaaaaadmBdmBdmBdmBdmCaaaaaaaabdlYdmDdlmdmOdlmdlmaaaaabaaaaaadmFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaabGHdmbdmMbGHdmNaabbGHbGHbZZbZZcMsbGHaaaaabaaaaaaaaaaabaaaaaadmRaaaaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUcUFcUIcUHaaacTxafOafOdcfafOafOdcfafOafOdcfafOafOcTxaaacUJcUIcUKcSUdmPdmQdnjdnldnkdnmdmVdmWdmWdmXdmWdmWdmWdmYdmWdmWdmZdnadnbdnodmCaaaaaaaabdndaHQdlmdnedlmdnfaabaabaaaaaadngaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaabpaaaaaabGHdnqdnnbGHdnpaabaaaaabaaaaaaaabaaaaaaaabaaaaaaaaaaabaaaaaadnraaaaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnscSUcSUcULaaacUMcSFcSFcUOcSFcSFcUOcSFcSFcUOcSFcSFcUQaaacULcSUcSUcSUdmPdnBdnAdnEdnCdnHdfoaaaaaaaabaaaaaaaaadmodmBdmBdmBbfmbJNdnvdmCaaaaaaaabaabaHQdnxdnIdnxaHQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaabZZdnJbZZbZZaabdhcaaaaabaaaaaaaabaaaamWamWalwayiaabaabaabaabdnLaabaabaabaabdhcamhamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1,7 +1,7 @@
/obj/machinery/atmospherics/binary
dir = SOUTH
initialize_directions = SOUTH|NORTH
use_power = 1
use_power = IDLE_POWER_USE
var/datum/gas_mixture/air1
var/datum/gas_mixture/air2
@@ -150,4 +150,4 @@
/obj/machinery/atmospherics/binary/process_atmos()
..()
return parent1 && parent2
return parent1 && parent2
@@ -5,7 +5,7 @@
name = "omni device"
icon = 'icons/atmos/omni_devices.dmi'
icon_state = "base"
use_power = 1
use_power = IDLE_POWER_USE
initialize_directions = 0
can_unwrench = 1
@@ -299,4 +299,4 @@
for(var/datum/omni_port/port in ports)
if(!port.parent)
return 0
return 1
return 1
@@ -1,7 +1,7 @@
/obj/machinery/atmospherics/trinary
dir = SOUTH
initialize_directions = SOUTH|NORTH|WEST
use_power = 1
use_power = IDLE_POWER_USE
var/on = 0
@@ -209,4 +209,4 @@
/obj/machinery/atmospherics/trinary/process_atmos()
..()
return parent1 && parent2 && parent3
return parent1 && parent2 && parent3
@@ -2,7 +2,7 @@
icon = 'icons/obj/atmospherics/cold_sink.dmi'
icon_state = "on_cool"
density = 1
use_power = 1
use_power = IDLE_POWER_USE
name = "cold sink"
desc = "Cools gas when connected to pipe network"
@@ -39,4 +39,4 @@
if(abs(old_temperature-air_contents.temperature) > 1)
parent.update = 1
return 1
return 1
@@ -2,7 +2,7 @@
icon = 'icons/obj/atmospherics/cold_sink.dmi'
icon_state = "intact_off"
density = 1
use_power = 1
use_power = IDLE_POWER_USE
name = "heat reservoir"
desc = "Heats gas when connected to pipe network"
@@ -38,4 +38,4 @@
if(abs(old_temperature-air_contents.temperature) > 1)
parent.update = 1
return 1
return 1
@@ -1,7 +1,7 @@
/obj/machinery/atmospherics/unary/outlet_injector
icon = 'icons/atmos/injector.dmi'
icon_state = "map_injector"
use_power = 1
use_power = IDLE_POWER_USE
layer = 3
can_unwrench = 1
@@ -8,7 +8,7 @@
name = "air vent"
desc = "Has a valve and pump attached to it"
use_power = 1
use_power = IDLE_POWER_USE
can_unwrench = 1
var/open = 0
@@ -7,7 +7,7 @@
name = "air scrubber"
desc = "Has a valve and pump attached to it"
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 60
+1 -1
View File
@@ -4,7 +4,7 @@
var/volume = 0
force = 20
layer = 2.4 //under wires with their 2.44
use_power = 0
use_power = NO_POWER_USE
can_unwrench = 1
var/alert_pressure = 80*ONE_ATMOSPHERE //minimum pressure before check_pressure(...) should be called
+6 -6
View File
@@ -35,8 +35,8 @@
#define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND 0.012
#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4 //Minimum temperature difference before group processing is suspended
#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5 //Minimum temperature difference before the gas temperatures are just set to be equal
#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION T20C+10
#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION T20C+200
#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION (T20C+10)
#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C+200)
#define FLOOR_HEAT_TRANSFER_COEFFICIENT 0.4
#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0
#define DOOR_HEAT_TRANSFER_COEFFICIENT 0.0
@@ -45,8 +45,8 @@
#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 //a hack for now
//Must be between 0 and 1. Values closer to 1 equalize temperature faster
//Should not exceed 0.4 else strange heat flow occur
#define FIRE_MINIMUM_TEMPERATURE_TO_SPREAD 150+T0C
#define FIRE_MINIMUM_TEMPERATURE_TO_EXIST 100+T0C
#define FIRE_MINIMUM_TEMPERATURE_TO_SPREAD (150+T0C)
#define FIRE_MINIMUM_TEMPERATURE_TO_EXIST (100+T0C)
#define FIRE_SPREAD_RADIOSITY_SCALE 0.85
#define FIRE_CARBON_ENERGY_RELEASED 2500000 //Amount of heat released per mole of burnt carbon into the tile
#define FIRE_PLASMA_ENERGY_RELEASED 15000000 //Amount of heat released per mole of burnt plasma into the tile
@@ -56,8 +56,8 @@
//Plasma fire properties
#define OXYGEN_BURN_RATE_BASE 7
#define PLASMA_BURN_RATE_DELTA 20
#define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C
#define PLASMA_UPPER_TEMPERATURE 1370+T0C
#define PLASMA_MINIMUM_BURN_TEMPERATURE (100+T0C)
#define PLASMA_UPPER_TEMPERATURE (1370+T0C)
#define PLASMA_MINIMUM_OXYGEN_NEEDED 2
#define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 30
#define PLASMA_OXYGEN_FULLBURN 10
+7
View File
@@ -5,3 +5,10 @@
#define CAT_FOOD "Food"
#define CAT_MISC "Misc"
#define CAT_PRIMAL "Tribal"
#define RECIPE_MICROWAVE "Microwave"
#define RECIPE_OVEN "Oven"
#define RECIPE_GRILL "Grill"
#define RECIPE_CANDY "Candy"
#define RECIPE_FAIL null
+3
View File
@@ -91,6 +91,9 @@
/proc/log_adminsay(text, mob/speaker)
if(config.log_adminchat)
WRITE_LOG(GLOB.world_game_log, "ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]")
/proc/log_qdel(text)
WRITE_LOG(GLOB.world_qdel_log, "QDEL: [text]")
/proc/log_mentorsay(text, mob/speaker)
if(config.log_adminchat)
+11 -1
View File
@@ -31,6 +31,16 @@ var/list/round_end_sounds = list( // Maps available round end sounds to their du
'sound/goonstation/misc/newround2.ogg' = 14.8 SECONDS
)
GLOBAL_LIST_INIT(cooking_recipe_types, list(
RECIPE_MICROWAVE = /datum/recipe/microwave,
RECIPE_OVEN = /datum/recipe/oven,
RECIPE_GRILL = /datum/recipe/grill,
RECIPE_CANDY = /datum/recipe/candy
))
GLOBAL_LIST_INIT(cooking_recipes, list(RECIPE_MICROWAVE = list(), RECIPE_OVEN = list(), RECIPE_GRILL = list(), RECIPE_CANDY = list()))
GLOBAL_LIST_INIT(cooking_ingredients, list(RECIPE_MICROWAVE = list(), RECIPE_OVEN = list(), RECIPE_GRILL = list(), RECIPE_CANDY = list()))
GLOBAL_LIST_INIT(cooking_reagents, list(RECIPE_MICROWAVE = list(), RECIPE_OVEN = list(), RECIPE_GRILL = list(), RECIPE_CANDY = list()))
GLOBAL_LIST(station_level_space_turfs)
#define EGG_LAYING_MESSAGES list("lays an egg.", "squats down and croons.", "begins making a huge racket.", "begins clucking raucously.")
#define EGG_LAYING_MESSAGES list("lays an egg.", "squats down and croons.", "begins making a huge racket.", "begins clucking raucously.")
+2
View File
@@ -6,6 +6,8 @@ GLOBAL_VAR(config_error_log)
GLOBAL_PROTECT(config_error_log)
GLOBAL_VAR(world_runtime_log)
GLOBAL_PROTECT(world_runtime_log)
GLOBAL_VAR(world_qdel_log)
GLOBAL_PROTECT(world_qdel_log)
GLOBAL_VAR(world_href_log)
GLOBAL_PROTECT(world_href_log)
+1 -2
View File
@@ -59,7 +59,7 @@ SUBSYSTEM_DEF(garbage)
msg += " | Fail:[fail_counts.Join(",")]"
..(msg)
/* TO-DO
/datum/controller/subsystem/garbage/Shutdown()
//Adds the del() log to the qdel log file
var/list/dellog = list()
@@ -83,7 +83,6 @@ SUBSYSTEM_DEF(garbage)
if(I.no_hint)
dellog += "\tNo hint: [I.no_hint] times"
log_qdel(dellog.Join("\n"))
*/
/datum/controller/subsystem/garbage/fire()
//the fact that this resets its processing each fire (rather then resume where it left off) is intentional.
+13 -14
View File
@@ -53,19 +53,18 @@
return -1
return .
/datum/recipe/proc/check_items(obj/container) //1=precisely, 0=insufficiently, -1=superfluous
if(!items)
if(locate(/obj/) in container)
return -1
else
return 1
/datum/recipe/proc/check_items(obj/container, list/ignored_items = null) //1=precisely, 0=insufficiently, -1=superfluous
. = 1
var/list/checklist = items.Copy()
var/list/checklist = items ? items.Copy() : list()
for(var/obj/O in container)
if(ignored_items && is_type_in_list(O, ignored_items)) //skip if this is something we are ignoring
continue
if(!items)
return -1
var/found = 0
for(var/type in checklist)
if(istype(O,type))
checklist-=type
checklist -= type
found = 1
break
if(!found)
@@ -95,16 +94,16 @@
container.reagents.clear_reagents()
return result_obj
/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1 as num)
/proc/select_recipe(list/datum/recipe/available_recipes, obj/obj, exact = 1 as num, list/ignored_items = null)
if(!exact)
exact = -1
var/list/datum/recipe/possible_recipes = new
for(var/datum/recipe/recipe in avaiable_recipes)
if(recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact)
possible_recipes+=recipe
if(possible_recipes.len==0)
for(var/datum/recipe/recipe in available_recipes)
if(recipe.check_reagents(obj.reagents) == exact && recipe.check_items(obj, ignored_items) == exact)
possible_recipes += recipe
if(possible_recipes.len == 0)
return null
else if(possible_recipes.len==1)
else if(possible_recipes.len == 1)
return possible_recipes[1]
else //okay, let's select the most complicated recipe
var/r_count = 0
+27 -11
View File
@@ -321,28 +321,40 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/include_user = 0 //if it includes usr in the target list
var/random_target = 0 // chooses random viable target instead of asking the caster
var/random_target_priority = TARGET_CLOSEST // if random_target is enabled how it will pick the target
var/humans_only = 0 //for avoiding simple animals and only doing "human" mobs, 0 = all mobs, 1 = humans only
/obj/effect/proc_holder/spell/aoe_turf //affects all turfs in view or range (depends)
var/inner_radius = -1 //for all your ring spell needs
/obj/effect/proc_holder/spell/targeted/choose_targets(mob/user = usr)
var/list/targets = list()
switch(max_targets)
if(0) //unlimited
for(var/mob/living/target in view_or_range(range, user, selection_type))
targets += target
if(!humans_only)
for(var/mob/living/target in view_or_range(range, user, selection_type))
targets += target
else
for(var/mob/living/carbon/human/target in view_or_range(range, user, selection_type))
targets += target
if(1) //single target can be picked
if(range < 0)
targets += user
else
var/possible_targets = list()
for(var/mob/living/M in view_or_range(range, user, selection_type))
if(!include_user && user == M)
continue
possible_targets += M
if(!humans_only)
for(var/mob/living/M in view_or_range(range, user, selection_type))
if(!include_user && user == M)
continue
possible_targets += M
else
for(var/mob/living/carbon/human/M in view_or_range(range, user, selection_type))
if(!include_user && user == M)
continue
possible_targets += M
//targets += input("Choose the target for the spell.", "Targeting") as mob in possible_targets
//Adds a safety check post-input to make sure those targets are actually in range.
@@ -366,8 +378,12 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
else
var/list/possible_targets = list()
for(var/mob/living/target in view_or_range(range, user, selection_type))
possible_targets += target
if(!humans_only)
for(var/mob/living/target in view_or_range(range, user, selection_type))
possible_targets += target
else
for(var/mob/living/carbon/human/target in view_or_range(range, user, selection_type))
possible_targets += target
for(var/i=1,i<=max_targets,i++)
if(!possible_targets.len)
break
+24
View File
@@ -30,4 +30,28 @@
SC.locked = 0
C.open()
return
/obj/effect/proc_holder/spell/aoe_turf/knock/greater
name = "Greater Knock"
desc = "On first cast, will remove access restrictions on all airlocks on the Cyberiad, and announce this spell's use to the station. On any further cast, will open all doors in sight. Cannot be refunded once bought!"
charge_max = 200
invocation = "MAIOR OXIN FIERA"
invocation_type = "shout"
range = 7
level_max = 0 //Cannot be improved, quality of life since can't be refunded
cooldown_min = 200
var/used = FALSE
/obj/effect/proc_holder/spell/aoe_turf/knock/greater/cast(list/targets, mob/user = usr)
if(!used)
used = TRUE
for(var/obj/machinery/door/airlock/A in airlocks)
if(is_station_level(A.z))
A.req_access = list()
A.req_one_access = list()
command_announcement.Announce("We have removed all access requirements on your station's airlocks. You can thank us later!", "Greetings!", 'sound/misc/notice2.ogg', , , "Space Wizard Federation Message")
else
..()
return
+2
View File
@@ -943,6 +943,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/reagent_containers/food/condiment/peppermill,
/obj/item/kitchen/rollingpin,
/obj/item/storage/fancy/egg_box,
/obj/item/mixing_bowl,
/obj/item/mixing_bowl,
/obj/item/reagent_containers/food/condiment/enzyme,
/obj/item/reagent_containers/food/condiment/sugar,
/obj/item/reagent_containers/food/snacks/meat/monkey,
+7 -1
View File
@@ -394,4 +394,10 @@
for(var/obj/machinery/door/airlock/temp_airlock in src)
temp_airlock.prison_open()
for(var/obj/machinery/door/window/temp_windoor in src)
temp_windoor.open()
temp_windoor.open()
/area/AllowDrop()
CRASH("Bad op: area/AllowDrop() called")
/area/drop_location()
CRASH("Bad op: area/drop_location() called")
+10 -4
View File
@@ -204,9 +204,6 @@
/atom/proc/allow_drop()
return 1
/atom/proc/CheckExit()
return 1
@@ -712,4 +709,13 @@ var/list/blood_splatter_icons = list()
.["Jump to turf"] = "?_src_=holder;adminplayerobservecoodjump=1;X=[curturf.x];Y=[curturf.y];Z=[curturf.z]"
.["Add reagent"] = "?_src_=vars;addreagent=[UID()]"
.["Trigger explosion"] = "?_src_=vars;explode=[UID()]"
.["Trigger EM pulse"] = "?_src_=vars;emp=[UID()]"
.["Trigger EM pulse"] = "?_src_=vars;emp=[UID()]"
/atom/proc/AllowDrop()
return FALSE
/atom/proc/drop_location()
var/atom/L = loc
if(!L)
return null
return L.AllowDrop() ? L : get_turf(L)
+5 -5
View File
@@ -56,7 +56,7 @@
icon_state = "scanner_open"
density = 1
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 50
active_power_usage = 300
interact_offline = 1
@@ -103,8 +103,8 @@
for(var/obj/item/stock_parts/micro_laser/P in component_parts)
damage_coeff = P.rating
/obj/machinery/dna_scannernew/allow_drop()
return 0
/obj/machinery/dna_scannernew/AllowDrop()
return FALSE
/obj/machinery/dna_scannernew/relaymove(mob/user as mob)
if(user.stat)
@@ -359,7 +359,7 @@
var/obj/item/disk/data/disk = null
var/selected_menu_key = null
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 400
var/waiting_for_user_input=0 // Fix for #274 (Mash create block injector without answering dialog to make unlimited injectors) - N3X
@@ -533,7 +533,7 @@
occupantData["name"] = connected.occupant.dna.real_name
occupantData["stat"] = connected.occupant.stat
occupantData["isViableSubject"] = 1
if((NOCLONE in connected.occupant.mutations && connected.scan_level < 3) || !src.connected.occupant.dna || connected.occupant.dna.species.bodyflags & NO_DNA)
if((NOCLONE in connected.occupant.mutations && connected.scan_level < 3) || !src.connected.occupant.dna || (NO_DNA in connected.occupant.dna.species.species_traits))
occupantData["isViableSubject"] = 0
occupantData["health"] = connected.occupant.health
occupantData["maxHealth"] = connected.occupant.maxHealth
+2 -4
View File
@@ -171,11 +171,9 @@
H.visible_message("<span class='warning'>[user] sprays a cloud of fine ice crystals engulfing, [H]!</span>",
"<span class='warning'>[user] sprays a cloud of fine ice crystals cover your [H.head]'s visor and make it into your air vents!.</span>")
add_attack_logs(user, C, "Cryokinesis")
H.bodytemperature = max(0, H.bodytemperature - 50)
H.adjustFireLoss(5)
H.bodytemperature = max(0, H.bodytemperature - 100)
if(!handle_suit)
C.bodytemperature = max(0, C.bodytemperature - 100)
C.adjustFireLoss(10)
C.bodytemperature = max(0, C.bodytemperature - 200)
C.ExtinguishMob()
C.visible_message("<span class='warning'>[user] sprays a cloud of fine ice crystals, engulfing [C]!</span>")
+14 -1
View File
@@ -120,4 +120,17 @@
B.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
spawn(0)
if(is_offspring)
B.verbs -= /mob/camera/blob/verb/split_consciousness
B.verbs -= /mob/camera/blob/verb/split_consciousness
/obj/structure/blob/core/proc/lateblobtimer()
addtimer(CALLBACK(src, .proc/lateblobcheck), 50)
/obj/structure/blob/core/proc/lateblobcheck()
if(overmind)
overmind.add_points(60)
if(overmind.mind)
overmind.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
else
log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks a overmind.mind.")
else
log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks an overmind.")
+1 -1
View File
@@ -7,7 +7,7 @@
var/mob/camera/blob/overmind = null
/obj/structure/blob/storage/update_icon()
if(health <= 0)
if(health <= 0 && !QDELETED(src))
overmind.max_blob_points -= 50
qdel(src)
@@ -81,3 +81,18 @@
if(req_human && !ishuman(user))
return 0
return 1
// Transform the target to the chosen dna. Used in transform.dm and tiny_prick.dm (handy for changes since it's the same thing done twice)
/obj/effect/proc_holder/changeling/proc/transform_dna(var/mob/living/carbon/human/H, var/datum/dna/D)
if(!D)
return
H.set_species(D.species.type)
H.dna = D.Clone()
H.real_name = D.real_name
domutcheck(H, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them
H.flavor_text = ""
H.dna.UpdateSE()
H.dna.UpdateUI()
H.sync_organ_dna(1)
H.UpdateAppearance()
@@ -6,6 +6,11 @@
dna_cost = 1
req_human = 1
/obj/effect/proc_holder/changeling/headcrab/try_to_sting(mob/user, mob/target)
if(alert("Are you sure you wish to do this? This action cannot be undone.",,"Yes","No")=="No")
return
..()
/obj/effect/proc_holder/changeling/headcrab/sting_action(mob/user)
var/datum/mind/M = user.mind
var/list/organs = user.get_organs_zone("head", 1)
@@ -37,4 +42,4 @@
to_chat(crab, "<span class='warning'>You burst out of the remains of your former body in a shower of gore!</span>")
user.gib()
feedback_add_details("changeling_powers","LR")
return 1
return 1
@@ -100,7 +100,6 @@
/obj/effect/proc_holder/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target)
add_attack_logs(user, target, "Transformation sting (changeling) (new identity is [selected_dna.real_name])")
var/datum/dna/NewDNA = selected_dna
if(issmall(target))
to_chat(user, "<span class='notice'>Our genes cry out as we sting [target.name]!</span>")
@@ -111,13 +110,7 @@
target.visible_message("<span class='danger'>[target] begins to violenty convulse!</span>","<span class='userdanger'>You feel a tiny prick and a begin to uncontrollably convulse!</span>")
spawn(10)
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.set_species(NewDNA.species.type)
target.dna = NewDNA.Clone()
target.real_name = NewDNA.real_name
target.UpdateAppearance()
domutcheck(target, null)
transform_dna(target,selected_dna)//target is always human so no problem here
feedback_add_details("changeling_powers","TS")
return TRUE
@@ -14,16 +14,8 @@
if(!chosen_dna)
return
if(ishuman(user))
user.set_species(chosen_dna.species.type)
user.dna = chosen_dna.Clone()
user.real_name = chosen_dna.real_name
domutcheck(user, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them
user.flavor_text = ""
user.dna.UpdateSE()
user.dna.UpdateUI()
user.sync_organ_dna(1)
user.UpdateAppearance()
transform_dna(user,chosen_dna)
user.changeling_update_languages(changeling.absorbed_languages)
+1
View File
@@ -369,6 +369,7 @@ var/round_start_time = 0
if(player.mind.assigned_role == "Captain")
captainless=0
if(player.mind.assigned_role != player.mind.special_role)
job_master.AssignRank(player, player.mind.assigned_role, 0)
job_master.EquipRank(player, player.mind.assigned_role, 0)
EquipCustomItems(player)
if(captainless)
@@ -185,7 +185,7 @@
set name = "Destroy RCDs"
set desc = "Detonate all RCDs on the station, while sparing onboard cyborg RCDs."
if(stat || malf_cooldown)
if(stat || malf_cooldown > world.time)
return
for(var/obj/item/rcd/RCD in rcd_list)
@@ -193,9 +193,7 @@
RCD.detonate_pulse()
to_chat(src, "<span class='danger'>RCD detonation pulse emitted.</span>")
malf_cooldown = 1
spawn(100)
malf_cooldown = 0
malf_cooldown = world.time + 100
/datum/AI_Module/large/mecha_domination
@@ -454,7 +452,7 @@
set name = "Reactivate Cameranet"
set category = "Malfunction"
if(stat || malf_cooldown)
if(stat || malf_cooldown > world.time)
return
var/fixedcams = 0 //Tells the AI how many cams it fixed. Stats are fun.
@@ -477,9 +475,7 @@
break
to_chat(src, "<span class='notice'>Diagnostic complete! Operations completed: [fixedcams].</span>")
malf_cooldown = 1
spawn(30) //Lag protection
malf_cooldown = 0
malf_cooldown = world.time + 30
/datum/AI_Module/large/upgrade_cameras
@@ -47,8 +47,8 @@
changeNext_move(CLICK_CD_MELEE)
if(heal_cooldown <= world.time && !stat)
var/mob/living/carbon/C = target
C.adjustBruteLoss(-5)
C.adjustFireLoss(-5)
C.adjustBruteLoss(-5, robotic=1)
C.adjustFireLoss(-5, robotic=1)
C.adjustOxyLoss(-5)
C.adjustToxLoss(-5)
heal_cooldown = world.time + 20
+1
View File
@@ -146,6 +146,7 @@ proc/issyndicate(mob/living/M as mob)
M.set_species(/datum/species/human, TRUE)
M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics
M.dna.species.create_organs(M)
M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ops.
M.overeatduration = 0
+1 -1
View File
@@ -19,7 +19,7 @@ var/bomb_set
var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open, 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
var/lastentered
var/is_syndicate = 0
use_power = 0
use_power = NO_POWER_USE
unacidable = 1
var/previous_level = ""
var/datum/wires/nuclearbomb/wires = null
@@ -22,6 +22,7 @@
charge_max = 300
clothes_req = 0
action_icon_state = "glare"
humans_only = 1
/obj/effect/proc_holder/spell/targeted/glare/cast(list/targets, mob/user = usr)
for(var/mob/living/carbon/human/target in targets)
@@ -263,6 +264,7 @@
range = 1 //Adjacent to user
var/enthralling = 0
action_icon_state = "enthrall"
humans_only = 1
/obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets, mob/user = usr)
var/mob/living/carbon/human/ling = user
@@ -595,6 +597,7 @@
clothes_req = 0
include_user = 0
action_icon_state = "revive_thrall"
humans_only = 1
/obj/effect/proc_holder/spell/targeted/reviveThrall/cast(list/targets, mob/user = usr)
if(!shadowling_check(user))
+12 -1
View File
@@ -202,6 +202,14 @@
category = "Mobility"
cost = 1
/datum/spellbook_entry/greaterknock
name = "Greater Knock"
spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock/greater
log_name = "GK"
category = "Mobility"
cost = 2
refundable = 0 //global effect on cast
/datum/spellbook_entry/fleshtostone
name = "Flesh to Stone"
spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone
@@ -535,7 +543,10 @@
if(istype(O, /obj/item/antag_spawner/slaughter_demon))
to_chat(user, "<span class='notice'>On second thought, maybe summoning a demon is a bad idea. You refund your points.</span>")
uses+=2
if(istype(O, /obj/item/antag_spawner/slaughter_demon/laughter))
uses += 1
else
uses += 2
for(var/datum/spellbook_entry/item/bloodbottle/BB in entries)
if(!isnull(BB.limit))
BB.limit++
+38 -30
View File
@@ -412,8 +412,45 @@ var/global/datum/controller/occupations/job_master
return 1
/datum/controller/occupations/proc/AssignRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
if(!H)
return null
var/datum/job/job = GetJob(rank)
/datum/controller/occupations/proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
H.job = rank
var/alt_title = null
if(H.mind)
H.mind.assigned_role = rank
alt_title = H.mind.role_alt_title
CreateMoneyAccount(H, rank, job)
to_chat(H, "<B>You are the [alt_title ? alt_title : rank].</B>")
to_chat(H, "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>")
to_chat(H, "<b>For more information on how the station works, see <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure\">Standard Operating Procedure (SOP)</a></b>")
if(job.is_service)
to_chat(H, "<b>As a member of Service, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Service&#41\">Department SOP</a></b>")
if(job.is_supply)
to_chat(H, "<b>As a member of Supply, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Supply&#41\">Department SOP</a></b>")
if(job.is_command)
to_chat(H, "<b>As an important member of Command, read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Command&#41\">Department SOP</a></b>")
if(job.is_legal)
to_chat(H, "<b>Your job requires complete knowledge of <a href=\"https://nanotrasen.se/wiki/index.php/Space_law\">Space Law</a> and <a href=\"https://nanotrasen.se/wiki/index.php/Legal_Standard_Operating_Procedure\">Legal Standard Operating Procedure</a></b>")
if(job.is_engineering)
to_chat(H, "<b>As a member of Engineering, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Engineering&#41\">Department SOP</a></b>")
if(job.is_medical)
to_chat(H, "<b>As a member of Medbay, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Medical&#41\">Department SOP</a></b>")
if(job.is_science)
to_chat(H, "<b>As a member of Science, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Science&#41\">Department SOP</a></b>")
if(job.is_security)
to_chat(H, "<b>As a member of Security, you are to know <a href=\"https://nanotrasen.se/wiki/index.php/Space_law\">Space Law</a>, <a href=\"https://nanotrasen.se/wiki/index.php/Legal_Standard_Operating_Procedure\">Legal Standard Operating Procedure</a>, as well as your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Security&#41\">Department SOP</a></b>")
if(job.req_admin_notify)
to_chat(H, "<b>You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.</b>")
return H
/datum/controller/occupations/proc/EquipRank(mob/living/carbon/human/H, rank, joined_late = 0) // Equip and put them in an area
if(!H)
return null
@@ -457,40 +494,11 @@ var/global/datum/controller/occupations/job_master
H.buckled.loc = H.loc
H.buckled.dir = H.dir
var/alt_title = null
if(H.mind)
H.mind.assigned_role = rank
alt_title = H.mind.role_alt_title
CreateMoneyAccount(H, rank, job)
if(job)
var/new_mob = job.equip(H)
if(ismob(new_mob))
H = new_mob
to_chat(H, "<B>You are the [alt_title ? alt_title : rank].</B>")
to_chat(H, "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>")
to_chat(H, "<b>For more information on how the station works, see <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure\">Standard Operating Procedure (SOP)</a></b>")
if(job.is_service)
to_chat(H, "<b>As a member of Service, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Service&#41\">Department SOP</a></b>")
if(job.is_supply)
to_chat(H, "<b>As a member of Supply, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Supply&#41\">Department SOP</a></b>")
if(job.is_command)
to_chat(H, "<b>As an important member of Command, read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Command&#41\">Department SOP</a></b>")
if(job.is_legal)
to_chat(H, "<b>Your job requires complete knowledge of <a href=\"https://nanotrasen.se/wiki/index.php/Space_law\">Space Law</a> and <a href=\"https://nanotrasen.se/wiki/index.php/Legal_Standard_Operating_Procedure\">Legal Standard Operating Procedure</a></b>")
if(job.is_engineering)
to_chat(H, "<b>As a member of Engineering, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Engineering&#41\">Department SOP</a></b>")
if(job.is_medical)
to_chat(H, "<b>As a member of Medbay, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Medical&#41\">Department SOP</a></b>")
if(job.is_science)
to_chat(H, "<b>As a member of Science, make sure to read up on your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Science&#41\">Department SOP</a></b>")
if(job.is_security)
to_chat(H, "<b>As a member of Security, you are to know <a href=\"https://nanotrasen.se/wiki/index.php/Space_law\">Space Law</a>, <a href=\"https://nanotrasen.se/wiki/index.php/Legal_Standard_Operating_Procedure\">Legal Standard Operating Procedure</a>, as well as your <a href=\"https://nanotrasen.se/wiki/index.php/Standard_Operating_Procedure_&#40;Security&#41\">Department SOP</a></b>")
if(job.req_admin_notify)
to_chat(H, "<b>You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.</b>")
if(job && H)
job.after_spawn(H)
+2 -2
View File
@@ -6,7 +6,7 @@
level = 1 // underfloor
layer = 2.5
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 0
var/syndicate = 0
var/area_bypass = FALSE
@@ -77,4 +77,4 @@
/obj/machinery/bluespace_beacon/syndicate/Destroy()
if(mycomputer)
mycomputer.mybeacon = null
return ..()
return ..()
+1 -1
View File
@@ -5,7 +5,7 @@
density = 1
var/min_temperature = 0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
current_heat_capacity = 1000
layer = 3
armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100)
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "table2-idle"
density = 1
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 1
active_power_usage = 5
var/mob/living/carbon/human/victim = null
+2 -2
View File
@@ -519,8 +519,8 @@
return
return
/obj/machinery/sleeper/allow_drop()
return 0
/obj/machinery/sleeper/AllowDrop()
return FALSE
/obj/machinery/sleeper/verb/move_inside()
set name = "Enter Sleeper"
+1 -1
View File
@@ -75,7 +75,7 @@
icon = 'icons/obj/monitors.dmi'
icon_state = "alarm0"
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 4
active_power_usage = 8
power_channel = ENVIRON
+1 -1
View File
@@ -74,7 +74,7 @@ var/datum/canister_icons/canister_icon_container = new()
pressure_resistance = 7*ONE_ATMOSPHERE
var/temperature_resistance = 1000 + T0C
volume = 1000
use_power = 0
use_power = NO_POWER_USE
interact_offline = 1
var/release_log = ""
var/busy = 0
+1 -1
View File
@@ -10,7 +10,7 @@
var/frequency = 0
var/id
var/id_tag
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 5
req_one_access_txt = "24;10"
@@ -1,6 +1,6 @@
/obj/machinery/portable_atmospherics
name = "atmoalter"
use_power = 0
use_power = NO_POWER_USE
armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100)
var/datum/gas_mixture/air_contents = new
+1 -1
View File
@@ -21,7 +21,7 @@
var/hack_wire
var/disable_wire
var/shock_wire
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
var/busy = 0
+3 -3
View File
@@ -12,7 +12,7 @@
var/active = 0
settagwhitelist = list("id_tag", "logic_id_tag")
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
var/range = 7
@@ -162,7 +162,7 @@
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
@@ -201,4 +201,4 @@
sleep(50)
icon_state = "launcherbtt"
active = 0
active = 0
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "It's used to monitor rooms."
icon = 'icons/obj/monitors.dmi'
icon_state = "camera"
use_power = 2
use_power = ACTIVE_POWER_USE
idle_power_usage = 5
active_power_usage = 10
layer = WALL_OBJ_LAYER
+51 -47
View File
@@ -1,25 +1,25 @@
#define ASSEMBLY_UNBUILT 0 // Nothing done to it
#define ASSEMBLY_WRENCHED 1 // Wrenched in place
#define ASSEMBLY_WELDED 2 // Welded in place
#define ASSEMBLY_WIRED 3 // Wires attached (Upgradable now)
#define ASSEMBLY_BUILT 4 // Fully built (incl panel closed)
/obj/item/camera_assembly
name = "camera assembly"
desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface."
icon = 'icons/obj/monitors.dmi'
icon_state = "cameracase"
w_class = WEIGHT_CLASS_SMALL
anchored = 0
anchored = FALSE
materials = list(MAT_METAL=400, MAT_GLASS=250)
max_integrity = 150
can_be_hit = TRUE
// Motion, EMP-Proof, X-Ray
var/list/obj/item/possible_upgrades = list(/obj/item/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/analyzer)
var/list/upgrades = list()
var/state = 0
var/busy = 0
/*
0 = Nothing done to it
1 = Wrenched in place
2 = Welded in place
3 = Wires attached to it (you can now attach/dettach upgrades)
4 = Screwdriver panel closed and is fully built (you cannot attach upgrades)
*/
var/state = ASSEMBLY_UNBUILT
var/busy = FALSE
/obj/item/camera_assembly/Destroy()
QDEL_LIST(upgrades)
@@ -28,74 +28,72 @@
/obj/item/camera_assembly/attackby(obj/item/I, mob/living/user, params)
switch(state)
if(0)
if(ASSEMBLY_UNBUILT)
// State 0
if(iswrench(I) && isturf(loc))
playsound(loc, I.usesound, 50, 1)
to_chat(user, "You wrench the assembly into place.")
to_chat(user, "<span class='notice'>You wrench the assembly into place.</span>")
anchored = 1
state = 1
state = ASSEMBLY_WRENCHED
update_icon()
auto_turn()
return
if(1)
if(ASSEMBLY_WRENCHED)
// State 1
if(iswelder(I))
if(weld(I, user))
to_chat(user, "You weld the assembly securely into place.")
anchored = 1
state = 2
to_chat(user, "<span class='notice'>You weld the assembly securely into place.</span>")
anchored = TRUE
state = ASSEMBLY_WELDED
return
else if(iswrench(I))
playsound(loc, I.usesound, 50, 1)
to_chat(user, "You unattach the assembly from it's place.")
anchored = 0
to_chat(user, "<span class='notice'>You unattach the assembly from it's place.</span>")
anchored = FALSE
update_icon()
state = 0
state = ASSEMBLY_UNBUILT
return
if(2)
// State 2
if(ASSEMBLY_WELDED)
if(iscoil(I))
var/obj/item/stack/cable_coil/C = I
if(C.use(2))
to_chat(user, "<span class='notice'>You add wires to the assembly.</span>")
playsound(loc, I.usesound, 50, 1)
state = 3
state = ASSEMBLY_WIRED
else
to_chat(user, "<span class='warning'>You need 2 coils of wire to wire the assembly.</span>")
return
else if(iswelder(I))
if(weld(I, user))
to_chat(user, "You unweld the assembly from it's place.")
state = 1
anchored = 1
to_chat(user, "<span class='notice'>You unweld the assembly from it's place.</span>")
state = ASSEMBLY_WRENCHED
anchored = TRUE
return
if(3)
// State 3
if(ASSEMBLY_WIRED)
if(isscrewdriver(I))
playsound(loc, I.usesound, 50, 1)
var/input = strip_html(input(usr, "Which networks would you like to connect this camera to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13"))
if(!input)
to_chat(usr, "No input found please hang up and try your call again.")
to_chat(usr, "<span class='warning'>No input found please hang up and try your call again.</span>")
return
var/list/tempnetwork = splittext(input, ",")
if(tempnetwork.len < 1)
to_chat(usr, "No network found please hang up and try your call again.")
to_chat(usr, "<span class='warning'>No network found please hang up and try your call again.</span>")
return
var/area/camera_area = get_area(src)
var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])"
input = strip_html(input(usr, "How would you like to name the camera?", "Set Camera Name", temptag))
state = 4
state = ASSEMBLY_BUILT
var/obj/machinery/camera/C = new(loc)
loc = C
C.assembly = src
@@ -104,7 +102,7 @@
C.network = uniquelist(tempnetwork)
tempnetwork = difflist(C.network,restricted_camera_networks)
if(!tempnetwork.len)//Camera isn't on any open network - remove its chunk from AI visibility.
if(!tempnetwork.len) // Camera isn't on any open network - remove its chunk from AI visibility.
cameranet.removeCamera(C)
C.c_tag = input
@@ -122,8 +120,8 @@
else if(iswirecutter(I))
new/obj/item/stack/cable_coil(get_turf(src), 2)
playsound(loc, I.usesound, 50, 1)
to_chat(user, "You cut the wires from the circuits.")
state = 2
to_chat(user, "<span class='notice'>You cut the wires from the circuits.</span>")
state = ASSEMBLY_WELDED
return
// Upgrades!
@@ -131,7 +129,7 @@
if(!user.unEquip(I))
to_chat(user, "<span class='warning'>[I] is stuck!</span>")
return
to_chat(user, "You attach [I] into the assembly inner circuits.")
to_chat(user, "<span class='notice'>You attach [I] into the assembly inner circuits.</span>")
upgrades += I
user.drop_item()
I.loc = src
@@ -141,7 +139,7 @@
else if(iscrowbar(I) && upgrades.len)
var/obj/U = locate(/obj) in upgrades
if(U)
to_chat(user, "You unattach an upgrade from the assembly.")
to_chat(user, "<span class='notice'>You unattach an upgrade from the assembly.</span>")
playsound(loc, I.usesound, 50, 1)
U.loc = get_turf(src)
upgrades -= U
@@ -161,23 +159,29 @@
..()
/obj/item/camera_assembly/proc/weld(obj/item/weldingtool/WT, mob/living/user)
if(busy)
return 0
return FALSE
if(!WT.remove_fuel(0, user))
return 0
return FALSE
to_chat(user, "<span class='notice'>You start to weld the [src]..</span>")
to_chat(user, "<span class='notice'>You start to weld the [src]...</span>")
playsound(loc, WT.usesound, 50, 1)
busy = 1
busy = TRUE
if(do_after(user, 20 * WT.toolspeed, target = src))
busy = 0
busy = FALSE
if(!WT.isOn())
return 0
return 1
busy = 0
return 0
return FALSE
return TRUE
busy = FALSE
return FALSE
/obj/item/camera_assembly/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/metal(loc)
qdel(src)
qdel(src)
#undef ASSEMBLY_UNBUILT
#undef ASSEMBLY_WRENCHED
#undef ASSEMBLY_WELDED
#undef ASSEMBLY_WIRED
#undef ASSEMBLY_BUILT
+2 -2
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "ccharger0"
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 60
power_channel = EQUIP
@@ -123,4 +123,4 @@
use_power(200) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly!
charging.give(175) //inefficiency.
updateicon()
updateicon()
@@ -515,7 +515,7 @@
var/eventstarted = 0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
+4 -2
View File
@@ -116,7 +116,10 @@
/obj/machinery/computer/security/proc/get_user_access(mob/user)
var/list/access = list()
if(ishuman(user))
if(emagged)
access = get_all_accesses() // Assume captain level access when emagged
else if(ishuman(user))
access = user.get_access()
else if((isAI(user) || isrobot(user)) && CanUseTopic(user, default_state) == STATUS_INTERACTIVE)
access = get_all_accesses() // Assume captain level access when AI
@@ -159,7 +162,6 @@
var/list/access = get_user_access(user)
if(emagged)
access = get_all_accesses() // Assume captain level access when emagged
data["emagged"] = 1
var/list/networks_list = list()
+1 -1
View File
@@ -4,7 +4,7 @@
icon_state = "computer"
density = 1
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 300
active_power_usage = 300
var/obj/item/circuitboard/circuit = null //if circuit==null, computer can't disassembly
+2 -2
View File
@@ -3,7 +3,7 @@
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
icon_keyboard = "med_key"
icon_screen = "crew"
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 250
active_power_usage = 500
light_color = LIGHT_COLOR_DARKBLUE
@@ -33,4 +33,4 @@
crew_monitor.ui_interact(user, ui_key, ui, force_open)
/obj/machinery/computer/crew/interact(mob/user)
crew_monitor.ui_interact(user)
crew_monitor.ui_interact(user)
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Used to monitor power levels across the station."
icon_screen = "power"
icon_keyboard = "power_key"
use_power = 2
use_power = ACTIVE_POWER_USE
idle_power_usage = 20
active_power_usage = 80
light_color = LIGHT_COLOR_ORANGE
+1 -1
View File
@@ -50,7 +50,7 @@
/obj/machinery/computer/secure_data/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "secure_data.tmpl", name, 800, 380)
ui = new(user, src, ui_key, "secure_data.tmpl", name, 800, 800)
ui.open()
/obj/machinery/computer/secure_data/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
+5 -5
View File
@@ -4,7 +4,7 @@
icon_state = "box_0"
density = 1
anchored = 1
use_power = 0
use_power = NO_POWER_USE
var/obj/item/circuitboard/circuit = null
var/list/components = null
var/list/req_components = null
@@ -655,11 +655,11 @@ obj/item/circuitboard/rdserver
build_path = /obj/machinery/mecha_part_fabricator/spacepod
board_type = "machine"
origin_tech = "programming=2;engineering=2"
frame_desc = "Requires 3 Matter Bins, 2 Manipulators, 2 Micro-Lasers, and 1 Console Screen."
frame_desc = "Requires 2 Matter Bins, 1 Manipulators, 1 Micro-Lasers, and 1 Console Screen."
req_components = list(
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stock_parts/micro_laser = 2,
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/console_screen = 1)
+2 -2
View File
@@ -149,8 +149,8 @@
parent.update = 1
/obj/machinery/atmospherics/unary/cryo_cell/allow_drop()
return 0
/obj/machinery/atmospherics/unary/cryo_cell/AllowDrop()
return FALSE
/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob)
+2 -2
View File
@@ -27,7 +27,7 @@
*/
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
@@ -62,7 +62,7 @@
req_access = list()
req_one_access = list()
playsound(loc, "sparks", 100, 1)
/obj/machinery/door_control/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
+59 -19
View File
@@ -306,6 +306,10 @@ About the new airlock wires panel:
else
return 0
//Checks if the user can get shocked and shocks him if it can. Returns TRUE if it happened
/obj/machinery/door/airlock/proc/shock_user(mob/user, prob)
return (!issilicon(user) && isElectrified() && shock(user, prob))
/obj/machinery/door/airlock/update_icon(state=0, override=0)
if(operating && !override)
return
@@ -630,11 +634,25 @@ About the new airlock wires panel:
return ..()
/obj/machinery/door/airlock/attack_hand(mob/user)
if(!issilicon(user))
if(isElectrified())
if(shock(user, 100))
return
if(shock_user(user, 100))
return
if(headbutt_airlock(user))
return//Smack that head against that airlock
if(remove_airlock_note(user, FALSE))
return
if(panel_open)
if(security_level)
to_chat(user, "<span class='warning'>Wires are protected!</span>")
return
wires.Interact(user)
else
..()
//Checks if the user can headbutt the airlock and does it if it can. Returns TRUE if it happened
/obj/machinery/door/airlock/proc/headbutt_airlock(mob/user)
if(ishuman(user) && prob(40) && density)
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 60 && Adjacent(user))
@@ -648,15 +666,23 @@ About the new airlock wires panel:
H.UpdateDamageIcon()
else
visible_message("<span class='warning'>[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.</span>")
return
return TRUE
return FALSE
//For the tools being used on the door. Since you don't want to call the attack_hand method if you're using hands. That would be silly
//Also it's a bit inconsistent that when you access the panel you headbutt it. But not while crowbarring
//Try to interact with the panel. If the user can't it'll try activating the door
/obj/machinery/door/airlock/proc/interact_with_panel(mob/user)
if(shock_user(user, 100))
return
if(panel_open)
if(security_level)
to_chat(user, "<span class='warning'>Wires are protected!</span>")
return
wires.Interact(user)
else
..()
try_to_activate_door(user)
/obj/machinery/door/airlock/CanUseTopic(mob/user)
if(!issilicon(user) && !isobserver(user))
@@ -777,13 +803,14 @@ About the new airlock wires panel:
return 1
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params)
if(!issilicon(user))
if(isElectrified())
if(shock(user, 75))
return
if(shock_user(user, 75))
return
add_fingerprint(user)
if(headbutt_airlock(user))//See if the user headbutts the airlock
return
if(panel_open)
switch(security_level)
if(AIRLOCK_SECURITY_NONE)
@@ -922,23 +949,19 @@ About the new airlock wires panel:
update_icon()
else if(iswirecutter(C))
if(note)
user.visible_message("<span class='notice'>[user] cuts down [note] from [src].</span>", "<span class='notice'>You remove [note] from [src].</span>")
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1)
note.forceMove(get_turf(user))
note = null
update_icon()
remove_airlock_note(user, TRUE)
else
return attack_hand(user)
return interact_with_panel(user)
else if(ismultitool(C))
return attack_hand(user)
return interact_with_panel(user)
else if(istype(C, /obj/item/assembly/signaler))
return attack_hand(user)
return interact_with_panel(user)
else if(istype(C, /obj/item/pai_cable)) // -- TLE
var/obj/item/pai_cable/cable = C
cable.plugin(src, user)
else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo))
if(note)
to_chat(user, "<span class='warning'>There's already something pinned to this airlock! Use wirecutters to remove it.</span>")
to_chat(user, "<span class='warning'>There's already something pinned to this airlock! Use wirecutters or your hands to remove it.</span>")
return
if(!user.unEquip(C))
to_chat(user, "<span class='warning'>For some reason, you can't attach [C]!</span>")
@@ -1294,6 +1317,23 @@ About the new airlock wires panel:
else if(istype(note, /obj/item/photo))
return "photo"
//Removes the current note on the door if any. Returns if a note is removed
/obj/machinery/door/airlock/proc/remove_airlock_note(mob/user, wirecutters_used=TRUE)
if(note)
if(!wirecutters_used)
if (ishuman(user) && user.a_intent == INTENT_GRAB)//grab that note
user.visible_message("<span class='notice'>[user] removes [note] from [src].</span>", "<span class='notice'>You remove [note] from [src].</span>")
playsound(src, 'sound/items/poster_ripped.ogg', 50, 1)
else return FALSE
else
user.visible_message("<span class='notice'>[user] cuts down [note] from [src].</span>", "<span class='notice'>You remove [note] from [src].</span>")
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1)
note.forceMove(get_turf(user))
note = null
update_icon()
return TRUE
return FALSE
/obj/machinery/door/airlock/narsie_act()
var/turf/T = get_turf(src)
var/runed = prob(20)
+1 -1
View File
@@ -4,7 +4,7 @@
icon_state = "barbervend"
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 40
var/dye_color = "#FFFFFF"
@@ -4,7 +4,7 @@
name = "Embedded Controller"
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
var/on = 1
+3 -3
View File
@@ -13,7 +13,7 @@ FIRE ALARM
var/lockdownbyai = 0
anchored = 1.0
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100)
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
@@ -70,7 +70,7 @@ FIRE ALARM
/obj/machinery/firealarm/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
if(iswirecutter(I) && buildstage == 2)
if(isscrewdriver(I) && buildstage == 2)
wiresexposed = !wiresexposed
update_icon()
return
@@ -281,7 +281,7 @@ Just a object used in constructing fire alarms
var/timing = 0.0
var/lockdownbyai = 0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
+1 -1
View File
@@ -121,7 +121,7 @@
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
+32 -26
View File
@@ -1,23 +1,22 @@
//these are probably broken
/obj/machinery/floodlight
name = "Emergency Floodlight"
name = "emergency floodlight"
icon = 'icons/obj/machines/floodlight.dmi'
icon_state = "flood00"
anchored = 0
density = 1
var/on = 0
anchored = FALSE
density = TRUE
light_power = 20
var/on = FALSE
var/obj/item/stock_parts/cell/high/cell = null
var/use = 5
var/unlocked = 0
var/open = 0
var/unlocked = FALSE
var/open = FALSE
var/brightness_on = 14
light_power = 20
//var/brightness_on = 999 //can't remember what the maxed out value is //Lighting overhaul: No max, stop TRYING TO ILLUMINATE MORE TILES THAN THE MAP CONSISTS OF.
/obj/machinery/floodlight/New()
/obj/machinery/floodlight/Initialize()
. = ..()
src.cell = new(src)
..()
mapVarInit()
/obj/machinery/floodlight/Destroy()
QDEL_NULL(cell)
@@ -30,13 +29,12 @@
if(on)
cell.charge -= use
if(cell.charge <= 0)
on = 0
on = FALSE
updateicon()
set_light(0)
src.visible_message("<span class='warning'>[src] shuts down due to lack of power!</span>")
return
/obj/machinery/floodlight/attack_ai(mob/user as mob)
/obj/machinery/floodlight/attack_ai()
return
/obj/machinery/floodlight/attack_hand(mob/user as mob)
@@ -51,25 +49,33 @@
cell.update_icon()
src.cell = null
to_chat(user, "You remove the power cell")
to_chat(user, "You remove the power cell.")
updateicon()
return
if(on)
on = 0
to_chat(user, "<span class='notice'>You turn off the light</span>")
on = FALSE
to_chat(user, "<span class='notice'>You turn off the light.</span>")
set_light(0)
else
if(!cell)
return
if(cell.charge <= 0)
return
on = 1
to_chat(user, "<span class='notice'>You turn on the light</span>")
on = TRUE
to_chat(user, "<span class='notice'>You turn on the light.</span>")
set_light(brightness_on)
updateicon()
/obj/machinery/floodlight/proc/mapVarInit()
if(on)
if(!cell)
return
if(cell.charge <= 0)
return
set_light(brightness_on)
updateicon()
/obj/machinery/floodlight/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/wrench))
@@ -79,32 +85,32 @@
"[user] tightens \the [src]'s casters.", \
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 1
anchored = TRUE
else if(anchored)
playsound(src.loc, W.usesound, 50, 1)
user.visible_message( \
"[user] loosens \the [src]'s casters.", \
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 0
anchored = FALSE
if(istype(W, /obj/item/screwdriver))
if(!open)
if(unlocked)
unlocked = 0
unlocked = FALSE
to_chat(user, "You screw the battery panel in place.")
else
unlocked = 1
unlocked = TRUE
to_chat(user, "You unscrew the battery panel.")
if(istype(W, /obj/item/crowbar))
if(unlocked)
if(open)
open = 0
open = FALSE
overlays = null
to_chat(user, "You crowbar the battery panel in place.")
else
if(unlocked)
open = 1
open = TRUE
to_chat(user, "You remove the battery panel.")
if(istype(W, /obj/item/stock_parts/cell))
+2 -2
View File
@@ -5,7 +5,7 @@
desc = "A holographic table allowing the crew to have fun(TM) on boring shifts! One player per board."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
var/cooling_down = 0
light_color = LIGHT_COLOR_LIGHTBLUE
@@ -100,4 +100,4 @@
if(default_deconstruction_crowbar(I, ignore_panel = TRUE))
return
else
return ..()
return ..()
+3 -2
View File
@@ -40,7 +40,7 @@ var/list/holopads = list()
desc = "It's a floor-mounted device for projecting holographic images."
icon_state = "holopad0"
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 100
layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
@@ -386,7 +386,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/holopad/proc/SetLightsAndPower()
var/total_users = masters.len + LAZYLEN(holo_calls)
use_power = HOLOPAD_PASSIVE_POWER_USAGE + HOLOGRAM_POWER_USAGE * total_users
use_power = total_users > 0 ? ACTIVE_POWER_USE : IDLE_POWER_USE
active_power_usage = HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users)
if(total_users)
set_light(2)
icon_state = "holopad1"
+1 -1
View File
@@ -41,7 +41,7 @@
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
+1 -1
View File
@@ -7,7 +7,7 @@
var/id = null
var/on = 1.0
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
+3 -3
View File
@@ -100,7 +100,7 @@ Class Procs:
layer = BELOW_OBJ_LAYER
var/stat = 0
var/emagged = 0
var/use_power = 1
var/use_power = IDLE_POWER_USE
//0 = dont run the auto
//1 = run auto, use idle
//2 = run auto, use active
@@ -210,9 +210,9 @@ Class Procs:
/obj/machinery/proc/auto_use_power()
if(!powered(power_channel))
return 0
if(use_power == 1)
if(use_power == IDLE_POWER_USE)
use_power(idle_power_usage,power_channel, 1)
else if(use_power >= 2)
else if(use_power >= ACTIVE_POWER_USE)
use_power(active_power_usage,power_channel, 1)
return 1
+4 -27
View File
@@ -13,7 +13,7 @@
level = 1 // underfloor
layer = 2.5
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 50
var/freq = 1449 // radio frequency
@@ -151,10 +151,10 @@
// Update power usage:
if(on)
use_power = 2
use_power = ACTIVE_POWER_USE
active_power_usage = electricity_level*15
else
use_power = 0
use_power = NO_POWER_USE
// Overload conditions:
@@ -199,7 +199,7 @@
icon_state = "airlock_control_standby"
density = 1
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 45
var/frequency = 1449
var/code = 0
@@ -404,26 +404,3 @@
rpath += copytext(path, i, i+1) // else, add to list
// there doesn't HAVE to be separators but it makes paths syntatically visible
+2 -2
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "mass_driver"
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 50
@@ -215,4 +215,4 @@
return
src.dir = turn(src.dir, -90)
return
return
+5 -11
View File
@@ -87,15 +87,11 @@
var/obj/item/pipe/P = new (loc, pipe_type=p_type, dir=p_dir)
P.update()
P.add_fingerprint(usr)
wait = 1
spawn(10)
wait = 0
wait = world.time + 10
if(href_list["makemeter"])
if(!wait)
if(wait < world.time)
new /obj/item/pipe_meter(loc)
wait = 1
spawn(15)
wait = 0
wait = world.time + 15
if(href_list["makegsensor"])
if(!wait)
new /obj/item/pipe_gsensor(loc)
@@ -192,12 +188,10 @@
usr.set_machine(src)
add_fingerprint(usr)
if(!wait)
if(wait < world.time)
var/p_type = text2num(href_list["dmake"])
var/obj/structure/disposalconstruct/C = new(loc, p_type)
if(p_type in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE))
C.density = TRUE
C.add_fingerprint(usr)
wait = 1
spawn(15)
wait = 0
wait = world.time + 15
+2 -2
View File
@@ -9,7 +9,7 @@
icon_state = "turretCover"
anchored = 1
density = 0
use_power = 1 //this turret uses and requires power
use_power = IDLE_POWER_USE //this turret uses and requires power
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
power_channel = EQUIP //drains power from the EQUIPMENT channel
@@ -997,7 +997,7 @@ var/list/turret_icons
syndicate = 1
installation = null
always_up = 1
use_power = 0
use_power = NO_POWER_USE
has_cover = 0
raised = 1
scan_range = 9
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "qpad-idle"
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 200
active_power_usage = 5000
var/teleport_cooldown = 400 //30 seconds base due to base parts
+4 -4
View File
@@ -4,7 +4,7 @@
icon_state = "recharger0"
desc = "A charging dock for energy based weaponry."
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 4
active_power_usage = 250
var/obj/item/charging = null
@@ -48,7 +48,7 @@
return 1
G.forceMove(src)
charging = G
use_power = 2
use_power = ACTIVE_POWER_USE
update_icon()
else
to_chat(user, "<span class='notice'>[src] isn't connected to anything!</span>")
@@ -66,7 +66,7 @@
charging.forceMove(loc)
user.put_in_hands(charging)
charging = null
use_power = 1
use_power = IDLE_POWER_USE
update_icon()
/obj/machinery/recharger/attack_tk(mob/user)
@@ -74,7 +74,7 @@
charging.update_icon()
charging.forceMove(loc)
charging = null
use_power = 1
use_power = IDLE_POWER_USE
update_icon()
/obj/machinery/recharger/process()
+4 -4
View File
@@ -4,7 +4,7 @@
icon_state = "borgcharger0"
density = 1
anchored = 1.0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 1000
var/mob/occupant = null
@@ -109,8 +109,8 @@
/obj/machinery/recharge_station/Bumped(var/mob/AM)
move_inside(AM)
/obj/machinery/recharge_station/allow_drop()
return 0
/obj/machinery/recharge_station/AllowDrop()
return FALSE
/obj/machinery/recharge_station/relaymove(mob/user as mob)
if(user.stat)
@@ -177,7 +177,7 @@
occupant.forceMove(loc)
occupant = null
build_icon()
use_power = 1
use_power = IDLE_POWER_USE
return
/obj/machinery/recharge_station/proc/restock_modules()
+134 -126
View File
@@ -4,14 +4,14 @@
icon = 'icons/effects/effects.dmi'
icon_state = "shield-old"
density = 1
opacity = 0
opacity = FALSE
anchored = 1
unacidable = 1
var/const/max_health = 200
var/health = max_health //The shield can only take so much beating (prevents perma-prisons)
/obj/machinery/shield/New()
src.dir = pick(1,2,3,4)
dir = pick(NORTH, SOUTH, EAST, WEST)
..()
/obj/machinery/shield/Initialize()
@@ -19,7 +19,7 @@
..()
/obj/machinery/shield/Destroy()
opacity = 0
opacity = FALSE
density = 0
air_update_turf(1)
return ..()
@@ -30,43 +30,48 @@
move_update_air(T)
/obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height)
if(!height) return 0
else return ..()
if(!height)
return FALSE
return ..()
/obj/machinery/shield/CanAtmosPass(var/turf/T)
/obj/machinery/shield/CanAtmosPass(turf/T)
return !density
/obj/machinery/shield/attackby(obj/item/W as obj, mob/user as mob, params)
if(!istype(W)) return
/obj/machinery/shield/attackby(obj/item/I, mob/user, params)
if(!istype(I))
return
//Calculate damage
var/aforce = W.force
if(W.damtype == BRUTE || W.damtype == BURN)
src.health -= aforce
var/aforce = I.force
if(I.damtype == BRUTE || I.damtype == BURN)
health -= aforce
//Play a fitting sound
playsound(src.loc, 'sound/effects/EMPulse.ogg', 75, 1)
playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1)
if(src.health <= 0)
if(health <= 0)
visible_message("<span class='notice'>The [src] dissipates</span>")
qdel(src)
return
opacity = 1
spawn(20) if(src) opacity = 0
opacity = TRUE
spawn(20)
if(src)
opacity = FALSE
..()
/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj)
/obj/machinery/shield/bullet_act(obj/item/projectile/Proj)
health -= Proj.damage
..()
if(health <=0)
visible_message("<span class='notice'>The [src] dissipates</span>")
qdel(src)
return
opacity = 1
spawn(20) if(src) opacity = 0
opacity = TRUE
spawn(20)
if(src)
opacity = FALSE
/obj/machinery/shield/ex_act(severity)
switch(severity)
@@ -79,7 +84,6 @@
if(3.0)
if(prob(25))
qdel(src)
return
/obj/machinery/shield/emp_act(severity)
switch(severity)
@@ -114,10 +118,10 @@
return
//The shield becomes dense to absorb the blow.. purely asthetic.
opacity = 1
opacity = TRUE
spawn(20)
if(src)
opacity = 0
opacity = FALSE
/obj/machinery/shieldgen
@@ -126,17 +130,17 @@
icon = 'icons/obj/objects.dmi'
icon_state = "shieldoff"
density = 1
opacity = 0
opacity = FALSE
anchored = 0
pressure_resistance = 2*ONE_ATMOSPHERE
req_access = list(access_engine)
var/const/max_health = 100
var/health = max_health
var/active = 0
var/malfunction = 0 //Malfunction causes parts of the shield to slowly dissapate
var/malfunction = FALSE //Malfunction causes parts of the shield to slowly dissapate
var/list/deployed_shields = list()
var/is_open = 0 //Whether or not the wires are exposed
var/locked = 0
var/is_open = FALSE //Whether or not the wires are exposed
var/locked = FALSE
/obj/machinery/shieldgen/Destroy()
QDEL_LIST(deployed_shields)
@@ -145,9 +149,10 @@
/obj/machinery/shieldgen/proc/shields_up()
if(active) return 0 //If it's already turned on, how did this get called?
if(active)
return //If it's already turned on, how did this get called?
src.active = 1
active = 1
update_icon()
for(var/turf/target_tile in range(2, src))
@@ -156,9 +161,10 @@
deployed_shields += new /obj/machinery/shield(target_tile)
/obj/machinery/shieldgen/proc/shields_down()
if(!active) return 0 //If it's already off, how did this get called?
if(!active)
return //If it's already off, how did this get called?
src.active = 0
active = 0
update_icon()
for(var/obj/machinery/shield/shield_tile in deployed_shields)
@@ -173,7 +179,7 @@
/obj/machinery/shieldgen/proc/checkhp()
if(health <= 30)
src.malfunction = 1
malfunction = TRUE
if(health <= 0)
qdel(src)
update_icon()
@@ -182,28 +188,28 @@
/obj/machinery/shieldgen/ex_act(severity)
switch(severity)
if(1.0)
src.health -= 75
src.checkhp()
health -= 75
checkhp()
if(2.0)
src.health -= 30
health -= 30
if(prob(15))
src.malfunction = 1
src.checkhp()
malfunction = TRUE
checkhp()
if(3.0)
src.health -= 10
src.checkhp()
health -= 10
checkhp()
return
/obj/machinery/shieldgen/emp_act(severity)
switch(severity)
if(1)
src.health /= 2 //cut health in half
malfunction = 1
locked = pick(0,1)
health = health * 0.5 //cut health in half
malfunction = TRUE
locked = pick(TRUE, FALSE)
if(2)
if(prob(50))
src.health *= 0.3 //chop off a third of the health
malfunction = 1
health *= 0.3 //chop off a third of the health
malfunction = TRUE
checkhp()
/obj/machinery/shieldgen/attack_hand(mob/user as mob)
@@ -214,70 +220,70 @@
to_chat(user, "The panel must be closed before operating this machine.")
return
if(src.active)
if(active)
user.visible_message("<span class='notice'>[bicon(src)] [user] deactivated the shield generator.</span>", \
"<span class='notice'>[bicon(src)] You deactivate the shield generator.</span>", \
"You hear heavy droning fade out.")
src.shields_down()
shields_down()
else
if(anchored)
user.visible_message("<span class='notice'>[bicon(src)] [user] activated the shield generator.</span>", \
"<span class='notice'>[bicon(src)] You activate the shield generator.</span>", \
"You hear heavy droning.")
src.shields_up()
shields_up()
else
to_chat(user, "The device must first be secured to the floor.")
return
/obj/machinery/shieldgen/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/card/emag))
malfunction = 1
/obj/machinery/shieldgen/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/card/emag))
malfunction = TRUE
update_icon()
else if(istype(W, /obj/item/screwdriver))
playsound(src.loc, W.usesound, 100, 1)
else if(isscrewdriver(I))
playsound(loc, I.usesound, 100, 1)
if(is_open)
to_chat(user, "<span class='notice'>You close the panel.</span>")
is_open = 0
is_open = FALSE
else
to_chat(user, "<span class='notice'>You open the panel and expose the wiring.</span>")
is_open = 1
is_open = TRUE
else if(istype(W, /obj/item/stack/cable_coil) && malfunction && is_open)
var/obj/item/stack/cable_coil/coil = W
else if(istype(I, /obj/item/stack/cable_coil) && malfunction && is_open)
var/obj/item/stack/cable_coil/coil = I
to_chat(user, "<span class='notice'>You begin to replace the wires.</span>")
//if(do_after(user, min(60, round( ((maxhealth/health)*10)+(malfunction*10) ), target = src)) //Take longer to repair heavier damage
if(do_after(user, 30 * coil.toolspeed, target = src))
if(!src || !coil) return
if(!src || !coil)
return
coil.use(1)
health = max_health
malfunction = 0
malfunction = TRUE
playsound(loc, coil.usesound, 50, 1)
to_chat(user, "<span class='notice'>You repair the [src]!</span>")
update_icon()
else if(istype(W, /obj/item/wrench))
else if(istype(I, /obj/item/wrench))
if(locked)
to_chat(user, "The bolts are covered, unlocking this would retract the covers.")
return
if(anchored)
playsound(src.loc, W.usesound, 100, 1)
playsound(loc, I.usesound, 100, 1)
to_chat(user, "<span class='notice'>You unsecure the [src] from the floor!</span>")
if(active)
to_chat(user, "<span class='notice'>The [src] shuts off!</span>")
src.shields_down()
shields_down()
anchored = 0
else
if(istype(get_turf(src), /turf/space)) return //No wrenching these in space!
playsound(src.loc, W.usesound, 100, 1)
if(istype(get_turf(src), /turf/space))
return //No wrenching these in space!
playsound(loc, I.usesound, 100, 1)
to_chat(user, "<span class='notice'>You secure the [src] to the floor!</span>")
anchored = 1
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))
if(src.allowed(user))
src.locked = !src.locked
to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]")
else if(istype(I, /obj/item/card/id) || istype(I, /obj/item/pda))
if(allowed(user))
locked = !locked
to_chat(user, "The controls are now [locked ? "locked." : "unlocked."]")
else
to_chat(user, "<span class='warning'>Access denied.</span>")
@@ -287,11 +293,12 @@
/obj/machinery/shieldgen/update_icon()
if(active)
src.icon_state = malfunction ? "shieldonbr":"shieldon"
icon_state = malfunction ? "shieldonbr":"shieldon"
else
src.icon_state = malfunction ? "shieldoffbr":"shieldoff"
icon_state = malfunction ? "shieldoffbr":"shieldoff"
return
////FIELD GEN START //shameless copypasta from fieldgen, powersink, and grille
#define maxstoredpower 500
/obj/machinery/shieldwallgen
@@ -309,24 +316,24 @@
var/last_check = 0
var/check_delay = 10
var/recalc = 0
var/locked = 1
var/locked = TRUE
var/destroyed = 0
var/directwired = 1
// var/maxshieldload = 200
var/obj/structure/cable/attached // the attached cable
var/storedpower = 0
flags = CONDUCT
use_power = 0
use_power = NO_POWER_USE
/obj/machinery/shieldwallgen/proc/power()
if(!anchored)
power = 0
return 0
var/turf/T = src.loc
var/turf/T = loc
var/obj/structure/cable/C = T.get_cable_node()
var/datum/powernet/PN
if(C) PN = C.powernet // find the powernet of the connected cable
if(C)
PN = C.powernet // find the powernet of the connected cable
if(!PN)
power = 0
@@ -345,32 +352,33 @@
// message_admins("[PN.load]", 1)
// use_power(250) //uses APC power
/obj/machinery/shieldwallgen/attack_hand(mob/user as mob)
/obj/machinery/shieldwallgen/attack_hand(mob/user)
if(state != 1)
to_chat(user, "<span class='warning'>The shield generator needs to be firmly secured to the floor first.</span>")
return 1
if(src.locked && !istype(user, /mob/living/silicon))
if(locked && !issilicon(user))
to_chat(user, "<span class='warning'>The controls are locked!</span>")
return 1
if(power != 1)
to_chat(user, "<span class='warning'>The shield generator needs to be powered by wire underneath.</span>")
return 1
if(src.active >= 1)
src.active = 0
if(active >= 1)
active = 0
icon_state = "Shield_Gen"
user.visible_message("[user] turned the shield generator off.", \
"You turn off the shield generator.", \
"You hear heavy droning fade out.")
for(var/dir in list(1,2,4,8)) src.cleanup(dir)
for(var/dir in list(NORTH, SOUTH, EAST, WEST))
cleanup(dir)
else
src.active = 1
active = 1
icon_state = "Shield_Gen +a"
user.visible_message("[user] turned the shield generator on.", \
"You turn on the shield generator.", \
"You hear heavy droning.")
src.add_fingerprint(user)
add_fingerprint(user)
/obj/machinery/shieldwallgen/process()
spawn(100)
@@ -381,12 +389,10 @@
storedpower = maxstoredpower
if(storedpower <= 0)
storedpower = 0
// if(shieldload >= maxshieldload) //there was a loop caused by specifics of process(), so this was needed.
// shieldload = maxshieldload
if(src.active == 1)
if(!src.state == 1)
src.active = 0
if(active == 1)
if(!state == 1)
active = 0
return
spawn(1)
setup_field(1)
@@ -396,18 +402,19 @@
setup_field(4)
spawn(4)
setup_field(8)
src.active = 2
if(src.active >= 1)
if(src.power == 0)
src.visible_message("<span class='warning'>The [src.name] shuts down due to lack of power!</span>", \
active = 2
if(active >= 1)
if(power == 0)
visible_message("<span class='warning'>The [name] shuts down due to lack of power!</span>", \
"You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
for(var/dir in list(1,2,4,8)) src.cleanup(dir)
active = 0
for(var/dir in list(NORTH, SOUTH, EAST, WEST))
cleanup(dir)
/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0)
var/turf/T = src.loc
var/turf/T2 = src.loc
/obj/machinery/shieldwallgen/proc/setup_field(NSEW = 0)
var/turf/T = loc
var/turf/T2 = loc
var/obj/machinery/shieldwallgen/G
var/steps = 0
var/oNSEW = 0
@@ -439,7 +446,7 @@
if(isnull(G))
return
T2 = src.loc
T2 = loc
for(var/dist = 0, dist < steps, dist += 1) // creates each field tile
var/field_dir = get_dir(T2,get_step(T2, NSEW))
@@ -450,30 +457,30 @@
CF.dir = field_dir
/obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
/obj/machinery/shieldwallgen/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/wrench))
if(active)
to_chat(user, "Turn off the field generator first.")
return
else if(state == 0)
state = 1
playsound(src.loc, W.usesound, 75, 1)
playsound(loc, I.usesound, 75, 1)
to_chat(user, "You secure the external reinforcing bolts to the floor.")
src.anchored = 1
anchored = 1
return
else if(state == 1)
state = 0
playsound(src.loc, W.usesound, 75, 1)
playsound(loc, I.usesound, 75, 1)
to_chat(user, "You undo the external reinforcing bolts.")
src.anchored = 0
anchored = 0
return
if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda))
if(src.allowed(user))
src.locked = !src.locked
to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]")
if(istype(I, /obj/item/card/id)||istype(I, /obj/item/pda))
if(allowed(user))
locked = !locked
to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]")
else
to_chat(user, "<span class='warning'>Access denied.</span>")
@@ -481,18 +488,19 @@
add_fingerprint(user)
..()
/obj/machinery/shieldwallgen/proc/cleanup(var/NSEW)
/obj/machinery/shieldwallgen/proc/cleanup(NSEW)
var/obj/machinery/shieldwall/F
var/obj/machinery/shieldwallgen/G
var/turf/T = src.loc
var/turf/T2 = src.loc
var/turf/T = loc
var/turf/T2 = loc
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for fields
T = get_step(T2, NSEW)
T2 = T
if(locate(/obj/machinery/shieldwall) in T)
F = (locate(/obj/machinery/shieldwall) in T)
qdel(F)
if(F.gen_primary == src || F.gen_secondary == src)
qdel(F)
if(locate(/obj/machinery/shieldwallgen) in T)
G = (locate(/obj/machinery/shieldwallgen) in T)
@@ -500,19 +508,19 @@
break
/obj/machinery/shieldwallgen/Destroy()
src.cleanup(1)
src.cleanup(2)
src.cleanup(4)
src.cleanup(8)
cleanup(1)
cleanup(2)
cleanup(4)
cleanup(8)
return ..()
/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj)
/obj/machinery/shieldwallgen/bullet_act(obj/item/projectile/Proj)
storedpower -= Proj.damage
..()
return
//////////////Containment Field START
////////////// Containment Field START
/obj/machinery/shieldwall
name = "Shield"
desc = "An energy shield."
@@ -524,21 +532,20 @@
luminosity = 3
var/needs_power = 0
var/active = 1
// var/power = 10
var/delay = 5
var/last_active
var/mob/U
var/obj/machinery/shieldwallgen/gen_primary
var/obj/machinery/shieldwallgen/gen_secondary
/obj/machinery/shieldwall/New(var/obj/machinery/shieldwallgen/A, var/obj/machinery/shieldwallgen/B)
/obj/machinery/shieldwall/New(obj/machinery/shieldwallgen/A, obj/machinery/shieldwallgen/B)
..()
src.gen_primary = A
src.gen_secondary = B
gen_primary = A
gen_secondary = B
if(A && B)
needs_power = 1
/obj/machinery/shieldwall/attack_hand(mob/user as mob)
/obj/machinery/shieldwall/attack_hand(mob/user)
return
/obj/machinery/shieldwall/rpd_blocksusage()
@@ -553,14 +560,14 @@
if(!(gen_primary.active)||!(gen_secondary.active))
qdel(src)
return
//
if(prob(50))
gen_primary.storedpower -= 10
else
gen_secondary.storedpower -=10
/obj/machinery/shieldwall/bullet_act(var/obj/item/projectile/Proj)
/obj/machinery/shieldwall/bullet_act(obj/item/projectile/Proj)
if(needs_power)
var/obj/machinery/shieldwallgen/G
if(prob(50))
@@ -600,7 +607,8 @@
/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0)
if(height==0) return 1
if(height == 0)
return TRUE
if(istype(mover) && mover.checkpass(PASSGLASS))
return prob(20)
@@ -608,7 +616,7 @@
if(istype(mover, /obj/item/projectile))
return prob(10)
else
return !src.density
return !density
/obj/machinery/shieldwall/syndicate
+50 -54
View File
@@ -18,7 +18,6 @@
account = get_card_account(user.get_active_hand())
else
account = null
ui_interact(user)
/obj/machinery/slot_machine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
@@ -30,81 +29,78 @@
/obj/machinery/slot_machine/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
var/data[0]
data["working"] = working
data["money"] = account ? account.money : null
data["plays"] = plays
data["result"] = result
data["resultlvl"] = resultlvl
return data
/obj/machinery/slot_machine/Topic(href, href_list)
add_fingerprint(usr)
if(href_list["ops"])
var/operation = text2num(href_list["ops"])
if(operation == 1) // Play
if(working == 1)
if(text2num(href_list["ops"])) // Play
if(working)
return
if(!account || account.money < 10)
return
if(!account.charge(10, null, "Bet", "Slot Machine", "Slot Machine"))
return
plays += 1
plays++
working = 1
icon_state = "slots-on"
var/roll = rand(1,4050)
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
spawn(25)
if(roll == 1)
visible_message("<b>[src]</b> says, 'JACKPOT! [usr.name] has won a MILLION CREDITS!'")
event_announcement.Announce("Congratulations to [usr.name] on winning the Jackpot of ONE MILLION CREDITS!", "Jackpot Winner")
result = "JACKPOT! You win one million credits!"
resultlvl = "highlight"
win_money(1000000, 'sound/goonstation/misc/airraid_loop.ogg')
else if(roll > 1 && roll <= 5)
visible_message("<b>[src]</b> says, 'Big Winner! [usr.name] has won a hundred thousand credits!'")
event_announcement.Announce("Congratulations to [usr.name] on winning a hundred thousand credits!", "Big Winner")
result = "Big Winner! You win a hundred thousand credits!"
resultlvl = "good"
win_money(100000, 'sound/goonstation/misc/klaxon.ogg')
else if(roll > 5 && roll <= 50)
visible_message("<b>[src]</b> says, 'Big Winner! [usr.name] has won ten thousand credits!'")
result = "You win ten thousand credits!"
resultlvl = "good"
win_money(10000, 'sound/goonstation/misc/klaxon.ogg')
else if(roll > 50 && roll <= 100)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won a thousand credits!'")
result = "You win a thousand credits!"
resultlvl = "good"
win_money(1000, 'sound/goonstation/misc/bell.ogg')
else if(roll > 100 && roll <= 200)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won a hundred credits!'")
result = "You win a hundred credits!"
resultlvl = "good"
win_money(100, 'sound/goonstation/misc/bell.ogg')
else if(roll > 200 && roll <= 300)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won fifty credits!'")
result = "You win fifty credits!"
resultlvl = "good"
win_money(50)
else if(roll > 300 && roll <= 1000)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won ten credits!'")
result = "You win ten credits!"
resultlvl = "good"
win_money(10)
else
result = "<span class='warning'>No luck!</span>"
resultlvl = "average"
working = 0
icon_state = "slots-off"
addtimer(CALLBACK(src, .proc/spin_slots, usr.name), 25)
/obj/machinery/slot_machine/proc/spin_slots(userName)
switch(rand(1,4050))
if(1)
atom_say("JACKPOT! [userName] has won a MILLION CREDITS!")
event_announcement.Announce("Congratulations to [userName] on winning the Jackpot of ONE MILLION CREDITS!", "Jackpot Winner")
result = "JACKPOT! You win one million credits!"
resultlvl = "highlight"
win_money(1000000, 'sound/goonstation/misc/airraid_loop.ogg')
if(2 to 5)
atom_say("Big Winner! [userName] has won a hundred thousand credits!")
event_announcement.Announce("Congratulations to [userName] on winning a hundred thousand credits!", "Big Winner")
result = "Big Winner! You win a hundred thousand credits!"
resultlvl = "good"
win_money(100000, 'sound/goonstation/misc/klaxon.ogg')
if(6 to 50)
atom_say("Big Winner! [userName] has won ten thousand credits!")
result = "You win ten thousand credits!"
resultlvl = "good"
win_money(10000, 'sound/goonstation/misc/klaxon.ogg')
if(51 to 100)
atom_say("Winner! [userName] has won a thousand credits!")
result = "You win a thousand credits!"
resultlvl = "good"
win_money(1000, 'sound/goonstation/misc/bell.ogg')
if(101 to 200)
atom_say("Winner! [userName] has won a hundred credits!")
result = "You win a hundred credits!"
resultlvl = "good"
win_money(100, 'sound/goonstation/misc/bell.ogg')
if(201 to 300)
atom_say("Winner! [userName] has won fifty credits!")
result = "You win fifty credits!"
resultlvl = "good"
win_money(50)
if(301 to 1000)
atom_say("Winner! [userName] has won ten credits!")
result = "You win ten credits!"
resultlvl = "good"
win_money(10)
else
result = "<span class='warning'>No luck!</span>"
resultlvl = "average"
working = 0
icon_state = "slots-off"
/obj/machinery/slot_machine/proc/win_money(amt, sound='sound/machines/ping.ogg')
if(sound)
playsound(loc, sound, 55, 1)
if(!account)
return
account.credit(amt, "Slot Winnings", "Slot Machine", account.owner_name)
account.credit(amt, "Slot Winnings", "Slot Machine", account.owner_name)
+2 -2
View File
@@ -16,7 +16,7 @@
name = "status display"
anchored = 1
density = 0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
var/mode = 1 // 0 = Blank
// 1 = Shuttle timer
@@ -280,4 +280,4 @@
#undef FONT_COLOR
#undef WARNING_FONT_COLOR
#undef FONT_STYLE
#undef SCROLL_SPEED
#undef SCROLL_SPEED
+7 -7
View File
@@ -15,7 +15,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
desc = "A dish-shaped machine used to broadcast processed subspace signals."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 25
machinetype = 5
circuitboard = /obj/item/circuitboard/telecomms/broadcaster
@@ -113,7 +113,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
desc = "A compact machine used for portable subspace telecommuniations processing."
density = 1
anchored = 1
use_power = 0
use_power = NO_POWER_USE
idle_power_usage = 0
machinetype = 6
var/intercept = 0 // if nonzero, broadcasts all messages to syndicate channel
@@ -167,15 +167,15 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
old_type = SYNDICATE_RADIO_TYPE
if(new_freq == antag_freq)
new_type = SYNDICATE_RADIO_TYPE
for(var/cent_freq in CENT_FREQS)
if(old_freq == cent_freq)
old_type = CENTCOMM_RADIO_TYPE
if(new_freq == cent_freq)
new_type = CENTCOMM_RADIO_TYPE
return new_type > old_type
/**
Here is the big, bad function that broadcasts a message given the appropriate
@@ -246,11 +246,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
var/bad_connection = FALSE
var/datum/radio_frequency/new_connection = connection
if(connection.frequency != display_freq)
bad_connection = Is_Bad_Connection(connection.frequency, display_freq)
new_connection = radio_controller.return_frequency(display_freq)
var/list/obj/item/radio/radios = list()
// --- Broadcast only to intercom devices ---
+18 -18
View File
@@ -65,31 +65,31 @@
i++
// If the log is a speech file
if(C.input_type == "Speech File")
dat += "<li><font color = #008F00>[C.name]</font color> <font color = #FF0000><a href='?src=[UID()];delete=[i]'>\[X\]</a></font color><br>"
dat += "<li><font color = #008F00>[C.name]</font> <font color = #FF0000><a href='?src=[UID()];delete=[i]'>\[X\]</a></font><br>"
// -- If the orator is a human, or universal translate is active, OR mob has universal speech on --
if(user.say_understands(null, C.parameters["language"]) || universal_translate || C.parameters["uspeech"])
dat += "<u><font color = #18743E>Data type</font color></u>: [C.input_type]<br>"
dat += "<u><font color = #18743E>Source</font color></u>: [C.parameters["name"]] (Job: [C.parameters["job"]])<br>"
dat += "<u><font color = #18743E>Class</font color></u>: [C.parameters["race"]]<br>"
dat += "<u><font color = #18743E>Contents</font color></u>: \"[C.parameters["message"]]\"<br>"
dat += "<u><font color = #18743E>Data type</font></u>: [C.input_type]<br>"
dat += "<u><font color = #18743E>Source</font></u>: [C.parameters["name"]] (Job: [C.parameters["job"]])<br>"
dat += "<u><font color = #18743E>Class</font></u>: [C.parameters["race"]]<br>"
dat += "<u><font color = #18743E>Contents</font></u>: \"[C.parameters["message"]]\"<br>"
// -- Orator is not human and universal translate not active --
else
dat += "<u><font color = #18743E>Data type</font color></u>: Audio File<br>"
dat += "<u><font color = #18743E>Source</font color></u>: <i>Unidentifiable</i><br>"
dat += "<u><font color = #18743E>Class</font color></u>: [C.parameters["race"]]<br>"
dat += "<u><font color = #18743E>Contents</font color></u>: <i>Unintelligble</i><br>"
dat += "<u><font color = #18743E>Data type</font></u>: Audio File<br>"
dat += "<u><font color = #18743E>Source</font></u>: <i>Unidentifiable</i><br>"
dat += "<u><font color = #18743E>Class</font></u>: [C.parameters["race"]]<br>"
dat += "<u><font color = #18743E>Contents</font></u>: <i>Unintelligble</i><br>"
dat += "</li><br>"
else if(C.input_type == "Execution Error")
dat += "<li><font color = #990000>[C.name]</font color> <font color = #FF0000><a href='?src=[UID()];delete=[i]'>\[X\]</a></font color><br>"
dat += "<u><font color = #787700>Output</font color></u>: \"[C.parameters["message"]]\"<br>"
dat += "<li><font color = #990000>[C.name]</font> <font color = #FF0000><a href='?src=[UID()];delete=[i]'>\[X\]</a></font><br>"
dat += "<u><font color = #787700>Output</font></u>: \"[C.parameters["message"]]\"<br>"
dat += "</li><br>"
@@ -131,7 +131,7 @@
if("scan")
if(servers.len > 0)
temp = "<font color = #D70B00>- FAILED: CANNOT PROBE WHEN BUFFER FULL -</font color>"
temp = "<font color = #D70B00>- FAILED: CANNOT PROBE WHEN BUFFER FULL -</font>"
else
for(var/obj/machinery/telecomms/server/T in range(25, src))
@@ -139,9 +139,9 @@
servers.Add(T)
if(!servers.len)
temp = "<font color = #D70B00>- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -</font color>"
temp = "<font color = #D70B00>- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -</font>"
else
temp = "<font color = #336699>- [servers.len] SERVERS PROBED & BUFFERED -</font color>"
temp = "<font color = #336699>- [servers.len] SERVERS PROBED & BUFFERED -</font>"
screen = 0
@@ -155,13 +155,13 @@
var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])]
temp = "<font color = #336699>- DELETED ENTRY: [D.name] -</font color>"
temp = "<font color = #336699>- DELETED ENTRY: [D.name] -</font>"
SelectedServer.log_entries.Remove(D)
qdel(D)
else
temp = "<font color = #D70B00>- FAILED: NO SELECTED MACHINE -</font color>"
temp = "<font color = #D70B00>- FAILED: NO SELECTED MACHINE -</font>"
if(href_list["network"])
@@ -169,14 +169,14 @@
if(newnet && ((usr in range(1, src) || issilicon(usr))))
if(length(newnet) > 15)
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font>"
else
network = newnet
screen = 0
servers = list()
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font color>"
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font>"
updateUsrDialog()
return
@@ -222,7 +222,7 @@
/obj/machinery/telecomms/processor/Options_Topic(href, href_list)
if(href_list["process"])
temp = "<font color = #666633>-% Processing mode changed. %-</font color>"
temp = "<font color = #666633>-% Processing mode changed. %-</font>"
src.process_mode = !src.process_mode
*/
@@ -240,18 +240,18 @@
if(href_list["receive"])
receiving = !receiving
temp = "<font color = #666633>-% Receiving mode changed. %-</font color>"
temp = "<font color = #666633>-% Receiving mode changed. %-</font>"
if(href_list["broadcast"])
broadcasting = !broadcasting
temp = "<font color = #666633>-% Broadcasting mode changed. %-</font color>"
temp = "<font color = #666633>-% Broadcasting mode changed. %-</font>"
if(href_list["change_listening"])
//Lock to the station OR lock to the current position!
//You need at least two receivers and two broadcasters for this to work, this includes the machine.
var/result = toggle_level()
if(result)
temp = "<font color = #666633>-% [src]'s signal has been successfully changed.</font color>"
temp = "<font color = #666633>-% [src]'s signal has been successfully changed.</font>"
else
temp = "<font color = #666633>-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required.</font color>"
temp = "<font color = #666633>-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required.</font>"
// BUS
@@ -270,10 +270,10 @@
newfreq *= 10 // shift the decimal one place
if(newfreq < 10000)
change_frequency = newfreq
temp = "<font color = #666633>-% New frequency to change to assigned: \"[newfreq] GHz\" %-</font color>"
temp = "<font color = #666633>-% New frequency to change to assigned: \"[newfreq] GHz\" %-</font>"
else
change_frequency = 0
temp = "<font color = #666633>-% Frequency changing deactivated %-</font color>"
temp = "<font color = #666633>-% Frequency changing deactivated %-</font>"
/obj/machinery/telecomms/Topic(href, href_list)
@@ -293,27 +293,27 @@
if("toggle")
src.toggled = !src.toggled
temp = "<font color = #666633>-% [src] has been [src.toggled ? "activated" : "deactivated"].</font color>"
temp = "<font color = #666633>-% [src] has been [src.toggled ? "activated" : "deactivated"].</font>"
update_power()
/*
if("hide")
src.hide = !hide
temp = "<font color = #666633>-% Shadow Link has been [src.hide ? "activated" : "deactivated"].</font color>"
temp = "<font color = #666633>-% Shadow Link has been [src.hide ? "activated" : "deactivated"].</font>"
*/
if("id")
var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID for this machine", src, id) as null|text),1,MAX_MESSAGE_LEN)
if(newid && canAccess(usr))
id = newid
temp = "<font color = #666633>-% New ID assigned: \"[id]\" %-</font color>"
temp = "<font color = #666633>-% New ID assigned: \"[id]\" %-</font>"
if("network")
var/newnet = input(usr, "Specify the new network for this machine. This will break all current links.", src, network) as null|text
if(newnet && canAccess(usr))
if(length(newnet) > 15)
temp = "<font color = #666633>-% Too many characters in new network tag %-</font color>"
temp = "<font color = #666633>-% Too many characters in new network tag %-</font>"
else
for(var/obj/machinery/telecomms/T in links)
@@ -321,7 +321,7 @@
network = newnet
links = list()
temp = "<font color = #666633>-% New network tag assigned: \"[network]\" %-</font color>"
temp = "<font color = #666633>-% New network tag assigned: \"[network]\" %-</font>"
if("freq")
@@ -331,21 +331,21 @@
newfreq *= 10 // shift the decimal one place
if(!(newfreq in freq_listening) && newfreq < 10000)
freq_listening.Add(newfreq)
temp = "<font color = #666633>-% New frequency filter assigned: \"[newfreq] GHz\" %-</font color>"
temp = "<font color = #666633>-% New frequency filter assigned: \"[newfreq] GHz\" %-</font>"
if(href_list["delete"])
// changed the layout about to workaround a pesky runtime -- Doohl
var/x = text2num(href_list["delete"])
temp = "<font color = #666633>-% Removed frequency filter [x] %-</font color>"
temp = "<font color = #666633>-% Removed frequency filter [x] %-</font>"
freq_listening.Remove(x)
if(href_list["unlink"])
if(text2num(href_list["unlink"]) <= length(links))
var/obj/machinery/telecomms/T = links[text2num(href_list["unlink"])]
temp = "<font color = #666633>-% Removed \ref[T] [T.name] from linked entities. %-</font color>"
temp = "<font color = #666633>-% Removed \ref[T] [T.name] from linked entities. %-</font>"
// Remove link entries from both T and src.
@@ -363,20 +363,20 @@
if(!(P.buffer in src.links))
src.links.Add(P.buffer)
temp = "<font color = #666633>-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-</font color>"
temp = "<font color = #666633>-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-</font>"
else
temp = "<font color = #666633>-% Unable to acquire buffer %-</font color>"
temp = "<font color = #666633>-% Unable to acquire buffer %-</font>"
if(href_list["buffer"])
P.buffer = src
temp = "<font color = #666633>-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-</font color>"
temp = "<font color = #666633>-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-</font>"
if(href_list["flush"])
temp = "<font color = #666633>-% Buffer successfully flushed. %-</font color>"
temp = "<font color = #666633>-% Buffer successfully flushed. %-</font>"
P.buffer = null
src.Options_Topic(href, href_list)
+8 -8
View File
@@ -35,7 +35,7 @@
hide = 1
toggled = 1
//anchored = 1
use_power = 0
use_power = NO_POWER_USE
//idle_power_usage = 0
autolinkers = list("c_relay")
@@ -51,7 +51,7 @@
/obj/machinery/telecomms/hub/preset_cent
id = "CentComm Hub"
network = "tcommsat"
use_power = 0
use_power = NO_POWER_USE
autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", "e_relay",
"centcomm", "receiverCent", "broadcasterCent")
@@ -83,7 +83,7 @@
/obj/machinery/telecomms/receiver/preset_cent
id = "CentComm Receiver"
network = "tcommsat"
use_power = 0
use_power = NO_POWER_USE
autolinkers = list("receiverCent")
freq_listening = list(ERT_FREQ, DTH_FREQ)
@@ -121,7 +121,7 @@
/obj/machinery/telecomms/bus/preset_cent
id = "CentComm Bus"
network = "tcommsat"
use_power = 0
use_power = NO_POWER_USE
freq_listening = list(ERT_FREQ, DTH_FREQ)
autolinkers = list("processorCent", "centcomm")
@@ -150,7 +150,7 @@
/obj/machinery/telecomms/processor/preset_cent
id = "CentComm Processor"
network = "tcommsat"
use_power = 0
use_power = NO_POWER_USE
autolinkers = list("processorCent")
//Servers
@@ -208,7 +208,7 @@
/obj/machinery/telecomms/server/presets/centcomm
id = "CentComm Server"
freq_listening = list(ERT_FREQ, DTH_FREQ)
use_power = 0
use_power = NO_POWER_USE
autolinkers = list("centcomm")
//Broadcasters
@@ -230,5 +230,5 @@
/obj/machinery/telecomms/broadcaster/preset_cent
id = "CentComm Broadcaster"
network = "tcommsat"
use_power = 0
autolinkers = list("broadcasterCent")
use_power = NO_POWER_USE
autolinkers = list("broadcasterCent")
@@ -195,7 +195,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 30
machinetype = 1
circuitboard = /obj/item/circuitboard/telecomms/receiver
@@ -251,7 +251,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
desc = "A mighty piece of hardware used to send/receive massive amounts of data."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 80
machinetype = 7
circuitboard = /obj/item/circuitboard/telecomms/hub
@@ -285,7 +285,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
desc = "A mighty piece of hardware used to send massive amounts of data far away."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 30
machinetype = 8
circuitboard = /obj/item/circuitboard/telecomms/relay
@@ -336,7 +336,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
desc = "A mighty piece of hardware used to send massive amounts of data quickly."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 50
machinetype = 2
circuitboard = /obj/item/circuitboard/telecomms/bus
@@ -388,7 +388,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
desc = "This machine is used to process large quantities of information."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 30
machinetype = 3
circuitboard = /obj/item/circuitboard/telecomms/processor
@@ -425,7 +425,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
desc = "A machine used to store data and network statistics."
density = 1
anchored = 1
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 15
machinetype = 4
circuitboard = /obj/item/circuitboard/telecomms/server
+5 -5
View File
@@ -92,7 +92,7 @@
if("probe")
if(machinelist.len > 0)
temp = "<font color = #D70B00>- FAILED: CANNOT PROBE WHEN BUFFER FULL -</font color>"
temp = "<font color = #D70B00>- FAILED: CANNOT PROBE WHEN BUFFER FULL -</font>"
else
for(var/obj/machinery/telecomms/T in range(25, src))
@@ -100,9 +100,9 @@
machinelist.Add(T)
if(!machinelist.len)
temp = "<font color = #D70B00>- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -</font color>"
temp = "<font color = #D70B00>- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -</font>"
else
temp = "<font color = #336699>- [machinelist.len] ENTITIES LOCATED & BUFFERED -</font color>"
temp = "<font color = #336699>- [machinelist.len] ENTITIES LOCATED & BUFFERED -</font>"
screen = 0
@@ -112,13 +112,13 @@
var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
if(newnet && ((usr in range(1, src) || issilicon(usr))))
if(length(newnet) > 15)
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font>"
else
network = newnet
screen = 0
machinelist = list()
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font color>"
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font>"
updateUsrDialog()
return
@@ -301,7 +301,7 @@
if("scan")
if(servers.len > 0)
temp = "<font color = #D70B00>- FAILED: CANNOT PROBE WHEN BUFFER FULL -</font color>"
temp = "<font color = #D70B00>- FAILED: CANNOT PROBE WHEN BUFFER FULL -</font>"
else
for(var/obj/machinery/telecomms/server/T in range(25, src))
@@ -309,9 +309,9 @@
servers.Add(T)
if(!servers.len)
temp = "<font color = #D70B00>- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -</font color>"
temp = "<font color = #D70B00>- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -</font>"
else
temp = "<font color = #336699>- [servers.len] SERVERS PROBED & BUFFERED -</font color>"
temp = "<font color = #336699>- [servers.len] SERVERS PROBED & BUFFERED -</font>"
screen = 0
@@ -333,14 +333,14 @@
if(newnet && canAccess(user))
if(length(newnet) > 15)
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font>"
else
network = newnet
screen = 0
servers = list()
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font color>"
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font>"
updateUsrDialog()
+3 -3
View File
@@ -269,7 +269,7 @@
desc = "It's the hub of a teleporting machine."
icon_state = "tele0"
var/accurate = 0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 2000
var/obj/machinery/teleport/station/power_station
@@ -389,7 +389,7 @@
desc = "A teleporter with the target pre-set on the circuit board."
icon_state = "tele0"
var/recalibrating = 0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 2000
@@ -466,7 +466,7 @@
desc = "The power control station for a bluespace teleporter."
icon_state = "controller"
var/engaged = 0
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 2000
var/obj/machinery/computer/teleporter/teleporter_console
+4 -5
View File
@@ -43,7 +43,7 @@
var/icon_deny //Icon_state when denying access
// Power
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 10
var/vend_power_usage = 150
@@ -386,9 +386,8 @@
// empty at high security levels
if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2)
var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
customer_account = attempt_account_access(customer_account, attempt_pin, 2)
if(!customer_account)
if(!attempt_account_access(customer_account.account_number, attempt_pin, 2))
src.status_message = "Unable to access account: incorrect credentials."
src.status_error = 1
return 0
@@ -1224,7 +1223,7 @@
/obj/item/reagent_containers/food/condiment/pack/hotsauce = 5,
/obj/item/reagent_containers/food/condiment/saltshaker =5,
/obj/item/reagent_containers/food/condiment/peppermill =5,
/obj/item/whetstone = 2,
/obj/item/whetstone = 2, /obj/item/mixing_bowl = 10,
/obj/item/kitchen/mould/bear = 1, /obj/item/kitchen/mould/worm = 1,
/obj/item/kitchen/mould/bean = 1, /obj/item/kitchen/mould/ball = 1,
/obj/item/kitchen/mould/cane = 1, /obj/item/kitchen/mould/cash = 1,
@@ -41,8 +41,8 @@
var/inject_amount = 10
salvageable = 0
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/allow_drop()
return 0
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/AllowDrop()
return FALSE
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Destroy()
for(var/atom/movable/AM in src)
+17 -4
View File
@@ -5,7 +5,7 @@
desc = "Nothing is being built."
density = TRUE
anchored = TRUE
use_power = 1
use_power = IDLE_POWER_USE
idle_power_usage = 20
active_power_usage = 5000
var/time_coeff = 1
@@ -151,10 +151,10 @@
GET_COMPONENT(materials, /datum/component/material_container)
materials.use_amount(res_coef)
overlays += "fab-active"
use_power = 2
use_power = ACTIVE_POWER_USE
updateUsrDialog()
sleep(get_construction_time_w_coeff(D))
use_power = 1
use_power = IDLE_POWER_USE
overlays -= "fab-active"
desc = initial(desc)
@@ -461,7 +461,20 @@
"Pod_Parts",
"Pod_Frame",
"Misc")
req_access = list(access_mechanic)
/obj/machinery/mecha_part_fabricator/spacepod/New()
..()
QDEL_LIST(component_parts)
component_parts = list()
component_parts += new /obj/item/circuitboard/podfab(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
component_parts += new /obj/item/stock_parts/manipulator(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/mecha_part_fabricator/robot
name = "Robotic Fabricator"
part_sets = list("Cyborg")
part_sets = list("Cyborg")
-2
View File
@@ -165,8 +165,6 @@
to_chat(user, "[bicon(ME)] [ME]")
/obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits.
return
/obj/mecha/hear_talk(mob/M, text)
if(M == occupant && radio.broadcasting)
+1 -1
View File
@@ -146,7 +146,7 @@
if(damaging_weapon)
scan_data += "Severity: [damage_desc]<br>"
scan_data += "Hits by weapon: [total_hits]<br>"
scan_data += "Approximate time of wound infliction: [station_time(age)]<br>"
scan_data += "Approximate time of wound infliction: [station_time_timestamp("hh:mm", age)]<br>"
scan_data += "Affected limbs: [D.organ_names]<br>"
scan_data += "Possible weapons:<br>"
for(var/weapon_name in weapon_chances)
+1 -1
View File
@@ -65,7 +65,7 @@
spamcheck = 0
/obj/item/megaphone/proc/saymsg(mob/living/user as mob, message)
audible_message("<span class='game say'><span class='name'>[user]</span> broadcasts, <span class='reallybig'>\"[message]\"</span></span>", hearing_distance = 14)
audible_message("<span class='game say'><span class='name'>[user.GetVoice()]</span> [user.GetAltName()] broadcasts, <span class='reallybig'>\"[message]\"</span></span>", hearing_distance = 14)
log_say(message, user)
for(var/obj/O in oview(14, get_turf(src)))
O.hear_talk(user, "<span class='reallybig'>[message]</span>")
@@ -45,15 +45,16 @@
name = "station intercom (Security)"
frequency = SEC_I_FREQ
/obj/item/radio/intercom/New(turf/loc, var/ndir = 0, var/building = 3)
/obj/item/radio/intercom/New(turf/loc, ndir, building = 3)
..()
buildstage = building
if(buildstage)
processing_objects.Add(src)
else
pixel_x = (ndir & 3)? 0 : (ndir == 4 ? 28 : -28)
pixel_y = (ndir & 3)? (ndir ==1 ? 28 : -28) : 0
dir=ndir
if(ndir)
pixel_x = (ndir & EAST|WEST) ? (ndir == EAST ? 28 : -28) : 0
pixel_y = (ndir & NORTH|SOUTH) ? (ndir == NORTH ? 28 : -28) : 0
dir=ndir
b_stat=1
on = 0
global_intercoms.Add(src)
+170
View File
@@ -0,0 +1,170 @@
/obj/item/mixing_bowl
name = "mixing bowl"
desc = "Mixing it up in the kitchen."
flags = OPENCONTAINER
icon = 'icons/obj/kitchen.dmi'
icon_state = "mixing_bowl"
var/max_n_of_items = 25
var/dirty = FALSE
var/clean_icon = "mixing_bowl"
var/dirty_icon = "mixing_bowl_dirty"
/obj/item/mixing_bowl/New()
..()
create_reagents(100)
/obj/item/mixing_bowl/attackby(obj/item/I, mob/user, params)
if(dirty)
if(istype(I, /obj/item/soap))
user.visible_message("<span class='notice'>[user] starts to scrub [src].</span>", "<span class='notice'>You start to scrub [src].</span>")
if(do_after(user, 20 * I.toolspeed, target = src))
clean()
user.visible_message("<span class='notice'>[user] has scrubbed [src] clean.</span>", "<span class='notice'>You have scrubbed [src] clean.</span>")
return 1
else
to_chat(user, "<span class='warning'>You should clean [src] before you use it for food prep.</span>")
return 0
if(is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_MICROWAVE]) || is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_GRILL]) || is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_OVEN]) || is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_CANDY]))
if(contents.len>=max_n_of_items)
to_chat(user, "<span class='alert'>This [src] is full of ingredients, you cannot put more.</span>")
return 1
if(istype(I, /obj/item/stack))
var/obj/item/stack/S = I
if(S.amount > 1)
var/obj/item/stack/to_add = S.split(user, 1)
to_add.forceMove(src)
user.visible_message("<span class='notice'>[user] adds one of [S] to [src].</span>", "<span class='notice'>You add one of [S] to [src].</span>")
else
return add_item(S, user)
else
return add_item(I, user)
else if(is_type_in_list(I, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment)))
if(!I.reagents)
return 1
for(var/datum/reagent/R in I.reagents.reagent_list)
if(!(R.id in GLOB.cooking_reagents[RECIPE_MICROWAVE]) && !(R.id in GLOB.cooking_reagents[RECIPE_GRILL]) && !(R.id in GLOB.cooking_reagents[RECIPE_OVEN]) && !(R.id in GLOB.cooking_reagents[RECIPE_CANDY]))
to_chat(user, "<span class='alert'>Your [I] contains components unsuitable for cookery.</span>")
return 1
else
to_chat(user, "<span class='alert'>You have no idea what you can cook with [I].</span>")
return 1
/obj/item/mixing_bowl/proc/add_item(obj/item/I, mob/user)
if(!user.drop_item())
to_chat(user, "<span class='notice'>\The [I] is stuck to your hand, you cannot put it in [src]</span>")
//return 0
else
I.forceMove(src)
user.visible_message("<span class='notice'>[user] adds [I] to [src].</span>", "<span class='notice'>You add [I] to [src].</span>")
/obj/item/mixing_bowl/attack_self(mob/user)
var/dat = ""
if(dirty)
dat = {"<code>This [src] is dirty!<BR>Please clean it before use!</code>"}
else
var/list/items_counts = new
var/list/items_measures = new
var/list/items_measures_p = new
for(var/obj/O in contents)
var/display_name = O.name
if(istype(O,/obj/item/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg"
items_measures_p[display_name] = "eggs"
if(istype(O,/obj/item/reagent_containers/food/snacks/tofu))
items_measures[display_name] = "tofu chunk"
items_measures_p[display_name] = "tofu chunks"
if(istype(O,/obj/item/reagent_containers/food/snacks/meat)) //any meat
items_measures[display_name] = "slab of meat"
items_measures_p[display_name] = "slabs of meat"
if(istype(O,/obj/item/reagent_containers/food/snacks/donkpocket))
display_name = "Turnovers"
items_measures[display_name] = "turnover"
items_measures_p[display_name] = "turnovers"
if(istype(O,/obj/item/reagent_containers/food/snacks/carpmeat))
items_measures[display_name] = "fillet of meat"
items_measures_p[display_name] = "fillets of meat"
items_counts[display_name]++
for(var/O in items_counts)
var/N = items_counts[O]
if(!(O in items_measures))
dat += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
else
if(N==1)
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
else
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
for(var/datum/reagent/R in reagents.reagent_list)
var/display_name = R.name
if(R.id == "capsaicin")
display_name = "Hotsauce"
if(R.id == "frostoil")
display_name = "Coldsauce"
dat += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
if(items_counts.len==0 && reagents.reagent_list.len==0)
dat = {"<B>The [src] is empty</B><BR>"}
else
dat = {"<b>Ingredients:</b><br>[dat]"}
dat += {"<HR><BR> <A href='?src=[UID()];action=dispose'>Eject ingredients!</A><BR>"}
var/datum/browser/popup = new(user, name, name, 400, 400)
popup.set_content(dat)
popup.open(0)
onclose(user, "[name]")
return
/obj/item/mixing_bowl/Topic(href, href_list)
if(..())
return
if("dispose")
dispose()
return
/obj/item/mixing_bowl/proc/dispose()
for(var/obj/O in contents)
O.forceMove(loc)
if(reagents.total_volume)
make_dirty(5)
reagents.clear_reagents()
to_chat(usr, "<span class='notice'>You dispose of [src]'s contents.</span>")
updateUsrDialog()
/obj/item/mixing_bowl/proc/make_dirty(chance)
if(!chance)
return
if(prob(chance))
dirty = TRUE
flags = null
icon_state = dirty_icon
/obj/item/mixing_bowl/proc/clean()
dirty = FALSE
flags = OPENCONTAINER
icon_state = clean_icon
/obj/item/mixing_bowl/wash(mob/user, atom/source)
if(..())
clean()
/obj/item/mixing_bowl/proc/fail(obj/source)
if(!source)
source = src
var/amount = 0
for(var/obj/O in contents)
amount++
if(O.reagents)
var/id = O.reagents.get_master_reagent_id()
if(id)
amount+=O.reagents.get_reagent_amount(id)
qdel(O)
if(reagents && reagents.total_volume)
var/id = reagents.get_master_reagent_id()
if(id)
amount += reagents.get_reagent_amount(id)
reagents.clear_reagents()
var/obj/item/reagent_containers/food/snacks/badrecipe/ffuu = new(get_turf(source))
ffuu.reagents.add_reagent("carbon", amount)
ffuu.reagents.add_reagent("????", amount/10)
make_dirty(75)

Some files were not shown because too many files have changed in this diff Show More