mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into announcements
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#CONTRIBUTING
|
||||
|
||||
|
||||
##Introduction
|
||||
|
||||
Hello and welcome to /tg/station's contributing page. You are here because you are curious or interested in contributing. Thanks for being interested. Everyone is free to contribute to this project as long as they follow the simple guidelines and specifications below, because at /tg/station, we have a goal to increase code maintainability and to do that we are going to need all pull requests to hold up to those specifications. This is in order for all of us to benefit, instead of having to fix the same bug more than once because of duplicated code.
|
||||
|
||||
But first we want to make it clear how you can contribute, if contributing is a new experience for you, and what powers the team has over your pull request so you do not get any surprises when submitting pull requests, and it is closed for a reason you did not anticipate.
|
||||
|
||||
##Getting Started
|
||||
|
||||
At /tg/station we do not have a list of goals and features to add, we instead allow freedom for contributors to suggest and create their ideas for the game. That does not mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful getting started guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure.
|
||||
|
||||
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/index.php/Guides#Development_and_Contribution_Guides) which will help you get started contributing to /tg/station with git and Dream Maker. For beginners, it is recommended you work on small projects, at first. There is an easy list of issues which are [contributor friendly, here](https://github.com/tgstation/-tg-station/issues?labels=Contributor+Friendly&page=1&state=open).
|
||||
|
||||
You can of course, as always, ask for help at [#coderbus](irc://irc.rizon.net/coderbus) on irc.rizon.net. We are just here to have fun and help so do not expect professional support please.
|
||||
|
||||
##Meet the Team
|
||||
|
||||
**Project Leads**
|
||||
|
||||
Project Leads, which are elected by the maintainers and members of the project, have complete control over what goes through and what is reverted. They are encouraged to take control in what features are added to the game. Project Leads can also act as Project Managers when needed.
|
||||
|
||||
**Project Managers**
|
||||
|
||||
Project Managers are responsible for recruiting and firing maintainers, enforcing coding standards, and reverting changes that should have not been committed. Project Managers are assigned by Project Leads. On things that Project Managers disagree on they are to refer to the Project Leads for advice. It is encouraged that if you do not want to waste time working on a feature, that might be denied, that you ask a Project Manager first.
|
||||
|
||||
**Maintainers**
|
||||
|
||||
Maintainers are quality control. If a proposed pull request does not meet the mentioned quality specifications then it can be closed if you fail to satisfy them. Maintainers are required to give a reason for closing the pull request.
|
||||
|
||||
Maintainers can revert your changes if they feel they are not worth maintaining or if they did not live up to the quality specifications.
|
||||
|
||||
##Specification
|
||||
|
||||
As mentioned before, you are expected to follow these specifications in order to make everyone's lives easier, it will also save you and us time, with having to make the changes and us having to tell you what to change. Thank you for reading this section.
|
||||
|
||||
* As BYOND's Dream Maker is an object oriented language, code must be object oriented when possible in order to be more flexible when adding content to it. If you are unfamiliar with this concept, it is highly recommended you look it up.
|
||||
|
||||
* You must write BYOND code with absolute pathing, like so:
|
||||
|
||||
```C++
|
||||
|
||||
/obj/item/weapon/baseball_bat
|
||||
name = "baseball bat"
|
||||
desc = "A baseball bat."
|
||||
var/wooden = 1
|
||||
|
||||
/obj/item/weapon/baseball_bat/examine()
|
||||
if(wooden)
|
||||
desc = "A wooden baseball bat."
|
||||
else
|
||||
desc = "A metal baseball bat."
|
||||
..()
|
||||
|
||||
```
|
||||
|
||||
* You must not use colons to override safety checks on an object's variable/function, instead of using proper type casting.
|
||||
|
||||
* It is rarely allowed to put type paths in a text format, as they is no compile errors if the type path no longer exists. Here is an example:
|
||||
|
||||
```C++
|
||||
//Good
|
||||
var/path_type = /obj/item/weapon/baseball_bat
|
||||
|
||||
//Bad
|
||||
var/path_type = "/obj/item/weapon/baseball_bat"
|
||||
```
|
||||
|
||||
* You must use tabs to indent your code, NOT SPACES.
|
||||
|
||||
* Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is no other option. You can avoid hacky code by using object oriented methodologies, such as overriding a function (called procs in DM) or sectioning code into functions and then overriding them as required.
|
||||
|
||||
* Duplicated code is 99% of the time never allowed. Copying code from one place to another maybe suitable for small short time projects but /tg/station focuses on the long term and thus discourages this. Instead you can use object orientation, or simply placing repeated code in a function, to obey this specification easily.
|
||||
|
||||
* Code should be modular where possible, if you are working on a new class then it is best if you put it in a new file.
|
||||
|
||||
* Bloated code may be necessary to add a certain feature, which means there has to be a judgement over whether the feature is worth having or not. You can help make this decision easier by making sure your code is modular.
|
||||
|
||||
* You are expected to help maintain the code that you add, meaning if there is a problem then you are likely to be approached in order to fix any issues, runtimes or bugs.
|
||||
|
||||
##Pull Request Process
|
||||
|
||||
There is no strict process when it comes to merging pull requests, pull requests will sometimes take a while before they are looked at by a maintainer, the bigger the change the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be nice. Here are some helpful ways to make it easier for you and for the maintainer when making a pull request.
|
||||
|
||||
* You are going to be expected to document all your changes in the pull request, failing to do so will mean delaying it as we will have to question why you made the change. On the other hand you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data.
|
||||
|
||||
* If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable.
|
||||
|
||||
* If your pull request is accepted, the code you add is no longer exclusively yours but everyones, everyone is free to work on it but you are also free to object to any changes being made, which will be noted by a Project Lead or Project Manager. It is a shame this has to be explicitly told but there have been cases where this would've saved some trouble.
|
||||
@@ -98,81 +98,8 @@ Instructions for bot setup are included in the /bot folder along with the script
|
||||
itself
|
||||
|
||||
#CONTRIBUTING
|
||||
Everyone is free to contribute to this project as long as they follow these simple guidelines and specifications.
|
||||
|
||||
**Introduction**
|
||||
|
||||
As a goal to increase code maintainability we are going to be requiring all pull requests to hold up to the standards mentioned below. This is in order for all of us to benefit, instead of having to fix the same bug more than once because of duplicated code.
|
||||
|
||||
But first we want to make it clear over what powers the maintainers have over your pull request, so you do not get any surprises when submitting pull requests and it is closed for a reason you did not suspect.
|
||||
|
||||
**Project Leads**
|
||||
|
||||
Project Leads, which are elected by the maintainers and members of the project, have complete control over what goes through and what is reverted. They are encouraged to take control in what features are added to the game. Project Leads can also act as Project Managers when needed.
|
||||
|
||||
**Project Managers**
|
||||
|
||||
Project Managers are responsible for recruiting and firing maintainers, enforcing coding standards, and reverting changes that should have not been committed. Project Managers are assigned by Project Leads. On things that Project Managers disagree on they are to refer to the Project Leads for advice. It is encouraged that if you do not want to waste time working on a feature, that might be denied, that you ask a Project Manager first.
|
||||
|
||||
**Maintainers**
|
||||
|
||||
Maintainers are quality control. If a proposed pull request does not meet the mentioned quality specifications then it can be closed if you fail to satisfy them. Maintainers are required to give a reason for closing the pull request.
|
||||
|
||||
Maintainers can revert your changes if they feel they are not worth maintaining or if they did not live up to the quality specifications.
|
||||
|
||||
**Specification**
|
||||
|
||||
As BYOND's Dream Maker is an object oriented language, code must be object oriented when possible in order to be more flexible when adding content to it.
|
||||
|
||||
You must write BYOND code with absolute pathing, like so:
|
||||
|
||||
```C++
|
||||
|
||||
/obj/item/weapon/baseball_bat
|
||||
name = "baseball bat"
|
||||
desc = "A baseball bat."
|
||||
var/wooden = 1
|
||||
|
||||
/obj/item/weapon/baseball_bat/examine()
|
||||
if(wooden)
|
||||
desc = "A wooden baseball bat."
|
||||
else
|
||||
desc = "A metal baseball bat."
|
||||
..()
|
||||
|
||||
```
|
||||
|
||||
You must not use colons to override safety checks on an object's variable/function, instead of using proper type casting.
|
||||
|
||||
It is rarely allowed to put type paths in a text format, as they is no compile errors if the type path no longer exists.
|
||||
|
||||
You must use tabs to indent your code.
|
||||
|
||||
Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is no other option. You can avoid hacky code by using object oriented methodologies, such as overriding a function (called procs in DM) or sectioning code into functions and then overriding them as required.
|
||||
|
||||
Duplicated code is 99% of the time never allowed. Copying code from one place to another maybe suitable for small short time projects but /tg/station focuses on the long term and thus discourages this. Instead you can use object orientation, or simply placing repeated code in a function, to obey this specification easily.
|
||||
|
||||
Code should be modular where possible, if you are working on a new class then it is best if you put it in a new file.
|
||||
|
||||
Bloated code may be necessary to add a certain feature, which means there has to be a judgement over whether the feature is worth having or not. You can help make this decision easier by making sure your code is modular.
|
||||
|
||||
You are expected to help maintain the code that you add, meaning if there is a problem then you are likely to be approached in order to fix any issues, runtimes or bugs.
|
||||
|
||||
**Other Requirements/Information**
|
||||
|
||||
Pull requests will sometimes take a while before they are looked at by a maintainer, the bigger the change the more time it will take before they are accepted into the code.
|
||||
|
||||
You are expected to document all your changes in the pull request, failing to do so will risk delaying it. On the other hand you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data.
|
||||
|
||||
If you are proposing multiple changes, which change many different aspects of the code, you are to section them off into different pull requests in order to easily review them and to deny/accept the changes that are deemed acceptable.
|
||||
|
||||
If your pull request is accepted, the code you add is no longer yours but everyones, everyone is free to work on it but you are also free to object to any changes being made, which will be noted by a Project Lead.
|
||||
|
||||
**Getting Started**
|
||||
|
||||
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/index.php/Guides#Development_and_Contribution_Guides) which will help you get started contributing to /tg/station with git and Dream Maker.
|
||||
|
||||
For beginners, it is recommended you work on small projects, at first. There is an easy list of issues which are [contributor friendly, here](https://github.com/tgstation/-tg-station/issues?labels=Contributor+Friendly&page=1&state=open).
|
||||
Please see [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
|
||||
#LICENSE
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
"adK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall,/area/medical/research{name = "Research Division"})
|
||||
"adL" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
|
||||
"adM" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
|
||||
"adN" = (/obj/machinery/mineral/equipment_locker,/turf/simulated/floor{icon_state = "browncorner"; dir = 8},/area/quartermaster/storage)
|
||||
"adN" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor{icon_state = "browncorner"; dir = 8},/area/quartermaster/storage)
|
||||
"adO" = (/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor,/area/quartermaster/storage)
|
||||
"adP" = (/obj/effect/landmark/start{name = "Cargo Tech"},/turf/simulated/floor,/area/quartermaster/storage)
|
||||
"adQ" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/quartermaster/storage)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2493,7 +2493,7 @@
|
||||
"aVW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/port)
|
||||
"aVX" = (/obj/machinery/power/apc{dir = 1; name = "Port Emergency Storage APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2)
|
||||
"aVY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/port)
|
||||
"aVZ" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/shoes/rainbow,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/clothing/under/rainbow,/obj/item/clothing/head/soft/rainbow,/turf/simulated/floor/plating,/area/maintenance/port)
|
||||
"aVZ" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/shoes/sneakers/rainbow,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/clothing/under/rainbow,/obj/item/clothing/head/soft/rainbow,/turf/simulated/floor/plating,/area/maintenance/port)
|
||||
"aWa" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/storage/tools)
|
||||
"aWb" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/tools)
|
||||
"aWc" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/item/device/multitool,/turf/simulated/floor,/area/storage/tools)
|
||||
@@ -2873,7 +2873,7 @@
|
||||
"bdm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
|
||||
"bdn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room)
|
||||
"bdo" = (/obj/structure/table,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
|
||||
"bdp" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bdp" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bdq" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/turf/simulated/floor,/area/hallway/primary/aft)
|
||||
"bdr" = (/turf/simulated/wall,/area/engine/gravity_generator)
|
||||
"bds" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/engine/gravity_generator)
|
||||
@@ -2955,8 +2955,8 @@
|
||||
"beQ" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/wood,/area/crew_quarters/captain)
|
||||
"beR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
|
||||
"beS" = (/obj/structure/table/woodentable,/obj/item/weapon/pinpointer,/obj/item/weapon/disk/nuclear,/obj/item/weapon/storage/secure/safe{pixel_x = 35; pixel_y = 5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain)
|
||||
"beT" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central)
|
||||
"beU" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"beT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/central)
|
||||
"beU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"beV" = (/turf/simulated/wall,/area/medical/chemistry)
|
||||
"beW" = (/obj/structure/sign/bluecross_2,/turf/simulated/wall,/area/medical/medbay)
|
||||
"beX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/medbay)
|
||||
@@ -3414,7 +3414,7 @@
|
||||
"bnH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/engine/gravity_generator)
|
||||
"bnI" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
|
||||
"bnJ" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; icon_state = "intact-r-f"; level = 1; name = "pipe"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"bnK" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/hallway/primary/central)
|
||||
"bnK" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/central)
|
||||
"bnL" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/captain)
|
||||
"bnM" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
|
||||
"bnN" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
|
||||
@@ -4113,7 +4113,7 @@
|
||||
"bBe" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bBf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bBg" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bBh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bBh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/hallway/primary/central)
|
||||
"bBi" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"bBj" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
|
||||
"bBk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/central)
|
||||
@@ -4181,9 +4181,9 @@
|
||||
"bCu" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
|
||||
"bCv" = (/turf/simulated/wall,/area/maintenance/aft)
|
||||
"bCw" = (/turf/simulated/wall,/area/storage/tech)
|
||||
"bCx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/central)
|
||||
"bCx" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/paper/range,/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/toxins/misc_lab)
|
||||
"bCy" = (/obj/structure/table,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bCz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/central)
|
||||
"bCz" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser/practice,/obj/item/clothing/ears/earmuffs,/turf/simulated/floor,/area/toxins/misc_lab)
|
||||
"bCA" = (/turf/simulated/wall,/area/janitor)
|
||||
"bCB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/janitor)
|
||||
"bCC" = (/obj/machinery/door/airlock{name = "Custodial Closet"; req_access_txt = "26"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/janitor)
|
||||
@@ -5306,7 +5306,6 @@
|
||||
"bYb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/toxins/misc_lab)
|
||||
"bYc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab)
|
||||
"bYd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/misc_lab)
|
||||
"bYe" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/gun/energy/laser/practice,/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/toxins/misc_lab)
|
||||
"bYf" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab)
|
||||
"bYg" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 8; icon_state = "rightsecure"; name = "Armory Desk"; req_access_txt = "3"},/obj/machinery/door/window/eastleft{name = "Reception Desk"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/ai_monitored/security/armory)
|
||||
"bYh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/toxins/misc_lab)
|
||||
@@ -5365,7 +5364,7 @@
|
||||
"bZi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/misc_lab)
|
||||
"bZj" = (/obj/machinery/door/airlock/glass_research{name = "Firing Range"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/toxins/misc_lab)
|
||||
"bZk" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/toxins/misc_lab)
|
||||
"bZl" = (/obj/structure/closet/crate,/obj/item/clothing/under/lightpurple,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||
"bZl" = (/obj/structure/closet/crate,/obj/item/clothing/under/color/lightpurple,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||
"bZm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
|
||||
"bZn" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
|
||||
"bZo" = (/obj/machinery/atmospherics/binary/pump{dir = 4; icon_state = "intact_on"; on = 1},/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 24; pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/incinerator)
|
||||
@@ -5418,7 +5417,6 @@
|
||||
"caj" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/misc_lab)
|
||||
"cak" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab)
|
||||
"cal" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/toxins/misc_lab)
|
||||
"cam" = (/obj/structure/rack,/turf/simulated/floor,/area/toxins/misc_lab)
|
||||
"can" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||
"cao" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/incinerator)
|
||||
"cap" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space)
|
||||
@@ -7100,14 +7098,14 @@
|
||||
"cGB" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
|
||||
"cGC" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/wizard_station)
|
||||
"cGD" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
|
||||
"cGE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cGE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cGF" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cGG" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
|
||||
"cGH" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
|
||||
"cGI" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome)
|
||||
"cGJ" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome)
|
||||
"cGK" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
|
||||
"cGL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cGL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cGM" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cGN" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cGO" = (/obj/structure/table,/obj/item/device/sbeacondrop/bomb,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
|
||||
@@ -7169,12 +7167,12 @@
|
||||
"cHS" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
|
||||
"cHT" = (/obj/effect/decal/cleanable/blood,/mob/living/carbon/monkey,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
|
||||
"cHU" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
|
||||
"cHV" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cHV" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cHW" = (/turf/unsimulated/wall,/area/tdome/tdomeadmin)
|
||||
"cHX" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/tdome/tdomeadmin)
|
||||
"cHY" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/tdome/tdomeadmin)
|
||||
"cHZ" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/tdome/tdomeadmin)
|
||||
"cIa" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cIa" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
|
||||
"cIb" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
|
||||
"cIc" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
|
||||
"cId" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
|
||||
@@ -8616,7 +8614,7 @@
|
||||
"djJ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djM" = (/obj/machinery/mineral/equipment_locker,/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djM" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djN" = (/obj/machinery/camera{c_tag = "Storage Room"; dir = 1; network = list("MINE")},/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djO" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor,/area/mine/living_quarters)
|
||||
"djP" = (/turf/simulated/wall,/area/mine/production)
|
||||
@@ -8812,7 +8810,7 @@
|
||||
"dnx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/mine/production)
|
||||
"dny" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/mine/production)
|
||||
"dnz" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/mine/production)
|
||||
"dnA" = (/obj/machinery/mineral/equipment_locker,/turf/simulated/floor,/area/mine/production)
|
||||
"dnA" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor,/area/mine/production)
|
||||
"dnB" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor,/area/mine/production)
|
||||
"dnC" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/mine/production)
|
||||
"dnD" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/mine/production)
|
||||
@@ -9256,10 +9254,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaWXatwaWXawNawNaSOaWYaWZaXaaXaaXaaXaaXbaXcaSMaXdaXeaXfaXgaXhaXhaXhaXiaXhaXjaXkaXlaXmaXnaXnaXoaQtaXpaXqaXraXsaXtaXuaXvaXvaXwaXxaXyaXzaXAaXBaXBaXBaXCaPeaIuaIuaXDaXEaXFaXGaXHaXIaPiaXJaXKaXLaXMaPibqwbqwbqwauCbqwbapbqwaPiaXPaXLaXQaXRaPiaXSaXHaXTaXUaXEaXVaIuaIuaSbaKcaXWaTAaKcaKcaKcaTAaKcaQUaKcaLJaLJaKcaKcaXXaXYaXZaSkaSkaSkaYaaYbaYcaINaYdaYeaRhaYfaYfaYgaYeaYhaIRaYiaYjaYkaYlaOraOraOraOraYmaOraOraOraWRaWSaRpaRpaRpaRpaRpaRpaRpaWTaWUaWVaOFaOFaYnaOFaYoaNsaaaaafaafaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaYpaYqaVzaxZawNaYraWZaYsaXaaXaaXaaXaaYsaWZaSMaYtaYuaXfaXgaYvaYwaYxaYyaXhaYzaYAaYBaORaYCaYDaYEaQnaORaYFaYGaYHaYHaYHaYHaYIaYHaYHaYJaYKaYKaYKaYLaYKaYMaYNaYOaYOaYPaYQaYQaYQaYQaYQaYQaYRaYSaYRaYQbqwaYVbkMbkMbrIbambkMaYVbqwaYWaYWaYXaYYaYWaYWaYWaYWaYWaYWaYZaYOaYOaIIaZaaZbaZcaZdaKcaKcaKcaZeaZfaZgaKcaZhaZiaZjaINaINaINaZkaZlaZlaZlaINaINaINaZmaRhaRhaZnaZoaZpaZqaNfaIRaZraYjaZsaDOaZtaZuaZvaVhaZwaZuaZxaVhaZyaDVaZzaFXaZAaRpaRpaZAaFXaZBaDVaZCaZDaZEaSEaOFaOGaZFaMnaMnaOIaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcaUcawLaZGaOLaZHaSOaZIaZIaZIaWZaZJaZIaZKaZIaSMaZLaZMaZNaZOaZPaZPaZQaZRaZPaZSaYAaZTaORaYCaYDaYEaQnaORaZUaYGaYHaZVaZWaZWaZWaZXaYHaZYaZZbaababaYNaYNaYNaYNaIubacbadaYQbaebafbagbahbaibajbakbalbqwaYTbkMbkMbnIaXObnIbkMbkMasrbqwbaqbarbasbatbaubavbawbaxaYWaXVaIuaIuaIIaIIaIIaIIaIIbayaSbbaybazbaAaIIaIIaIIaIIaIIbaBbaCbaCbaCbaCbaCbaCbaDbaCbaBaNfbaEbaEbaFaYkaYkaYkaYkbaBaZrbaGaZsaDOaDOaDOaDOaDObaHaDOaDOaDOaDOaDVbaIbaJbaKbaKbaKbaKbaLaDVaDVbaMaOFbaNaSEaOFaOFaSGaPXaPXaSGaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqfaqfaSHaSIaSIaSIaSIaSIaSIaSJaqfaqfarkbaOaHLbaPaSMaSMaSMaSMaSMaSMaSMaSMaSMbaQaVWbaRaXgaYvbaSaYybaTaXhbaUbaVbaWaORaYCaYDaYEaQnaORaZUaYGaYHaZWbaXbaXaZWbaXaYHaZYbaYbaZbaZbbabbbbbcaYNbbdbbeaXDbcxbbgbbhbbibbjbbjbbibbkbblbqwbcpbkMbkMbnIbaobnIbkMbkMbczbqwbbtbaxbbubbvbbwbbxbaxbbyaYWaXVbbzaIubbAbbBaYkaYkaYkaYkaYkaYkaYkaYkbbCaYkaYkaYkaYkbbDaYkaYkaYkaYkaYkaYkaYkaYkbbBaYkaYkaYkaYkaYkaYkaYkaYkbbEbbFbbGbbHbbHbbHbbHbbHbbIbbJbbKbbHbbLbbHbbHbbMbbHbbHbbHbbHbbHbbHbbNbbObbPbbQbbRbbSaPVbbTbbUaMnaMnbbVaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavJavNavMavMavMavMavMavMavMavMavNavMbbWawNawNbbXbbYbbZbbZbbZbbZbbZbcabcbaOObccbbYbcdaXgaXhaXhbcebcfaXhaORaORbcgaORaYCaYDbchbciaORaZUaYGaYHaZWbcjaZWbaXbckaYHaZYbclbaZbaZbaZbcmbcnaYNbcobbeaXDbbpbcqbcrbcsbctbcubcvbbkbcwbqwbbnbnIbkMbmiaYUbmibkMbnIbbfbqwbcAbcBbbubbvbcCbbxbaxbaxaYWbcDaIuaIubbAbbBaYkaYkaYkaYkaYkaYkaYkaYkbcEaYkaYkaYkaYkaYkaYkbcFbbHbbHbbHbbHbbHbbHbcGbbHbbHbbHbbHbbHbbHbbHbcHbcIbcJbcKaWNaWNaWNaWNaWNaWMaWNaWNaWNaWNaWNaWNaWNaWNaWNaWNaWNaWNbcLbcMbcNbcObcObcPaOFaOFaOFbcQaPXaPXbcQaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafawLawMawNawMawOawNawNawPawMawNawMawOawNawNawNbcRbcSbcRbcRbcRbcRbcRbcTaOOaOOaOObcTaXfaXgaYvbcUbcVbcWaXhbcXbcYbcZaORaORaORaOObbXaOOaZUaYGaYHbdaaZWbaXbdbbdcaYHaZYaYNbddbaZbaZbdebdfbdgbdhbbeaXDbuqbdjbcrbcsbdkbdlbcvbdmbdnbnGbupbuobkMbtfbunbkLbkMbrKbtbbrHbdubdvbdwbdxbdxbdybdzbdAaYWbdBbdCaIubbAbbBaYkaYkbdDaYkbdEbdFbdFbdFbdGbdFbdFbdFbdHaYkaYkaYkaYkaYkaYkbdIbdJbdKbbBaYkaYkaYkaYkaYkbdLbdMbdNbdObdPaYkaYkaYkaYkaYkbdQbdRaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkbdSbdTbdUbdVbdWaOFaOFaOGbdXaMnaMnaOIaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarkavJbdYavJaxZawNawNayaavJbdZavJaybbeabebbebbcRbecbedbeebefbegbcRbehbeibejbejbekbelbembenbenbeobepbenbeqbeqberbeqbesaUoaUoaUoaUobetbeubevbewbexbexbeybezbevbeAbeBbeCbaZbaZbeDbeEbeFbeGbbeaXDaYQbaibeHbbibbibeIbbibbkbeJaYQbqybqwbapbqwbqwbqwbqAbqwbhzaYWbeNbeObePbeQbaxbeRbaxbeSaYWbeTbeUbeUbeVbeVbeVbeVbeVbeVbeVbeWbeXbeYbeZbfabfabeWbfbbfbbfbbfbbfbbfcbfcbfcbfdbfcbfcbfcbfcbfeaYkbdQbffbfgbfhbfibfjaYkaYkbfkbfkbflbflbflbflbflbfmbfnbfnbfnbfnaYkbfnbfobfnbfnbfpbfqbfqbfqbfqbfrbfsbftbfuaNsaafaaaaafaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqfaqfaSHaSIaSIaSIaSIaSIaSIaSJaqfaqfarkbaOaHLbaPaSMaSMaSMaSMaSMaSMaSMaSMaSMbaQaVWbaRaXgaYvbaSaYybaTaXhbaUbaVbaWaORaYCaYDaYEaQnaORaZUaYGaYHaZWbaXbaXaZWbaXaYHaZYbaYbaZbaZbbabbbbbcaYNbbdbbeaXDbcxbbgbbhbbibbjbbjbbibbkbblbqwbcpbkMbkMbnIbaobnIbkMbkMbczbqwbbtbaxbbubbvbbwbbxbaxbbyaYWaXVbbzaIubdpbbBaYkaYkaYkaYkaYkaYkaYkaYkbbCaYkaYkaYkaYkbbDaYkaYkaYkaYkaYkaYkaYkaYkbbBaYkaYkaYkaYkaYkaYkaYkaYkbbEbbFbbGbbHbbHbbHbbHbbHbbIbbJbbKbbHbbLbbHbbHbbMbbHbbHbbHbbHbbHbbHbbNbbObbPbbQbbRbbSaPVbbTbbUaMnaMnbbVaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavJavNavMavMavMavMavMavMavMavMavNavMbbWawNawNbbXbbYbbZbbZbbZbbZbbZbcabcbaOObccbbYbcdaXgaXhaXhbcebcfaXhaORaORbcgaORaYCaYDbchbciaORaZUaYGaYHaZWbcjaZWbaXbckaYHaZYbclbaZbaZbaZbcmbcnaYNbcobbeaXDbbpbcqbcrbcsbctbcubcvbbkbcwbqwbbnbnIbkMbmiaYUbmibkMbnIbbfbqwbcAbcBbbubbvbcCbbxbaxbaxaYWbcDaIuaIubdpbbBaYkaYkaYkaYkaYkaYkaYkaYkbcEaYkaYkaYkaYkaYkaYkbcFbbHbbHbbHbbHbbHbbHbcGbbHbbHbbHbbHbbHbbHbbHbcHbcIbcJbcKaWNaWNaWNaWNaWNaWMaWNaWNaWNaWNaWNaWNaWNaWNaWNaWNaWNaWNbcLbcMbcNbcObcObcPaOFaOFaOFbcQaPXaPXbcQaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafawLawMawNawMawOawNawNawPawMawNawMawOawNawNawNbcRbcSbcRbcRbcRbcRbcRbcTaOOaOOaOObcTaXfaXgaYvbcUbcVbcWaXhbcXbcYbcZaORaORaORaOObbXaOOaZUaYGaYHbdaaZWbaXbdbbdcaYHaZYaYNbddbaZbaZbdebdfbdgbdhbbeaXDbuqbdjbcrbcsbdkbdlbcvbdmbdnbnGbupbuobkMbtfbunbkLbkMbrKbtbbrHbdubdvbdwbdxbdxbdybdzbdAaYWbdBbdCaIubdpbbBaYkaYkbdDaYkbdEbdFbdFbdFbdGbdFbdFbdFbdHaYkaYkaYkaYkaYkaYkbdIbdJbdKbbBaYkaYkaYkaYkaYkbdLbdMbdNbdObdPaYkaYkaYkaYkaYkbdQbdRaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkaYkbdSbdTbdUbdVbdWaOFaOFaOGbdXaMnaMnaOIaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarkavJbdYavJaxZawNawNayaavJbdZavJaybbeabebbebbcRbecbedbeebefbegbcRbehbeibejbejbekbelbembenbenbeobepbenbeqbeqberbeqbesaUoaUoaUoaUobetbeubevbewbexbexbeybezbevbeAbeBbeCbaZbaZbeDbeEbeFbeGbbeaXDaYQbaibeHbbibbibeIbbibbkbeJaYQbqybqwbapbqwbqwbqwbqAbqwbhzaYWbeNbeObePbeQbaxbeRbaxbeSaYWaXVaIuaIubeVbeVbeVbeVbeVbeVbeVbeWbeXbeYbeZbfabfabeWbfbbfbbfbbfbbfbbfcbfcbfcbfdbfcbfcbfcbfcbfeaYkbdQbffbfgbfhbfibfjaYkaYkbfkbfkbflbflbflbflbflbfmbfnbfnbfnbfnaYkbfnbfobfnbfnbfpbfqbfqbfqbfqbfrbfsbftbfuaNsaafaaaaafaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazbaqfazcatwazdazeazfbfvbfwazdatwaziazjaqfazbarkbcRbfxbfybfybfybfzbcRbfAbfBaRCaRCbcTbfCaXhaYvbfDaYybfEaXhbfFbfGbfHbfHbfIbfJbfKbfKbfLbfKbfMbfNbfObfPbfObfObfQbfRbfSbfTbfUbaZbaZbfVbfWbfXbeGbbebfYaYQbfZbgabgbbaibgcbgdbgebgfaYQbqxcmqboZcltcltboXboYclybgiaYWbgjbgkbglbgmbaxbgnbaxbgoaYWaXVaIubgpbeVbgqbgrbgsbgtbgubeVbgvbgwbgwbgxbgybgybgybgzboLbjpbgCbfbbgDbgEbgEbgEbgEbgFbgGbgHbgIbgJbgIbgIbgIbgKbgLbgMbgNbgMbgObgObflbgPbgQbgRbflbgSbgTbgSbflbfmaYkbfpbfqbgUbgVbgUbfqbgWbgXbfqbgYbgZaMmaMnbhaaaaaaaaaaaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafawLbdYaAaaAbaAbaAbaAbaAcbdZawLaafaafaafaaabcRbhbbcRbhcbfybhdbhebcRaRCbbYbhfbhgbhhaXhaXhaXhaXhaXhaXhbhibhjbhkaRCbhlaYHaYHaYHbhmaYHaYHaYHbhnaYHaYHaYHaYHbhobhpbhqbhrbaZbaZbhsbhtbeFbeGbbebhuaYQbhvbgaaYRaYRaYRbaibhwbhxaYQahjckNcnAboTboUboWcnzckNahjaYWbhAbhBbhCbhDbaxbeRbhEbhFbhGbhHbhIbhJbeVbhKbhLbhMbhNbhObhPbgybhQbgybhRbgybgybhSbhTbhVbhUbhWbfbbhXbgEbhXbgEbhXbhYbgEbfcbhZbhZbiabibbfgbicbfibidbiebifbigbigbflbihbiibijbikbilbimbinbflbiobfnbipbfqbiqbirbiqbisbitbitbfqbiubgZaaaaafaaaaaaaaaaaaaaaaGbaGbaGbaGbaGbaGbaGbaGbaGbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaabcRbivbiwbixbiybiybizbiAbbZbhgaOObiBbiCbiDbiDbiDbfKbfKbfKbiEbiFbiFbiFbiGaYHbiHbiIbiJbiKbiLbiMbiNbiOaYHbiPbiQbiRbiSbiTbiUbiVbiWbiXbiVbiYbiZbjabjbbjcbjdbjebjfbjgbjhbjibhwaYQaYQahjckNcnAboUcltboUcnzckNahjaYWbFabjmbaxbjnbaxbjodoNbjqaYWaXVaIuaIubeVbjrbjsbjtbjubjvbjwbgybjxbjybjzbjAbjAbjBbjCbjDbjEbjFbfbbhXbgEbhXbgEbhXbhYbjGbfcbjHbjIbjJbjKbfgbjLbjMdtkdrgdrgdrbbjPbjQbjRbjSbjSbjSbjTbjSbjUbjVbjWbjXbjYbjZbkabkbbitbkcbkdbkebfqbiubgZbgZbgZbgZbgZaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -9273,10 +9271,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaablIblIblIblIblIblIblIbrubrvbrubnkbtVbiNbiNbtWbtXbtYbtXbtXbtXbtZbuabevbubbiXbiVbucbiVbudbiWbiXbuebufboGbsVbrBaXDbugbuhbmbbuibujbukbulbumbmbahlahlaafbdrbggcoCbeMbdraafaaaaaaburbusbutbutbuubuvbuwbuxbqCbuyaIuaIubnTbnTbuzbqMbuAbuBbuCbuDbuEbuFbuGbuCbuDbuCbuDbuCbuDbuCbfabfabtvbuHbsjbuIbuJbqObqQbuKbuLbuMbuNboebuObuPbuQbuRbuSbsEbsEbuTbsEbsEbuUbuVbuWbsEbsDbsEbuXbuYbuZbvabvbbvcbvdbvebvdbvdbvdbvfbvgbvhbvibvhbvjbvhbpXbtUbgZbsNbvkbgZbgZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIblIblIbvlbvmbvlbvnbvobvnbvnbvnbvnbvnbvpbvqbiNbrxbvraYHbvsbaZbvtbvubvvbvwbvxbvybvzbvwbvwbvAbrBaJSbvBbvCbmbbvDbvEbvFbvGbumbmbahlahlaafbdrcocbbqboRbdraafaaaaaabrJbvKbvLbvMbvNbuvbuwbuxbqCbvOaIuaIubvPbvQbvRbqMbvSbvTbuCbvUbvVbvWbvXbvYbvZbwabwbbwabwcbuCbgybgybtvbwdbsjbwebwfbwgbwhbwibwjbwjbwkbwlbwmbwnbwobwpbwqbwrbwsbwrbwrbwtbwrbwubwvbwrbwrbwrbwwbwxbwybwzbwAbwBbwCbwDbwEbwFbvdbwGbwHbwIbwJbwKbwHbwLbpXbtUbgZbwMbrsbwNbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIblIblIbwObwPbovbwQaYHbwRbovbwQbwSbwSbwSbwSbwTbwUbwVbwSbwSbwWbwWbwXbwWbvwbwYbwZbxabxbbvwbsVbrBaIvaTkaTkbmbbmbbmbbmbbmbbxcbmbaJOaJPaJUbdrbdtbkNbdsbdraJOaJPaJUbqBbqCbqCbqCbqCbqCbqCbxgbqCbvOaIubxhbuCbuCbxibxjbxkbuCbuCbxlbxmbxnbxobxpbxqbxrbxsbxtbxubxvbgybgybtvbxwbxxbxybxzbxAbxBbxCbxzbxzbxDbxEbxFbxGbxHbxHbxHbxHbxIbxHbxHbxHbxJbxKbxLbxMbxNbxObxPbxQbxRbwzbxSbxTbxUbxVbxWbxXbxYbpXbpXbxZbyabybbpXbycbpXbtUbgZbsNblAbgZbgZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIblIblIaaaaaaaaaaaaaaaaaaaaaaaaaaabwSbydbyebyfbygbyhbyibyjbykbylbymbynbyobypbyqbyrbysbvwbytbyubyvbyvbyvbywbyxbyybbAbyzbyAbyBbyCbyCbyCbnKbyFbyIbyHbyJaIuaIuaIubbeaLFaIuaLpaIuaIuaIubyKbyLbvOaIubyMbuCbyNbyObyPbyQbyRbuCbySbxmbyTbxobxpbxqbxqbyUbyVbyWbxvbgybyXbtvbsjbyYbyZbzabzbbzcbzdbzebzfboeboebfhbzgbxHbzhbzibzjbzkbzlbzmbxHbznbzobzpbzqbzrbzsbxPbxQbxRbztbzubzvbzwbzxbzybzzbxYbzAbzAbzAbzAbzAbzAbzAbpXbtUbgZbsNblAbgZaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGcaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIblIblIaaaaaaaaaaaaaaaaaaaaaaaaaaabzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbylbzMbzNbzObyrbzPbvwbzQbzRaIuaIuaIuaIuaIuaIubbAaIubrBaIuaIuaIuaIubeUbzSbeKbzUaIuaIuaIuaIubbeaIuaIuaLpaIuaIuaIubzVbzWbvObzXbzYbzZbAabAbbAcbAdbAebAfbAgbAhbAibAjbuCbAkbAlbAmbAnbAobuCbgybgybtvbtvbtvbtvbtvboeboeboeboeboeboebApbAqbArbxHbAsbAtbAubAvbAwbAxbxHbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbAJbAJbAKbALbAMbxYbzAbANbzAbAObzAbzAbzAbpXbtUbgZbsNblAbgZbgZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwSbAPbAQbARbASbATbAUbyjbylbylbymbylbyobAVbAWbAXbAYbvwbAZbBabBbbBbbBbbBcbBbbBbbBdbBbbBeaIubBfbBgbhIbBhbBiaWEbBkbBlbBmbBnaWEbBkbBoaWEbBpbBqaWEbBrbBsbBtbBuaIuaIubuCbBvbBwbBxbBybBzbuCbBAbBBbBAbuCbuCbuCbuCbuCbuCbuCbuCbgybgybgybBCbBDbuBbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbxHbBObBPbBQbBRbBSbBTbxHbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfbCgbChbCibCjbxYbzAbzAbzAbCkbzAbzAbzAbpXbtUbrqbClbrsbrtbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwSbwSbCmbCnbCnbCobwSbwSbCpbCqbCrbCsbvwbvwbCtbvwbvwbvwbCubCvaTkaTkaTkaTkbCwbCwbCwbCwbCwbCwbCwbCwbCwbCwbCxbdpbCzbCAbCAbCAbCAbCBbCCbCAbCAbCAbCAbCDbCEbCFaIzaJVbCGbuCbCHbCIbCJbCKbCLbuCbCMbxmbCNbuDbCObCObCPbCQbCRbCSbuDbCTbgybgybgybgybgybqMbCUbCVbCWbCXbCYbCZbDabDbbDcbDcbDcbDcbDcbDcbDcbDcbDcbDdbDebDdbDdbDdbDdbDfbDgbDhbvdbvdbvdbvdbvdbvdbvdbxYbpXbpXbpXbpXbpXbpXbpXbpXbtUbgZbpYbDibgZbgZaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIblIblIaaaaaaaaaaaaaaaaaaaaaaaaaaabwSbydbyebyfbygbyhbyibyjbykbylbymbynbyobypbyqbyrbysbvwbytbyubyvbyvbyvbywbyxbyybbAbyzbyAbyBbyCbyCbyCbBhbyFbyIbyHbyJaIuaIuaIubbeaLFaIuaLpaIuaIuaIubyKbyLbvOaIubyMbuCbyNbyObyPbyQbyRbuCbySbxmbyTbxobxpbxqbxqbyUbyVbyWbxvbgybyXbtvbsjbyYbyZbzabzbbzcbzdbzebzfboeboebfhbzgbxHbzhbzibzjbzkbzlbzmbxHbznbzobzpbzqbzrbzsbxPbxQbxRbztbzubzvbzwbzxbzybzzbxYbzAbzAbzAbzAbzAbzAbzAbpXbtUbgZbsNblAbgZaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGcaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIblIblIaaaaaaaaaaaaaaaaaaaaaaaaaaabzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbylbzMbzNbzObyrbzPbvwbzQbzRaIuaIuaIuaIuaIuaIubbAaIubrBaIuaIuaIuaIuaIubzSbeKbzUaIuaIuaIuaIubbeaIuaIuaLpaIuaIuaIubzVbzWbvObzXbzYbzZbAabAbbAcbAdbAebAfbAgbAhbAibAjbuCbAkbAlbAmbAnbAobuCbgybgybtvbtvbtvbtvbtvboeboeboeboeboeboebApbAqbArbxHbAsbAtbAubAvbAwbAxbxHbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbAJbAJbAKbALbAMbxYbzAbANbzAbAObzAbzAbzAbpXbtUbgZbsNblAbgZbgZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablIblIblIblIblIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwSbAPbAQbARbASbATbAUbyjbylbylbymbylbyobAVbAWbAXbAYbvwbAZbBabBbbBbbBbbBcbBbbBbbBdbBbbBeaIubBfbBgbhIbhIbBiaWEbBkbBlbBmbBnaWEbBkbBoaWEbBpbBqaWEbBrbBsbBtbBuaIuaIubuCbBvbBwbBxbBybBzbuCbBAbBBbBAbuCbuCbuCbuCbuCbuCbuCbuCbgybgybgybBCbBDbuBbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbxHbBObBPbBQbBRbBSbBTbxHbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfbCgbChbCibCjbxYbzAbzAbzAbCkbzAbzAbzAbpXbtUbrqbClbrsbrtbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwSbwSbCmbCnbCnbCobwSbwSbCpbCqbCrbCsbvwbvwbCtbvwbvwbvwbCubCvaTkaTkaTkaTkbCwbCwbCwbCwbCwbCwbCwbCwbCwbCwbnKbeUbeTbCAbCAbCAbCAbCBbCCbCAbCAbCAbCAbCDbCEbCFaIzaJVbCGbuCbCHbCIbCJbCKbCLbuCbCMbxmbCNbuDbCObCObCPbCQbCRbCSbuDbCTbgybgybgybgybgybqMbCUbCVbCWbCXbCYbCZbDabDbbDcbDcbDcbDcbDcbDcbDcbDcbDcbDdbDebDdbDdbDdbDdbDfbDgbDhbvdbvdbvdbvdbvdbvdbvdbxYbpXbpXbpXbpXbpXbpXbpXbpXbtUbgZbpYbDibgZbgZaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDjaaaaaaaaaaaaaafaaabwWbDkbDlbDmbDnbDnbDobDpbDqbDrbDsbDtbCvaaaaaaaafaaabCwbDubDvbDwbDxbDybDzbDAbDBbCwbDCbdqbDEbCAbDFbDGbDHbDIbDJbDKbDKbDLbDMbDNbDObDPbDQbDRbCDbuCbDSbxmbyTbDTbDUbuCbDVbxmbDWbDXbxobxobxobxobxobDYbDZbEabpqbpqbpqbpqbEbbqMbEcbEdbEebEfbEgbBFbDabDbbDcbEhbEhbEhbEibEhbEhbEhbDcbEjbEkbElbEjbEjbDdbEmbEnbxRblsbEobEpbEqbErbEsbEtbEubEvbEwbExbEybEzbEAbECbECbEDbEobEobEobgZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEEbEFbEGbEFbEHaaaaaaaafbwWbwWbEIbylbEJbylbEKbwWbELbELbEMbENbEObCvaafbEPbEQbERbESbETbDBbEUbDBbEVbEWbEXbEXbEYbEZbjjbFbbFcbDKbFdbFebFfbFgbFhbFibCAbCAbFjbFkbFlbFmbFnbFobFpbFqbxmbFrbDTbxobFsbFtbxmbFubuCbFvbFwbxobFxbFybFzbnTbnTbnTbnTbnTbFAbqMbqMbFBbCVbFCbFDbFEbFFbFGbDbbDcbEhbEhbEhbEhbEhbEhbEhbDcbFHbFIbFJbFKbFLbDdbCabFMbFNbFObFPbFQbFQbFQbFQbFQbFQbFRbFSbFTbEybgZbFUbgZbEobEobEobFVbFWaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbFXbFYbFXaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFZbGabGbbGabFZbGcbGdbGebwWbGfbylbGgbGhbylbGibwWbCvbGjbCvbCvbGkbGlaaabGmbGnbGobGpbDBbDBbGqbDBbGrbGsbGtbDBbCwbGubjkbGwbCAbGxbGybGzbGAbGBbFhbGCbGDbGEbGFbGGbGHbGIbGJbGKbuCbGLbGMbGNbGObAibuCbGPbxmbGQbuCbGRbDTbxobxmbGSbGTbnTbGUbGVbGWbGXbhRbqMbqMbGYbCVbCVbGZbHabHbbHcbHdbDcbEhbEhbEhbEhbEhbEhbEhbDcbHebHfbHgbHhbHibHjbHkbHlbHmbHnbHobFQbHpbHqbHqbHrbHqbHqbHqbHqbHsbHtbHubHvbHwbHxbHybHzbHAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHBbFXbHCbFXbHBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -9293,9 +9291,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTXaaaaafaafbTYbTYbTYbTYbTYbTYbTYbTYbCvbCvbTZbCvbCvbCvbPtbPubPvbCvbCvbLXbCvckdbELbCvbTbbOqbOqbUabOqbOqbOqbOqbOqbOqbOqbUbbUcbQMbUdbMjbNrbNrbUebUfbUgbUhbOGbOGbOGbTnbUibONbONbUjbUkbUlbPLbUmbUnbUobUpbPQbPRbUqbUrbUrbOPaafbzgbNIbNJbNJbNJbNJbNKbUsbUtbUubUvbUwbUxbUybUybUzbRobNJbTIbSCbEhbEhbEhbUAbUBbSIbUCbMNbUDbUEbSEbSEbUFbJWbUGbUHbUIbRxbUJbRBbSQbUKbTRbULbQubUMbUMbUMbRHbUNbQubNhbgZaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUObUPbUQbURbUSbURbUTbUUbUVbUWbUXbUYbUZbTYbVabVbbVbbVbbVbbVbbVbbVbbVbbVbbVcbVdbVebVebVebVebVfbVgbVgbVhbVibVjbVkbVlbVlbVlbVmbVnbMgbQMbVobVpbVqbONbONbONbVrbVsbONbONbVtbVubVvbOGbVwbVxbVybVzbOGbVAbVBbVCbRdaafbRebVDbVEbVFbOPaafbVGbVHbVIbVIbVIbVJbNJbVKbOXbVLbVMbVNbVObSybVPbSzbVQbNJbTIbSCbJWbJWbJWbJWbVRbVSbTLbVTbVRbJWbJWbJWbJWbJWbVUbVVbVWbVXbVYbVZbVZbVZbWabWbbSSbUMbUMbWcbRHbWdbQubNhbgZbgZbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWebWebWebWebWebWfbWgbWhbWibWibWhbTYbELbWjbWkbWkbWkbWkbWkbWkbWlbCvbWmbWnbWnbWnbWnbWnbWnbWnbWnbWobWobWpbWobWobWqbELbCvbWrbMgbQMbVobWsbWtbWubWvbSfbWwbWxbSfbSfbWybWzbWAbWBbWCbWDbWEbWFbOGbVAbWGbWHbWIbSobPRbWJbUrbUrbOPaafbWKbWLbCDbCDbCDbWMbNJbWNbWObUzbWPbWQbUtbWRbWSbWTbUtbNJbTIbSCbSDbSEbSEbWUbSGbMNbSHbSIbWVbWWbEhbEhbEhbJWbWXbWYbWZbRxbRybRxbRybRybXabXbbQubUMbUMbUMbRHbWdbQubNhblAblAbgZaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbXcbXdbXebXfbXebXgbXhbXibXjbXjbXkbTYbXlbXmaaaaaaaafaaaaaaaafaaabCvbWmbWnbXnbXobXpbXqbXrbXsbXnbXtbXubXvbXwbWobWobELbCvbXxbMgbQMbXybXzbXAbXBbXCbMjbMobMjbMjbMjbXDbXEbNrbNrbNrbXFbOGbVybOGbVAbVBbXGbRdaafbOPbOPbOPbOPbOPaafbXHbXIbCDbXJbXKbWMbNJbXLbRqbXMbXNbWQbOXbXObWSbXPbXQbNJbTIbSCbEhbXRbEhbXSbTKbMNbTLbMNbTMbXTbEhbXRbEhbJWbXUbXVbXWbXXbXYbXZbYabYbbYcbYdbSSbYebYfchUbRHbYhbQubYibgZblAbgZbgZbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbXcbXdbXebXfbXebXgbXhbXibXjbXjbXkbTYbXlbXmaaaaaaaafaaaaaaaafaaabCvbWmbWnbXnbXobXpbXqbXrbXsbXnbXtbXubXvbXwbWobWobELbCvbXxbMgbQMbXybXzbXAbXBbXCbMjbMobMjbMjbMjbXDbXEbNrbNrbNrbXFbOGbVybOGbVAbVBbXGbRdaafbOPbOPbOPbOPbOPaafbXHbXIbCDbXJbXKbWMbNJbXLbRqbXMbXNbWQbOXbXObWSbXPbXQbNJbTIbSCbEhbXRbEhbXSbTKbMNbTLbMNbTMbXTbEhbXRbEhbJWbXUbXVbXWbXXbXYbXZbYabYbbYcbYdbSSbCxbYfchUbRHbYhbQubYibgZblAbgZbgZbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbXcbYjbYkbYlbYmbWhbYnbWhbYobWhbWhbYpbELbXmaaaaaaaafaaaaaaaafaaabCvbWmbWnbXnbYqbYrbYsbYtbYubXnbYvbYwbYxbYybYzbWobELbCvbWrbMgbQMbYAbYBbMobYCbYDbMjbYEbYFbYGbMjbYHbTnbYIbNrbYJbWFbOGbWDbYKbYLbUnbYMbUpbPQbPRbYNbYObYPbOPaafbCDbXIbCDbYQbXKbWMbNJbYRbYSbYTbYUbYVbOQbYWdprchWchXbNJbTIbSCbEhbEhbEhbYZbZabSIbUCbMNbUDbZbbSEbSEbUFbDcbRHbZcbZdbZebRHbRHbZfbZgbZhbZibZjbVYbVZbZkbUMbYhbQubNhbgZbrqbgZbZlbgZaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbXcbZmbZnbZobZnbZpbZqbZrbZsbZtbZubTYbZvbZwaaaaaaaaaaaaaaaaaaaaabCvbWmbWnbZxbZybZzbYsbZAbZxbZxbYvbZBbZCbZDbZEbZFbZGbZHbZIbZJbZKbZLbZMbZNbZObZPbZQbZRbZSbZTbMjbOGbTnbZUbZVbYJbZWbOGbWDbYKbVAbVBbZXbRdaafbReclkbZZcaabOPaafbCDbXIbCDcabcacbWMbNJbNJcadcaebNJbNNbNJbNJbSubNJbNJbNJbTIbSCbJWbJWbJWbJWbVRcafbTLcagbVRbJWbJWbJWbJWbDcbTRcahbTRbTRbTRbRHbZfbZgcaicajcakcalbRxcambRHbYhbQubNhbgZblAblAblAcanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbXcbZmbZnbZobZnbZpbZqbZrbZsbZtbZubTYbZvbZwaaaaaaaaaaaaaaaaaaaaabCvbWmbWnbZxbZybZzbYsbZAbZxbZxbYvbZBbZCbZDbZEbZFbZGbZHbZIbZJbZKbZLbZMbZNbZObZPbZQbZRbZSbZTbMjbOGbTnbZUbZVbYJbZWbOGbWDbYKbVAbVBbZXbRdaafbReclkbZZcaabOPaafbCDbXIbCDcabcacbWMbNJbNJcadcaebNJbNNbNJbNJbSubNJbNJbNJbTIbSCbJWbJWbJWbJWbVRcafbTLcagbVRbJWbJWbJWbJWbDcbTRcahbTRbTRbTRbRHbZfbZgcaicajcakcalbRxbCzbRHbYhbQubNhbgZblAblAblAcanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafbWebWebWebWebWebTYbTYcaobTYbTYbTYbTYaafaaaaaaaPYaaaaaaaaaaaaaaacaqbWmbWnbZxbZxcarcasbXnbZxcatcaucavcawcaxcaybWobELbCvcazcaAcaBcaCcaDcaEcaFcaGcaHcaIcaJcaKbMjcaLcaMbZUbNrbYJcaNbOGcaObYKbVAcaPcaQbWIbSobPRcaRbYObYObOPaafcaSbXIbCDcaTbXKbWMcaUbNJbNJcaVbNJdpGdpFdpEdpzcaZcbabXKbTIbSCbSDbSEbSEcbbbSGbMNbSHbSIcbccbdbEhbEhbEhbDccbebTRdtebTRbTRbRHcbfcbgcbhcbibQubQubRxbQubRHcbjbQubNhbgZcbkcblcbmcbnaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaHaaHaaGaaGaaHaaGaaGaaGaaRaaGaaGaaGaaHaaGaafaafbCvbELbELbELbELbELbELbELbELcbocbpaafaaaaaaaafaagaFFaaaaaaaaabRMbWmbWncbscbtcascbubXnbXncbvcbwcbvcbxbYycbybWobELbTZbQLbMgcbzcbAcbBcaEcbCcbDcbEcbFciWcjcckbbPHcbIbNrbNrbNrcbJbOGcbKcbLbVAbVBbOGbRdaafbOPbOPbOPbOPbOPaafcbMbXIbCDcbNcbObVHbVIbVIcbPcbQbNKdpCdpBdpDdpzcbUcbVcbVcbWbSCbEhbEhbEhcbXbTKbMNbTLbMNbTMcbYbEhbEhbEhbDccbZbTRccabTRbTRccbcccccdcceccfbQubRxbRxccgbRHcchblAccibgZccjcckblAcclaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaGaaaaaabCvccmbELbCvbCvbTZbCvbCvbCvbCvbCvaaaaaaaaaaagaDIauKaagaagaafbRMbWmbWnccpbZxbXnbXnbXnbZxcatccqccrbYyccscctbZFbZHbZHccuccvccwcbAcbAccxcaFccycczccAccBccCbMjbOGbOJccDccEccFbQWccGccHccIbYLbUnccJbUpbPQbPRccKccLccLbOPaafbXHbXIbCDbCDbCDbXKbCDbCDccMccNbNKbNKdpAbNKdpzccNbFoccPccQbSCbEhbEhbEhccRccSbSIccTbMNbUDccUbSEbSEbUFbDcbTRbTRccVbTRbTRbRHcbfcbgccWccXbQuccYccZcdabRHcdbblAbNhbgZbgZbgZblAbgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
update_icon()
|
||||
|
||||
default_change_direction_wrench(mob/user, /obj/item/weapon/wrench/W)
|
||||
default_change_direction_wrench(mob/user, obj/item/weapon/wrench/W)
|
||||
if(..())
|
||||
initialize_directions = dir
|
||||
if(node)
|
||||
|
||||
@@ -85,7 +85,10 @@ datum/shuttle_controller
|
||||
proc/timeleft()
|
||||
if(online)
|
||||
var/timeleft = round((endtime - world.timeofday)/10 ,1)
|
||||
if(direction == 1 || direction == 2)
|
||||
if(timeleft > (MIDNIGHT_ROLLOVER/10)) // midnight rollover protection
|
||||
endtime -= MIDNIGHT_ROLLOVER // subtract 24 hours from endtime
|
||||
timeleft = round((endtime - world.timeofday)/10 ,1) // recalculate timeleft
|
||||
if(direction == 1)
|
||||
return timeleft
|
||||
else
|
||||
return SHUTTLEARRIVETIME-timeleft
|
||||
@@ -144,11 +147,9 @@ datum/shuttle_controller
|
||||
if(!online)
|
||||
return
|
||||
var/timeleft = timeleft()
|
||||
if(timeleft > 1e5) // midnight rollover protection
|
||||
timeleft = 0
|
||||
if(location == UNDOCKED)
|
||||
if(direction == -1)
|
||||
if(timeleft >= timelimit)
|
||||
if(timeleft >= timelimit) // Shuttle reaches CentCom after being recalled.
|
||||
online = 0
|
||||
direction = 1
|
||||
endtime = null
|
||||
|
||||
@@ -405,7 +405,7 @@ client
|
||||
if(href_list["Vars"])
|
||||
debug_variables(locate(href_list["Vars"]))
|
||||
|
||||
if(href_list["datumrefresh"])
|
||||
else if(href_list["datumrefresh"])
|
||||
var/datum/DAT = locate(href_list["datumrefresh"])
|
||||
if(!istype(DAT, /datum))
|
||||
return
|
||||
|
||||
+23
-10
@@ -1,19 +1,32 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/datum/powernet
|
||||
var/list/cables = list() // all cables & junctions
|
||||
var/list/nodes = list() // all APCs & sources
|
||||
|
||||
var/newload = 0
|
||||
var/load = 0
|
||||
var/newavail = 0
|
||||
var/avail = 0
|
||||
var/viewload = 0
|
||||
var/number = 0
|
||||
var/perapc = 0 // per-apc avilability
|
||||
var/netexcess = 0
|
||||
var/newload = 0 // increased by every machines each tick then becomes...
|
||||
var/load = 0 // ...the current load on the powernet
|
||||
var/newavail = 0 // increased by every machines each tick then becomes...
|
||||
var/avail = 0 //...the current available power in the powernet
|
||||
var/viewload = 0 //the load as it appears on the power console (gradually updated)
|
||||
var/number = 0 //Unused //TODEL
|
||||
var/perapc = 0 // per-apc avilability
|
||||
var/netexcess = 0 //excess power on the powernet (typically avail-load)
|
||||
|
||||
/*Powernet procs :
|
||||
|
||||
In modules/power/power.dm :
|
||||
|
||||
/datum/powernet/New()
|
||||
/datum/powernet/Destroy()
|
||||
/datum/powernet/proc/is_empty()
|
||||
/datum/powernet/proc/remove_cable(var/obj/structure/cable/C)
|
||||
/datum/powernet/proc/add_cable(var/obj/structure/cable/C)
|
||||
/datum/powernet/proc/remove_machine(var/obj/machinery/power/M)
|
||||
/datum/powernet/proc/add_machine(var/obj/machinery/power/M)
|
||||
/datum/powernet/proc/reset()
|
||||
/datum/powernet/proc/get_electrocute_damage()
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/datum/debug
|
||||
var/list/debuglist
|
||||
@@ -1019,7 +1019,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/clothing/under/rank/clown,
|
||||
/obj/item/weapon/bikehorn,
|
||||
/obj/item/clothing/under/mime,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/shoes/sneakers/black,
|
||||
/obj/item/clothing/gloves/white,
|
||||
/obj/item/clothing/mask/gas/mime,
|
||||
/obj/item/clothing/head/beret,
|
||||
|
||||
@@ -101,11 +101,17 @@ var/list/uplink_items = list()
|
||||
category = "Conspicuous and Dangerous Weapons"
|
||||
|
||||
/datum/uplink_item/dangerous/revolver
|
||||
name = "Full Revolver"
|
||||
name = "Syndicate Revolver"
|
||||
desc = "The syndicate revolver is a traditional handgun that fires .357 Magnum cartridges and has 7 chambers."
|
||||
item = /obj/item/weapon/gun/projectile/revolver
|
||||
cost = 6
|
||||
|
||||
/datum/uplink_item/dangerous/pistol
|
||||
name = "Stechkin Pistol"
|
||||
desc = "A small, easily concealable handgun that uses 10mm magazines and is compatible with silencers."
|
||||
item = /obj/item/weapon/gun/projectile/automatic/pistol
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/dangerous/smg
|
||||
name = "C-20r Submachine Gun"
|
||||
desc = "A fully-loaded Scarborough Arms-developed submachine gun that fires 12mm automatic rounds with a 20-round magazine."
|
||||
@@ -217,7 +223,6 @@ var/list/uplink_items = list()
|
||||
desc = "An additional 8-round 10mm magazine for use in the Stetchkin pistol."
|
||||
item = /obj/item/ammo_box/magazine/m10mm
|
||||
cost = 1
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/machinegun
|
||||
name = "Ammo-7.62×51mm"
|
||||
@@ -257,7 +262,6 @@ var/list/uplink_items = list()
|
||||
desc = "Fitted for use on the Stetchkin pistol, this silencer will make its shots quieter when equipped onto it."
|
||||
item = /obj/item/weapon/silencer
|
||||
cost = 2
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
// STEALTHY TOOLS
|
||||
|
||||
|
||||
+22
-17
@@ -175,9 +175,9 @@
|
||||
desc = "A trap used to catch bears and other legged creatures."
|
||||
var/armed = 0
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide.</span>"
|
||||
return (BRUTELOSS)
|
||||
/obj/item/weapon/legcuffs/beartrap/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob)
|
||||
..()
|
||||
@@ -186,26 +186,31 @@
|
||||
icon_state = "beartrap[armed]"
|
||||
user << "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj)
|
||||
if(armed)
|
||||
if(ishuman(AM))
|
||||
if(isturf(src.loc))
|
||||
if(armed && isturf(src.loc))
|
||||
if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
|
||||
var/mob/living/L = AM
|
||||
armed = 0
|
||||
icon_state = "beartrap0"
|
||||
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
L.visible_message("<span class='danger'>[L] triggers \the [src].</span>", \
|
||||
"<span class='userdanger'>You trigger \the [src]!</span>")
|
||||
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/H = AM
|
||||
if(H.m_intent == "run")
|
||||
armed = 0
|
||||
if(H.lying)
|
||||
H.apply_damage(20,BRUTE,"chest")
|
||||
else
|
||||
H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg")))
|
||||
if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
|
||||
H.legcuffed = src
|
||||
src.loc = H
|
||||
H.update_inv_legcuffed(0)
|
||||
H << "\red <B>You step on \the [src]!</B>"
|
||||
feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
|
||||
for(var/mob/O in viewers(H, null))
|
||||
if(O == H)
|
||||
continue
|
||||
O.show_message("\red <B>[H] steps on \the [src].</B>", 1)
|
||||
if(isanimal(AM) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
|
||||
armed = 0
|
||||
var/mob/living/simple_animal/SA = AM
|
||||
SA.health -= 20
|
||||
|
||||
else
|
||||
L.apply_damage(20,BRUTE)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -123,6 +123,7 @@ proc/process_ghost_teleport_locs()
|
||||
power_light = 0
|
||||
power_equip = 0
|
||||
power_environ = 0
|
||||
ambientsounds = list('sound/ambience/ambispace.ogg','sound/ambience/title2.ogg',)
|
||||
|
||||
|
||||
|
||||
@@ -500,6 +501,7 @@ proc/process_ghost_teleport_locs()
|
||||
/area/prison/morgue
|
||||
name = "\improper Prison Morgue"
|
||||
icon_state = "morgue"
|
||||
ambientsounds = list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg')
|
||||
|
||||
/area/prison/medical_research
|
||||
name = "\improper Prison Genetic Research"
|
||||
@@ -757,6 +759,7 @@ proc/process_ghost_teleport_locs()
|
||||
/area/chapel/main
|
||||
name = "\improper Chapel"
|
||||
icon_state = "chapel"
|
||||
ambientsounds = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg')
|
||||
|
||||
/area/chapel/office
|
||||
name = "\improper Chapel Office"
|
||||
@@ -821,30 +824,32 @@ proc/process_ghost_teleport_locs()
|
||||
//Engineering
|
||||
|
||||
/area/engine
|
||||
engine_smes
|
||||
name = "\improper Engineering SMES"
|
||||
icon_state = "engine_smes"
|
||||
requires_power = 0//This area only covers the batteries and they deal with their own power
|
||||
ambientsounds = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg')
|
||||
|
||||
engineering
|
||||
name = "Engineering"
|
||||
icon_state = "engine_smes"
|
||||
/area/engine/engine_smes
|
||||
name = "\improper Engineering SMES"
|
||||
icon_state = "engine_smes"
|
||||
requires_power = 0//This area only covers the batteries and they deal with their own power
|
||||
|
||||
break_room
|
||||
name = "\improper Engineering Foyer"
|
||||
icon_state = "engine"
|
||||
/area/engine/engineering
|
||||
name = "Engineering"
|
||||
icon_state = "engine_smes"
|
||||
|
||||
chiefs_office
|
||||
name = "\improper Chief Engineer's office"
|
||||
icon_state = "engine_control"
|
||||
/area/engine/break_room
|
||||
name = "\improper Engineering Foyer"
|
||||
icon_state = "engine"
|
||||
|
||||
secure_construction
|
||||
name = "\improper Secure Construction Area"
|
||||
icon_state = "engine"
|
||||
/area/engine/chiefs_office
|
||||
name = "\improper Chief Engineer's office"
|
||||
icon_state = "engine_control"
|
||||
|
||||
gravity_generator
|
||||
name = "Gravity Generator Room"
|
||||
icon_state = "blue"
|
||||
/area/engine/secure_construction
|
||||
name = "\improper Secure Construction Area"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/engine/gravity_generator
|
||||
name = "Gravity Generator Room"
|
||||
icon_state = "blue"
|
||||
|
||||
|
||||
//Solars
|
||||
@@ -930,6 +935,7 @@ proc/process_ghost_teleport_locs()
|
||||
name = "\improper AI Satellite Teleporter Room"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
|
||||
//MedBay
|
||||
|
||||
@@ -972,6 +978,7 @@ proc/process_ghost_teleport_locs()
|
||||
/area/medical/morgue
|
||||
name = "\improper Morgue"
|
||||
icon_state = "morgue"
|
||||
ambientsounds = list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg')
|
||||
|
||||
/area/medical/chemistry
|
||||
name = "Chemistry"
|
||||
@@ -1372,6 +1379,10 @@ proc/process_ghost_teleport_locs()
|
||||
name = "Emergency Storage"
|
||||
icon_state = "storage"
|
||||
|
||||
|
||||
/area/turret_protected/
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
|
||||
/area/turret_protected/ai_upload
|
||||
name = "\improper AI Upload Chamber"
|
||||
icon_state = "ai_upload"
|
||||
@@ -1454,6 +1465,9 @@ proc/process_ghost_teleport_locs()
|
||||
|
||||
// Telecommunications Satellite
|
||||
|
||||
/area/tcommsat
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/tcommsat/entrance
|
||||
name = "\improper Telecoms Teleporter"
|
||||
icon_state = "tcomsatentrance"
|
||||
@@ -1465,18 +1479,22 @@ proc/process_ghost_teleport_locs()
|
||||
/area/turret_protected/tcomsat
|
||||
name = "\improper Telecoms Satellite"
|
||||
icon_state = "tcomsatlob"
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/turret_protected/tcomfoyer
|
||||
name = "\improper Telecoms Foyer"
|
||||
icon_state = "tcomsatentrance"
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/turret_protected/tcomwest
|
||||
name = "\improper Telecommunications Satellite West Wing"
|
||||
icon_state = "tcomsatwest"
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/turret_protected/tcomeast
|
||||
name = "\improper Telecommunications Satellite East Wing"
|
||||
icon_state = "tcomsateast"
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/tcommsat/computer
|
||||
name = "\improper Telecoms Control Room"
|
||||
|
||||
+8
-22
@@ -17,6 +17,12 @@
|
||||
/area
|
||||
var/global/global_uid = 0
|
||||
var/uid
|
||||
var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\
|
||||
'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\
|
||||
'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\
|
||||
'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\
|
||||
'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\
|
||||
'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
|
||||
|
||||
/area/New()
|
||||
icon_state = ""
|
||||
@@ -249,9 +255,6 @@
|
||||
|
||||
|
||||
/area/Entered(A)
|
||||
var/musVolume = 25
|
||||
var/sound = 'sound/ambience/ambigen1.ogg'
|
||||
|
||||
if(!istype(A,/mob/living)) return
|
||||
|
||||
var/mob/living/L = A
|
||||
@@ -271,27 +274,10 @@
|
||||
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
|
||||
|
||||
if(prob(35))
|
||||
|
||||
if(istype(src, /area/chapel))
|
||||
sound = pick('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg')
|
||||
else if(istype(src, /area/medical/morgue))
|
||||
sound = pick('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg','sound/ambience/title2.ogg')
|
||||
else if(type == /area)
|
||||
sound = pick('sound/ambience/ambispace.ogg','sound/ambience/title2.ogg',)
|
||||
else if(istype(src, /area/engine))
|
||||
sound = pick('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg')
|
||||
else if(istype(src, /area/AIsattele) || istype(src, /area/turret_protected/ai) || istype(src, /area/turret_protected/ai_upload) || istype(src, /area/turret_protected/ai_upload_foyer))
|
||||
sound = pick('sound/ambience/ambimalf.ogg')
|
||||
else if(istype(src, /area/mine/explored) || istype(src, /area/mine/unexplored))
|
||||
sound = pick('sound/ambience/ambimine.ogg')
|
||||
musVolume = 25
|
||||
else if(istype(src, /area/tcommsat) || istype(src, /area/turret_protected/tcomwest) || istype(src, /area/turret_protected/tcomeast) || istype(src, /area/turret_protected/tcomfoyer) || istype(src, /area/turret_protected/tcomsat))
|
||||
sound = pick('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
else
|
||||
sound = pick('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
|
||||
var/sound = pick(ambientsounds)
|
||||
|
||||
if(!L.client.played)
|
||||
L << sound(sound, repeat = 0, wait = 0, volume = musVolume, channel = 1)
|
||||
L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)
|
||||
L.client.played = 1
|
||||
spawn(600) //ewww - this is very very bad
|
||||
if(L.&& L.client)
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target as mob)
|
||||
target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears)
|
||||
target.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(target), slot_w_uniform)
|
||||
target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform)
|
||||
target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(target), slot_shoes)
|
||||
target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit)
|
||||
target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head)
|
||||
|
||||
@@ -861,7 +861,7 @@ var/list/sacrificed = list()
|
||||
user << "\red You cannot summon the [cultist], for his shackles of blood are strong"
|
||||
return fizzle()
|
||||
cultist.loc = src.loc
|
||||
cultist.lying = 1
|
||||
cultist.Weaken(5)
|
||||
cultist.regenerate_icons()
|
||||
for(var/mob/living/carbon/human/C in orange(1,src))
|
||||
if(iscultist(C) && !C.stat)
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
synd_mob.equip_to_slot_or_del(R, slot_ears)
|
||||
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(synd_mob), slot_w_uniform)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(synd_mob), slot_shoes)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(synd_mob), slot_shoes)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(synd_mob), slot_wear_suit)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(synd_mob), slot_gloves)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(synd_mob), slot_head)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/*attack(mob/living/simple_animal/shade/M as mob, mob/user as mob)//APPARENTLY THEY NEED THEIR OWN SPECIAL SNOWFLAKE CODE IN THE LIVING ANIMAL DEFINES
|
||||
if(!istype(M, /mob/living/simple_animal/shade))//If target is not a shade
|
||||
return ..()
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <span class='danger'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</span>")
|
||||
|
||||
transfer_soul("SHADE", M, user)
|
||||
return*/
|
||||
@@ -111,21 +111,21 @@
|
||||
var/obj/item/device/soulstone/C = src
|
||||
if(ticker.mode.name == "cult" && T.mind == ticker.mode:sacrifice_target)
|
||||
if(iscultist(U))
|
||||
U << "\red The Geometer of blood wants this mortal sacrificed with the rune."
|
||||
U << "<span class='danger'>The Geometer of blood wants this mortal sacrificed with the rune.</span>"
|
||||
else
|
||||
U << "\red The soul stone doesn't work for no apparent reason."
|
||||
U << "<span class='danger'>The soul stone doesn't work for no apparent reason.</span>"
|
||||
return 0
|
||||
if(C.imprinted != "empty")
|
||||
U << "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!"
|
||||
U << "<span class='userdanger'>Capture failed!</span>: The soul stone has already been imprinted with [C.imprinted]'s mind!"
|
||||
else
|
||||
if (T.stat == 0)
|
||||
U << "\red <b>Capture failed!</b>: \black Kill or maim the victim first!"
|
||||
U << "<span class='userdanger'>Capture failed!</span>: Kill or maim the victim first!"
|
||||
else
|
||||
if(T.client == null)
|
||||
U << "\red <b>Capture failed!</b>: \black The soul has already fled it's mortal frame."
|
||||
U << "<span class='userdanger'>Capture failed!</span>: The soul has already fled it's mortal frame."
|
||||
else
|
||||
if(C.contents.len)
|
||||
U << "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room."
|
||||
U << "<span class='userdanger'>Capture failed!</span>: The soul stone is full! Use or free an existing soul to make room."
|
||||
else
|
||||
for(var/obj/item/W in T)
|
||||
T.unEquip(W)
|
||||
@@ -135,13 +135,13 @@
|
||||
var/mob/living/simple_animal/shade/T = target
|
||||
var/obj/item/device/soulstone/C = src
|
||||
if (T.stat == DEAD)
|
||||
U << "\red <b>Capture failed!</b>: \black The shade has already been banished!"
|
||||
U << "<span class='userdanger'>Capture failed!</span>: The shade has already been banished!"
|
||||
else
|
||||
if(C.contents.len)
|
||||
U << "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room."
|
||||
U << "<span class='userdanger'>Capture failed!</span>: The soul stone is full! Use or free an existing soul to make room."
|
||||
else
|
||||
if(T.name != C.imprinted)
|
||||
U << "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!"
|
||||
U << "<span class='userdanger'>Capture failed!</span>: The soul stone has already been imprinted with [C.imprinted]'s mind!"
|
||||
else
|
||||
T.loc = C //put shade in stone
|
||||
T.status_flags |= GODMODE
|
||||
@@ -150,7 +150,7 @@
|
||||
C.icon_state = "soulstone2"
|
||||
T << "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form"
|
||||
if(U != T)
|
||||
U << "\blue <b>Capture successful!</b>: \black [T.name]'s has been recaptured and stored within the soul stone."
|
||||
U << "<span class='info'><b>Capture successful!</b>:</span> [T.name]'s has been recaptured and stored within the soul stone."
|
||||
if("CONSTRUCT")
|
||||
var/obj/structure/constructshell/T = target
|
||||
var/obj/item/device/soulstone/C = src
|
||||
@@ -203,31 +203,32 @@
|
||||
Z.cancel_camera()
|
||||
qdel(C)
|
||||
else
|
||||
U << "\red <b>Creation failed!</b>: \black The soul stone is empty! Go kill someone!"
|
||||
U << "<span class='userdanger'>Creation failed!</span>: The soul stone is empty! Go kill someone!"
|
||||
return
|
||||
|
||||
obj/item/proc/init_shade(var/obj/item/device/soulstone/C, var/mob/living/carbon/human/T, var/mob/U as mob, var/vic = 0)
|
||||
new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
|
||||
T.invisibility = 101
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = T
|
||||
flick("dust-h", animation)
|
||||
qdel(animation)
|
||||
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
|
||||
S.loc = C //put shade in stone
|
||||
S.status_flags |= GODMODE //So they won't die inside the stone somehow
|
||||
S.canmove = 0//Can't move out of the soul stone
|
||||
S.name = "Shade of [T.real_name]"
|
||||
S.real_name = "Shade of [T.real_name]"
|
||||
S.key = T.key
|
||||
new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
|
||||
T.invisibility = 101
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = T
|
||||
flick("dust-h", animation)
|
||||
qdel(animation)
|
||||
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
|
||||
S.loc = C //put shade in stone
|
||||
S.status_flags |= GODMODE //So they won't die inside the stone somehow
|
||||
S.canmove = 0//Can't move out of the soul stone
|
||||
S.name = "Shade of [T.real_name]"
|
||||
S.real_name = "Shade of [T.real_name]"
|
||||
S.key = T.key
|
||||
if(iscultist(U))
|
||||
ticker.mode.add_cultist(S.mind,2)
|
||||
S.cancel_camera()
|
||||
C.icon_state = "soulstone2"
|
||||
C.name = "Soul Stone: [S.real_name]"
|
||||
S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs."
|
||||
C.imprinted = "[S.name]"
|
||||
if(vic)
|
||||
U << "\blue <b>Capture successful!</b>: \black [T.real_name]'s soul has been ripped from their body and stored within the soul stone."
|
||||
U << "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls."
|
||||
S.cancel_camera()
|
||||
C.icon_state = "soulstone2"
|
||||
C.name = "Soul Stone: [S.real_name]"
|
||||
S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs."
|
||||
C.imprinted = "[S.name]"
|
||||
if(vic)
|
||||
U << "<span class='info'><b>Capture successful!</b>:</span> [T.real_name]'s soul has been ripped from their body and stored within the soul stone."
|
||||
U << "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls."
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
qdel(wizard_mob.l_store)
|
||||
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(wizard_mob), slot_ears)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(wizard_mob), slot_w_uniform)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head)
|
||||
|
||||
@@ -15,7 +15,7 @@ Assistant
|
||||
|
||||
/datum/job/assistant/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
|
||||
/datum/job/assistant/get_access()
|
||||
if(config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) //Config has assistant maint access set
|
||||
|
||||
@@ -29,7 +29,7 @@ Captain
|
||||
H.equip_to_slot_or_del(U, slot_w_uniform)
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/capcarapace(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
|
||||
|
||||
@@ -85,7 +85,7 @@ Head of Personnel
|
||||
|
||||
/datum/job/hop/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head)
|
||||
|
||||
//Equip ID box
|
||||
|
||||
@@ -39,7 +39,7 @@ Bartender
|
||||
H.equip_to_slot_or_del(BPK, slot_back,1)
|
||||
|
||||
/datum/job/bartender/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
|
||||
|
||||
@@ -72,7 +72,7 @@ Chef
|
||||
/datum/job/chef/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(H), slot_head)
|
||||
|
||||
/*
|
||||
@@ -97,7 +97,7 @@ Botanist
|
||||
|
||||
/datum/job/hydro/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store)
|
||||
@@ -124,7 +124,7 @@ Quartermaster
|
||||
|
||||
/datum/job/qm/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
|
||||
|
||||
@@ -150,7 +150,7 @@ Cargo Technician
|
||||
|
||||
/datum/job/cargo_tech/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
|
||||
/*
|
||||
Shaft Miner
|
||||
@@ -177,7 +177,7 @@ Shaft Miner
|
||||
|
||||
/datum/job/mining/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_l_hand)
|
||||
@@ -253,7 +253,7 @@ Mime
|
||||
|
||||
/datum/job/mime/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/mime(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
|
||||
@@ -295,7 +295,7 @@ Janitor
|
||||
|
||||
/datum/job/janitor/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
|
||||
/*
|
||||
Librarian
|
||||
@@ -318,7 +318,7 @@ Librarian
|
||||
|
||||
/datum/job/librarian/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/red(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/books(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_r_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
|
||||
|
||||
@@ -82,7 +82,7 @@ Chaplain
|
||||
|
||||
/datum/job/chaplain/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
|
||||
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible/booze(H)
|
||||
spawn(0)
|
||||
|
||||
@@ -33,7 +33,7 @@ Chief Engineer
|
||||
|
||||
/datum/job/chief_engineer/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
@@ -66,7 +66,7 @@ Station Engineer
|
||||
|
||||
/datum/job/engineer/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/orange(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/t_scanner(H), slot_r_store)
|
||||
@@ -96,6 +96,6 @@ Atmospheric Technician
|
||||
|
||||
/datum/job/atmos/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/analyzer(H), slot_r_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt)
|
||||
@@ -29,7 +29,7 @@ Chief Medical Officer
|
||||
|
||||
/datum/job/cmo/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/cmo(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
@@ -59,7 +59,7 @@ Medical Doctor
|
||||
|
||||
/datum/job/doctor/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
@@ -86,7 +86,7 @@ Chemist
|
||||
|
||||
/datum/job/chemist/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/chemist(H), slot_wear_suit)
|
||||
|
||||
/*
|
||||
@@ -111,7 +111,7 @@ Geneticist
|
||||
|
||||
/datum/job/geneticist/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/genetics(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
|
||||
@@ -140,7 +140,7 @@ Virologist
|
||||
/datum/job/virologist/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/virologist(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ Research Director
|
||||
access_tech_storage, access_minisat)
|
||||
|
||||
/datum/job/rd/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
|
||||
@@ -58,7 +58,7 @@ Scientist
|
||||
|
||||
/datum/job/scientist/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/science(H), slot_wear_suit)
|
||||
|
||||
/*
|
||||
@@ -83,6 +83,6 @@ Roboticist
|
||||
|
||||
/datum/job/roboticist/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand)
|
||||
@@ -122,7 +122,7 @@ Detective
|
||||
|
||||
/datum/job/detective/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(H), slot_wear_suit)
|
||||
|
||||
@@ -128,8 +128,11 @@
|
||||
/obj/machinery/atmospherics/unary/heat_reservoir/heater/New()
|
||||
..()
|
||||
initialize_directions = dir
|
||||
var/obj/item/weapon/circuitboard/thermomachine/H = new /obj/item/weapon/circuitboard/thermomachine(null)
|
||||
H.build_path = /obj/machinery/atmospherics/unary/heat_reservoir/heater
|
||||
H.name = "circuit board (Heater)"
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/thermomachine(null)
|
||||
component_parts += H
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
|
||||
|
||||
@@ -164,6 +164,13 @@
|
||||
/obj/machinery/bot/attack_ai(mob/user as mob)
|
||||
src.attack_hand(user)
|
||||
|
||||
/obj/machinery/bot/proc/speak(var/message)
|
||||
if((!src.on) || (!message))
|
||||
return
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"</span>",2)
|
||||
return
|
||||
|
||||
/******************************************************************/
|
||||
// Navigation procs
|
||||
// Used for A-star pathfinding
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
health = 25
|
||||
maxhealth = 25
|
||||
var/cleaning = 0
|
||||
var/screwloose = 0
|
||||
var/oddbutton = 0
|
||||
var/blood = 1
|
||||
var/list/target_types = list()
|
||||
var/obj/effect/decal/cleanable/target
|
||||
@@ -92,12 +90,12 @@ text("<A href='?src=\ref[src];operation=start'>[src.on ? "On" : "Off"]</A>"))
|
||||
dat += text({"<BR>Cleans Blood: []<BR>"}, text("<A href='?src=\ref[src];operation=blood'>[src.blood ? "Yes" : "No"]</A>"))
|
||||
dat += text({"<BR>Patrol station: []<BR>"}, text("<A href='?src=\ref[src];operation=patrol'>[src.should_patrol ? "Yes" : "No"]</A>"))
|
||||
// dat += text({"<BR>Beacon frequency: []<BR>"}, text("<A href='?src=\ref[src];operation=freq'>[src.beacon_freq]</A>"))
|
||||
if(src.open && !src.locked)
|
||||
/* if(src.open && !src.locked)
|
||||
dat += text({"
|
||||
Odd looking screw twiddled: []<BR>
|
||||
Weird button pressed: []"},
|
||||
text("<A href='?src=\ref[src];operation=screw'>[src.screwloose ? "Yes" : "No"]</A>"),
|
||||
text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"]</A>"))
|
||||
text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"]</A>"))*/
|
||||
|
||||
user << browse("<HEAD><TITLE>Cleaner v1.0 controls</TITLE></HEAD>[dat]", "window=autocleaner")
|
||||
onclose(user, "autocleaner")
|
||||
@@ -123,22 +121,21 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.patrol_path = null
|
||||
src.updateUsrDialog()
|
||||
if("freq")
|
||||
var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10
|
||||
var/freq = text2num(input("Select frequency for navigation beacons", "Frequency", num2text(beacon_freq / 10))) * 10
|
||||
if (freq > 0)
|
||||
src.beacon_freq = freq
|
||||
src.updateUsrDialog()
|
||||
if("screw")
|
||||
/* if("screw")
|
||||
src.screwloose = !src.screwloose
|
||||
usr << "<span class='notice>You twiddle the screw.</span>"
|
||||
src.updateUsrDialog()
|
||||
if("oddbutton")
|
||||
src.oddbutton = !src.oddbutton
|
||||
usr << "<span class='notice'>You press the weird button.</span>"
|
||||
src.updateUsrDialog()
|
||||
src.updateUsrDialog() */
|
||||
if("hack")
|
||||
if(!src.oddbutton)
|
||||
src.emagged = 2 //Cleanbots are odd, this is here to ensure the "compromised" status updates properly.
|
||||
src.oddbutton = 1
|
||||
if(!src.emagged)
|
||||
src.emagged = 2
|
||||
src.hacked = 1
|
||||
usr << "<span class='warning'>You corrupt [src]'s cleaning software.</span>"
|
||||
else if(!src.hacked)
|
||||
@@ -146,7 +143,6 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
else
|
||||
src.hacked = 0
|
||||
src.emagged = 0
|
||||
src.oddbutton = 0
|
||||
usr << "<span class='notice'>[src]'s software has been reset!</span>"
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -168,9 +164,8 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
/obj/machinery/bot/cleanbot/Emag(mob/user as mob)
|
||||
..()
|
||||
if(open && !locked)
|
||||
if(user) user << "<span class='notice'>The [src] buzzes and beeps.</span>"
|
||||
src.oddbutton = 1
|
||||
src.screwloose = 1
|
||||
if(user) user << "<span class='notice'>[src] buzzes and beeps.</span>"
|
||||
src.emagged = 2
|
||||
|
||||
/obj/machinery/bot/cleanbot/process()
|
||||
set background = BACKGROUND_ENABLED
|
||||
@@ -181,19 +176,18 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
return
|
||||
var/list/cleanbottargets = list()
|
||||
|
||||
if(!src.screwloose && !src.oddbutton && prob(5))
|
||||
if(!src.emagged && prob(5))
|
||||
visible_message("[src] makes an excited beeping booping sound!")
|
||||
|
||||
if(src.screwloose && prob(5))
|
||||
if(src.emagged && prob(10)) //Wets floors randomly
|
||||
if(istype(loc,/turf/simulated))
|
||||
var/turf/simulated/T = src.loc
|
||||
T.MakeSlippery()
|
||||
|
||||
if(src.oddbutton && prob(5))
|
||||
visible_message("Something flies out of [src]. He seems to be acting oddly.")
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(src.loc)
|
||||
//gib.streak(list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
|
||||
src.oldtarget = gib
|
||||
if(src.emagged && prob(5)) //Spawns foam!
|
||||
visible_message("<span class='danger'>[src] whirs and bubbles violently, before releasing a plume of froth!</span>")
|
||||
new /obj/effect/effect/foam(src.loc)
|
||||
|
||||
if(!src.target || src.target == null)
|
||||
for (var/obj/effect/decal/cleanable/D in view(7,src))
|
||||
for(var/T in src.target_types)
|
||||
@@ -322,7 +316,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
/obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target)
|
||||
src.anchored = 1
|
||||
src.icon_state = "cleanbot-c"
|
||||
visible_message("\red [src] begins to clean up [target]")
|
||||
visible_message("<span class='danger'>[src] begins to clean up [target]</span>")
|
||||
src.cleaning = 1
|
||||
spawn(50)
|
||||
src.cleaning = 0
|
||||
@@ -333,7 +327,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
|
||||
/obj/machinery/bot/cleanbot/explode()
|
||||
src.on = 0
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
src.visible_message("<span class='danger'><B>[src] blows apart!</B></span>", 1)
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
@@ -753,11 +753,6 @@ Auto Patrol: []"},
|
||||
M:loc = T
|
||||
*/
|
||||
|
||||
/obj/machinery/bot/ed209/proc/speak(var/message)
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",2)
|
||||
return
|
||||
|
||||
/obj/machinery/bot/ed209/explode()
|
||||
walk_to(src,0)
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
var/message = pick("Hey, you! Hold on, I'm coming.","Wait! I want to help!","You appear to be injured!")
|
||||
src.speak(message)
|
||||
src.last_newpatient_speak = world.time
|
||||
src.visible_message("<b>[src]</b> points at [C.name]!")
|
||||
src.visible_message("<span class='name'>[src]</span> points at [C.name]!")
|
||||
break
|
||||
else
|
||||
continue
|
||||
@@ -438,7 +438,7 @@
|
||||
src.icon_state = "medibots"
|
||||
C.visible_message("<span class='danger'>[src] is trying to inject [src.patient]!</span>", \
|
||||
"<span class='userdanger'>[src] is trying to inject [src.patient]!</span>")
|
||||
|
||||
|
||||
spawn(30)
|
||||
if ((get_dist(src, src.patient) <= 1) && (src.on))
|
||||
if((reagent_id == "internal_beaker") && (src.reagent_glass) && (src.reagent_glass.reagents.total_volume))
|
||||
@@ -457,13 +457,6 @@
|
||||
reagent_id = null
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/bot/medbot/proc/speak(var/message)
|
||||
if((!src.on) || (!message))
|
||||
return
|
||||
visible_message("[src] beeps, \"[message]\"")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag == "taser")
|
||||
src.stunned = min(stunned+10,20)
|
||||
|
||||
@@ -667,12 +667,6 @@ Auto Patrol: []"},
|
||||
M:loc = T
|
||||
*/
|
||||
|
||||
/obj/machinery/bot/secbot/proc/speak(var/message)
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",2)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/bot/secbot/explode()
|
||||
|
||||
walk_to(src,0)
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var/c_tag_order = 999
|
||||
var/status = 1.0
|
||||
anchored = 1.0
|
||||
var/start_active = 0 //If it ignores the random chance to start broken on round start
|
||||
var/invuln = null
|
||||
var/obj/item/device/camera_bug/bug = null
|
||||
var/obj/item/weapon/camera_assembly/assembly = null
|
||||
@@ -45,7 +46,7 @@
|
||||
..()
|
||||
|
||||
/obj/machinery/camera/initialize()
|
||||
if(z == 1 && prob(3))
|
||||
if(z == 1 && prob(3) && !start_active)
|
||||
deactivate()
|
||||
|
||||
/obj/machinery/camera/Destroy()
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// PRESETS
|
||||
|
||||
// EMP
|
||||
/obj/machinery/camera/emp_proof
|
||||
start_active = 1
|
||||
|
||||
/obj/machinery/camera/emp_proof/New()
|
||||
..()
|
||||
@@ -9,6 +11,7 @@
|
||||
// X-RAY
|
||||
|
||||
/obj/machinery/camera/xray
|
||||
start_active = 1
|
||||
icon_state = "xraycam" // Thanks to Krutchen for the icons.
|
||||
|
||||
/obj/machinery/camera/xray/New()
|
||||
@@ -17,6 +20,7 @@
|
||||
|
||||
// MOTION
|
||||
/obj/machinery/camera/motion
|
||||
start_active = 1
|
||||
name = "motion-sensitive security camera"
|
||||
|
||||
/obj/machinery/camera/motion/New()
|
||||
@@ -24,6 +28,8 @@
|
||||
upgradeMotion()
|
||||
|
||||
// ALL UPGRADES
|
||||
/obj/machinery/camera/all
|
||||
start_active = 1
|
||||
|
||||
/obj/machinery/camera/all/New()
|
||||
..()
|
||||
|
||||
@@ -277,7 +277,7 @@ to destroy them and players will be able to make replacements.
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 4)
|
||||
|
||||
/obj/item/weapon/circuitboard/thermomachine
|
||||
name = "circuit board (Cooler)"
|
||||
name = "circuit board (Freezer)"
|
||||
desc = "Use screwdriver to switch between heating and cooling modes."
|
||||
build_path = /obj/machinery/atmospherics/unary/cold_sink/freezer
|
||||
board_type = "machine"
|
||||
@@ -296,7 +296,7 @@ to destroy them and players will be able to make replacements.
|
||||
user << "<span class='notice'>You set the board to heating.</span>"
|
||||
else
|
||||
build_path = /obj/machinery/atmospherics/unary/cold_sink/freezer
|
||||
name = "circuit board (Cooler)"
|
||||
name = "circuit board (Freezer)"
|
||||
user << "<span class='notice'>You set the board to cooling.</span>"
|
||||
|
||||
/obj/item/weapon/circuitboard/biogenerator
|
||||
|
||||
@@ -202,30 +202,41 @@ Class Procs:
|
||||
..()
|
||||
if(!interact_offline && stat & (NOPOWER|BROKEN))
|
||||
return 1
|
||||
if(usr.restrained() || usr.lying || usr.stat)
|
||||
if(!usr.canUseTopic(src))
|
||||
return 1
|
||||
if(!(ishuman(usr) || issilicon(usr)))
|
||||
usr << "<span class='notice'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
var/norange = 0
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(istype(H.l_hand, /obj/item/tk_grab))
|
||||
norange = 1
|
||||
else if(istype(H.r_hand, /obj/item/tk_grab))
|
||||
norange = 1
|
||||
|
||||
if(!norange)
|
||||
if(!issilicon(usr))
|
||||
if(!in_range(src, usr))
|
||||
return 1
|
||||
if(!isturf(loc))
|
||||
return 1
|
||||
|
||||
add_fingerprint(usr)
|
||||
return 0
|
||||
|
||||
/mob/proc/canUseTopic() //TODO: once finished, place these procs on the respective mob files
|
||||
return
|
||||
|
||||
/mob/dead/observer/canUseTopic()
|
||||
if(check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
/mob/living/canUseTopic()
|
||||
src << "<span class='notice'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/canUseTopic(atom/movable/M)
|
||||
if(restrained() || lying || stat || stunned || weakened)
|
||||
return
|
||||
if(!in_range(M, src))
|
||||
return
|
||||
if(!isturf(M.loc) && M.loc != src)
|
||||
return
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/canUseTopic()
|
||||
if(stat)
|
||||
return
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/robot/canUseTopic()
|
||||
if(stat || lockcharge || stunned || weakened)
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/machinery/attack_ai(mob/user as mob)
|
||||
if(isrobot(user))
|
||||
// For some reason attack_robot doesn't work
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
name = "magnetic control console"
|
||||
icon = 'icons/obj/airlock_machines.dmi' // uses an airlock machine icon, THINK GREEN HELP THE ENVIRONMENT - RECYCLING!
|
||||
icon_state = "airlock_control_standby"
|
||||
density = 1
|
||||
density = 0
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 45
|
||||
@@ -208,7 +208,7 @@
|
||||
var/autolink = 0 // if set to 1, can't probe for other magnets!
|
||||
|
||||
var/pathpos = 1 // position in the path
|
||||
var/path = "NULL" // text path of the magnet
|
||||
var/path = "w;e;e;w;s;n;n;s" // text path of the magnet
|
||||
var/speed = 1 // lowest = 1, highest = 10
|
||||
var/list/rpath = list() // real path of the magnet, used in iterator
|
||||
|
||||
|
||||
@@ -842,7 +842,7 @@
|
||||
icon_state = "engi"
|
||||
icon_deny = "engi-deny"
|
||||
req_access_txt = "11"
|
||||
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4,
|
||||
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/sneakers/orange = 4,/obj/item/clothing/head/hardhat = 4,
|
||||
/obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/screwdriver = 12,
|
||||
/obj/item/weapon/crowbar = 12,/obj/item/weapon/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/wrench = 12,/obj/item/device/t_scanner = 12,
|
||||
/obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8,
|
||||
|
||||
@@ -70,8 +70,8 @@
|
||||
var/new_softcap_icon_state = ""
|
||||
var/new_softcap_name = ""
|
||||
var/new_desc = "The colors are a bit dodgy."
|
||||
for(var/T in typesof(/obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/J = new T
|
||||
for(var/T in typesof(/obj/item/clothing/under/color))
|
||||
var/obj/item/clothing/under/color/J = new T
|
||||
//world << "DEBUG: [wash_color] == [J.item_color]"
|
||||
if(wash_color == J.item_color)
|
||||
new_jumpsuit_icon_state = J.icon_state
|
||||
@@ -92,8 +92,8 @@
|
||||
//world << "DEBUG: YUP! [new_icon_state] and [new_item_state]"
|
||||
break
|
||||
qdel(G)
|
||||
for(var/T in typesof(/obj/item/clothing/shoes))
|
||||
var/obj/item/clothing/shoes/S = new T
|
||||
for(var/T in typesof(/obj/item/clothing/shoes/sneakers))
|
||||
var/obj/item/clothing/shoes/sneakers/S = new T
|
||||
//world << "DEBUG: [wash_color] == [J.item_color]"
|
||||
if(wash_color == S.item_color)
|
||||
new_shoe_icon_state = S.icon_state
|
||||
@@ -123,7 +123,7 @@
|
||||
break
|
||||
qdel(H)
|
||||
if(new_jumpsuit_icon_state && new_jumpsuit_item_state && new_jumpsuit_name)
|
||||
for(var/obj/item/clothing/under/J in contents)
|
||||
for(var/obj/item/clothing/under/color/J in contents)
|
||||
//world << "DEBUG: YUP! FOUND IT!"
|
||||
J.item_state = new_jumpsuit_item_state
|
||||
J.icon_state = new_jumpsuit_icon_state
|
||||
@@ -139,7 +139,7 @@
|
||||
G.name = new_glove_name
|
||||
G.desc = new_desc
|
||||
if(new_shoe_icon_state && new_shoe_name)
|
||||
for(var/obj/item/clothing/shoes/S in contents)
|
||||
for(var/obj/item/clothing/shoes/sneakers/S in contents)
|
||||
//world << "DEBUG: YUP! FOUND IT!"
|
||||
if (S.chained == 1)
|
||||
S.chained = 0
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
/obj/effect/landmark/costume/scratch/New()
|
||||
new /obj/item/clothing/gloves/white(src.loc)
|
||||
new /obj/item/clothing/shoes/white(src.loc)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src.loc)
|
||||
new /obj/item/clothing/under/scratch(src.loc)
|
||||
if (prob(30))
|
||||
new /obj/item/clothing/head/cueball(src.loc)
|
||||
@@ -152,7 +152,7 @@
|
||||
new /obj/item/clothing/glasses/monocle(src.loc)
|
||||
var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that)
|
||||
new CHOICE(src.loc)
|
||||
new /obj/item/clothing/shoes/black(src.loc)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src.loc)
|
||||
new /obj/item/weapon/cane(src.loc)
|
||||
new /obj/item/clothing/under/sl_suit(src.loc)
|
||||
new /obj/item/clothing/mask/fakemoustache(src.loc)
|
||||
|
||||
@@ -249,11 +249,12 @@
|
||||
g_amt = MINERAL_MATERIAL_AMOUNT
|
||||
attack_verb = list("stabbed", "slashed", "sliced", "cut")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
var/cooldown = 0
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("<span class='suicide'>[user] is slitting \his wrists with the shard of glass! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the shard of glass! It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS)
|
||||
/obj/item/weapon/shard/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the shard of glass! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the shard of glass! It looks like \he's trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
|
||||
/obj/item/weapon/shard/New()
|
||||
@@ -311,6 +312,9 @@
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(!H.shoes)
|
||||
H << "<span class='userdanger'>You step in the broken glass!</span>"
|
||||
H.apply_damage(5,BRUTE,(pick("l_leg", "r_leg")))
|
||||
H.Weaken(3)
|
||||
H.Weaken(3)
|
||||
if(cooldown < world.time - 10) //cooldown to avoid message spam.
|
||||
H.visible_message("<span class='danger'>[H] steps in the broken glass!</span>", \
|
||||
"<span class='userdanger'>You step in the broken glass!</span>")
|
||||
cooldown = world.time
|
||||
|
||||
+145
-145
@@ -121,48 +121,48 @@
|
||||
attack_verb = list("struck", "pistol whipped", "hit", "bashed")
|
||||
var/bullets = 7.0
|
||||
|
||||
examine()
|
||||
set src in usr
|
||||
/obj/item/toy/gun/examine()
|
||||
set src in usr
|
||||
|
||||
src.desc = text("There are [] cap\s left. Looks almost like the real thing! Ages 8 and up.", src.bullets)
|
||||
..()
|
||||
return
|
||||
src.desc = text("There are [] cap\s left. Looks almost like the real thing! Ages 8 and up.", src.bullets)
|
||||
..()
|
||||
return
|
||||
|
||||
attackby(obj/item/toy/ammo/gun/A as obj, mob/user as mob)
|
||||
/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A as obj, mob/user as mob)
|
||||
|
||||
if (istype(A, /obj/item/toy/ammo/gun))
|
||||
if (src.bullets >= 7)
|
||||
user << "\blue It's already fully loaded!"
|
||||
return 1
|
||||
if (A.amount_left <= 0)
|
||||
user << "\red There are no more caps!"
|
||||
return 1
|
||||
if (A.amount_left < (7 - src.bullets))
|
||||
src.bullets += A.amount_left
|
||||
user << text("\red You reload [] cap\s!", A.amount_left)
|
||||
A.amount_left = 0
|
||||
else
|
||||
user << text("\red You reload [] cap\s!", 7 - src.bullets)
|
||||
A.amount_left -= 7 - src.bullets
|
||||
src.bullets = 7
|
||||
A.update_icon()
|
||||
if (istype(A, /obj/item/toy/ammo/gun))
|
||||
if (src.bullets >= 7)
|
||||
user << "\blue It's already fully loaded!"
|
||||
return 1
|
||||
return
|
||||
if (A.amount_left <= 0)
|
||||
user << "\red There are no more caps!"
|
||||
return 1
|
||||
if (A.amount_left < (7 - src.bullets))
|
||||
src.bullets += A.amount_left
|
||||
user << text("\red You reload [] cap\s!", A.amount_left)
|
||||
A.amount_left = 0
|
||||
else
|
||||
user << text("\red You reload [] cap\s!", 7 - src.bullets)
|
||||
A.amount_left -= 7 - src.bullets
|
||||
src.bullets = 7
|
||||
A.update_icon()
|
||||
return 1
|
||||
return
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if (flag)
|
||||
return
|
||||
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if (src.bullets < 1)
|
||||
user.show_message("\red *click* *click*", 2)
|
||||
return
|
||||
playsound(user, 'sound/weapons/Gunshot.ogg', 100, 1)
|
||||
src.bullets--
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red <B>[] fires the [src] at []!</B>", user, target), 1, "\red You hear a gunshot", 2)
|
||||
/obj/item/toy/gun/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if (flag)
|
||||
return
|
||||
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if (src.bullets < 1)
|
||||
user.show_message("\red *click* *click*", 2)
|
||||
return
|
||||
playsound(user, 'sound/weapons/Gunshot.ogg', 100, 1)
|
||||
src.bullets--
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red <B>[] fires the [src] at []!</B>", user, target), 1, "\red You hear a gunshot", 2)
|
||||
|
||||
/obj/item/toy/ammo/gun
|
||||
name = "ammo-caps"
|
||||
@@ -174,10 +174,10 @@
|
||||
m_amt = 10
|
||||
var/amount_left = 7.0
|
||||
|
||||
update_icon()
|
||||
src.icon_state = text("357-[]", src.amount_left)
|
||||
src.desc = text("There are [] cap\s left! Make sure to recycle the box in an autolathe when it gets empty.", src.amount_left)
|
||||
return
|
||||
/obj/item/toy/ammo/gun/update_icon()
|
||||
src.icon_state = text("357-[]", src.amount_left)
|
||||
src.desc = text("There are [] cap\s left! Make sure to recycle the box in an autolathe when it gets empty.", src.amount_left)
|
||||
return
|
||||
|
||||
/*
|
||||
* Toy crossbow
|
||||
@@ -193,91 +193,91 @@
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
var/bullets = 5
|
||||
|
||||
examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
if (bullets)
|
||||
usr << "\blue It is loaded with [bullets] foam darts!"
|
||||
/obj/item/toy/crossbow/examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
if (bullets)
|
||||
usr << "\blue It is loaded with [bullets] foam darts!"
|
||||
|
||||
attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||||
if(bullets <= 4)
|
||||
user.drop_item()
|
||||
qdel(I)
|
||||
bullets++
|
||||
user << "\blue You load the foam dart into the crossbow."
|
||||
else
|
||||
usr << "\red It's already fully loaded."
|
||||
/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||||
if(bullets <= 4)
|
||||
user.drop_item()
|
||||
qdel(I)
|
||||
bullets++
|
||||
user << "\blue You load the foam dart into the crossbow."
|
||||
else
|
||||
usr << "\red It's already fully loaded."
|
||||
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if(!isturf(target.loc) || target == user) return
|
||||
if(flag) return
|
||||
/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if(!isturf(target.loc) || target == user) return
|
||||
if(flag) return
|
||||
|
||||
if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
else if (bullets)
|
||||
var/turf/trg = get_turf(target)
|
||||
var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src))
|
||||
bullets--
|
||||
D.icon_state = "foamdart"
|
||||
D.name = "foam dart"
|
||||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
else if (bullets)
|
||||
var/turf/trg = get_turf(target)
|
||||
var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src))
|
||||
bullets--
|
||||
D.icon_state = "foamdart"
|
||||
D.name = "foam dart"
|
||||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
|
||||
for(var/i=0, i<6, i++)
|
||||
if (D)
|
||||
if(D.loc == trg) break
|
||||
step_towards(D,trg)
|
||||
for(var/i=0, i<6, i++)
|
||||
if (D)
|
||||
if(D.loc == trg) break
|
||||
step_towards(D,trg)
|
||||
|
||||
for(var/mob/living/M in D.loc)
|
||||
if(!istype(M,/mob/living)) continue
|
||||
if(M == user) continue
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
O.show_message(text("\red [] was hit by the foam dart!", M), 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
qdel(D)
|
||||
return
|
||||
|
||||
for(var/atom/A in D.loc)
|
||||
if(A == user) continue
|
||||
if(A.density)
|
||||
new /obj/item/toy/ammo/crossbow(A.loc)
|
||||
qdel(D)
|
||||
|
||||
sleep(1)
|
||||
|
||||
spawn(10)
|
||||
if(D)
|
||||
new /obj/item/toy/ammo/crossbow(D.loc)
|
||||
for(var/mob/living/M in D.loc)
|
||||
if(!istype(M,/mob/living)) continue
|
||||
if(M == user) continue
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
O.show_message(text("\red [] was hit by the foam dart!", M), 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
qdel(D)
|
||||
return
|
||||
|
||||
return
|
||||
else if (bullets == 0)
|
||||
user.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red [] realized they were out of ammo and starting scrounging for some!", user), 1)
|
||||
for(var/atom/A in D.loc)
|
||||
if(A == user) continue
|
||||
if(A.density)
|
||||
new /obj/item/toy/ammo/crossbow(A.loc)
|
||||
qdel(D)
|
||||
|
||||
sleep(1)
|
||||
|
||||
spawn(10)
|
||||
if(D)
|
||||
new /obj/item/toy/ammo/crossbow(D.loc)
|
||||
qdel(D)
|
||||
|
||||
return
|
||||
else if (bullets == 0)
|
||||
user.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red [] realized they were out of ammo and starting scrounging for some!", user), 1)
|
||||
|
||||
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
// ******* Check
|
||||
|
||||
if (src.bullets > 0 && M.lying)
|
||||
if (src.bullets > 0 && M.lying)
|
||||
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O.client)
|
||||
O.show_message(text("\red <B>[] casually lines up a shot with []'s head and pulls the trigger!</B>", user, M), 1, "\red You hear the sound of foam against skull", 2)
|
||||
O.show_message(text("\red [] was hit in the head by the foam dart!", M), 1)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O.client)
|
||||
O.show_message(text("\red <B>[] casually lines up a shot with []'s head and pulls the trigger!</B>", user, M), 1, "\red You hear the sound of foam against skull", 2)
|
||||
O.show_message(text("\red [] was hit in the head by the foam dart!", M), 1)
|
||||
|
||||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
src.bullets--
|
||||
else if (M.lying && src.bullets == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client) O.show_message(text("\red <B>[] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</B>", user, M), 1, "\red You hear someone fall", 2)
|
||||
user.Weaken(5)
|
||||
return
|
||||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
src.bullets--
|
||||
else if (M.lying && src.bullets == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client) O.show_message(text("\red <B>[] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</B>", user, M), 1, "\red You hear someone fall", 2)
|
||||
user.Weaken(5)
|
||||
return
|
||||
|
||||
/obj/item/toy/ammo/crossbow
|
||||
name = "foam dart"
|
||||
@@ -310,26 +310,26 @@
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
var/hacked = 0
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
active = !( active )
|
||||
if (active)
|
||||
user << "\blue You extend the plastic blade with a quick flick of your wrist."
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 20, 1)
|
||||
if(hacked)
|
||||
icon_state = "swordrainbow"
|
||||
item_state = "swordrainbow"
|
||||
else
|
||||
icon_state = "swordblue"
|
||||
item_state = "swordblue"
|
||||
w_class = 4
|
||||
/obj/item/toy/sword/attack_self(mob/user as mob)
|
||||
active = !( active )
|
||||
if (active)
|
||||
user << "\blue You extend the plastic blade with a quick flick of your wrist."
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 20, 1)
|
||||
if(hacked)
|
||||
icon_state = "swordrainbow"
|
||||
item_state = "swordrainbow"
|
||||
else
|
||||
user << "\blue You push the plastic blade back down into the handle."
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 20, 1)
|
||||
icon_state = "sword0"
|
||||
item_state = "sword0"
|
||||
w_class = 2
|
||||
add_fingerprint(user)
|
||||
return
|
||||
icon_state = "swordblue"
|
||||
item_state = "swordblue"
|
||||
w_class = 4
|
||||
else
|
||||
user << "\blue You push the plastic blade back down into the handle."
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 20, 1)
|
||||
icon_state = "sword0"
|
||||
item_state = "sword0"
|
||||
w_class = 2
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
// Copied from /obj/item/weapon/melee/energy/sword/attackby
|
||||
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user)
|
||||
@@ -418,12 +418,12 @@
|
||||
var/uses = 30 //0 for unlimited uses
|
||||
var/instant = 0
|
||||
var/colourName = "red" //for updateIcon purposes
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</span>"
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
New()
|
||||
..()
|
||||
name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
/obj/item/toy/crayon/New()
|
||||
..()
|
||||
name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
|
||||
/*
|
||||
* Snap pops
|
||||
*/
|
||||
@@ -434,15 +434,15 @@
|
||||
icon_state = "snappop"
|
||||
w_class = 1
|
||||
|
||||
throw_impact(atom/hit_atom)
|
||||
..()
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||||
src.visible_message("\red The [src.name] explodes!","\red You hear a snap!")
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
qdel(src)
|
||||
/obj/item/toy/snappop/throw_impact(atom/hit_atom)
|
||||
..()
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||||
src.visible_message("<span class='suicide'> The [src.name] explodes!","</span> You hear a snap!")
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/toy/snappop/Crossed(H as mob|obj)
|
||||
if((ishuman(H))) //i guess carp and shit shouldn't set them off
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
desc = "A card used to provide ID and determine access across the station."
|
||||
icon_state = "id"
|
||||
item_state = "card-id"
|
||||
var/mining_points = 0 //For redeeming at mining equipment lockers
|
||||
var/mining_points = 0 //For redeeming at mining equipment vendors
|
||||
var/list/access = list()
|
||||
var/registered_name = null // The name registered_name on the card
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/obj/item/weapon/plastique/suicide_act(var/mob/user)
|
||||
. = (BRUTELOSS)
|
||||
viewers(user) << "<span class='suicide'>[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!</span>"
|
||||
user.visible_message("<span class='suicide'>[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!</span>")
|
||||
var/message_say = "FOR NO RAISIN!"
|
||||
if(user.mind)
|
||||
if(user.mind.special_role)
|
||||
|
||||
@@ -82,11 +82,11 @@
|
||||
force = 10.0
|
||||
throwforce = 10.0
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("<span class='suicide'>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>")
|
||||
return (BRUTELOSS)
|
||||
/obj/item/weapon/kitchen/utensil/knife/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
@@ -114,11 +114,11 @@
|
||||
origin_tech = "materials=1"
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("<span class='suicide'>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>")
|
||||
return (BRUTELOSS)
|
||||
/obj/item/weapon/kitchenknife/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/kitchenknife/ritual
|
||||
name = "ritual knife"
|
||||
@@ -238,13 +238,13 @@
|
||||
return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3
|
||||
|
||||
add_logs(user, M, "attacked", object="[src.name]")
|
||||
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
|
||||
|
||||
var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later.
|
||||
|
||||
if(prob(50))
|
||||
playsound(M, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
playsound(M, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
else
|
||||
playsound(M, 'sound/items/trayhit2.ogg', 50, 1)
|
||||
|
||||
@@ -277,8 +277,8 @@
|
||||
H.head.add_blood(H)
|
||||
if (H.glasses && prob(33))
|
||||
H.glasses.add_blood(H)
|
||||
|
||||
|
||||
|
||||
|
||||
M.visible_message("<span class='danger'>[user] slams [M] in the face with the tray!</span>", \
|
||||
"<span class='userdanger'>[user] slams [M] in the face with the tray, against your mask!</span>")
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
M.Weaken(2)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
var/active = 0
|
||||
|
||||
/obj/item/weapon/melee/energy/suicide_act(mob/user)
|
||||
viewers(user) << pick("<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>", \
|
||||
"<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>", \
|
||||
"<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/rejects_blood()
|
||||
@@ -24,7 +24,7 @@
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide.</span>"
|
||||
user.visible_message("<span class='suicide'>[user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/attack_self(mob/user)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
hitsound = 'sound/weapons/slash.ogg' //pls replace
|
||||
|
||||
/obj/item/weapon/melee/chainofcommand/suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
user.visible_message("<span class='suicide'>[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
var/construction_cost = list("metal"=750,"glass"=75)
|
||||
var/construction_time=100
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return (FIRELOSS)
|
||||
/obj/item/weapon/stock_parts/cell/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/crap
|
||||
name = "\improper Nanotrasen brand rechargable AA battery"
|
||||
|
||||
@@ -17,57 +17,59 @@
|
||||
var/icon_broken = "lockbox+b"
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id))
|
||||
if(src.broken)
|
||||
user << "\red It appears to be broken."
|
||||
return
|
||||
if(src.allowed(user))
|
||||
src.locked = !( src.locked )
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
user << "\red You lock the [src.name]!"
|
||||
return
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
user << "\red You unlock the [src.name]!"
|
||||
return
|
||||
else
|
||||
user << "\red Access Denied."
|
||||
return
|
||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
broken = 1
|
||||
locked = 0
|
||||
desc = "It appears to be broken."
|
||||
icon_state = src.icon_broken
|
||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src.loc)
|
||||
spark_system.start()
|
||||
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue \The [src] has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id))
|
||||
if(src.broken)
|
||||
user << "\red It appears to be broken."
|
||||
return
|
||||
if(src.allowed(user))
|
||||
src.locked = !( src.locked )
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
user << "\red You lock the [src.name]!"
|
||||
return
|
||||
else
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue \The [src] has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
|
||||
src.icon_state = src.icon_closed
|
||||
user << "\red You unlock the [src.name]!"
|
||||
return
|
||||
|
||||
if(!locked)
|
||||
..()
|
||||
else
|
||||
user << "\red It's locked!"
|
||||
return
|
||||
|
||||
|
||||
show_to(mob/user as mob)
|
||||
if(locked)
|
||||
user << "\red It's locked!"
|
||||
user << "\red Access Denied."
|
||||
return
|
||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
broken = 1
|
||||
locked = 0
|
||||
desc = "It appears to be broken."
|
||||
icon_state = src.icon_broken
|
||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src.loc)
|
||||
spark_system.start()
|
||||
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue \The [src] has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue \The [src] has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
|
||||
return
|
||||
if(!locked)
|
||||
..()
|
||||
else
|
||||
user << "\red It's locked!"
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/lockbox/show_to(mob/user as mob)
|
||||
if(locked)
|
||||
user << "\red It's locked!"
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/lockbox/can_be_inserted(obj/item/W, stop_messages = 0)
|
||||
if(locked)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/lockbox/loyalty
|
||||
name = "lockbox of loyalty implants"
|
||||
|
||||
@@ -137,6 +137,12 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/secure/can_be_inserted(obj/item/W, stop_messages = 0)
|
||||
if(locked)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
|
||||
// -----------------------------
|
||||
// Secure Briefcase
|
||||
// -----------------------------
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/storage/box/syndicate/
|
||||
New()
|
||||
..()
|
||||
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
|
||||
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
|
||||
if("bloodyspai")
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/clothing/mask/gas/voice(src)
|
||||
@@ -15,6 +15,14 @@
|
||||
new /obj/item/device/chameleon(src)
|
||||
return
|
||||
|
||||
if("bond")
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
|
||||
new /obj/item/weapon/silencer(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
return
|
||||
|
||||
if("screwed")
|
||||
new /obj/item/device/sbeacondrop/bomb(src)
|
||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
var/obj/item/weapon/stock_parts/cell/high/bcell = null
|
||||
var/hitcost = 1000
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>"
|
||||
return (FIRELOSS)
|
||||
/obj/item/weapon/melee/baton/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/baton/New()
|
||||
..()
|
||||
|
||||
@@ -49,10 +49,10 @@
|
||||
attack_verb = list("stabbed")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("<span class='suicide'>[user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is stabbing the [src.name] into \his heart! It looks like \he's trying to commit suicide.</span>")
|
||||
return(BRUTELOSS)
|
||||
/obj/item/weapon/screwdriver/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is stabbing the [src.name] into \his heart! It looks like \he's trying to commit suicide.</span>"))
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/screwdriver/New()
|
||||
switch(pick("red","blue","purple","brown","green","cyan","yellow"))
|
||||
|
||||
@@ -214,9 +214,8 @@ obj/item/weapon/twohanded/
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
|
||||
..()
|
||||
if((CLUMSY in user.mutations) && (wielded) &&prob(40))
|
||||
user << "\red You twirl around a bit before losing your balance and impaling yourself on the [src]."
|
||||
user.take_organ_damage(20,25)
|
||||
if((CLUMSY in user.mutations) && (wielded) && prob(40))
|
||||
impale(user)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
spawn(0)
|
||||
@@ -224,6 +223,13 @@ obj/item/weapon/twohanded/
|
||||
user.dir = i
|
||||
sleep(1)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/proc/impale(mob/living/user as mob)
|
||||
user << "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on the [src].</span>"
|
||||
if (force_wielded)
|
||||
user.take_organ_damage(20,25)
|
||||
else
|
||||
user.adjustStaminaLoss(25)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/IsShield()
|
||||
if(wielded)
|
||||
return 1
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
attack_verb = list("banned")
|
||||
|
||||
/obj/item/weapon/banhammer/suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.</span>"
|
||||
user.visible_message("<span class='suicide'>[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.</span>")
|
||||
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
|
||||
|
||||
/obj/item/weapon/banhammer/attack(mob/M, mob/user)
|
||||
@@ -32,9 +32,9 @@
|
||||
throwforce = 10
|
||||
w_class = 1
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
/obj/item/weapon/nullrod/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/sord
|
||||
name = "\improper SORD"
|
||||
@@ -48,9 +48,9 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return(BRUTELOSS)
|
||||
/obj/item/weapon/sord/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/claymore
|
||||
name = "claymore"
|
||||
@@ -65,12 +65,12 @@
|
||||
w_class = 3
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
IsShield()
|
||||
return 1
|
||||
/obj/item/weapon/claymore/IsShield()
|
||||
return 1
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return(BRUTELOSS)
|
||||
/obj/item/weapon/claymore/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/katana
|
||||
name = "katana"
|
||||
@@ -85,9 +85,9 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"
|
||||
return(BRUTELOSS)
|
||||
/obj/item/weapon/katana/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/katana/IsShield()
|
||||
return 1
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
new /obj/item/clothing/tie/waistcoat(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
|
||||
/*
|
||||
* Chef
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/cargotech(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/soft(src)
|
||||
@@ -33,7 +33,7 @@
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
// new /obj/item/weapon/cartridge/quartermaster(src)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
new /obj/item/clothing/head/welding(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/weapon/cartridge/ce(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
@@ -106,7 +106,7 @@
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel_eng(src)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
// new /obj/item/weapon/cartridge/engineering(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||
new /obj/item/clothing/under/rank/medical(src)
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
// new /obj/item/weapon/cartridge/medical(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
@@ -117,7 +117,7 @@
|
||||
new /obj/item/clothing/suit/labcoat/cmo(src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/shoes/brown (src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown (src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/device/flash(src)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
..()
|
||||
contents.Cut()
|
||||
new /obj/item/clothing/under/color/white( src )
|
||||
new /obj/item/clothing/shoes/white( src )
|
||||
new /obj/item/clothing/shoes/sneakers/white( src )
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/suit/labcoat/science(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
// new /obj/item/weapon/cartridge/signal/toxins(src)
|
||||
new /obj/item/device/radio/headset/headset_sci(src)
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
@@ -40,7 +40,7 @@
|
||||
new /obj/item/clothing/under/rank/research_director(src)
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/weapon/cartridge/rd(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/device/radio/headset/heads/rd(src)
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
new /obj/item/clothing/suit/armor/vest/capcarapace(src)
|
||||
new /obj/item/weapon/cartridge/captain(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
new /obj/item/clothing/gloves/captain(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
@@ -47,7 +47,7 @@
|
||||
new /obj/item/clothing/head/hopcap(src)
|
||||
new /obj/item/weapon/cartridge/hop(src)
|
||||
new /obj/item/device/radio/headset/heads/hop(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/weapon/storage/box/ids(src)
|
||||
new /obj/item/weapon/storage/box/ids(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
@@ -203,7 +203,7 @@
|
||||
new /obj/item/clothing/suit/det_suit(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
New()
|
||||
new /obj/item/clothing/under/color/orange( src )
|
||||
new /obj/item/clothing/shoes/orange( src )
|
||||
new /obj/item/clothing/shoes/sneakers/orange( src )
|
||||
return
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/weapon/paper/Court (src)
|
||||
new /obj/item/weapon/paper/Court (src)
|
||||
new /obj/item/weapon/paper/Court (src)
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/bomb_suit( src )
|
||||
new /obj/item/clothing/under/color/black( src )
|
||||
new /obj/item/clothing/shoes/black( src )
|
||||
new /obj/item/clothing/shoes/sneakers/black( src )
|
||||
new /obj/item/clothing/head/bomb_hood( src )
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/bomb_suit/security( src )
|
||||
new /obj/item/clothing/under/rank/security( src )
|
||||
new /obj/item/clothing/shoes/brown( src )
|
||||
new /obj/item/clothing/shoes/sneakers/brown( src )
|
||||
new /obj/item/clothing/head/bomb_hood/security( src )
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
new /obj/item/clothing/under/color/blue(src)
|
||||
new /obj/item/clothing/under/color/blue(src)
|
||||
new /obj/item/clothing/under/color/blue(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -58,9 +58,9 @@
|
||||
new /obj/item/clothing/under/color/pink(src)
|
||||
new /obj/item/clothing/under/color/pink(src)
|
||||
new /obj/item/clothing/under/color/pink(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/black
|
||||
@@ -72,9 +72,9 @@
|
||||
new /obj/item/clothing/under/color/black(src)
|
||||
new /obj/item/clothing/under/color/black(src)
|
||||
new /obj/item/clothing/under/color/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/head/that(src)
|
||||
new /obj/item/clothing/head/that(src)
|
||||
new /obj/item/clothing/head/that(src)
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
/obj/structure/closet/wardrobe/chaplain_black/New()
|
||||
new /obj/item/clothing/under/rank/chaplain(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/suit/nun(src)
|
||||
new /obj/item/clothing/head/nun_hood(src)
|
||||
new /obj/item/clothing/suit/chaplain_hoodie(src)
|
||||
@@ -113,9 +113,9 @@
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -129,9 +129,9 @@
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -144,9 +144,9 @@
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -162,9 +162,9 @@
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -178,9 +178,9 @@
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -193,9 +193,9 @@
|
||||
new /obj/item/clothing/under/color/white(src)
|
||||
new /obj/item/clothing/under/color/white(src)
|
||||
new /obj/item/clothing/under/color/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -209,10 +209,10 @@
|
||||
new /obj/item/clothing/under/pj/red(src)
|
||||
new /obj/item/clothing/under/pj/blue(src)
|
||||
new /obj/item/clothing/under/pj/blue(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -228,9 +228,9 @@
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -244,8 +244,8 @@
|
||||
new /obj/item/clothing/under/rank/roboticist(src)
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/clothing/suit/labcoat(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/soft/black(src)
|
||||
@@ -261,8 +261,8 @@
|
||||
/obj/structure/closet/wardrobe/chemistry_white/New()
|
||||
new /obj/item/clothing/under/rank/chemist(src)
|
||||
new /obj/item/clothing/under/rank/chemist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/suit/labcoat/chemist(src)
|
||||
new /obj/item/clothing/suit/labcoat/chemist(src)
|
||||
return
|
||||
@@ -276,8 +276,8 @@
|
||||
/obj/structure/closet/wardrobe/genetics_white/New()
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/suit/labcoat/genetics(src)
|
||||
new /obj/item/clothing/suit/labcoat/genetics(src)
|
||||
return
|
||||
@@ -291,8 +291,8 @@
|
||||
/obj/structure/closet/wardrobe/virology_white/New()
|
||||
new /obj/item/clothing/under/rank/virologist(src)
|
||||
new /obj/item/clothing/under/rank/virologist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/clothing/suit/labcoat/virologist(src)
|
||||
new /obj/item/clothing/suit/labcoat/virologist(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
@@ -309,9 +309,9 @@
|
||||
new /obj/item/clothing/under/color/grey(src)
|
||||
new /obj/item/clothing/under/color/grey(src)
|
||||
new /obj/item/clothing/under/color/grey(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/head/soft/grey(src)
|
||||
new /obj/item/clothing/head/soft/grey(src)
|
||||
new /obj/item/clothing/head/soft/grey(src)
|
||||
@@ -334,7 +334,7 @@
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/pink(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
return
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
|
||||
|
||||
/datum/song/Topic(href, href_list)
|
||||
if(!in_range(instrumentObj, usr) || (issilicon(usr) && instrumentObj.loc != usr) || !isliving(usr) || !usr.canmove || usr.restrained())
|
||||
if(usr.canUseTopic(src))
|
||||
usr << browse(null, "window=instrument")
|
||||
usr.unset_machine()
|
||||
return
|
||||
|
||||
@@ -39,13 +39,20 @@
|
||||
buckle_mob(M, user)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/afterbuckle(mob/M as mob) // Called after somebody buckled / unbuckled
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/unbuckle()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
|
||||
var/M = buckled_mob
|
||||
buckled_mob = null
|
||||
|
||||
afterbuckle(M)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/manual_unbuckle(mob/user as mob)
|
||||
@@ -104,6 +111,8 @@
|
||||
M.update_canmove()
|
||||
src.buckled_mob = M
|
||||
src.add_fingerprint(user)
|
||||
|
||||
afterbuckle(M)
|
||||
return
|
||||
|
||||
/*
|
||||
@@ -116,30 +125,18 @@
|
||||
anchored = 0
|
||||
var/const/buckled_pixel_y_offset = 6 //Mobs buckled will have their pixel_y offset by this much
|
||||
|
||||
/obj/structure/stool/bed/roller/afterbuckle(mob/M as mob)
|
||||
if(buckled_mob)
|
||||
density = 1
|
||||
icon_state = "up"
|
||||
M.pixel_y += buckled_pixel_y_offset
|
||||
else
|
||||
density = 0
|
||||
icon_state = "down"
|
||||
M.pixel_y -= buckled_pixel_y_offset
|
||||
|
||||
/obj/structure/stool/bed/roller/Move()
|
||||
..()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src)
|
||||
buckled_mob.loc = src.loc
|
||||
|
||||
/obj/structure/stool/bed/roller/buckle_mob(mob/M as mob, mob/user as mob)
|
||||
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || user.lying || user.stat || M.buckled || istype(usr, /mob/living/silicon/pai) )
|
||||
return
|
||||
M.pixel_y += buckled_pixel_y_offset
|
||||
density = 1
|
||||
icon_state = "up"
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/roller/manual_unbuckle(mob/user as mob)
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt
|
||||
buckled_mob.pixel_y -= buckled_pixel_y_offset
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.update_canmove()
|
||||
buckled_mob = null
|
||||
density = 0
|
||||
icon_state = "down"
|
||||
..()
|
||||
return
|
||||
@@ -96,25 +96,40 @@
|
||||
/obj/structure/stool/bed/chair/comfy
|
||||
name = "comfy chair"
|
||||
desc = "It looks comfy."
|
||||
icon_state = "comfychair"
|
||||
color = rgb(255,255,255)
|
||||
var/image/armrest = null
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/New()
|
||||
armrest = image("icons/obj/objects.dmi", "comfychair_armrest")
|
||||
armrest.layer = MOB_LAYER + 0.1
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/afterbuckle()
|
||||
if(buckled_mob)
|
||||
overlays += armrest
|
||||
else
|
||||
overlays -= armrest
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/brown
|
||||
icon_state = "comfychair_brown"
|
||||
color = rgb(255,113,0)
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/beige
|
||||
icon_state = "comfychair_beige"
|
||||
color = rgb(255,253,195)
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/teal
|
||||
icon_state = "comfychair_teal"
|
||||
color = rgb(0,255,255)
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/black
|
||||
color = rgb(167,164,153)
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/lime
|
||||
color = rgb(255,251,0)
|
||||
|
||||
/obj/structure/stool/bed/chair/office
|
||||
anchored = 0
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/black
|
||||
icon_state = "comfychair_black"
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/lime
|
||||
icon_state = "comfychair_lime"
|
||||
|
||||
/obj/structure/stool/bed/chair/office/Move()
|
||||
..()
|
||||
handle_rotation()
|
||||
|
||||
@@ -154,11 +154,8 @@
|
||||
on = !on
|
||||
update_icon()
|
||||
if(on)
|
||||
if (M.loc == loc)
|
||||
wash(M)
|
||||
check_heat(M)
|
||||
for (var/atom/movable/G in loc)
|
||||
G.clean_blood()
|
||||
Crossed(G)
|
||||
|
||||
|
||||
/obj/machinery/shower/attackby(obj/item/I, mob/user)
|
||||
|
||||
@@ -288,23 +288,31 @@
|
||||
/turf/simulated/wall/proc/thermitemelt(mob/user as mob)
|
||||
if(mineral == "diamond")
|
||||
return
|
||||
|
||||
overlays = list()
|
||||
var/obj/effect/overlay/O = new/obj/effect/overlay( src )
|
||||
O.name = "Thermite"
|
||||
O.name = "thermite"
|
||||
O.desc = "Looks hot."
|
||||
O.icon = 'icons/effects/fire.dmi'
|
||||
O.icon_state = "2"
|
||||
O.anchored = 1
|
||||
O.opacity = 1
|
||||
O.density = 1
|
||||
O.layer = 5
|
||||
|
||||
var/turf/simulated/floor/F = ChangeTurf(/turf/simulated/floor/plating)
|
||||
F.burn_tile()
|
||||
F.icon_state = "wall_thermite"
|
||||
user << "<span class='warning'>The thermite melts through the wall.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
|
||||
spawn(100)
|
||||
if(O) qdel(O)
|
||||
// F.sd_LumReset() //TODO: ~Carn
|
||||
if(thermite >= 50)
|
||||
var/turf/simulated/floor/F = ChangeTurf(/turf/simulated/floor/plating)
|
||||
F.burn_tile()
|
||||
F.icon_state = "wall_thermite"
|
||||
F.add_hiddenprint(user)
|
||||
spawn(max(100,300-thermite))
|
||||
if(O) qdel(O)
|
||||
else
|
||||
thermite = 0
|
||||
spawn(50)
|
||||
if(O) qdel(O)
|
||||
return
|
||||
|
||||
/turf/simulated/wall/meteorhit(obj/M as obj)
|
||||
|
||||
@@ -65,10 +65,10 @@
|
||||
return
|
||||
|
||||
|
||||
viewers(src) << pick("\red <b>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</b>", \
|
||||
visible_message(pick("\red <b>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[src] is twisting \his own neck! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[src] is holding \his breath! It looks like \he's trying to commit suicide.</b>")
|
||||
"\red <b>[src] is holding \his breath! It looks like \he's trying to commit suicide.</b>"))
|
||||
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
updatehealth()
|
||||
|
||||
|
||||
@@ -13,7 +13,9 @@ var/list/admin_verbs_default = list(
|
||||
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
|
||||
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
|
||||
/client/proc/secrets,
|
||||
/client/proc/reload_admins
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel /*admin-pm list*/
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
/client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/
|
||||
@@ -33,8 +35,6 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggle_view_range, /*changes how far we can see*/
|
||||
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
|
||||
/datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
|
||||
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
||||
/client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/quick_create_object_html = null
|
||||
var/pathtext = null
|
||||
|
||||
pathtext = input("Select the path of the object you wish to create.", "Path", "/obj") in list("/obj","/obj/structure","/obj/item","/obj/item/weapon","/obj/machinery")
|
||||
pathtext = input("Select the path of the object you wish to create.", "Path", "/obj") in list("/obj","/obj/structure","/obj/item","/obj/item/clothing","/obj/item/weapon/reagent_containers/food","/obj/item/weapon","/obj/machinery")
|
||||
|
||||
var path = text2path(pathtext)
|
||||
|
||||
|
||||
@@ -1076,7 +1076,7 @@
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/observer = M
|
||||
observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(observer), slot_w_uniform)
|
||||
observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(observer), slot_shoes)
|
||||
observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), slot_shoes)
|
||||
M.Paralyse(5)
|
||||
sleep(5)
|
||||
M.loc = pick(tdomeobserve)
|
||||
@@ -1203,7 +1203,7 @@
|
||||
show_player_panel(M)
|
||||
|
||||
else if(href_list["adminplayerobservejump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if(!isobserver(usr) && !check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["adminplayerobservejump"])
|
||||
|
||||
@@ -1213,7 +1213,7 @@
|
||||
C.jumptomob(M)
|
||||
|
||||
else if(href_list["adminplayerobservecoodjump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if(!isobserver(usr) && !check_rights(R_ADMIN)) return
|
||||
|
||||
var/x = text2num(href_list["X"])
|
||||
var/y = text2num(href_list["Y"])
|
||||
@@ -1372,7 +1372,7 @@
|
||||
H << "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. [input]. Message ends.\""
|
||||
|
||||
else if(href_list["jumpto"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if(!isobserver(usr) && !check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["jumpto"])
|
||||
usr.client.jumptomob(M)
|
||||
|
||||
@@ -662,7 +662,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
M.equip_to_slot_or_del(BPK, slot_back,1)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.assignment = "Assistant"
|
||||
@@ -677,7 +677,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
|
||||
if ("standard space gear")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit)
|
||||
@@ -692,7 +692,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
|
||||
else
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
|
||||
@@ -704,7 +704,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/det(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
|
||||
@@ -716,7 +716,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
if ("tournament chef") //Steven Seagal FTW
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand)
|
||||
@@ -726,7 +726,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if ("tournament janitor")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
var/obj/item/weapon/storage/backpack/backpack = new(M)
|
||||
for(var/obj/item/I in backpack)
|
||||
qdel(I)
|
||||
@@ -749,7 +749,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if ("lasertag red")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/red(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/red(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/redtaghelm(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
@@ -760,7 +760,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if ("lasertag blue")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/blue(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/blue(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/blue(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bluetaghelm(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
@@ -771,14 +771,14 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if ("pirate")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
|
||||
|
||||
if ("space pirate")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
|
||||
@@ -788,7 +788,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
/*
|
||||
if ("soviet soldier")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
|
||||
*/
|
||||
|
||||
@@ -816,7 +816,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if("masked killer")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
|
||||
@@ -835,7 +835,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
|
||||
if("assassin")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
@@ -917,7 +917,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
*/
|
||||
if("centcom official")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
@@ -989,7 +989,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("blue wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
@@ -1001,7 +1001,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
|
||||
if("red wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
@@ -1013,7 +1013,7 @@ var/global/list/g_fancy_list_of_safe_types = null
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
|
||||
if("marisa wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
name = "Chef"
|
||||
corpseuniform = /obj/item/clothing/under/rank/chef
|
||||
corpsesuit = /obj/item/clothing/suit/chef/classic
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/black
|
||||
corpsehelmet = /obj/item/clothing/head/chefhat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
@@ -177,7 +177,7 @@
|
||||
corpsesuit = /obj/item/clothing/suit/labcoat
|
||||
corpseback = /obj/item/weapon/storage/backpack/medic
|
||||
corpsepocket1 = /obj/item/device/flashlight/pen
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Medical Doctor"
|
||||
corpseidaccess = "Medical Doctor"
|
||||
@@ -187,7 +187,7 @@
|
||||
corpseradio = /obj/item/device/radio/headset/headset_eng
|
||||
corpseuniform = /obj/item/clothing/under/rank/engineer
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/orange
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/orange
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpsegloves = /obj/item/clothing/gloves/yellow
|
||||
corpsehelmet = /obj/item/clothing/head/hardhat
|
||||
@@ -218,7 +218,7 @@
|
||||
corpseuniform = /obj/item/clothing/under/rank/scientist
|
||||
corpsesuit = /obj/item/clothing/suit/labcoat/science
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseshoes = /obj/item/clothing/shoes/white
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/white
|
||||
corpseid = 1
|
||||
corpseidjob = "Scientist"
|
||||
corpseidaccess = "Scientist"
|
||||
@@ -228,7 +228,7 @@
|
||||
corpseuniform = /obj/item/clothing/under/rank/miner
|
||||
corpsegloves = /obj/item/clothing/gloves/black
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Shaft Miner"
|
||||
corpseidaccess = "Shaft Miner"
|
||||
@@ -246,7 +246,7 @@
|
||||
corpseradio = /obj/item/device/radio/headset/heads/hop
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_officer
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/black
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses
|
||||
corpseid = 1
|
||||
corpseidjob = "Bridge Officer"
|
||||
|
||||
@@ -82,6 +82,14 @@
|
||||
holder.icon_state = "hudhealthy"
|
||||
C.images += holder
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/night
|
||||
name = "Night Vision Health Scanner HUD"
|
||||
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
|
||||
icon_state = "healthhudnight"
|
||||
item_state = "glasses"
|
||||
darkness_view = 8
|
||||
invis_view = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/obj/item/clothing/glasses/hud/security
|
||||
name = "Security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
|
||||
@@ -94,6 +102,12 @@
|
||||
darkness_view = 1
|
||||
flash_protect = 1
|
||||
tint = 1
|
||||
/obj/item/clothing/glasses/hud/security/night
|
||||
name = "Night Vision Security HUD"
|
||||
desc = "An advanced heads-up display which provides id data and vision in complete darkness."
|
||||
icon_state = "securityhudnight"
|
||||
darkness_view = 8
|
||||
invis_view = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/sunglasses/emp_act(severity)
|
||||
if(emagged == 0)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/obj/item/clothing/shoes/black
|
||||
/obj/item/clothing/shoes/sneakers
|
||||
|
||||
/obj/item/clothing/shoes/sneakers/black
|
||||
name = "black shoes"
|
||||
icon_state = "black"
|
||||
item_color = "black"
|
||||
@@ -12,7 +14,7 @@
|
||||
redcoat
|
||||
item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
|
||||
|
||||
/obj/item/clothing/shoes/brown
|
||||
/obj/item/clothing/shoes/sneakers/brown
|
||||
name = "brown shoes"
|
||||
desc = "A pair of brown shoes."
|
||||
icon_state = "brown"
|
||||
@@ -31,55 +33,55 @@
|
||||
cmo
|
||||
item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
|
||||
|
||||
/obj/item/clothing/shoes/blue
|
||||
/obj/item/clothing/shoes/sneakers/blue
|
||||
name = "blue shoes"
|
||||
icon_state = "blue"
|
||||
item_color = "blue"
|
||||
|
||||
/obj/item/clothing/shoes/green
|
||||
/obj/item/clothing/shoes/sneakers/green
|
||||
name = "green shoes"
|
||||
icon_state = "green"
|
||||
item_color = "green"
|
||||
|
||||
/obj/item/clothing/shoes/yellow
|
||||
/obj/item/clothing/shoes/sneakers/yellow
|
||||
name = "yellow shoes"
|
||||
icon_state = "yellow"
|
||||
item_color = "yellow"
|
||||
|
||||
/obj/item/clothing/shoes/purple
|
||||
/obj/item/clothing/shoes/sneakers/purple
|
||||
name = "purple shoes"
|
||||
icon_state = "purple"
|
||||
item_color = "purple"
|
||||
|
||||
/obj/item/clothing/shoes/brown
|
||||
/obj/item/clothing/shoes/sneakers/brown
|
||||
name = "brown shoes"
|
||||
icon_state = "brown"
|
||||
item_color = "brown"
|
||||
|
||||
/obj/item/clothing/shoes/red
|
||||
/obj/item/clothing/shoes/sneakers/red
|
||||
name = "red shoes"
|
||||
desc = "Stylish red shoes."
|
||||
icon_state = "red"
|
||||
item_color = "red"
|
||||
|
||||
/obj/item/clothing/shoes/white
|
||||
/obj/item/clothing/shoes/sneakers/white
|
||||
name = "white shoes"
|
||||
icon_state = "white"
|
||||
permeability_coefficient = 0.01
|
||||
item_color = "white"
|
||||
|
||||
/obj/item/clothing/shoes/rainbow
|
||||
/obj/item/clothing/shoes/sneakers/rainbow
|
||||
name = "rainbow shoes"
|
||||
desc = "Very gay shoes."
|
||||
icon_state = "rain_bow"
|
||||
item_color = "rainbow"
|
||||
|
||||
/obj/item/clothing/shoes/orange
|
||||
/obj/item/clothing/shoes/sneakers/orange
|
||||
name = "orange shoes"
|
||||
icon_state = "orange"
|
||||
item_color = "orange"
|
||||
|
||||
/obj/item/clothing/shoes/orange/attack_self(mob/user as mob)
|
||||
/obj/item/clothing/shoes/sneakers/orange/attack_self(mob/user as mob)
|
||||
if (src.chained)
|
||||
src.chained = null
|
||||
src.slowdown = SHOES_SLOWDOWN
|
||||
@@ -87,7 +89,7 @@
|
||||
src.icon_state = "orange"
|
||||
return
|
||||
|
||||
/obj/item/clothing/shoes/orange/attackby(H as obj, loc)
|
||||
/obj/item/clothing/shoes/sneakers/orange/attackby(H as obj, loc)
|
||||
..()
|
||||
if ((istype(H, /obj/item/weapon/handcuffs) && !( src.chained )))
|
||||
//H = null
|
||||
@@ -98,7 +100,7 @@
|
||||
src.icon_state = "orange1"
|
||||
return
|
||||
|
||||
/obj/item/clothing/shoes/orange/attack_hand(mob/user)
|
||||
/obj/item/clothing/shoes/sneakers/orange/attack_hand(mob/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/C = user
|
||||
if(C.shoes == src && src.chained == 1)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
flags = NOSLIP
|
||||
origin_tech = "syndicate=3"
|
||||
|
||||
/obj/item/clothing/shoes/mime
|
||||
/obj/item/clothing/shoes/sneakers/mime
|
||||
name = "mime shoes"
|
||||
icon_state = "mime"
|
||||
item_color = "mime"
|
||||
|
||||
@@ -63,80 +63,80 @@
|
||||
item_state = "y_suit"
|
||||
item_color = "yellow"
|
||||
|
||||
/obj/item/clothing/under/psyche
|
||||
/obj/item/clothing/under/color/psyche
|
||||
name = "psychedelic jumpsuit"
|
||||
desc = "Groovy!"
|
||||
icon_state = "psyche"
|
||||
item_color = "psyche"
|
||||
|
||||
/obj/item/clothing/under/lightblue
|
||||
/obj/item/clothing/under/color/lightblue
|
||||
name = "lightblue jumpsuit"
|
||||
desc = "lightblue"
|
||||
icon_state = "lightblue"
|
||||
item_color = "lightblue"
|
||||
|
||||
/obj/item/clothing/under/aqua
|
||||
/obj/item/clothing/under/color/aqua
|
||||
name = "aqua jumpsuit"
|
||||
desc = "aqua"
|
||||
icon_state = "aqua"
|
||||
item_color = "aqua"
|
||||
|
||||
/obj/item/clothing/under/purple
|
||||
/obj/item/clothing/under/color/purple
|
||||
name = "purple jumpsuit"
|
||||
desc = "purple"
|
||||
icon_state = "purple"
|
||||
item_state = "p_suit"
|
||||
item_color = "purple"
|
||||
|
||||
/obj/item/clothing/under/lightpurple
|
||||
/obj/item/clothing/under/color/lightpurple
|
||||
name = "lightpurple jumpsuit"
|
||||
desc = "lightpurple"
|
||||
icon_state = "lightpurple"
|
||||
item_color = "lightpurple"
|
||||
|
||||
/obj/item/clothing/under/lightgreen
|
||||
/obj/item/clothing/under/color/lightgreen
|
||||
name = "lightgreen jumpsuit"
|
||||
desc = "lightgreen"
|
||||
icon_state = "lightgreen"
|
||||
item_color = "lightgreen"
|
||||
|
||||
/obj/item/clothing/under/lightblue
|
||||
/obj/item/clothing/under/color/lightblue
|
||||
name = "lightblue jumpsuit"
|
||||
desc = "lightblue"
|
||||
icon_state = "lightblue"
|
||||
item_color = "lightblue"
|
||||
|
||||
/obj/item/clothing/under/lightbrown
|
||||
/obj/item/clothing/under/color/lightbrown
|
||||
name = "lightbrown jumpsuit"
|
||||
desc = "lightbrown"
|
||||
icon_state = "lightbrown"
|
||||
item_color = "lightbrown"
|
||||
|
||||
/obj/item/clothing/under/brown
|
||||
/obj/item/clothing/under/color/brown
|
||||
name = "brown jumpsuit"
|
||||
desc = "brown"
|
||||
icon_state = "brown"
|
||||
item_color = "brown"
|
||||
|
||||
/obj/item/clothing/under/yellowgreen
|
||||
/obj/item/clothing/under/color/yellowgreen
|
||||
name = "yellowgreen jumpsuit"
|
||||
desc = "yellowgreen"
|
||||
icon_state = "yellowgreen"
|
||||
item_color = "yellowgreen"
|
||||
|
||||
/obj/item/clothing/under/darkblue
|
||||
/obj/item/clothing/under/color/darkblue
|
||||
name = "darkblue jumpsuit"
|
||||
desc = "darkblue"
|
||||
icon_state = "darkblue"
|
||||
item_color = "darkblue"
|
||||
|
||||
/obj/item/clothing/under/lightred
|
||||
/obj/item/clothing/under/color/lightred
|
||||
name = "lightred jumpsuit"
|
||||
desc = "lightred"
|
||||
icon_state = "lightred"
|
||||
item_color = "lightred"
|
||||
|
||||
/obj/item/clothing/under/darkred
|
||||
/obj/item/clothing/under/color/darkred
|
||||
name = "darkred jumpsuit"
|
||||
desc = "darkred"
|
||||
icon_state = "darkred"
|
||||
|
||||
@@ -52,9 +52,9 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat)
|
||||
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grown/log/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grown/log/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
@@ -98,9 +98,9 @@
|
||||
throw_range = 3
|
||||
plant_type = 0
|
||||
seed = "/obj/item/seeds/sunflowerseed"
|
||||
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grown/sunflower/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grown/novaflower
|
||||
name = "novaflower"
|
||||
@@ -117,12 +117,12 @@
|
||||
plant_type = 0
|
||||
seed = "/obj/item/seeds/novaflowerseed"
|
||||
attack_verb = list("seared", "heated", "whacked", "steamed")
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
if(reagents)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("capsaicin", round(potency, 1))
|
||||
force = round((5+potency/5), 1)
|
||||
/obj/item/weapon/grown/novaflower/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
if(reagents)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("capsaicin", round(potency, 1))
|
||||
force = round((5+potency/5), 1)
|
||||
|
||||
/obj/item/weapon/grown/nettle // -- Skie
|
||||
desc = "It's probably <B>not</B> wise to touch it with bare hands..."
|
||||
@@ -139,12 +139,12 @@
|
||||
plant_type = 1
|
||||
origin_tech = "combat=1"
|
||||
seed = "/obj/item/seeds/nettleseed"
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
if(reagents)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("sacid", round(potency, 1))
|
||||
force = round((5+potency/5), 1)
|
||||
/obj/item/weapon/grown/nettle/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
if(reagents)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("sacid", round(potency, 1))
|
||||
force = round((5+potency/5), 1)
|
||||
|
||||
/obj/item/weapon/grown/deathnettle // -- Skie
|
||||
desc = "The \red glowing \black nettle incites \red<B> rage</B>\black in you just from looking at it!"
|
||||
@@ -162,16 +162,16 @@
|
||||
seed = "/obj/item/seeds/deathnettleseed"
|
||||
origin_tech = "combat=3"
|
||||
attack_verb = list("stung")
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
if(reagents)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("pacid", round(potency, 1))
|
||||
force = round((5+potency/2.5), 1)
|
||||
/obj/item/weapon/grown/deathnettle/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
if(reagents)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("pacid", round(potency, 1))
|
||||
force = round((5+potency/2.5), 1)
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return (BRUTELOSS|TOXLOSS)
|
||||
/obj/item/weapon/grown/deathnettle/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|TOXLOSS)
|
||||
|
||||
/obj/item/weapon/grown/bananapeel
|
||||
name = "banana peel"
|
||||
@@ -183,8 +183,8 @@
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
/obj/item/weapon/grown/bananapeel/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grown/corncob
|
||||
name = "corn cob"
|
||||
@@ -196,5 +196,5 @@
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
New(var/loc, var/potency = 10)
|
||||
..()
|
||||
/obj/item/weapon/grown/corncob/New(var/loc, var/potency = 10)
|
||||
..()
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
item_state = "analyzer"
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
return 0
|
||||
/obj/item/device/analyzer/plant_analyzer/attack_self(mob/user as mob)
|
||||
return 0
|
||||
|
||||
// *************************************
|
||||
// Hydroponics Tools
|
||||
@@ -28,13 +28,13 @@
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("weedkiller", 100)
|
||||
/obj/item/weapon/reagent_containers/spray/weedspray/New()
|
||||
..()
|
||||
reagents.add_reagent("weedkiller", 100)
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return (TOXLOSS)
|
||||
/obj/item/weapon/reagent_containers/spray/weedspray/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pestspray // -- Skie
|
||||
desc = "It's some pest eliminator spray! <I>Do not inhale!</I>"
|
||||
@@ -50,13 +50,13 @@
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("pestkiller", 100)
|
||||
/obj/item/weapon/reagent_containers/spray/pestspray/New()
|
||||
..()
|
||||
reagents.add_reagent("pestkiller", 100)
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return (TOXLOSS)
|
||||
/obj/item/weapon/reagent_containers/spray/pestspray/suicide_act(mob/user)
|
||||
viewers(user) << "<span class='suicide'>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/weapon/minihoe // -- Numbers
|
||||
name = "mini hoe"
|
||||
@@ -84,32 +84,32 @@
|
||||
icon_state = "bottle16"
|
||||
w_class = 1.0
|
||||
|
||||
New()
|
||||
..()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/New()
|
||||
..()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez
|
||||
name = "bottle of E-Z-Nutrient"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("eznutriment", 30)
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez/New()
|
||||
..()
|
||||
reagents.add_reagent("eznutriment", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z
|
||||
name = "bottle of Left 4 Zed"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle18"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("left4zednutriment", 30)
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z/New()
|
||||
..()
|
||||
reagents.add_reagent("left4zednutriment", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh
|
||||
name = "bottle of Robust Harvest"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle15"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("robustharvestnutriment", 30)
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh/New()
|
||||
..()
|
||||
reagents.add_reagent("robustharvestnutriment", 30)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
/obj/machinery/mineral/ore_redemption
|
||||
name = "ore redemption machine"
|
||||
desc = "A machine that accepts ore and instantly transforms it into workable material sheets, but cannot produce alloys such as Plasteel. Points for ore are generated based on type and can be redeemed at a mining equipment locker."
|
||||
desc = "A machine that accepts ore and instantly transforms it into workable material sheets, but cannot produce alloys such as Plasteel. Points for ore are generated based on type and can be redeemed at a mining equipment vendor."
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "ore_redemption"
|
||||
density = 1
|
||||
@@ -145,11 +145,11 @@
|
||||
/obj/machinery/mineral/ore_redemption/ex_act()
|
||||
return //So some chucklefuck doesn't ruin miners reward with an explosion
|
||||
|
||||
/**********************Mining Equipment Locker**************************/
|
||||
/**********************Mining Equipment Vendor**************************/
|
||||
|
||||
/obj/machinery/mineral/equipment_locker
|
||||
name = "mining equipment locker"
|
||||
desc = "An equipment locker for miners, points collected at an ore redemption machine can be spent here."
|
||||
/obj/machinery/mineral/equipment_vendor
|
||||
name = "mining equipment vendor"
|
||||
desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "mining"
|
||||
density = 1
|
||||
@@ -184,14 +184,14 @@
|
||||
src.equipment_path = path
|
||||
src.cost = cost
|
||||
|
||||
/obj/machinery/mineral/equipment_locker/attack_hand(user as mob)
|
||||
/obj/machinery/mineral/equipment_vendor/attack_hand(user as mob)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/mineral/equipment_locker/interact(mob/user)
|
||||
/obj/machinery/mineral/equipment_vendor/interact(mob/user)
|
||||
var/dat
|
||||
dat += text("<b>Mining Equipment Locker</b><br><br>")
|
||||
dat += text("<b>Mining Equipment vendor</b><br><br>")
|
||||
|
||||
if(istype(inserted_id))
|
||||
dat += "You have [inserted_id.mining_points] mining points collected. <A href='?src=\ref[src];choice=eject'>Eject ID.</A><br>"
|
||||
@@ -203,10 +203,10 @@
|
||||
dat += "<tr><td>[prize.equipment_name]</td><td>[prize.cost]</td><td><A href='?src=\ref[src];purchase=\ref[prize]'>Purchase</A></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
user << browse("[dat]", "window=mining_equipment_locker")
|
||||
user << browse("[dat]", "window=mining_equipment_vendor")
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/equipment_locker/Topic(href, href_list)
|
||||
/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(href_list["choice"])
|
||||
@@ -234,7 +234,7 @@
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/equipment_locker/attackby(obj/item/I as obj, mob/user as mob)
|
||||
/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/mining_voucher))
|
||||
RedeemVoucher(I, user)
|
||||
return
|
||||
@@ -248,7 +248,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/machinery/mineral/equipment_locker/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer)
|
||||
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer)
|
||||
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Resonator", "Kinetic Accelerator", "Mining Drone")
|
||||
if(!selection || !Adjacent(redeemer) || voucher.gc_destroyed || voucher.loc != redeemer)
|
||||
return
|
||||
@@ -262,16 +262,16 @@
|
||||
new /obj/item/weapon/weldingtool/hugetank(src.loc)
|
||||
qdel(voucher)
|
||||
|
||||
/obj/machinery/mineral/equipment_locker/ex_act()
|
||||
/obj/machinery/mineral/equipment_vendor/ex_act()
|
||||
return
|
||||
|
||||
/**********************Mining Equipment Locker Items**************************/
|
||||
/**********************Mining Equipment Vendor Items**************************/
|
||||
|
||||
/**********************Mining Equipment Voucher**********************/
|
||||
|
||||
/obj/item/weapon/mining_voucher
|
||||
name = "mining voucher"
|
||||
desc = "A token to redeem a piece of equipment. Use it on a mining equipment locker."
|
||||
desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "mining_voucher"
|
||||
w_class = 1
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
power_environ = 0
|
||||
power_equip = 0
|
||||
power_light = 0
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
|
||||
/area/mine/unexplored
|
||||
name = "Mine"
|
||||
@@ -25,6 +26,7 @@
|
||||
power_environ = 0
|
||||
power_equip = 0
|
||||
power_light = 0
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
|
||||
/area/mine/lobby
|
||||
name = "Mining station"
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/device/mining_scanner(src)
|
||||
new /obj/item/weapon/storage/bag/ore(src)
|
||||
new /obj/item/device/flashlight/lantern(src)
|
||||
|
||||
@@ -58,10 +58,11 @@ Works together with spawning an observer, noted above.
|
||||
|
||||
/mob/proc/ghostize(var/can_reenter_corpse = 1)
|
||||
if(key)
|
||||
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
|
||||
ghost.can_reenter_corpse = can_reenter_corpse
|
||||
ghost.key = key
|
||||
return ghost
|
||||
if(!cmptext(copytext(key,1,2),"@")) //aghost
|
||||
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
|
||||
ghost.can_reenter_corpse = can_reenter_corpse
|
||||
ghost.key = key
|
||||
return ghost
|
||||
|
||||
/*
|
||||
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success.
|
||||
/mob/proc/put_in_l_hand(var/obj/item/W)
|
||||
if(lying && !(W.flags&ABSTRACT)) return 0
|
||||
if(!istype(W)) return 0
|
||||
if(!put_in_hand_check(W))
|
||||
return 0
|
||||
if(!l_hand)
|
||||
W.loc = src //TODO: move to equipped?
|
||||
l_hand = W
|
||||
@@ -37,8 +37,8 @@
|
||||
|
||||
//Puts the item into your r_hand if possible and calls all necessary triggers/updates. returns 1 on success.
|
||||
/mob/proc/put_in_r_hand(var/obj/item/W)
|
||||
if(lying && !(W.flags&ABSTRACT)) return 0
|
||||
if(!istype(W)) return 0
|
||||
if(!put_in_hand_check(W))
|
||||
return 0
|
||||
if(!r_hand)
|
||||
W.loc = src
|
||||
r_hand = W
|
||||
@@ -51,6 +51,10 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/put_in_hand_check(var/obj/item/W)
|
||||
if(lying && !(W.flags&ABSTRACT)) return 0
|
||||
if(!istype(W)) return 0
|
||||
return 1
|
||||
|
||||
//Puts the item into our active hand if possible. returns 1 on success.
|
||||
/mob/proc/put_in_active_hand(var/obj/item/W)
|
||||
|
||||
@@ -580,3 +580,31 @@
|
||||
/mob/living/proc/Exhaust()
|
||||
src << "<span class='notice'>You're too exhausted to keep going...</span>"
|
||||
Weaken(5)
|
||||
|
||||
// The src mob is trying to strip an item from someone
|
||||
// Override if a certain type of mob should be behave differently when stripping items (can't, for example)
|
||||
/mob/living/stripPanelUnequip(mob/who, obj/item/what, where)
|
||||
if(what.flags & NODROP)
|
||||
src << "<span class='notice'>You can't remove \the [what.name], it appears to be stuck!</span>"
|
||||
return
|
||||
visible_message("<span class='danger'>[src] tries to remove [who]'s [what.name].</span>", \
|
||||
"<span class='userdanger'>[src] tries to remove [who]'s [what.name].</span>")
|
||||
what.add_fingerprint(src)
|
||||
if(do_mob(src, who, STRIP_DELAY))
|
||||
if(what && Adjacent(who))
|
||||
who.unEquip(what)
|
||||
|
||||
// The src mob is trying to place an item on someone
|
||||
// Override if a certain mob should be behave differently when placing items (can't, for example)
|
||||
/mob/living/stripPanelEquip(mob/who, obj/item/what, where)
|
||||
what = src.get_active_hand()
|
||||
if(what && (what.flags & NODROP))
|
||||
src << "<span class='notice'>You can't put \the [what.name] on [who], it's stuck to your hand!</span>"
|
||||
return
|
||||
if(what && what.mob_can_equip(who, where, 1))
|
||||
visible_message("<span class='notice'>[src] tries to put [what] on [who].</span>")
|
||||
if(do_mob(src, who, STRIP_DELAY * 0.5))
|
||||
if(what && Adjacent(who))
|
||||
src.unEquip(what)
|
||||
who.equip_to_slot_if_possible(what, where, 0, 1)
|
||||
|
||||
|
||||
@@ -298,4 +298,12 @@
|
||||
now_pushing = 0
|
||||
return
|
||||
step(AM, t)
|
||||
now_pushing = null
|
||||
now_pushing = null
|
||||
|
||||
/mob/living/silicon/put_in_hand_check() // This check is for borgs being able to receive items, not put them in others' hands.
|
||||
return 0
|
||||
|
||||
// The src mob is trying to place an item on someone
|
||||
// But the src mob is a silicon!! Disable.
|
||||
/mob/living/silicon/stripPanelEquip(obj/item/what, mob/who, slot)
|
||||
return 0
|
||||
+11
-19
@@ -491,26 +491,9 @@ var/list/slot_equipment_priority = list( \
|
||||
var/obj/item/what = get_item_by_slot(slot)
|
||||
|
||||
if(what)
|
||||
if(what.flags & NODROP)
|
||||
usr << "<span class='notice'>You can't remove \the [what.name], it appears to be stuck!</span>"
|
||||
return
|
||||
visible_message("<span class='danger'>[usr] tries to remove [src]'s [what.name].</span>", \
|
||||
"<span class='userdanger'>[usr] tries to remove [src]'s [what.name].</span>")
|
||||
what.add_fingerprint(usr)
|
||||
if(do_mob(usr, src, STRIP_DELAY))
|
||||
if(what && Adjacent(usr))
|
||||
unEquip(what)
|
||||
usr.stripPanelUnequip(src,what,slot)
|
||||
else
|
||||
what = usr.get_active_hand()
|
||||
if(what && (what.flags & NODROP))
|
||||
usr << "<span class='notice'>You can't put \the [what.name] on [src], it's stuck to your hand!</span>"
|
||||
return
|
||||
if(what && what.mob_can_equip(src, slot, 1))
|
||||
visible_message("<span class='notice'>[usr] tries to put [what] on [src].</span>")
|
||||
if(do_mob(usr, src, STRIP_DELAY * 0.5))
|
||||
if(what && Adjacent(usr))
|
||||
usr.unEquip(what)
|
||||
equip_to_slot_if_possible(what, slot, 0, 1)
|
||||
usr.stripPanelEquip(src,what,slot)
|
||||
|
||||
if(usr.machine == src)
|
||||
if(Adjacent(usr))
|
||||
@@ -518,6 +501,15 @@ var/list/slot_equipment_priority = list( \
|
||||
else
|
||||
usr << browse(null,"window=mob\ref[src]")
|
||||
|
||||
// The src mob is trying to strip an item from someone
|
||||
// Defined in living.dm
|
||||
/mob/proc/stripPanelUnequip(obj/item/what, mob/who)
|
||||
return
|
||||
|
||||
// The src mob is trying to place an item on someone
|
||||
// Defined in living.dm
|
||||
/mob/proc/stripPanelEquip(obj/item/what, mob/who)
|
||||
return
|
||||
|
||||
/mob/MouseDrop(mob/M)
|
||||
..()
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
return
|
||||
|
||||
t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
|
||||
|
||||
|
||||
if(t != null) //No input from the user means nothing needs to be added
|
||||
if(id!="end")
|
||||
addtofield(text2num(id), t) // He wants to edit a field, let him.
|
||||
@@ -341,6 +341,10 @@
|
||||
name = "paper- 'Official Bulletin'"
|
||||
info = "<BR>Centcom Security<BR>Port Division<BR>Official Bulletin<BR><BR>Inspector,<BR>There is an emergency shuttle arriving today.<BR><BR>Approval is restricted to Nanotrasen employees only. Deny all other entrants.<BR><BR>Centcom Port Commissioner"
|
||||
|
||||
/obj/item/weapon/paper/range
|
||||
name = "paper- Firing Range Instructions"
|
||||
info = "Directions:<br><i>First you'll want to make sure there is a target stake in the center of the magnetic platform. Next, take an aluminum target from the crates back there and slip it into the stake. Make sure it clicks! Next, there should be a control console mounted on the wall somewhere in the room.<br><br> This control console dictates the behaviors of the magnetic platform, which can move your firing target around to simulate real-world combat situations. From here, you can turn off the magnets or adjust their electromagnetic levels and magnetic fields. The electricity level dictates the strength of the pull - you will usually want this to be the same value as the speed. The magnetic field level dictates how far the magnetic pull reaches.<br><br>Speed and path are the next two settings. Speed is associated with how fast the machine loops through the designated path. Paths dictate where the magnetic field will be centered at what times. There should be a pre-fabricated path input already. You can enable moving to observe how the path affects the way the stake moves. To script your own path, look at the following key:</i><br><br>N: North<br>S: South<br>E: East<br>W: West<br>C: Center<br>R: Random (results may vary)<br>; or &: separators. They are not necessary but can make the path string better visible."
|
||||
|
||||
/obj/item/weapon/paper/crumpled
|
||||
name = "paper scrap"
|
||||
icon_state = "scrap"
|
||||
|
||||
+309
-182
@@ -1,38 +1,37 @@
|
||||
// attach a wire to a power machine - leads from the turf you are standing on
|
||||
///////////////////////////////
|
||||
//CABLE STRUCTURE
|
||||
///////////////////////////////
|
||||
|
||||
/obj/machinery/power/attackby(obj/item/weapon/W, mob/user)
|
||||
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
////////////////////////////////
|
||||
// Definitions
|
||||
////////////////////////////////
|
||||
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
/* Cable directions (d1 and d2)
|
||||
|
||||
var/turf/T = user.loc
|
||||
|
||||
if(T.intact || !istype(T, /turf/simulated/floor))
|
||||
return
|
||||
9 1 5
|
||||
\ | /
|
||||
8 - 0 - 4
|
||||
/ | \
|
||||
10 2 6
|
||||
|
||||
if(get_dist(src, user) > 1)
|
||||
return
|
||||
|
||||
if(!directwired) // only for attaching to directwired machines
|
||||
return
|
||||
|
||||
coil.turf_place(T, user)
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
If d1 = 0 and d2 = 0, there's no cable
|
||||
If d1 = 0 and d2 = dir, it's a O-X cable, getting from the center of the tile to dir (knot cable)
|
||||
If d1 = dir1 and d2 = dir2, it's a full X-X cable, getting from dir1 to dir2
|
||||
By design, d1 is the smallest direction and d2 is the highest
|
||||
*/
|
||||
|
||||
/obj/structure/cable
|
||||
level = 1
|
||||
level = 1 //is underfloor
|
||||
anchored =1
|
||||
var/datum/powernet/powernet
|
||||
name = "power cable"
|
||||
desc = "A flexible superconducting cable for heavy-duty power transfer"
|
||||
icon = 'icons/obj/power_cond/power_cond_red.dmi'
|
||||
icon_state = "0-1"
|
||||
var/d1 = 0
|
||||
var/d2 = 1
|
||||
var/d1 = 0 // cable direction 1 (see above)
|
||||
var/d2 = 1 // cable direction 2 (see above)
|
||||
layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4
|
||||
var/cable_color = "red"
|
||||
|
||||
@@ -65,7 +64,6 @@
|
||||
icon = 'icons/obj/power_cond/power_cond_white.dmi'
|
||||
|
||||
// the power cable object
|
||||
|
||||
/obj/structure/cable/New()
|
||||
..()
|
||||
|
||||
@@ -81,16 +79,20 @@
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
|
||||
if(level==1) hide(T.intact)
|
||||
cable_list += src
|
||||
cable_list += src //add it to the global cable list
|
||||
|
||||
|
||||
/obj/structure/cable/Destroy() // called when a cable is deleted
|
||||
// if(!defer_powernet_rebuild) // set if network will be rebuilt manually
|
||||
if(powernet)
|
||||
powernet.cut_cable(src) // update the powernets
|
||||
cable_list -= src
|
||||
..() // then go ahead and delete the cable
|
||||
cut_cable_from_powernet() // update the powernets
|
||||
cable_list -= src //remove it from global cable list
|
||||
..() // then go ahead and delete the cable
|
||||
|
||||
///////////////////////////////////
|
||||
// General procedures
|
||||
///////////////////////////////////
|
||||
|
||||
//If underfloor, hide the cable
|
||||
/obj/structure/cable/hide(var/i)
|
||||
|
||||
if(level == 1 && istype(loc, /turf))
|
||||
@@ -108,9 +110,15 @@
|
||||
/obj/structure/cable/proc/get_powernet() //TODO: remove this as it is obsolete
|
||||
return powernet
|
||||
|
||||
//Telekinesis has no effect on a cable
|
||||
/obj/structure/cable/attack_tk(mob/user)
|
||||
return
|
||||
|
||||
// Items usable on a cable :
|
||||
// - Wirecutters : cut it duh !
|
||||
// - Cable coil : merge cables
|
||||
// - Multitool : get the power currently passing through the cable
|
||||
//
|
||||
/obj/structure/cable/attackby(obj/item/W, mob/user)
|
||||
|
||||
var/turf/T = src.loc
|
||||
@@ -142,10 +150,8 @@
|
||||
|
||||
else if(istype(W, /obj/item/device/multitool))
|
||||
|
||||
var/datum/powernet/PN = get_powernet() // find the powernet
|
||||
|
||||
if(PN && (PN.avail > 0)) // is it powered?
|
||||
user << "\red [PN.avail]W in power network."
|
||||
if(powernet && (powernet.avail > 0)) // is it powered?
|
||||
user << "\red [powernet.avail]W in power network."
|
||||
|
||||
else
|
||||
user << "\red The cable is not powered."
|
||||
@@ -159,7 +165,6 @@
|
||||
src.add_fingerprint(user)
|
||||
|
||||
// shock the user with probability prb
|
||||
|
||||
/obj/structure/cable/proc/shock(mob/user, prb, var/siemens_coeff = 1.0)
|
||||
if(!prob(prb))
|
||||
return 0
|
||||
@@ -171,6 +176,7 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
//explosion handling
|
||||
/obj/structure/cable/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
@@ -186,9 +192,216 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
// the cable coil object, used for laying cable
|
||||
obj/structure/cable/proc/cableColor(var/colorC)
|
||||
var/color_n = "red"
|
||||
if(colorC)
|
||||
color_n = colorC
|
||||
cable_color = color_n
|
||||
switch(colorC)
|
||||
if("red")
|
||||
icon = 'icons/obj/power_cond/power_cond_red.dmi'
|
||||
if("yellow")
|
||||
icon = 'icons/obj/power_cond/power_cond_yellow.dmi'
|
||||
if("green")
|
||||
icon = 'icons/obj/power_cond/power_cond_green.dmi'
|
||||
if("blue")
|
||||
icon = 'icons/obj/power_cond/power_cond_blue.dmi'
|
||||
if("pink")
|
||||
icon = 'icons/obj/power_cond/power_cond_pink.dmi'
|
||||
if("orange")
|
||||
icon = 'icons/obj/power_cond/power_cond_orange.dmi'
|
||||
if("cyan")
|
||||
icon = 'icons/obj/power_cond/power_cond_cyan.dmi'
|
||||
if("white")
|
||||
icon = 'icons/obj/power_cond/power_cond_white.dmi'
|
||||
|
||||
////////////////////////////////////////////
|
||||
// Power related
|
||||
///////////////////////////////////////////
|
||||
|
||||
obj/structure/cable/proc/add_avail(var/amount)
|
||||
if(powernet)
|
||||
powernet.newavail += amount
|
||||
|
||||
obj/structure/cable/proc/add_load(var/amount)
|
||||
if(powernet)
|
||||
powernet.newload += amount
|
||||
|
||||
obj/structure/cable/proc/surplus()
|
||||
if(powernet)
|
||||
return powernet.avail-powernet.load
|
||||
else
|
||||
return 0
|
||||
|
||||
obj/structure/cable/proc/avail()
|
||||
if(powernet)
|
||||
return powernet.avail
|
||||
else
|
||||
return 0
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// Cable laying helpers
|
||||
////////////////////////////////////////////////
|
||||
|
||||
// merge with the powernets of power objects in the given direction
|
||||
/obj/structure/cable/proc/mergeConnectedNetworks(var/direction)
|
||||
var/turf/TB
|
||||
var/fdir = (!direction)? 0 : turn(direction, 180) //flip the direction, to match with the source position on its turf
|
||||
if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing
|
||||
return
|
||||
TB = get_step(src, direction)
|
||||
|
||||
for(var/obj/structure/cable/C in TB)
|
||||
|
||||
if(!C)
|
||||
continue
|
||||
|
||||
if(src == C)
|
||||
continue
|
||||
|
||||
if(C.d1 == fdir || C.d2 == fdir) //we've got a matching cable in the neighbor turf
|
||||
if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables)
|
||||
var/datum/powernet/newPN = new()
|
||||
newPN.add_cable(C)
|
||||
|
||||
if(powernet) //if we already have a powernet, then merge the two powernets
|
||||
merge_powernets(powernet,C.powernet)
|
||||
else
|
||||
C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet
|
||||
|
||||
// merge with the powernets of power objects in the source turf
|
||||
/obj/structure/cable/proc/mergeConnectedNetworksOnTurf()
|
||||
if(!powernet) //if we somehow have no powernet, make one (should not happen for cables)
|
||||
var/datum/powernet/newPN = new()
|
||||
newPN.add_cable(src)
|
||||
|
||||
for(var/AM in loc)
|
||||
if(istype(AM,/obj/structure/cable))
|
||||
var/obj/structure/cable/C = AM
|
||||
if(C.d1 == 0 && d1==0) //only connected if they are both "nodes"
|
||||
if(C.powernet == powernet) continue
|
||||
if(C.powernet)
|
||||
merge_powernets(powernet, C.powernet)
|
||||
else
|
||||
powernet.add_cable(C) //the cable was powernetless, let's just add it to our powernet
|
||||
|
||||
else if(istype(AM,/obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/N = AM
|
||||
if(!N.terminal) continue // APC are connected through their terminal
|
||||
if(N.terminal.powernet)
|
||||
merge_powernets(powernet, N.terminal.powernet)
|
||||
else
|
||||
powernet.add_machine(N.terminal)
|
||||
|
||||
else if(istype(AM,/obj/machinery/power)) //other power machines
|
||||
var/obj/machinery/power/M = AM
|
||||
if(M.powernet == powernet) continue
|
||||
if(M.powernet)
|
||||
merge_powernets(powernet, M.powernet)
|
||||
else
|
||||
powernet.add_machine(M)
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// Powernets handling helpers
|
||||
//////////////////////////////////////////////
|
||||
|
||||
/obj/structure/cable/proc/get_connections()
|
||||
. = list() // this will be a list of all connected power objects without a powernet
|
||||
var/turf/T = loc
|
||||
|
||||
if(d1) T = get_step(src, d1)
|
||||
if(T) . += power_list(T, src, d1, 1) //only returns these with no powernets
|
||||
|
||||
T = get_step(src, d2)
|
||||
if(T) . += power_list(T, src, d2, 1) //only returns these with no powernets
|
||||
|
||||
return .
|
||||
|
||||
// will get both marked and unmarked connections (i.e with or without powernets)
|
||||
/obj/structure/cable/proc/get_marked_connections()
|
||||
. = list() // this will be a list of all connected power objects
|
||||
var/turf/T = loc
|
||||
|
||||
if(d1) T = get_step(src, d1)
|
||||
if(T) . += power_list(T, src, d1, 0)
|
||||
|
||||
T = get_step(src, d2)
|
||||
if(T) . += power_list(T, src, d2, 0)
|
||||
|
||||
return .
|
||||
|
||||
//should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf.
|
||||
//needed as this can, unlike other placements, disconnect cables
|
||||
/obj/structure/cable/proc/denode()
|
||||
var/turf/T1 = loc
|
||||
if(!T1) return
|
||||
|
||||
var/list/powerlist = power_list(T1,src,0,0) //find the other cables that ended in the centre of the turf, with or without a powernet
|
||||
if(powerlist.len>0)
|
||||
var/datum/powernet/PN = new()
|
||||
propagate_network(powerlist[1],PN) //propagates the new powernet beginning at the source cable
|
||||
|
||||
if(PN.is_empty()) //can happen with machines made nodeless when smoothing cables
|
||||
qdel(PN)
|
||||
|
||||
// cut the cable's powernet at this cable and updates the powergrid
|
||||
/obj/structure/cable/proc/cut_cable_from_powernet()
|
||||
var/turf/T1 = loc
|
||||
if(!T1) return
|
||||
|
||||
var/turf/T2
|
||||
if(d2) T2 = get_step(T1, d2)
|
||||
if(d1) T1 = get_step(T1, d1)
|
||||
|
||||
|
||||
var/list/P_list = power_list(T1, src, d1,0,cable_only = 1) // what joins on to cut cable...
|
||||
P_list += power_list(T2, src, d2,0, cable_only = 1) //...in both directions
|
||||
|
||||
|
||||
if(P_list.len == 0)//if nothing in both list, then the cable was a lone cable, just delete it and its powernet
|
||||
powernet.remove_cable(src)
|
||||
|
||||
for(var/obj/machinery/power/P in T1)//check if it was powering a machine
|
||||
if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to
|
||||
P.disconnect_from_network() //remove from current network (and delete powernet)
|
||||
return
|
||||
|
||||
|
||||
var/i
|
||||
var/obj/structure/cable/Cable_i
|
||||
|
||||
//removes every adjacents cables, from the powernet, except the first found (to save processing)
|
||||
//that way we'll know if there was a loop somewhere
|
||||
for (i = 2, i <= P_list.len, i++)
|
||||
Cable_i = P_list[i]
|
||||
powernet.remove_cable(Cable_i)
|
||||
|
||||
// remove the cut cable from its turf and powernet, so that it doesn't get count in propagate_network worklist
|
||||
loc = null
|
||||
powernet.remove_cable(src) //remove the cut cable from its powernet
|
||||
|
||||
for (i = 2, i <= P_list.len, i++) // propagate network to every powernetless adjacents cables
|
||||
Cable_i = P_list[i]
|
||||
if(Cable_i.powernet == null) //if not null, there was a loop and the cable is already part of a powernet
|
||||
var/datum/powernet/newPN = new()
|
||||
propagate_network(P_list[i], newPN)
|
||||
|
||||
// Disconnect machines connected to nodes
|
||||
if(d1 == 0) // if we cut a node (O-X) cable
|
||||
for(var/obj/machinery/power/P in T1)
|
||||
if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to
|
||||
P.disconnect_from_network() //remove from current network
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// The cable coil object, used for laying cable
|
||||
///////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////
|
||||
// Definitions
|
||||
////////////////////////////////
|
||||
|
||||
#define MAXCOIL 30
|
||||
|
||||
/obj/item/stack/cable_coil
|
||||
name = "cable coil"
|
||||
icon = 'icons/obj/power.dmi'
|
||||
@@ -207,13 +420,27 @@
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
|
||||
|
||||
suicide_act(mob/user)
|
||||
if(locate(/obj/structure/stool) in user.loc)
|
||||
viewers(user) << "<span class='suicide'>[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
else
|
||||
viewers(user) << "<span class='suicide'>[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return(OXYLOSS)
|
||||
/obj/item/stack/cable_coil/suicide_act(mob/user)
|
||||
if(locate(/obj/structure/stool) in user.loc)
|
||||
user.visible_message("<span class='suicide'>[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
else
|
||||
user.visible_message("<span class='suicide'>[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return(OXYLOSS)
|
||||
|
||||
/obj/item/stack/cable_coil/New(loc, amount = MAXCOIL, var/param_color = null)
|
||||
..()
|
||||
src.amount = amount
|
||||
if (param_color)
|
||||
item_color = param_color
|
||||
pixel_x = rand(-2,2)
|
||||
pixel_y = rand(-2,2)
|
||||
update_icon()
|
||||
|
||||
///////////////////////////////////
|
||||
// General procedures
|
||||
///////////////////////////////////
|
||||
|
||||
//you can use wires to heal robotics
|
||||
/obj/item/stack/cable_coil/attack(mob/living/carbon/human/H, mob/user)
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
@@ -226,14 +453,6 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/cable_coil/New(loc, amount = MAXCOIL, var/param_color = null)
|
||||
..()
|
||||
src.amount = amount
|
||||
if (param_color)
|
||||
item_color = param_color
|
||||
pixel_x = rand(-2,2)
|
||||
pixel_y = rand(-2,2)
|
||||
update_icon()
|
||||
|
||||
/obj/item/stack/cable_coil/update_icon()
|
||||
if (!item_color)
|
||||
@@ -248,6 +467,7 @@
|
||||
icon_state = "coil_[item_color]"
|
||||
name = "cable coil"
|
||||
|
||||
|
||||
/obj/item/stack/cable_coil/examine()
|
||||
set src in view(1)
|
||||
|
||||
@@ -258,6 +478,7 @@
|
||||
else
|
||||
usr << "A coil of power cable. There are [amount] lengths of cable in the coil."
|
||||
|
||||
|
||||
/obj/item/stack/cable_coil/verb/make_restraint()
|
||||
set name = "Make Cable Restraints"
|
||||
set category = "Object"
|
||||
@@ -276,6 +497,9 @@
|
||||
usr << "\blue You cannot do that."
|
||||
..()
|
||||
|
||||
// Items usable on a cable coil :
|
||||
// - Wirecutters : cut them duh !
|
||||
// - Cable coil : merge cables
|
||||
/obj/item/stack/cable_coil/attackby(obj/item/weapon/W, mob/user)
|
||||
..()
|
||||
if( istype(W, /obj/item/weapon/wirecutters) && src.amount > 1)
|
||||
@@ -304,6 +528,7 @@
|
||||
src.use(amt)
|
||||
return
|
||||
|
||||
//remove cables from the stack
|
||||
/obj/item/stack/cable_coil/use(var/used)
|
||||
if(src.amount < used)
|
||||
return 0
|
||||
@@ -318,6 +543,7 @@
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
//add cables to the stack
|
||||
/obj/item/stack/cable_coil/proc/give(var/extra)
|
||||
if(amount + extra > MAXCOIL)
|
||||
amount = MAXCOIL
|
||||
@@ -325,14 +551,16 @@
|
||||
amount += extra
|
||||
update_icon()
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// Cable laying procedures
|
||||
//////////////////////////////////////////////
|
||||
|
||||
// called when cable_coil is clicked on a turf/simulated/floor
|
||||
|
||||
/obj/item/stack/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user)
|
||||
|
||||
if(!isturf(user.loc))
|
||||
return
|
||||
|
||||
if(get_dist(F,user) > 1)
|
||||
if(get_dist(F,user) > 1) //too far
|
||||
user << "You can't lay cable at a place that far away."
|
||||
return
|
||||
|
||||
@@ -357,32 +585,30 @@
|
||||
|
||||
C.cableColor(item_color)
|
||||
|
||||
C.d1 = 0
|
||||
//set up the new cable
|
||||
C.d1 = 0 //it's a O-X node cable
|
||||
C.d2 = dirn
|
||||
C.add_fingerprint(user)
|
||||
C.updateicon()
|
||||
|
||||
C.powernet = new()
|
||||
powernets += C.powernet
|
||||
C.powernet.cables += C
|
||||
//create a new powernet with the cable, if needed it will be merged later
|
||||
var/datum/powernet/PN = new()
|
||||
PN.add_cable(C)
|
||||
|
||||
C.mergeConnectedNetworks(C.d2)
|
||||
C.mergeConnectedNetworksOnTurf()
|
||||
C.mergeConnectedNetworks(C.d2) //merge the powernet with adjacents powernets
|
||||
C.mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets
|
||||
|
||||
|
||||
use(1)
|
||||
|
||||
if (C.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/stack/cable_coil(C.loc, 1, C.cable_color)
|
||||
qdel(C)
|
||||
//src.laying = 1
|
||||
//last = C
|
||||
|
||||
|
||||
// called when cable_coil is click on an installed obj/cable
|
||||
|
||||
// or click on a turf that already contains a "node" cable
|
||||
/obj/item/stack/cable_coil/proc/cable_join(obj/structure/cable/C, mob/user)
|
||||
|
||||
var/turf/U = user.loc
|
||||
if(!isturf(U))
|
||||
return
|
||||
@@ -397,12 +623,14 @@
|
||||
return
|
||||
|
||||
|
||||
if(U == T) // do nothing if we clicked a cable we're standing on
|
||||
return // may change later if can think of something logical to do
|
||||
if(U == T) //if clicked on the turf we're standing on, try to put a cable in the direction we're facing
|
||||
turf_place(T,user)
|
||||
return
|
||||
|
||||
var/dirn = get_dir(C, user)
|
||||
|
||||
if(C.d1 == dirn || C.d2 == dirn) // one end of the clicked cable is pointing towards us
|
||||
// one end of the clicked cable is pointing towards us
|
||||
if(C.d1 == dirn || C.d2 == dirn)
|
||||
if(U.intact) // can't place a cable if the floor is complete
|
||||
user << "You can't lay cable there unless the floor tiles are removed."
|
||||
return
|
||||
@@ -425,19 +653,24 @@
|
||||
NC.add_fingerprint()
|
||||
NC.updateicon()
|
||||
|
||||
if(C.powernet)
|
||||
NC.powernet = C.powernet
|
||||
NC.powernet.cables += NC
|
||||
NC.mergeConnectedNetworks(NC.d2)
|
||||
NC.mergeConnectedNetworksOnTurf()
|
||||
//create a new powernet with the cable, if needed it will be merged later
|
||||
var/datum/powernet/newPN = new()
|
||||
newPN.add_cable(NC)
|
||||
|
||||
NC.mergeConnectedNetworks(NC.d2) //merge the powernet with adjacents powernets
|
||||
NC.mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets
|
||||
|
||||
use(1)
|
||||
|
||||
if (NC.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/stack/cable_coil(NC.loc, 1, NC.cable_color)
|
||||
qdel(NC)
|
||||
|
||||
return
|
||||
else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub
|
||||
|
||||
// exisiting cable doesn't point at our position, so see if it's a stub
|
||||
else if(C.d1 == 0)
|
||||
// if so, make it a full cable pointing from it's old direction to our dirn
|
||||
var/nd1 = C.d2 // these will be the new directions
|
||||
var/nd2 = dirn
|
||||
@@ -465,11 +698,12 @@
|
||||
C.updateicon()
|
||||
|
||||
|
||||
C.mergeConnectedNetworks(C.d1)
|
||||
C.mergeConnectedNetworks(C.d2)
|
||||
C.mergeConnectedNetworks(C.d1) //merge the powernets...
|
||||
C.mergeConnectedNetworks(C.d2) //...in the two new cable directions
|
||||
C.mergeConnectedNetworksOnTurf()
|
||||
|
||||
use(1)
|
||||
|
||||
if (C.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/stack/cable_coil(C.loc, 2, C.cable_color)
|
||||
@@ -479,116 +713,9 @@
|
||||
C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets.
|
||||
return
|
||||
|
||||
/obj/structure/cable/proc/mergeConnectedNetworks(var/direction)
|
||||
var/turf/TB
|
||||
if(!(d1 == direction || d2 == direction))
|
||||
return
|
||||
TB = get_step(src, direction)
|
||||
|
||||
for(var/obj/structure/cable/TC in TB)
|
||||
|
||||
if(!TC)
|
||||
continue
|
||||
|
||||
if(src == TC)
|
||||
continue
|
||||
|
||||
var/fdir = (!direction)? 0 : turn(direction, 180)
|
||||
|
||||
if(TC.d1 == fdir || TC.d2 == fdir)
|
||||
|
||||
if(!TC.powernet)
|
||||
TC.powernet = new()
|
||||
powernets += TC.powernet
|
||||
TC.powernet.cables += TC
|
||||
|
||||
if(powernet)
|
||||
merge_powernets(powernet,TC.powernet)
|
||||
else
|
||||
powernet = TC.powernet
|
||||
powernet.cables += src
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/structure/cable/proc/mergeConnectedNetworksOnTurf()
|
||||
if(!powernet)
|
||||
powernet = new()
|
||||
powernets += powernet
|
||||
powernet.cables += src
|
||||
|
||||
for(var/AM in loc)
|
||||
if(istype(AM,/obj/structure/cable))
|
||||
var/obj/structure/cable/C = AM
|
||||
if(C.d1 == 0 && d1==0) //only connected if they are both "nodes"
|
||||
if(C.powernet == powernet) continue
|
||||
if(C.powernet)
|
||||
merge_powernets(powernet, C.powernet)
|
||||
else
|
||||
C.powernet = powernet
|
||||
powernet.cables += C
|
||||
|
||||
else if(istype(AM,/obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/N = AM
|
||||
if(!N.terminal) continue
|
||||
if(N.terminal.powernet)
|
||||
merge_powernets(powernet, N.terminal.powernet)
|
||||
else
|
||||
N.terminal.powernet = powernet
|
||||
powernet.nodes[N.terminal] = N.terminal
|
||||
|
||||
else if(istype(AM,/obj/machinery/power))
|
||||
var/obj/machinery/power/M = AM
|
||||
if(M.powernet == powernet) continue
|
||||
if(M.powernet)
|
||||
merge_powernets(powernet, M.powernet)
|
||||
else
|
||||
M.powernet = powernet
|
||||
powernet.nodes[M] = M
|
||||
|
||||
|
||||
obj/structure/cable/proc/cableColor(var/colorC)
|
||||
var/color_n = "red"
|
||||
if(colorC)
|
||||
color_n = colorC
|
||||
cable_color = color_n
|
||||
switch(colorC)
|
||||
if("red")
|
||||
icon = 'icons/obj/power_cond/power_cond_red.dmi'
|
||||
if("yellow")
|
||||
icon = 'icons/obj/power_cond/power_cond_yellow.dmi'
|
||||
if("green")
|
||||
icon = 'icons/obj/power_cond/power_cond_green.dmi'
|
||||
if("blue")
|
||||
icon = 'icons/obj/power_cond/power_cond_blue.dmi'
|
||||
if("pink")
|
||||
icon = 'icons/obj/power_cond/power_cond_pink.dmi'
|
||||
if("orange")
|
||||
icon = 'icons/obj/power_cond/power_cond_orange.dmi'
|
||||
if("cyan")
|
||||
icon = 'icons/obj/power_cond/power_cond_cyan.dmi'
|
||||
if("white")
|
||||
icon = 'icons/obj/power_cond/power_cond_white.dmi'
|
||||
|
||||
obj/structure/cable/proc/add_avail(var/amount)
|
||||
if(powernet)
|
||||
powernet.newavail += amount
|
||||
|
||||
obj/structure/cable/proc/add_load(var/amount)
|
||||
if(powernet)
|
||||
powernet.newload += amount
|
||||
|
||||
obj/structure/cable/proc/surplus()
|
||||
if(powernet)
|
||||
return powernet.avail-powernet.load
|
||||
else
|
||||
return 0
|
||||
|
||||
obj/structure/cable/proc/avail()
|
||||
if(powernet)
|
||||
return powernet.avail
|
||||
else
|
||||
return 0
|
||||
//////////////////////////////
|
||||
// Misc.
|
||||
/////////////////////////////
|
||||
|
||||
/obj/item/stack/cable_coil/cut
|
||||
item_state = "coil_red2"
|
||||
|
||||
@@ -139,7 +139,10 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
var/obj/machinery/gravity_generator/part/part = new(T)
|
||||
if(count == 5) // Middle
|
||||
middle = part
|
||||
part.sprite_number = count;
|
||||
if(count <= 3) // Their sprite is the top part of the generator
|
||||
part.density = 0
|
||||
part.layer = MOB_LAYER + 0.1
|
||||
part.sprite_number = count
|
||||
part.main_part = src
|
||||
parts += part
|
||||
part.update_icon()
|
||||
|
||||
+283
-373
@@ -1,10 +1,17 @@
|
||||
//////////////////////////////
|
||||
// POWER MACHINERY BASE CLASS
|
||||
//////////////////////////////
|
||||
|
||||
/////////////////////////////
|
||||
// Definitions
|
||||
/////////////////////////////
|
||||
|
||||
/obj/machinery/power
|
||||
name = null
|
||||
icon = 'icons/obj/power.dmi'
|
||||
anchored = 1.0
|
||||
var/datum/powernet/powernet = null
|
||||
var/directwired = 1 // by default, power machines are connected by a cable in a neighbouring turf
|
||||
// if set to 0, requires a 0-X cable on this turf
|
||||
var/directwired = 1 // TODEL
|
||||
use_power = 0
|
||||
idle_power_usage = 0
|
||||
active_power_usage = 0
|
||||
@@ -13,6 +20,10 @@
|
||||
disconnect_from_network()
|
||||
..()
|
||||
|
||||
///////////////////////////////
|
||||
// General procedures
|
||||
//////////////////////////////
|
||||
|
||||
// common helper procs for all power machines
|
||||
/obj/machinery/power/proc/add_avail(var/amount)
|
||||
if(powernet)
|
||||
@@ -39,8 +50,7 @@
|
||||
|
||||
// returns true if the area has power on given channel (or doesn't require power).
|
||||
// defaults to power_channel
|
||||
|
||||
/obj/machinery/proc/powered(var/chan = -1)
|
||||
/obj/machinery/proc/powered(var/chan = -1) // defaults to power_channel
|
||||
|
||||
if(!src.loc)
|
||||
return 0
|
||||
@@ -56,7 +66,6 @@
|
||||
return A.master.powered(chan) // return power status of the area
|
||||
|
||||
// increment the power usage stats for an area
|
||||
|
||||
/obj/machinery/proc/use_power(var/amount, var/chan = -1) // defaults to power_channel
|
||||
var/area/A = get_area(src) // make sure it's in an area
|
||||
if(!A || !isarea(A) || !A.master)
|
||||
@@ -75,51 +84,119 @@
|
||||
stat |= NOPOWER
|
||||
return
|
||||
|
||||
// connect the machine to a powernet if a node cable is present on the turf
|
||||
/obj/machinery/power/proc/connect_to_network()
|
||||
var/turf/T = src.loc
|
||||
if(!T || !istype(T))
|
||||
return 0
|
||||
|
||||
// the powernet datum
|
||||
// each contiguous network of cables & nodes
|
||||
var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked
|
||||
if(!C || !C.powernet)
|
||||
return 0
|
||||
|
||||
C.powernet.add_machine(src)
|
||||
return 1
|
||||
|
||||
// rebuild all power networks from scratch
|
||||
// remove and disconnect the machine from its current powernet
|
||||
/obj/machinery/power/proc/disconnect_from_network()
|
||||
if(!powernet)
|
||||
return 0
|
||||
powernet.remove_machine(src)
|
||||
return 1
|
||||
|
||||
/proc/makepowernets()
|
||||
for(var/datum/powernet/PN in powernets)
|
||||
del(PN)
|
||||
powernets.Cut()
|
||||
// attach a wire to a power machine - leads from the turf you are standing on
|
||||
//almost never called, overwritten by all power machines but terminal and generator
|
||||
/obj/machinery/power/attackby(obj/item/weapon/W, mob/user)
|
||||
|
||||
for(var/obj/structure/cable/PC in cable_list)
|
||||
if(!PC.powernet)
|
||||
PC.powernet = new()
|
||||
powernets += PC.powernet
|
||||
// if(Debug) world.log << "Starting mpn at [PC.x],[PC.y] ([PC.d1]/[PC.d2])"
|
||||
powernet_nextlink(PC,PC.powernet)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
|
||||
// if(Debug) world.log << "[powernets.len] powernets found"
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
|
||||
for(var/obj/structure/cable/C in cable_list)
|
||||
if(!C.powernet) continue
|
||||
C.powernet.cables += C
|
||||
var/turf/T = user.loc
|
||||
|
||||
for(var/obj/machinery/power/M in machines)
|
||||
M.connect_to_network()
|
||||
if(T.intact || !istype(T, /turf/simulated/floor))
|
||||
return
|
||||
|
||||
if(get_dist(src, user) > 1)
|
||||
return
|
||||
|
||||
coil.turf_place(T, user)
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
///////////////////////////////////////////
|
||||
// Powernet handling helpers
|
||||
//////////////////////////////////////////
|
||||
|
||||
//returns all the cables WITHOUT a powernet in neighbors turfs,
|
||||
//pointing towards the turf the machine is located at
|
||||
/obj/machinery/power/proc/get_connections()
|
||||
|
||||
. = list()
|
||||
|
||||
var/cdir
|
||||
var/turf/T
|
||||
|
||||
for(var/card in cardinal)
|
||||
T = get_step(loc,card)
|
||||
cdir = get_dir(T,loc)
|
||||
|
||||
for(var/obj/structure/cable/C in T)
|
||||
if(C.powernet) continue
|
||||
if(C.d1 == cdir || C.d2 == cdir)
|
||||
. += C
|
||||
return .
|
||||
|
||||
//returns all the cables in neighbors turfs,
|
||||
//pointing towards the turf the machine is located at
|
||||
/obj/machinery/power/proc/get_marked_connections()
|
||||
|
||||
. = list()
|
||||
|
||||
var/cdir
|
||||
var/turf/T
|
||||
|
||||
for(var/card in cardinal)
|
||||
T = get_step(loc,card)
|
||||
cdir = get_dir(T,loc)
|
||||
|
||||
for(var/obj/structure/cable/C in T)
|
||||
if(C.d1 == cdir || C.d2 == cdir)
|
||||
. += C
|
||||
return .
|
||||
|
||||
//returns all the NODES (O-X) cables WITHOUT a powernet in the turf the machine is located at
|
||||
/obj/machinery/power/proc/get_indirect_connections()
|
||||
. = list()
|
||||
for(var/obj/structure/cable/C in loc)
|
||||
if(C.powernet) continue
|
||||
if(C.d1 == 0) // the cable is a node cable
|
||||
. += C
|
||||
return .
|
||||
|
||||
///////////////////////////////////////////
|
||||
// GLOBAL PROCS for powernets handling
|
||||
//////////////////////////////////////////
|
||||
|
||||
|
||||
// returns a list of all power-related objects (nodes, cable, junctions) in turf,
|
||||
// excluding source, that match the direction d
|
||||
// if unmarked==1, only return those with no powernet
|
||||
/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0)
|
||||
/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0, var/cable_only = 0)
|
||||
. = list()
|
||||
var/fdir = (!d)? 0 : turn(d, 180) // the opposite direction to d (or 0 if d==0)
|
||||
// world.log << "d=[d] fdir=[fdir]"
|
||||
for(var/AM in T)
|
||||
if(AM == source) continue //we don't want to return source
|
||||
|
||||
if(istype(AM,/obj/machinery/power))
|
||||
if(!cable_only && istype(AM,/obj/machinery/power))
|
||||
var/obj/machinery/power/P = AM
|
||||
if(P.powernet == 0) continue // exclude APCs which have powernet=0
|
||||
|
||||
if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet
|
||||
if(P.directwired || (d == 0))
|
||||
if(d == 0)
|
||||
. += P
|
||||
|
||||
else if(istype(AM,/obj/structure/cable))
|
||||
@@ -131,332 +208,57 @@
|
||||
return .
|
||||
|
||||
|
||||
/obj/structure/cable/proc/get_connections()
|
||||
. = list() // this will be a list of all connected power objects
|
||||
var/turf/T = loc
|
||||
// rebuild all power networks from scratch - only called at world creation or by the admin verb
|
||||
/proc/makepowernets()
|
||||
for(var/datum/powernet/PN in powernets)
|
||||
del(PN)
|
||||
powernets.Cut()
|
||||
|
||||
if(d1) T = get_step(src, d1)
|
||||
if(T) . += power_list(T, src, d1, 1)
|
||||
|
||||
T = get_step(src, d2)
|
||||
if(T) . += power_list(T, src, d2, 1)
|
||||
|
||||
return .
|
||||
|
||||
// will get both marked and unmarked connections
|
||||
/obj/structure/cable/proc/get_marked_connections()
|
||||
. = list() // this will be a list of all connected power objects
|
||||
var/turf/T = loc
|
||||
|
||||
if(d1) T = get_step(src, d1)
|
||||
if(T) . += power_list(T, src, d1, 0)
|
||||
|
||||
T = get_step(src, d2)
|
||||
if(T) . += power_list(T, src, d2, 0)
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/power/proc/get_connections()
|
||||
|
||||
. = list()
|
||||
|
||||
if(!directwired)
|
||||
return get_indirect_connections()
|
||||
|
||||
var/cdir
|
||||
|
||||
for(var/card in cardinal)
|
||||
var/turf/T = get_step(loc,card)
|
||||
cdir = get_dir(T,loc)
|
||||
|
||||
for(var/obj/structure/cable/C in T)
|
||||
if(C.powernet) continue
|
||||
if(C.d1 == cdir || C.d2 == cdir)
|
||||
. += C
|
||||
return .
|
||||
|
||||
/obj/machinery/power/proc/get_marked_connections()
|
||||
|
||||
. = list()
|
||||
|
||||
if(!directwired)
|
||||
return get_indirect_connections()
|
||||
|
||||
var/cdir
|
||||
|
||||
for(var/card in cardinal)
|
||||
var/turf/T = get_step(loc,card)
|
||||
cdir = get_dir(T,loc)
|
||||
|
||||
for(var/obj/structure/cable/C in T)
|
||||
if(C.d1 == cdir || C.d2 == cdir)
|
||||
. += C
|
||||
return .
|
||||
|
||||
/obj/machinery/power/proc/get_indirect_connections()
|
||||
. = list()
|
||||
for(var/obj/structure/cable/C in loc)
|
||||
if(C.powernet) continue
|
||||
if(C.d1 == 0)
|
||||
. += C
|
||||
return .
|
||||
|
||||
|
||||
/proc/powernet_nextlink(var/obj/O, var/datum/powernet/PN)
|
||||
var/list/P = list()
|
||||
|
||||
while(1)
|
||||
if( istype(O,/obj/structure/cable) )
|
||||
var/obj/structure/cable/C = O
|
||||
C.powernet = PN
|
||||
P = C.get_connections()
|
||||
|
||||
else if(O.anchored && istype(O,/obj/machinery/power))
|
||||
var/obj/machinery/power/M = O
|
||||
M.powernet = PN
|
||||
P = M.get_connections()
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
if(P.len == 0) return
|
||||
|
||||
O = P[1]
|
||||
|
||||
for(var/L = 2 to P.len)
|
||||
powernet_nextlink(P[L], PN)
|
||||
for(var/obj/structure/cable/PC in cable_list)
|
||||
if(!PC.powernet)
|
||||
PC.powernet = new()
|
||||
propagate_network(PC,PC.powernet)
|
||||
|
||||
//remove the old powernet and replace it with a new one throughout the network.
|
||||
/proc/propagate_network(var/obj/O, var/datum/powernet/PN)
|
||||
//world.log << "propagating new network"
|
||||
var/list/worklist = list()
|
||||
worklist+=O
|
||||
var/list/found_machines = list()
|
||||
var/index = 1
|
||||
while(index<=worklist.len)
|
||||
var/obj/P = worklist[index++]
|
||||
var/obj/P = null
|
||||
|
||||
worklist+=O //start propagating from the passed object
|
||||
|
||||
while(index<=worklist.len) //until we've exhausted all power objects
|
||||
P = worklist[index] //get the next power object found
|
||||
index++
|
||||
|
||||
if( istype(P,/obj/structure/cable))
|
||||
//world.log << "is cable"
|
||||
var/obj/structure/cable/C = P
|
||||
if(C.powernet==PN)
|
||||
//world.log << "already has correct network"
|
||||
continue
|
||||
//world.log << "removing from old powernet[C.powernet]"
|
||||
C.powernet.cables-=C
|
||||
C.powernet = PN
|
||||
PN.cables+=C
|
||||
for(var/obj/newP in C.get_marked_connections())
|
||||
worklist+=newP
|
||||
//world.log << "found [P.len] children"
|
||||
if(C.powernet != PN) //add it to the powernet, if it isn't already there
|
||||
PN.add_cable(C)
|
||||
worklist |= C.get_marked_connections() //get adjacents power objects, with or without a powernet
|
||||
|
||||
else if(P.anchored && istype(P,/obj/machinery/power))
|
||||
//world.log << "is machine"
|
||||
var/obj/machinery/power/M = P
|
||||
if(M.powernet==PN)
|
||||
//world.log << "already has correct network"
|
||||
continue
|
||||
//world.log << "removing from old powernet[M.powernet]"
|
||||
M.powernet.nodes-=M
|
||||
M.powernet = PN
|
||||
PN.nodes+=M
|
||||
for(var/obj/newP in M.get_marked_connections())
|
||||
worklist+=newP
|
||||
//world.log << "found [P.len] children"
|
||||
found_machines |= M //we wait until the powernet is fully propagates to connect the machines
|
||||
|
||||
else
|
||||
continue
|
||||
//should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf.
|
||||
//needed as this can, unlike other placements, disconnect cables
|
||||
/obj/structure/cable/proc/denode()
|
||||
//world.log << "denoding"
|
||||
var/turf/T1 = loc
|
||||
if(!T1) return
|
||||
var/list/powerlist = power_list(T1,src,0,0) //find the other cables that ended in the centre of the turf
|
||||
//world.log << "found [powerlist.len] power items, picking the first"
|
||||
var/datum/powernet/oldPN = powernet
|
||||
var/datum/powernet/PN = new()
|
||||
powernets+=PN
|
||||
if(powerlist.len>0)
|
||||
propagate_network(powerlist[1],PN)
|
||||
if(oldPN.cables.len==0&&oldPN.nodes.len==0)
|
||||
//world.log << "There was a loop, so the old powernet was destroyed, removing it"
|
||||
powernets-=oldPN
|
||||
|
||||
// cut a powernet at this cable object
|
||||
/datum/powernet/proc/cut_cable(var/obj/structure/cable/C)
|
||||
var/turf/T1 = C.loc
|
||||
if(!T1) return
|
||||
var/node = 0
|
||||
if(C.d1 == 0)
|
||||
node = 1
|
||||
|
||||
var/turf/T2
|
||||
if(C.d2) T2 = get_step(T1, C.d2)
|
||||
if(C.d1) T1 = get_step(T1, C.d1)
|
||||
//now that the powernet is set, connect found machines to it
|
||||
for(var/obj/machinery/power/PM in found_machines)
|
||||
if(!PM.connect_to_network()) //couldn't find a node on its turf...
|
||||
PM.disconnect_from_network() //... so disconnect if already on a powernet
|
||||
|
||||
|
||||
var/list/P1 = power_list(T1, C, C.d1) // what joins on to cut cable in dir1
|
||||
var/list/P2 = power_list(T2, C, C.d2) // what joins on to cut cable in dir2
|
||||
|
||||
// if(Debug)
|
||||
// for(var/obj/O in P1)
|
||||
// world.log << "P1: [O] at [O.x] [O.y] : [istype(O, /obj/structure/cable) ? "[O:d1]/[O:d2]" : null] "
|
||||
// for(var/obj/O in P2)
|
||||
// world.log << "P2: [O] at [O.x] [O.y] : [istype(O, /obj/structure/cable) ? "[O:d1]/[O:d2]" : null] "
|
||||
|
||||
|
||||
if(P1.len == 0 || P2.len == 0)//if nothing in either list, then the cable was an endpoint no need to rebuild the powernet,
|
||||
cables -= C //just remove cut cable from the list
|
||||
// if(Debug) world.log << "Was end of cable"
|
||||
//Merge two powernets, the bigger (in cable length term) absorbing the other
|
||||
/proc/merge_powernets(var/datum/powernet/net1, var/datum/powernet/net2)
|
||||
if(!net1 || !net2) //if one of the powernet doesn't exist, return
|
||||
return
|
||||
|
||||
//null the powernet reference of all cables & nodes in this powernet
|
||||
var/i=1
|
||||
while(i<=cables.len)
|
||||
var/obj/structure/cable/Cable = cables[i]
|
||||
if(Cable)
|
||||
Cable.powernet = null
|
||||
if(Cable == C)
|
||||
cables.Cut(i,i+1)
|
||||
continue
|
||||
i++
|
||||
i=1
|
||||
while(i<=nodes.len)
|
||||
var/obj/machinery/power/Node = nodes[i]
|
||||
if(Node)
|
||||
Node.powernet = null
|
||||
i++
|
||||
|
||||
// remove the cut cable from the network
|
||||
// C.netnum = -1
|
||||
|
||||
C.loc = null
|
||||
|
||||
powernet_nextlink(P1[1], src) // propagate network from 1st side of cable, using current netnum //TODO?
|
||||
|
||||
// now test to see if propagation reached to the other side
|
||||
// if so, then there's a loop in the network
|
||||
var/notlooped = 0
|
||||
for(var/O in P2)
|
||||
if( istype(O, /obj/machinery/power) )
|
||||
var/obj/machinery/power/Machine = O
|
||||
if(Machine.powernet != src)
|
||||
notlooped = 1
|
||||
break
|
||||
else if( istype(O, /obj/structure/cable) )
|
||||
var/obj/structure/cable/Cable = O
|
||||
if(Cable.powernet != src)
|
||||
notlooped = 1
|
||||
break
|
||||
|
||||
if(notlooped)
|
||||
// not looped, so make a new powernet
|
||||
var/datum/powernet/PN = new()
|
||||
powernets += PN
|
||||
|
||||
// if(Debug) world.log << "Was not looped: spliting PN#[number] ([cables.len];[nodes.len])"
|
||||
|
||||
i=1
|
||||
while(i<=cables.len)
|
||||
var/obj/structure/cable/Cable = cables[i]
|
||||
if(Cable && !Cable.powernet) // non-connected cables will have powernet=null, since they weren't reached by propagation
|
||||
Cable.powernet = PN
|
||||
cables.Cut(i,i+1) // remove from old network & add to new one
|
||||
PN.cables += Cable
|
||||
continue
|
||||
i++
|
||||
|
||||
i=1
|
||||
while(i<=nodes.len)
|
||||
var/obj/machinery/power/Node = nodes[i]
|
||||
if(Node && !Node.powernet)
|
||||
Node.powernet = PN
|
||||
nodes.Cut(i,i+1)
|
||||
PN.nodes[Node] = Node
|
||||
continue
|
||||
i++
|
||||
|
||||
// Disconnect machines connected to nodes
|
||||
if(node)
|
||||
for(var/obj/machinery/power/P in T1)
|
||||
if(P.powernet && !P.powernet.nodes[src])
|
||||
P.disconnect_from_network()
|
||||
// if(Debug)
|
||||
// world.log << "Old PN#[number] : ([cables.len];[nodes.len])"
|
||||
// world.log << "New PN#[PN.number] : ([PN.cables.len];[PN.nodes.len])"
|
||||
//
|
||||
// else
|
||||
// if(Debug)
|
||||
// world.log << "Was looped."
|
||||
// //there is a loop, so nothing to be done
|
||||
// return
|
||||
|
||||
|
||||
|
||||
/datum/powernet/proc/reset()
|
||||
load = newload
|
||||
newload = 0
|
||||
avail = newavail
|
||||
newavail = 0
|
||||
|
||||
|
||||
viewload = 0.8*viewload + 0.2*load
|
||||
|
||||
viewload = round(viewload)
|
||||
|
||||
var/numapc = 0
|
||||
|
||||
if(nodes && nodes.len)
|
||||
for(var/obj/machinery/power/terminal/term in nodes)
|
||||
if( istype( term.master, /obj/machinery/power/apc ) )
|
||||
numapc++
|
||||
|
||||
if(numapc)
|
||||
perapc = avail/numapc
|
||||
|
||||
netexcess = avail - load
|
||||
|
||||
if( netexcess > 100) // if there was excess power last cycle
|
||||
if(nodes && nodes.len)
|
||||
for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network
|
||||
if(S.powernet == src)
|
||||
S.restore() // and restore some of the power that was used
|
||||
else
|
||||
error("[S.name] (\ref[S]) had a [S.powernet ? "different (\ref[S.powernet])" : "null"] powernet to our powernet (\ref[src]).") //this line is a faggot and using the normal ERROR proc breaks it
|
||||
nodes.Remove(S)
|
||||
|
||||
/datum/powernet/proc/get_electrocute_damage()
|
||||
switch(avail)/*
|
||||
if (1300000 to INFINITY)
|
||||
return min(rand(70,150),rand(70,150))
|
||||
if (750000 to 1300000)
|
||||
return min(rand(50,115),rand(50,115))
|
||||
if (100000 to 750000-1)
|
||||
return min(rand(35,101),rand(35,101))
|
||||
if (75000 to 100000-1)
|
||||
return min(rand(30,95),rand(30,95))
|
||||
if (50000 to 75000-1)
|
||||
return min(rand(25,80),rand(25,80))
|
||||
if (25000 to 50000-1)
|
||||
return min(rand(20,70),rand(20,70))
|
||||
if (10000 to 25000-1)
|
||||
return min(rand(20,65),rand(20,65))
|
||||
if (1000 to 10000-1)
|
||||
return min(rand(10,20),rand(10,20))*/
|
||||
if (1000000 to INFINITY)
|
||||
return min(rand(50,160),rand(50,160))
|
||||
if (200000 to 1000000)
|
||||
return min(rand(25,80),rand(25,80))
|
||||
if (100000 to 200000)//Ave powernet
|
||||
return min(rand(20,60),rand(20,60))
|
||||
if (50000 to 100000)
|
||||
return min(rand(15,40),rand(15,40))
|
||||
if (1000 to 50000)
|
||||
return min(rand(10,20),rand(10,20))
|
||||
else
|
||||
return 0
|
||||
|
||||
//The powernet that calls this proc will consume the other powernet
|
||||
/proc/merge_powernets(var/datum/powernet/net1, var/datum/powernet/net2)
|
||||
if(!net1 || !net2) return
|
||||
if(net1 == net2) return
|
||||
if(net1 == net2) //don't merge same powernets
|
||||
return
|
||||
|
||||
//We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code.
|
||||
if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around
|
||||
@@ -464,56 +266,24 @@
|
||||
net1 = net2
|
||||
net2 = temp
|
||||
|
||||
//we don't use add_cable and add_machine here, because that could
|
||||
//change the size of net2.nodes or net2.cables while in the loop (runtime galore)
|
||||
for(var/i=1,i<=net2.nodes.len,i++) //merge net2 into net1
|
||||
var/obj/machinery/power/Node = net2.nodes[i]
|
||||
var/obj/machinery/power/Node = net2.nodes[i] //merge power machines
|
||||
if(Node)
|
||||
Node.powernet = net1
|
||||
net1.nodes[Node] = Node
|
||||
|
||||
for(var/i=1,i<=net2.cables.len,i++)
|
||||
var/obj/structure/cable/Cable = net2.cables[i]
|
||||
var/obj/structure/cable/Cable = net2.cables[i] //merge cables
|
||||
if(Cable)
|
||||
Cable.powernet = net1
|
||||
net1.cables += Cable
|
||||
|
||||
del(net2)
|
||||
qdel(net2) //garbage collect the now empty powernet
|
||||
|
||||
return net1
|
||||
|
||||
|
||||
/obj/machinery/power/proc/connect_to_network()
|
||||
var/turf/T = src.loc
|
||||
if(!T || !istype(T)) return 0
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(!C || !C.powernet) return 0
|
||||
// makepowernets() //TODO: find fast way //EWWWW what are you doing!?
|
||||
powernet = C.powernet
|
||||
powernet.nodes[src] = src
|
||||
return 1
|
||||
|
||||
/obj/machinery/power/proc/disconnect_from_network()
|
||||
if(!powernet)
|
||||
//world << " no powernet"
|
||||
return 0
|
||||
powernet.nodes -= src
|
||||
powernet = null
|
||||
//world << "powernet null"
|
||||
return 1
|
||||
|
||||
/turf/proc/get_cable_node()
|
||||
if(!istype(src, /turf/simulated/floor))
|
||||
return null
|
||||
for(var/obj/structure/cable/C in src)
|
||||
if(C.d1 == 0)
|
||||
return C
|
||||
return null
|
||||
|
||||
/area/proc/get_apc()
|
||||
for(var/area/RA in src.related)
|
||||
var/obj/machinery/power/apc/FINDME = locate() in RA
|
||||
if (FINDME)
|
||||
return FINDME
|
||||
|
||||
|
||||
//Determines how strong could be shock, deals damage to mob, uses power.
|
||||
//M is a mob who touched wire/whatever
|
||||
//power_source is a source of electricity, can be powercell, area, apc, cable, powernet or null
|
||||
@@ -579,3 +349,143 @@
|
||||
cell.use(drained_energy)
|
||||
return drained_energy
|
||||
|
||||
////////////////////////////////////////////
|
||||
// POWERNET DATUM PROCS
|
||||
// each contiguous network of cables & nodes
|
||||
////////////////////////////////////////////
|
||||
|
||||
/datum/powernet/New()
|
||||
powernets += src
|
||||
|
||||
/datum/powernet/Destroy()
|
||||
powernets -= src
|
||||
|
||||
/datum/powernet/proc/is_empty()
|
||||
return !cables.len && !nodes.len
|
||||
|
||||
//remove a cable from the current powernet
|
||||
//if the powernet is then empty, delete it
|
||||
//Warning : this proc DON'T check if the cable exists
|
||||
/datum/powernet/proc/remove_cable(var/obj/structure/cable/C)
|
||||
cables -= C
|
||||
C.powernet = null
|
||||
if(is_empty())//the powernet is now empty...
|
||||
qdel(src)///... delete it
|
||||
|
||||
//add a cable to the current powernet
|
||||
//Warning : this proc DON'T check if the cable exists
|
||||
/datum/powernet/proc/add_cable(var/obj/structure/cable/C)
|
||||
if(C.powernet)// if C already has a powernet...
|
||||
if(C.powernet == src)
|
||||
return
|
||||
else
|
||||
C.powernet.remove_cable(C) //..remove it
|
||||
C.powernet = src
|
||||
cables +=C
|
||||
|
||||
//remove a power machine from the current powernet
|
||||
//if the powernet is then empty, delete it
|
||||
//Warning : this proc DON'T check if the machine exists
|
||||
/datum/powernet/proc/remove_machine(var/obj/machinery/power/M)
|
||||
nodes -=M
|
||||
M.powernet = null
|
||||
if(is_empty())//the powernet is now empty...
|
||||
qdel(src)///... delete it
|
||||
|
||||
|
||||
//add a power machine to the current powernet
|
||||
//Warning : this proc DON'T check if the machine exists
|
||||
/datum/powernet/proc/add_machine(var/obj/machinery/power/M)
|
||||
if(M.powernet)// if M already has a powernet...
|
||||
if(M.powernet == src)
|
||||
return
|
||||
else
|
||||
M.powernet.remove_machine(M) //..remove it
|
||||
M.powernet = src
|
||||
nodes[M] = M
|
||||
|
||||
//handles the power changes in the powernet
|
||||
//called every ticks by the powernet controller
|
||||
/datum/powernet/proc/reset()
|
||||
load = newload
|
||||
newload = 0
|
||||
avail = newavail
|
||||
newavail = 0
|
||||
|
||||
|
||||
viewload = 0.8*viewload + 0.2*load
|
||||
|
||||
viewload = round(viewload)
|
||||
|
||||
var/numapc = 0
|
||||
|
||||
if(nodes && nodes.len)
|
||||
for(var/obj/machinery/power/terminal/term in nodes)
|
||||
if( istype( term.master, /obj/machinery/power/apc ) )
|
||||
numapc++
|
||||
|
||||
if(numapc)
|
||||
perapc = avail/numapc
|
||||
|
||||
netexcess = avail - load
|
||||
|
||||
if( netexcess > 100) // if there was excess power last cycle
|
||||
if(nodes && nodes.len)
|
||||
for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network
|
||||
if(S.powernet == src)
|
||||
S.restore() // and restore some of the power that was used
|
||||
else
|
||||
error("[S.name] (\ref[S]) had a [S.powernet ? "different (\ref[S.powernet])" : "null"] powernet to our powernet (\ref[src]).") //this line is a faggot and using the normal ERROR proc breaks it
|
||||
nodes.Remove(S)
|
||||
|
||||
/datum/powernet/proc/get_electrocute_damage()
|
||||
switch(avail)/*
|
||||
if (1300000 to INFINITY)
|
||||
return min(rand(70,150),rand(70,150))
|
||||
if (750000 to 1300000)
|
||||
return min(rand(50,115),rand(50,115))
|
||||
if (100000 to 750000-1)
|
||||
return min(rand(35,101),rand(35,101))
|
||||
if (75000 to 100000-1)
|
||||
return min(rand(30,95),rand(30,95))
|
||||
if (50000 to 75000-1)
|
||||
return min(rand(25,80),rand(25,80))
|
||||
if (25000 to 50000-1)
|
||||
return min(rand(20,70),rand(20,70))
|
||||
if (10000 to 25000-1)
|
||||
return min(rand(20,65),rand(20,65))
|
||||
if (1000 to 10000-1)
|
||||
return min(rand(10,20),rand(10,20))*/
|
||||
if (1000000 to INFINITY)
|
||||
return min(rand(50,160),rand(50,160))
|
||||
if (200000 to 1000000)
|
||||
return min(rand(25,80),rand(25,80))
|
||||
if (100000 to 200000)//Ave powernet
|
||||
return min(rand(20,60),rand(20,60))
|
||||
if (50000 to 100000)
|
||||
return min(rand(15,40),rand(15,40))
|
||||
if (1000 to 50000)
|
||||
return min(rand(10,20),rand(10,20))
|
||||
else
|
||||
return 0
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// Misc.
|
||||
///////////////////////////////////////////////
|
||||
|
||||
|
||||
// return a knot cable (O-X) if one is present in the turf
|
||||
// null if there's none
|
||||
/turf/proc/get_cable_node()
|
||||
if(!istype(src, /turf/simulated/floor))
|
||||
return null
|
||||
for(var/obj/structure/cable/C in src)
|
||||
if(C.d1 == 0)
|
||||
return C
|
||||
return null
|
||||
|
||||
/area/proc/get_apc()
|
||||
for(var/area/RA in src.related)
|
||||
var/obj/machinery/power/apc/FINDME = locate() in RA
|
||||
if (FINDME)
|
||||
return FINDME
|
||||
@@ -492,6 +492,7 @@ var/global/list/uneatable = list(
|
||||
/obj/machinery/singularity/narsie/large/New()
|
||||
..()
|
||||
world << "<font size='15' color='red'><b>NAR-SIE HAS RISEN</b></font>"
|
||||
world << pick(sound('sound/hallucinations/im_here1.ogg'), sound('sound/hallucinations/im_here2.ogg'))
|
||||
if(emergency_shuttle)
|
||||
emergency_shuttle.incall(0.3) // Cannot recall
|
||||
|
||||
@@ -537,7 +538,8 @@ var/global/list/uneatable = list(
|
||||
|
||||
if(istype(A,/mob/living/))
|
||||
var/mob/living/C = A
|
||||
C.dust()
|
||||
C.spawn_dust()
|
||||
C.gib()
|
||||
|
||||
if(isturf(A))
|
||||
var/turf/T = A
|
||||
|
||||
@@ -33,10 +33,10 @@ var/list/solars_list = list()
|
||||
solars_list.Remove(src)
|
||||
|
||||
/obj/machinery/power/solar/connect_to_network()
|
||||
..()
|
||||
var/to_return = ..()
|
||||
if(powernet) //if connected and not already in solar_list...
|
||||
solars_list |= src //... add it
|
||||
|
||||
return to_return
|
||||
|
||||
/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
@@ -287,9 +287,10 @@ var/list/solars_list = list()
|
||||
solars_list.Remove(src)
|
||||
|
||||
/obj/machinery/power/solar_control/connect_to_network()
|
||||
..()
|
||||
var/to_return = ..()
|
||||
if(powernet) //if connected and not already in solar_list...
|
||||
solars_list |= src //... add it
|
||||
return to_return
|
||||
|
||||
/obj/machinery/power/solar_control/initialize()
|
||||
..()
|
||||
|
||||
@@ -26,9 +26,10 @@
|
||||
solars_list.Remove(src)
|
||||
|
||||
/obj/machinery/power/tracker/connect_to_network()
|
||||
..()
|
||||
var/to_return = ..()
|
||||
if(powernet) //if connected and not already in solar_list...
|
||||
solars_list |= src //... add it
|
||||
return to_return
|
||||
|
||||
/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
|
||||
@@ -10,9 +10,8 @@
|
||||
var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next.
|
||||
|
||||
/obj/item/weapon/gun/energy/emp_act(severity)
|
||||
power_supply.use(round(power_supply.maxcharge / severity))
|
||||
power_supply.use(round(power_supply.charge / severity))
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/New()
|
||||
|
||||
@@ -649,11 +649,14 @@ datum
|
||||
|
||||
reaction_turf(var/turf/T, var/volume)
|
||||
src = null
|
||||
if(volume >= 5)
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
T:thermite = 1
|
||||
T.overlays.Cut()
|
||||
T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
|
||||
if(volume >= 1 && istype(T, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/Wall = T
|
||||
if(istype(Wall, /turf/simulated/wall/r_wall))
|
||||
Wall.thermite = Wall.thermite+(volume*2.5)
|
||||
else
|
||||
Wall.thermite = Wall.thermite+(volume*10)
|
||||
Wall.overlays = list()
|
||||
Wall.overlays += image('icons/effects/effects.dmi',"thermite")
|
||||
return
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
|
||||
@@ -72,6 +72,11 @@
|
||||
if(NOCLONE in T.mutations) //target done been et, no more blood in him
|
||||
user << "<span class='notice'>You are unable to locate any blood.</span>"
|
||||
return
|
||||
if(target != user)
|
||||
target.visible_message("<span class='danger'>[user] is trying to take a blood sample from [target]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to take a blood sample from [target]!</span>")
|
||||
if(!do_mob(user, target))
|
||||
return
|
||||
B.holder = src
|
||||
B.volume = amount
|
||||
//set reagent data
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user