mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 08:03:43 +01:00
Merge remote-tracking branch 'upstream/master' into universal-damage
This commit is contained in:
+14
-3
@@ -34,17 +34,28 @@ actual development.
|
||||
* Pull requests should be atomic; Make one commit for each distinct change, so if a part
|
||||
of a pull request needs to be removed/changed, you may simply modify that single commit.
|
||||
Due to limitations of the engine, this may not always be possible; but do try your best.
|
||||
* 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.
|
||||
|
||||
* Document and explain your pull requests thoroughly. Failure to do so will delay a PR as
|
||||
we question why changes were made. This is especially important if you're porting a PR
|
||||
from another codebase (i.e. TG) and divert from the original. Explaining with single
|
||||
comment on why you've made changes will help us review the PR faster and understand your
|
||||
decision making process.
|
||||
|
||||
* 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
|
||||
commits. Use `git rebase` or `git reset` to update your branches, not `git pull`.
|
||||
|
||||
* Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR.
|
||||
|
||||
* If your pull request is not finished make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement may be closed at maintainer discretion. You may request a maintainer reopen the pull request when you're ready, or make a new one.
|
||||
|
||||
* While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality *before* you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes.
|
||||
|
||||
#### Using Changelog
|
||||
* Tags used in changelog include add/rscadd, del/rscdel, fix/fixes, typo/spellcheck.
|
||||
* Without specifying a name it will default to using your GitHub name.
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
**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.
|
||||
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->
|
||||
<!-- You can view Contributing.MD for a detailed description of the pull request process. -->
|
||||
|
||||
**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
|
||||
## What Does This PR Do
|
||||
<!-- Include a small to medium description of what your PR changes. Document every changes or this may delay review or even discourage maintainers from merging your PR! -->
|
||||
|
||||
**Changelog:**
|
||||
*Remove this line, and appropriate fields from the changelog*
|
||||
## Why It's Good For The Game
|
||||
<!-- Please add a short description of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding. -->
|
||||
|
||||
## Images of changes
|
||||
<!-- If you did not make a map or sprite edit, you may delete this section. You may include a gif of your feature if you want -->
|
||||
|
||||
## Changelog
|
||||
:cl:
|
||||
add: Added new things
|
||||
del: Removed old things
|
||||
@@ -21,3 +26,5 @@ spellcheck: fixed a few typos
|
||||
experiment: added an experimental thingy
|
||||
/:cl:
|
||||
|
||||
<!-- Both :cl:'s are required for the changelog to work! You can put your name to the right of the first :cl: if you want to overwrite your GitHub username as author ingame. -->
|
||||
<!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. -->
|
||||
|
||||
@@ -22514,7 +22514,7 @@
|
||||
},
|
||||
/area/crew_quarters/bar/atrium)
|
||||
"aRy" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/crew_quarters/bar/atrium)
|
||||
"aRz" = (
|
||||
@@ -23422,7 +23422,7 @@
|
||||
d2 = 8;
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -24305,7 +24305,7 @@
|
||||
},
|
||||
/area/crew_quarters/bar/atrium)
|
||||
"aUH" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -89006,7 +89006,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/wood{
|
||||
broken = 1;
|
||||
icon_state = "wood-broken"
|
||||
@@ -89016,12 +89016,12 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/gambling_den)
|
||||
"dcT" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "wood"
|
||||
},
|
||||
@@ -90537,7 +90537,7 @@
|
||||
/area/maintenance/gambling_den)
|
||||
"dfP" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/wood{
|
||||
@@ -91371,7 +91371,7 @@
|
||||
},
|
||||
/area/maintenance/gambling_den)
|
||||
"dhw" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -91380,7 +91380,7 @@
|
||||
/area/maintenance/gambling_den)
|
||||
"dhx" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
@@ -92327,7 +92327,7 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"diY" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/wood{
|
||||
@@ -92346,7 +92346,7 @@
|
||||
/area/maintenance/gambling_den)
|
||||
"dja" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -93121,7 +93121,7 @@
|
||||
},
|
||||
/area/maintenance/gambling_den)
|
||||
"dkr" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
@@ -94305,7 +94305,7 @@
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/hallway/secondary/construction)
|
||||
"dmM" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/gambling_den)
|
||||
"dmN" = (
|
||||
@@ -96153,7 +96153,7 @@
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/crew_quarters/hor)
|
||||
"dpR" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
@@ -96848,7 +96848,7 @@
|
||||
},
|
||||
/area/maintenance/gambling_den)
|
||||
"dra" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
@@ -101412,7 +101412,7 @@
|
||||
},
|
||||
/area/crew_quarters/theatre)
|
||||
"dzq" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -102176,7 +102176,7 @@
|
||||
dir = 4;
|
||||
level = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -102619,7 +102619,7 @@
|
||||
},
|
||||
/area/crew_quarters/theatre)
|
||||
"dBq" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -108948,21 +108948,21 @@
|
||||
},
|
||||
/area/chapel/office)
|
||||
"dMT" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "chapel"
|
||||
},
|
||||
/area/chapel/main)
|
||||
"dMU" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "chapel"
|
||||
},
|
||||
/area/chapel/main)
|
||||
"dMV" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "chapel"
|
||||
@@ -108970,14 +108970,14 @@
|
||||
/area/chapel/main)
|
||||
"dMW" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "chapel"
|
||||
},
|
||||
/area/chapel/main)
|
||||
"dMX" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
pixel_x = 28
|
||||
@@ -109317,14 +109317,14 @@
|
||||
},
|
||||
/area/chapel/office)
|
||||
"dNJ" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 1;
|
||||
icon_state = "chapel"
|
||||
},
|
||||
/area/chapel/main)
|
||||
"dNK" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 4;
|
||||
icon_state = "chapel"
|
||||
@@ -109332,7 +109332,7 @@
|
||||
/area/chapel/main)
|
||||
"dNL" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 1;
|
||||
icon_state = "chapel"
|
||||
@@ -109340,7 +109340,7 @@
|
||||
/area/chapel/main)
|
||||
"dNM" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 1;
|
||||
icon_state = "chapel"
|
||||
@@ -109692,7 +109692,7 @@
|
||||
},
|
||||
/area/chapel/office)
|
||||
"dOq" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/machinery/light{
|
||||
icon_state = "tube1";
|
||||
dir = 8
|
||||
@@ -109715,7 +109715,7 @@
|
||||
},
|
||||
/area/chapel/main)
|
||||
"dOt" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/machinery/light{
|
||||
icon_state = "tube1";
|
||||
dir = 4
|
||||
@@ -111770,7 +111770,7 @@
|
||||
/area/chapel/office)
|
||||
"dSf" = (
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
@@ -111783,7 +111783,7 @@
|
||||
/area/chapel/main)
|
||||
"dSg" = (
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
|
||||
@@ -13578,7 +13578,7 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"aya" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/wood,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"ayb" = (
|
||||
@@ -14935,7 +14935,7 @@
|
||||
name = "Port Maintenance"
|
||||
})
|
||||
"aAB" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -14952,7 +14952,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -15652,7 +15652,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/crew_quarters/sleep)
|
||||
"aBS" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -21926,7 +21926,7 @@
|
||||
name = "\improper Warehouse"
|
||||
})
|
||||
"aMA" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
/obj/item/shard{
|
||||
icon_state = "medium"
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -128,7 +128,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/ruin/unpowered)
|
||||
"av" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -201,7 +201,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/ruin/unpowered)
|
||||
"aH" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
|
||||
@@ -1134,7 +1134,7 @@
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/awaymission/academy/classrooms)
|
||||
"ds" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -2204,7 +2204,7 @@
|
||||
},
|
||||
/area/awaymission/academy/classrooms)
|
||||
"gb" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/academy/classrooms)
|
||||
"gc" = (
|
||||
|
||||
@@ -605,7 +605,7 @@
|
||||
},
|
||||
/area/awaymission/example)
|
||||
"bB" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "bar"
|
||||
},
|
||||
@@ -670,7 +670,7 @@
|
||||
},
|
||||
/area/awaymission/example)
|
||||
"bJ" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (EAST)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 4
|
||||
@@ -680,7 +680,7 @@
|
||||
},
|
||||
/area/awaymission/example)
|
||||
"bK" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (WEST)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 8
|
||||
@@ -706,7 +706,7 @@
|
||||
},
|
||||
/area/awaymission/example)
|
||||
"bN" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
|
||||
@@ -2195,7 +2195,7 @@
|
||||
name = "Syndicate Outpost"
|
||||
})
|
||||
"dh" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/machinery/alarm/monitor{
|
||||
dir = 4;
|
||||
frequency = 1439;
|
||||
@@ -7981,7 +7981,7 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/machinery/alarm/monitor{
|
||||
dir = 8;
|
||||
frequency = 1439;
|
||||
@@ -8717,7 +8717,7 @@
|
||||
name = "MO19 Arrivals"
|
||||
})
|
||||
"mB" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
},
|
||||
/area/awaymission/UO71/plaza)
|
||||
"aH" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
@@ -873,7 +873,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (EAST)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 4
|
||||
@@ -921,7 +921,7 @@
|
||||
on = 1;
|
||||
pressure_checks = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
@@ -2216,7 +2216,7 @@
|
||||
on = 1;
|
||||
pressure_checks = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaymission/UO71/plaza)
|
||||
"eW" = (
|
||||
@@ -6161,7 +6161,7 @@
|
||||
pixel_y = 23;
|
||||
req_access = null
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/paper/terrorspiders4,
|
||||
@@ -6479,7 +6479,7 @@
|
||||
req_access_txt = "0";
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
@@ -8632,7 +8632,7 @@
|
||||
},
|
||||
/area/awaymission/UO71/centralhall)
|
||||
"qL" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaymission/UO71/centralhall)
|
||||
"qM" = (
|
||||
@@ -9040,7 +9040,7 @@
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaymission/UO71/centralhall)
|
||||
"ru" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -12195,7 +12195,7 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -12540,7 +12540,7 @@
|
||||
},
|
||||
/area/awaymission/UO71/eng)
|
||||
"xF" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaymission/UO71/mining)
|
||||
"xG" = (
|
||||
@@ -13396,7 +13396,7 @@
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaymission/UO71/loot)
|
||||
"zt" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/item/clothing/shoes/chameleon/noslip,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaymission/UO71/loot)
|
||||
@@ -13506,12 +13506,12 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/UO71/queen)
|
||||
"zW" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/UO71/queen)
|
||||
"zX" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (EAST)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 4
|
||||
@@ -13523,7 +13523,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/UO71/queen)
|
||||
"zZ" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (EAST)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 4
|
||||
@@ -13531,7 +13531,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/UO71/queen)
|
||||
"Aa" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -13544,7 +13544,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/UO71/queen)
|
||||
"Ac" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
@@ -13568,7 +13568,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/UO71/queen)
|
||||
"Ag" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light,
|
||||
|
||||
@@ -1423,7 +1423,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (EAST)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 4
|
||||
@@ -1491,7 +1491,7 @@
|
||||
on = 1;
|
||||
pressure_checks = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
@@ -3362,7 +3362,7 @@
|
||||
on = 1;
|
||||
pressure_checks = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaycontent/a1{
|
||||
has_gravity = 1;
|
||||
@@ -8156,7 +8156,7 @@
|
||||
pixel_y = 23;
|
||||
req_access = null
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -8519,7 +8519,7 @@
|
||||
req_access_txt = "0";
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
tag = "icon-wooden_chair (NORTH)";
|
||||
icon_state = "wooden_chair";
|
||||
dir = 1
|
||||
@@ -11135,7 +11135,7 @@
|
||||
name = "UO45 Crew Quarters"
|
||||
})
|
||||
"qt" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaycontent/a2{
|
||||
has_gravity = 1;
|
||||
@@ -11629,7 +11629,7 @@
|
||||
name = "UO45 Crew Quarters"
|
||||
})
|
||||
"ra" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -15331,7 +15331,7 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -15833,7 +15833,7 @@
|
||||
name = "UO45 Engineering"
|
||||
})
|
||||
"wN" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/awaycontent/a4{
|
||||
has_gravity = 1;
|
||||
|
||||
@@ -682,7 +682,7 @@
|
||||
},
|
||||
/area/awaymission/wwmines)
|
||||
"cc" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -704,7 +704,7 @@
|
||||
},
|
||||
/area/awaymission/wwmines)
|
||||
"ce" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -861,7 +861,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/wwgov)
|
||||
"cA" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -995,13 +995,13 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/wwmines)
|
||||
"cV" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/wwmines)
|
||||
"cW" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
@@ -2303,7 +2303,7 @@
|
||||
/turf/simulated/wall/mineral/sandstone,
|
||||
/area/awaymission/wwmines)
|
||||
"gm" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -2312,7 +2312,7 @@
|
||||
},
|
||||
/area/awaymission/wwmines)
|
||||
"gn" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -2428,7 +2428,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/wwmines)
|
||||
"gD" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "barber"
|
||||
@@ -2479,7 +2479,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/awaymission/wwmines)
|
||||
"gL" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -2528,7 +2528,7 @@
|
||||
tag = "icon-gibup1";
|
||||
icon_state = "gibup1"
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "barber"
|
||||
|
||||
@@ -18897,7 +18897,7 @@
|
||||
/obj/structure/sign/poster/contraband/random{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/fpmaint)
|
||||
"aGk" = (
|
||||
@@ -33468,7 +33468,7 @@
|
||||
},
|
||||
/area/hallway/primary/central/north)
|
||||
"biP" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -33483,7 +33483,7 @@
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"biR" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -79735,7 +79735,7 @@
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/atmos/control)
|
||||
"cMb" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/wood{
|
||||
@@ -79748,7 +79748,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/maintenance/asmaint)
|
||||
"cMd" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/carpet,
|
||||
@@ -83569,7 +83569,7 @@
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"cSX" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 2;
|
||||
@@ -84339,7 +84339,7 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"cUi" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"cUj" = (
|
||||
@@ -91152,7 +91152,7 @@
|
||||
name = "station intercom (General)";
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
|
||||
@@ -3384,7 +3384,7 @@
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"hx" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/wood{
|
||||
tag = "icon-wood-broken7";
|
||||
icon_state = "wood-broken7"
|
||||
@@ -3946,7 +3946,7 @@
|
||||
},
|
||||
/area/derelict/crew_quarters)
|
||||
"ix" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/wood{
|
||||
@@ -4279,7 +4279,7 @@
|
||||
name = "Derelict Annex"
|
||||
})
|
||||
"je" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -4296,7 +4296,7 @@
|
||||
},
|
||||
/area/derelict/arrival)
|
||||
"jg" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/sign/poster/contraband/random{
|
||||
@@ -4370,7 +4370,7 @@
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/derelict/crew_quarters)
|
||||
"jn" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/structure/chair/wood,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "wood"
|
||||
},
|
||||
@@ -4613,7 +4613,7 @@
|
||||
},
|
||||
/area/derelict/crew_quarters)
|
||||
"jM" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -7287,7 +7287,7 @@
|
||||
d2 = 2;
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -7301,7 +7301,7 @@
|
||||
},
|
||||
/area/derelict/crew_quarters)
|
||||
"qo" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -8210,7 +8210,7 @@
|
||||
name = "Derelict Annex"
|
||||
})
|
||||
"sd" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
/obj/structure/chair/wood{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)
|
||||
..()
|
||||
|
||||
|
||||
plane = FLOOR_PLANE
|
||||
|
||||
if(!check_icon_cache())
|
||||
@@ -152,7 +152,7 @@
|
||||
|
||||
if(pressure_delta > 0.5)
|
||||
if(air_contents.temperature > 0)
|
||||
var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION) / 5
|
||||
var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
|
||||
if(pressure_delta > 0.5)
|
||||
if(environment.temperature > 0)
|
||||
var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) / 5
|
||||
var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
|
||||
if(isnull(removed)) //in space
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0)
|
||||
..()
|
||||
|
||||
|
||||
plane = FLOOR_PLANE
|
||||
|
||||
if(!check_icon_cache())
|
||||
@@ -227,7 +227,7 @@
|
||||
|
||||
if(scrubbing)
|
||||
if((scrub_O2 && environment.oxygen>0.001) || (scrub_N2 && environment.nitrogen>0.001) || (scrub_CO2 && environment.carbon_dioxide>0.001) || (scrub_Toxins && environment.toxins>0.001) || (environment.trace_gases.len>0))
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() / 5
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
|
||||
|
||||
//Take a gas sample
|
||||
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
|
||||
@@ -269,7 +269,7 @@
|
||||
if(air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
|
||||
return
|
||||
|
||||
var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) / 5
|
||||
var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume)
|
||||
|
||||
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
||||
|
||||
|
||||
@@ -298,63 +298,30 @@
|
||||
excited_group.reset_cooldowns()
|
||||
|
||||
/turf/proc/high_pressure_movements()
|
||||
for(var/atom/movable/M in src)
|
||||
M.experience_pressure_difference(pressure_difference, pressure_direction)
|
||||
var/atom/movable/M
|
||||
for(var/thing in src)
|
||||
M = thing
|
||||
if(!M.anchored && !M.pulledby && M.last_high_pressure_movement_air_cycle < SSair.times_fired)
|
||||
M.experience_pressure_difference(pressure_difference, pressure_direction)
|
||||
|
||||
|
||||
|
||||
|
||||
/atom/movable/var/pressure_resistance = 5
|
||||
/atom/movable/var/throw_pressure_limit = 15
|
||||
/atom/movable/var/last_forced_movement = 0
|
||||
/atom/movable/var/pressure_resistance = 10
|
||||
/atom/movable/var/last_high_pressure_movement_air_cycle = 0
|
||||
|
||||
/atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
|
||||
if(last_forced_movement >= SSair.times_fired)
|
||||
return 0
|
||||
if(anchored || move_resist == INFINITY)
|
||||
return 0
|
||||
else if(!pulledby)
|
||||
var/turf/target = get_turf(src)
|
||||
var/datum/gas_mixture/target_air = target.return_air()
|
||||
if(isspaceturf(target) || isunsimulatedturf(target) || pressure_resistance > target_air.return_pressure())
|
||||
return 0
|
||||
if(pressure_difference >= throw_pressure_limit)
|
||||
var/general_direction = get_edge_target_turf(src, direction)
|
||||
if(last_forced_movement + 10 < SSair.times_fired && is_valid_tochat_target(src)) //the first check prevents spamming throw to_chat
|
||||
to_chat(src, "<span class='userdanger'>The pressure sends you flying!</span>")
|
||||
spawn()
|
||||
var/max_distance = 14 // reduce by one each calculation to prevent infinate loops.
|
||||
var/min_observed_pressure = INFINITY
|
||||
var/turf/possible_target = get_turf(src)
|
||||
while(!isspaceturf(target) && !isunsimulatedturf(target) && max_distance > 0)
|
||||
max_distance--
|
||||
target_air = target.return_air()
|
||||
min_observed_pressure = target_air.return_pressure()
|
||||
possible_target = get_step_towards(target,general_direction)
|
||||
if(istype(possible_target, /turf/space))
|
||||
target = possible_target
|
||||
break
|
||||
if(!CanAtmosPass(possible_target))
|
||||
target = possible_target
|
||||
max_distance = 0
|
||||
break
|
||||
var/datum/gas_mixture/possible_target_air = possible_target.return_air()
|
||||
if(possible_target_air.return_pressure() > min_observed_pressure)
|
||||
target = possible_target
|
||||
break
|
||||
target = possible_target
|
||||
if(max_distance)
|
||||
throw_at(target, get_dist(src, target), pressure_difference / 200, null, 0, 0, null)
|
||||
else
|
||||
throw_at(target, pressure_difference / 10, pressure_difference / 200, null, 0, 0, null)
|
||||
last_forced_movement = SSair.times_fired
|
||||
return 1
|
||||
else if(pressure_difference > pressure_resistance)
|
||||
spawn()
|
||||
step(src, direction)
|
||||
last_forced_movement = SSair.times_fired
|
||||
return 1
|
||||
return 0
|
||||
/atom/movable/proc/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0)
|
||||
var/const/PROBABILITY_OFFSET = 25
|
||||
var/const/PROBABILITY_BASE_PRECENT = 75
|
||||
var/max_force = sqrt(pressure_difference) * (MOVE_FORCE_DEFAULT / 5)
|
||||
set waitfor = 0
|
||||
var/move_prob = 100
|
||||
if(pressure_resistance > 0)
|
||||
move_prob = (pressure_difference / pressure_resistance * PROBABILITY_BASE_PRECENT) - PROBABILITY_OFFSET
|
||||
move_prob += pressure_resistance_prob_delta
|
||||
if(move_prob > PROBABILITY_OFFSET && prob(move_prob) && (move_resist != INFINITY) && (!anchored && (max_force >= (move_resist * MOVE_FORCE_PUSH_RATIO))) || (anchored && (max_force >= (move_resist * MOVE_FORCE_FORCEPUSH_RATIO))))
|
||||
step(src, direction)
|
||||
last_high_pressure_movement_air_cycle = SSair.times_fired
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -63,4 +63,11 @@
|
||||
#define AREACOORD(src) "[src ? "[get_area_name(src, TRUE)] [COORD(src)]" : "nonexistent location" ]"
|
||||
#define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]"
|
||||
#define ADMIN_VERBOSEJMP(src) "[src ? "[AREACOORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]"
|
||||
#define ADMIN_SHOWDETAILS(mask, content) "<a href='?_src_=holder;showdetails=[html_encode(content)]'>[mask]</a>"
|
||||
#define ADMIN_SHOWDETAILS(mask, content) "<a href='?_src_=holder;showdetails=[html_encode(content)]'>[mask]</a>"
|
||||
|
||||
///Max length of a keypress command before it's considered to be a forged packet/bogus command
|
||||
#define MAX_KEYPRESS_COMMANDLENGTH 16
|
||||
///Max amount of keypress messages per second over two seconds before client is autokicked
|
||||
#define MAX_KEYPRESS_AUTOKICK 50
|
||||
///Length of held key rolling buffer
|
||||
#define HELD_KEY_BUFFER_LENGTH 15
|
||||
@@ -0,0 +1,43 @@
|
||||
GLOBAL_LIST_EMPTY(typelists)
|
||||
|
||||
#ifndef TESTING
|
||||
|
||||
/datum/proc/typelist(key, list/values = list())
|
||||
var/list/mytypelist = GLOB.typelists[type] || (GLOB.typelists[type] = list())
|
||||
return mytypelist[key] || (mytypelist[key] = values.Copy())
|
||||
|
||||
#else
|
||||
// mostly the same code as above, just more verbose, slower and has tallying for saved lists
|
||||
/datum/proc/typelist(key, list/values)
|
||||
if (!values)
|
||||
values = list()
|
||||
GLOB.typelistkeys |= key
|
||||
if (GLOB.typelists[type])
|
||||
if (GLOB.typelists[type][key])
|
||||
GLOB.typelists[type]["[key]-saved"]++
|
||||
return GLOB.typelists[type][key]
|
||||
else
|
||||
GLOB.typelists[type][key] = values.Copy()
|
||||
else
|
||||
GLOB.typelists[type] = list()
|
||||
GLOB.typelists[type][key] = values.Copy()
|
||||
return GLOB.typelists[type][key]
|
||||
|
||||
GLOBAL_LIST_EMPTY(typelistkeys)
|
||||
|
||||
/proc/tallytypelistsavings()
|
||||
var/savings = list()
|
||||
var/saveditems = list()
|
||||
for (var/key in GLOB.typelistkeys)
|
||||
savings[key] = 0
|
||||
saveditems[key] = 0
|
||||
|
||||
for (var/type in GLOB.typelists)
|
||||
for (var/saving in savings)
|
||||
if (GLOB.typelists[type]["[saving]-saved"])
|
||||
savings[saving] += GLOB.typelists[type]["[saving]-saved"]
|
||||
saveditems[saving] += (GLOB.typelists[type]["[saving]-saved"] * length(GLOB.typelists[type][saving]))
|
||||
|
||||
for (var/saving in savings)
|
||||
to_chat(world, "Savings for [saving]: [savings[saving]] lists, [saveditems[saving]] items")
|
||||
#endif
|
||||
@@ -34,8 +34,6 @@ GLOBAL_LIST_INIT(restricted_camera_networks, list(
|
||||
"Hotel"
|
||||
)) //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them.
|
||||
|
||||
GLOBAL_LIST_INIT(mineral_turfs, list())
|
||||
|
||||
GLOBAL_LIST_INIT(ruin_landmarks, list())
|
||||
|
||||
GLOBAL_LIST_INIT(round_end_sounds, list(
|
||||
|
||||
@@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(base_chemicals, list("water","oxygen","nitrogen","hydrogen","po
|
||||
"iron","aluminum","silicon","sugar","ethanol"))
|
||||
// Standard chemicals
|
||||
GLOBAL_LIST_INIT(standard_chemicals, list("slimejelly","blood","water","lube","charcoal","toxin","cyanide",
|
||||
"morphine","epinephrine","space_drugs","serotrotium","oxygen","copper",
|
||||
"morphine","epinephrine","space_drugs","oxygen","copper",
|
||||
"nitrogen","hydrogen","potassium","mercury","sulfur","carbon","chlorine",
|
||||
"fluorine","sodium","phosphorus","lithium","sugar","sacid","facid",
|
||||
"glycerol","radium","mutadone","thermite","mutagen","virusfood","iron",
|
||||
@@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(standard_chemicals, list("slimejelly","blood","water","lube","c
|
||||
GLOBAL_LIST_INIT(rare_chemicals, list("minttoxin","syndicate_nanites", "xenomicrobes"))
|
||||
// Standard medicines
|
||||
GLOBAL_LIST_INIT(standard_medicines, list("charcoal","toxin","cyanide","morphine","epinephrine","space_drugs",
|
||||
"serotrotium","mutadone","mutagen","teporone","lexorin","silver_sulfadiazine",
|
||||
"mutadone","mutagen","teporone","lexorin","silver_sulfadiazine",
|
||||
"salbutamol","perfluorodecalin","omnizine","synaptizine","haloperidol",
|
||||
"potass_iodide","pen_acid","mannitol","oculine","styptic_powder",
|
||||
"methamphetamine","spaceacillin","carpotoxin","lsd","ethanol","ammonia",
|
||||
|
||||
@@ -31,7 +31,7 @@ SUBSYSTEM_DEF(mapping)
|
||||
if (mining_type == "lavaland")
|
||||
// Spawn Lavaland ruins and rivers.
|
||||
seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors/unexplored, lava_ruins_templates)
|
||||
spawn_rivers()
|
||||
spawn_rivers(list(level_name_to_num(MINING)))
|
||||
else
|
||||
// Populate mining Z-level hidden rooms
|
||||
for(var/i = 0, i < max_secret_rooms, i++)
|
||||
|
||||
@@ -263,7 +263,12 @@ UI STUFF
|
||||
else
|
||||
continue
|
||||
|
||||
dat += "</table></body>"
|
||||
dat += "</table>"
|
||||
dat += "<h1>Resolve All</h1>"
|
||||
if(ticket_system_name == "Mentor Tickets")
|
||||
dat += "<a href='?src=[UID()];resolveall=1'>Resolve All Open Mentor Tickets</a></body>"
|
||||
else
|
||||
dat += "<a href='?src=[UID()];resolveall=1'>Resolve All Open Admin Tickets</a></body>"
|
||||
|
||||
return dat
|
||||
|
||||
@@ -402,6 +407,12 @@ UI STUFF
|
||||
takeTicket(indexNum)
|
||||
showDetailUI(usr, indexNum)
|
||||
|
||||
if(href_list["resolveall"])
|
||||
if(ticket_system_name == "Mentor Tickets")
|
||||
usr.client.resolveAllMentorTickets()
|
||||
else
|
||||
usr.client.resolveAllAdminTickets()
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/takeTicket(var/index)
|
||||
if(assignStaffToTicket(usr.client, index))
|
||||
if(span_class == "mentorhelp")
|
||||
|
||||
@@ -383,18 +383,18 @@
|
||||
name = "Repulse"
|
||||
desc = "This spell throws everything around the user away."
|
||||
charge_max = 400
|
||||
clothes_req = 1
|
||||
clothes_req = TRUE
|
||||
invocation = "GITTAH WEIGH"
|
||||
invocation_type = "shout"
|
||||
range = 5
|
||||
cooldown_min = 150
|
||||
selection_type = "view"
|
||||
sound = 'sound/magic/repulse.ogg'
|
||||
var/maxthrow = 5
|
||||
var/sparkle_path = /obj/effect/temp_visual/gravpush
|
||||
action_icon_state = "repulse"
|
||||
sound = 'sound/magic/repulse.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets, mob/user = usr)
|
||||
/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets, mob/user = usr, stun_amt = 2)
|
||||
var/list/thrownatoms = list()
|
||||
var/atom/throwtarget
|
||||
var/distfromcaster
|
||||
@@ -411,16 +411,16 @@
|
||||
throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user)))
|
||||
distfromcaster = get_dist(user, AM)
|
||||
if(distfromcaster == 0)
|
||||
if(istype(AM, /mob/living))
|
||||
if(isliving(AM))
|
||||
var/mob/living/M = AM
|
||||
M.Weaken(5)
|
||||
M.adjustBruteLoss(5)
|
||||
to_chat(M, "<span class='userdanger'>You're slammed into the floor by a mystical force!</span>")
|
||||
else
|
||||
new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own
|
||||
if(istype(AM, /mob/living))
|
||||
if(isliving(AM))
|
||||
var/mob/living/M = AM
|
||||
M.Weaken(2)
|
||||
M.Weaken(stun_amt)
|
||||
to_chat(M, "<span class='userdanger'>You're thrown back by a mystical force!</span>")
|
||||
spawn(0)
|
||||
AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1)//So stuff gets tossed around at the same time.
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/datum/status_effect/freon
|
||||
id = "frozen"
|
||||
duration = 100
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
alert_type = /obj/screen/alert/status_effect/freon
|
||||
var/icon/cube
|
||||
var/can_melt = TRUE
|
||||
|
||||
/obj/screen/alert/status_effect/freon
|
||||
name = "Frozen Solid"
|
||||
desc = "You're frozen inside an ice cube, and cannot move! You can still do stuff, like shooting. Resist out of the cube!"
|
||||
icon_state = "frozen"
|
||||
|
||||
/datum/status_effect/freon/on_apply()
|
||||
RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist)
|
||||
if(!owner.stat)
|
||||
to_chat(owner, "<span class='userdanger'>You become frozen in a cube!</span>")
|
||||
cube = icon('icons/effects/freeze.dmi', "ice_cube")
|
||||
owner.add_overlay(cube)
|
||||
owner.update_canmove()
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/freon/tick()
|
||||
owner.update_canmove()
|
||||
if(can_melt && owner.bodytemperature >= BODYTEMP_NORMAL)
|
||||
qdel(src)
|
||||
|
||||
/datum/status_effect/freon/proc/owner_resist()
|
||||
to_chat(owner, "You start breaking out of the ice cube!")
|
||||
if(do_mob(owner, owner, 40))
|
||||
if(!QDELETED(src))
|
||||
to_chat(owner, "You break out of the ice cube!")
|
||||
owner.remove_status_effect(/datum/status_effect/freon)
|
||||
owner.update_canmove()
|
||||
|
||||
/datum/status_effect/freon/on_remove()
|
||||
if(!owner.stat)
|
||||
to_chat(owner, "The cube melts!")
|
||||
owner.cut_overlay(cube)
|
||||
owner.adjust_bodytemperature(100)
|
||||
owner.update_canmove()
|
||||
UnregisterSignal(owner, COMSIG_LIVING_RESIST)
|
||||
|
||||
/datum/status_effect/freon/watcher
|
||||
duration = 8
|
||||
can_melt = FALSE
|
||||
+43
-39
@@ -1037,7 +1037,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
|
||||
/datum/uplink_item/explosives/grenadier
|
||||
name = "Grenadier's belt"
|
||||
desc = "A belt containing 25 lethally dangerous and destructive grenades."
|
||||
desc = "A belt containing 26 lethally dangerous and destructive grenades."
|
||||
item = /obj/item/storage/belt/grenade/full
|
||||
cost = 30
|
||||
surplus = 0
|
||||
@@ -1052,15 +1052,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
surplus = 35
|
||||
|
||||
/datum/uplink_item/explosives/saringrenades
|
||||
name = "Sarin Gas Grenades"
|
||||
desc = "A box of four (4) grenades filled with Sarin, a deadly neurotoxin. Use extreme caution when handling and be sure to vacate the premise after using; ensure communication is maintained with team to avoid accidental gassings."
|
||||
reference = "TGG"
|
||||
item = /obj/item/storage/box/syndie_kit/sarin
|
||||
cost = 12
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
surplus = 0
|
||||
|
||||
/datum/uplink_item/explosives/atmosn2ogrenades
|
||||
name = "Knockout Gas Grenades"
|
||||
desc = "A box of two (2) grenades that spread knockout gas over a large area. Equip internals before using one of these."
|
||||
@@ -1108,21 +1099,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 1
|
||||
surplus = 35
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes
|
||||
name = "No-Slip Chameleon Shoes"
|
||||
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \
|
||||
They do not work on heavily lubricated surfaces."
|
||||
reference = "NSSS"
|
||||
item = /obj/item/clothing/shoes/chameleon/noslip
|
||||
cost = 2
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
|
||||
reference = "TNSSS"
|
||||
cost = 4 //but they aren't
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chamsechud
|
||||
name = "Chameleon Security HUD"
|
||||
desc = "A stolen Nanotrasen Security HUD with Syndicate chameleon technology implemented into it. Similarly to a chameleon jumpsuit, the HUD can be morphed into various other eyewear, while retaining the HUD qualities when worn."
|
||||
@@ -1168,7 +1144,29 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
Due to budget cuts, the shoes don't provide protection against slipping. The set comes with a complementary chameleon stamp."
|
||||
reference = "CHAM"
|
||||
item = /obj/item/storage/box/syndie_kit/chameleon
|
||||
cost = 4
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chameleon/nuke
|
||||
reference = "NCHAM"
|
||||
cost = 6
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes
|
||||
name = "No-Slip Chameleon Shoes"
|
||||
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \
|
||||
They do not work on heavily lubricated surfaces."
|
||||
reference = "NSSS"
|
||||
item = /obj/item/clothing/shoes/chameleon/noslip
|
||||
cost = 2
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
|
||||
reference = "NNSSS"
|
||||
cost = 4
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chameleon_proj
|
||||
name = "Chameleon-Projector"
|
||||
@@ -1209,6 +1207,21 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 2
|
||||
surplus = 30
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes
|
||||
name = "No-Slip Chameleon Shoes"
|
||||
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. They do not work on heavily lubricated surfaces."
|
||||
reference = "NOCS"
|
||||
item = /obj/item/clothing/shoes/chameleon/noslip
|
||||
cost = 2
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
|
||||
reference = "NOCSN"
|
||||
item = /obj/item/clothing/shoes/chameleon/noslip
|
||||
cost = 4
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/cutouts
|
||||
name = "Adaptive Cardboard Cutouts"
|
||||
desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. This pack contains three as well as a \
|
||||
@@ -1373,16 +1386,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
These reverse-engineered knockoffs of Nanotrasen's 'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety."
|
||||
reference = "BRMB"
|
||||
item = /obj/item/clothing/shoes/magboots/syndie
|
||||
cost = 3
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/magboots/advance
|
||||
name = "Advanced Blood-Red Magboots"
|
||||
desc = "Reverse-engineered magboots that appear to be based on an advanced model, as they have a lighter magnetic pull. Property of Gorlex Marauders."
|
||||
reference = "ABRMB"
|
||||
item = /obj/item/clothing/shoes/magboots/syndie/advance
|
||||
cost = 3
|
||||
excludefrom = list()
|
||||
cost = 2
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/powersink
|
||||
@@ -1638,10 +1642,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
|
||||
/datum/uplink_item/bundles_TC/c20r
|
||||
name = "C-20r Bundle"
|
||||
desc = "Old Faithful: The classic C-20r, bundled with two magazines and a (surplus) suppressor at discount price."
|
||||
desc = "Old Faithful: The classic C-20r, bundled with three magazines and a (surplus) suppressor at discount price."
|
||||
reference = "C20B"
|
||||
item = /obj/item/storage/backpack/duffel/syndie/c20rbundle
|
||||
cost = 14 // normally 17
|
||||
cost = 18 // normally 21
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/bundles_TC/cyber_implants
|
||||
@@ -1656,10 +1660,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
/datum/uplink_item/bundles_TC/medical
|
||||
name = "Medical Bundle"
|
||||
desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \
|
||||
a Donksoft LMG and a box of riot darts."
|
||||
a medical beam gun and a pair of syndicate magboots."
|
||||
reference = "MEDB"
|
||||
item = /obj/item/storage/backpack/duffel/syndie/med/medicalbundle
|
||||
cost = 15 // normally 20
|
||||
cost = 20 // normally 24
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/bundles_TC/sniper
|
||||
|
||||
@@ -45,13 +45,7 @@
|
||||
loc.handle_atom_del(src)
|
||||
for(var/atom/movable/AM in contents)
|
||||
qdel(AM)
|
||||
var/turf/un_opaque
|
||||
if(opacity && isturf(loc))
|
||||
un_opaque = loc
|
||||
|
||||
loc = null
|
||||
if(un_opaque)
|
||||
un_opaque.recalc_atom_opacity()
|
||||
if(pulledby)
|
||||
if(pulledby.pulling == src)
|
||||
pulledby.pulling = null
|
||||
@@ -120,7 +114,7 @@
|
||||
return
|
||||
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1) //separated from our puller and not in the middle of a diagonal move.
|
||||
pulledby.stop_pulling()
|
||||
|
||||
|
||||
/atom/movable/proc/can_be_pulled(user, grab_state, force)
|
||||
if(src == user || !isturf(loc))
|
||||
return FALSE
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
var/obj/structure/blob/factory/factory = null
|
||||
var/list/human_overlays = list()
|
||||
var/is_zombie = 0
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120 //120 kPa difference required to throw
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
|
||||
..()
|
||||
@@ -97,8 +95,6 @@
|
||||
human_overlays = H.overlays
|
||||
update_icons()
|
||||
H.forceMove(src)
|
||||
pressure_resistance = 20 //5 kPa difference required to push lowered
|
||||
throw_pressure_limit = 30 //15 kPa difference required to throw lowered
|
||||
visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
|
||||
@@ -176,8 +172,7 @@
|
||||
force_threshold = 10
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120 //120 kPa difference required to throw
|
||||
pressure_resistance = 50
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
|
||||
|
||||
@@ -382,7 +382,7 @@
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!</span>", "<span class='warning'>We inflate our hand into a strong shield.</span>", "<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
|
||||
/obj/item/shield/changeling/hit_reaction()
|
||||
/obj/item/shield/changeling/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(remaining_uses < 1)
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
user.Dizzy(30)
|
||||
user.Weaken(5)
|
||||
|
||||
/obj/item/clothing/suit/hooded/cultrobes/cult_shield/hit_reaction(mob/living/carbon/human/owner, attack_text, isinhands)
|
||||
/obj/item/clothing/suit/hooded/cultrobes/cult_shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(current_charges)
|
||||
owner.visible_message("<span class='danger'>\The [attack_text] is deflected in a burst of blood-red sparks!</span>")
|
||||
current_charges--
|
||||
|
||||
@@ -80,9 +80,8 @@
|
||||
M.overlays.Cut()
|
||||
M.regenerate_icons()
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/hit_reaction()
|
||||
/obj/item/clothing/suit/armor/abductor/vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
DeactivateStealth()
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/IsReflect()
|
||||
DeactivateStealth()
|
||||
@@ -455,7 +454,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK))
|
||||
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
|
||||
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -456,7 +456,7 @@
|
||||
/datum/spellbook_entry/item/armor/Buy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book)
|
||||
. = ..()
|
||||
if(.)
|
||||
new /obj/item/clothing/shoes/magboots/wizard(get_turf(user))
|
||||
new /obj/item/clothing/shoes/sandal(get_turf(user)) //In case they've lost them.
|
||||
new /obj/item/clothing/gloves/color/purple(get_turf(user)) // To complete the outfit
|
||||
|
||||
/datum/spellbook_entry/item/mjolnir
|
||||
|
||||
@@ -119,8 +119,6 @@
|
||||
|
||||
var/report_danger_level = TRUE
|
||||
|
||||
var/automatic_emergency = TRUE //Does the alarm automaticly respond to an emergency condition
|
||||
|
||||
/obj/machinery/alarm/monitor
|
||||
report_danger_level = FALSE
|
||||
|
||||
@@ -315,12 +313,6 @@
|
||||
|
||||
if(old_danger_level!=danger_level)
|
||||
apply_danger_level()
|
||||
if(automatic_emergency && mode == AALARM_MODE_SCRUBBING && danger_level == ATMOS_ALARM_DANGER)
|
||||
if(pressure_dangerlevel == ATMOS_ALARM_DANGER)
|
||||
mode = AALARM_MODE_OFF
|
||||
if(temperature_dangerlevel == ATMOS_ALARM_DANGER && cur_tlv.max2 <= environment.temperature)
|
||||
mode = AALARM_MODE_PANIC
|
||||
apply_mode()
|
||||
|
||||
if(mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05)
|
||||
mode = AALARM_MODE_SCRUBBING
|
||||
|
||||
@@ -71,7 +71,7 @@ var/datum/canister_icons/canister_icon_container = new()
|
||||
|
||||
var/can_label = 1
|
||||
var/filled = 0.5
|
||||
pressure_resistance = 7*ONE_ATMOSPHERE
|
||||
pressure_resistance = 7 * ONE_ATMOSPHERE
|
||||
var/temperature_resistance = 1000 + T0C
|
||||
volume = 1000
|
||||
use_power = NO_POWER_USE
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
volume = 750
|
||||
|
||||
var/minrate = 0//probably useless, but whatever
|
||||
var/maxrate = 10 * ONE_ATMOSPHERE / 4
|
||||
var/maxrate = 10 * ONE_ATMOSPHERE
|
||||
|
||||
/obj/machinery/portable_atmospherics/scrubber/emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
|
||||
@@ -420,7 +420,7 @@
|
||||
/obj/item/holo/esword/red/New()
|
||||
item_color = "red"
|
||||
|
||||
/obj/item/holo/esword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
/obj/item/holo/esword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(active)
|
||||
return ..()
|
||||
return 0
|
||||
|
||||
@@ -492,7 +492,7 @@
|
||||
playsound(src.loc, 'sound/weapons/genhit.ogg', 100, 1)
|
||||
var/turf/space/T
|
||||
for(T in orange(1, src))
|
||||
T.ChangeTurf(/turf/simulated/floor/plating/)
|
||||
T.ChangeTurf(/turf/simulated/floor/plating)
|
||||
else
|
||||
atom_say("Something slams into the floor around [src] - luckily, it didn't get through!")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 20, 1)
|
||||
|
||||
@@ -96,7 +96,7 @@ Class Procs:
|
||||
/obj/machinery
|
||||
name = "machinery"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
pressure_resistance = 10
|
||||
pressure_resistance = 15
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/stat = 0
|
||||
var/emagged = 0
|
||||
|
||||
@@ -84,7 +84,6 @@
|
||||
name = "security suit storage unit"
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/security
|
||||
mask_type = /obj/item/clothing/mask/gas/sechailer
|
||||
magboots_type = /obj/item/clothing/shoes/magboots
|
||||
req_access = list(access_security)
|
||||
|
||||
/obj/machinery/suit_storage_unit/security/secure
|
||||
@@ -130,7 +129,6 @@
|
||||
/obj/machinery/suit_storage_unit/cmo/secure/sec_storage
|
||||
name = "medical suit storage unit"
|
||||
mask_type = /obj/item/clothing/mask/gas
|
||||
magboots_type = /obj/item/clothing/shoes/magboots
|
||||
|
||||
/obj/machinery/suit_storage_unit/clown
|
||||
name = "clown suit storage unit"
|
||||
@@ -154,7 +152,6 @@
|
||||
name = "syndicate suit storage unit"
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/syndi
|
||||
mask_type = /obj/item/clothing/mask/gas/syndicate
|
||||
magboots_type = /obj/item/clothing/shoes/magboots/syndie
|
||||
storage_type = /obj/item/tank/jetpack/oxygen/harness
|
||||
req_access = list(access_syndicate)
|
||||
safeties = FALSE //in a syndicate base, everything can be used as a murder weapon at a moment's notice.
|
||||
|
||||
+177
-47
@@ -121,9 +121,10 @@
|
||||
product_records = list()
|
||||
hidden_records = list()
|
||||
coin_records = list()
|
||||
build_inventory(products, product_records, start_empty = TRUE)
|
||||
build_inventory(contraband, hidden_records, start_empty = TRUE)
|
||||
build_inventory(premium, coin_records, start_empty = TRUE)
|
||||
if(refill_canister)
|
||||
build_inventory(products, product_records, start_empty = TRUE)
|
||||
build_inventory(contraband, hidden_records, start_empty = TRUE)
|
||||
build_inventory(premium, coin_records, start_empty = TRUE)
|
||||
for(var/obj/item/vending_refill/VR in component_parts)
|
||||
restock(VR)
|
||||
|
||||
@@ -1275,16 +1276,57 @@
|
||||
product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!"
|
||||
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
|
||||
icon_state = "seeds"
|
||||
products = list(/obj/item/seeds/aloe =3, /obj/item/seeds/ambrosia = 3, /obj/item/seeds/apple = 3, /obj/item/seeds/cotton = 3, /obj/item/seeds/banana = 3, /obj/item/seeds/berry = 3,
|
||||
/obj/item/seeds/cabbage = 3, /obj/item/seeds/carrot = 3, /obj/item/seeds/cherry = 3, /obj/item/seeds/chanter = 3,
|
||||
/obj/item/seeds/chili = 3, /obj/item/seeds/cocoapod = 3, /obj/item/seeds/coffee = 3, /obj/item/seeds/comfrey =3, /obj/item/seeds/corn = 3,
|
||||
/obj/item/seeds/nymph =3, /obj/item/seeds/eggplant = 3, /obj/item/seeds/grape = 3, /obj/item/seeds/grass = 3, /obj/item/seeds/lemon = 3,
|
||||
/obj/item/seeds/lime = 3, /obj/item/seeds/onion = 3, /obj/item/seeds/orange = 3, /obj/item/seeds/peanuts = 3, /obj/item/seeds/pineapple = 3, /obj/item/seeds/potato = 3, /obj/item/seeds/poppy = 3,
|
||||
/obj/item/seeds/pumpkin = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/wheat/rice = 3, /obj/item/seeds/soya = 3, /obj/item/seeds/sunflower = 3, /obj/item/seeds/sugarcane = 3,
|
||||
/obj/item/seeds/tea = 3, /obj/item/seeds/tobacco = 3, /obj/item/seeds/tomato = 3,
|
||||
/obj/item/seeds/tower = 3, /obj/item/seeds/watermelon = 3, /obj/item/seeds/wheat = 3, /obj/item/seeds/whitebeet = 3)
|
||||
contraband = list(/obj/item/seeds/amanita = 2, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/liberty = 2, /obj/item/seeds/nettle = 2,
|
||||
/obj/item/seeds/plump = 2, /obj/item/seeds/reishi = 2, /obj/item/seeds/cannabis = 3, /obj/item/seeds/starthistle = 2, /obj/item/seeds/fungus = 3, /obj/item/seeds/random = 2)
|
||||
products = list(/obj/item/seeds/aloe =3,
|
||||
/obj/item/seeds/ambrosia = 3,
|
||||
/obj/item/seeds/apple = 3,
|
||||
/obj/item/seeds/cotton = 3,
|
||||
/obj/item/seeds/banana = 3,
|
||||
/obj/item/seeds/berry = 3,
|
||||
/obj/item/seeds/cabbage = 3,
|
||||
/obj/item/seeds/carrot = 3,
|
||||
/obj/item/seeds/cherry = 3,
|
||||
/obj/item/seeds/chanter = 3,
|
||||
/obj/item/seeds/chili = 3,
|
||||
/obj/item/seeds/cocoapod = 3,
|
||||
/obj/item/seeds/coffee = 3,
|
||||
/obj/item/seeds/comfrey =3,
|
||||
/obj/item/seeds/corn = 3,
|
||||
/obj/item/seeds/nymph =3,
|
||||
/obj/item/seeds/eggplant = 3,
|
||||
/obj/item/seeds/garlic = 3,
|
||||
/obj/item/seeds/grape = 3,
|
||||
/obj/item/seeds/grass = 3,
|
||||
/obj/item/seeds/lemon = 3,
|
||||
/obj/item/seeds/lime = 3,
|
||||
/obj/item/seeds/onion = 3,
|
||||
/obj/item/seeds/orange = 3,
|
||||
/obj/item/seeds/peanuts = 3,
|
||||
/obj/item/seeds/pineapple = 3,
|
||||
/obj/item/seeds/potato = 3,
|
||||
/obj/item/seeds/poppy = 3,
|
||||
/obj/item/seeds/pumpkin = 3,
|
||||
/obj/item/seeds/replicapod = 3,
|
||||
/obj/item/seeds/wheat/rice = 3,
|
||||
/obj/item/seeds/soya = 3,
|
||||
/obj/item/seeds/sunflower = 3,
|
||||
/obj/item/seeds/sugarcane = 3,
|
||||
/obj/item/seeds/tea = 3,
|
||||
/obj/item/seeds/tobacco = 3,
|
||||
/obj/item/seeds/tomato = 3,
|
||||
/obj/item/seeds/tower = 3,
|
||||
/obj/item/seeds/watermelon = 3,
|
||||
/obj/item/seeds/wheat = 3,
|
||||
/obj/item/seeds/whitebeet = 3)
|
||||
contraband = list(/obj/item/seeds/amanita = 2,
|
||||
/obj/item/seeds/glowshroom = 2,
|
||||
/obj/item/seeds/liberty = 2,
|
||||
/obj/item/seeds/nettle = 2,
|
||||
/obj/item/seeds/plump = 2,
|
||||
/obj/item/seeds/reishi = 2,
|
||||
/obj/item/seeds/cannabis = 3,
|
||||
/obj/item/seeds/starthistle = 2,
|
||||
/obj/item/seeds/fungus = 3,
|
||||
/obj/item/seeds/random = 2)
|
||||
premium = list(/obj/item/reagent_containers/spray/waterflower = 1)
|
||||
refill_canister = /obj/item/vending_refill/hydroseeds
|
||||
|
||||
@@ -1326,41 +1368,129 @@
|
||||
product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!"
|
||||
vend_delay = 15
|
||||
vend_reply = "Thank you for using AutoDrobe!"
|
||||
products = list(/obj/item/clothing/suit/chickensuit = 1,/obj/item/clothing/head/chicken = 1,/obj/item/clothing/under/gladiator = 1,
|
||||
/obj/item/clothing/head/helmet/gladiator = 1,/obj/item/clothing/under/gimmick/rank/captain/suit = 1,/obj/item/clothing/head/flatcap = 1,
|
||||
/obj/item/clothing/suit/storage/labcoat/mad = 1,/obj/item/clothing/glasses/gglasses = 1,/obj/item/clothing/shoes/jackboots = 1,
|
||||
/obj/item/clothing/under/schoolgirl = 1,/obj/item/clothing/head/kitty = 1,/obj/item/clothing/under/blackskirt = 1,
|
||||
/obj/item/clothing/suit/toggle/owlwings = 1, /obj/item/clothing/under/owl = 1,/obj/item/clothing/mask/gas/owl_mask = 1,
|
||||
/obj/item/clothing/suit/toggle/owlwings/griffinwings = 1, /obj/item/clothing/under/griffin = 1, /obj/item/clothing/shoes/griffin = 1, /obj/item/clothing/head/griffin = 1,
|
||||
/obj/item/clothing/accessory/waistcoat = 1,/obj/item/clothing/under/suit_jacket = 1,/obj/item/clothing/head/that =1,/obj/item/clothing/under/kilt = 1,/obj/item/clothing/accessory/waistcoat = 1,
|
||||
/obj/item/clothing/glasses/monocle =1,/obj/item/clothing/head/bowlerhat = 1,/obj/item/cane = 1,/obj/item/clothing/under/sl_suit = 1,
|
||||
/obj/item/clothing/mask/fakemoustache = 1,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,/obj/item/clothing/head/plaguedoctorhat = 1,/obj/item/clothing/mask/gas/plaguedoctor = 1,
|
||||
/obj/item/clothing/suit/apron = 1,/obj/item/clothing/under/waiter = 1,/obj/item/clothing/suit/jacket/miljacket = 1,
|
||||
/obj/item/clothing/suit/jacket/miljacket/white = 1, /obj/item/clothing/suit/jacket/miljacket/desert = 1, /obj/item/clothing/suit/jacket/miljacket/navy = 1,
|
||||
/obj/item/clothing/under/pirate = 1,/obj/item/clothing/suit/pirate_brown = 1,/obj/item/clothing/suit/pirate_black =1,/obj/item/clothing/under/pirate_rags =1,/obj/item/clothing/head/pirate = 1,/obj/item/clothing/head/bandana = 1,
|
||||
/obj/item/clothing/head/bandana = 1,/obj/item/clothing/under/soviet = 1,/obj/item/clothing/head/ushanka = 1,/obj/item/clothing/suit/imperium_monk = 1,
|
||||
/obj/item/clothing/mask/gas/cyborg = 1,/obj/item/clothing/suit/holidaypriest = 1,/obj/item/clothing/head/wizard/marisa/fake = 1,
|
||||
/obj/item/clothing/suit/wizrobe/marisa/fake = 1,/obj/item/clothing/under/sundress = 1,/obj/item/clothing/head/witchwig = 1,/obj/item/twohanded/staff/broom = 1,
|
||||
/obj/item/clothing/suit/wizrobe/fake = 1,/obj/item/clothing/head/wizard/fake = 1,/obj/item/twohanded/staff = 3,/obj/item/clothing/mask/gas/clown_hat/sexy = 1,
|
||||
/obj/item/clothing/under/rank/clown/sexy = 1,/obj/item/clothing/mask/gas/sexymime = 1,/obj/item/clothing/under/sexymime = 1,
|
||||
/obj/item/clothing/mask/face/bat = 1,/obj/item/clothing/mask/face/bee = 1,/obj/item/clothing/mask/face/bear = 1,/obj/item/clothing/mask/face/raven = 1,/obj/item/clothing/mask/face/jackal = 1,/obj/item/clothing/mask/face/fox = 1,/obj/item/clothing/mask/face/tribal = 1,/obj/item/clothing/mask/face/rat = 1,
|
||||
products = list(/obj/item/clothing/suit/chickensuit = 1,
|
||||
/obj/item/clothing/head/chicken = 1,
|
||||
/obj/item/clothing/under/gladiator = 1,
|
||||
/obj/item/clothing/head/helmet/gladiator = 1,
|
||||
/obj/item/clothing/under/gimmick/rank/captain/suit = 1,
|
||||
/obj/item/clothing/head/flatcap = 1,
|
||||
/obj/item/clothing/suit/storage/labcoat/mad = 1,
|
||||
/obj/item/clothing/glasses/gglasses = 1,
|
||||
/obj/item/clothing/shoes/jackboots = 1,
|
||||
/obj/item/clothing/under/schoolgirl = 1,
|
||||
/obj/item/clothing/head/kitty = 1,
|
||||
/obj/item/clothing/under/blackskirt = 1,
|
||||
/obj/item/clothing/suit/toggle/owlwings = 1,
|
||||
/obj/item/clothing/under/owl = 1,
|
||||
/obj/item/clothing/mask/gas/owl_mask = 1,
|
||||
/obj/item/clothing/suit/toggle/owlwings/griffinwings = 1,
|
||||
/obj/item/clothing/under/griffin = 1,
|
||||
/obj/item/clothing/shoes/griffin = 1,
|
||||
/obj/item/clothing/head/griffin = 1,
|
||||
/obj/item/clothing/accessory/waistcoat = 1,
|
||||
/obj/item/clothing/under/suit_jacket = 1,
|
||||
/obj/item/clothing/head/that =1,
|
||||
/obj/item/clothing/under/kilt = 1,
|
||||
/obj/item/clothing/accessory/waistcoat = 1,
|
||||
/obj/item/clothing/glasses/monocle =1,
|
||||
/obj/item/clothing/head/bowlerhat = 1,
|
||||
/obj/item/cane = 1,
|
||||
/obj/item/clothing/under/sl_suit = 1,
|
||||
/obj/item/clothing/mask/fakemoustache = 1,
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,
|
||||
/obj/item/clothing/head/plaguedoctorhat = 1,
|
||||
/obj/item/clothing/mask/gas/plaguedoctor = 1,
|
||||
/obj/item/clothing/suit/apron = 1,
|
||||
/obj/item/clothing/under/waiter = 1,
|
||||
/obj/item/clothing/suit/jacket/miljacket = 1,
|
||||
/obj/item/clothing/suit/jacket/miljacket/white = 1,
|
||||
/obj/item/clothing/suit/jacket/miljacket/desert = 1,
|
||||
/obj/item/clothing/suit/jacket/miljacket/navy = 1,
|
||||
/obj/item/clothing/under/pirate = 1,
|
||||
/obj/item/clothing/suit/pirate_brown = 1,
|
||||
/obj/item/clothing/suit/pirate_black =1,
|
||||
/obj/item/clothing/under/pirate_rags =1,
|
||||
/obj/item/clothing/head/pirate = 1,
|
||||
/obj/item/clothing/head/bandana = 1,
|
||||
/obj/item/clothing/head/bandana = 1,
|
||||
/obj/item/clothing/under/soviet = 1,
|
||||
/obj/item/clothing/head/ushanka = 1,
|
||||
/obj/item/clothing/suit/imperium_monk = 1,
|
||||
/obj/item/clothing/mask/gas/cyborg = 1,
|
||||
/obj/item/clothing/suit/holidaypriest = 1,
|
||||
/obj/item/clothing/head/wizard/marisa/fake = 1,
|
||||
/obj/item/clothing/suit/wizrobe/marisa/fake = 1,
|
||||
/obj/item/clothing/under/sundress = 1,
|
||||
/obj/item/clothing/head/witchwig = 1,
|
||||
/obj/item/twohanded/staff/broom = 1,
|
||||
/obj/item/clothing/suit/wizrobe/fake = 1,
|
||||
/obj/item/clothing/head/wizard/fake = 1,
|
||||
/obj/item/twohanded/staff = 3,
|
||||
/obj/item/clothing/mask/gas/clown_hat/sexy = 1,
|
||||
/obj/item/clothing/under/rank/clown/sexy = 1,
|
||||
/obj/item/clothing/mask/gas/sexymime = 1,
|
||||
/obj/item/clothing/under/sexymime = 1,
|
||||
/obj/item/clothing/mask/face/bat = 1,
|
||||
/obj/item/clothing/mask/face/bee = 1,
|
||||
/obj/item/clothing/mask/face/bear = 1,
|
||||
/obj/item/clothing/mask/face/raven = 1,
|
||||
/obj/item/clothing/mask/face/jackal = 1,
|
||||
/obj/item/clothing/mask/face/fox = 1,
|
||||
/obj/item/clothing/mask/face/tribal = 1,
|
||||
/obj/item/clothing/mask/face/rat = 1,
|
||||
/obj/item/clothing/suit/apron/overalls = 1,
|
||||
/obj/item/clothing/head/rabbitears =1, /obj/item/clothing/head/sombrero = 1, /obj/item/clothing/suit/poncho = 1,
|
||||
/obj/item/clothing/suit/poncho/green = 1, /obj/item/clothing/suit/poncho/red = 1, /obj/item/clothing/accessory/blue = 1, /obj/item/clothing/accessory/red = 1, /obj/item/clothing/accessory/black = 1, /obj/item/clothing/accessory/horrible = 1,
|
||||
/obj/item/clothing/under/maid = 1, /obj/item/clothing/under/janimaid = 1,
|
||||
/obj/item/clothing/under/jester = 1, /obj/item/clothing/head/jester = 1,
|
||||
/obj/item/clothing/under/pants/camo = 1, /obj/item/clothing/mask/bandana = 1, /obj/item/clothing/mask/bandana/black = 1,
|
||||
/obj/item/clothing/shoes/singery = 1,/obj/item/clothing/under/singery = 1,
|
||||
/obj/item/clothing/shoes/singerb = 1,/obj/item/clothing/under/singerb = 1,
|
||||
/obj/item/clothing/suit/hooded/carp_costume = 1,/obj/item/clothing/suit/hooded/bee_costume = 1,
|
||||
/obj/item/clothing/suit/snowman = 1,/obj/item/clothing/head/snowman = 1,
|
||||
/obj/item/clothing/head/cueball = 1,/obj/item/clothing/under/scratch = 1,
|
||||
/obj/item/clothing/under/victdress = 1, /obj/item/clothing/under/victdress/red = 1, /obj/item/clothing/suit/victcoat = 1, /obj/item/clothing/suit/victcoat/red = 1,
|
||||
/obj/item/clothing/under/victsuit = 1, /obj/item/clothing/under/victsuit/redblk = 1, /obj/item/clothing/under/victsuit/red = 1, /obj/item/clothing/suit/tailcoat = 1,
|
||||
/obj/item/clothing/suit/draculacoat = 1, /obj/item/clothing/head/zepelli = 1,
|
||||
/obj/item/clothing/under/redhawaiianshirt = 1, /obj/item/clothing/under/pinkhawaiianshirt = 1, /obj/item/clothing/under/bluehawaiianshirt = 1, /obj/item/clothing/under/orangehawaiianshirt = 1)
|
||||
contraband = list(/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/gun/magic/wand = 1, /obj/item/clothing/mask/balaclava=1, /obj/item/clothing/mask/horsehead = 2)
|
||||
premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/shield/riot/roman = 1)
|
||||
/obj/item/clothing/head/rabbitears =1,
|
||||
/obj/item/clothing/head/sombrero = 1,
|
||||
/obj/item/clothing/suit/poncho = 1,
|
||||
/obj/item/clothing/suit/poncho/green = 1,
|
||||
/obj/item/clothing/suit/poncho/red = 1,
|
||||
/obj/item/clothing/accessory/blue = 1,
|
||||
/obj/item/clothing/accessory/red = 1,
|
||||
/obj/item/clothing/accessory/black = 1,
|
||||
/obj/item/clothing/accessory/horrible = 1,
|
||||
/obj/item/clothing/under/maid = 1,
|
||||
/obj/item/clothing/under/janimaid = 1,
|
||||
/obj/item/clothing/under/jester = 1,
|
||||
/obj/item/clothing/head/jester = 1,
|
||||
/obj/item/clothing/under/pants/camo = 1,
|
||||
/obj/item/clothing/mask/bandana = 1,
|
||||
/obj/item/clothing/mask/bandana/black = 1,
|
||||
/obj/item/clothing/shoes/singery = 1,
|
||||
/obj/item/clothing/under/singery = 1,
|
||||
/obj/item/clothing/shoes/singerb = 1,
|
||||
/obj/item/clothing/under/singerb = 1,
|
||||
/obj/item/clothing/suit/hooded/carp_costume = 1,
|
||||
/obj/item/clothing/suit/hooded/bee_costume = 1,
|
||||
/obj/item/clothing/suit/snowman = 1,
|
||||
/obj/item/clothing/head/snowman = 1,
|
||||
/obj/item/clothing/head/cueball = 1,
|
||||
/obj/item/clothing/under/scratch = 1,
|
||||
/obj/item/clothing/under/victdress = 1,
|
||||
/obj/item/clothing/under/victdress/red = 1,
|
||||
/obj/item/clothing/suit/victcoat = 1,
|
||||
/obj/item/clothing/suit/victcoat/red = 1,
|
||||
/obj/item/clothing/under/victsuit = 1,
|
||||
/obj/item/clothing/under/victsuit/redblk = 1,
|
||||
/obj/item/clothing/under/victsuit/red = 1,
|
||||
/obj/item/clothing/suit/tailcoat = 1,
|
||||
/obj/item/clothing/suit/draculacoat = 1,
|
||||
/obj/item/clothing/head/zepelli = 1,
|
||||
/obj/item/clothing/under/redhawaiianshirt = 1,
|
||||
/obj/item/clothing/under/pinkhawaiianshirt = 1,
|
||||
/obj/item/clothing/under/bluehawaiianshirt = 1,
|
||||
/obj/item/clothing/under/orangehawaiianshirt = 1)
|
||||
contraband = list(/obj/item/clothing/suit/judgerobe = 1,
|
||||
/obj/item/clothing/head/powdered_wig = 1,
|
||||
/obj/item/gun/magic/wand = 1,
|
||||
/obj/item/clothing/mask/balaclava=1,
|
||||
/obj/item/clothing/mask/horsehead = 2)
|
||||
premium = list(/obj/item/clothing/suit/hgpirate = 1,
|
||||
/obj/item/clothing/head/hgpiratecap = 1,
|
||||
/obj/item/clothing/head/helmet/roman/fake = 1,
|
||||
/obj/item/clothing/head/helmet/roman/legionaire/fake = 1,
|
||||
/obj/item/clothing/under/roman = 1,
|
||||
/obj/item/clothing/shoes/roman = 1,
|
||||
/obj/item/shield/riot/roman/fake = 1)
|
||||
refill_canister = /obj/item/vending_refill/autodrobe
|
||||
|
||||
/obj/machinery/vending/autodrobe/Initialize(mapload)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
/turf/simulated/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
|
||||
for(var/turf/simulated/floor/plating/asteroid/M in range(1, drill.chassis))
|
||||
if((get_dir(drill.chassis, M) & drill.chassis.dir) && !M.dug)
|
||||
M.gets_dug()
|
||||
M.getDug()
|
||||
drill.log_message("Drilled through [src]")
|
||||
drill.move_ores()
|
||||
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
/obj/effect/acid_act()
|
||||
return
|
||||
|
||||
/obj/effect/experience_pressure_difference()
|
||||
return
|
||||
|
||||
/obj/effect/decal
|
||||
plane = FLOOR_PLANE
|
||||
var/no_scoop = FALSE //if it has this, don't let it be scooped up
|
||||
|
||||
@@ -90,6 +90,10 @@
|
||||
/obj/effect/temp_visual/dir_setting/wraith/out
|
||||
icon_state = "phase_shift"
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/tailsweep
|
||||
icon_state = "tailsweep"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/temp_visual/wizard
|
||||
name = "water"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
|
||||
@@ -25,7 +25,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
var/w_class = WEIGHT_CLASS_NORMAL
|
||||
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
|
||||
pass_flags = PASSTABLE
|
||||
pressure_resistance = 3
|
||||
pressure_resistance = 4
|
||||
// causeerrorheresoifixthis
|
||||
var/obj/item/master = null
|
||||
|
||||
@@ -361,7 +361,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/proc/hit_reaction(mob/living/carbon/human/owner, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, atom/movable/AM)
|
||||
/obj/item/proc/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, args)
|
||||
if(prob(final_block_chance))
|
||||
owner.visible_message("<span class='danger'>[owner] blocks [attack_text] with [src]!</span>")
|
||||
|
||||
@@ -41,160 +41,160 @@
|
||||
/obj/item/lightreplacer
|
||||
|
||||
name = "light replacer"
|
||||
desc = "A device to automatically replace lights. Refill with working lightbulbs."
|
||||
desc = "A device to automatically replace lights. Refill with broken or working light bulbs, or sheets of glass."
|
||||
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "lightreplacer0"
|
||||
item_state = "electronic"
|
||||
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "magnets=3;engineering=4"
|
||||
force = 8
|
||||
|
||||
var/emagged = FALSE
|
||||
var/max_uses = 20
|
||||
var/uses = 0
|
||||
var/shards = 0
|
||||
var/recycle = 3
|
||||
var/emagged = 0
|
||||
var/failmsg = ""
|
||||
var/uses = 10
|
||||
// How much to increase per each glass?
|
||||
var/increment = 5
|
||||
// How much to take from the glass?
|
||||
var/decrement = 1
|
||||
var/charge = 1
|
||||
|
||||
/obj/item/lightreplacer/New()
|
||||
uses = max_uses / 2
|
||||
failmsg = "The [name]'s refill light blinks red."
|
||||
..()
|
||||
// Eating used bulbs gives us bulb shards
|
||||
var/bulb_shards = 0
|
||||
// when we get this many shards, we get a free bulb.
|
||||
var/shards_required = 4
|
||||
|
||||
|
||||
/obj/item/lightreplacer/examine(mob/user)
|
||||
if(..(user, 2))
|
||||
to_chat(user, "It has [uses] lights and [shards] shards remaining.")
|
||||
..()
|
||||
to_chat(user, status_string())
|
||||
|
||||
/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = W
|
||||
if(G.amount - decrement >= 0 && uses < max_uses)
|
||||
var/remaining = max(G.amount - decrement, 0)
|
||||
if(!remaining && !(G.amount - decrement) == 0)
|
||||
to_chat(user, "There isn't enough glass.")
|
||||
return
|
||||
G.amount = remaining
|
||||
if(!G.amount)
|
||||
user.drop_item()
|
||||
qdel(G)
|
||||
AddUses(increment)
|
||||
to_chat(user, "You insert a piece of glass into the [src.name]. You have [uses] lights remaining.")
|
||||
/obj/item/lightreplacer/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = I
|
||||
if(uses >= max_uses)
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
else if(G.use(decrement))
|
||||
AddUses(increment)
|
||||
to_chat(user, "<span class='notice'>You insert a piece of glass into [src]. You have [uses] light\s remaining.</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one sheet of glass to replace lights!</span>")
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/light))
|
||||
var/obj/item/light/L = W
|
||||
if(istype(I, /obj/item/shard))
|
||||
if(uses >= max_uses)
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
AddUses(round(increment * 0.75))
|
||||
to_chat(user, "<span class='notice'>You insert a shard of glass into [src]. You have [uses] light\s remaining.</span>")
|
||||
qdel(I)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/light))
|
||||
var/obj/item/light/L = I
|
||||
if(L.status == 0) // LIGHT OKAY
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "[L] is stuck to your hand!")
|
||||
return
|
||||
if(uses < max_uses)
|
||||
if(!user.unEquip(L))
|
||||
return
|
||||
AddUses(1)
|
||||
to_chat(user, "You insert the [L.name] into the [src.name]. You have [uses] lights remaining.")
|
||||
user.drop_item()
|
||||
qdel(L)
|
||||
return
|
||||
else if(L.status == 2 || L.status == 3)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "[L] is stuck to your hand!")
|
||||
return
|
||||
else
|
||||
AddShards(1)
|
||||
to_chat(user, "You insert [L] into [src]. You have [shards] shards remaining.")
|
||||
user.drop_item()
|
||||
qdel(L)
|
||||
else
|
||||
if(!user.unEquip(L))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You insert [L] into [src].</span>")
|
||||
AddShards(1, user)
|
||||
qdel(L)
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/storage))
|
||||
var/obj/item/storage/S = W
|
||||
var/found_lightbulbs = 0
|
||||
if(istype(I, /obj/item/storage))
|
||||
var/obj/item/storage/S = I
|
||||
var/found_lightbulbs = FALSE
|
||||
var/replaced_something = TRUE
|
||||
|
||||
for(var/obj/item/I in S.contents)
|
||||
if(istype(I,/obj/item/light))
|
||||
var/obj/item/light/L = I
|
||||
found_lightbulbs = 1
|
||||
for(var/obj/item/IT in S.contents)
|
||||
if(istype(IT, /obj/item/light))
|
||||
var/obj/item/light/L = IT
|
||||
found_lightbulbs = TRUE
|
||||
if(uses >= max_uses)
|
||||
to_chat(user, "<span class='warning'>[src] is full!</span>")
|
||||
break
|
||||
if(L.status == 0)
|
||||
if(L.status == LIGHT_OK)
|
||||
replaced_something = TRUE
|
||||
AddUses(1)
|
||||
qdel(L)
|
||||
else if(L.status == 2 || L.status == 3)
|
||||
AddShards(1)
|
||||
|
||||
else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED)
|
||||
replaced_something = TRUE
|
||||
AddShards(1, user)
|
||||
qdel(L)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with lights from [S].")
|
||||
|
||||
if(!found_lightbulbs)
|
||||
to_chat(user, "<span class='warning'>[S] contains no bulbs.</span>")
|
||||
return
|
||||
|
||||
if(!replaced_something && uses == max_uses)
|
||||
to_chat(user, "<span class='warning'>[src] is full!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill [src] with lights from [S]. " + status_string() + "</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/lightreplacer/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
Emag()
|
||||
|
||||
/obj/item/lightreplacer/attack_self(mob/user)
|
||||
/* // This would probably be a bit OP. If you want it though, uncomment the code.
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.emagged)
|
||||
src.Emag()
|
||||
to_chat(usr, "You shortcircuit the [src].")
|
||||
return
|
||||
*/
|
||||
to_chat(usr, "It has [uses] lights remaining.")
|
||||
for(var/obj/machinery/light/target in user.loc)
|
||||
ReplaceLight(target, user)
|
||||
to_chat(user, status_string())
|
||||
|
||||
/obj/item/lightreplacer/update_icon()
|
||||
icon_state = "lightreplacer[emagged]"
|
||||
|
||||
/obj/item/lightreplacer/proc/status_string()
|
||||
return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)."
|
||||
|
||||
/obj/item/lightreplacer/proc/Use(var/mob/user)
|
||||
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
/obj/item/lightreplacer/proc/Use(mob/user)
|
||||
playsound(loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
AddUses(-1)
|
||||
return 1
|
||||
|
||||
// Negative numbers will subtract
|
||||
/obj/item/lightreplacer/proc/AddUses(var/amount = 1)
|
||||
uses = min(max(uses + amount, 0), max_uses)
|
||||
/obj/item/lightreplacer/proc/AddUses(amount = 1)
|
||||
uses = Clamp(uses + amount, 0, max_uses)
|
||||
|
||||
/obj/item/lightreplacer/proc/AddShards(amount = 1)
|
||||
shards += amount
|
||||
var/recycled_lights = round(shards / recycle)
|
||||
if(recycled_lights > 0)
|
||||
AddUses(recycled_lights)
|
||||
shards = shards % recycle
|
||||
return recycled_lights
|
||||
/obj/item/lightreplacer/proc/AddShards(amount = 1, user)
|
||||
bulb_shards += amount
|
||||
var/new_bulbs = round(bulb_shards / shards_required)
|
||||
if(new_bulbs > 0)
|
||||
AddUses(new_bulbs)
|
||||
bulb_shards = bulb_shards % shards_required
|
||||
if(new_bulbs != 0)
|
||||
to_chat(user, "<span class='notice'>[src] has fabricated a new bulb from the broken glass it has stored. It now has [uses] uses.</span>")
|
||||
playsound(loc, 'sound/machines/ding.ogg', 50, TRUE)
|
||||
return new_bulbs
|
||||
|
||||
/obj/item/lightreplacer/proc/Charge(var/mob/user)
|
||||
charge += 1
|
||||
if(charge > 7)
|
||||
if(charge > 3)
|
||||
AddUses(1)
|
||||
charge = 1
|
||||
|
||||
/obj/item/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||
|
||||
/obj/item/lightreplacer/proc/ReplaceLight(obj/machinery/light/target, mob/living/U)
|
||||
if(target.status != LIGHT_OK)
|
||||
if(CanUse(U))
|
||||
if(!Use(U)) return
|
||||
to_chat(U, "<span class='notice'>You replace the [target.fitting] with the [src].</span>")
|
||||
if(!Use(U))
|
||||
return
|
||||
to_chat(U, "<span class='notice'>You replace [target.fitting] with [src].</span>")
|
||||
|
||||
if(target.status != LIGHT_EMPTY)
|
||||
|
||||
var/obj/item/light/L1 = new target.light_type(target.loc)
|
||||
L1.status = target.status
|
||||
L1.rigged = target.rigged
|
||||
L1.brightness_range = target.brightness_range
|
||||
L1.brightness_power = target.brightness_power
|
||||
L1.brightness_color = target.brightness_color
|
||||
L1.switchcount = target.switchcount
|
||||
target.switchcount = 0
|
||||
L1.update()
|
||||
|
||||
AddShards(1, U)
|
||||
target.status = LIGHT_EMPTY
|
||||
target.update()
|
||||
|
||||
@@ -215,37 +215,54 @@
|
||||
return
|
||||
|
||||
else
|
||||
to_chat(U, failmsg)
|
||||
to_chat(U, "[src]'s refill light blinks red.")
|
||||
return
|
||||
else
|
||||
to_chat(U, "There is a working [target.fitting] already inserted.")
|
||||
to_chat(U, "<span class='warning'>There is a working [target.fitting] already inserted!</span>")
|
||||
return
|
||||
|
||||
/obj/item/lightreplacer/proc/Emag()
|
||||
emagged = !emagged
|
||||
playsound(src.loc, "sparks", 100, 1)
|
||||
playsound(loc, "sparks", 100, TRUE)
|
||||
if(emagged)
|
||||
name = "Shortcircuited [initial(name)]"
|
||||
name = "shortcircuited [initial(name)]"
|
||||
else
|
||||
name = initial(name)
|
||||
update_icon()
|
||||
|
||||
//Can you use it?
|
||||
/obj/item/lightreplacer/proc/CanUse(mob/living/user)
|
||||
add_fingerprint(user)
|
||||
if(uses > 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(!isturf(T))
|
||||
return
|
||||
|
||||
var/used = FALSE
|
||||
for(var/atom/A in T)
|
||||
if(!CanUse(U))
|
||||
break
|
||||
used = TRUE
|
||||
if(istype(A, /obj/machinery/light))
|
||||
ReplaceLight(A, U)
|
||||
|
||||
if(!used)
|
||||
to_chat(U, "[src]'s refill light blinks red.")
|
||||
|
||||
/obj/item/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
J.put_in_cart(src, user)
|
||||
J.myreplacer = src
|
||||
J.update_icon()
|
||||
|
||||
/obj/item/lightreplacer/proc/CanUse(var/mob/living/user)
|
||||
src.add_fingerprint(user)
|
||||
//Not sure what else to check for. Maybe if clumsy?
|
||||
if(uses > 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
/obj/item/lightreplacer/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
return
|
||||
|
||||
#undef LIGHT_OK
|
||||
#undef LIGHT_EMPTY
|
||||
#undef LIGHT_BROKEN
|
||||
#undef LIGHT_BURNED
|
||||
#undef LIGHT_BURNED
|
||||
@@ -9,7 +9,7 @@
|
||||
throw_range = 1
|
||||
throw_speed = 1
|
||||
layer = 4
|
||||
pressure_resistance = 1
|
||||
pressure_resistance = 2
|
||||
|
||||
/obj/item/documents/nanotrasen
|
||||
desc = "\"Top Secret\" Nanotrasen documents printed on special copy-protected paper. It is filled with complex diagrams and lists of names, dates and coordinates."
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/item/borg/stun/attack(mob/living/M, mob/living/silicon/robot/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.check_shields(0, "[M]'s [name]", src, MELEE_ATTACK))
|
||||
if(H.check_shields(src, 0, "[M]'s [name]", MELEE_ATTACK))
|
||||
playsound(M, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list(
|
||||
new /datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1),
|
||||
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20),
|
||||
new /datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
|
||||
new /datum/stack_recipe("wooden chair", /obj/structure/chair/wood/normal, 3, time = 10, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("wooden chair", /obj/structure/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("bookcase", /obj/structure/bookcase, 5, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("dresser", /obj/structure/dresser, 30, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
brightness_on = 0
|
||||
sharp_when_wielded = FALSE // It's a toy
|
||||
|
||||
/obj/item/twohanded/dualsaber/toy/hit_reaction()
|
||||
/obj/item/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
return 0
|
||||
|
||||
/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
|
||||
|
||||
@@ -7,32 +7,35 @@
|
||||
lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 10.0
|
||||
force = 3
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=500)
|
||||
origin_tech = "combat=1;plasmatech=2;engineering=2"
|
||||
var/status = 0
|
||||
var/lit = 0 //on or off
|
||||
var/operating = 0//cooldown
|
||||
var/turf/previousturf = null
|
||||
var/status = FALSE
|
||||
var/lit = FALSE //on or off
|
||||
var/operating = FALSE//cooldown
|
||||
var/obj/item/weldingtool/weldtool = null
|
||||
var/obj/item/assembly/igniter/igniter = null
|
||||
var/obj/item/tank/plasma/ptank = null
|
||||
var/warned_admins = FALSE //for the message_admins() when lit
|
||||
//variables for prebuilt flamethrowers
|
||||
var/create_full = FALSE
|
||||
var/create_with_tank = FALSE
|
||||
var/igniter_type = /obj/item/assembly/igniter
|
||||
|
||||
|
||||
/obj/item/flamethrower/Destroy()
|
||||
QDEL_NULL(weldtool)
|
||||
QDEL_NULL(igniter)
|
||||
QDEL_NULL(ptank)
|
||||
previousturf = null
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/flamethrower/process()
|
||||
if(!lit)
|
||||
if(!lit || !igniter)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return null
|
||||
var/turf/location = loc
|
||||
@@ -41,133 +44,139 @@
|
||||
if(M.l_hand == src || M.r_hand == src)
|
||||
location = M.loc
|
||||
if(isturf(location)) //start a fire if possible
|
||||
location.hotspot_expose(700, 2)
|
||||
return
|
||||
igniter.flamethrower_process(location)
|
||||
|
||||
|
||||
/obj/item/flamethrower/update_icon()
|
||||
overlays.Cut()
|
||||
cut_overlays()
|
||||
if(igniter)
|
||||
overlays += "+igniter[status]"
|
||||
add_overlay("+igniter[status]")
|
||||
if(ptank)
|
||||
overlays += "+ptank"
|
||||
add_overlay("+ptank")
|
||||
if(lit)
|
||||
overlays += "+lit"
|
||||
add_overlay("+lit")
|
||||
item_state = "flamethrower_1"
|
||||
else
|
||||
item_state = "flamethrower_0"
|
||||
return
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_l_hand()
|
||||
M.update_inv_r_hand()
|
||||
|
||||
/obj/item/flamethrower/afterattack(atom/target, mob/user, flag)
|
||||
if(flag) return // too close
|
||||
// Make sure our user is still holding us
|
||||
if(user && user.is_in_active_hand(src))
|
||||
. = ..()
|
||||
if(flag)
|
||||
return // too close
|
||||
if(user && user.get_active_hand() == src) // Make sure our user is still holding us
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(target_turf)
|
||||
var/turflist = getline(user, target_turf)
|
||||
add_attack_logs(user, target, "Flamethrowered at [target.x],[target.y],[target.z]")
|
||||
flame_turf(turflist)
|
||||
|
||||
/obj/item/flamethrower/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(user.stat || user.restrained() || user.lying) return
|
||||
if(iswrench(W) && !status)//Taking this apart
|
||||
/obj/item/flamethrower/attackby(obj/item/I, mob/user, params)
|
||||
if(iswrench(I) && !status)//Taking this apart
|
||||
var/turf/T = get_turf(src)
|
||||
if(weldtool)
|
||||
weldtool.loc = T
|
||||
weldtool.forceMove(T)
|
||||
weldtool = null
|
||||
if(igniter)
|
||||
igniter.loc = T
|
||||
igniter.forceMove(T)
|
||||
igniter = null
|
||||
if(ptank)
|
||||
ptank.loc = T
|
||||
ptank.forceMove(T)
|
||||
ptank = null
|
||||
new /obj/item/stack/rods(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(isscrewdriver(W) && igniter && !lit)
|
||||
else if(isscrewdriver(I) && igniter && !lit)
|
||||
status = !status
|
||||
to_chat(user, "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(isigniter(W))
|
||||
var/obj/item/assembly/igniter/I = W
|
||||
if(I.secured) return
|
||||
if(igniter) return
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
igniter = I
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/tank/plasma))
|
||||
if(ptank)
|
||||
to_chat(user, "<span class='notice'>There appears to already be a plasma tank loaded in [src]!</span>")
|
||||
else if(isigniter(I))
|
||||
var/obj/item/assembly/igniter/IG = I
|
||||
if(IG.secured)
|
||||
return
|
||||
user.drop_item()
|
||||
ptank = W
|
||||
W.loc = src
|
||||
if(igniter)
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
IG.forceMove(src)
|
||||
igniter = IG
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/analyzer) && ptank)
|
||||
else if(istype(I, /obj/item/tank/plasma))
|
||||
if(ptank)
|
||||
if(user.drop_item())
|
||||
I.forceMove(src)
|
||||
ptank.forceMove(get_turf(src))
|
||||
ptank = I
|
||||
to_chat(user, "<span class='notice'>You swap the plasma tank in [src]!</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
I.forceMove(src)
|
||||
ptank = I
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/analyzer) && ptank)
|
||||
atmosanalyzer_scan(ptank.air_contents, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/flamethrower/attack_self(mob/user)
|
||||
toggle_igniter(user)
|
||||
|
||||
/obj/item/flamethrower/AltClick(mob/user)
|
||||
if(ptank && isliving(user) && user.Adjacent(src))
|
||||
user.put_in_hands(ptank)
|
||||
ptank = null
|
||||
to_chat(user, "<span class='notice'>You remove the plasma tank from [src]!</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/flamethrower/examine(mob/user)
|
||||
..()
|
||||
return
|
||||
if(ptank)
|
||||
to_chat(user, "<span class='notice'>[src] has \a [ptank] attached. Alt-click to remove it.</span>")
|
||||
|
||||
|
||||
/obj/item/flamethrower/attack_self(mob/user as mob)
|
||||
if(user.stat || user.restrained() || user.lying) return
|
||||
user.set_machine(src)
|
||||
/obj/item/flamethrower/proc/toggle_igniter(mob/user)
|
||||
if(!ptank)
|
||||
to_chat(user, "<span class='notice'>Attach a plasma tank first!</span>")
|
||||
return
|
||||
var/dat = text("<TT><B>Flamethrower (<A HREF='?src=[UID()];light=1'>[lit ? "<font color='red'>Lit</font>" : "Unlit"]</a>)</B><BR>\n Tank Pressure: [ptank.air_contents.return_pressure()]<BR>\n<A HREF='?src=[UID()];remove=1'>Remove plasmatank</A> - <A HREF='?src=[UID()];close=1'>Close</A></TT>")
|
||||
user << browse(dat, "window=flamethrower;size=600x300")
|
||||
onclose(user, "flamethrower")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/flamethrower/Topic(href,href_list[])
|
||||
if(href_list["close"])
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=flamethrower")
|
||||
if(!status)
|
||||
to_chat(user, "<span class='notice'>Secure the igniter first!</span>")
|
||||
return
|
||||
if(usr.stat || usr.restrained() || usr.lying) return
|
||||
usr.set_machine(src)
|
||||
if(href_list["light"])
|
||||
if(!ptank) return
|
||||
if(!status) return
|
||||
lit = !lit
|
||||
if(lit)
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(href_list["remove"])
|
||||
if(!ptank) return
|
||||
usr.put_in_hands(ptank)
|
||||
ptank = null
|
||||
lit = 0
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=flamethrower")
|
||||
for(var/mob/M in viewers(1, loc))
|
||||
if((M.client && M.machine == src))
|
||||
attack_self(M)
|
||||
to_chat(user, "<span class='notice'>You [lit ? "extinguish" : "ignite"] [src]!</span>")
|
||||
lit = !lit
|
||||
if(lit)
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(!warned_admins)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has lit a flamethrower.")
|
||||
warned_admins = TRUE
|
||||
else
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/flamethrower/CheckParts(list/parts_list)
|
||||
..()
|
||||
weldtool = locate(/obj/item/weldingtool) in contents
|
||||
igniter = locate(/obj/item/assembly/igniter) in contents
|
||||
weldtool.status = 0
|
||||
igniter.secured = 0
|
||||
status = 1
|
||||
weldtool.status = FALSE
|
||||
igniter.secured = FALSE
|
||||
status = TRUE
|
||||
update_icon()
|
||||
|
||||
//Called from turf.dm turf/dblclick
|
||||
/obj/item/flamethrower/proc/flame_turf(turflist)
|
||||
if(!lit || operating) return
|
||||
operating = 1
|
||||
if(!lit || operating)
|
||||
return
|
||||
operating = TRUE
|
||||
var/turf/previousturf = get_turf(src)
|
||||
for(var/turf/simulated/T in turflist)
|
||||
if(!T.air)
|
||||
@@ -176,47 +185,63 @@
|
||||
continue //so we don't burn the tile we be standin on
|
||||
if(!T.CanAtmosPass(previousturf))
|
||||
break
|
||||
ignite_turf(T)
|
||||
if(igniter)
|
||||
igniter.ignite_turf(src, T)
|
||||
else
|
||||
default_ignite(T)
|
||||
sleep(1)
|
||||
previousturf = T
|
||||
operating = 0
|
||||
operating = FALSE
|
||||
for(var/mob/M in viewers(1, loc))
|
||||
if((M.client && M.machine == src))
|
||||
attack_self(M)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/flamethrower/proc/ignite_turf(turf/target, release_amount = 0.05)
|
||||
/obj/item/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05)
|
||||
//TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this...
|
||||
//Transfer 5% of current tank air contents to turf
|
||||
var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount)
|
||||
air_transfer.toxins = air_transfer.toxins // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE
|
||||
if(air_transfer.toxins)
|
||||
air_transfer.toxins = air_transfer.toxins * 5
|
||||
target.assume_air(air_transfer)
|
||||
//Burn it based on transfered gas
|
||||
target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE
|
||||
target.hotspot_expose((ptank.air_contents.temperature*2) + 380, 500)
|
||||
//location.hotspot_expose(1000,500,1)
|
||||
SSair.add_to_active(target, 0)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/flamethrower/full/New(var/loc)
|
||||
..()
|
||||
if(!weldtool)
|
||||
weldtool = new /obj/item/weldingtool(src)
|
||||
weldtool.status = 0
|
||||
if(!igniter)
|
||||
igniter = new /obj/item/assembly/igniter(src)
|
||||
igniter.secured = 0
|
||||
status = 1
|
||||
update_icon()
|
||||
/obj/item/flamethrower/Initialize(mapload)
|
||||
. = ..()
|
||||
if(create_full)
|
||||
if(!weldtool)
|
||||
weldtool = new /obj/item/weldingtool(src)
|
||||
weldtool.status = FALSE
|
||||
if(!igniter)
|
||||
igniter = new igniter_type(src)
|
||||
igniter.secured = FALSE
|
||||
status = TRUE
|
||||
if(create_with_tank)
|
||||
ptank = new /obj/item/tank/plasma/full(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/flamethrower/full/tank/New(var/loc)
|
||||
..()
|
||||
ptank = new /obj/item/tank/plasma/full(src)
|
||||
update_icon()
|
||||
/obj/item/flamethrower/full
|
||||
create_full = TRUE
|
||||
|
||||
/obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
if(ptank && damage && attack_type == PROJECTILE_ATTACK && prob(15))
|
||||
/obj/item/flamethrower/full/tank
|
||||
create_with_tank = TRUE
|
||||
|
||||
/obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits the fueltank on [owner]'s [src], rupturing it! What a shot!</span>")
|
||||
var/target_turf = get_turf(owner)
|
||||
ignite_turf(target_turf, 100)
|
||||
qdel(ptank)
|
||||
var/turf/target_turf = get_turf(owner)
|
||||
log_game("A projectile ([hitby]) detonated a flamethrower tank held by [key_name(owner)] at [COORD(target_turf)]")
|
||||
igniter.ignite_turf(src,target_turf, release_amount = 100)
|
||||
QDEL_NULL(ptank)
|
||||
return 1 //It hit the flamethrower, not them
|
||||
|
||||
/obj/item/assembly/igniter/proc/flamethrower_process(turf/simulated/location)
|
||||
location.hotspot_expose(700, 2)
|
||||
|
||||
/obj/item/assembly/igniter/proc/ignite_turf(obj/item/flamethrower/F, turf/simulated/location, release_amount = 0.05)
|
||||
F.default_ignite(location, release_amount)
|
||||
@@ -113,9 +113,13 @@
|
||||
spawn(det_time)
|
||||
prime()
|
||||
|
||||
/obj/item/grenade/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && prob(15))
|
||||
/obj/item/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
log_game("A projectile ([hitby]) detonated a grenade held by [key_name(owner)] at [COORD(T)]")
|
||||
message_admins("A projectile ([hitby]) detonated a grenade held by [key_name_admin(owner)] at [ADMIN_COORDJMP(T)]")
|
||||
prime()
|
||||
return 1 //It hit the grenade, not them
|
||||
|
||||
@@ -563,7 +567,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/grenade/chem_grenade/saringas
|
||||
payload_name = "saringas"
|
||||
payload_name = "sarin gas"
|
||||
desc = "Contains sarin gas; extremely deadly and fast acting; use with extreme caution."
|
||||
stage = READY
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0 //Don't bring a sword to a gunfight
|
||||
return ..()
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
if(item_color == null)
|
||||
item_color = pick("red", "blue", "green", "purple")
|
||||
|
||||
/obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
/obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(active)
|
||||
return ..()
|
||||
return 0
|
||||
@@ -157,7 +157,7 @@
|
||||
..()
|
||||
item_color = null
|
||||
|
||||
/obj/item/melee/energy/sword/cyborg/saw/hit_reaction()
|
||||
/obj/item/melee/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
return 0
|
||||
|
||||
/obj/item/melee/energy/sword/saber
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
materials = list(MAT_METAL = 1000)
|
||||
|
||||
/obj/item/melee/rapier/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
/obj/item/melee/rapier/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0 //Don't bring a sword to a gunfight
|
||||
return ..()
|
||||
|
||||
@@ -1,27 +1,30 @@
|
||||
// Glass shards
|
||||
|
||||
/obj/item/shard
|
||||
name = "glass shard"
|
||||
name = "shard"
|
||||
desc = "A nasty looking shard of glass."
|
||||
icon = 'icons/obj/shards.dmi'
|
||||
icon_state = "large"
|
||||
sharp = TRUE
|
||||
desc = "Could probably be used as ... a throwing weapon?"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
force = 5
|
||||
throwforce = 10
|
||||
item_state = "shard-glass"
|
||||
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
attack_verb = list("stabbed", "slashed", "sliced", "cut")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
|
||||
sharp = TRUE
|
||||
var/cooldown = 0
|
||||
var/icon_prefix
|
||||
var/obj/item/stack/sheet/welded_type = /obj/item/stack/sheet/glass
|
||||
|
||||
/obj/item/shard/suicide_act(mob/user)
|
||||
to_chat(viewers(user), pick("<span class='danger'>[user] is slitting [user.p_their()] wrists with [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>",
|
||||
"<span class='danger'>[user] is slitting [user.p_their()] throat with [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>"))
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/shard/New()
|
||||
..()
|
||||
/obj/item/shard/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("large", "medium", "small")
|
||||
switch(icon_state)
|
||||
if("small")
|
||||
@@ -33,6 +36,8 @@
|
||||
if("large")
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
if(icon_prefix)
|
||||
icon_state = "[icon_prefix][icon_state]"
|
||||
|
||||
/obj/item/shard/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
if(!proximity || !(src in user))
|
||||
@@ -48,15 +53,17 @@
|
||||
if(affecting.is_robotic())
|
||||
return
|
||||
to_chat(H, "<span class='warning'>[src] cuts into your hand!</span>")
|
||||
if(affecting.receive_damage(force*0.5))
|
||||
if(affecting.receive_damage(force * 0.5))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
/obj/item/shard/attackby(obj/item/I, mob/user, params)
|
||||
if(iswelder(I))
|
||||
var/obj/item/weldingtool/WT = I
|
||||
if(WT.remove_fuel(0, user))
|
||||
var/obj/item/stack/sheet/glass/NG = new (user.loc)
|
||||
for(var/obj/item/stack/sheet/glass/G in user.loc)
|
||||
var/obj/item/stack/sheet/NG = new welded_type(user.loc)
|
||||
for(var/obj/item/stack/sheet/G in user.loc)
|
||||
if(!istype(G, welded_type))
|
||||
continue
|
||||
if(G == NG)
|
||||
continue
|
||||
if(G.amount >= G.max_amount)
|
||||
@@ -64,64 +71,48 @@
|
||||
G.attackby(NG, user)
|
||||
to_chat(user, "<span class='notice'>You add the newly-formed glass to the stack. It now contains [NG.amount] sheet\s.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
return
|
||||
if(istype(I, /obj/item/lightreplacer))
|
||||
I.attackby(src, user)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/shard/Crossed(AM as mob|obj, oldloc)
|
||||
if(isliving(AM))
|
||||
var/mob/living/M = AM
|
||||
if(M.incorporeal_move || M.flying || M.throwing)//you are incorporal or flying or being thrown ..no shard stepping!
|
||||
/obj/item/shard/Crossed(mob/living/L, oldloc)
|
||||
if(istype(L) && has_gravity(loc))
|
||||
if(L.incorporeal_move || L.flying)
|
||||
return
|
||||
to_chat(M, "<span class='danger'>You step on \the [src]!</span>")
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 50, TRUE)
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
var/obj/item/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
|
||||
if(!affecting)
|
||||
return
|
||||
if(affecting.is_robotic())
|
||||
return
|
||||
var/feetCover = (H.wear_suit && H.wear_suit.body_parts_covered & FEET) || (H.w_uniform && H.w_uniform.body_parts_covered & FEET)
|
||||
if(H.shoes || feetCover || H.buckled)
|
||||
return
|
||||
if(affecting.receive_damage(force, 0))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) )
|
||||
var/obj/item/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
|
||||
if(!affecting)
|
||||
return
|
||||
if(affecting.is_robotic())
|
||||
return
|
||||
H.Weaken(3)
|
||||
if(affecting.receive_damage(5, 0))
|
||||
H.UpdateDamageIcon()
|
||||
..()
|
||||
if(cooldown < world.time - 10) //cooldown to avoid message spam.
|
||||
if(!H.incapacitated(ignore_restraints = TRUE))
|
||||
H.visible_message("<span class='danger'>[H] steps on [src]!</span>", \
|
||||
"<span class='userdanger'>You step on [src]!</span>")
|
||||
else
|
||||
H.visible_message("<span class='danger'>[H] slides on [src]!</span>", \
|
||||
"<span class='userdanger'>You slide on [src]!</span>")
|
||||
|
||||
cooldown = world.time
|
||||
H.Weaken(3)
|
||||
return ..()
|
||||
|
||||
/obj/item/shard/plasma
|
||||
name = "plasma shard"
|
||||
desc = "A shard of plasma glass. Considerably tougher then normal glass shards. Apparently not tough enough to be a window."
|
||||
force = 8
|
||||
throwforce = 15
|
||||
force = 6
|
||||
throwforce = 11
|
||||
icon_state = "plasmalarge"
|
||||
sharp = TRUE
|
||||
|
||||
/obj/item/shard/plasma/New()
|
||||
..()
|
||||
icon_state = pick("plasmalarge", "plasmamedium", "plasmasmall")
|
||||
switch(icon_state)
|
||||
if("plasmasmall")
|
||||
pixel_x = rand(-12, 12)
|
||||
pixel_y = rand(-12, 12)
|
||||
if("plasmamedium")
|
||||
pixel_x = rand(-8, 8)
|
||||
pixel_y = rand(-8, 8)
|
||||
if("plasmalarge")
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
|
||||
/obj/item/shard/plasma/attackby(obj/item/W, mob/user, params)
|
||||
if(iswelder(W))
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
var/obj/item/stack/sheet/plasmaglass/NG = new (user.loc)
|
||||
for(var/obj/item/stack/sheet/plasmaglass/G in user.loc)
|
||||
if(G == NG)
|
||||
continue
|
||||
if(G.amount >= G.max_amount)
|
||||
continue
|
||||
G.attackby(NG, user, params)
|
||||
to_chat(usr, "You add the newly-formed plasma glass to the stack. It now contains [NG.amount] sheets.")
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
icon_prefix = "plasma"
|
||||
welded_type = /obj/item/stack/sheet/plasmaglass
|
||||
@@ -3,7 +3,7 @@
|
||||
block_chance = 50
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
|
||||
|
||||
/obj/item/shield/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
/obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == THROWN_PROJECTILE_ATTACK)
|
||||
final_block_chance += 30
|
||||
if(attack_type == LEAP_ATTACK)
|
||||
@@ -39,6 +39,12 @@
|
||||
desc = "Bears an inscription on the inside: <i>\"Romanes venio domus\"</i>."
|
||||
icon_state = "roman_shield"
|
||||
item_state = "roman_shield"
|
||||
materials = list(MAT_METAL=8500)
|
||||
|
||||
/obj/item/shield/riot/roman/fake
|
||||
desc = "Bears an inscription on the inside: <i>\"Romanes venio domus\"</i>. It appears to be a bit flimsy."
|
||||
block_chance = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/shield/riot/buckler
|
||||
name = "wooden buckler"
|
||||
@@ -63,7 +69,7 @@
|
||||
attack_verb = list("shoved", "bashed")
|
||||
var/active = 0
|
||||
|
||||
/obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
/obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
return 0
|
||||
|
||||
/obj/item/shield/energy/IsReflect()
|
||||
@@ -110,7 +116,7 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/active = 0
|
||||
|
||||
/obj/item/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
/obj/item/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(active)
|
||||
return ..()
|
||||
return 0
|
||||
|
||||
@@ -390,6 +390,7 @@
|
||||
..()
|
||||
new /obj/item/ammo_box/magazine/smgm45(src)
|
||||
new /obj/item/ammo_box/magazine/smgm45(src)
|
||||
new /obj/item/ammo_box/magazine/smgm45(src)
|
||||
new /obj/item/gun/projectile/automatic/c20r(src)
|
||||
new /obj/item/suppressor/specialoffer(src)
|
||||
|
||||
@@ -404,13 +405,13 @@
|
||||
new /obj/item/clothing/glasses/chameleon/thermal(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/med/medicalbundle
|
||||
desc = "A large duffel bag containing a tactical medkit, a Donksoft machine gun and a big jumbo box of riot darts."
|
||||
desc = "A large duffel bag containing a tactical medkit, a medical beam gun and a pair of syndicate magboots."
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/med/medicalbundle/New()
|
||||
..()
|
||||
new /obj/item/storage/firstaid/tactical(src)
|
||||
new /obj/item/gun/projectile/automatic/l6_saw/toy(src)
|
||||
new /obj/item/ammo_box/foambox/riot(src)
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
new /obj/item/gun/medbeam(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/c4/New()
|
||||
..()
|
||||
|
||||
@@ -332,6 +332,7 @@
|
||||
new /obj/item/grenade/gluon(src)
|
||||
new /obj/item/grenade/gluon(src)
|
||||
new /obj/item/grenade/chem_grenade/facid(src) //1
|
||||
new /obj/item/grenade/chem_grenade/saringas(src) //1
|
||||
new /obj/item/grenade/gas/plasma(src) //2
|
||||
new /obj/item/grenade/gas/plasma(src)
|
||||
new /obj/item/grenade/frag(src) //10
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that
|
||||
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
|
||||
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
return
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
if(cooldown <= 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK))
|
||||
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
|
||||
return
|
||||
if(check_martial_counter(H, user))
|
||||
return
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
slot_flags = SLOT_BACK
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
pressure_resistance = ONE_ATMOSPHERE*5
|
||||
pressure_resistance = ONE_ATMOSPHERE * 5
|
||||
force = 5.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
|
||||
@@ -279,22 +279,22 @@
|
||||
if(Adj)
|
||||
return //Safety check so you don't blast yourself trying to refill your tank
|
||||
var/datum/reagents/R = reagents
|
||||
if(R.total_volume < 50)
|
||||
to_chat(user, "You need at least 50 units of water to use the nanofrost launcher!")
|
||||
if(R.total_volume < 100)
|
||||
to_chat(user, "You need at least 100 units of water to use the nanofrost launcher!")
|
||||
return
|
||||
if(nanofrost_cooldown)
|
||||
to_chat(user, "Nanofrost launcher is still recharging")
|
||||
return
|
||||
nanofrost_cooldown = 1
|
||||
R.remove_any(50)
|
||||
R.remove_any(100)
|
||||
var/obj/effect/nanofrost_container/A = new /obj/effect/nanofrost_container(get_turf(src))
|
||||
log_game("[key_name(user)] used Nanofrost at [get_area(user)] ([user.x], [user.y], [user.z]).")
|
||||
playsound(src,'sound/items/syringeproj.ogg',40,1)
|
||||
for(var/a=0, a<5, a++)
|
||||
step_towards(A, target)
|
||||
sleep(1)
|
||||
sleep(2)
|
||||
A.Smoke()
|
||||
spawn(50)
|
||||
spawn(100)
|
||||
if(src)
|
||||
nanofrost_cooldown = 0
|
||||
return
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
user.SpinAnimation(7, 1)
|
||||
sleep(1)
|
||||
|
||||
/obj/item/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
/obj/item/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(wielded)
|
||||
return ..()
|
||||
return FALSE
|
||||
@@ -340,14 +340,23 @@
|
||||
no_spin_thrown = TRUE
|
||||
var/obj/item/grenade/explosive = null
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
var/icon_prefix = "spearglass"
|
||||
|
||||
/obj/item/twohanded/spear/update_icon()
|
||||
if(explosive)
|
||||
icon_state = "spearbomb[wielded]"
|
||||
else
|
||||
icon_state = "spearglass[wielded]"
|
||||
icon_state = "[icon_prefix][wielded]"
|
||||
|
||||
/obj/item/twohanded/spear/CheckParts(list/parts_list)
|
||||
var/obj/item/shard/tip = locate() in parts_list
|
||||
if(istype(tip, /obj/item/shard/plasma))
|
||||
force_wielded = 19
|
||||
force_unwielded = 11
|
||||
throwforce = 21
|
||||
icon_prefix = "spearplasma"
|
||||
update_icon()
|
||||
qdel(tip)
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
@@ -373,9 +382,7 @@
|
||||
force_wielded = 20 //I have no idea how to balance
|
||||
throwforce = 22
|
||||
armour_penetration = 15 //Enhanced armor piercing
|
||||
|
||||
/obj/item/twohanded/spear/bonespear/update_icon()
|
||||
icon_state = "bone_spear[wielded]"
|
||||
icon_prefix = "bone_spear"
|
||||
|
||||
//GREY TIDE
|
||||
/obj/item/twohanded/spear/grey_tide
|
||||
@@ -510,7 +517,7 @@
|
||||
armour_penetration = 100
|
||||
force_on = 30
|
||||
|
||||
/obj/item/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
/obj/item/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
owner.visible_message("<span class='danger'>Ranged attacks just make [owner] angrier!</span>")
|
||||
playsound(src, pick('sound/weapons/bulletflyby.ogg','sound/weapons/bulletflyby2.ogg','sound/weapons/bulletflyby3.ogg'), 75, 1)
|
||||
|
||||
@@ -108,7 +108,12 @@
|
||||
..()
|
||||
if(istype(I, /obj/item/shard))
|
||||
var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
|
||||
|
||||
if(istype(I, /obj/item/shard/plasma))
|
||||
S.force_wielded = 19
|
||||
S.force_unwielded = 11
|
||||
S.throwforce = 21
|
||||
S.icon_prefix = "spearplasma"
|
||||
S.update_icon()
|
||||
if(!remove_item_from_storage(user))
|
||||
user.unEquip(src)
|
||||
user.unEquip(I)
|
||||
@@ -174,11 +179,11 @@
|
||||
desc = "This thing looks dangerous... Dangerously good at baseball, that is."
|
||||
homerun_able = 1
|
||||
|
||||
/obj/item/melee/baseball_bat/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type, atom/movable/AM)
|
||||
/obj/item/melee/baseball_bat/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
. = ..()
|
||||
if(!istype(AM, /obj/item) || attack_type != THROWN_PROJECTILE_ATTACK)
|
||||
if(!isitem(hitby) || attack_type != THROWN_PROJECTILE_ATTACK)
|
||||
return FALSE
|
||||
var/obj/item/I = AM
|
||||
var/obj/item/I = hitby
|
||||
if(I.w_class <= WEIGHT_CLASS_NORMAL || istype(I, /obj/item/beach_ball)) // baseball bat deflecting
|
||||
if(deflectmode)
|
||||
if(prob(10))
|
||||
|
||||
@@ -272,7 +272,6 @@
|
||||
new /obj/item/sensor_device(src)
|
||||
new /obj/item/key/ambulance(src)
|
||||
new /obj/item/pinpointer/crew(src)
|
||||
new /obj/item/clothing/shoes/magboots(src)
|
||||
new /obj/item/handheld_defibrillator(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/reagents
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
new /obj/item/clothing/suit/space/hardsuit/syndi(src)
|
||||
new /obj/item/tank/jetpack/oxygen/harness(src)
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
|
||||
/obj/structure/closet/syndicate/nuclear
|
||||
desc = "It's a storage unit for a Syndicate boarding party."
|
||||
|
||||
@@ -133,6 +133,9 @@
|
||||
|
||||
// Chair types
|
||||
/obj/structure/chair/wood
|
||||
name = "wooden chair"
|
||||
desc = "Old is never too old to not be in fashion."
|
||||
icon_state = "wooden_chair"
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
buildstackamount = 3
|
||||
@@ -142,15 +145,8 @@
|
||||
/obj/structure/chair/wood/narsie_act()
|
||||
return
|
||||
|
||||
/obj/structure/chair/wood/normal
|
||||
icon_state = "wooden_chair"
|
||||
name = "wooden chair"
|
||||
desc = "Old is never too old to not be in fashion."
|
||||
|
||||
/obj/structure/chair/wood/wings
|
||||
icon_state = "wooden_chair_wings"
|
||||
name = "wooden chair"
|
||||
desc = "Old is never too old to not be in fashion."
|
||||
item_chair = /obj/item/chair/wood/wings
|
||||
|
||||
/obj/structure/chair/comfy
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
/**********************Asteroid**************************/
|
||||
|
||||
/turf/simulated/floor/plating/asteroid
|
||||
gender = PLURAL
|
||||
name = "asteroid sand"
|
||||
baseturf = /turf/simulated/floor/plating/asteroid
|
||||
icon_state = "asteroid"
|
||||
@@ -8,17 +10,32 @@
|
||||
footstep_sounds = list()
|
||||
var/environment_type = "asteroid"
|
||||
var/turf_type = /turf/simulated/floor/plating/asteroid //Because caves do whacky shit to revert to normal
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
var/sand_type = /obj/item/stack/ore/glass
|
||||
var/floor_variance = 20 //probability floor has a different icon state
|
||||
var/obj/item/stack/digResult = /obj/item/stack/ore/glass/basalt
|
||||
var/dug
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/New()
|
||||
/turf/simulated/floor/plating/asteroid/Initialize(mapload)
|
||||
var/proper_name = name
|
||||
..()
|
||||
. = ..()
|
||||
name = proper_name
|
||||
if(prob(floor_variance))
|
||||
icon_state = "[environment_type][rand(0,12)]"
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/proc/getDug()
|
||||
new digResult(src, 5)
|
||||
icon_plating = "[environment_type]_dug"
|
||||
icon_state = "[environment_type]_dug"
|
||||
dug = TRUE
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/proc/can_dig(mob/user)
|
||||
if(!dug)
|
||||
return TRUE
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Looks like someone has dug here already.</span>")
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/burn_tile()
|
||||
return
|
||||
|
||||
@@ -31,46 +48,50 @@
|
||||
/turf/simulated/floor/plating/asteroid/remove_plating()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/ex_act(severity, target)
|
||||
/turf/simulated/floor/plating/asteroid/ex_act(severity)
|
||||
if(!can_dig())
|
||||
return
|
||||
switch(severity)
|
||||
if(3)
|
||||
return
|
||||
if(2)
|
||||
if(prob(20))
|
||||
gets_dug()
|
||||
getDug()
|
||||
if(1)
|
||||
gets_dug()
|
||||
getDug()
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/attackby(obj/item/W, mob/user, params)
|
||||
/turf/simulated/floor/plating/asteroid/attackby(obj/item/I, mob/user, params)
|
||||
//note that this proc does not call ..()
|
||||
if(!W || !user)
|
||||
return 0
|
||||
if(!I|| !user)
|
||||
return FALSE
|
||||
|
||||
if((istype(I, /obj/item/shovel) || istype(I, /obj/item/pickaxe)))
|
||||
if(!can_dig(user))
|
||||
return TRUE
|
||||
|
||||
if((istype(W, /obj/item/shovel) || istype(W, /obj/item/pickaxe)))
|
||||
var/turf/T = get_turf(user)
|
||||
if(!istype(T))
|
||||
return
|
||||
|
||||
if(dug)
|
||||
to_chat(user, "<span class='warning'>This area has already been dug!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start digging...</span>")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
to_chat(user, "<span class='notice'>You dig a hole.</span>")
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
else if(istype(W,/obj/item/storage/bag/ore))
|
||||
var/obj/item/storage/bag/ore/S = W
|
||||
playsound(src, I.usesound, 50, TRUE)
|
||||
if(do_after(user, 40 * I.toolspeed, target = src))
|
||||
if(!can_dig(user))
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>You dig a hole.</span>")
|
||||
getDug()
|
||||
return TRUE
|
||||
|
||||
else if(istype(I, /obj/item/storage/bag/ore))
|
||||
var/obj/item/storage/bag/ore/S = I
|
||||
if(S.collection_mode == 1)
|
||||
for(var/obj/item/stack/ore/O in src.contents)
|
||||
O.attackby(W,user)
|
||||
for(var/obj/item/stack/ore/O in contents)
|
||||
O.attackby(I, user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/stack/tile))
|
||||
var/obj/item/stack/tile/Z = W
|
||||
else if(istype(I, /obj/item/stack/tile))
|
||||
var/obj/item/stack/tile/Z = I
|
||||
if(!Z.use(1))
|
||||
return
|
||||
if(istype(Z, /obj/item/stack/tile/plasteel)) // Turn asteroid floors into plating by default
|
||||
@@ -79,25 +100,14 @@
|
||||
ChangeTurf(Z.turf_type, keep_icon = FALSE)
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/proc/gets_dug()
|
||||
if(dug)
|
||||
return
|
||||
for(var/i in 1 to 5)
|
||||
new sand_type(src)
|
||||
dug = 1
|
||||
icon_plating = "[environment_type]_dug"
|
||||
icon_state = "[environment_type]_dug"
|
||||
slowdown = 0
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/basalt
|
||||
name = "volcanic floor"
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/basalt
|
||||
icon_state = "basalt"
|
||||
icon_plating = "basalt"
|
||||
environment_type = "basalt"
|
||||
sand_type = /obj/item/stack/ore/glass/basalt
|
||||
floor_variance = 15
|
||||
digResult = /obj/item/stack/ore/glass/basalt
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/basalt/lava //lava underneath
|
||||
baseturf = /turf/simulated/floor/plating/lava/smooth
|
||||
@@ -107,10 +117,14 @@
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/basalt/Initialize()
|
||||
/turf/simulated/floor/plating/asteroid/basalt/Initialize(mapload)
|
||||
. = ..()
|
||||
set_basalt_light(src)
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/basalt/getDug()
|
||||
set_light(0)
|
||||
return ..()
|
||||
|
||||
/proc/set_basalt_light(turf/simulated/floor/B)
|
||||
switch(B.icon_state)
|
||||
if("basalt1", "basalt2", "basalt3")
|
||||
@@ -118,11 +132,6 @@
|
||||
if("basalt5", "basalt9")
|
||||
B.set_light(1.4, 0.6, LIGHT_COLOR_LAVA) //barely anything!
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/basalt/gets_dug()
|
||||
if(!dug)
|
||||
set_light(0)
|
||||
..()
|
||||
|
||||
///////Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground.
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
|
||||
@@ -138,9 +147,10 @@
|
||||
nitrogen = 0
|
||||
turf_type = /turf/simulated/floor/plating/asteroid/airless
|
||||
|
||||
#define SPAWN_MEGAFAUNA "MEGAFAUNA"
|
||||
#define SPAWN_MEGAFAUNA "bluh bluh huge boss"
|
||||
#define SPAWN_BUBBLEGUM 6
|
||||
|
||||
GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = 6))
|
||||
GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM))
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave
|
||||
var/length = 100
|
||||
@@ -169,22 +179,20 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave/volcanic/has_data //subtype for producing a tunnel with given data
|
||||
has_data = TRUE
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave/New()
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave/Initialize(mapload)
|
||||
if (!mob_spawn_list)
|
||||
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 1, /mob/living/simple_animal/hostile/asteroid/goliath = 5, /mob/living/simple_animal/hostile/asteroid/basilisk = 4, /mob/living/simple_animal/hostile/asteroid/hivelord = 3)
|
||||
if (!megafauna_spawn_list)
|
||||
megafauna_spawn_list = GLOB.megafauna_spawn_list
|
||||
if (!flora_spawn_list)
|
||||
flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2)
|
||||
|
||||
. = ..()
|
||||
if(!has_data)
|
||||
produce_tunnel_from_data()
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave/proc/get_cave_data(set_length, exclude_dir = -1)
|
||||
// If set_length (arg1) isn't defined, get a random length; otherwise assign our length to the length arg.
|
||||
@@ -234,7 +242,7 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
if(istype(tunnel))
|
||||
// Small chance to have forks in our tunnel; otherwise dig our tunnel.
|
||||
if(i > 3 && prob(20))
|
||||
var/turf/simulated/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type,FALSE,TRUE)
|
||||
var/turf/simulated/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type, FALSE, TRUE)
|
||||
C.going_backwards = FALSE
|
||||
C.produce_tunnel_from_data(rand(10, 15), dir)
|
||||
else
|
||||
@@ -260,19 +268,22 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
SpawnFlora(T)
|
||||
|
||||
SpawnMonster(T)
|
||||
T.ChangeTurf(turf_type,FALSE,FALSE,TRUE)
|
||||
T.ChangeTurf(turf_type, FALSE, FALSE, TRUE)
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T)
|
||||
if(prob(30))
|
||||
if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored))
|
||||
if(istype(loc, /area/mine/explored) || !istype(loc, /area/lavaland/surface/outdoors/unexplored))
|
||||
return
|
||||
var/randumb = pickweight(mob_spawn_list)
|
||||
while(randumb == SPAWN_MEGAFAUNA)
|
||||
var/maybe_boss = pickweight(megafauna_spawn_list)
|
||||
if(megafauna_spawn_list[maybe_boss])
|
||||
randumb = maybe_boss
|
||||
if(ispath(maybe_boss, /mob/living/simple_animal/hostile/megafauna/bubblegum)) //there can be only one bubblegum, so don't waste spawns on it
|
||||
megafauna_spawn_list.Remove(maybe_boss)
|
||||
if(istype(loc, /area/lavaland/surface/outdoors/unexplored/danger)) //this is danger. it's boss time.
|
||||
var/maybe_boss = pickweight(megafauna_spawn_list)
|
||||
if(megafauna_spawn_list[maybe_boss])
|
||||
randumb = maybe_boss
|
||||
if(ispath(maybe_boss, /mob/living/simple_animal/hostile/megafauna/bubblegum)) //there can be only one bubblegum, so don't waste spawns on it
|
||||
megafauna_spawn_list.Remove(maybe_boss)
|
||||
else //this is not danger, don't spawn a boss, spawn something else
|
||||
randumb = pickweight(mob_spawn_list)
|
||||
|
||||
for(var/mob/living/simple_animal/hostile/H in urange(12,T)) //prevents mob clumps
|
||||
if((ispath(randumb, /mob/living/simple_animal/hostile/megafauna) || ismegafauna(H)) && get_dist(src, H) <= 7)
|
||||
@@ -286,6 +297,7 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
return
|
||||
|
||||
#undef SPAWN_MEGAFAUNA
|
||||
#undef SPAWN_BUBBLEGUM
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/airless/cave/proc/SpawnFlora(turf/T)
|
||||
if(prob(12))
|
||||
@@ -300,6 +312,7 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/snow
|
||||
gender = PLURAL
|
||||
name = "snow"
|
||||
desc = "Looks cold."
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
@@ -309,7 +322,18 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
temperature = 180
|
||||
slowdown = 2
|
||||
environment_type = "snow"
|
||||
sand_type = /obj/item/stack/sheet/mineral/snow
|
||||
planetary_atmos = TRUE
|
||||
burnt_states = list("snow_dug")
|
||||
digResult = /obj/item/stack/sheet/mineral/snow
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/snow/burn_tile()
|
||||
if(!burnt)
|
||||
visible_message("<span class='danger'>[src] melts away!.</span>")
|
||||
slowdown = 0
|
||||
burnt = TRUE
|
||||
icon_state = "snow_dug"
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/turf/simulated/floor/plating/asteroid/snow/airless
|
||||
temperature = TCMB
|
||||
@@ -322,4 +346,5 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
|
||||
/turf/simulated/floor/plating/asteroid/snow/atmosphere
|
||||
oxygen = 22
|
||||
nitrogen = 82
|
||||
temperature = 180
|
||||
temperature = 180
|
||||
planetary_atmos = FALSE
|
||||
@@ -48,7 +48,7 @@
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/simulated/floor/indestructible/necropolis/Initialize()
|
||||
/turf/simulated/floor/indestructible/necropolis/Initialize(mapload)
|
||||
. = ..()
|
||||
if(prob(12))
|
||||
icon_state = "necro[rand(2,3)]"
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
icon_state = "rock"
|
||||
var/smooth_icon = 'icons/turf/smoothrocks.dmi'
|
||||
smooth = SMOOTH_MORE | SMOOTH_BORDER
|
||||
canSmoothWith
|
||||
canSmoothWith = null
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/airless
|
||||
temperature = 2.7
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
density = TRUE
|
||||
blocks_air = TRUE
|
||||
layer = EDGED_TURF_LAYER
|
||||
temperature = TCMB
|
||||
var/environment_type = "asteroid"
|
||||
@@ -21,21 +21,18 @@
|
||||
var/spread = 0 //will the seam spread?
|
||||
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
|
||||
var/last_act = 0
|
||||
var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner
|
||||
var/defer_change = FALSE
|
||||
var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner
|
||||
var/defer_change = 0
|
||||
|
||||
/turf/simulated/mineral/New()
|
||||
if (!canSmoothWith)
|
||||
/turf/simulated/mineral/Initialize(mapload)
|
||||
if(!canSmoothWith)
|
||||
canSmoothWith = list(/turf/simulated/mineral)
|
||||
var/matrix/M = new
|
||||
M.Translate(-4, -4)
|
||||
transform = M
|
||||
icon = smooth_icon
|
||||
|
||||
..()
|
||||
GLOB.mineral_turfs += src
|
||||
|
||||
if (mineralType && mineralAmt && spread && spreadChance)
|
||||
. = ..()
|
||||
if(mineralType && mineralAmt && spread && spreadChance)
|
||||
for(var/dir in cardinal)
|
||||
if(prob(spreadChance))
|
||||
var/turf/T = get_step(src, dir)
|
||||
@@ -56,37 +53,34 @@
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/turf/simulated/mineral/attackby(var/obj/item/pickaxe/P as obj, mob/user as mob, params)
|
||||
/turf/simulated/mineral/attackby(obj/item/I, mob/user, params)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/pickaxe))
|
||||
if(istype(I, /obj/item/pickaxe))
|
||||
var/obj/item/pickaxe/P = I
|
||||
var/turf/T = user.loc
|
||||
if(!isturf(T))
|
||||
return
|
||||
|
||||
if(last_act + (40 * P.toolspeed) > world.time) // Prevents message spam
|
||||
return
|
||||
|
||||
last_act = world.time
|
||||
to_chat(user, "<span class='notice'>You start picking...</span>")
|
||||
P.playDigSound()
|
||||
|
||||
if(do_after(user, 40 * P.toolspeed, target = src))
|
||||
if(istype(src, /turf/simulated/mineral)) //sanity check against turf being deleted during digspeed delay
|
||||
if(ismineralturf(src)) //sanity check against turf being deleted during digspeed delay
|
||||
to_chat(user, "<span class='notice'>You finish cutting into the rock.</span>")
|
||||
P.update_icon()
|
||||
gets_drilled(user)
|
||||
feedback_add_details("pick_used_mining","[P.name]")
|
||||
else
|
||||
return attack_hand(user)
|
||||
|
||||
/turf/simulated/mineral/proc/gets_drilled()
|
||||
if(mineralType && (mineralAmt > 0) && (mineralAmt < 11))
|
||||
var/i
|
||||
for(i=0; i < mineralAmt; i++)
|
||||
new mineralType(src)
|
||||
if(mineralType && (mineralAmt > 0))
|
||||
new mineralType(src, mineralAmt)
|
||||
feedback_add_details("ore_mined","[mineralType]|[mineralAmt]")
|
||||
for(var/obj/effect/temp_visual/mining_overlay/M in src)
|
||||
qdel(M)
|
||||
@@ -94,26 +88,20 @@
|
||||
addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE)
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction
|
||||
|
||||
if(rand(1, 750) == 1)
|
||||
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
|
||||
new /obj/structure/closet/crate/secure/loot(src)
|
||||
|
||||
return
|
||||
|
||||
/turf/simulated/mineral/attack_animal(mob/living/simple_animal/user as mob)
|
||||
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
|
||||
gets_drilled()
|
||||
..()
|
||||
|
||||
/turf/simulated/mineral/attack_alien(var/mob/living/carbon/alien/M)
|
||||
/turf/simulated/mineral/attack_alien(mob/living/carbon/alien/M)
|
||||
to_chat(M, "<span class='notice'>You start digging into the rock...</span>")
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE)
|
||||
if(do_after(M, 40, target = src))
|
||||
to_chat(M, "<span class='notice'>You tunnel into the rock.</span>")
|
||||
gets_drilled()
|
||||
gets_drilled(M)
|
||||
|
||||
/turf/simulated/mineral/Bumped(AM as mob|obj)
|
||||
. = ..()
|
||||
/turf/simulated/mineral/Bumped(atom/movable/AM)
|
||||
..()
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if((istype(H.l_hand,/obj/item/pickaxe)) && (!H.hand))
|
||||
@@ -124,18 +112,19 @@
|
||||
|
||||
else if(isrobot(AM))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
if(istype(R.module_active,/obj/item/pickaxe))
|
||||
attackby(R.module_active,R)
|
||||
if(istype(R.module_active, /obj/item/pickaxe))
|
||||
attackby(R.module_active, R)
|
||||
|
||||
else if(ismecha(AM))
|
||||
var/obj/mecha/M = AM
|
||||
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill))
|
||||
if(istype(M.selected, /obj/item/mecha_parts/mecha_equipment/drill))
|
||||
M.selected.action(src)
|
||||
|
||||
|
||||
/turf/simulated/mineral/acid_melt()
|
||||
ChangeTurf(baseturf)
|
||||
|
||||
/turf/simulated/mineral/ex_act(severity, target)
|
||||
/turf/simulated/mineral/ex_act(severity)
|
||||
..()
|
||||
switch(severity)
|
||||
if(3)
|
||||
@@ -148,22 +137,23 @@
|
||||
gets_drilled(null, 1)
|
||||
|
||||
/turf/simulated/mineral/random
|
||||
var/mineralSpawnChanceList
|
||||
var/mineralSpawnChanceList = list(/turf/simulated/mineral/uranium = 5, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 10,
|
||||
/turf/simulated/mineral/silver = 12, /turf/simulated/mineral/plasma = 20, /turf/simulated/mineral/iron = 40, /turf/simulated/mineral/titanium = 11,
|
||||
/turf/simulated/mineral/gibtonite = 4, /turf/simulated/floor/plating/asteroid/airless/cave = 2, /turf/simulated/mineral/bscrystal = 1)
|
||||
//Currently, Adamantine won't spawn as it has no uses. -Durandan
|
||||
var/mineralChance = 13
|
||||
var/display_icon_state = "rock"
|
||||
|
||||
/turf/simulated/mineral/random/New()
|
||||
if (!mineralSpawnChanceList)
|
||||
mineralSpawnChanceList = list(
|
||||
/turf/simulated/mineral/uranium = 5, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 10,
|
||||
/turf/simulated/mineral/silver = 12, /turf/simulated/mineral/plasma = 20, /turf/simulated/mineral/iron = 40, /turf/simulated/mineral/titanium = 11,
|
||||
/turf/simulated/mineral/gibtonite = 4, /turf/simulated/floor/plating/asteroid/airless/cave = 2, /turf/simulated/mineral/bscrystal = 1)
|
||||
if (display_icon_state)
|
||||
/turf/simulated/mineral/random/Initialize(mapload)
|
||||
|
||||
mineralSpawnChanceList = typelist("mineralSpawnChanceList", mineralSpawnChanceList)
|
||||
|
||||
if(display_icon_state)
|
||||
icon_state = display_icon_state
|
||||
..()
|
||||
. = ..()
|
||||
if (prob(mineralChance))
|
||||
var/path = pickweight(mineralSpawnChanceList)
|
||||
var/turf/T = ChangeTurf(path,FALSE,TRUE)
|
||||
var/turf/T = ChangeTurf(path, FALSE, TRUE)
|
||||
|
||||
if(T && ismineralturf(T))
|
||||
var/turf/simulated/mineral/M = T
|
||||
@@ -194,7 +184,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
mineralSpawnChanceList = list(
|
||||
/turf/simulated/mineral/uranium/volcanic = 35, /turf/simulated/mineral/diamond/volcanic = 30, /turf/simulated/mineral/gold/volcanic = 45, /turf/simulated/mineral/titanium/volcanic = 45,
|
||||
@@ -215,7 +204,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
mineralChance = 10
|
||||
@@ -226,9 +214,9 @@
|
||||
|
||||
/turf/simulated/mineral/random/labormineral
|
||||
mineralSpawnChanceList = list(
|
||||
/turf/simulated/mineral/uranium = 2, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 3, /turf/simulated/mineral/titanium = 4,
|
||||
/turf/simulated/mineral/silver = 6, /turf/simulated/mineral/plasma = 15, /turf/simulated/mineral/iron = 80,
|
||||
/turf/simulated/mineral/gibtonite = 3)
|
||||
/turf/simulated/mineral/uranium = 3, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 8, /turf/simulated/mineral/titanium = 8,
|
||||
/turf/simulated/mineral/silver = 20, /turf/simulated/mineral/plasma = 30, /turf/simulated/mineral/iron = 95,
|
||||
/turf/simulated/mineral/gibtonite = 2)
|
||||
icon_state = "rock_labor"
|
||||
|
||||
/turf/simulated/mineral/random/labormineral/volcanic
|
||||
@@ -238,12 +226,11 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
mineralSpawnChanceList = list(
|
||||
/turf/simulated/mineral/uranium/volcanic = 2, /turf/simulated/mineral/diamond/volcanic = 1, /turf/simulated/mineral/gold/volcanic = 3, /turf/simulated/mineral/titanium/volcanic = 4,
|
||||
/turf/simulated/mineral/silver/volcanic = 6, /turf/simulated/mineral/plasma/volcanic = 15, /turf/simulated/mineral/iron/volcanic = 80,
|
||||
/turf/simulated/mineral/gibtonite/volcanic = 3)
|
||||
/turf/simulated/mineral/uranium/volcanic = 3, /turf/simulated/mineral/diamond/volcanic = 1, /turf/simulated/mineral/gold/volcanic = 8, /turf/simulated/mineral/titanium/volcanic = 8,
|
||||
/turf/simulated/mineral/silver/volcanic = 20, /turf/simulated/mineral/plasma/volcanic = 30, /turf/simulated/mineral/bscrystal/volcanic = 1, /turf/simulated/mineral/gibtonite/volcanic = 2,
|
||||
/turf/simulated/mineral/iron/volcanic = 95)
|
||||
|
||||
// Actual minerals
|
||||
/turf/simulated/mineral/iron
|
||||
@@ -259,7 +246,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/uranium
|
||||
@@ -275,7 +261,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/diamond
|
||||
@@ -291,7 +276,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/gold
|
||||
@@ -307,7 +291,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/silver
|
||||
@@ -323,7 +306,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/titanium
|
||||
@@ -339,7 +321,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/plasma
|
||||
@@ -355,7 +336,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/clown
|
||||
@@ -372,7 +352,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/mime
|
||||
@@ -388,7 +367,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/bscrystal
|
||||
@@ -405,7 +383,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/volcanic
|
||||
@@ -415,7 +392,6 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/simulated/mineral/volcanic/lava_land_surface
|
||||
environment_type = "basalt"
|
||||
@@ -423,6 +399,12 @@
|
||||
baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface
|
||||
defer_change = 1
|
||||
|
||||
//gibtonite state defines
|
||||
#define GIBTONITE_UNSTRUCK 0
|
||||
#define GIBTONITE_ACTIVE 1
|
||||
#define GIBTONITE_STABLE 2
|
||||
#define GIBTONITE_DETONATE 3
|
||||
|
||||
// Gibtonite
|
||||
/turf/simulated/mineral/gibtonite
|
||||
mineralAmt = 1
|
||||
@@ -430,39 +412,29 @@
|
||||
spread = 0
|
||||
scan_state = "rock_Gibtonite"
|
||||
var/det_time = 8 //Countdown till explosion, but also rewards the player for how close you were to detonation when you defuse it
|
||||
var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction
|
||||
var/stage = GIBTONITE_UNSTRUCK //How far into the lifecycle of gibtonite we are
|
||||
var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes
|
||||
var/activated_name = null
|
||||
var/activated_image = null
|
||||
var/mutable_appearance/activated_overlay
|
||||
|
||||
/turf/simulated/mineral/gibtonite/volcanic
|
||||
environment_type = "basalt"
|
||||
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
defer_change = 1
|
||||
|
||||
/turf/simulated/mineral/gibtonite/New()
|
||||
/turf/simulated/mineral/gibtonite/Initialize(mapload)
|
||||
det_time = rand(8,10) //So you don't know exactly when the hot potato will explode
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/turf/simulated/mineral/gibtonite/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner) && stage == 1)
|
||||
user.visible_message("<span class='notice'>You use [I] to locate where to cut off the chain reaction and attempt to stop it...</span>")
|
||||
user.visible_message("<span class='notice'>[user] holds [I] to [src]...</span>", "<span class='notice'>You use [I] to locate where to cut off the chain reaction and attempt to stop it...</span>")
|
||||
defuse()
|
||||
..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/turf/simulated/mineral/gibtonite/proc/explosive_reaction(var/mob/user = null, triggered_by_explosion = 0)
|
||||
if(stage == 0)
|
||||
var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_active", layer = ON_EDGED_TURF_LAYER)
|
||||
add_overlay(I)
|
||||
activated_image = I
|
||||
/turf/simulated/mineral/gibtonite/proc/explosive_reaction(mob/user = null, triggered_by_explosion = 0)
|
||||
if(stage == GIBTONITE_UNSTRUCK)
|
||||
activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER)
|
||||
add_overlay(activated_overlay)
|
||||
name = "gibtonite deposit"
|
||||
desc = "An active gibtonite reserve. Run!"
|
||||
stage = 1
|
||||
stage = GIBTONITE_ACTIVE
|
||||
visible_message("<span class='danger'>There was gibtonite inside! It's going to explode!</span>")
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
@@ -484,39 +456,39 @@
|
||||
|
||||
/turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0)
|
||||
set waitfor = 0
|
||||
while(istype(src, /turf/simulated/mineral/gibtonite) && stage == 1 && det_time > 0 && mineralAmt >= 1)
|
||||
while(istype(src, /turf/simulated/mineral/gibtonite) && stage == GIBTONITE_ACTIVE && det_time > 0 && mineralAmt >= 1)
|
||||
det_time--
|
||||
sleep(5)
|
||||
if(istype(src, /turf/simulated/mineral/gibtonite))
|
||||
if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
|
||||
if(stage == GIBTONITE_ACTIVE && det_time <= 0 && mineralAmt >= 1)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
mineralAmt = 0
|
||||
stage = 3
|
||||
stage = GIBTONITE_DETONATE
|
||||
explosion(bombturf,1,3,5, adminlog = notify_admins)
|
||||
|
||||
/turf/simulated/mineral/gibtonite/proc/defuse()
|
||||
if(stage == 1)
|
||||
overlays -= activated_image
|
||||
var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_inactive", layer = ON_EDGED_TURF_LAYER)
|
||||
add_overlay(I)
|
||||
if(stage == GIBTONITE_ACTIVE)
|
||||
cut_overlay(activated_overlay)
|
||||
activated_overlay.icon_state = "rock_Gibtonite_inactive"
|
||||
add_overlay(activated_overlay)
|
||||
desc = "An inactive gibtonite reserve. The ore can be extracted."
|
||||
stage = 2
|
||||
stage = GIBTONITE_STABLE
|
||||
if(det_time < 0)
|
||||
det_time = 0
|
||||
visible_message("<span class='notice'>The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!</span>")
|
||||
visible_message("<span class='notice'>The chain reaction was stopped! The gibtonite had [det_time] reactions left till the explosion!</span>")
|
||||
|
||||
/turf/simulated/mineral/gibtonite/gets_drilled(var/mob/user, triggered_by_explosion = 0)
|
||||
if(stage == 0 && mineralAmt >= 1) //Gibtonite deposit is activated
|
||||
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg',50,1)
|
||||
if(stage == GIBTONITE_UNSTRUCK && mineralAmt >= 1) //Gibtonite deposit is activated
|
||||
playsound(src,'sound/effects/hit_on_shattered_glass.ogg', 50, TRUE)
|
||||
explosive_reaction(user, triggered_by_explosion)
|
||||
return
|
||||
if(stage == 1 && mineralAmt >= 1) //Gibtonite deposit goes kaboom
|
||||
if(stage == GIBTONITE_ACTIVE && mineralAmt >= 1) //Gibtonite deposit goes kaboom
|
||||
var/turf/bombturf = get_turf(src)
|
||||
mineralAmt = 0
|
||||
stage = 3
|
||||
explosion(bombturf, 1, 2, 5, adminlog = 0)
|
||||
if(stage == 2) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore.
|
||||
var/obj/item/twohanded/required/gibtonite/G = new /obj/item/twohanded/required/gibtonite/(src)
|
||||
stage = GIBTONITE_DETONATE
|
||||
explosion(bombturf,1,2,5, adminlog = 0)
|
||||
if(stage == GIBTONITE_STABLE) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore.
|
||||
var/obj/item/twohanded/required/gibtonite/G = new(src)
|
||||
if(det_time <= 0)
|
||||
G.quality = 3
|
||||
G.icon_state = "Gibtonite ore 3"
|
||||
@@ -526,3 +498,18 @@
|
||||
|
||||
ChangeTurf(turf_type, defer_change)
|
||||
addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE)
|
||||
|
||||
|
||||
/turf/simulated/mineral/gibtonite/volcanic
|
||||
environment_type = "basalt"
|
||||
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
defer_change = 1
|
||||
|
||||
#undef GIBTONITE_UNSTRUCK
|
||||
#undef GIBTONITE_ACTIVE
|
||||
#undef GIBTONITE_STABLE
|
||||
#undef GIBTONITE_DETONATE
|
||||
@@ -4,7 +4,7 @@
|
||||
#define RANDOM_LOWER_X 50
|
||||
#define RANDOM_LOWER_Y 50
|
||||
|
||||
/proc/spawn_rivers(target_z, nodes = 4, turf_type = /turf/simulated/floor/plating/lava/smooth/lava_land_surface, whitelist_area = /area/lavaland/surface/outdoors/unexplored, min_x = RANDOM_LOWER_X, min_y = RANDOM_LOWER_Y, max_x = RANDOM_UPPER_X, max_y = RANDOM_UPPER_Y)
|
||||
/proc/spawn_rivers(target_z, nodes = 4, turf_type = /turf/simulated/floor/plating/lava/smooth/lava_land_surface, whitelist_area = /area/lavaland/surface/outdoors, min_x = RANDOM_LOWER_X, min_y = RANDOM_LOWER_Y, max_x = RANDOM_UPPER_X, max_y = RANDOM_UPPER_Y)
|
||||
var/list/river_nodes = list()
|
||||
var/num_spawned = 0
|
||||
var/list/possible_locs = block(locate(min_x, min_y, target_z), locate(max_x, max_y, target_z))
|
||||
|
||||
@@ -54,7 +54,7 @@ var/global/nologevent = 0
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
/datum/admins/proc/show_player_panel(var/mob/M in GLOB.mob_list)
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
set name = "Show Player Panel"
|
||||
set desc="Edit player (respawn, ban, heal, etc)"
|
||||
|
||||
@@ -937,9 +937,9 @@ var/global/nologevent = 0
|
||||
message_admins("[key_name_admin(usr)] checked the AI laws")
|
||||
|
||||
/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob)
|
||||
set category = "Admin"
|
||||
set name = "Update Mob Sprite"
|
||||
set desc = "Should fix any mob sprite update errors."
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -71,13 +71,12 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/alt_check,
|
||||
/client/proc/secrets,
|
||||
/client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */
|
||||
/client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */
|
||||
/client/proc/change_human_appearance_self, /* Allows the human-based mob itself to change its basic appearance */
|
||||
/client/proc/debug_variables,
|
||||
/client/proc/reset_all_tcs, /*resets all telecomms scripts*/
|
||||
/client/proc/toggle_mentor_chat,
|
||||
/client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/
|
||||
/client/proc/list_ssds,
|
||||
/client/proc/list_afks,
|
||||
/client/proc/list_ssds_afks,
|
||||
/client/proc/cmd_admin_headset_message,
|
||||
/client/proc/spawn_floor_cluwne,
|
||||
/client/proc/show_discord_duplicates, // This needs removing at some point, ingame discord linking got removed in #11359
|
||||
@@ -803,7 +802,7 @@ var/list/admin_verbs_ticket = list(
|
||||
/client/proc/change_human_appearance_admin(mob/living/carbon/human/H in GLOB.mob_list)
|
||||
set name = "C.M.A. - Admin"
|
||||
set desc = "Allows you to change the mob appearance"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -829,7 +828,7 @@ var/list/admin_verbs_ticket = list(
|
||||
/client/proc/change_human_appearance_self(mob/living/carbon/human/H in GLOB.mob_list)
|
||||
set name = "C.M.A. - Self"
|
||||
set desc = "Allows the mob to change its appearance"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
|
||||
/client/proc/resolveAllAdminTickets()
|
||||
set name = "Resolve All Open Admin Tickets"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!holder || !check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to resolve ALL open tickets?","Resolve all open tickets?","Yes","No") != "Yes")
|
||||
if(alert("Are you sure you want to resolve ALL open admin tickets?","Resolve all open admin tickets?","Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
SStickets.resolveAllOpenTickets()
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
|
||||
/client/proc/resolveAllMentorTickets()
|
||||
set name = "Resolve All Open Mentor Tickets"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!holder || !check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to resolve ALL open tickets?","Resolve all open tickets?","Yes","No") != "Yes")
|
||||
if(alert("Are you sure you want to resolve ALL open mentor tickets?","Resolve all open mentor tickets?","Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
SSmentor_tickets.resolveAllOpenTickets()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
return
|
||||
var/ticketID = text2num(href_list["openmentorticket"])
|
||||
SSmentor_tickets.showDetailUI(usr, ticketID)
|
||||
|
||||
|
||||
if(href_list["stickyban"])
|
||||
stickyban(href_list["stickyban"],href_list)
|
||||
|
||||
@@ -169,14 +169,6 @@
|
||||
message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom IP and computer id fields replaced with the IP and computer id from the located mob")
|
||||
|
||||
DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid )
|
||||
if(BANTYPE_PERMA)
|
||||
add_note(banckey, "Permanently Banned - [banreason]", null, usr.ckey, 0)
|
||||
else if(BANTYPE_TEMP)
|
||||
add_note(banckey, "Banned for [banduration] minutes - [banreason]", null, usr.ckey, 0)
|
||||
else if(BANTYPE_JOB_PERMA)
|
||||
add_note(banckey, "Banned from [banjob] - [banreason]", null, usr.ckey, 0)
|
||||
else
|
||||
add_note(banckey, "[banreason]", null, usr.ckey, 0)
|
||||
|
||||
|
||||
else if(href_list["editrights"])
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/client/proc/jumptoturf(var/turf/T in world)
|
||||
set name = "Jump to Turf"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
else
|
||||
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
|
||||
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]</span>")
|
||||
|
||||
|
||||
//Check if the mob being PM'd has any open admin tickets.
|
||||
var/tickets = list()
|
||||
if(type == "Mentorhelp")
|
||||
@@ -205,10 +205,10 @@
|
||||
if(type == "Mentorhelp")
|
||||
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets
|
||||
tickets = SSmentor_tickets.checkForTicket(src)
|
||||
else // Ahelp
|
||||
else // Ahelp
|
||||
if(check_rights(R_ADMIN|R_MOD, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets
|
||||
tickets = SStickets.checkForTicket(src)
|
||||
|
||||
|
||||
if(tickets)
|
||||
for(var/datum/ticket/i in tickets)
|
||||
i.addResponse(src, msg)
|
||||
@@ -351,7 +351,7 @@
|
||||
var/client/C = pms[title].client || update_client(title)
|
||||
if(!C)
|
||||
return "[title] (Disconnected)"
|
||||
return "[key_name(C, FALSE)] ([ADMIN_QUE(C.mob,"?")]) ([ADMIN_PP(C.mob,"PP")]) ([ADMIN_VV(C.mob,"VV")]) ([ADMIN_SM(C.mob,"SM")]) ([admin_jump_link(C.mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)"
|
||||
return "[key_name(C, FALSE)] ([ADMIN_QUE(C.mob,"?")]) ([ADMIN_PP(C.mob,"PP")]) ([ADMIN_VV(C.mob,"VV")]) ([ADMIN_TP(C.mob,"TP")]) ([ADMIN_SM(C.mob,"SM")]) ([admin_jump_link(C.mob)])"
|
||||
|
||||
/datum/pm_tracker/proc/update_client(title)
|
||||
var/client/C = GLOB.directory[ckey(title)]
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
var/global/list/frozen_mob_list = list()
|
||||
/client/proc/freeze(var/mob/living/M as mob in GLOB.mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Freeze"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -87,8 +87,8 @@ var/global/list/frozen_mob_list = list()
|
||||
//////////////////////////Freeze Mech
|
||||
|
||||
/client/proc/freezemecha(var/obj/mecha/O as obj in GLOB.mechas_list)
|
||||
set category = "Admin"
|
||||
set name = "Freeze Mech"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
deity = SSticker.cultdat.entity_name
|
||||
|
||||
log_say("(PRAYER) [msg]", usr)
|
||||
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""][mind && mind.isholy ? " (blessings: [mind.num_blessed])" : ""]:</font> [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_SC(src,"SC")]) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
|
||||
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""][mind && mind.isholy ? " (blessings: [mind.num_blessed])" : ""]:</font> [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_TP(src,"TP")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) ([ADMIN_SC(src,"SC")]) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
|
||||
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")])):</span> [msg]"
|
||||
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")])):</span> [msg]"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
to_chat(X, msg)
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_SYNDICATE_REPLY(Sender,"RPLY")]):</span> [msg]"
|
||||
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_SYNDICATE_REPLY(Sender,"RPLY")]):</span> [msg]"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
to_chat(X, msg)
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
/proc/HONK_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='boldnotice'><font color=pink>HONK: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;HONKReply=[Sender.UID()]'>RPLY</A>):</span> [msg]"
|
||||
msg = "<span class='boldnotice'><font color=pink>HONK: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;HONKReply=[Sender.UID()]'>RPLY</A>):</span> [msg]"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
to_chat(X, msg)
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='adminnotice'><b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;ErtReply=[Sender.UID()]'>RESPOND</A>):</b> [msg]</span>"
|
||||
msg = "<span class='adminnotice'><b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;ErtReply=[Sender.UID()]'>RESPOND</A>):</b> [msg]</span>"
|
||||
if(repeat_warning)
|
||||
msg += "<BR><span class='adminnotice'><b>WARNING: ERT request has gone 5 minutes with no reply!</b></span>"
|
||||
for(var/client/X in GLOB.admins)
|
||||
@@ -80,7 +80,7 @@
|
||||
/proc/Nuke_request(text , mob/Sender)
|
||||
var/nuke_code = get_nuke_code()
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]):</b> [msg]</span>"
|
||||
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]):</b> [msg]</span>"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
to_chat(X, msg)
|
||||
|
||||
@@ -776,8 +776,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_check_contents(mob/living/M as mob in GLOB.mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Check Contents"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -957,21 +957,24 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
message_admins("[key_name_admin(usr)] reset NTTC scripts.")
|
||||
feedback_add_details("admin_verb","RAT2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/list_ssds()
|
||||
/client/proc/list_ssds_afks()
|
||||
set category = "Admin"
|
||||
set name = "List SSDs"
|
||||
set desc = "Lists SSD players"
|
||||
set name = "List SSDs and AFKs"
|
||||
set desc = "Lists SSD and AFK players"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/msg = "<html><head><title>SSD Report</title></head><body>"
|
||||
/* ======== SSD Section ========= */
|
||||
var/msg = "<html><head><title>SSD & AFK Report</title></head><body>"
|
||||
msg += "SSD Players:<BR><TABLE border='1'>"
|
||||
msg += "<TR><TD><B>Key</B></TD><TD><B>Real Name</B></TD><TD><B>Job</B></TD><TD><B>Mins SSD</B></TD><TD><B>Special Role</B></TD><TD><B>Area</B></TD><TD><B>PPN</B></TD><TD><B>Cryo</B></TD></TR>"
|
||||
var/mins_ssd
|
||||
var/job_string
|
||||
var/key_string
|
||||
var/role_string
|
||||
var/obj_count = 0
|
||||
var/obj_string = ""
|
||||
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
|
||||
if(!isLivingSSD(H))
|
||||
continue
|
||||
@@ -984,8 +987,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(job_string in command_positions)
|
||||
job_string = "<U>" + job_string + "</U>"
|
||||
role_string = "-"
|
||||
var/obj_count = 0
|
||||
var/obj_string = ""
|
||||
if(H.mind)
|
||||
if(H.mind.special_role)
|
||||
role_string = "<U>[H.mind.special_role]</U>"
|
||||
@@ -1003,24 +1004,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
else
|
||||
msg += "<TD><A href='?_src_=holder;cryossd=[H.UID()]'>Cryo</A></TD>"
|
||||
msg += "</TR>"
|
||||
msg += "</TABLE></BODY></HTML>"
|
||||
src << browse(msg, "window=Player_ssd_check")
|
||||
msg += "</TABLE><br></BODY></HTML>"
|
||||
|
||||
/client/proc/list_afks()
|
||||
set category = "Admin"
|
||||
set name = "List AFKs"
|
||||
set desc = "Lists AFK players"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/msg = "<html><head><title>AFK Report</title></head><body>"
|
||||
/* ======== AFK Section ========= */
|
||||
msg += "AFK Players:<BR><TABLE border='1'>"
|
||||
msg += "<TR><TD><B>Key</B></TD><TD><B>Real Name</B></TD><TD><B>Job</B></TD><TD><B>Mins AFK</B></TD><TD><B>Special Role</B></TD><TD><B>Area</B></TD><TD><B>PPN</B></TD><TD><B>Cryo</B></TD></TR>"
|
||||
var/mins_afk
|
||||
var/job_string
|
||||
var/key_string
|
||||
var/role_string
|
||||
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
|
||||
if(H.client == null || H.stat == DEAD) // No clientless or dead
|
||||
continue
|
||||
@@ -1035,8 +1024,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(job_string in command_positions)
|
||||
job_string = "<U>" + job_string + "</U>"
|
||||
role_string = "-"
|
||||
var/obj_count = 0
|
||||
var/obj_string = ""
|
||||
obj_count = 0
|
||||
obj_string = ""
|
||||
if(H.mind)
|
||||
if(H.mind.special_role)
|
||||
role_string = "<U>[H.mind.special_role]</U>"
|
||||
@@ -1055,7 +1044,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
msg += "<TD><A href='?_src_=holder;cryossd=[H.UID()];cryoafk=1'>Cryo</A></TD>"
|
||||
msg += "</TR>"
|
||||
msg += "</TABLE></BODY></HTML>"
|
||||
src << browse(msg, "window=Player_afk_check")
|
||||
src << browse(msg, "window=Player_ssd_afk_check;size=600x300")
|
||||
|
||||
/client/proc/toggle_ert_calling()
|
||||
set category = "Event"
|
||||
|
||||
@@ -95,3 +95,8 @@
|
||||
|
||||
// Has the client been varedited by an admin? [Inherits from datum now]
|
||||
// var/var_edited = FALSE
|
||||
|
||||
var/client_keysend_amount = 0
|
||||
var/next_keysend_reset = 0
|
||||
var/next_keysend_trip_reset = 0
|
||||
var/keysend_tripped = FALSE
|
||||
@@ -163,12 +163,20 @@
|
||||
strip_delay = 100
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/clothing/head/helmet/roman/fake
|
||||
desc = "An ancient helmet made of plastic and leather."
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/roman/legionaire
|
||||
name = "roman legionaire helmet"
|
||||
desc = "An ancient helmet made of bronze and leather. Has a red crest on top of it."
|
||||
icon_state = "roman_c"
|
||||
item_state = "roman_c"
|
||||
|
||||
/obj/item/clothing/head/helmet/roman/legionaire/fake
|
||||
desc = "An ancient helmet made of plastic and leather. Has a red crest on top of it."
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/gladiator
|
||||
name = "gladiator helmet"
|
||||
desc = "Ave, Imperator, morituri te salutant."
|
||||
|
||||
@@ -527,7 +527,7 @@
|
||||
var/shield_on = "shield-old"
|
||||
sprite_sheets = null
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text)
|
||||
/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(current_charges > 0)
|
||||
do_sparks(2, 1, src)
|
||||
owner.visible_message("<span class='danger'>[owner]'s shields deflect [attack_text] in a shower of sparks!</span>")
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
desc = "Someone seperated our Research Director from his own head!"
|
||||
var/tele_range = 6
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
/obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(!active)
|
||||
return 0
|
||||
if(prob(hit_reaction_chance))
|
||||
@@ -331,7 +331,7 @@
|
||||
/obj/item/clothing/suit/armor/reactive/fire
|
||||
name = "reactive incendiary armor"
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/fire/hit_reaction(mob/living/carbon/human/owner, attack_text)
|
||||
/obj/item/clothing/suit/armor/reactive/fire/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(!active)
|
||||
return 0
|
||||
if(prob(hit_reaction_chance))
|
||||
@@ -348,7 +348,7 @@
|
||||
/obj/item/clothing/suit/armor/reactive/stealth
|
||||
name = "reactive stealth armor"
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, attack_text)
|
||||
/obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(!active)
|
||||
return 0
|
||||
if(prob(hit_reaction_chance))
|
||||
@@ -365,7 +365,7 @@
|
||||
/obj/item/clothing/suit/armor/reactive/tesla
|
||||
name = "reactive tesla armor"
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/tesla/hit_reaction(mob/living/carbon/human/owner, attack_text)
|
||||
/obj/item/clothing/suit/armor/reactive/tesla/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(!active)
|
||||
return 0
|
||||
if(prob(hit_reaction_chance))
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
name = "ancient jumpsuit"
|
||||
desc = "A terribly ragged and frayed grey jumpsuit. It looks like it hasn't been washed in over a decade."
|
||||
|
||||
/obj/item/clothing/under/color/grey/glorf/hit_reaction(mob/living/carbon/human/owner)
|
||||
/obj/item/clothing/under/color/grey/glorf/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
owner.forcesay(GLOB.hit_appends)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
. = ..()
|
||||
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50)
|
||||
|
||||
/obj/item/clothing/under/rank/clown/hit_reaction()
|
||||
/obj/item/clothing/under/rank/clown/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(H.mind && H.mind.assigned_role == "Clown")
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
force = 5
|
||||
sharp = 0
|
||||
|
||||
/obj/item/claymore/fluff/hit_reaction()
|
||||
/obj/item/claymore/fluff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
return 0
|
||||
|
||||
/obj/item/fluff/rsik_katana //Xydonus: Rsik Ugsharki Atan
|
||||
|
||||
@@ -269,51 +269,59 @@ Gunshots/explosions/opening doors/less rare audio (done)
|
||||
px = -32
|
||||
|
||||
/obj/effect/hallucination/oh_yeah
|
||||
var/turf/simulated/wall/wall
|
||||
var/obj/effect/hallucination/simple/bubblegum/bubblegum = null
|
||||
var/obj/effect/hallucination/simple/bubblegum/bubblegum
|
||||
var/image/fakebroken
|
||||
var/image/fakerune
|
||||
|
||||
/obj/effect/hallucination/oh_yeah/New(loc, mob/living/carbon/T)
|
||||
/obj/effect/hallucination/oh_yeah/New(loc, mob/living/carbon/C)
|
||||
set waitfor = FALSE
|
||||
..()
|
||||
target = T
|
||||
for(var/turf/simulated/wall/W in range(7,target))
|
||||
target = C
|
||||
var/turf/simulated/wall/wall
|
||||
for(var/turf/simulated/wall/W in range(7, target))
|
||||
wall = W
|
||||
break
|
||||
if(wall)
|
||||
fakebroken = image('icons/turf/floors.dmi', wall, "plating", layer = TURF_LAYER)
|
||||
var/turf/landing = get_turf(target)
|
||||
var/turf/landing_image_turf = get_step(landing, SOUTHWEST) //the icon is 3x3
|
||||
fakerune = image('icons/effects/96x96.dmi', landing_image_turf, "landing", layer = ABOVE_OPEN_TURF_LAYER)
|
||||
fakebroken.override = TRUE
|
||||
if(target.client)
|
||||
target.client.images |= fakebroken
|
||||
target.client.images |= fakerune
|
||||
target.playsound_local(wall,'sound/effects/meteorimpact.ogg', 150, 1)
|
||||
bubblegum = new(wall, target)
|
||||
sleep(10) //ominous wait
|
||||
var/charged = FALSE //only get hit once
|
||||
while(get_turf(bubblegum) != landing && target)
|
||||
bubblegum.forceMove(get_step_towards(bubblegum, landing))
|
||||
bubblegum.setDir(get_dir(bubblegum, landing))
|
||||
target.playsound_local(get_turf(bubblegum), 'sound/effects/meteorimpact.ogg', 150, 1)
|
||||
shake_camera(target, 2, 1)
|
||||
if(bubblegum.Adjacent(target) && !charged)
|
||||
charged = TRUE
|
||||
target.Weaken(4)
|
||||
target.adjustStaminaLoss(40)
|
||||
step_away(target, bubblegum)
|
||||
shake_camera(target, 4, 3)
|
||||
target.visible_message("<span class='warning'>[target] jumps backwards, falling on the ground!</span>","<span class='userdanger'>[bubblegum] slams into you!</span>")
|
||||
sleep(2)
|
||||
sleep(30)
|
||||
qdel(bubblegum)
|
||||
if(!wall)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
fakebroken = image('icons/turf/floors.dmi', wall, "plating", layer = TURF_LAYER)
|
||||
var/turf/landing = get_turf(target)
|
||||
var/turf/landing_image_turf = get_step(landing, SOUTHWEST) //the icon is 3x3
|
||||
fakerune = image('icons/effects/96x96.dmi', landing_image_turf, "landing", layer = ABOVE_OPEN_TURF_LAYER)
|
||||
fakebroken.override = TRUE
|
||||
if(target.client)
|
||||
target.client.images |= fakebroken
|
||||
target.client.images |= fakerune
|
||||
target.playsound_local(wall,'sound/effects/meteorimpact.ogg', 150, 1)
|
||||
bubblegum = new(wall, target)
|
||||
addtimer(CALLBACK(src, .proc/bubble_attack, landing), 10)
|
||||
|
||||
/obj/effect/hallucination/oh_yeah/proc/bubble_attack(turf/landing)
|
||||
var/charged = FALSE //only get hit once
|
||||
while(get_turf(bubblegum) != landing && target && target.stat != DEAD)
|
||||
bubblegum.forceMove(get_step_towards(bubblegum, landing))
|
||||
bubblegum.setDir(get_dir(bubblegum, landing))
|
||||
target.playsound_local(get_turf(bubblegum), 'sound/effects/meteorimpact.ogg', 150, 1)
|
||||
shake_camera(target, 2, 1)
|
||||
if(bubblegum.Adjacent(target) && !charged)
|
||||
charged = TRUE
|
||||
target.Weaken(4)
|
||||
target.adjustStaminaLoss(40)
|
||||
step_away(target, bubblegum)
|
||||
shake_camera(target, 4, 3)
|
||||
target.visible_message("<span class='warning'>[target] jumps backwards, falling on the ground!</span>", "<span class='userdanger'>[bubblegum] slams into you!</span>")
|
||||
sleep(2)
|
||||
sleep(30)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/hallucination/oh_yeah/Destroy()
|
||||
if(target.client)
|
||||
target.client.images.Remove(fakebroken)
|
||||
target.client.images.Remove(fakerune)
|
||||
QDEL_NULL(fakebroken)
|
||||
QDEL_NULL(fakerune)
|
||||
QDEL_NULL(bubblegum)
|
||||
return ..()
|
||||
|
||||
/obj/effect/hallucination/singularity_scare
|
||||
|
||||
@@ -334,14 +334,6 @@
|
||||
icon_state = "britcup"
|
||||
volume = 30
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/mushroom_bowl
|
||||
name = "mushroom bowl"
|
||||
desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point."
|
||||
icon = 'icons/obj/lavaland/ash_flora.dmi'
|
||||
icon_state = "mushroom_bowl"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bag
|
||||
name = "drink bag"
|
||||
desc = "Normally put in wine boxes, or down pants at stadium events."
|
||||
|
||||
@@ -374,6 +374,7 @@
|
||||
seed.genes += disk.gene.Copy()
|
||||
if(istype(disk.gene, /datum/plant_gene/reagent))
|
||||
seed.reagents_from_genes()
|
||||
disk.gene.apply_vars(seed)
|
||||
repaint_seed()
|
||||
|
||||
update_genes()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
icon_dead = "soybean-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
mutatelist = list(/obj/item/seeds/soya/koi)
|
||||
reagents_add = list("soybeanoil" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.05)
|
||||
reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05, "soybeanoil" = 0.03)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/soybeans
|
||||
seed = /obj/item/seeds/soya
|
||||
@@ -25,7 +25,7 @@
|
||||
icon_state = "soybeans"
|
||||
filling_color = "#F0E68C"
|
||||
bitesize_mod = 2
|
||||
tastes = list("soybean" = 1)
|
||||
tastes = list("soy" = 1)
|
||||
wine_power = 0.2
|
||||
|
||||
// Koibean
|
||||
|
||||
@@ -46,8 +46,8 @@
|
||||
desc = "Taste so good, you could die!"
|
||||
icon_state = "poisonberrypile"
|
||||
filling_color = "#C71585"
|
||||
distill_reagent = null
|
||||
tastes = list("poison-berry" = 1)
|
||||
distill_reagent = null
|
||||
wine_power = 0.35
|
||||
|
||||
// Death Berries
|
||||
@@ -70,8 +70,8 @@
|
||||
desc = "Taste so good, you could die!"
|
||||
icon_state = "deathberrypile"
|
||||
filling_color = "#708090"
|
||||
distill_reagent = null
|
||||
tastes = list("death-berry" = 1)
|
||||
distill_reagent = null
|
||||
wine_power = 0.5
|
||||
|
||||
// Glow Berries
|
||||
@@ -130,8 +130,8 @@
|
||||
gender = PLURAL
|
||||
filling_color = "#FF0000"
|
||||
bitesize_mod = 2
|
||||
wine_power = 0.3
|
||||
tastes = list("cherry" = 1)
|
||||
wine_power = 0.3
|
||||
|
||||
// Blue Cherries
|
||||
/obj/item/seeds/cherry/blue
|
||||
@@ -152,8 +152,8 @@
|
||||
icon_state = "bluecherry"
|
||||
filling_color = "#6495ED"
|
||||
bitesize_mod = 2
|
||||
wine_power = 0.5
|
||||
tastes = list("blue cherry" = 1)
|
||||
wine_power = 0.5
|
||||
|
||||
// Grapes
|
||||
/obj/item/seeds/grape
|
||||
@@ -184,8 +184,8 @@
|
||||
dried_type = /obj/item/reagent_containers/food/snacks/no_raisin
|
||||
filling_color = "#FF1493"
|
||||
bitesize_mod = 2
|
||||
distill_reagent = "wine"
|
||||
tastes = list("grapes" = 1)
|
||||
distill_reagent = "wine"
|
||||
|
||||
// Green Grapes
|
||||
/obj/item/seeds/grape/green
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
filling_color = "#0000CD"
|
||||
bitesize_mod = 2
|
||||
origin_tech = "biotech=4"
|
||||
tastes = list("chilli" = 1)
|
||||
tastes = list("chilly" = 1)
|
||||
wine_power = 0.3
|
||||
|
||||
// Ghost Chili
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
icon_state = "lime"
|
||||
filling_color = "#00FF00"
|
||||
tastes = list("lime" = 1)
|
||||
distill_reagent = "triple_sec"
|
||||
|
||||
// Orange
|
||||
/obj/item/seeds/orange
|
||||
@@ -59,6 +58,7 @@
|
||||
icon_state = "orange"
|
||||
tastes = list("orange" = 1)
|
||||
filling_color = "#FFA500"
|
||||
distill_reagent = "triple_sec"
|
||||
|
||||
// Lemon
|
||||
/obj/item/seeds/lemon
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
/obj/item/grown/snapcorn
|
||||
seed = /obj/item/seeds/corn/snapcorn
|
||||
name = "snap corn"
|
||||
desc = "A cob with snap pops"
|
||||
desc = "A cob with snap pops."
|
||||
icon_state = "snapcorn"
|
||||
item_state = "corncob"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
@@ -27,9 +27,11 @@
|
||||
|
||||
// Egg-Plant
|
||||
/obj/item/seeds/eggplant/eggy
|
||||
name = "pack of egg-plant seeds"
|
||||
desc = "These seeds grow to produce berries that look a lot like eggs."
|
||||
icon_state = "seed-eggy"
|
||||
species = "eggy"
|
||||
plantname = "Egg-Plants"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/shell/eggy
|
||||
lifespan = 75
|
||||
production = 12
|
||||
|
||||
@@ -138,6 +138,8 @@
|
||||
icon_state = "seed-moonflower"
|
||||
species = "moonflower"
|
||||
plantname = "Moonflowers"
|
||||
icon_grow = "moonflower-grow"
|
||||
icon_dead = "sunflower-dead"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/moonflower
|
||||
mutatelist = list()
|
||||
reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "plantmatter" = 0.02)
|
||||
@@ -152,7 +154,7 @@
|
||||
filling_color = "#E6E6FA"
|
||||
bitesize_mod = 2
|
||||
tastes = list("moonflower" = 1)
|
||||
distill_reagent = "absinthe"
|
||||
distill_reagent = "absinthe" //It's made from flowers.
|
||||
|
||||
// Novaflower
|
||||
/obj/item/seeds/sunflower/novaflower
|
||||
@@ -161,6 +163,8 @@
|
||||
icon_state = "seed-novaflower"
|
||||
species = "novaflower"
|
||||
plantname = "Novaflowers"
|
||||
icon_grow = "novaflower-grow"
|
||||
icon_dead = "sunflower-dead"
|
||||
product = /obj/item/grown/novaflower
|
||||
mutatelist = list()
|
||||
reagents_add = list("condensedcapsaicin" = 0.25, "capsaicin" = 0.3, "plantmatter" = 0)
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/obj/item/seeds/garlic
|
||||
name = "pack of garlic seeds"
|
||||
desc = "A packet of extremely pungent seeds."
|
||||
icon_state = "seed-garlic"
|
||||
species = "garlic"
|
||||
plantname = "Garlic Sprouts"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/garlic
|
||||
yield = 6
|
||||
potency = 25
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
reagents_add = list("garlic" = 0.15, "plantmatter" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/garlic
|
||||
seed = /obj/item/seeds/garlic
|
||||
name = "garlic"
|
||||
desc = "Delicious, but with a potentially overwhelming odor."
|
||||
icon_state = "garlic"
|
||||
filling_color = "#C0C9A0"
|
||||
bitesize_mod = 2
|
||||
tastes = list("garlic" = 1)
|
||||
wine_power = 0.1
|
||||
@@ -38,17 +38,8 @@
|
||||
continue
|
||||
grassAmt += 1 + round(G.seed.potency * tile_coefficient)
|
||||
qdel(G)
|
||||
var/obj/item/stack/tile/GT = new stacktype(user.loc)
|
||||
while(grassAmt > GT.max_amount)
|
||||
GT.amount = GT.max_amount
|
||||
grassAmt -= GT.max_amount
|
||||
GT = new stacktype(user.loc)
|
||||
GT.amount = grassAmt
|
||||
for(var/obj/item/stack/tile/T in user.loc)
|
||||
if((T.type == stacktype) && (T.amount < T.max_amount) && (T != GT))
|
||||
T.attackby(GT, user)
|
||||
new stacktype(user.drop_location(), grassAmt)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
// Carpet
|
||||
/obj/item/seeds/grass/carpet
|
||||
|
||||
@@ -14,6 +14,13 @@
|
||||
mutatelist = list(/obj/item/seeds/watermelon/holy)
|
||||
reagents_add = list("water" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.2)
|
||||
|
||||
/obj/item/seeds/watermelon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is swallowing [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
user.gib()
|
||||
new product(drop_location())
|
||||
qdel(src)
|
||||
return OBLITERATION
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/watermelon
|
||||
seed = /obj/item/seeds/watermelon
|
||||
name = "watermelon"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user