mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 07:33:34 +01:00
Merge branch 'master' into Refactors-beds-stools-chairs
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
"}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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.")
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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++
|
||||
|
||||
@@ -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_(Service)\">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_(Supply)\">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_(Command)\">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_(Engineering)\">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_(Medical)\">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_(Science)\">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_(Security)\">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_(Service)\">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_(Supply)\">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_(Command)\">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_(Engineering)\">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_(Medical)\">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_(Science)\">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_(Security)\">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)
|
||||
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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,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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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 ---
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user