Merge remote-tracking branch 'upstream/master'
This commit is contained in:
+1
-1
@@ -17,7 +17,7 @@ TGS3.json
|
|||||||
cfg
|
cfg
|
||||||
data
|
data
|
||||||
SQL
|
SQL
|
||||||
tgui/node_modules
|
node_modules
|
||||||
tgstation.dmb
|
tgstation.dmb
|
||||||
tgstation.int
|
tgstation.int
|
||||||
tgstation.rsc
|
tgstation.rsc
|
||||||
|
|||||||
+12
-2
@@ -257,6 +257,12 @@ This prevents nesting levels from getting deeper then they need to be.
|
|||||||
* Please attempt to clean out any dirty variables that may be contained within items you alter through var-editing. For example, due to how DM functions, changing the `pixel_x` variable from 23 to 0 will leave a dirty record in the map's code of `pixel_x = 0`. Likewise this can happen when changing an item's icon to something else and then back. This can lead to some issues where an item's icon has changed within the code, but becomes broken on the map due to it still attempting to use the old entry.
|
* Please attempt to clean out any dirty variables that may be contained within items you alter through var-editing. For example, due to how DM functions, changing the `pixel_x` variable from 23 to 0 will leave a dirty record in the map's code of `pixel_x = 0`. Likewise this can happen when changing an item's icon to something else and then back. This can lead to some issues where an item's icon has changed within the code, but becomes broken on the map due to it still attempting to use the old entry.
|
||||||
* Areas should not be var-edited on a map to change it's name or attributes. All areas of a single type and it's altered instances are considered the same area within the code, and editing their variables on a map can lead to issues with powernets and event subsystems which are difficult to debug.
|
* Areas should not be var-edited on a map to change it's name or attributes. All areas of a single type and it's altered instances are considered the same area within the code, and editing their variables on a map can lead to issues with powernets and event subsystems which are difficult to debug.
|
||||||
|
|
||||||
|
### User Interfaces
|
||||||
|
* All new player-facing user interfaces must use TGUI.
|
||||||
|
* Raw HTML is permitted for admin and debug UIs.
|
||||||
|
* Documentation for TGUI can be found at:
|
||||||
|
* [tgui/README.md](../tgui/README.md)
|
||||||
|
* [tgui/tutorial-and-examples.md](../tgui/docs/tutorial-and-examples.md)
|
||||||
|
|
||||||
### Other Notes
|
### Other Notes
|
||||||
* Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the "tools.dm" file)
|
* Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the "tools.dm" file)
|
||||||
@@ -337,7 +343,7 @@ for(var/obj/item/sword/S in bag_of_swords)
|
|||||||
if(!best_sword || S.damage > best_sword.damage)
|
if(!best_sword || S.damage > best_sword.damage)
|
||||||
best_sword = S
|
best_sword = S
|
||||||
```
|
```
|
||||||
specifies a type for DM to filter by.
|
specifies a type for DM to filter by.
|
||||||
|
|
||||||
With the previous example that's perfectly fine, we only want swords, but here the bag only contains swords? Is DM still going to try to filter because we gave it a type to filter by? YES, and here comes the inefficiency. Wherever a list (or other container, such as an atom (in which case you're technically accessing their special contents list, but that's irrelevant)) contains datums of the same datatype or subtypes of the datatype you require for your loop's body,
|
With the previous example that's perfectly fine, we only want swords, but here the bag only contains swords? Is DM still going to try to filter because we gave it a type to filter by? YES, and here comes the inefficiency. Wherever a list (or other container, such as an atom (in which case you're technically accessing their special contents list, but that's irrelevant)) contains datums of the same datatype or subtypes of the datatype you require for your loop's body,
|
||||||
you can circumvent DM's filtering and automatic ```istype()``` checks by writing the loop as such:
|
you can circumvent DM's filtering and automatic ```istype()``` checks by writing the loop as such:
|
||||||
@@ -374,7 +380,7 @@ mob
|
|||||||
```
|
```
|
||||||
This does NOT mean that you can access it everywhere like a global var. Instead, it means that that var will only exist once for all instances of its type, in this case that var will only exist once for all mobs - it's shared across everything in its type. (Much more like the keyword `static` in other languages like PHP/C++/C#/Java)
|
This does NOT mean that you can access it everywhere like a global var. Instead, it means that that var will only exist once for all instances of its type, in this case that var will only exist once for all mobs - it's shared across everything in its type. (Much more like the keyword `static` in other languages like PHP/C++/C#/Java)
|
||||||
|
|
||||||
Isn't that confusing?
|
Isn't that confusing?
|
||||||
|
|
||||||
There is also an undocumented keyword called `static` that has the same behaviour as global but more correctly describes BYOND's behaviour. Therefore, we always use static instead of global where we need it, as it reduces suprise when reading BYOND code.
|
There is also an undocumented keyword called `static` that has the same behaviour as global but more correctly describes BYOND's behaviour. Therefore, we always use static instead of global where we need it, as it reduces suprise when reading BYOND code.
|
||||||
|
|
||||||
@@ -394,6 +400,10 @@ There is no strict process when it comes to merging pull requests. Pull requests
|
|||||||
|
|
||||||
* Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR.
|
* Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR.
|
||||||
|
|
||||||
|
* If your pull request is not finished make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement will be closed. You may request a maintainer reopen the pull request when you're ready, or make a new one.
|
||||||
|
|
||||||
|
* While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality *before* you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes.
|
||||||
|
|
||||||
## Porting features/sprites/sounds/tools from other codebases
|
## Porting features/sprites/sounds/tools from other codebases
|
||||||
|
|
||||||
If you are porting features/tools from other codebases, you must give them credit where it's due. Typically, crediting them in your pull request and the changelog is the recommended way of doing it. Take note of what license they use though, porting stuff from AGPLv3 and GPLv3 codebases are allowed.
|
If you are porting features/tools from other codebases, you must give them credit where it's due. Typically, crediting them in your pull request and the changelog is the recommended way of doing it. Take note of what license they use though, porting stuff from AGPLv3 and GPLv3 codebases are allowed.
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- 'master'
|
- 'master'
|
||||||
paths:
|
paths:
|
||||||
- 'tgui-next/**.js'
|
- 'tgui/**.js'
|
||||||
- 'tgui-next/**.scss'
|
- 'tgui/**.scss'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -23,7 +23,7 @@ jobs:
|
|||||||
node-version: '>=12.13'
|
node-version: '>=12.13'
|
||||||
- name: Build TGUI
|
- name: Build TGUI
|
||||||
run: bin/tgui --ci
|
run: bin/tgui --ci
|
||||||
working-directory: ./tgui-next
|
working-directory: ./tgui
|
||||||
- name: Commit Artifacts
|
- name: Commit Artifacts
|
||||||
run: |
|
run: |
|
||||||
git config --local user.email "action@github.com"
|
git config --local user.email "action@github.com"
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ matrix:
|
|||||||
- tools/travis/check_filedirs.sh tgstation.dme
|
- tools/travis/check_filedirs.sh tgstation.dme
|
||||||
- tools/travis/check_changelogs.sh
|
- tools/travis/check_changelogs.sh
|
||||||
- find . -name "*.php" -print0 | xargs -0 -n1 php -l
|
- find . -name "*.php" -print0 | xargs -0 -n1 php -l
|
||||||
- find . -name "*.json" -not -path "./tgui/node_modules/*" -print0 | xargs -0 python3 ./tools/json_verifier.py
|
- find . -name "*.json" -not -path "*/node_modules/*" -print0 | xargs -0 python3 ./tools/json_verifier.py
|
||||||
- tools/travis/build_tgui.sh
|
- tools/travis/build_tgui.sh
|
||||||
- tools/travis/check_grep.sh
|
- tools/travis/check_grep.sh
|
||||||
- python3 tools/travis/check_line_endings.py
|
- python3 tools/travis/check_line_endings.py
|
||||||
|
|||||||
@@ -932,7 +932,6 @@
|
|||||||
/obj/machinery/airalarm/all_access{
|
/obj/machinery/airalarm/all_access{
|
||||||
dir = 1;
|
dir = 1;
|
||||||
icon_state = "alarm0";
|
icon_state = "alarm0";
|
||||||
pixel_x = 0;
|
|
||||||
pixel_y = -24
|
pixel_y = -24
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
|
|||||||
@@ -1453,7 +1453,7 @@
|
|||||||
/area/ruin/space/has_grav/hotel/guestroom/room_2)
|
/area/ruin/space/has_grav/hotel/guestroom/room_2)
|
||||||
"eu" = (
|
"eu" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/ruin/space/has_grav/hotel/guestroom/room_2)
|
/area/ruin/space/has_grav/hotel/guestroom/room_2)
|
||||||
"ev" = (
|
"ev" = (
|
||||||
|
|||||||
@@ -3594,36 +3594,12 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
/area/awaymission/academy/academygate)
|
/area/awaymission/academy/academygate)
|
||||||
"km" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/structure/cable{
|
|
||||||
icon_state = "1-4"
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"kn" = (
|
"kn" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "2-8"
|
icon_state = "2-8"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/awaymission/academy/academygate)
|
/area/awaymission/academy/academygate)
|
||||||
"ko" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"kp" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"kq" = (
|
"kq" = (
|
||||||
/mob/living/simple_animal/hostile/wizard,
|
/mob/living/simple_animal/hostile/wizard,
|
||||||
/obj/effect/turf_decal/tile/yellow{
|
/obj/effect/turf_decal/tile/yellow{
|
||||||
@@ -3634,28 +3610,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/academy/classrooms)
|
/area/awaymission/academy/classrooms)
|
||||||
"kr" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"ks" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"kt" = (
|
|
||||||
/obj/machinery/gateway,
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"ku" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/awaymission/academy/academygate)
|
|
||||||
"kv" = (
|
"kv" = (
|
||||||
/obj/machinery/light,
|
/obj/machinery/light,
|
||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
@@ -3737,7 +3691,7 @@
|
|||||||
/area/awaymission/academy/academyaft)
|
/area/awaymission/academy/academyaft)
|
||||||
"kI" = (
|
"kI" = (
|
||||||
/obj/structure/cable,
|
/obj/structure/cable,
|
||||||
/obj/machinery/gateway/centeraway,
|
/obj/machinery/gateway/away,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/awaymission/academy/academygate)
|
/area/awaymission/academy/academygate)
|
||||||
"kJ" = (
|
"kJ" = (
|
||||||
@@ -13173,10 +13127,10 @@ jZ
|
|||||||
kb
|
kb
|
||||||
ke
|
ke
|
||||||
kj
|
kj
|
||||||
km
|
kk
|
||||||
kp
|
kf
|
||||||
ks
|
kf
|
||||||
Ao
|
kf
|
||||||
kf
|
kf
|
||||||
ky
|
ky
|
||||||
kf
|
kf
|
||||||
@@ -13305,8 +13259,8 @@ jW
|
|||||||
Ao
|
Ao
|
||||||
kn
|
kn
|
||||||
kI
|
kI
|
||||||
kt
|
kf
|
||||||
Ao
|
kf
|
||||||
kf
|
kf
|
||||||
ky
|
ky
|
||||||
mF
|
mF
|
||||||
@@ -13432,11 +13386,11 @@ jV
|
|||||||
jY
|
jY
|
||||||
kc
|
kc
|
||||||
jW
|
jW
|
||||||
Ao
|
kf
|
||||||
ko
|
kf
|
||||||
kr
|
kf
|
||||||
ku
|
kf
|
||||||
Ao
|
kf
|
||||||
kf
|
kf
|
||||||
ky
|
ky
|
||||||
kf
|
kf
|
||||||
|
|||||||
@@ -633,24 +633,6 @@
|
|||||||
/obj/machinery/processor,
|
/obj/machinery/processor,
|
||||||
/turf/open/floor/plasteel/freezer,
|
/turf/open/floor/plasteel/freezer,
|
||||||
/area/awaymission/cabin)
|
/area/awaymission/cabin)
|
||||||
"cb" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cc" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cd" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"ce" = (
|
"ce" = (
|
||||||
/obj/structure/chair/wood{
|
/obj/structure/chair/wood{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -733,20 +715,8 @@
|
|||||||
"cn" = (
|
"cn" = (
|
||||||
/turf/open/lava,
|
/turf/open/lava,
|
||||||
/area/awaymission/cabin/caves/mountain)
|
/area/awaymission/cabin/caves/mountain)
|
||||||
"co" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cp" = (
|
"cp" = (
|
||||||
/obj/machinery/gateway/centeraway,
|
/obj/machinery/gateway/away,
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cq" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/awaymission/cabin)
|
/area/awaymission/cabin)
|
||||||
"cr" = (
|
"cr" = (
|
||||||
@@ -787,23 +757,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/white,
|
/turf/open/floor/plasteel/white,
|
||||||
/area/awaymission/cabin)
|
/area/awaymission/cabin)
|
||||||
"cw" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cx" = (
|
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/effect/mapping_helpers/network_builder/power_cable/yellow/auto,
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cy" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/turf/open/floor/wood,
|
|
||||||
/area/awaymission/cabin)
|
|
||||||
"cz" = (
|
"cz" = (
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -35769,9 +35722,9 @@ an
|
|||||||
bk
|
bk
|
||||||
bJ
|
bJ
|
||||||
an
|
an
|
||||||
cb
|
aq
|
||||||
co
|
aq
|
||||||
cw
|
aq
|
||||||
aq
|
aq
|
||||||
cH
|
cH
|
||||||
cQ
|
cQ
|
||||||
@@ -36026,9 +35979,9 @@ an
|
|||||||
nU
|
nU
|
||||||
an
|
an
|
||||||
an
|
an
|
||||||
cc
|
aq
|
||||||
cp
|
cp
|
||||||
cx
|
eg
|
||||||
eg
|
eg
|
||||||
eg
|
eg
|
||||||
cQ
|
cQ
|
||||||
@@ -36283,9 +36236,9 @@ an
|
|||||||
jf
|
jf
|
||||||
ay
|
ay
|
||||||
an
|
an
|
||||||
cd
|
aq
|
||||||
cq
|
aq
|
||||||
cy
|
aq
|
||||||
aq
|
aq
|
||||||
cH
|
cH
|
||||||
hH
|
hH
|
||||||
|
|||||||
@@ -224,63 +224,13 @@
|
|||||||
/mob/living/simple_animal/crab,
|
/mob/living/simple_animal/crab,
|
||||||
/turf/open/floor/plating/beach/sand,
|
/turf/open/floor/plating/beach/sand,
|
||||||
/area/awaymission/beach)
|
/area/awaymission/beach)
|
||||||
"aL" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aM" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aN" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aO" = (
|
"aO" = (
|
||||||
/obj/effect/baseturf_helper/beach/sand,
|
/obj/effect/baseturf_helper/beach/sand,
|
||||||
/turf/open/floor/plating/beach/sand,
|
/turf/open/floor/plating/beach/sand,
|
||||||
/area/awaymission/beach)
|
/area/awaymission/beach)
|
||||||
"aP" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aQ" = (
|
"aQ" = (
|
||||||
/obj/machinery/gateway/centeraway,
|
|
||||||
/obj/effect/turf_decal/sand,
|
/obj/effect/turf_decal/sand,
|
||||||
/turf/open/floor/plating/beach/sand,
|
/obj/machinery/gateway/away,
|
||||||
/area/awaymission/beach)
|
|
||||||
"aR" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
/turf/open/floor/plating/beach/sand,
|
||||||
/area/awaymission/beach)
|
/area/awaymission/beach)
|
||||||
"aS" = (
|
"aS" = (
|
||||||
@@ -295,32 +245,6 @@
|
|||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/area/awaymission/beach)
|
/area/awaymission/beach)
|
||||||
"aU" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aV" = (
|
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line,
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aW" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/sand,
|
|
||||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/beach/sand,
|
|
||||||
/area/awaymission/beach)
|
|
||||||
"aX" = (
|
"aX" = (
|
||||||
/turf/closed/wall/mineral/sandstone,
|
/turf/closed/wall/mineral/sandstone,
|
||||||
/area/awaymission/beach)
|
/area/awaymission/beach)
|
||||||
@@ -6896,9 +6820,9 @@ ak
|
|||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
aL
|
bf
|
||||||
aP
|
bp
|
||||||
aU
|
bx
|
||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
ba
|
ba
|
||||||
@@ -7003,9 +6927,9 @@ ak
|
|||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
aM
|
bg
|
||||||
aQ
|
aQ
|
||||||
aV
|
by
|
||||||
ba
|
ba
|
||||||
ba
|
ba
|
||||||
ba
|
ba
|
||||||
@@ -7110,9 +7034,9 @@ ak
|
|||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
aN
|
bh
|
||||||
aR
|
br
|
||||||
aW
|
bz
|
||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
ak
|
ak
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -866,21 +866,10 @@
|
|||||||
},
|
},
|
||||||
/area/awaymission/challenge/start)
|
/area/awaymission/challenge/start)
|
||||||
"cS" = (
|
"cS" = (
|
||||||
/obj/machinery/gateway{
|
/obj/machinery/gateway/away,
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/turf/open/floor/bluespace,
|
|
||||||
/area/awaymission/challenge/start)
|
|
||||||
"cT" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/turf/open/floor/bluespace,
|
/turf/open/floor/bluespace,
|
||||||
/area/awaymission/challenge/start)
|
/area/awaymission/challenge/start)
|
||||||
"cV" = (
|
"cV" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "1-2"
|
icon_state = "1-2"
|
||||||
},
|
},
|
||||||
@@ -894,24 +883,12 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/challenge/end)
|
/area/awaymission/challenge/end)
|
||||||
"cX" = (
|
"cX" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/turf/open/floor/bluespace,
|
/turf/open/floor/bluespace,
|
||||||
/area/awaymission/challenge/start)
|
/area/awaymission/challenge/start)
|
||||||
"cY" = (
|
|
||||||
/obj/machinery/gateway/centeraway{
|
|
||||||
calibrated = 0
|
|
||||||
},
|
|
||||||
/turf/open/floor/bluespace,
|
|
||||||
/area/awaymission/challenge/start)
|
|
||||||
"cZ" = (
|
"cZ" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "1-2"
|
icon_state = "1-2"
|
||||||
},
|
},
|
||||||
@@ -920,18 +897,11 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/bluespace,
|
/turf/open/floor/bluespace,
|
||||||
/area/awaymission/challenge/start)
|
/area/awaymission/challenge/start)
|
||||||
"da" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/turf/open/floor/bluespace,
|
|
||||||
/area/awaymission/challenge/start)
|
|
||||||
"db" = (
|
"db" = (
|
||||||
/obj/structure/window/reinforced,
|
/obj/structure/window/reinforced,
|
||||||
/turf/open/floor/circuit,
|
/turf/open/floor/circuit,
|
||||||
/area/awaymission/challenge/end)
|
/area/awaymission/challenge/end)
|
||||||
"dc" = (
|
"dc" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-4"
|
icon_state = "0-4"
|
||||||
},
|
},
|
||||||
@@ -996,9 +966,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/challenge/end)
|
/area/awaymission/challenge/end)
|
||||||
"dn" = (
|
"dn" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "1-8"
|
icon_state = "1-8"
|
||||||
},
|
},
|
||||||
@@ -28109,9 +28076,9 @@ aa
|
|||||||
ab
|
ab
|
||||||
ab
|
ab
|
||||||
ab
|
ab
|
||||||
cS
|
dq
|
||||||
cX
|
cX
|
||||||
da
|
dq
|
||||||
ab
|
ab
|
||||||
ab
|
ab
|
||||||
at
|
at
|
||||||
@@ -28366,8 +28333,8 @@ aa
|
|||||||
ab
|
ab
|
||||||
aB
|
aB
|
||||||
ab
|
ab
|
||||||
cT
|
dq
|
||||||
cY
|
cS
|
||||||
dc
|
dc
|
||||||
dq
|
dq
|
||||||
dq
|
dq
|
||||||
|
|||||||
@@ -191,60 +191,6 @@
|
|||||||
heat_capacity = 1e+006
|
heat_capacity = 1e+006
|
||||||
},
|
},
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
/area/awaymission/moonoutpost19/syndicate)
|
||||||
"aG" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
|
||||||
"aH" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
|
||||||
"aI" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
|
||||||
"aJ" = (
|
"aJ" = (
|
||||||
/obj/structure/alien/weeds,
|
/obj/structure/alien/weeds,
|
||||||
/obj/structure/alien/weeds{
|
/obj/structure/alien/weeds{
|
||||||
@@ -291,46 +237,8 @@
|
|||||||
heat_capacity = 1e+006
|
heat_capacity = 1e+006
|
||||||
},
|
},
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
/area/awaymission/moonoutpost19/syndicate)
|
||||||
"aO" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
|
||||||
"aP" = (
|
"aP" = (
|
||||||
/obj/machinery/gateway/centeraway{
|
/obj/machinery/gateway/away,
|
||||||
calibrated = 0
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
|
||||||
"aQ" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
/turf/open/floor/plasteel/dark{
|
||||||
heat_capacity = 1e+006
|
heat_capacity = 1e+006
|
||||||
},
|
},
|
||||||
@@ -377,9 +285,6 @@
|
|||||||
},
|
},
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
/area/awaymission/moonoutpost19/syndicate)
|
||||||
"aW" = (
|
"aW" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
@@ -395,7 +300,6 @@
|
|||||||
},
|
},
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
/area/awaymission/moonoutpost19/syndicate)
|
||||||
"aX" = (
|
"aX" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
@@ -414,9 +318,6 @@
|
|||||||
},
|
},
|
||||||
/area/awaymission/moonoutpost19/syndicate)
|
/area/awaymission/moonoutpost19/syndicate)
|
||||||
"aY" = (
|
"aY" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -41927,8 +41828,8 @@ ac
|
|||||||
ac
|
ac
|
||||||
at
|
at
|
||||||
az
|
az
|
||||||
aG
|
aW
|
||||||
aO
|
aW
|
||||||
aW
|
aW
|
||||||
aV
|
aV
|
||||||
br
|
br
|
||||||
@@ -42184,7 +42085,7 @@ ac
|
|||||||
ac
|
ac
|
||||||
at
|
at
|
||||||
aA
|
aA
|
||||||
aH
|
aW
|
||||||
aP
|
aP
|
||||||
aX
|
aX
|
||||||
bg
|
bg
|
||||||
@@ -42441,8 +42342,8 @@ ac
|
|||||||
ac
|
ac
|
||||||
at
|
at
|
||||||
aB
|
aB
|
||||||
aI
|
aW
|
||||||
aQ
|
aW
|
||||||
aY
|
aY
|
||||||
bh
|
bh
|
||||||
bt
|
bt
|
||||||
|
|||||||
@@ -592,27 +592,18 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bA" = (
|
"bA" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 9
|
dir = 9
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bB" = (
|
"bB" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bC" = (
|
"bC" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 5
|
dir = 5
|
||||||
},
|
},
|
||||||
@@ -764,24 +755,16 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bS" = (
|
"bS" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bT" = (
|
"bT" = (
|
||||||
/obj/machinery/gateway/centeraway{
|
/obj/machinery/gateway/away,
|
||||||
calibrated = 0
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bU" = (
|
"bU" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
@@ -830,24 +813,17 @@
|
|||||||
/turf/open/floor/plasteel/white,
|
/turf/open/floor/plasteel/white,
|
||||||
/area/awaymission/research/interior/engineering)
|
/area/awaymission/research/interior/engineering)
|
||||||
"bY" = (
|
"bY" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 10
|
dir = 10
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"bZ" = (
|
"bZ" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/effect/landmark/awaystart,
|
/obj/effect/landmark/awaystart,
|
||||||
/obj/effect/turf_decal/stripes/line,
|
/obj/effect/turf_decal/stripes/line,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/awaymission/research/interior/gateway)
|
/area/awaymission/research/interior/gateway)
|
||||||
"ca" = (
|
"ca" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 6
|
dir = 6
|
||||||
},
|
},
|
||||||
@@ -5395,7 +5371,7 @@
|
|||||||
/area/awaymission/research/interior/dorm)
|
/area/awaymission/research/interior/dorm)
|
||||||
"kS" = (
|
"kS" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/research/interior/dorm)
|
/area/awaymission/research/interior/dorm)
|
||||||
"kT" = (
|
"kT" = (
|
||||||
|
|||||||
@@ -2514,27 +2514,6 @@
|
|||||||
"fF" = (
|
"fF" = (
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
"fG" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/turf/open/floor/plasteel,
|
|
||||||
/area/awaymission/snowdin/post/gateway)
|
|
||||||
"fH" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/turf/open/floor/plasteel,
|
|
||||||
/area/awaymission/snowdin/post/gateway)
|
|
||||||
"fI" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/turf/open/floor/plasteel,
|
|
||||||
/area/awaymission/snowdin/post/gateway)
|
|
||||||
"fJ" = (
|
"fJ" = (
|
||||||
/obj/structure/table/reinforced,
|
/obj/structure/table/reinforced,
|
||||||
/obj/effect/turf_decal/tile/bar,
|
/obj/effect/turf_decal/tile/bar,
|
||||||
@@ -2894,29 +2873,16 @@
|
|||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
"gw" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
|
||||||
/turf/open/floor/plasteel,
|
|
||||||
/area/awaymission/snowdin/post/gateway)
|
|
||||||
"gx" = (
|
"gx" = (
|
||||||
/obj/machinery/gateway/centeraway{
|
|
||||||
calibrated = 0
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
|
/obj/machinery/gateway/away,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
"gy" = (
|
"gy" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
@@ -3263,15 +3229,11 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
"hl" = (
|
"hl" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
"hm" = (
|
"hm" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
@@ -3283,9 +3245,6 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/awaymission/snowdin/post/gateway)
|
/area/awaymission/snowdin/post/gateway)
|
||||||
"hn" = (
|
"hn" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
@@ -26601,8 +26560,8 @@ bE
|
|||||||
az
|
az
|
||||||
en
|
en
|
||||||
fh
|
fh
|
||||||
fG
|
gy
|
||||||
gw
|
hl
|
||||||
hl
|
hl
|
||||||
hR
|
hR
|
||||||
iA
|
iA
|
||||||
@@ -26858,7 +26817,7 @@ bE
|
|||||||
dK
|
dK
|
||||||
eo
|
eo
|
||||||
fh
|
fh
|
||||||
fH
|
gy
|
||||||
gx
|
gx
|
||||||
hm
|
hm
|
||||||
hS
|
hS
|
||||||
@@ -27115,7 +27074,7 @@ dk
|
|||||||
dK
|
dK
|
||||||
ep
|
ep
|
||||||
fh
|
fh
|
||||||
fI
|
gy
|
||||||
gy
|
gy
|
||||||
hn
|
hn
|
||||||
hT
|
hT
|
||||||
|
|||||||
@@ -3324,60 +3324,6 @@
|
|||||||
icon_state = "platingdmg1"
|
icon_state = "platingdmg1"
|
||||||
},
|
},
|
||||||
/area/awaymission/undergroundoutpost45/central)
|
/area/awaymission/undergroundoutpost45/central)
|
||||||
"gR" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
|
||||||
"gS" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
|
||||||
"gT" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
|
||||||
"gU" = (
|
"gU" = (
|
||||||
/obj/effect/spawner/structure/window/reinforced,
|
/obj/effect/spawner/structure/window/reinforced,
|
||||||
/turf/open/floor/plating{
|
/turf/open/floor/plating{
|
||||||
@@ -3634,46 +3580,8 @@
|
|||||||
heat_capacity = 1e+006
|
heat_capacity = 1e+006
|
||||||
},
|
},
|
||||||
/area/awaymission/undergroundoutpost45/crew_quarters)
|
/area/awaymission/undergroundoutpost45/crew_quarters)
|
||||||
"ht" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
|
||||||
"hu" = (
|
"hu" = (
|
||||||
/obj/machinery/gateway/centeraway{
|
/obj/machinery/gateway/away,
|
||||||
calibrated = 0
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
|
||||||
"hv" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
/turf/open/floor/plasteel/dark{
|
||||||
heat_capacity = 1e+006
|
heat_capacity = 1e+006
|
||||||
},
|
},
|
||||||
@@ -3958,26 +3866,7 @@
|
|||||||
heat_capacity = 1e+006
|
heat_capacity = 1e+006
|
||||||
},
|
},
|
||||||
/area/awaymission/undergroundoutpost45/central)
|
/area/awaymission/undergroundoutpost45/central)
|
||||||
"hY" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark{
|
|
||||||
heat_capacity = 1e+006
|
|
||||||
},
|
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
|
||||||
"hZ" = (
|
"hZ" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
@@ -3996,9 +3885,6 @@
|
|||||||
},
|
},
|
||||||
/area/awaymission/undergroundoutpost45/gateway)
|
/area/awaymission/undergroundoutpost45/gateway)
|
||||||
"ia" = (
|
"ia" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
@@ -33198,9 +33084,9 @@ ad
|
|||||||
ad
|
ad
|
||||||
gv
|
gv
|
||||||
gJ
|
gJ
|
||||||
gR
|
ia
|
||||||
ht
|
ia
|
||||||
hY
|
ia
|
||||||
it
|
it
|
||||||
iO
|
iO
|
||||||
jh
|
jh
|
||||||
@@ -33455,7 +33341,7 @@ ad
|
|||||||
ad
|
ad
|
||||||
gv
|
gv
|
||||||
gJ
|
gJ
|
||||||
gS
|
ia
|
||||||
hu
|
hu
|
||||||
hZ
|
hZ
|
||||||
iu
|
iu
|
||||||
@@ -33712,8 +33598,8 @@ ad
|
|||||||
ad
|
ad
|
||||||
gw
|
gw
|
||||||
gJ
|
gJ
|
||||||
gT
|
ia
|
||||||
hv
|
ia
|
||||||
ia
|
ia
|
||||||
iv
|
iv
|
||||||
iQ
|
iQ
|
||||||
|
|||||||
@@ -63,72 +63,11 @@
|
|||||||
/obj/structure/destructible/cult/pylon,
|
/obj/structure/destructible/cult/pylon,
|
||||||
/turf/open/floor/circuit/green/off,
|
/turf/open/floor/circuit/green/off,
|
||||||
/area/awaymission/wildwest/vault)
|
/area/awaymission/wildwest/vault)
|
||||||
"ar" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"as" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"at" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"au" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"av" = (
|
|
||||||
/obj/machinery/gateway/centeraway{
|
|
||||||
calibrated = 0
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"aw" = (
|
"aw" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
/turf/open/floor/plating/ironsand{
|
||||||
icon_state = "ironsand1"
|
icon_state = "ironsand1"
|
||||||
},
|
})
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"ax" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"ay" = (
|
|
||||||
/obj/machinery/gateway,
|
|
||||||
/turf/open/floor/plating/ironsand{
|
|
||||||
icon_state = "ironsand1"
|
|
||||||
},
|
|
||||||
/area/awaymission/wildwest/mines)
|
|
||||||
"az" = (
|
"az" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating/ironsand{
|
/turf/open/floor/plating/ironsand{
|
||||||
icon_state = "ironsand1"
|
icon_state = "ironsand1"
|
||||||
},
|
},
|
||||||
@@ -32745,9 +32684,9 @@ aT
|
|||||||
aN
|
aN
|
||||||
aN
|
aN
|
||||||
aT
|
aT
|
||||||
ar
|
aT
|
||||||
au
|
aT
|
||||||
ax
|
aT
|
||||||
aT
|
aT
|
||||||
aT
|
aT
|
||||||
aT
|
aT
|
||||||
@@ -33002,9 +32941,9 @@ aT
|
|||||||
aN
|
aN
|
||||||
aN
|
aN
|
||||||
aT
|
aT
|
||||||
as
|
aT
|
||||||
av
|
aT
|
||||||
ay
|
aT
|
||||||
aT
|
aT
|
||||||
aT
|
aT
|
||||||
aT
|
aT
|
||||||
@@ -33259,7 +33198,7 @@ aT
|
|||||||
aN
|
aN
|
||||||
aN
|
aN
|
||||||
aT
|
aT
|
||||||
at
|
aT
|
||||||
aw
|
aw
|
||||||
az
|
az
|
||||||
aT
|
aT
|
||||||
|
|||||||
@@ -350,7 +350,7 @@
|
|||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
"aaV" = (
|
"aaV" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
"aaW" = (
|
"aaW" = (
|
||||||
@@ -11788,63 +11788,12 @@
|
|||||||
/obj/item/instrument/eguitar,
|
/obj/item/instrument/eguitar,
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/crew_quarters/theatre)
|
/area/crew_quarters/theatre)
|
||||||
"azJ" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/right,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"azK" = (
|
"azK" = (
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"azL" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/left,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"azM" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"azN" = (
|
"azN" = (
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -12316,30 +12265,10 @@
|
|||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||||
/turf/closed/wall/r_wall,
|
/turf/closed/wall/r_wall,
|
||||||
/area/ai_monitored/nuke_storage)
|
/area/ai_monitored/nuke_storage)
|
||||||
"aBd" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"aBe" = (
|
"aBe" = (
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"aBf" = (
|
"aBf" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
/obj/effect/turf_decal/bot_white,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -12692,9 +12621,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/ai_monitored/nuke_storage)
|
/area/ai_monitored/nuke_storage)
|
||||||
"aBX" = (
|
"aBX" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/left,
|
/obj/effect/turf_decal/bot_white/left,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -12709,9 +12635,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"aBY" = (
|
"aBY" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/right,
|
/obj/effect/turf_decal/bot_white/right,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -12726,7 +12649,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"aBZ" = (
|
"aBZ" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
@@ -13795,8 +13717,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/ai_monitored/nuke_storage)
|
/area/ai_monitored/nuke_storage)
|
||||||
"aEQ" = (
|
"aEQ" = (
|
||||||
/obj/structure/table,
|
/obj/machinery/computer/gateway_control,
|
||||||
/obj/item/paper/pamphlet/gateway,
|
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"aER" = (
|
"aER" = (
|
||||||
@@ -54949,7 +54870,7 @@
|
|||||||
/area/engine/atmos)
|
/area/engine/atmos)
|
||||||
"hgO" = (
|
"hgO" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/item/storage/pill_bottle/dice{
|
/obj/item/storage/box/dice{
|
||||||
pixel_x = 4;
|
pixel_x = 4;
|
||||||
pixel_y = 4
|
pixel_y = 4
|
||||||
},
|
},
|
||||||
@@ -84053,8 +83974,8 @@ esK
|
|||||||
awb
|
awb
|
||||||
axt
|
axt
|
||||||
ayG
|
ayG
|
||||||
azJ
|
aBY
|
||||||
aBd
|
aBf
|
||||||
aBX
|
aBX
|
||||||
aDi
|
aDi
|
||||||
aEQ
|
aEQ
|
||||||
@@ -84310,7 +84231,7 @@ arP
|
|||||||
awb
|
awb
|
||||||
axt
|
axt
|
||||||
ayG
|
ayG
|
||||||
azM
|
aBf
|
||||||
aBg
|
aBg
|
||||||
aBZ
|
aBZ
|
||||||
aDx
|
aDx
|
||||||
@@ -84567,7 +84488,7 @@ arP
|
|||||||
vgJ
|
vgJ
|
||||||
hSl
|
hSl
|
||||||
ayG
|
ayG
|
||||||
azL
|
aBX
|
||||||
aBf
|
aBf
|
||||||
aBY
|
aBY
|
||||||
aDw
|
aDw
|
||||||
|
|||||||
@@ -22362,6 +22362,9 @@
|
|||||||
/obj/effect/turf_decal/tile/yellow{
|
/obj/effect/turf_decal/tile/yellow{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/gateway_control{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
/turf/open/floor/plasteel/dark/side{
|
/turf/open/floor/plasteel/dark/side{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
@@ -22381,12 +22384,6 @@
|
|||||||
/obj/effect/spawner/lootdrop/maintenance,
|
/obj/effect/spawner/lootdrop/maintenance,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/maintenance/department/eva)
|
/area/maintenance/department/eva)
|
||||||
"aWr" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"aWs" = (
|
"aWs" = (
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 8;
|
dir = 8;
|
||||||
@@ -22840,10 +22837,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/primary/central)
|
/area/hallway/primary/central)
|
||||||
"aXm" = (
|
|
||||||
/obj/machinery/gateway,
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"aXn" = (
|
"aXn" = (
|
||||||
/obj/effect/turf_decal/tile/bar,
|
/obj/effect/turf_decal/tile/bar,
|
||||||
/obj/effect/turf_decal/tile/bar{
|
/obj/effect/turf_decal/tile/bar{
|
||||||
@@ -22883,12 +22876,6 @@
|
|||||||
"aXr" = (
|
"aXr" = (
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/ai_monitored/storage/eva)
|
/area/ai_monitored/storage/eva)
|
||||||
"aXs" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"aXt" = (
|
"aXt" = (
|
||||||
/obj/effect/spawner/structure/window/reinforced,
|
/obj/effect/spawner/structure/window/reinforced,
|
||||||
/obj/structure/sign/warning/securearea,
|
/obj/structure/sign/warning/securearea,
|
||||||
@@ -30329,12 +30316,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/science/mixing)
|
/area/science/mixing)
|
||||||
"bnl" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"bnm" = (
|
"bnm" = (
|
||||||
/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
|
/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -34660,9 +34641,6 @@
|
|||||||
c_tag = "Research - Gateway Chamber";
|
c_tag = "Research - Gateway Chamber";
|
||||||
network = list("ss13","rd")
|
network = list("ss13","rd")
|
||||||
},
|
},
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
/turf/open/floor/engine,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bwL" = (
|
"bwL" = (
|
||||||
@@ -34672,12 +34650,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/router)
|
/area/router)
|
||||||
"bwM" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"bwN" = (
|
"bwN" = (
|
||||||
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -36403,12 +36375,6 @@
|
|||||||
/area/medical/medbay/zone2{
|
/area/medical/medbay/zone2{
|
||||||
name = "Medbay Treatment Center"
|
name = "Medbay Treatment Center"
|
||||||
})
|
})
|
||||||
"bAz" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"bAA" = (
|
"bAA" = (
|
||||||
/obj/structure/lattice,
|
/obj/structure/lattice,
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
@@ -36566,12 +36532,6 @@
|
|||||||
/area/medical/medbay/zone2{
|
/area/medical/medbay/zone2{
|
||||||
name = "Medbay Treatment Center"
|
name = "Medbay Treatment Center"
|
||||||
})
|
})
|
||||||
"bAN" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/turf/open/floor/engine,
|
|
||||||
/area/gateway)
|
|
||||||
"bAO" = (
|
"bAO" = (
|
||||||
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{
|
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -62112,7 +62072,6 @@
|
|||||||
departmentType = 2;
|
departmentType = 2;
|
||||||
name = "Chemistry RC";
|
name = "Chemistry RC";
|
||||||
pixel_x = 30;
|
pixel_x = 30;
|
||||||
pixel_y = 0;
|
|
||||||
receive_ore_updates = 1
|
receive_ore_updates = 1
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/white,
|
/turf/open/floor/plasteel/white,
|
||||||
@@ -99510,9 +99469,9 @@ aaa
|
|||||||
aaa
|
aaa
|
||||||
aaa
|
aaa
|
||||||
aUk
|
aUk
|
||||||
bnl
|
bmG
|
||||||
bAz
|
bmG
|
||||||
aWr
|
bmG
|
||||||
cDN
|
cDN
|
||||||
bmG
|
bmG
|
||||||
aUk
|
aUk
|
||||||
@@ -99769,7 +99728,7 @@ aaa
|
|||||||
aUk
|
aUk
|
||||||
bwK
|
bwK
|
||||||
bAF
|
bAF
|
||||||
aXm
|
bmG
|
||||||
cDN
|
cDN
|
||||||
bmG
|
bmG
|
||||||
aUk
|
aUk
|
||||||
@@ -100024,9 +99983,9 @@ aaa
|
|||||||
aaa
|
aaa
|
||||||
aaa
|
aaa
|
||||||
aUk
|
aUk
|
||||||
bwM
|
bmG
|
||||||
bAN
|
bmG
|
||||||
aXs
|
bmG
|
||||||
cDN
|
cDN
|
||||||
bmG
|
bmG
|
||||||
aUk
|
aUk
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7205,9 +7205,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/tcommsat/computer)
|
/area/tcommsat/computer)
|
||||||
"amk" = (
|
"amk" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -13604,9 +13601,6 @@
|
|||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/machinery/airalarm{
|
/obj/machinery/airalarm{
|
||||||
dir = 4;
|
dir = 4;
|
||||||
@@ -13851,7 +13845,6 @@
|
|||||||
/obj/item/lighter,
|
/obj/item/lighter,
|
||||||
/obj/item/clothing/mask/cigarette/cigar/cohiba,
|
/obj/item/clothing/mask/cigarette/cigar/cohiba,
|
||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||||
/obj/machinery/suit_storage_unit/ce,
|
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/crew_quarters/heads/chief)
|
/area/crew_quarters/heads/chief)
|
||||||
"axi" = (
|
"axi" = (
|
||||||
@@ -76334,9 +76327,6 @@
|
|||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/effect/turf_decal/box/corners{
|
/obj/effect/turf_decal/box/corners{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -76403,9 +76393,6 @@
|
|||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/machinery/camera{
|
/obj/machinery/camera{
|
||||||
c_tag = "Gateway";
|
c_tag = "Gateway";
|
||||||
@@ -77551,9 +77538,6 @@
|
|||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/obj/effect/decal/cleanable/greenglow,
|
/obj/effect/decal/cleanable/greenglow,
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
@@ -77573,9 +77557,6 @@
|
|||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/effect/decal/cleanable/greenglow,
|
/obj/effect/decal/cleanable/greenglow,
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
@@ -77588,8 +77569,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/maintenance/disposal)
|
/area/maintenance/disposal)
|
||||||
"cvQ" = (
|
"cvQ" = (
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/obj/structure/closet/cardboard,
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/machinery/light/small{
|
/obj/machinery/light/small{
|
||||||
@@ -77599,6 +77578,9 @@
|
|||||||
dir = 8;
|
dir = 8;
|
||||||
pixel_x = 32
|
pixel_x = 32
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/gateway_control{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"cvR" = (
|
"cvR" = (
|
||||||
@@ -77635,7 +77617,6 @@
|
|||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/obj/effect/decal/cleanable/greenglow,
|
/obj/effect/decal/cleanable/greenglow,
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
@@ -77652,9 +77633,6 @@
|
|||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/decal/cleanable/dirt,
|
/obj/effect/decal/cleanable/dirt,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
@@ -85287,7 +85265,6 @@
|
|||||||
icon_state = "1-2"
|
icon_state = "1-2"
|
||||||
},
|
},
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/folder/paperwork,
|
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/security/vacantoffice)
|
/area/security/vacantoffice)
|
||||||
"ppP" = (
|
"ppP" = (
|
||||||
|
|||||||
@@ -922,7 +922,7 @@
|
|||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
"acb" = (
|
"acb" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
"acc" = (
|
"acc" = (
|
||||||
@@ -15603,7 +15603,7 @@
|
|||||||
/area/crew_quarters/dorms)
|
/area/crew_quarters/dorms)
|
||||||
"aDZ" = (
|
"aDZ" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/crew_quarters/dorms)
|
/area/crew_quarters/dorms)
|
||||||
"aEa" = (
|
"aEa" = (
|
||||||
@@ -21182,7 +21182,7 @@
|
|||||||
/area/crew_quarters/locker)
|
/area/crew_quarters/locker)
|
||||||
"aPI" = (
|
"aPI" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/crew_quarters/locker)
|
/area/crew_quarters/locker)
|
||||||
"aPJ" = (
|
"aPJ" = (
|
||||||
@@ -42467,7 +42467,7 @@
|
|||||||
dir = 10
|
dir = 10
|
||||||
},
|
},
|
||||||
/obj/structure/table/wood/poker,
|
/obj/structure/table/wood/poker,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/crew_quarters/bar)
|
/area/crew_quarters/bar)
|
||||||
"bFt" = (
|
"bFt" = (
|
||||||
@@ -44580,27 +44580,7 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bJY" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/right,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"bJZ" = (
|
"bJZ" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/machinery/status_display/evac{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
@@ -44617,23 +44597,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bKa" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/left,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"bKb" = (
|
"bKb" = (
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
icon_state = "1-2"
|
icon_state = "1-2"
|
||||||
@@ -45306,31 +45269,13 @@
|
|||||||
/obj/structure/cable/yellow,
|
/obj/structure/cable/yellow,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bLD" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/gateway)
|
|
||||||
"bLE" = (
|
"bLE" = (
|
||||||
/obj/machinery/gateway/centerstation,
|
/obj/machinery/gateway/centerstation{
|
||||||
|
dir = 0
|
||||||
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bLF" = (
|
"bLF" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
/obj/effect/turf_decal/bot_white,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -46196,9 +46141,6 @@
|
|||||||
},
|
},
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bNp" = (
|
"bNp" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/left,
|
/obj/effect/turf_decal/bot_white/left,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -46213,7 +46155,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bNq" = (
|
"bNq" = (
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
@@ -46231,9 +46172,6 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bNr" = (
|
"bNr" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/right,
|
/obj/effect/turf_decal/bot_white/right,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -46829,6 +46767,9 @@
|
|||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 5
|
dir = 5
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/gateway_control{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/gateway)
|
/area/gateway)
|
||||||
"bOJ" = (
|
"bOJ" = (
|
||||||
@@ -67172,8 +67113,7 @@
|
|||||||
layer = 4;
|
layer = 4;
|
||||||
name = "Test Chamber Telescreen";
|
name = "Test Chamber Telescreen";
|
||||||
network = list("toxins");
|
network = list("toxins");
|
||||||
pixel_x = -32;
|
pixel_x = -32
|
||||||
pixel_y = 0
|
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/science/mixing)
|
/area/science/mixing)
|
||||||
@@ -113599,8 +113539,8 @@ bDj
|
|||||||
bFb
|
bFb
|
||||||
bGQ
|
bGQ
|
||||||
bGM
|
bGM
|
||||||
bJY
|
bNr
|
||||||
bLD
|
bLF
|
||||||
bNp
|
bNp
|
||||||
bOK
|
bOK
|
||||||
bQu
|
bQu
|
||||||
@@ -114113,7 +114053,7 @@ bDw
|
|||||||
bFd
|
bFd
|
||||||
bGS
|
bGS
|
||||||
bGM
|
bGM
|
||||||
bKa
|
bNp
|
||||||
bLF
|
bLF
|
||||||
bNr
|
bNr
|
||||||
bOM
|
bOM
|
||||||
|
|||||||
@@ -4294,8 +4294,7 @@
|
|||||||
department = "Head of Security's Desk";
|
department = "Head of Security's Desk";
|
||||||
departmentType = 5;
|
departmentType = 5;
|
||||||
name = "Head of Security RC";
|
name = "Head of Security RC";
|
||||||
pixel_x = 30;
|
pixel_x = 30
|
||||||
pixel_y = 0
|
|
||||||
},
|
},
|
||||||
/obj/machinery/computer/security/hos{
|
/obj/machinery/computer/security/hos{
|
||||||
icon_state = "computer";
|
icon_state = "computer";
|
||||||
@@ -7141,8 +7140,7 @@
|
|||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/red,
|
/obj/effect/turf_decal/tile/red,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display{
|
||||||
pixel_x = 32;
|
pixel_x = 32
|
||||||
pixel_y = 0
|
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/security/brig)
|
/area/security/brig)
|
||||||
@@ -13298,7 +13296,6 @@
|
|||||||
dir = 9
|
dir = 9
|
||||||
},
|
},
|
||||||
/obj/machinery/computer/security/wooden_tv{
|
/obj/machinery/computer/security/wooden_tv{
|
||||||
pixel_x = 0;
|
|
||||||
pixel_y = 4
|
pixel_y = 4
|
||||||
},
|
},
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
@@ -22062,7 +22059,7 @@
|
|||||||
/area/hallway/primary/starboard)
|
/area/hallway/primary/starboard)
|
||||||
"aJa" = (
|
"aJa" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/obj/machinery/firealarm{
|
/obj/machinery/firealarm{
|
||||||
dir = 4;
|
dir = 4;
|
||||||
pixel_x = -24
|
pixel_x = -24
|
||||||
@@ -26948,7 +26945,7 @@
|
|||||||
"aTf" = (
|
"aTf" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/clipboard,
|
/obj/item/clipboard,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2190,7 +2190,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
"afp" = (
|
"afp" = (
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
@@ -10736,7 +10736,7 @@
|
|||||||
/area/crew_quarters/dorms)
|
/area/crew_quarters/dorms)
|
||||||
"ayo" = (
|
"ayo" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
/area/crew_quarters/dorms)
|
/area/crew_quarters/dorms)
|
||||||
"ayq" = (
|
"ayq" = (
|
||||||
@@ -22136,6 +22136,9 @@
|
|||||||
/obj/item/kirbyplants{
|
/obj/item/kirbyplants{
|
||||||
icon_state = "plant-05"
|
icon_state = "plant-05"
|
||||||
},
|
},
|
||||||
|
/obj/machinery/light/small{
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/crew_quarters/bar)
|
/area/crew_quarters/bar)
|
||||||
"aYZ" = (
|
"aYZ" = (
|
||||||
|
|||||||
@@ -3545,8 +3545,8 @@
|
|||||||
name = "supply dock loading door"
|
name = "supply dock loading door"
|
||||||
},
|
},
|
||||||
/obj/machinery/conveyor{
|
/obj/machinery/conveyor{
|
||||||
id = "QMLoad2";
|
dir = 1;
|
||||||
dir = 1
|
id = "QMLoad2"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/quartermaster/storage)
|
/area/quartermaster/storage)
|
||||||
@@ -11666,6 +11666,9 @@
|
|||||||
/obj/structure/disposalpipe/segment{
|
/obj/structure/disposalpipe/segment{
|
||||||
dir = 9
|
dir = 9
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/gateway_control{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/teleporter)
|
/area/teleporter)
|
||||||
"eFy" = (
|
"eFy" = (
|
||||||
@@ -12398,8 +12401,8 @@
|
|||||||
/area/bridge/meeting_room)
|
/area/bridge/meeting_room)
|
||||||
"eZU" = (
|
"eZU" = (
|
||||||
/obj/machinery/conveyor{
|
/obj/machinery/conveyor{
|
||||||
id = "QMLoad2";
|
dir = 1;
|
||||||
dir = 1
|
id = "QMLoad2"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/quartermaster/storage)
|
/area/quartermaster/storage)
|
||||||
@@ -19924,7 +19927,6 @@
|
|||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
/obj/machinery/gateway,
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
/obj/effect/turf_decal/bot_white,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/teleporter)
|
/area/teleporter)
|
||||||
@@ -20693,13 +20695,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
"jPP" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/teleporter)
|
|
||||||
"jQj" = (
|
"jQj" = (
|
||||||
/obj/effect/spawner/structure/window/reinforced,
|
/obj/effect/spawner/structure/window/reinforced,
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
@@ -21094,8 +21089,8 @@
|
|||||||
"kdM" = (
|
"kdM" = (
|
||||||
/obj/effect/turf_decal/stripes,
|
/obj/effect/turf_decal/stripes,
|
||||||
/obj/machinery/conveyor{
|
/obj/machinery/conveyor{
|
||||||
id = "QMLoad2";
|
dir = 1;
|
||||||
dir = 1
|
id = "QMLoad2"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/quartermaster/storage)
|
/area/quartermaster/storage)
|
||||||
@@ -27641,9 +27636,6 @@
|
|||||||
/turf/closed/wall,
|
/turf/closed/wall,
|
||||||
/area/quartermaster/sorting)
|
/area/quartermaster/sorting)
|
||||||
"ohf" = (
|
"ohf" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/left,
|
/obj/effect/turf_decal/bot_white/left,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/teleporter)
|
/area/teleporter)
|
||||||
@@ -32098,8 +32090,8 @@
|
|||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
"qGt" = (
|
"qGt" = (
|
||||||
/obj/structure/bodycontainer/crematorium{
|
/obj/structure/bodycontainer/crematorium{
|
||||||
id = "crematoriumChapel";
|
dir = 8;
|
||||||
dir = 8
|
id = "crematoriumChapel"
|
||||||
},
|
},
|
||||||
/obj/machinery/button/crematorium{
|
/obj/machinery/button/crematorium{
|
||||||
id = "crematoriumChapel";
|
id = "crematoriumChapel";
|
||||||
@@ -35403,9 +35395,6 @@
|
|||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
"sLr" = (
|
"sLr" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 6
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/right,
|
/obj/effect/turf_decal/bot_white/right,
|
||||||
/obj/effect/turf_decal/stripes/corner{
|
/obj/effect/turf_decal/stripes/corner{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -36573,9 +36562,9 @@
|
|||||||
/obj/effect/turf_decal/delivery,
|
/obj/effect/turf_decal/delivery,
|
||||||
/obj/structure/table/reinforced,
|
/obj/structure/table/reinforced,
|
||||||
/obj/machinery/door/window/eastleft{
|
/obj/machinery/door/window/eastleft{
|
||||||
|
dir = 8;
|
||||||
name = "Hydroponics Desk";
|
name = "Hydroponics Desk";
|
||||||
req_access_txt = "35";
|
req_access_txt = "35"
|
||||||
dir = 8
|
|
||||||
},
|
},
|
||||||
/obj/machinery/door/firedoor/border_only{
|
/obj/machinery/door/firedoor/border_only{
|
||||||
dir = 8;
|
dir = 8;
|
||||||
@@ -39247,8 +39236,8 @@
|
|||||||
name = "supply dock loading door"
|
name = "supply dock loading door"
|
||||||
},
|
},
|
||||||
/obj/machinery/conveyor{
|
/obj/machinery/conveyor{
|
||||||
id = "QMLoad2";
|
dir = 1;
|
||||||
dir = 1
|
id = "QMLoad2"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/quartermaster/storage)
|
/area/quartermaster/storage)
|
||||||
@@ -39695,8 +39684,8 @@
|
|||||||
/area/security/checkpoint/supply)
|
/area/security/checkpoint/supply)
|
||||||
"vgX" = (
|
"vgX" = (
|
||||||
/obj/machinery/conveyor{
|
/obj/machinery/conveyor{
|
||||||
id = "QMLoad2";
|
dir = 1;
|
||||||
dir = 1
|
id = "QMLoad2"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/quartermaster/storage)
|
/area/quartermaster/storage)
|
||||||
@@ -40096,9 +40085,6 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/engine/engineering)
|
/area/engine/engineering)
|
||||||
"vse" = (
|
"vse" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 10
|
|
||||||
},
|
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
@@ -41638,13 +41624,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/engine,
|
/turf/open/floor/engine,
|
||||||
/area/engine/engineering)
|
/area/engine/engineering)
|
||||||
"wie" = (
|
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
|
||||||
/turf/open/floor/plasteel/dark,
|
|
||||||
/area/teleporter)
|
|
||||||
"wje" = (
|
"wje" = (
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/primary/port)
|
/area/hallway/primary/port)
|
||||||
@@ -42940,9 +42919,6 @@
|
|||||||
/turf/open/floor/plating/snowed/smoothed/icemoon,
|
/turf/open/floor/plating/snowed/smoothed/icemoon,
|
||||||
/area/icemoon/surface/outdoors)
|
/area/icemoon/surface/outdoors)
|
||||||
"xcd" = (
|
"xcd" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 4
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white,
|
/obj/effect/turf_decal/bot_white,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/teleporter)
|
/area/teleporter)
|
||||||
@@ -43874,9 +43850,6 @@
|
|||||||
/turf/open/floor/plating/snowed/smoothed/icemoon,
|
/turf/open/floor/plating/snowed/smoothed/icemoon,
|
||||||
/area/engine/atmos)
|
/area/engine/atmos)
|
||||||
"xHk" = (
|
"xHk" = (
|
||||||
/obj/machinery/gateway{
|
|
||||||
dir = 9
|
|
||||||
},
|
|
||||||
/obj/effect/turf_decal/bot_white/right,
|
/obj/effect/turf_decal/bot_white/right,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/teleporter)
|
/area/teleporter)
|
||||||
@@ -56913,7 +56886,7 @@ avT
|
|||||||
avT
|
avT
|
||||||
gLH
|
gLH
|
||||||
xHk
|
xHk
|
||||||
jPP
|
xcd
|
||||||
vse
|
vse
|
||||||
mSs
|
mSs
|
||||||
qQH
|
qQH
|
||||||
@@ -57169,7 +57142,7 @@ bBh
|
|||||||
avT
|
avT
|
||||||
avT
|
avT
|
||||||
gLH
|
gLH
|
||||||
wie
|
xcd
|
||||||
ePa
|
ePa
|
||||||
jrR
|
jrR
|
||||||
nTQ
|
nTQ
|
||||||
|
|||||||
@@ -8429,7 +8429,7 @@
|
|||||||
/area/centcom/ferry)
|
/area/centcom/ferry)
|
||||||
"tx" = (
|
"tx" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/turf/open/floor/plasteel/grimy,
|
/turf/open/floor/plasteel/grimy,
|
||||||
/area/centcom/ferry)
|
/area/centcom/ferry)
|
||||||
"ty" = (
|
"ty" = (
|
||||||
@@ -10217,7 +10217,7 @@
|
|||||||
/area/wizard_station)
|
/area/wizard_station)
|
||||||
"xy" = (
|
"xy" = (
|
||||||
/obj/structure/table/wood/fancy,
|
/obj/structure/table/wood/fancy,
|
||||||
/obj/item/storage/pill_bottle/dice{
|
/obj/item/storage/box/dice{
|
||||||
icon_state = "magicdicebag"
|
icon_state = "magicdicebag"
|
||||||
},
|
},
|
||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
|
|||||||
@@ -307,7 +307,7 @@
|
|||||||
"D" = (
|
"D" = (
|
||||||
/obj/structure/table/reinforced,
|
/obj/structure/table/reinforced,
|
||||||
/obj/item/folder,
|
/obj/item/folder,
|
||||||
/obj/item/storage/pill_bottle/dice,
|
/obj/item/storage/box/dice,
|
||||||
/obj/effect/turf_decal/delivery,
|
/obj/effect/turf_decal/delivery,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/shuttle/arrival)
|
/area/shuttle/arrival)
|
||||||
|
|||||||
@@ -237,7 +237,7 @@
|
|||||||
/area/shuttle/arrival)
|
/area/shuttle/arrival)
|
||||||
"C" = (
|
"C" = (
|
||||||
/obj/structure/table/reinforced,
|
/obj/structure/table/reinforced,
|
||||||
/obj/item/storage/pill_bottle/dice{
|
/obj/item/storage/box/dice{
|
||||||
pixel_x = -2;
|
pixel_x = -2;
|
||||||
pixel_y = 8
|
pixel_y = 8
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -108,6 +108,8 @@
|
|||||||
#define TR_KEEPSE (1<<5) // changelings shouldn't edit the DNA's SE when turning into a monkey
|
#define TR_KEEPSE (1<<5) // changelings shouldn't edit the DNA's SE when turning into a monkey
|
||||||
#define TR_DEFAULTMSG (1<<6)
|
#define TR_DEFAULTMSG (1<<6)
|
||||||
#define TR_KEEPORGANS (1<<8)
|
#define TR_KEEPORGANS (1<<8)
|
||||||
|
#define TR_KEEPREAGENTS (1<<10)
|
||||||
|
#define TR_KEEPSTUNS (1<<9)
|
||||||
|
|
||||||
|
|
||||||
#define CLONER_FRESH_CLONE "fresh"
|
#define CLONER_FRESH_CLONE "fresh"
|
||||||
@@ -184,4 +186,4 @@
|
|||||||
#define G_MALE 1
|
#define G_MALE 1
|
||||||
#define G_FEMALE 2
|
#define G_FEMALE 2
|
||||||
#define G_PLURAL 3
|
#define G_PLURAL 3
|
||||||
#define G_NEUTER 4
|
#define G_NEUTER 4
|
||||||
|
|||||||
@@ -142,6 +142,10 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
|||||||
/// The attack is from a parry counterattack.
|
/// The attack is from a parry counterattack.
|
||||||
#define ATTACKCHAIN_PARRY_COUNTERATTACK (1<<0)
|
#define ATTACKCHAIN_PARRY_COUNTERATTACK (1<<0)
|
||||||
|
|
||||||
|
// UnarmedAttack() flags
|
||||||
|
/// Attack is from a parry counterattack
|
||||||
|
#define UNARMED_ATTACK_PARRY (1<<0)
|
||||||
|
|
||||||
/// If the thing can reflect light (lasers/energy)
|
/// If the thing can reflect light (lasers/energy)
|
||||||
#define RICOCHET_SHINY (1<<0)
|
#define RICOCHET_SHINY (1<<0)
|
||||||
/// If the thing can reflect matter (bullets/bomb shrapnel)
|
/// If the thing can reflect matter (bullets/bomb shrapnel)
|
||||||
|
|||||||
@@ -74,6 +74,8 @@
|
|||||||
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
|
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
|
||||||
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
|
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
|
||||||
#define ADMIN_PUNISHMENT_CUSTOM_PIE "Custom Cream Pie"
|
#define ADMIN_PUNISHMENT_CUSTOM_PIE "Custom Cream Pie"
|
||||||
|
#define ADMIN_PUNISHMENT_PICKLE "Pickle-ify"
|
||||||
|
#define ADMIN_PUNISHMENT_FRY "Fry"
|
||||||
|
|
||||||
#define AHELP_ACTIVE 1
|
#define AHELP_ACTIVE 1
|
||||||
#define AHELP_CLOSED 2
|
#define AHELP_CLOSED 2
|
||||||
|
|||||||
@@ -32,6 +32,8 @@
|
|||||||
#define COMSIG_ELEMENT_DETACH "element_detach"
|
#define COMSIG_ELEMENT_DETACH "element_detach"
|
||||||
|
|
||||||
// /atom signals
|
// /atom signals
|
||||||
|
//from base of atom/proc/Initialize(): sent any time a new atom is created
|
||||||
|
#define COMSIG_ATOM_CREATED "atom_created"
|
||||||
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
|
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
|
||||||
#define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called
|
#define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called
|
||||||
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human)
|
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human)
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ GLOBAL_LIST_INIT(pointed_types, typecacheof(list(
|
|||||||
|
|
||||||
#define isgun(A) (istype(A, /obj/item/gun))
|
#define isgun(A) (istype(A, /obj/item/gun))
|
||||||
|
|
||||||
#define isfood(A) (istype(A, /obj/item/reagent_containers/food))
|
#define isfood(A) (istype(A, /obj/item/reagent_containers/food/snacks))
|
||||||
|
|
||||||
//Assemblies
|
//Assemblies
|
||||||
#define isassembly(O) (istype(O, /obj/item/assembly))
|
#define isassembly(O) (istype(O, /obj/item/assembly))
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#define LOG_ADMIN_PRIVATE (1 << 14)
|
#define LOG_ADMIN_PRIVATE (1 << 14)
|
||||||
#define LOG_ASAY (1 << 15)
|
#define LOG_ASAY (1 << 15)
|
||||||
#define LOG_VIRUS (1 << 16)
|
#define LOG_VIRUS (1 << 16)
|
||||||
|
#define LOG_SHUTTLE (1 << 18)
|
||||||
|
|
||||||
//Individual logging panel pages
|
//Individual logging panel pages
|
||||||
#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK)
|
#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK)
|
||||||
|
|||||||
@@ -534,3 +534,5 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
|
|||||||
#define LOOT_RESTRICTION_CKEY 2
|
#define LOOT_RESTRICTION_CKEY 2
|
||||||
#define LOOT_RESTRICTION_MIND_PILE 3 //limited to the current pile.
|
#define LOOT_RESTRICTION_MIND_PILE 3 //limited to the current pile.
|
||||||
#define LOOT_RESTRICTION_CKEY_PILE 4 //Idem
|
#define LOOT_RESTRICTION_CKEY_PILE 4 //Idem
|
||||||
|
|
||||||
|
#define WANTED_FILE "wanted_message.json"
|
||||||
|
|||||||
@@ -76,6 +76,13 @@
|
|||||||
#define VV_HK_ADDCOMPONENT "addcomponent"
|
#define VV_HK_ADDCOMPONENT "addcomponent"
|
||||||
#define VV_HK_MODIFY_TRAITS "modtraits"
|
#define VV_HK_MODIFY_TRAITS "modtraits"
|
||||||
|
|
||||||
|
// /datum/gas_mixture
|
||||||
|
#define VV_HK_SET_MOLES "set_moles"
|
||||||
|
#define VV_HK_EMPTY "empty"
|
||||||
|
#define VV_HK_SET_TEMPERATURE "set_temp"
|
||||||
|
#define VV_HK_PARSE_GASSTRING "parse_gasstring"
|
||||||
|
#define VV_HK_SET_VOLUME "set_volume"
|
||||||
|
|
||||||
// /atom
|
// /atom
|
||||||
#define VV_HK_MODIFY_TRANSFORM "atom_transform"
|
#define VV_HK_MODIFY_TRANSFORM "atom_transform"
|
||||||
#define VV_HK_ADD_REAGENT "addreagent"
|
#define VV_HK_ADD_REAGENT "addreagent"
|
||||||
|
|||||||
@@ -118,6 +118,9 @@
|
|||||||
//reusing the PDA option because I really don't think news comments are worth a config option
|
//reusing the PDA option because I really don't think news comments are worth a config option
|
||||||
WRITE_LOG(GLOB.world_pda_log, "COMMENT: [text]")
|
WRITE_LOG(GLOB.world_pda_log, "COMMENT: [text]")
|
||||||
|
|
||||||
|
/proc/log_paper(text)
|
||||||
|
WRITE_LOG(GLOB.world_paper_log, "PAPER: [text]")
|
||||||
|
|
||||||
/proc/log_telecomms(text)
|
/proc/log_telecomms(text)
|
||||||
if (CONFIG_GET(flag/log_telecomms))
|
if (CONFIG_GET(flag/log_telecomms))
|
||||||
WRITE_LOG(GLOB.world_telecomms_log, "TCOMMS: [text]")
|
WRITE_LOG(GLOB.world_telecomms_log, "TCOMMS: [text]")
|
||||||
@@ -131,6 +134,10 @@
|
|||||||
if (CONFIG_GET(flag/log_vote))
|
if (CONFIG_GET(flag/log_vote))
|
||||||
WRITE_LOG(GLOB.world_game_log, "VOTE: [text]")
|
WRITE_LOG(GLOB.world_game_log, "VOTE: [text]")
|
||||||
|
|
||||||
|
/proc/log_shuttle(text)
|
||||||
|
if (CONFIG_GET(flag/log_shuttle))
|
||||||
|
WRITE_LOG(GLOB.world_shuttle_log, "SHUTTLE: [text]")
|
||||||
|
|
||||||
/proc/log_craft(text)
|
/proc/log_craft(text)
|
||||||
if (CONFIG_GET(flag/log_craft))
|
if (CONFIG_GET(flag/log_craft))
|
||||||
WRITE_LOG(GLOB.world_crafting_log, "CRAFT: [text]")
|
WRITE_LOG(GLOB.world_crafting_log, "CRAFT: [text]")
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#define pick_list(FILE, KEY) (pick(strings(FILE, KEY)))
|
#define pick_list(FILE, KEY) (pick(strings(FILE, KEY)))
|
||||||
|
#define pick_list_weighted(FILE, KEY) (pickweight(strings(FILE, KEY)))
|
||||||
#define pick_list_replacements(FILE, KEY) (strings_replacement(FILE, KEY))
|
#define pick_list_replacements(FILE, KEY) (strings_replacement(FILE, KEY))
|
||||||
#define json_load(FILE) (json_decode(file2text(FILE)))
|
#define json_load(FILE) (json_decode(file2text(FILE)))
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,9 @@
|
|||||||
#define GET_INITIALIZED_MUTATION(A) GLOB.all_mutations[A]
|
#define GET_INITIALIZED_MUTATION(A) GLOB.all_mutations[A]
|
||||||
#define GET_GENE_STRING(A, B) (B.mutation_index[A])
|
#define GET_GENE_STRING(A, B) (B.mutation_index[A])
|
||||||
#define GET_SEQUENCE(A) (GLOB.full_sequences[A])
|
#define GET_SEQUENCE(A) (GLOB.full_sequences[A])
|
||||||
|
#define GET_MUTATION_TYPE_FROM_ALIAS(A) (GLOB.alias_mutations[A])
|
||||||
|
|
||||||
#define GET_MUTATION_STABILIZER(A) ((A.stabilizer_coeff < 0) ? 1 : A.stabilizer_coeff)
|
#define GET_MUTATION_STABILIZER(A) ((A.stabilizer_coeff < 0) ? 1 : A.stabilizer_coeff)
|
||||||
#define GET_MUTATION_SYNCHRONIZER(A) ((A.synchronizer_coeff < 0) ? 1 : A.synchronizer_coeff)
|
#define GET_MUTATION_SYNCHRONIZER(A) ((A.synchronizer_coeff < 0) ? 1 : A.synchronizer_coeff)
|
||||||
#define GET_MUTATION_POWER(A) ((A.power_coeff < 0) ? 1 : A.power_coeff)
|
#define GET_MUTATION_POWER(A) ((A.power_coeff < 0) ? 1 : A.power_coeff)
|
||||||
#define GET_MUTATION_ENERGY(A) ((A.energy_coeff < 0) ? 1 : A.energy_coeff)
|
#define GET_MUTATION_ENERGY(A) ((A.energy_coeff < 0) ? 1 : A.energy_coeff)
|
||||||
|
|||||||
@@ -53,6 +53,27 @@
|
|||||||
for(var/I in adjacent_turfs)
|
for(var/I in adjacent_turfs)
|
||||||
. |= get_area(I)
|
. |= get_area(I)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a bounding box of a list of atoms.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* - atoms - List of atoms. Can accept output of view() and range() procs.
|
||||||
|
*
|
||||||
|
* Returns: list(x1, y1, x2, y2)
|
||||||
|
*/
|
||||||
|
/proc/get_bbox_of_atoms(list/atoms)
|
||||||
|
var/list/list_x = list()
|
||||||
|
var/list/list_y = list()
|
||||||
|
for(var/_a in atoms)
|
||||||
|
var/atom/a = _a
|
||||||
|
list_x += a.x
|
||||||
|
list_y += a.y
|
||||||
|
return list(
|
||||||
|
min(list_x),
|
||||||
|
min(list_y),
|
||||||
|
max(list_x),
|
||||||
|
max(list_y))
|
||||||
|
|
||||||
// Like view but bypasses luminosity check
|
// Like view but bypasses luminosity check
|
||||||
|
|
||||||
/proc/get_hear(range, atom/source)
|
/proc/get_hear(range, atom/source)
|
||||||
|
|||||||
@@ -90,7 +90,6 @@
|
|||||||
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
|
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
|
||||||
|
|
||||||
INVOKE_ASYNC(GLOBAL_PROC, /proc/init_ref_coin_values) //so the current procedure doesn't sleep because of UNTIL()
|
INVOKE_ASYNC(GLOBAL_PROC, /proc/init_ref_coin_values) //so the current procedure doesn't sleep because of UNTIL()
|
||||||
INVOKE_ASYNC(GLOBAL_PROC, /proc/setupGenetics)
|
|
||||||
|
|
||||||
//creates every subtype of prototype (excluding prototype) and adds it to list L.
|
//creates every subtype of prototype (excluding prototype) and adds it to list L.
|
||||||
//if no list/L is provided, one is created.
|
//if no list/L is provided, one is created.
|
||||||
@@ -117,24 +116,3 @@
|
|||||||
GLOB.coin_values[path] = C.value
|
GLOB.coin_values[path] = C.value
|
||||||
qdel(C)
|
qdel(C)
|
||||||
|
|
||||||
/proc/setupGenetics()
|
|
||||||
var/list/mutations = subtypesof(/datum/mutation/human)
|
|
||||||
shuffle_inplace(mutations)
|
|
||||||
for(var/A in subtypesof(/datum/generecipe))
|
|
||||||
var/datum/generecipe/GR = A
|
|
||||||
GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
|
|
||||||
for(var/i in 1 to LAZYLEN(mutations))
|
|
||||||
var/path = mutations[i] //byond gets pissy when we do it in one line
|
|
||||||
var/datum/mutation/human/B = new path ()
|
|
||||||
B.alias = "Mutation #[i]"
|
|
||||||
GLOB.all_mutations[B.type] = B
|
|
||||||
GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks)
|
|
||||||
if(B.locked)
|
|
||||||
continue
|
|
||||||
if(B.quality == POSITIVE)
|
|
||||||
GLOB.good_mutations |= B
|
|
||||||
else if(B.quality == NEGATIVE)
|
|
||||||
GLOB.bad_mutations |= B
|
|
||||||
else if(B.quality == MINOR_NEGATIVE)
|
|
||||||
GLOB.not_good_mutations |= B
|
|
||||||
CHECK_TICK
|
|
||||||
@@ -1437,7 +1437,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
|||||||
/obj/item/reagent_containers/food/snacks/grown,
|
/obj/item/reagent_containers/food/snacks/grown,
|
||||||
/obj/item/reagent_containers/food/snacks/grown/mushroom,
|
/obj/item/reagent_containers/food/snacks/grown/mushroom,
|
||||||
/obj/item/reagent_containers/food/snacks/grown/nettle, // base type
|
/obj/item/reagent_containers/food/snacks/grown/nettle, // base type
|
||||||
/obj/item/reagent_containers/food/snacks/deepfryholder,
|
|
||||||
/obj/item/reagent_containers/food/snacks/grown/shell,
|
/obj/item/reagent_containers/food/snacks/grown/shell,
|
||||||
/obj/item/reagent_containers/food/snacks/clothing,
|
/obj/item/reagent_containers/food/snacks/clothing,
|
||||||
/obj/item/reagent_containers/food/snacks/store/bread
|
/obj/item/reagent_containers/food/snacks/store/bread
|
||||||
@@ -1509,6 +1508,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
|||||||
set waitfor = FALSE
|
set waitfor = FALSE
|
||||||
return call(source, proctype)(arglist(arguments))
|
return call(source, proctype)(arglist(arguments))
|
||||||
|
|
||||||
|
#define TURF_FROM_COORDS_LIST(List) (locate(List[1], List[2], List[3]))
|
||||||
|
|
||||||
/proc/num2sign(numeric)
|
/proc/num2sign(numeric)
|
||||||
if(numeric > 0)
|
if(numeric > 0)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -27,5 +27,6 @@ GLOBAL_LIST_EMPTY(full_sequences)
|
|||||||
GLOBAL_LIST_EMPTY(bad_mutations)
|
GLOBAL_LIST_EMPTY(bad_mutations)
|
||||||
GLOBAL_LIST_EMPTY(good_mutations)
|
GLOBAL_LIST_EMPTY(good_mutations)
|
||||||
GLOBAL_LIST_EMPTY(not_good_mutations)
|
GLOBAL_LIST_EMPTY(not_good_mutations)
|
||||||
|
GLOBAL_LIST_EMPTY(alias_mutations) //alias = type
|
||||||
|
|
||||||
GLOBAL_LIST_EMPTY(mutation_recipes)
|
GLOBAL_LIST_EMPTY(mutation_recipes)
|
||||||
|
|||||||
@@ -116,15 +116,16 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list(
|
|||||||
|
|
||||||
GLOBAL_LIST_INIT(security_depts_prefs, list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
|
GLOBAL_LIST_INIT(security_depts_prefs, list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
|
||||||
|
|
||||||
//Backpacks
|
//Backpacks
|
||||||
#define GBACKPACK "Grey Backpack"
|
|
||||||
#define GSATCHEL "Grey Satchel"
|
|
||||||
#define GDUFFELBAG "Grey Duffel Bag"
|
|
||||||
#define LSATCHEL "Leather Satchel"
|
|
||||||
#define DBACKPACK "Department Backpack"
|
#define DBACKPACK "Department Backpack"
|
||||||
#define DSATCHEL "Department Satchel"
|
#define DSATCHEL "Department Satchel"
|
||||||
#define DDUFFELBAG "Department Duffel Bag"
|
#define DDUFFELBAG "Department Duffel Bag"
|
||||||
GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFELBAG, GBACKPACK, GSATCHEL, GDUFFELBAG, LSATCHEL))
|
GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFELBAG, //everything after this point is a non-department backpack
|
||||||
|
"Grey Backpack" = /obj/item/storage/backpack,
|
||||||
|
"Grey Satchel" = /obj/item/storage/backpack/satchel,
|
||||||
|
"Grey Duffel Bag" = /obj/item/storage/backpack/duffelbag,
|
||||||
|
"Leather Satchel" = /obj/item/storage/backpack/satchel/leather,
|
||||||
|
"Snail Shell" = /obj/item/storage/backpack/snail))
|
||||||
|
|
||||||
//Suit/Skirt
|
//Suit/Skirt
|
||||||
#define PREF_SUIT "Jumpsuit"
|
#define PREF_SUIT "Jumpsuit"
|
||||||
|
|||||||
@@ -38,8 +38,7 @@ GLOBAL_LIST_EMPTY(servant_spawns) //Servants of Ratvar spawn here
|
|||||||
GLOBAL_LIST_EMPTY(city_of_cogs_spawns) //Anyone entering the City of Cogs spawns here
|
GLOBAL_LIST_EMPTY(city_of_cogs_spawns) //Anyone entering the City of Cogs spawns here
|
||||||
GLOBAL_LIST_EMPTY(ruin_landmarks)
|
GLOBAL_LIST_EMPTY(ruin_landmarks)
|
||||||
|
|
||||||
//away missions
|
//away missions
|
||||||
GLOBAL_LIST_EMPTY(awaydestinations) //a list of landmarks that the warpgate can take you to
|
|
||||||
GLOBAL_LIST_EMPTY(vr_spawnpoints)
|
GLOBAL_LIST_EMPTY(vr_spawnpoints)
|
||||||
|
|
||||||
//used by jump-to-area etc. Updated by area/updateName()
|
//used by jump-to-area etc. Updated by area/updateName()
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ GLOBAL_LIST_EMPTY(joined_player_list) //all clients that have joined the game a
|
|||||||
GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs
|
GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs
|
||||||
GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtypes
|
GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtypes
|
||||||
GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subtypes, notably does not contain brains or simple animals
|
GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subtypes, notably does not contain brains or simple animals
|
||||||
|
GLOBAL_LIST_EMPTY(human_list) //all instances of /mob/living/carbon/human and subtypes
|
||||||
GLOBAL_LIST_EMPTY(ai_list)
|
GLOBAL_LIST_EMPTY(ai_list)
|
||||||
GLOBAL_LIST_EMPTY(pai_list)
|
GLOBAL_LIST_EMPTY(pai_list)
|
||||||
GLOBAL_LIST_EMPTY(available_ai_shells)
|
GLOBAL_LIST_EMPTY(available_ai_shells)
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ GLOBAL_VAR(world_asset_log)
|
|||||||
GLOBAL_PROTECT(world_asset_log)
|
GLOBAL_PROTECT(world_asset_log)
|
||||||
GLOBAL_VAR(world_map_error_log)
|
GLOBAL_VAR(world_map_error_log)
|
||||||
GLOBAL_PROTECT(world_map_error_log)
|
GLOBAL_PROTECT(world_map_error_log)
|
||||||
|
GLOBAL_VAR(world_paper_log)
|
||||||
|
GLOBAL_PROTECT(world_paper_log)
|
||||||
GLOBAL_VAR(subsystem_log)
|
GLOBAL_VAR(subsystem_log)
|
||||||
GLOBAL_PROTECT(subsystem_log)
|
GLOBAL_PROTECT(subsystem_log)
|
||||||
GLOBAL_VAR(reagent_log)
|
GLOBAL_VAR(reagent_log)
|
||||||
@@ -49,10 +51,10 @@ GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src]
|
|||||||
GLOBAL_PROTECT(lastsignalers)
|
GLOBAL_PROTECT(lastsignalers)
|
||||||
GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
||||||
GLOBAL_PROTECT(lawchanges)
|
GLOBAL_PROTECT(lawchanges)
|
||||||
|
|
||||||
GLOBAL_VAR(tgui_log)
|
GLOBAL_VAR(tgui_log)
|
||||||
GLOBAL_PROTECT(tgui_log)
|
GLOBAL_PROTECT(tgui_log)
|
||||||
|
GLOBAL_VAR(world_shuttle_log)
|
||||||
|
GLOBAL_PROTECT(world_shuttle_log)
|
||||||
GLOBAL_LIST_EMPTY(combatlog)
|
GLOBAL_LIST_EMPTY(combatlog)
|
||||||
GLOBAL_PROTECT(combatlog)
|
GLOBAL_PROTECT(combatlog)
|
||||||
GLOBAL_LIST_EMPTY(IClog)
|
GLOBAL_LIST_EMPTY(IClog)
|
||||||
|
|||||||
+2
-1
@@ -94,8 +94,9 @@
|
|||||||
The below is only really for safety, or you can alter the way
|
The below is only really for safety, or you can alter the way
|
||||||
it functions and re-insert it above.
|
it functions and re-insert it above.
|
||||||
*/
|
*/
|
||||||
/mob/living/silicon/ai/UnarmedAttack(atom/A)
|
/mob/living/silicon/ai/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_ai(src)
|
A.attack_ai(src)
|
||||||
|
|
||||||
/mob/living/silicon/ai/RangedAttack(atom/A)
|
/mob/living/silicon/ai/RangedAttack(atom/A)
|
||||||
A.attack_ai(src)
|
A.attack_ai(src)
|
||||||
|
|
||||||
|
|||||||
@@ -269,10 +269,9 @@
|
|||||||
proximity_flag is not currently passed to attack_hand, and is instead used
|
proximity_flag is not currently passed to attack_hand, and is instead used
|
||||||
in human click code to allow glove touches only at melee range.
|
in human click code to allow glove touches only at melee range.
|
||||||
*/
|
*/
|
||||||
/mob/proc/UnarmedAttack(atom/A, proximity_flag)
|
/mob/proc/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
if(ismob(A))
|
if(ismob(A))
|
||||||
changeNext_move(CLICK_CD_MELEE)
|
changeNext_move(CLICK_CD_MELEE)
|
||||||
return
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Ranged unarmed attack:
|
Ranged unarmed attack:
|
||||||
|
|||||||
@@ -175,8 +175,9 @@
|
|||||||
clicks, you can do so here, but you will have to
|
clicks, you can do so here, but you will have to
|
||||||
change attack_robot() above to the proper function
|
change attack_robot() above to the proper function
|
||||||
*/
|
*/
|
||||||
/mob/living/silicon/robot/UnarmedAttack(atom/A)
|
/mob/living/silicon/robot/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_robot(src)
|
A.attack_robot(src)
|
||||||
|
|
||||||
/mob/living/silicon/robot/RangedAttack(atom/A)
|
/mob/living/silicon/robot/RangedAttack(atom/A)
|
||||||
A.attack_robot(src)
|
A.attack_robot(src)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,165 @@
|
|||||||
|
/client
|
||||||
|
/**
|
||||||
|
* Assoc list with all the active maps - when a screen obj is added to
|
||||||
|
* a map, it's put in here as well.
|
||||||
|
*
|
||||||
|
* Format: list(<mapname> = list(/obj/screen))
|
||||||
|
*/
|
||||||
|
var/list/screen_maps = list()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A screen object, which acts as a container for turfs and other things
|
||||||
|
* you want to show on the map, which you usually attach to "vis_contents".
|
||||||
|
*/
|
||||||
|
/obj/screen
|
||||||
|
/**
|
||||||
|
* Map name assigned to this object.
|
||||||
|
* Automatically set by /client/proc/add_obj_to_map.
|
||||||
|
*/
|
||||||
|
var/assigned_map
|
||||||
|
/**
|
||||||
|
* Mark this object as garbage-collectible after you clean the map
|
||||||
|
* it was registered on.
|
||||||
|
*
|
||||||
|
* This could probably be changed to be a proc, for conditional removal.
|
||||||
|
* But for now, this works.
|
||||||
|
*/
|
||||||
|
var/del_on_map_removal = TRUE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A generic background object.
|
||||||
|
* It is also implicitly used to allocate a rectangle on the map, which will
|
||||||
|
* be used for auto-scaling the map.
|
||||||
|
*/
|
||||||
|
/obj/screen/background
|
||||||
|
name = "background"
|
||||||
|
icon = 'icons/mob/map_backgrounds.dmi'
|
||||||
|
icon_state = "clear"
|
||||||
|
layer = GAME_PLANE
|
||||||
|
plane = GAME_PLANE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets screen_loc of this screen object, in form of point coordinates,
|
||||||
|
* with optional pixel offset (px, py).
|
||||||
|
*
|
||||||
|
* If applicable, "assigned_map" has to be assigned before this proc call.
|
||||||
|
*/
|
||||||
|
/obj/screen/proc/set_position(x, y, px = 0, py = 0)
|
||||||
|
if(assigned_map)
|
||||||
|
screen_loc = "[assigned_map]:[x]:[px],[y]:[py]"
|
||||||
|
else
|
||||||
|
screen_loc = "[x]:[px],[y]:[py]"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets screen_loc to fill a rectangular area of the map.
|
||||||
|
*
|
||||||
|
* If applicable, "assigned_map" has to be assigned before this proc call.
|
||||||
|
*/
|
||||||
|
/obj/screen/proc/fill_rect(x1, y1, x2, y2)
|
||||||
|
if(assigned_map)
|
||||||
|
screen_loc = "[assigned_map]:[x1],[y1] to [x2],[y2]"
|
||||||
|
else
|
||||||
|
screen_loc = "[x1],[y1] to [x2],[y2]"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers screen obj with the client, which makes it visible on the
|
||||||
|
* assigned map, and becomes a part of the assigned map's lifecycle.
|
||||||
|
*/
|
||||||
|
/client/proc/register_map_obj(obj/screen/screen_obj)
|
||||||
|
if(!screen_obj.assigned_map)
|
||||||
|
CRASH("Can't register [screen_obj] without 'assigned_map' property.")
|
||||||
|
if(!screen_maps[screen_obj.assigned_map])
|
||||||
|
screen_maps[screen_obj.assigned_map] = list()
|
||||||
|
// NOTE: Possibly an expensive operation
|
||||||
|
var/list/screen_map = screen_maps[screen_obj.assigned_map]
|
||||||
|
if(!screen_map.Find(screen_obj))
|
||||||
|
screen_map += screen_obj
|
||||||
|
if(!screen.Find(screen_obj))
|
||||||
|
screen += screen_obj
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the map of registered screen objects.
|
||||||
|
*
|
||||||
|
* Not really needed most of the time, as the client's screen list gets reset
|
||||||
|
* on relog. any of the buttons are going to get caught by garbage collection
|
||||||
|
* anyway. they're effectively qdel'd.
|
||||||
|
*/
|
||||||
|
/client/proc/clear_map(map_name)
|
||||||
|
if(!map_name || !(map_name in screen_maps))
|
||||||
|
return FALSE
|
||||||
|
for(var/obj/screen/screen_obj in screen_maps[map_name])
|
||||||
|
screen_maps[map_name] -= screen_obj
|
||||||
|
if(screen_obj.del_on_map_removal)
|
||||||
|
qdel(screen_obj)
|
||||||
|
screen_maps -= map_name
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears all the maps of registered screen objects.
|
||||||
|
*/
|
||||||
|
/client/proc/clear_all_maps()
|
||||||
|
for(var/map_name in screen_maps)
|
||||||
|
clear_map(map_name)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a popup window with a basic map element in it, without any
|
||||||
|
* further initialization.
|
||||||
|
*
|
||||||
|
* Ratio is how many pixels by how many pixels (keep it simple).
|
||||||
|
*
|
||||||
|
* Returns a map name.
|
||||||
|
*/
|
||||||
|
/client/proc/create_popup(name, ratiox = 100, ratioy = 100)
|
||||||
|
winclone(src, "popupwindow", name)
|
||||||
|
var/list/winparams = list()
|
||||||
|
winparams["size"] = "[ratiox]x[ratioy]"
|
||||||
|
winparams["on-close"] = "handle-popup-close [name]"
|
||||||
|
winset(src, "[name]", list2params(winparams))
|
||||||
|
winshow(src, "[name]", 1)
|
||||||
|
|
||||||
|
var/list/params = list()
|
||||||
|
params["parent"] = "[name]"
|
||||||
|
params["type"] = "map"
|
||||||
|
params["size"] = "[ratiox]x[ratioy]"
|
||||||
|
params["anchor1"] = "0,0"
|
||||||
|
params["anchor2"] = "[ratiox],[ratioy]"
|
||||||
|
winset(src, "[name]_map", list2params(params))
|
||||||
|
|
||||||
|
return "[name]_map"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the popup, and get it ready for generic use by giving
|
||||||
|
* it a background.
|
||||||
|
*
|
||||||
|
* Width and height are multiplied by 64 by default.
|
||||||
|
*/
|
||||||
|
/client/proc/setup_popup(popup_name, width = 9, height = 9, \
|
||||||
|
tilesize = 2, bg_icon)
|
||||||
|
if(!popup_name)
|
||||||
|
return
|
||||||
|
clear_map("[popup_name]_map")
|
||||||
|
var/x_value = world.icon_size * tilesize * width
|
||||||
|
var/y_value = world.icon_size * tilesize * height
|
||||||
|
var/map_name = create_popup(popup_name, x_value, y_value)
|
||||||
|
|
||||||
|
var/obj/screen/background/background = new
|
||||||
|
background.assigned_map = map_name
|
||||||
|
background.fill_rect(1, 1, width, height)
|
||||||
|
if(bg_icon)
|
||||||
|
background.icon_state = bg_icon
|
||||||
|
register_map_obj(background)
|
||||||
|
|
||||||
|
return map_name
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes a popup.
|
||||||
|
*/
|
||||||
|
/client/proc/close_popup(popup)
|
||||||
|
winshow(src, popup, 0)
|
||||||
|
handle_popup_close(popup)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When the popup closes in any way (player or proc call) it calls this.
|
||||||
|
*/
|
||||||
|
/client/verb/handle_popup_close(window_id as text)
|
||||||
|
set hidden = TRUE
|
||||||
|
clear_map("[window_id]_map")
|
||||||
@@ -63,18 +63,9 @@
|
|||||||
// And here are some good things for free:
|
// And here are some good things for free:
|
||||||
// Now you can click through portals, wormholes, gateways, and teleporters while observing. -Sayu
|
// Now you can click through portals, wormholes, gateways, and teleporters while observing. -Sayu
|
||||||
|
|
||||||
/obj/machinery/gateway/centerstation/attack_ghost(mob/user)
|
/obj/effect/gateway_portal_bumper/attack_ghost(mob/user)
|
||||||
if(awaygate)
|
if(gateway)
|
||||||
user.forceMove(awaygate.loc)
|
gateway.Transfer(user)
|
||||||
else
|
|
||||||
to_chat(user, "[src] has no destination.")
|
|
||||||
return ..()
|
|
||||||
|
|
||||||
/obj/machinery/gateway/centeraway/attack_ghost(mob/user)
|
|
||||||
if(stationgate)
|
|
||||||
user.forceMove(stationgate.loc)
|
|
||||||
else
|
|
||||||
to_chat(user, "[src] has no destination.")
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/teleport/hub/attack_ghost(mob/user)
|
/obj/machinery/teleport/hub/attack_ghost(mob/user)
|
||||||
|
|||||||
+24
-35
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Otherwise pretty standard.
|
Otherwise pretty standard.
|
||||||
*/
|
*/
|
||||||
/mob/living/carbon/human/UnarmedAttack(atom/A, proximity)
|
/mob/living/carbon/human/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
|
|
||||||
if(!has_active_hand()) //can't attack without a hand.
|
if(!has_active_hand()) //can't attack without a hand.
|
||||||
to_chat(src, "<span class='notice'>You look at your arm and sigh.</span>")
|
to_chat(src, "<span class='notice'>You look at your arm and sigh.</span>")
|
||||||
@@ -20,16 +20,16 @@
|
|||||||
var/override = 0
|
var/override = 0
|
||||||
|
|
||||||
for(var/datum/mutation/human/HM in dna.mutations)
|
for(var/datum/mutation/human/HM in dna.mutations)
|
||||||
override += HM.on_attack_hand(A, proximity)
|
override += HM.on_attack_hand(A, proximity, intent, flags)
|
||||||
|
|
||||||
if(override)
|
if(override)
|
||||||
return
|
return
|
||||||
|
|
||||||
SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A)
|
SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A)
|
||||||
A.attack_hand(src)
|
A.attack_hand(src, intent, flags)
|
||||||
|
|
||||||
//Return TRUE to cancel other attack hand effects that respect it.
|
//Return TRUE to cancel other attack hand effects that respect it.
|
||||||
/atom/proc/attack_hand(mob/user)
|
/atom/proc/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
. = FALSE
|
. = FALSE
|
||||||
if(!(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND))
|
if(!(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND))
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
@@ -104,8 +104,8 @@
|
|||||||
/*
|
/*
|
||||||
Animals & All Unspecified
|
Animals & All Unspecified
|
||||||
*/
|
*/
|
||||||
/mob/living/UnarmedAttack(atom/A)
|
/mob/living/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_animal(src)
|
A.attack_animal(src, intent, flags)
|
||||||
|
|
||||||
/atom/proc/attack_animal(mob/user)
|
/atom/proc/attack_animal(mob/user)
|
||||||
SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user)
|
SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user)
|
||||||
@@ -116,8 +116,8 @@
|
|||||||
/*
|
/*
|
||||||
Monkeys
|
Monkeys
|
||||||
*/
|
*/
|
||||||
/mob/living/carbon/monkey/UnarmedAttack(atom/A)
|
/mob/living/carbon/monkey/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_paw(src)
|
A.attack_paw(src, intent, flags)
|
||||||
|
|
||||||
/atom/proc/attack_paw(mob/user)
|
/atom/proc/attack_paw(mob/user)
|
||||||
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND)
|
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND)
|
||||||
@@ -162,8 +162,8 @@
|
|||||||
Aliens
|
Aliens
|
||||||
Defaults to same as monkey in most places
|
Defaults to same as monkey in most places
|
||||||
*/
|
*/
|
||||||
/mob/living/carbon/alien/UnarmedAttack(atom/A)
|
/mob/living/carbon/alien/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_alien(src)
|
A.attack_alien(src, intent, flags)
|
||||||
|
|
||||||
/atom/proc/attack_alien(mob/living/carbon/alien/user)
|
/atom/proc/attack_alien(mob/living/carbon/alien/user)
|
||||||
attack_paw(user)
|
attack_paw(user)
|
||||||
@@ -173,29 +173,29 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
// Babby aliens
|
// Babby aliens
|
||||||
/mob/living/carbon/alien/larva/UnarmedAttack(atom/A)
|
/mob/living/carbon/alien/larva/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_larva(src)
|
A.attack_larva(src, intent, flags)
|
||||||
|
|
||||||
/atom/proc/attack_larva(mob/user)
|
/atom/proc/attack_larva(mob/user)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Slimes
|
Slimes
|
||||||
Nothing happening here
|
Nothing happening here
|
||||||
*/
|
*/
|
||||||
/mob/living/simple_animal/slime/UnarmedAttack(atom/A)
|
/mob/living/simple_animal/slime/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_slime(src)
|
A.attack_slime(src, intent, flags)
|
||||||
|
|
||||||
/atom/proc/attack_slime(mob/user)
|
/atom/proc/attack_slime(mob/user)
|
||||||
return
|
return
|
||||||
/mob/living/simple_animal/slime/RestrainedClickOn(atom/A)
|
/mob/living/simple_animal/slime/RestrainedClickOn(atom/A)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Drones
|
Drones
|
||||||
*/
|
*/
|
||||||
/mob/living/simple_animal/drone/UnarmedAttack(atom/A)
|
/mob/living/simple_animal/drone/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
A.attack_drone(src)
|
A.attack_drone(src, intent, flags)
|
||||||
|
|
||||||
/atom/proc/attack_drone(mob/living/simple_animal/drone/user)
|
/atom/proc/attack_drone(mob/living/simple_animal/drone/user)
|
||||||
attack_hand(user) //defaults to attack_hand. Override it when you don't want drones to do same stuff as humans.
|
attack_hand(user) //defaults to attack_hand. Override it when you don't want drones to do same stuff as humans.
|
||||||
@@ -203,55 +203,44 @@
|
|||||||
/mob/living/simple_animal/slime/RestrainedClickOn(atom/A)
|
/mob/living/simple_animal/slime/RestrainedClickOn(atom/A)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
True Devil
|
True Devil
|
||||||
*/
|
*/
|
||||||
|
/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity)
|
|
||||||
A.attack_hand(src)
|
A.attack_hand(src)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Brain
|
Brain
|
||||||
*/
|
*/
|
||||||
|
/mob/living/brain/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
/mob/living/brain/UnarmedAttack(atom/A)//Stops runtimes due to attack_animal being the default
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pAI
|
pAI
|
||||||
*/
|
*/
|
||||||
|
/mob/living/silicon/pai/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
/mob/living/silicon/pai/UnarmedAttack(atom/A)//Stops runtimes due to attack_animal being the default
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Simple animals
|
Simple animals
|
||||||
*/
|
*/
|
||||||
|
/mob/living/simple_animal/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
/mob/living/simple_animal/UnarmedAttack(atom/A, proximity)
|
|
||||||
if(!dextrous)
|
if(!dextrous)
|
||||||
return ..()
|
return ..()
|
||||||
if(!ismob(A))
|
if(!ismob(A))
|
||||||
A.attack_hand(src)
|
A.attack_hand(src, intent, flags)
|
||||||
update_inv_hands()
|
update_inv_hands()
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Hostile animals
|
Hostile animals
|
||||||
*/
|
*/
|
||||||
|
/mob/living/simple_animal/hostile/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE)
|
||||||
/mob/living/simple_animal/hostile/UnarmedAttack(atom/A)
|
|
||||||
target = A
|
target = A
|
||||||
if(dextrous && !ismob(A))
|
if(dextrous && !ismob(A))
|
||||||
..()
|
..()
|
||||||
else
|
else
|
||||||
AttackingTarget()
|
AttackingTarget()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
New Players:
|
New Players:
|
||||||
Have no reason to click on anything at all.
|
Have no reason to click on anything at all.
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
var/auto_trim = TRUE
|
var/auto_trim = TRUE
|
||||||
|
|
||||||
/datum/config_entry/string/vv_edit_var(var_name, var_value)
|
/datum/config_entry/string/vv_edit_var(var_name, var_value)
|
||||||
return var_name != "auto_trim" && ..()
|
return var_name != NAMEOF(src, auto_trim) && ..()
|
||||||
|
|
||||||
/datum/config_entry/string/ValidateAndSet(str_val, during_load)
|
/datum/config_entry/string/ValidateAndSet(str_val, during_load)
|
||||||
if(!VASProcCallGuard(str_val))
|
if(!VASProcCallGuard(str_val))
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/datum/config_entry/number/vv_edit_var(var_name, var_value)
|
/datum/config_entry/number/vv_edit_var(var_name, var_value)
|
||||||
var/static/list/banned_edits = list("max_val", "min_val", "integer")
|
var/static/list/banned_edits = list(NAMEOF(src, max_val), NAMEOF(src, min_val), NAMEOF(src, integer))
|
||||||
return !(var_name in banned_edits) && ..()
|
return !(var_name in banned_edits) && ..()
|
||||||
|
|
||||||
/datum/config_entry/flag
|
/datum/config_entry/flag
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/datum/config_entry/keyed_list/vv_edit_var(var_name, var_value)
|
/datum/config_entry/keyed_list/vv_edit_var(var_name, var_value)
|
||||||
return var_name != "splitter" && ..()
|
return var_name != NAMEOF(src, splitter) && ..()
|
||||||
|
|
||||||
/datum/config_entry/keyed_list/proc/preprocess_key(key)
|
/datum/config_entry/keyed_list/proc/preprocess_key(key)
|
||||||
return key
|
return key
|
||||||
|
|||||||
@@ -56,6 +56,8 @@
|
|||||||
/datum/config_entry/flag/log_adminchat // log admin chat messages
|
/datum/config_entry/flag/log_adminchat // log admin chat messages
|
||||||
protection = CONFIG_ENTRY_LOCKED
|
protection = CONFIG_ENTRY_LOCKED
|
||||||
|
|
||||||
|
/datum/config_entry/flag/log_shuttle // log shuttle related actions, ie shuttle computers, shuttle manipulator, emergency console
|
||||||
|
|
||||||
/datum/config_entry/flag/log_pda // log pda messages
|
/datum/config_entry/flag/log_pda // log pda messages
|
||||||
|
|
||||||
/datum/config_entry/flag/log_telecomms // log telecomms messages
|
/datum/config_entry/flag/log_telecomms // log telecomms messages
|
||||||
|
|||||||
@@ -210,10 +210,10 @@
|
|||||||
|
|
||||||
/datum/controller/subsystem/vv_edit_var(var_name, var_value)
|
/datum/controller/subsystem/vv_edit_var(var_name, var_value)
|
||||||
switch (var_name)
|
switch (var_name)
|
||||||
if ("can_fire")
|
if (NAMEOF(src, can_fire))
|
||||||
//this is so the subsystem doesn't rapid fire to make up missed ticks causing more lag
|
//this is so the subsystem doesn't rapid fire to make up missed ticks causing more lag
|
||||||
if (var_value)
|
if (var_value)
|
||||||
next_fire = world.time + wait
|
next_fire = world.time + wait
|
||||||
if ("queued_priority") //editing this breaks things.
|
if (NAMEOF(src, queued_priority)) //editing this breaks things.
|
||||||
return 0
|
return FALSE
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ SUBSYSTEM_DEF(atoms)
|
|||||||
|
|
||||||
/datum/controller/subsystem/atoms/Initialize(timeofday)
|
/datum/controller/subsystem/atoms/Initialize(timeofday)
|
||||||
GLOB.fire_overlay.appearance_flags = RESET_COLOR
|
GLOB.fire_overlay.appearance_flags = RESET_COLOR
|
||||||
|
setupGenetics()
|
||||||
initialized = INITIALIZATION_INNEW_MAPLOAD
|
initialized = INITIALIZATION_INNEW_MAPLOAD
|
||||||
InitializeAtoms()
|
InitializeAtoms()
|
||||||
return ..()
|
return ..()
|
||||||
@@ -106,6 +107,29 @@ SUBSYSTEM_DEF(atoms)
|
|||||||
old_initialized = SSatoms.old_initialized
|
old_initialized = SSatoms.old_initialized
|
||||||
BadInitializeCalls = SSatoms.BadInitializeCalls
|
BadInitializeCalls = SSatoms.BadInitializeCalls
|
||||||
|
|
||||||
|
/datum/controller/subsystem/atoms/proc/setupGenetics()
|
||||||
|
var/list/mutations = subtypesof(/datum/mutation/human)
|
||||||
|
shuffle_inplace(mutations)
|
||||||
|
for(var/A in subtypesof(/datum/generecipe))
|
||||||
|
var/datum/generecipe/GR = A
|
||||||
|
GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
|
||||||
|
for(var/i in 1 to LAZYLEN(mutations))
|
||||||
|
var/path = mutations[i] //byond gets pissy when we do it in one line
|
||||||
|
var/datum/mutation/human/B = new path ()
|
||||||
|
B.alias = "Mutation [i]"
|
||||||
|
GLOB.all_mutations[B.type] = B
|
||||||
|
GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks)
|
||||||
|
GLOB.alias_mutations[B.alias] = B.type
|
||||||
|
if(B.locked)
|
||||||
|
continue
|
||||||
|
if(B.quality == POSITIVE)
|
||||||
|
GLOB.good_mutations |= B
|
||||||
|
else if(B.quality == NEGATIVE)
|
||||||
|
GLOB.bad_mutations |= B
|
||||||
|
else if(B.quality == MINOR_NEGATIVE)
|
||||||
|
GLOB.not_good_mutations |= B
|
||||||
|
CHECK_TICK
|
||||||
|
|
||||||
/datum/controller/subsystem/atoms/proc/InitLog()
|
/datum/controller/subsystem/atoms/proc/InitLog()
|
||||||
. = ""
|
. = ""
|
||||||
for(var/path in BadInitializeCalls)
|
for(var/path in BadInitializeCalls)
|
||||||
|
|||||||
@@ -60,9 +60,9 @@ SUBSYSTEM_DEF(blackbox)
|
|||||||
|
|
||||||
/datum/controller/subsystem/blackbox/vv_edit_var(var_name, var_value)
|
/datum/controller/subsystem/blackbox/vv_edit_var(var_name, var_value)
|
||||||
switch(var_name)
|
switch(var_name)
|
||||||
if("feedback")
|
if(NAMEOF(src, feedback))
|
||||||
return FALSE
|
return FALSE
|
||||||
if("sealed")
|
if(NAMEOF(src, sealed))
|
||||||
if(var_value)
|
if(var_value)
|
||||||
return Seal()
|
return Seal()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
|||||||
for (var/map in mapvotes)
|
for (var/map in mapvotes)
|
||||||
if (!map)
|
if (!map)
|
||||||
mapvotes.Remove(map)
|
mapvotes.Remove(map)
|
||||||
|
continue
|
||||||
if (!(map in global.config.maplist))
|
if (!(map in global.config.maplist))
|
||||||
mapvotes.Remove(map)
|
mapvotes.Remove(map)
|
||||||
continue
|
continue
|
||||||
@@ -468,9 +469,9 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
|||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
possible_options += "Custom"
|
possible_options = "Custom"
|
||||||
var/lvl_name
|
var/away_name
|
||||||
var/datum/space_level/level
|
var/datum/space_level/away_level
|
||||||
|
|
||||||
var/answer = input("What kind ? ","Away/VR") as null|anything in possible_options
|
var/answer = input("What kind ? ","Away/VR") as null|anything in possible_options
|
||||||
switch(answer)
|
switch(answer)
|
||||||
@@ -480,34 +481,22 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
|||||||
var/mapfile = input("Pick file:", "File") as null|file
|
var/mapfile = input("Pick file:", "File") as null|file
|
||||||
if(!mapfile)
|
if(!mapfile)
|
||||||
return
|
return
|
||||||
lvl_name = "[mapfile] custom"
|
away_name = "[mapfile] custom"
|
||||||
to_chat(usr,"<span class='notice'>Loading [lvl_name]...</span>")
|
to_chat(usr,"<span class='notice'>Loading [away_name]...</span>")
|
||||||
var/datum/map_template/template = new(mapfile, choice, ztraits)
|
var/datum/map_template/template = new(mapfile, choice, ztraits)
|
||||||
level = template.load_new_z(ztraits)
|
away_level = template.load_new_z(ztraits)
|
||||||
else
|
else
|
||||||
lvl_name = answer
|
away_name = answer
|
||||||
to_chat(usr,"<span class='notice'>Loading [lvl_name]...</span>")
|
to_chat(usr,"<span class='notice'>Loading [away_name]...</span>")
|
||||||
var/datum/map_template/template = new(lvl_name, choice)
|
var/datum/map_template/template = new(away_name, choice)
|
||||||
level = template.load_new_z(ztraits)
|
away_level = template.load_new_z(ztraits)
|
||||||
|
|
||||||
message_admins("Admin [key_name_admin(usr)] has loaded [lvl_name] [choice].")
|
message_admins("Admin [key_name_admin(usr)] has loaded [away_name] away mission.")
|
||||||
log_admin("Admin [key_name(usr)] has loaded [lvl_name] [choice].")
|
log_admin("Admin [key_name(usr)] has loaded [away_name] away mission.")
|
||||||
if(!level)
|
if(!away_level)
|
||||||
message_admins("Loading [lvl_name] failed!")
|
message_admins("Loading [away_name] failed!")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
if(choice == AWAY_MISSION_NAME && GLOB.the_gateway)
|
|
||||||
//Link any found away gate with station gate
|
|
||||||
var/obj/machinery/gateway/centeraway/new_gate
|
|
||||||
for(var/obj/machinery/gateway/centeraway/G in GLOB.machines)
|
|
||||||
if(G.z == level.z_value) //I'll have to refactor gateway shitcode before multi-away support.
|
|
||||||
new_gate = G
|
|
||||||
break
|
|
||||||
//Link station gate with away gate and remove wait time.
|
|
||||||
GLOB.the_gateway.awaygate = new_gate
|
|
||||||
GLOB.the_gateway.wait = world.time
|
|
||||||
|
|
||||||
/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override)
|
/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override)
|
||||||
UNTIL((!z || reservation_ready["[z]"]) && !clearing_reserved_turfs)
|
UNTIL((!z || reservation_ready["[z]"]) && !clearing_reserved_turfs)
|
||||||
var/datum/turf_reservation/reserve = new type
|
var/datum/turf_reservation/reserve = new type
|
||||||
|
|||||||
@@ -7,10 +7,9 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK
|
flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK
|
||||||
runlevels = RUNLEVEL_SETUP | RUNLEVEL_GAME
|
runlevels = RUNLEVEL_SETUP | RUNLEVEL_GAME
|
||||||
|
|
||||||
var/obj/machinery/shuttle_manipulator/manipulator
|
|
||||||
|
|
||||||
var/list/mobile = list()
|
var/list/mobile = list()
|
||||||
var/list/stationary = list()
|
var/list/stationary = list()
|
||||||
|
var/list/beacons = list()
|
||||||
var/list/transit = list()
|
var/list/transit = list()
|
||||||
|
|
||||||
var/list/transit_requesters = list()
|
var/list/transit_requesters = list()
|
||||||
@@ -57,6 +56,15 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
|
|
||||||
var/realtimeofstart = 0
|
var/realtimeofstart = 0
|
||||||
|
|
||||||
|
var/datum/map_template/shuttle/selected
|
||||||
|
|
||||||
|
var/obj/docking_port/mobile/existing_shuttle
|
||||||
|
|
||||||
|
var/obj/docking_port/mobile/preview_shuttle
|
||||||
|
var/datum/map_template/shuttle/preview_template
|
||||||
|
|
||||||
|
var/datum/turf_reservation/preview_reservation
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/Initialize(timeofday)
|
/datum/controller/subsystem/shuttle/Initialize(timeofday)
|
||||||
ordernum = rand(1, 9000)
|
ordernum = rand(1, 9000)
|
||||||
|
|
||||||
@@ -76,13 +84,10 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!")
|
WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!")
|
||||||
if(!supply)
|
if(!supply)
|
||||||
WARNING("No /obj/docking_port/mobile/supply placed on the map!")
|
WARNING("No /obj/docking_port/mobile/supply placed on the map!")
|
||||||
realtimeofstart = world.realtime
|
realtimeofstart = world.realtime
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/initial_load()
|
/datum/controller/subsystem/shuttle/proc/initial_load()
|
||||||
if(!istype(manipulator))
|
|
||||||
CRASH("No shuttle manipulator found.")
|
|
||||||
|
|
||||||
for(var/s in stationary)
|
for(var/s in stationary)
|
||||||
var/obj/docking_port/stationary/S = s
|
var/obj/docking_port/stationary/S = s
|
||||||
S.load_roundstart()
|
S.load_roundstart()
|
||||||
@@ -143,11 +148,13 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
++alive
|
++alive
|
||||||
|
|
||||||
var/total = GLOB.joined_player_list.len
|
var/total = GLOB.joined_player_list.len
|
||||||
|
if(total <= 0)
|
||||||
|
return //no players no autoevac
|
||||||
|
|
||||||
if(alive / total <= threshold)
|
if(alive / total <= threshold)
|
||||||
var/msg = "Automatically dispatching shuttle due to crew death."
|
var/msg = "Automatically dispatching emergency shuttle due to crew death."
|
||||||
message_admins(msg)
|
message_admins(msg)
|
||||||
log_game("[msg] Alive: [alive], Roundstart: [total], Threshold: [threshold]")
|
log_shuttle("[msg] Alive: [alive], Roundstart: [total], Threshold: [threshold]")
|
||||||
emergencyNoRecall = TRUE
|
emergencyNoRecall = TRUE
|
||||||
priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.")
|
priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.")
|
||||||
if(emergency.timeLeft(1) > emergencyCallTime * 0.4)
|
if(emergency.timeLeft(1) > emergencyCallTime * 0.4)
|
||||||
@@ -172,6 +179,34 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
return S
|
return S
|
||||||
WARNING("couldn't find dock with id: [id]")
|
WARNING("couldn't find dock with id: [id]")
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/proc/canEvac(mob/user)
|
||||||
|
var/srd = CONFIG_GET(number/shuttle_refuel_delay)
|
||||||
|
if(world.time - SSticker.round_start_time < srd)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle is refueling. Please wait [DisplayTimeText(srd - (world.time - SSticker.round_start_time))] before trying again.</span>")
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
switch(emergency.mode)
|
||||||
|
if(SHUTTLE_RECALL)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle may not be called while returning to CentCom.</span>")
|
||||||
|
return FALSE
|
||||||
|
if(SHUTTLE_CALL)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle is already on its way.</span>")
|
||||||
|
return FALSE
|
||||||
|
if(SHUTTLE_DOCKED)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle is already here.</span>")
|
||||||
|
return FALSE
|
||||||
|
if(SHUTTLE_IGNITING)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle is firing its engines to leave.</span>")
|
||||||
|
return FALSE
|
||||||
|
if(SHUTTLE_ESCAPE)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle is moving away to a safe distance.</span>")
|
||||||
|
return FALSE
|
||||||
|
if(SHUTTLE_STRANDED)
|
||||||
|
to_chat(user, "<span class='alert'>The emergency shuttle has been disabled by CentCom.</span>")
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
return TRUE
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/requestEvac(mob/user, call_reason)
|
/datum/controller/subsystem/shuttle/proc/requestEvac(mob/user, call_reason)
|
||||||
if(!emergency)
|
if(!emergency)
|
||||||
WARNING("requestEvac(): There is no emergency shuttle, but the \
|
WARNING("requestEvac(): There is no emergency shuttle, but the \
|
||||||
@@ -185,35 +220,14 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
manually, and then calling register() on the mobile docking port. \
|
manually, and then calling register() on the mobile docking port. \
|
||||||
Good luck.")
|
Good luck.")
|
||||||
emergency = backup_shuttle
|
emergency = backup_shuttle
|
||||||
var/srd = CONFIG_GET(number/shuttle_refuel_delay)
|
|
||||||
if(world.time - SSticker.round_start_time < srd)
|
|
||||||
to_chat(user, "The emergency shuttle is refueling. Please wait [DisplayTimeText(srd - (world.time - SSticker.round_start_time))] before trying again.")
|
|
||||||
return
|
|
||||||
|
|
||||||
switch(emergency.mode)
|
if(!canEvac(user))
|
||||||
if(SHUTTLE_RECALL)
|
return
|
||||||
to_chat(user, "The emergency shuttle may not be called while returning to CentCom.")
|
|
||||||
return
|
|
||||||
if(SHUTTLE_CALL)
|
|
||||||
to_chat(user, "The emergency shuttle is already on its way.")
|
|
||||||
return
|
|
||||||
if(SHUTTLE_DOCKED)
|
|
||||||
to_chat(user, "The emergency shuttle is already here.")
|
|
||||||
return
|
|
||||||
if(SHUTTLE_IGNITING)
|
|
||||||
to_chat(user, "The emergency shuttle is firing its engines to leave.")
|
|
||||||
return
|
|
||||||
if(SHUTTLE_ESCAPE)
|
|
||||||
to_chat(user, "The emergency shuttle is moving away to a safe distance.")
|
|
||||||
return
|
|
||||||
if(SHUTTLE_STRANDED)
|
|
||||||
to_chat(user, "The emergency shuttle has been disabled by CentCom.")
|
|
||||||
return
|
|
||||||
|
|
||||||
call_reason = trim(html_encode(call_reason))
|
call_reason = trim(html_encode(call_reason))
|
||||||
|
|
||||||
if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && GLOB.security_level > SEC_LEVEL_GREEN)
|
if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && GLOB.security_level > SEC_LEVEL_GREEN)
|
||||||
to_chat(user, "You must provide a reason.")
|
to_chat(user, "<span class='alert'>You must provide a reason.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
var/area/signal_origin = get_area(user)
|
var/area/signal_origin = get_area(user)
|
||||||
@@ -235,11 +249,11 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
|
|
||||||
var/area/A = get_area(user)
|
var/area/A = get_area(user)
|
||||||
|
|
||||||
log_game("[key_name(user)] has called the shuttle.")
|
log_shuttle("[key_name(user)] has called the emergency shuttle.")
|
||||||
deadchat_broadcast("<span class='deadsay'><span class='name'>[user.real_name]</span> has called the shuttle at <span class='name'>[A.name]</span>.</span>", user)
|
deadchat_broadcast(" has called the shuttle at <span class='name'>[A.name]</span>.", "<span class='name'>[user.real_name]</span>", user)
|
||||||
if(call_reason)
|
if(call_reason)
|
||||||
SSblackbox.record_feedback("text", "shuttle_reason", 1, "[call_reason]")
|
SSblackbox.record_feedback("text", "shuttle_reason", 1, "[call_reason]")
|
||||||
log_game("Shuttle call reason: [call_reason]")
|
log_shuttle("Shuttle call reason: [call_reason]")
|
||||||
message_admins("[ADMIN_LOOKUPFLW(user)] has called the shuttle. (<A HREF='?_src_=holder;[HrefToken()];trigger_centcom_recall=1'>TRIGGER CENTCOM RECALL</A>)")
|
message_admins("[ADMIN_LOOKUPFLW(user)] has called the shuttle. (<A HREF='?_src_=holder;[HrefToken()];trigger_centcom_recall=1'>TRIGGER CENTCOM RECALL</A>)")
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/centcom_recall(old_timer, admiral_message)
|
/datum/controller/subsystem/shuttle/proc/centcom_recall(old_timer, admiral_message)
|
||||||
@@ -272,9 +286,9 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
/datum/controller/subsystem/shuttle/proc/cancelEvac(mob/user)
|
/datum/controller/subsystem/shuttle/proc/cancelEvac(mob/user)
|
||||||
if(canRecall())
|
if(canRecall())
|
||||||
emergency.cancel(get_area(user))
|
emergency.cancel(get_area(user))
|
||||||
log_game("[key_name(user)] has recalled the shuttle.")
|
log_shuttle("[key_name(user)] has recalled the shuttle.")
|
||||||
message_admins("[ADMIN_LOOKUPFLW(user)] has recalled the shuttle.")
|
message_admins("[ADMIN_LOOKUPFLW(user)] has recalled the shuttle.")
|
||||||
deadchat_broadcast("<span class='deadsay'><span class='name'>[user.real_name]</span> has recalled the shuttle from <span class='name'>[get_area_name(user, TRUE)]</span>.</span>", user)
|
deadchat_broadcast(" has recalled the shuttle from <span class='name'>[get_area_name(user, TRUE)]</span>.", "<span class='name'>[user.real_name]</span>", user)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/canRecall()
|
/datum/controller/subsystem/shuttle/proc/canRecall()
|
||||||
@@ -294,7 +308,7 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
else
|
else
|
||||||
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
|
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
|
||||||
return
|
return
|
||||||
return 1
|
return TRUE
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/autoEvac()
|
/datum/controller/subsystem/shuttle/proc/autoEvac()
|
||||||
if (!SSticker.IsRoundInProgress())
|
if (!SSticker.IsRoundInProgress())
|
||||||
@@ -322,7 +336,7 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
if(callShuttle)
|
if(callShuttle)
|
||||||
if(EMERGENCY_IDLE_OR_RECALLED)
|
if(EMERGENCY_IDLE_OR_RECALLED)
|
||||||
emergency.request(null, set_coefficient = 2.5)
|
emergency.request(null, set_coefficient = 2.5)
|
||||||
log_game("There is no means of calling the shuttle anymore. Shuttle automatically called.")
|
log_shuttle("There is no means of calling the emergency shuttle anymore. Shuttle automatically called.")
|
||||||
message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.")
|
message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.")
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/registerHostileEnvironment(datum/bad)
|
/datum/controller/subsystem/shuttle/proc/registerHostileEnvironment(datum/bad)
|
||||||
@@ -559,6 +573,14 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
shuttle_purchased = SSshuttle.shuttle_purchased
|
shuttle_purchased = SSshuttle.shuttle_purchased
|
||||||
lockdown = SSshuttle.lockdown
|
lockdown = SSshuttle.lockdown
|
||||||
|
|
||||||
|
selected = SSshuttle.selected
|
||||||
|
|
||||||
|
existing_shuttle = SSshuttle.existing_shuttle
|
||||||
|
|
||||||
|
preview_shuttle = SSshuttle.preview_shuttle
|
||||||
|
preview_template = SSshuttle.preview_template
|
||||||
|
|
||||||
|
preview_reservation = SSshuttle.preview_reservation
|
||||||
|
|
||||||
/datum/controller/subsystem/shuttle/proc/is_in_shuttle_bounds(atom/A)
|
/datum/controller/subsystem/shuttle/proc/is_in_shuttle_bounds(atom/A)
|
||||||
var/area/current = get_area(A)
|
var/area/current = get_area(A)
|
||||||
@@ -641,3 +663,252 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
message_admins("Round end vote passed. Shuttle has been auto-called.")
|
message_admins("Round end vote passed. Shuttle has been auto-called.")
|
||||||
emergencyNoRecall = TRUE
|
emergencyNoRecall = TRUE
|
||||||
endvote_passed = TRUE
|
endvote_passed = TRUE
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/proc/action_load(datum/map_template/shuttle/loading_template, obj/docking_port/stationary/destination_port)
|
||||||
|
// Check for an existing preview
|
||||||
|
if(preview_shuttle && (loading_template != preview_template))
|
||||||
|
preview_shuttle.jumpToNullSpace()
|
||||||
|
preview_shuttle = null
|
||||||
|
preview_template = null
|
||||||
|
QDEL_NULL(preview_reservation)
|
||||||
|
|
||||||
|
if(!preview_shuttle)
|
||||||
|
if(load_template(loading_template))
|
||||||
|
preview_shuttle.linkup(loading_template, destination_port)
|
||||||
|
preview_template = loading_template
|
||||||
|
|
||||||
|
// get the existing shuttle information, if any
|
||||||
|
var/timer = 0
|
||||||
|
var/mode = SHUTTLE_IDLE
|
||||||
|
var/obj/docking_port/stationary/D
|
||||||
|
|
||||||
|
if(istype(destination_port))
|
||||||
|
D = destination_port
|
||||||
|
else if(existing_shuttle)
|
||||||
|
timer = existing_shuttle.timer
|
||||||
|
mode = existing_shuttle.mode
|
||||||
|
D = existing_shuttle.get_docked()
|
||||||
|
|
||||||
|
if(!D)
|
||||||
|
D = generate_transit_dock(preview_shuttle)
|
||||||
|
|
||||||
|
if(!D)
|
||||||
|
CRASH("No dock found for preview shuttle ([preview_template.name]), aborting.")
|
||||||
|
|
||||||
|
var/result = preview_shuttle.canDock(D)
|
||||||
|
// truthy value means that it cannot dock for some reason
|
||||||
|
// but we can ignore the someone else docked error because we'll
|
||||||
|
// be moving into their place shortly
|
||||||
|
if((result != SHUTTLE_CAN_DOCK) && (result != SHUTTLE_SOMEONE_ELSE_DOCKED))
|
||||||
|
WARNING("Template shuttle [preview_shuttle] cannot dock at [D] ([result]).")
|
||||||
|
return
|
||||||
|
|
||||||
|
if(existing_shuttle)
|
||||||
|
existing_shuttle.jumpToNullSpace()
|
||||||
|
|
||||||
|
var/list/force_memory = preview_shuttle.movement_force
|
||||||
|
preview_shuttle.movement_force = list("KNOCKDOWN" = 0, "THROW" = 0)
|
||||||
|
preview_shuttle.initiate_docking(D)
|
||||||
|
preview_shuttle.movement_force = force_memory
|
||||||
|
|
||||||
|
. = preview_shuttle
|
||||||
|
|
||||||
|
// Shuttle state involves a mode and a timer based on world.time, so
|
||||||
|
// plugging the existing shuttles old values in works fine.
|
||||||
|
preview_shuttle.timer = timer
|
||||||
|
preview_shuttle.mode = mode
|
||||||
|
|
||||||
|
preview_shuttle.register()
|
||||||
|
|
||||||
|
// TODO indicate to the user that success happened, rather than just
|
||||||
|
// blanking the modification tab
|
||||||
|
preview_shuttle = null
|
||||||
|
preview_template = null
|
||||||
|
existing_shuttle = null
|
||||||
|
selected = null
|
||||||
|
QDEL_NULL(preview_reservation)
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/proc/load_template(datum/map_template/shuttle/S)
|
||||||
|
. = FALSE
|
||||||
|
// load shuttle template, centred at shuttle import landmark,
|
||||||
|
preview_reservation = SSmapping.RequestBlockReservation(S.width, S.height, SSmapping.transit.z_value, /datum/turf_reservation/transit)
|
||||||
|
if(!preview_reservation)
|
||||||
|
CRASH("failed to reserve an area for shuttle template loading")
|
||||||
|
var/turf/BL = TURF_FROM_COORDS_LIST(preview_reservation.bottom_left_coords)
|
||||||
|
S.load(BL, centered = FALSE, register = FALSE)
|
||||||
|
|
||||||
|
var/affected = S.get_affected_turfs(BL, centered=FALSE)
|
||||||
|
|
||||||
|
var/found = 0
|
||||||
|
// Search the turfs for docking ports
|
||||||
|
// - We need to find the mobile docking port because that is the heart of
|
||||||
|
// the shuttle.
|
||||||
|
// - We need to check that no additional ports have slipped in from the
|
||||||
|
// template, because that causes unintended behaviour.
|
||||||
|
for(var/T in affected)
|
||||||
|
for(var/obj/docking_port/P in T)
|
||||||
|
if(istype(P, /obj/docking_port/mobile))
|
||||||
|
found++
|
||||||
|
if(found > 1)
|
||||||
|
qdel(P, force=TRUE)
|
||||||
|
log_world("Map warning: Shuttle Template [S.mappath] has multiple mobile docking ports.")
|
||||||
|
else
|
||||||
|
preview_shuttle = P
|
||||||
|
if(istype(P, /obj/docking_port/stationary))
|
||||||
|
log_world("Map warning: Shuttle Template [S.mappath] has a stationary docking port.")
|
||||||
|
if(!found)
|
||||||
|
var/msg = "load_template(): Shuttle Template [S.mappath] has no mobile docking port. Aborting import."
|
||||||
|
for(var/T in affected)
|
||||||
|
var/turf/T0 = T
|
||||||
|
T0.empty()
|
||||||
|
|
||||||
|
message_admins(msg)
|
||||||
|
WARNING(msg)
|
||||||
|
return
|
||||||
|
//Everything fine
|
||||||
|
S.post_load(preview_shuttle)
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/proc/unload_preview()
|
||||||
|
if(preview_shuttle)
|
||||||
|
preview_shuttle.jumpToNullSpace()
|
||||||
|
preview_shuttle = null
|
||||||
|
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state)
|
||||||
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
|
if(!ui)
|
||||||
|
ui = new(user, src, ui_key, "ShuttleManipulator", name, 800, 600, master_ui, state)
|
||||||
|
ui.open()
|
||||||
|
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/ui_data(mob/user)
|
||||||
|
var/list/data = list()
|
||||||
|
data["tabs"] = list("Status", "Templates", "Modification")
|
||||||
|
|
||||||
|
// Templates panel
|
||||||
|
data["templates"] = list()
|
||||||
|
var/list/templates = data["templates"]
|
||||||
|
data["templates_tabs"] = list()
|
||||||
|
data["selected"] = list()
|
||||||
|
|
||||||
|
for(var/shuttle_id in SSmapping.shuttle_templates)
|
||||||
|
var/datum/map_template/shuttle/S = SSmapping.shuttle_templates[shuttle_id]
|
||||||
|
|
||||||
|
if(!templates[S.port_id])
|
||||||
|
data["templates_tabs"] += S.port_id
|
||||||
|
templates[S.port_id] = list(
|
||||||
|
"port_id" = S.port_id,
|
||||||
|
"templates" = list())
|
||||||
|
|
||||||
|
var/list/L = list()
|
||||||
|
L["name"] = S.name
|
||||||
|
L["shuttle_id"] = S.shuttle_id
|
||||||
|
L["port_id"] = S.port_id
|
||||||
|
L["description"] = S.description
|
||||||
|
L["admin_notes"] = S.admin_notes
|
||||||
|
|
||||||
|
if(selected == S)
|
||||||
|
data["selected"] = L
|
||||||
|
|
||||||
|
templates[S.port_id]["templates"] += list(L)
|
||||||
|
|
||||||
|
data["templates_tabs"] = sortList(data["templates_tabs"])
|
||||||
|
|
||||||
|
data["existing_shuttle"] = null
|
||||||
|
|
||||||
|
// Status panel
|
||||||
|
data["shuttles"] = list()
|
||||||
|
for(var/i in mobile)
|
||||||
|
var/obj/docking_port/mobile/M = i
|
||||||
|
var/timeleft = M.timeLeft(1)
|
||||||
|
var/list/L = list()
|
||||||
|
L["name"] = M.name
|
||||||
|
L["id"] = M.id
|
||||||
|
L["timer"] = M.timer
|
||||||
|
L["timeleft"] = M.getTimerStr()
|
||||||
|
if (timeleft > 1 HOURS)
|
||||||
|
L["timeleft"] = "Infinity"
|
||||||
|
L["can_fast_travel"] = M.timer && timeleft >= 50
|
||||||
|
L["can_fly"] = TRUE
|
||||||
|
if(istype(M, /obj/docking_port/mobile/emergency))
|
||||||
|
L["can_fly"] = FALSE
|
||||||
|
else if(!M.destination)
|
||||||
|
L["can_fast_travel"] = FALSE
|
||||||
|
if (M.mode != SHUTTLE_IDLE)
|
||||||
|
L["mode"] = capitalize(M.mode)
|
||||||
|
L["status"] = M.getDbgStatusText()
|
||||||
|
if(M == existing_shuttle)
|
||||||
|
data["existing_shuttle"] = L
|
||||||
|
|
||||||
|
data["shuttles"] += list(L)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
/datum/controller/subsystem/shuttle/ui_act(action, params)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
|
var/mob/user = usr
|
||||||
|
|
||||||
|
// Preload some common parameters
|
||||||
|
var/shuttle_id = params["shuttle_id"]
|
||||||
|
var/datum/map_template/shuttle/S = SSmapping.shuttle_templates[shuttle_id]
|
||||||
|
|
||||||
|
switch(action)
|
||||||
|
if("select_template")
|
||||||
|
if(S)
|
||||||
|
existing_shuttle = getShuttle(S.port_id)
|
||||||
|
selected = S
|
||||||
|
. = TRUE
|
||||||
|
if("jump_to")
|
||||||
|
if(params["type"] == "mobile")
|
||||||
|
for(var/i in mobile)
|
||||||
|
var/obj/docking_port/mobile/M = i
|
||||||
|
if(M.id == params["id"])
|
||||||
|
user.forceMove(get_turf(M))
|
||||||
|
. = TRUE
|
||||||
|
break
|
||||||
|
|
||||||
|
if("fly")
|
||||||
|
for(var/i in mobile)
|
||||||
|
var/obj/docking_port/mobile/M = i
|
||||||
|
if(M.id == params["id"])
|
||||||
|
. = TRUE
|
||||||
|
M.admin_fly_shuttle(user)
|
||||||
|
break
|
||||||
|
|
||||||
|
if("fast_travel")
|
||||||
|
for(var/i in mobile)
|
||||||
|
var/obj/docking_port/mobile/M = i
|
||||||
|
if(M.id == params["id"] && M.timer && M.timeLeft(1) >= 50)
|
||||||
|
M.setTimer(50)
|
||||||
|
. = TRUE
|
||||||
|
message_admins("[key_name_admin(usr)] fast travelled [M]")
|
||||||
|
log_admin("[key_name(usr)] fast travelled [M]")
|
||||||
|
SSblackbox.record_feedback("text", "shuttle_manipulator", 1, "[M.name]")
|
||||||
|
break
|
||||||
|
|
||||||
|
if("preview")
|
||||||
|
if(S)
|
||||||
|
. = TRUE
|
||||||
|
unload_preview()
|
||||||
|
load_template(S)
|
||||||
|
if(preview_shuttle)
|
||||||
|
preview_template = S
|
||||||
|
user.forceMove(get_turf(preview_shuttle))
|
||||||
|
if("load")
|
||||||
|
if(existing_shuttle == backup_shuttle)
|
||||||
|
// TODO make the load button disabled
|
||||||
|
WARNING("The shuttle that the selected shuttle will replace \
|
||||||
|
is the backup shuttle. Backup shuttle is required to be \
|
||||||
|
intact for round sanity.")
|
||||||
|
else if(S)
|
||||||
|
. = TRUE
|
||||||
|
// If successful, returns the mobile docking port
|
||||||
|
var/obj/docking_port/mobile/mdp = action_load(S)
|
||||||
|
if(mdp)
|
||||||
|
user.forceMove(get_turf(mdp))
|
||||||
|
message_admins("[key_name_admin(usr)] loaded [mdp] with the shuttle manipulator.")
|
||||||
|
log_admin("[key_name(usr)] loaded [mdp] with the shuttle manipulator.</span>")
|
||||||
|
SSblackbox.record_feedback("text", "shuttle_manipulator", 1, "[mdp.name]")
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ SUBSYSTEM_DEF(tgui)
|
|||||||
var/basehtml // The HTML base used for all UIs.
|
var/basehtml // The HTML base used for all UIs.
|
||||||
|
|
||||||
/datum/controller/subsystem/tgui/PreInit()
|
/datum/controller/subsystem/tgui/PreInit()
|
||||||
basehtml = file2text('tgui-next/packages/tgui/public/tgui-main.html')
|
basehtml = file2text('tgui/packages/tgui/public/tgui.html')
|
||||||
|
|
||||||
/datum/controller/subsystem/tgui/Shutdown()
|
/datum/controller/subsystem/tgui/Shutdown()
|
||||||
close_all_uis()
|
close_all_uis()
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(title)
|
|||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
switch(var_name)
|
switch(var_name)
|
||||||
if("icon")
|
if(NAMEOF(src, icon))
|
||||||
if(splash_turf)
|
if(splash_turf)
|
||||||
splash_turf.icon = icon
|
splash_turf.icon = icon
|
||||||
|
|
||||||
@@ -66,4 +66,4 @@ SUBSYSTEM_DEF(title)
|
|||||||
icon = SStitle.icon
|
icon = SStitle.icon
|
||||||
splash_turf = SStitle.splash_turf
|
splash_turf = SStitle.splash_turf
|
||||||
file_path = SStitle.file_path
|
file_path = SStitle.file_path
|
||||||
previous_icon = SStitle.previous_icon
|
previous_icon = SStitle.previous_icon
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ SUBSYSTEM_DEF(vote)
|
|||||||
var/vote_system = PLURALITY_VOTING
|
var/vote_system = PLURALITY_VOTING
|
||||||
var/question = null
|
var/question = null
|
||||||
var/list/choices = list()
|
var/list/choices = list()
|
||||||
|
/// List of choice = object for statclick objects for statpanel voting
|
||||||
|
var/list/choice_statclicks = list()
|
||||||
var/list/scores = list()
|
var/list/scores = list()
|
||||||
var/list/choice_descs = list() // optional descriptions
|
var/list/choice_descs = list() // optional descriptions
|
||||||
var/list/voted = list()
|
var/list/voted = list()
|
||||||
@@ -47,7 +49,33 @@ SUBSYSTEM_DEF(vote)
|
|||||||
client_popup.open(0)
|
client_popup.open(0)
|
||||||
next_pop = world.time+VOTE_COOLDOWN
|
next_pop = world.time+VOTE_COOLDOWN
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a statpanel. Directly uses statpanel/stat calls since this is called from base of mob/Stat().
|
||||||
|
*/
|
||||||
|
/datum/controller/subsystem/vote/proc/render_statpanel(mob/M)
|
||||||
|
if(!mode) // check if vote is running
|
||||||
|
return
|
||||||
|
if(!statpanel("Status")) // don't bother if they're not focused on this panel
|
||||||
|
return
|
||||||
|
var/static/list/supported = list(PLURALITY_VOTING, APPROVAL_VOTING)
|
||||||
|
stat("Vote active!", "There is currently a vote running. Question: [question]")
|
||||||
|
if(!(vote_system in supported))
|
||||||
|
stat("<STATPANEL VOTING DISABLED>", "The current vote system is not supported by statpanel rendering. Please vote manually by opening the vote popup using the action button or chat link.")
|
||||||
|
return
|
||||||
|
stat("Time Left:", "[round(end_time - world.time)] seconds")
|
||||||
|
stat(null, null)
|
||||||
|
stat("Choices:", null)
|
||||||
|
stat(null, null)
|
||||||
|
for(var/i in 1 to choice_statclicks.len)
|
||||||
|
var/choice = choice_statclicks[i]
|
||||||
|
var/ivotedforthis = FALSE
|
||||||
|
switch(vote_system)
|
||||||
|
if(APPROVAL_VOTING)
|
||||||
|
ivotedforthis = voted[usr.ckey] && (i in voted[usr.ckey])
|
||||||
|
if(PLURALITY_VOTING)
|
||||||
|
ivotedforthis = voted[usr.ckey] == i
|
||||||
|
stat(ivotedforthis? "\[X\]" : "\[ \]", choice_statclicks[choice])
|
||||||
|
stat(null, null)
|
||||||
|
|
||||||
/datum/controller/subsystem/vote/proc/reset()
|
/datum/controller/subsystem/vote/proc/reset()
|
||||||
initiator = null
|
initiator = null
|
||||||
@@ -59,9 +87,26 @@ SUBSYSTEM_DEF(vote)
|
|||||||
voted.Cut()
|
voted.Cut()
|
||||||
voting.Cut()
|
voting.Cut()
|
||||||
scores.Cut()
|
scores.Cut()
|
||||||
|
cleanup_statclicks()
|
||||||
display_votes = initial(display_votes) //CIT CHANGE - obfuscated votes
|
display_votes = initial(display_votes) //CIT CHANGE - obfuscated votes
|
||||||
remove_action_buttons()
|
remove_action_buttons()
|
||||||
|
|
||||||
|
/datum/controller/subsystem/vote/proc/cleanup_statclicks()
|
||||||
|
for(var/choice in choice_statclicks)
|
||||||
|
qdel(choice_statclicks[choice])
|
||||||
|
choice_statclicks = list()
|
||||||
|
|
||||||
|
/obj/effect/statclick/vote
|
||||||
|
name = "ERROR"
|
||||||
|
var/choice
|
||||||
|
|
||||||
|
/obj/effect/statclick/vote/Click()
|
||||||
|
SSvote.submit_vote(choice)
|
||||||
|
|
||||||
|
/obj/effect/statclick/vote/New(loc, choice, name)
|
||||||
|
src.choice = choice
|
||||||
|
src.name = name
|
||||||
|
|
||||||
/datum/controller/subsystem/vote/proc/get_result()
|
/datum/controller/subsystem/vote/proc/get_result()
|
||||||
//get the highest number of votes
|
//get the highest number of votes
|
||||||
var/greatest_votes = 0
|
var/greatest_votes = 0
|
||||||
@@ -536,6 +581,12 @@ SUBSYSTEM_DEF(vote)
|
|||||||
vp = CONFIG_GET(number/vote_period)
|
vp = CONFIG_GET(number/vote_period)
|
||||||
to_chat(world, "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=[REF(src)]'>here</a> to place your votes.\nYou have [DisplayTimeText(vp)] to vote.</font>")
|
to_chat(world, "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=[REF(src)]'>here</a> to place your votes.\nYou have [DisplayTimeText(vp)] to vote.</font>")
|
||||||
end_time = started_time+vp
|
end_time = started_time+vp
|
||||||
|
// generate statclick list
|
||||||
|
cleanup_statclicks()
|
||||||
|
for(var/i in 1 to choices.len)
|
||||||
|
var/choice = choices[i]
|
||||||
|
choice_statclicks[choice] = new /obj/effect/statclick/vote(null, i, choice)
|
||||||
|
//
|
||||||
for(var/c in GLOB.clients)
|
for(var/c in GLOB.clients)
|
||||||
SEND_SOUND(c, sound('sound/misc/server-ready.ogg'))
|
SEND_SOUND(c, sound('sound/misc/server-ready.ogg'))
|
||||||
var/client/C = c
|
var/client/C = c
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
QDEL_IN(src, 300)
|
QDEL_IN(src, 300)
|
||||||
|
|
||||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||||
/obj/effect/hallucination/simple/bluespace_stream/attack_hand(mob/user)
|
/obj/effect/hallucination/simple/bluespace_stream/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
if(user != seer || !linked_to)
|
if(user != seer || !linked_to)
|
||||||
return
|
return
|
||||||
var/slip_in_message = pick("slides sideways in an odd way, and disappears", "jumps into an unseen dimension",\
|
var/slip_in_message = pick("slides sideways in an odd way, and disappears", "jumps into an unseen dimension",\
|
||||||
|
|||||||
@@ -0,0 +1,463 @@
|
|||||||
|
/datum/component/personal_crafting/Initialize()
|
||||||
|
if(ismob(parent))
|
||||||
|
RegisterSignal(parent, COMSIG_MOB_CLIENT_LOGIN, .proc/create_mob_button)
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/create_mob_button(mob/user, client/CL)
|
||||||
|
var/datum/hud/H = user.hud_used
|
||||||
|
var/obj/screen/craft/C = new()
|
||||||
|
C.icon = H.ui_style
|
||||||
|
H.static_inventory += C
|
||||||
|
CL.screen += C
|
||||||
|
RegisterSignal(C, COMSIG_CLICK, .proc/component_ui_interact)
|
||||||
|
|
||||||
|
/datum/component/personal_crafting
|
||||||
|
var/busy
|
||||||
|
var/viewing_category = 1 //typical powergamer starting on the Weapons tab
|
||||||
|
var/viewing_subcategory = 1
|
||||||
|
var/list/categories = list(
|
||||||
|
CAT_WEAPONRY = list(
|
||||||
|
CAT_WEAPON,
|
||||||
|
CAT_AMMO,
|
||||||
|
),
|
||||||
|
CAT_ROBOT = CAT_NONE,
|
||||||
|
CAT_MISC = list(
|
||||||
|
CAT_MISCELLANEOUS,
|
||||||
|
CAT_TOOL,
|
||||||
|
CAT_FURNITURE,
|
||||||
|
),
|
||||||
|
CAT_PRIMAL = CAT_NONE,
|
||||||
|
CAT_FOOD = list(
|
||||||
|
CAT_BREAD,
|
||||||
|
CAT_BURGER,
|
||||||
|
CAT_CAKE,
|
||||||
|
CAT_DONUT,
|
||||||
|
CAT_EGG,
|
||||||
|
CAT_ICE,
|
||||||
|
CAT_MEAT,
|
||||||
|
CAT_MEXICAN,
|
||||||
|
CAT_MISCFOOD,
|
||||||
|
CAT_PASTRY,
|
||||||
|
CAT_PIE,
|
||||||
|
CAT_PIZZA,
|
||||||
|
CAT_SEAFOOD,
|
||||||
|
CAT_SALAD,
|
||||||
|
CAT_SANDWICH,
|
||||||
|
CAT_SOUP,
|
||||||
|
CAT_SPAGHETTI,
|
||||||
|
),
|
||||||
|
CAT_DRINK = CAT_NONE,
|
||||||
|
CAT_CLOTHING = CAT_NONE,
|
||||||
|
)
|
||||||
|
|
||||||
|
var/cur_category = CAT_NONE
|
||||||
|
var/cur_subcategory = CAT_NONE
|
||||||
|
var/datum/action/innate/crafting/button
|
||||||
|
var/display_craftable_only = FALSE
|
||||||
|
var/display_compact = TRUE
|
||||||
|
|
||||||
|
/* This is what procs do:
|
||||||
|
get_environment - gets a list of things accessable for crafting by user
|
||||||
|
get_surroundings - takes a list of things and makes a list of key-types to values-amounts of said type in the list
|
||||||
|
check_contents - takes a recipe and a key-type list and checks if said recipe can be done with available stuff
|
||||||
|
check_tools - takes recipe, a key-type list, and a user and checks if there are enough tools to do the stuff, checks bugs one level deep
|
||||||
|
construct_item - takes a recipe and a user, call all the checking procs, calls do_after, checks all the things again, calls del_reqs, creates result, calls CheckParts of said result with argument being list returned by deel_reqs
|
||||||
|
del_reqs - takes recipe and a user, loops over the recipes reqs var and tries to find everything in the list make by get_environment and delete it/add to parts list, then returns the said list
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that the contents of the recipe meet the requirements.
|
||||||
|
*
|
||||||
|
* user: The /mob that initated the crafting.
|
||||||
|
* R: The /datum/crafting_recipe being attempted.
|
||||||
|
* contents: List of items to search for R's reqs.
|
||||||
|
*/
|
||||||
|
/datum/component/personal_crafting/proc/check_contents(atom/a, datum/crafting_recipe/R, list/contents)
|
||||||
|
var/list/item_instances = contents["instances"]
|
||||||
|
contents = contents["other"]
|
||||||
|
|
||||||
|
var/list/requirements_list = list()
|
||||||
|
|
||||||
|
// Process all requirements
|
||||||
|
for(var/requirement_path in R.reqs)
|
||||||
|
// Check we have the appropriate amount available in the contents list
|
||||||
|
var/needed_amount = R.reqs[requirement_path]
|
||||||
|
for(var/content_item_path in contents)
|
||||||
|
// Right path and not blacklisted
|
||||||
|
if(!ispath(content_item_path, requirement_path) || R.blacklist.Find(content_item_path))
|
||||||
|
continue
|
||||||
|
|
||||||
|
needed_amount -= contents[content_item_path]
|
||||||
|
if(needed_amount <= 0)
|
||||||
|
break
|
||||||
|
|
||||||
|
if(needed_amount > 0)
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
// Store the instances of what we will use for R.check_requirements() for requirement_path
|
||||||
|
var/list/instances_list = list()
|
||||||
|
for(var/instance_path in item_instances)
|
||||||
|
if(ispath(instance_path, requirement_path))
|
||||||
|
instances_list += item_instances[instance_path]
|
||||||
|
|
||||||
|
requirements_list[requirement_path] = instances_list
|
||||||
|
|
||||||
|
for(var/requirement_path in R.chem_catalysts)
|
||||||
|
if(contents[requirement_path] < R.chem_catalysts[requirement_path])
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
return R.check_requirements(a, requirements_list)
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/get_environment(atom/a, list/blacklist = null, radius_range = 1)
|
||||||
|
. = list()
|
||||||
|
|
||||||
|
if(!isturf(a.loc))
|
||||||
|
return
|
||||||
|
|
||||||
|
for(var/atom/movable/AM in range(radius_range, a))
|
||||||
|
if(AM.flags_1 & HOLOGRAM_1)
|
||||||
|
continue
|
||||||
|
. += AM
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/get_surroundings(atom/a)
|
||||||
|
. = list()
|
||||||
|
.["tool_behaviour"] = list()
|
||||||
|
.["other"] = list()
|
||||||
|
.["instances"] = list()
|
||||||
|
for(var/obj/item/I in get_environment(a))
|
||||||
|
if(I.flags_1 & HOLOGRAM_1)
|
||||||
|
continue
|
||||||
|
if(.["instances"][I.type])
|
||||||
|
.["instances"][I.type] += I
|
||||||
|
else
|
||||||
|
.["instances"][I.type] = list(I)
|
||||||
|
if(istype(I, /obj/item/stack))
|
||||||
|
var/obj/item/stack/S = I
|
||||||
|
.["other"][I.type] += S.amount
|
||||||
|
else if(I.tool_behaviour)
|
||||||
|
.["tool_behaviour"] += I.tool_behaviour
|
||||||
|
.["other"][I.type] += 1
|
||||||
|
else
|
||||||
|
if(istype(I, /obj/item/reagent_containers))
|
||||||
|
var/obj/item/reagent_containers/RC = I
|
||||||
|
if(RC.is_drainable())
|
||||||
|
for(var/datum/reagent/A in RC.reagents.reagent_list)
|
||||||
|
.["other"][A.type] += A.volume
|
||||||
|
.["other"][I.type] += 1
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/check_tools(atom/a, datum/crafting_recipe/R, list/contents)
|
||||||
|
if(!R.tools.len)
|
||||||
|
return TRUE
|
||||||
|
var/list/possible_tools = list()
|
||||||
|
var/list/present_qualities = list()
|
||||||
|
present_qualities |= contents["tool_behaviour"]
|
||||||
|
for(var/obj/item/I in a.contents)
|
||||||
|
if(istype(I, /obj/item/storage))
|
||||||
|
for(var/obj/item/SI in I.contents)
|
||||||
|
possible_tools += SI.type
|
||||||
|
if(SI.tool_behaviour)
|
||||||
|
present_qualities.Add(SI.tool_behaviour)
|
||||||
|
|
||||||
|
possible_tools += I.type
|
||||||
|
|
||||||
|
if(I.tool_behaviour)
|
||||||
|
present_qualities.Add(I.tool_behaviour)
|
||||||
|
|
||||||
|
possible_tools |= contents["other"]
|
||||||
|
|
||||||
|
main_loop:
|
||||||
|
for(var/A in R.tools)
|
||||||
|
if(A in present_qualities)
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
for(var/I in possible_tools)
|
||||||
|
if(ispath(I, A))
|
||||||
|
continue main_loop
|
||||||
|
return FALSE
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/construct_item(atom/a, datum/crafting_recipe/R)
|
||||||
|
var/list/contents = get_surroundings(a)
|
||||||
|
var/send_feedback = 1
|
||||||
|
if(check_contents(a, R, contents))
|
||||||
|
if(check_tools(a, R, contents))
|
||||||
|
//If we're a mob we'll try a do_after; non mobs will instead instantly construct the item
|
||||||
|
if(ismob(a) && !do_after(a, R.time, target = a))
|
||||||
|
return "."
|
||||||
|
contents = get_surroundings(a)
|
||||||
|
if(!check_contents(a, R, contents))
|
||||||
|
return ", missing component."
|
||||||
|
if(!check_tools(a, R, contents))
|
||||||
|
return ", missing tool."
|
||||||
|
var/list/parts = del_reqs(R, a)
|
||||||
|
var/atom/movable/I = new R.result (get_turf(a.loc))
|
||||||
|
I.CheckParts(parts, R)
|
||||||
|
if(send_feedback)
|
||||||
|
SSblackbox.record_feedback("tally", "object_crafted", 1, I.type)
|
||||||
|
return I //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item
|
||||||
|
return ", missing tool."
|
||||||
|
return ", missing component."
|
||||||
|
|
||||||
|
/*Del reqs works like this:
|
||||||
|
|
||||||
|
Loop over reqs var of the recipe
|
||||||
|
Set var amt to the value current cycle req is pointing to, its amount of type we need to delete
|
||||||
|
Get var/surroundings list of things accessable to crafting by get_environment()
|
||||||
|
Check the type of the current cycle req
|
||||||
|
If its reagent then do a while loop, inside it try to locate() reagent containers, inside such containers try to locate needed reagent, if there isnt remove thing from surroundings
|
||||||
|
If there is enough reagent in the search result then delete the needed amount, create the same type of reagent with the same data var and put it into deletion list
|
||||||
|
If there isnt enough take all of that reagent from the container, put into deletion list, substract the amt var by the volume of reagent, remove the container from surroundings list and keep searching
|
||||||
|
While doing above stuff check deletion list if it already has such reagnet, if yes merge instead of adding second one
|
||||||
|
If its stack check if it has enough amount
|
||||||
|
If yes create new stack with the needed amount and put in into deletion list, substract taken amount from the stack
|
||||||
|
If no put all of the stack in the deletion list, substract its amount from amt and keep searching
|
||||||
|
While doing above stuff check deletion list if it already has such stack type, if yes try to merge them instead of adding new one
|
||||||
|
If its anything else just locate() in in the list in a while loop, each find --s the amt var and puts the found stuff in deletion loop
|
||||||
|
|
||||||
|
Then do a loop over parts var of the recipe
|
||||||
|
Do similar stuff to what we have done above, but now in deletion list, until the parts conditions are satisfied keep taking from the deletion list and putting it into parts list for return
|
||||||
|
|
||||||
|
After its done loop over deletion list and delete all the shit that wasnt taken by parts loop
|
||||||
|
|
||||||
|
del_reqs return the list of parts resulting object will receive as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, atom/a)
|
||||||
|
var/list/surroundings
|
||||||
|
var/list/Deletion = list()
|
||||||
|
. = list()
|
||||||
|
var/data
|
||||||
|
var/amt
|
||||||
|
main_loop:
|
||||||
|
for(var/A in R.reqs)
|
||||||
|
amt = R.reqs[A]
|
||||||
|
surroundings = get_environment(a, R.blacklist)
|
||||||
|
surroundings -= Deletion
|
||||||
|
if(ispath(A, /datum/reagent))
|
||||||
|
var/datum/reagent/RG = new A
|
||||||
|
var/datum/reagent/RGNT
|
||||||
|
while(amt > 0)
|
||||||
|
var/obj/item/reagent_containers/RC = locate() in surroundings
|
||||||
|
RG = RC.reagents.get_reagent(A)
|
||||||
|
if(RG)
|
||||||
|
if(!locate(RG.type) in Deletion)
|
||||||
|
Deletion += new RG.type()
|
||||||
|
if(RG.volume > amt)
|
||||||
|
RG.volume -= amt
|
||||||
|
data = RG.data
|
||||||
|
RC.reagents.conditional_update(RC)
|
||||||
|
RG = locate(RG.type) in Deletion
|
||||||
|
RG.volume = amt
|
||||||
|
RG.data += data
|
||||||
|
continue main_loop
|
||||||
|
else
|
||||||
|
surroundings -= RC
|
||||||
|
amt -= RG.volume
|
||||||
|
RC.reagents.reagent_list -= RG
|
||||||
|
RC.reagents.conditional_update(RC)
|
||||||
|
RGNT = locate(RG.type) in Deletion
|
||||||
|
RGNT.volume += RG.volume
|
||||||
|
RGNT.data += RG.data
|
||||||
|
qdel(RG)
|
||||||
|
RC.on_reagent_change()
|
||||||
|
else
|
||||||
|
surroundings -= RC
|
||||||
|
else if(ispath(A, /obj/item/stack))
|
||||||
|
var/obj/item/stack/S
|
||||||
|
var/obj/item/stack/SD
|
||||||
|
while(amt > 0)
|
||||||
|
S = locate(A) in surroundings
|
||||||
|
if(S.amount >= amt)
|
||||||
|
if(!locate(S.type) in Deletion)
|
||||||
|
SD = new S.type()
|
||||||
|
Deletion += SD
|
||||||
|
S.use(amt)
|
||||||
|
SD = locate(S.type) in Deletion
|
||||||
|
SD.amount += amt
|
||||||
|
continue main_loop
|
||||||
|
else
|
||||||
|
amt -= S.amount
|
||||||
|
if(!locate(S.type) in Deletion)
|
||||||
|
Deletion += S
|
||||||
|
else
|
||||||
|
data = S.amount
|
||||||
|
S = locate(S.type) in Deletion
|
||||||
|
S.add(data)
|
||||||
|
surroundings -= S
|
||||||
|
else
|
||||||
|
var/atom/movable/I
|
||||||
|
while(amt > 0)
|
||||||
|
I = locate(A) in surroundings
|
||||||
|
Deletion += I
|
||||||
|
surroundings -= I
|
||||||
|
amt--
|
||||||
|
var/list/partlist = list(R.parts.len)
|
||||||
|
for(var/M in R.parts)
|
||||||
|
partlist[M] = R.parts[M]
|
||||||
|
for(var/A in R.parts)
|
||||||
|
if(istype(A, /datum/reagent))
|
||||||
|
var/datum/reagent/RG = locate(A) in Deletion
|
||||||
|
if(RG.volume > partlist[A])
|
||||||
|
RG.volume = partlist[A]
|
||||||
|
. += RG
|
||||||
|
Deletion -= RG
|
||||||
|
continue
|
||||||
|
else if(istype(A, /obj/item/stack))
|
||||||
|
var/obj/item/stack/ST = locate(A) in Deletion
|
||||||
|
if(ST.amount > partlist[A])
|
||||||
|
ST.amount = partlist[A]
|
||||||
|
. += ST
|
||||||
|
Deletion -= ST
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
while(partlist[A] > 0)
|
||||||
|
var/atom/movable/AM = locate(A) in Deletion
|
||||||
|
. += AM
|
||||||
|
Deletion -= AM
|
||||||
|
partlist[A] -= 1
|
||||||
|
while(Deletion.len)
|
||||||
|
var/DL = Deletion[Deletion.len]
|
||||||
|
Deletion.Cut(Deletion.len)
|
||||||
|
qdel(DL)
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/component_ui_interact(obj/screen/craft/image, location, control, params, user)
|
||||||
|
if(user == parent)
|
||||||
|
ui_interact(user)
|
||||||
|
|
||||||
|
//For the UI related things we're going to assume the user is a mob rather than typesetting it to an atom as the UI isn't generated if the parent is an atom
|
||||||
|
/datum/component/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state)
|
||||||
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
|
if(!ui)
|
||||||
|
cur_category = categories[1]
|
||||||
|
if(islist(categories[cur_category]))
|
||||||
|
var/list/subcats = categories[cur_category]
|
||||||
|
cur_subcategory = subcats[1]
|
||||||
|
else
|
||||||
|
cur_subcategory = CAT_NONE
|
||||||
|
ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state)
|
||||||
|
ui.open()
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/ui_data(mob/user)
|
||||||
|
var/list/data = list()
|
||||||
|
data["busy"] = busy
|
||||||
|
data["category"] = cur_category
|
||||||
|
data["subcategory"] = cur_subcategory
|
||||||
|
data["display_craftable_only"] = display_craftable_only
|
||||||
|
data["display_compact"] = display_compact
|
||||||
|
|
||||||
|
var/list/surroundings = get_surroundings(user)
|
||||||
|
var/list/craftability = list()
|
||||||
|
for(var/rec in GLOB.crafting_recipes)
|
||||||
|
var/datum/crafting_recipe/R = rec
|
||||||
|
|
||||||
|
if(!R.always_availible && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this.
|
||||||
|
continue
|
||||||
|
|
||||||
|
if((R.category != cur_category) || (R.subcategory != cur_subcategory))
|
||||||
|
continue
|
||||||
|
|
||||||
|
craftability["[REF(R)]"] = check_contents(user, R, surroundings)
|
||||||
|
|
||||||
|
data["craftability"] = craftability
|
||||||
|
return data
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/ui_static_data(mob/user)
|
||||||
|
var/list/data = list()
|
||||||
|
|
||||||
|
var/list/crafting_recipes = list()
|
||||||
|
for(var/rec in GLOB.crafting_recipes)
|
||||||
|
var/datum/crafting_recipe/R = rec
|
||||||
|
|
||||||
|
if(R.name == "") //This is one of the invalid parents that sneaks in
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(!R.always_availible && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this.
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(isnull(crafting_recipes[R.category]))
|
||||||
|
crafting_recipes[R.category] = list()
|
||||||
|
|
||||||
|
if(R.subcategory == CAT_NONE)
|
||||||
|
crafting_recipes[R.category] += list(build_recipe_data(R))
|
||||||
|
else
|
||||||
|
if(isnull(crafting_recipes[R.category][R.subcategory]))
|
||||||
|
crafting_recipes[R.category][R.subcategory] = list()
|
||||||
|
crafting_recipes[R.category]["has_subcats"] = TRUE
|
||||||
|
crafting_recipes[R.category][R.subcategory] += list(build_recipe_data(R))
|
||||||
|
|
||||||
|
data["crafting_recipes"] = crafting_recipes
|
||||||
|
return data
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/ui_act(action, params)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
switch(action)
|
||||||
|
if("make")
|
||||||
|
var/mob/user = usr
|
||||||
|
var/datum/crafting_recipe/TR = locate(params["recipe"]) in GLOB.crafting_recipes
|
||||||
|
busy = TRUE
|
||||||
|
ui_interact(user)
|
||||||
|
var/atom/movable/result = construct_item(user, TR)
|
||||||
|
if(!istext(result)) //We made an item and didn't get a fail message
|
||||||
|
if(ismob(user) && isitem(result)) //In case the user is actually possessing a non mob like a machine
|
||||||
|
user.put_in_hands(result)
|
||||||
|
else
|
||||||
|
result.forceMove(user.drop_location())
|
||||||
|
to_chat(user, "<span class='notice'>[TR.name] constructed.</span>")
|
||||||
|
else
|
||||||
|
to_chat(user, "<span class='warning'>Construction failed[result]</span>")
|
||||||
|
busy = FALSE
|
||||||
|
if("toggle_recipes")
|
||||||
|
display_craftable_only = !display_craftable_only
|
||||||
|
. = TRUE
|
||||||
|
if("toggle_compact")
|
||||||
|
display_compact = !display_compact
|
||||||
|
. = TRUE
|
||||||
|
if("set_category")
|
||||||
|
if(!isnull(params["category"]))
|
||||||
|
cur_category = params["category"]
|
||||||
|
if(!isnull(params["subcategory"]))
|
||||||
|
if(params["subcategory"] == "0")
|
||||||
|
cur_subcategory = ""
|
||||||
|
else
|
||||||
|
cur_subcategory = params["subcategory"]
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
|
/datum/component/personal_crafting/proc/build_recipe_data(datum/crafting_recipe/R)
|
||||||
|
var/list/data = list()
|
||||||
|
data["name"] = R.name
|
||||||
|
data["ref"] = "[REF(R)]"
|
||||||
|
var/req_text = ""
|
||||||
|
var/tool_text = ""
|
||||||
|
var/catalyst_text = ""
|
||||||
|
|
||||||
|
for(var/a in R.reqs)
|
||||||
|
//We just need the name, so cheat-typecast to /atom for speed (even tho Reagents are /datum they DO have a "name" var)
|
||||||
|
//Also these are typepaths so sadly we can't just do "[a]"
|
||||||
|
var/atom/A = a
|
||||||
|
req_text += " [R.reqs[A]] [initial(A.name)],"
|
||||||
|
req_text = replacetext(req_text,",","",-1)
|
||||||
|
data["req_text"] = req_text
|
||||||
|
|
||||||
|
for(var/a in R.chem_catalysts)
|
||||||
|
var/atom/A = a //cheat-typecast
|
||||||
|
catalyst_text += " [R.chem_catalysts[A]] [initial(A.name)],"
|
||||||
|
catalyst_text = replacetext(catalyst_text,",","",-1)
|
||||||
|
data["catalyst_text"] = catalyst_text
|
||||||
|
|
||||||
|
for(var/a in R.tools)
|
||||||
|
if(ispath(a, /obj/item))
|
||||||
|
var/obj/item/b = a
|
||||||
|
tool_text += " [initial(b.name)],"
|
||||||
|
else
|
||||||
|
tool_text += " [a],"
|
||||||
|
tool_text = replacetext(tool_text,",","",-1)
|
||||||
|
data["tool_text"] = tool_text
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
//Mind helpers
|
||||||
|
|
||||||
|
/datum/mind/proc/teach_crafting_recipe(R)
|
||||||
|
if(!learned_recipes)
|
||||||
|
learned_recipes = list()
|
||||||
|
learned_recipes |= R
|
||||||
@@ -51,7 +51,8 @@ Behavior that's still missing from this component that original food items had t
|
|||||||
|
|
||||||
var/atom/owner = parent
|
var/atom/owner = parent
|
||||||
|
|
||||||
owner.create_reagents(volume, INJECTABLE)
|
if(!owner.reagents) //we don't want to override what's in the item if it possibly contains reagents already
|
||||||
|
owner.create_reagents(volume, INJECTABLE)
|
||||||
|
|
||||||
if(initial_reagents)
|
if(initial_reagents)
|
||||||
for(var/rid in initial_reagents)
|
for(var/rid in initial_reagents)
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
/*!
|
||||||
|
This component essentially encapsulates frying and utilizes the edible component
|
||||||
|
This means fried items can work like regular ones, and generally the code is far less messy
|
||||||
|
*/
|
||||||
|
/datum/component/fried
|
||||||
|
var/fry_power //how powerfully was this item fried
|
||||||
|
var/atom/owner //the atom it is owned by
|
||||||
|
var/stored_name //name of the owner when the component was first added
|
||||||
|
var/frying_examine_text = "the coders messed frying code up, report this!"
|
||||||
|
|
||||||
|
/datum/component/fried/Initialize(frying_power)
|
||||||
|
if(!isatom(parent))
|
||||||
|
return COMPONENT_INCOMPATIBLE
|
||||||
|
|
||||||
|
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
|
||||||
|
RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/restore) //basically, unfry people who are being cleaned (badmemes fried someone)
|
||||||
|
|
||||||
|
fry_power = frying_power
|
||||||
|
owner = parent
|
||||||
|
stored_name = owner.name
|
||||||
|
|
||||||
|
setup_fried_item()
|
||||||
|
|
||||||
|
//some stuff to do with the contents of fried junk
|
||||||
|
GLOBAL_VAR_INIT(frying_hardmode, TRUE)
|
||||||
|
GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE)
|
||||||
|
GLOBAL_LIST_INIT(frying_bad_chems, list(
|
||||||
|
/datum/reagent/toxin/bad_food = 1,
|
||||||
|
/datum/reagent/toxin = 1,
|
||||||
|
/datum/reagent/lithium = 1,
|
||||||
|
/datum/reagent/mercury = 1,
|
||||||
|
))
|
||||||
|
|
||||||
|
/datum/component/fried/proc/examine(datum/source, mob/user, list/examine_list)
|
||||||
|
examine_list += "[parent] has been [frying_examine_text]"
|
||||||
|
|
||||||
|
/datum/component/fried/proc/setup_fried_item() //sets the name, colour and examine text and edibility up
|
||||||
|
//first we do some checks depending on the type of item being fried
|
||||||
|
var/list/fried_tastes = list("crispy")
|
||||||
|
var/fried_foodtypes = FRIED
|
||||||
|
var/fried_junk = FALSE
|
||||||
|
|
||||||
|
if(!isfood(owner) && GLOB.frying_hardmode && GLOB.frying_bad_chems.len && !owner.reagents) //you fried some junk, it's not gonna taste great
|
||||||
|
fried_junk = TRUE
|
||||||
|
fried_foodtypes |= TOXIC // junk tastes toxic too
|
||||||
|
else
|
||||||
|
if(isfood(owner))
|
||||||
|
var/obj/item/reagent_containers/food/snacks/food_item = owner
|
||||||
|
fried_tastes += food_item.tastes
|
||||||
|
fried_foodtypes |= food_item.foodtype
|
||||||
|
|
||||||
|
var/fried_eat_time = 0
|
||||||
|
if(isturf(owner))
|
||||||
|
fried_eat_time = 30 //we want turfs to be eaten slowly
|
||||||
|
|
||||||
|
var/colour_priority = FIXED_COLOUR_PRIORITY
|
||||||
|
if(ismob(owner))
|
||||||
|
colour_priority = WASHABLE_COLOUR_PRIORITY //badmins fried someone and we want to let them wash the fry colour off
|
||||||
|
//lets heavily hint at how to undo their frying
|
||||||
|
to_chat(owner, "<span class='warning'>You've been coated in hot cooking oil! You should probably go wash it off at the showers.</span>")
|
||||||
|
else
|
||||||
|
owner.AddComponent(/datum/component/edible, foodtypes = fried_tastes, tastes = fried_tastes, eat_time = fried_eat_time) //we don't want mobs to get the edible component
|
||||||
|
|
||||||
|
switch(fry_power)
|
||||||
|
if(0 to 15)
|
||||||
|
owner.name = "lightly fried [owner.name]"
|
||||||
|
owner.add_atom_colour(rgb(166,103,54), colour_priority)
|
||||||
|
frying_examine_text = "lightly fried"
|
||||||
|
if(16 to 49)
|
||||||
|
owner.name = "fried [owner.name]"
|
||||||
|
owner.add_atom_colour(rgb(103,63,24), colour_priority)
|
||||||
|
frying_examine_text = "moderately fried"
|
||||||
|
if(50 to 59)
|
||||||
|
owner.name = "deep fried [owner.name]"
|
||||||
|
owner.add_atom_colour(rgb(63,23,4), colour_priority)
|
||||||
|
frying_examine_text = "deeply fried"
|
||||||
|
else
|
||||||
|
owner.name = "the physical manifestation of fried foods"
|
||||||
|
owner.add_atom_colour(rgb(33,19,9), colour_priority)
|
||||||
|
frying_examine_text = "incomprehensibly fried to a crisp"
|
||||||
|
|
||||||
|
//adding the edible component gives it reagents meaning we can now add the bad frying reagents if it's junk
|
||||||
|
if(fried_junk && owner.reagents) //check again just incase
|
||||||
|
var/R = rand(1, GLOB.frying_bad_chems.len)
|
||||||
|
var/bad_chem = GLOB.frying_bad_chems[R]
|
||||||
|
var/bad_chem_amount = max(4,GLOB.frying_bad_chems[bad_chem] * (fry_power/12.5)) //4u of bad chem reached when deeply fried
|
||||||
|
owner.reagents.add_reagent(bad_chem, bad_chem_amount)
|
||||||
|
|
||||||
|
/datum/component/fried/proc/restore_name() //restore somethings name
|
||||||
|
//we do string manipulation and not restoring their name to real_name because some things hide your real_name and we want to maintain that
|
||||||
|
if(copytext(owner.name,1,14) == "lightly fried ")
|
||||||
|
owner.name = copytext(owner.name,15)
|
||||||
|
else
|
||||||
|
if(copytext(owner.name,1,6) == "fried ")
|
||||||
|
owner.name = copytext(owner.name,7)
|
||||||
|
else
|
||||||
|
if(copytext(owner.name,1,11) == "deep fried ")
|
||||||
|
owner.name = copytext(owner.name, 12)
|
||||||
|
else
|
||||||
|
if(owner.name == "the physical manifestation of fried foods") //if the name is still this, their name hasn't changed, so we can safely restore their stored name
|
||||||
|
owner.name = stored_name
|
||||||
|
|
||||||
|
/datum/component/fried/proc/restore() //restore a fried mob to being not-fried
|
||||||
|
if(ismob(owner))
|
||||||
|
//restore the name, the colour should wash off itself, and then remove the component
|
||||||
|
restore_name()
|
||||||
|
RemoveComponent()
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
///Global GPS_list. All GPS components get saved in here for easy reference.
|
||||||
|
GLOBAL_LIST_EMPTY(GPS_list)
|
||||||
|
///GPS component. Atoms that have this show up on gps. Pretty simple stuff.
|
||||||
|
/datum/component/gps
|
||||||
|
var/gpstag = "COM0"
|
||||||
|
var/tracking = TRUE
|
||||||
|
var/emped = FALSE
|
||||||
|
|
||||||
|
/datum/component/gps/Initialize(_gpstag = "COM0")
|
||||||
|
if(!isatom(parent))
|
||||||
|
return COMPONENT_INCOMPATIBLE
|
||||||
|
gpstag = _gpstag
|
||||||
|
GLOB.GPS_list += src
|
||||||
|
|
||||||
|
/datum/component/gps/Destroy()
|
||||||
|
GLOB.GPS_list -= src
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
///GPS component subtype. Only gps/item's can be used to open the UI.
|
||||||
|
/datum/component/gps/item
|
||||||
|
var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user.
|
||||||
|
var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown
|
||||||
|
|
||||||
|
/datum/component/gps/item/Initialize(_gpstag = "COM0", emp_proof = FALSE)
|
||||||
|
. = ..()
|
||||||
|
if(. == COMPONENT_INCOMPATIBLE || !isitem(parent))
|
||||||
|
return COMPONENT_INCOMPATIBLE
|
||||||
|
var/atom/A = parent
|
||||||
|
A.add_overlay("working")
|
||||||
|
A.name = "[initial(A.name)] ([gpstag])"
|
||||||
|
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact)
|
||||||
|
if(!emp_proof)
|
||||||
|
RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp_act)
|
||||||
|
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine)
|
||||||
|
RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/on_AltClick)
|
||||||
|
|
||||||
|
///Called on COMSIG_ITEM_ATTACK_SELF
|
||||||
|
/datum/component/gps/item/proc/interact(datum/source, mob/user)
|
||||||
|
if(user)
|
||||||
|
ui_interact(user)
|
||||||
|
|
||||||
|
///Called on COMSIG_PARENT_EXAMINE
|
||||||
|
/datum/component/gps/item/proc/on_examine(datum/source, mob/user, list/examine_list)
|
||||||
|
examine_list += "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>"
|
||||||
|
|
||||||
|
///Called on COMSIG_ATOM_EMP_ACT
|
||||||
|
/datum/component/gps/item/proc/on_emp_act(datum/source, severity)
|
||||||
|
emped = TRUE
|
||||||
|
var/atom/A = parent
|
||||||
|
A.cut_overlay("working")
|
||||||
|
A.add_overlay("emp")
|
||||||
|
addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_UNIQUE|TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early
|
||||||
|
SStgui.close_uis(src) //Close the UI control if it is open.
|
||||||
|
|
||||||
|
///Restarts the GPS after getting turned off by an EMP.
|
||||||
|
/datum/component/gps/item/proc/reboot()
|
||||||
|
emped = FALSE
|
||||||
|
var/atom/A = parent
|
||||||
|
A.cut_overlay("emp")
|
||||||
|
A.add_overlay("working")
|
||||||
|
|
||||||
|
///Calls toggletracking
|
||||||
|
/datum/component/gps/item/proc/on_AltClick(datum/source, mob/user)
|
||||||
|
toggletracking(user)
|
||||||
|
|
||||||
|
///Toggles the tracking for the gps
|
||||||
|
/datum/component/gps/item/proc/toggletracking(mob/user)
|
||||||
|
if(!user.canUseTopic(parent, BE_CLOSE))
|
||||||
|
return //user not valid to use gps
|
||||||
|
if(emped)
|
||||||
|
to_chat(user, "<span class='warning'>It's busted!</span>")
|
||||||
|
return
|
||||||
|
var/atom/A = parent
|
||||||
|
if(tracking)
|
||||||
|
A.cut_overlay("working")
|
||||||
|
to_chat(user, "<span class='notice'>[parent] is no longer tracking, or visible to other GPS devices.</span>")
|
||||||
|
tracking = FALSE
|
||||||
|
else
|
||||||
|
A.add_overlay("working")
|
||||||
|
to_chat(user, "<span class='notice'>[parent] is now tracking, and visible to other GPS devices.</span>")
|
||||||
|
tracking = TRUE
|
||||||
|
|
||||||
|
/datum/component/gps/item/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
|
||||||
|
if(emped)
|
||||||
|
to_chat(user, "<span class='hear'>[parent] fizzles weakly.</span>")
|
||||||
|
return
|
||||||
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
|
if(!ui)
|
||||||
|
// Variable window height, depending on how many GPS units there are
|
||||||
|
// to show, clamped to relatively safe range.
|
||||||
|
var/gps_window_height = clamp(325 + GLOB.GPS_list.len * 14, 325, 700)
|
||||||
|
ui = new(user, src, ui_key, "Gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
|
||||||
|
ui.open()
|
||||||
|
|
||||||
|
ui.set_autoupdate(state = updating)
|
||||||
|
|
||||||
|
/datum/component/gps/item/ui_data(mob/user)
|
||||||
|
var/list/data = list()
|
||||||
|
data["power"] = tracking
|
||||||
|
data["tag"] = gpstag
|
||||||
|
data["updating"] = updating
|
||||||
|
data["globalmode"] = global_mode
|
||||||
|
if(!tracking || emped) //Do not bother scanning if the GPS is off or EMPed
|
||||||
|
return data
|
||||||
|
|
||||||
|
var/turf/curr = get_turf(parent)
|
||||||
|
data["currentArea"] = "[get_area_name(curr, TRUE)]"
|
||||||
|
data["currentCoords"] = "[curr.x], [curr.y], [curr.z]"
|
||||||
|
|
||||||
|
var/list/signals = list()
|
||||||
|
data["signals"] = list()
|
||||||
|
|
||||||
|
for(var/gps in GLOB.GPS_list)
|
||||||
|
var/datum/component/gps/G = gps
|
||||||
|
if(G.emped || !G.tracking || G == src)
|
||||||
|
continue
|
||||||
|
var/turf/pos = get_turf(G.parent)
|
||||||
|
if(!pos || !global_mode && pos.z != curr.z)
|
||||||
|
continue
|
||||||
|
var/list/signal = list()
|
||||||
|
signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS
|
||||||
|
signal["coords"] = "[pos.x], [pos.y], [pos.z]"
|
||||||
|
if(pos.z == curr.z) //Distance/Direction calculations for same z-level only
|
||||||
|
signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs
|
||||||
|
signal["degrees"] = round(Get_Angle(curr, pos)) //0-360 degree directional bearing, for more precision.
|
||||||
|
signals += list(signal) //Add this signal to the list of signals
|
||||||
|
data["signals"] = signals
|
||||||
|
return data
|
||||||
|
|
||||||
|
/datum/component/gps/item/ui_act(action, params)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
switch(action)
|
||||||
|
if("rename")
|
||||||
|
var/atom/parentasatom = parent
|
||||||
|
var/a = stripped_input(usr, "Please enter desired tag.", parentasatom.name, gpstag, 20)
|
||||||
|
|
||||||
|
if (!a)
|
||||||
|
return
|
||||||
|
|
||||||
|
gpstag = a
|
||||||
|
. = TRUE
|
||||||
|
parentasatom.name = "global positioning system ([gpstag])"
|
||||||
|
|
||||||
|
if("power")
|
||||||
|
toggletracking(usr)
|
||||||
|
. = TRUE
|
||||||
|
if("updating")
|
||||||
|
updating = !updating
|
||||||
|
. = TRUE
|
||||||
|
if("globalmode")
|
||||||
|
global_mode = !global_mode
|
||||||
|
. = TRUE
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
|
|
||||||
/// Proc specifically for inserting items, returns the amount of materials entered.
|
/// Proc specifically for inserting items, returns the amount of materials entered.
|
||||||
/datum/component/material_container/proc/insert_item(obj/item/I, var/multiplier = 1, stack_amt)
|
/datum/component/material_container/proc/insert_item(obj/item/I, var/multiplier = 1, stack_amt)
|
||||||
if(!I)
|
if(QDELETED(I))
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
multiplier = CEILING(multiplier, 0.01)
|
multiplier = CEILING(multiplier, 0.01)
|
||||||
|
|||||||
@@ -24,16 +24,17 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
var/unlock_note
|
var/unlock_note
|
||||||
var/unlock_code
|
var/unlock_code
|
||||||
var/failsafe_code
|
var/failsafe_code
|
||||||
var/datum/ui_state/checkstate
|
|
||||||
var/compact_mode = FALSE
|
var/compact_mode = FALSE
|
||||||
var/debug = FALSE
|
var/debug = FALSE
|
||||||
var/saved_player_population = 0
|
var/saved_player_population = 0
|
||||||
var/list/filters = list()
|
var/list/filters = list()
|
||||||
|
|
||||||
|
|
||||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate, datum/traitor_class/traitor_class)
|
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate, datum/traitor_class/traitor_class)
|
||||||
if(!isitem(parent))
|
if(!isitem(parent))
|
||||||
return COMPONENT_INCOMPATIBLE
|
return COMPONENT_INCOMPATIBLE
|
||||||
|
|
||||||
|
|
||||||
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy)
|
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy)
|
||||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact)
|
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact)
|
||||||
if(istype(parent, /obj/item/implant))
|
if(istype(parent, /obj/item/implant))
|
||||||
@@ -65,7 +66,6 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
active = _enabled
|
active = _enabled
|
||||||
gamemode = _gamemode
|
gamemode = _gamemode
|
||||||
telecrystals = starting_tc
|
telecrystals = starting_tc
|
||||||
checkstate = _checkstate
|
|
||||||
if(!lockable)
|
if(!lockable)
|
||||||
active = TRUE
|
active = TRUE
|
||||||
locked = FALSE
|
locked = FALSE
|
||||||
@@ -136,13 +136,13 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
|
|
||||||
/datum/component/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
/datum/component/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||||
state = checkstate ? checkstate : state
|
|
||||||
active = TRUE
|
active = TRUE
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "uplink", name, 620, 580, master_ui, state)
|
ui = new(user, src, ui_key, "Uplink", name, 620, 580, master_ui, state)
|
||||||
ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input.
|
// This UI is only ever opened by one person,
|
||||||
ui.set_style("syndicate")
|
// and never is updated outside of user input.
|
||||||
|
ui.set_autoupdate(FALSE)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/datum/component/uplink/ui_host(mob/user)
|
/datum/component/uplink/ui_host(mob/user)
|
||||||
@@ -157,8 +157,7 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
var/list/data = list()
|
var/list/data = list()
|
||||||
data["telecrystals"] = telecrystals
|
data["telecrystals"] = telecrystals
|
||||||
data["lockable"] = lockable
|
data["lockable"] = lockable
|
||||||
data["compact_mode"] = compact_mode
|
data["compactMode"] = compact_mode
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/datum/component/uplink/ui_static_data(mob/user)
|
/datum/component/uplink/ui_static_data(mob/user)
|
||||||
@@ -192,21 +191,16 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
/datum/component/uplink/ui_act(action, params)
|
/datum/component/uplink/ui_act(action, params)
|
||||||
if(!active)
|
if(!active)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(action)
|
switch(action)
|
||||||
if("buy")
|
if("buy")
|
||||||
var/item = params["item"]
|
var/item_name = params["name"]
|
||||||
|
|
||||||
var/list/buyable_items = list()
|
var/list/buyable_items = list()
|
||||||
for(var/category in uplink_items)
|
for(var/category in uplink_items)
|
||||||
buyable_items += uplink_items[category]
|
buyable_items += uplink_items[category]
|
||||||
|
if(item_name in buyable_items)
|
||||||
if(item in buyable_items)
|
var/datum/uplink_item/I = buyable_items[item_name]
|
||||||
var/datum/uplink_item/I = buyable_items[item]
|
MakePurchase(usr, I)
|
||||||
//check to make sure people cannot buy items when the player pop is below the requirement
|
return TRUE
|
||||||
if(GLOB.joined_player_list.len >= I.player_minimum)
|
|
||||||
MakePurchase(usr, I)
|
|
||||||
. = TRUE
|
|
||||||
if("lock")
|
if("lock")
|
||||||
active = FALSE
|
active = FALSE
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
@@ -215,9 +209,10 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
SStgui.close_uis(src)
|
SStgui.close_uis(src)
|
||||||
if("select")
|
if("select")
|
||||||
selected_cat = params["category"]
|
selected_cat = params["category"]
|
||||||
|
return TRUE
|
||||||
if("compact_toggle")
|
if("compact_toggle")
|
||||||
compact_mode = !compact_mode
|
compact_mode = !compact_mode
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/datum/component/uplink/proc/MakePurchase(mob/user, datum/uplink_item/U)
|
/datum/component/uplink/proc/MakePurchase(mob/user, datum/uplink_item/U)
|
||||||
if(!istype(U))
|
if(!istype(U))
|
||||||
@@ -262,12 +257,12 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
var/obj/item/pda/master = parent
|
var/obj/item/pda/master = parent
|
||||||
if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code)))
|
if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code)))
|
||||||
if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code)))
|
if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code)))
|
||||||
failsafe()
|
failsafe(user)
|
||||||
return COMPONENT_STOP_RINGTONE_CHANGE
|
return COMPONENT_STOP_RINGTONE_CHANGE
|
||||||
return
|
return
|
||||||
locked = FALSE
|
locked = FALSE
|
||||||
interact(null, user)
|
interact(null, user)
|
||||||
to_chat(user, "The PDA softly beeps.")
|
to_chat(user, "<span class='hear'>The PDA softly beeps.</span>")
|
||||||
user << browse(null, "window=pda")
|
user << browse(null, "window=pda")
|
||||||
master.mode = 0
|
master.mode = 0
|
||||||
return COMPONENT_STOP_RINGTONE_CHANGE
|
return COMPONENT_STOP_RINGTONE_CHANGE
|
||||||
@@ -279,7 +274,7 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
var/frequency = arguments[1]
|
var/frequency = arguments[1]
|
||||||
if(frequency != unlock_code)
|
if(frequency != unlock_code)
|
||||||
if(frequency == failsafe_code)
|
if(frequency == failsafe_code)
|
||||||
failsafe()
|
failsafe(master.loc)
|
||||||
return
|
return
|
||||||
locked = FALSE
|
locked = FALSE
|
||||||
if(ismob(master.loc))
|
if(ismob(master.loc))
|
||||||
@@ -316,11 +311,13 @@ GLOBAL_LIST_EMPTY(uplinks)
|
|||||||
else if(istype(parent,/obj/item/pen))
|
else if(istype(parent,/obj/item/pen))
|
||||||
return rand(1, 360)
|
return rand(1, 360)
|
||||||
|
|
||||||
/datum/component/uplink/proc/failsafe()
|
/datum/component/uplink/proc/failsafe(mob/living/carbon/user)
|
||||||
if(!parent)
|
if(!parent)
|
||||||
return
|
return
|
||||||
var/turf/T = get_turf(parent)
|
var/turf/T = get_turf(parent)
|
||||||
if(!T)
|
if(!T)
|
||||||
return
|
return
|
||||||
|
message_admins("[ADMIN_LOOKUPFLW(user)] has triggered an uplink failsafe explosion at [AREACOORD(T)] The owner of the uplink was [ADMIN_LOOKUPFLW(owner)].")
|
||||||
|
log_game("[key_name(user)] triggered an uplink failsafe explosion. The owner of the uplink was [key_name(owner)].")
|
||||||
explosion(T,1,2,3)
|
explosion(T,1,2,3)
|
||||||
qdel(parent) //Alternatively could brick the uplink.
|
qdel(parent) //Alternatively could brick the uplink.
|
||||||
|
|||||||
+15
-2
@@ -15,6 +15,7 @@
|
|||||||
var/mob/living/holder
|
var/mob/living/holder
|
||||||
var/delete_species = TRUE //Set to FALSE when a body is scanned by a cloner to fix #38875
|
var/delete_species = TRUE //Set to FALSE when a body is scanned by a cloner to fix #38875
|
||||||
var/mutation_index[DNA_MUTATION_BLOCKS] //List of which mutations this carbon has and its assigned block
|
var/mutation_index[DNA_MUTATION_BLOCKS] //List of which mutations this carbon has and its assigned block
|
||||||
|
var/default_mutation_genes[DNA_MUTATION_BLOCKS] //List of the default genes from this mutation to allow DNA Scanner highlighting
|
||||||
var/stability = 100
|
var/stability = 100
|
||||||
var/scrambled = FALSE //Did we take something like mutagen? In that case we cant get our genes scanned to instantly cheese all the powers.
|
var/scrambled = FALSE //Did we take something like mutagen? In that case we cant get our genes scanned to instantly cheese all the powers.
|
||||||
var/skin_tone_override //because custom skin tones are not found in the skin_tones global list.
|
var/skin_tone_override //because custom skin tones are not found in the skin_tones global list.
|
||||||
@@ -58,6 +59,7 @@
|
|||||||
H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA
|
H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA
|
||||||
if(transfer_SE)
|
if(transfer_SE)
|
||||||
destination.dna.mutation_index = mutation_index
|
destination.dna.mutation_index = mutation_index
|
||||||
|
destination.dna.default_mutation_genes = default_mutation_genes
|
||||||
|
|
||||||
destination.dna.update_body_size(old_size)
|
destination.dna.update_body_size(old_size)
|
||||||
|
|
||||||
@@ -66,6 +68,7 @@
|
|||||||
/datum/dna/proc/copy_dna(datum/dna/new_dna)
|
/datum/dna/proc/copy_dna(datum/dna/new_dna)
|
||||||
new_dna.unique_enzymes = unique_enzymes
|
new_dna.unique_enzymes = unique_enzymes
|
||||||
new_dna.mutation_index = mutation_index
|
new_dna.mutation_index = mutation_index
|
||||||
|
new_dna.default_mutation_genes = default_mutation_genes
|
||||||
new_dna.uni_identity = uni_identity
|
new_dna.uni_identity = uni_identity
|
||||||
new_dna.blood_type = blood_type
|
new_dna.blood_type = blood_type
|
||||||
new_dna.skin_tone_override = skin_tone_override
|
new_dna.skin_tone_override = skin_tone_override
|
||||||
@@ -160,15 +163,18 @@
|
|||||||
if(!LAZYLEN(mutations_temp))
|
if(!LAZYLEN(mutations_temp))
|
||||||
return
|
return
|
||||||
mutation_index.Cut()
|
mutation_index.Cut()
|
||||||
|
default_mutation_genes.Cut()
|
||||||
shuffle_inplace(mutations_temp)
|
shuffle_inplace(mutations_temp)
|
||||||
if(ismonkey(holder))
|
if(ismonkey(holder))
|
||||||
mutations |= new RACEMUT(MUT_NORMAL)
|
mutations |= new RACEMUT(MUT_NORMAL)
|
||||||
mutation_index[RACEMUT] = GET_SEQUENCE(RACEMUT)
|
mutation_index[RACEMUT] = GET_SEQUENCE(RACEMUT)
|
||||||
else
|
else
|
||||||
mutation_index[RACEMUT] = create_sequence(RACEMUT, FALSE)
|
mutation_index[RACEMUT] = create_sequence(RACEMUT, FALSE)
|
||||||
|
default_mutation_genes[RACEMUT] = mutation_index[RACEMUT]
|
||||||
for(var/i in 2 to DNA_MUTATION_BLOCKS)
|
for(var/i in 2 to DNA_MUTATION_BLOCKS)
|
||||||
var/datum/mutation/human/M = mutations_temp[i]
|
var/datum/mutation/human/M = mutations_temp[i]
|
||||||
mutation_index[M.type] = create_sequence(M.type, FALSE,M.difficulty)
|
mutation_index[M.type] = create_sequence(M.type, FALSE, M.difficulty)
|
||||||
|
default_mutation_genes[M.type] = mutation_index[M.type]
|
||||||
shuffle_inplace(mutation_index)
|
shuffle_inplace(mutation_index)
|
||||||
|
|
||||||
//Used to generate original gene sequences for every mutation
|
//Used to generate original gene sequences for every mutation
|
||||||
@@ -389,7 +395,7 @@
|
|||||||
return dna
|
return dna
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/hardset_dna(ui, list/mutation_index, newreal_name, newblood_type, datum/species/mrace, newfeatures)
|
/mob/living/carbon/human/proc/hardset_dna(ui, list/mutation_index, newreal_name, newblood_type, datum/species/mrace, newfeatures, list/default_mutation_genes)
|
||||||
|
|
||||||
if(newreal_name)
|
if(newreal_name)
|
||||||
real_name = newreal_name
|
real_name = newreal_name
|
||||||
@@ -414,6 +420,10 @@
|
|||||||
|
|
||||||
if(LAZYLEN(mutation_index))
|
if(LAZYLEN(mutation_index))
|
||||||
dna.mutation_index = mutation_index.Copy()
|
dna.mutation_index = mutation_index.Copy()
|
||||||
|
if(LAZYLEN(default_mutation_genes))
|
||||||
|
dna.default_mutation_genes = default_mutation_genes.Copy()
|
||||||
|
else
|
||||||
|
dna.default_mutation_genes = mutation_index.Copy()
|
||||||
domutcheck()
|
domutcheck()
|
||||||
|
|
||||||
SEND_SIGNAL(src, COMSIG_HUMAN_HARDSET_DNA, ui, mutation_index, newreal_name, newblood_type, mrace, newfeatures)
|
SEND_SIGNAL(src, COMSIG_HUMAN_HARDSET_DNA, ui, mutation_index, newreal_name, newblood_type, mrace, newfeatures)
|
||||||
@@ -505,8 +515,11 @@
|
|||||||
. = TRUE
|
. = TRUE
|
||||||
if(on)
|
if(on)
|
||||||
mutation_index[HM.type] = GET_SEQUENCE(HM.type)
|
mutation_index[HM.type] = GET_SEQUENCE(HM.type)
|
||||||
|
default_mutation_genes[HM.type] = mutation_index[HM.type]
|
||||||
else if(GET_SEQUENCE(HM.type) == mutation_index[HM.type])
|
else if(GET_SEQUENCE(HM.type) == mutation_index[HM.type])
|
||||||
mutation_index[HM.type] = create_sequence(HM.type, FALSE, HM.difficulty)
|
mutation_index[HM.type] = create_sequence(HM.type, FALSE, HM.difficulty)
|
||||||
|
default_mutation_genes[HM.type] = mutation_index[HM.type]
|
||||||
|
|
||||||
|
|
||||||
/datum/dna/proc/activate_mutation(mutation) //note that this returns a boolean and not a new mob
|
/datum/dna/proc/activate_mutation(mutation) //note that this returns a boolean and not a new mob
|
||||||
if(!mutation)
|
if(!mutation)
|
||||||
|
|||||||
@@ -82,9 +82,10 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
|
|||||||
return
|
return
|
||||||
if(href_list["show_flavor"])
|
if(href_list["show_flavor"])
|
||||||
var/atom/target = locate(href_list["show_flavor"])
|
var/atom/target = locate(href_list["show_flavor"])
|
||||||
|
var/mob/living/L = target
|
||||||
var/text = texts_by_atom[target]
|
var/text = texts_by_atom[target]
|
||||||
if(text)
|
if(text)
|
||||||
usr << browse("<HTML><HEAD><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><TITLE>[target.name]</TITLE></HEAD><BODY><TT>[replacetext(texts_by_atom[target], "\n", "<BR>")]</TT></BODY></HTML>", "window=[target.name];size=500x200")
|
usr << browse("<HTML><HEAD><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><TITLE>[isliving(target) ? L.get_visible_name() : target.name]</TITLE></HEAD><BODY><TT>[replacetext(texts_by_atom[target], "\n", "<BR>")]</TT></BODY></HTML>", "window=[isliving(target) ? L.get_visible_name() : target.name];size=500x200")
|
||||||
onclose(usr, "[target.name]")
|
onclose(usr, "[target.name]")
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
|||||||
@@ -215,11 +215,17 @@
|
|||||||
|
|
||||||
/datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D)
|
/datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D)
|
||||||
set waitfor = FALSE
|
set waitfor = FALSE
|
||||||
|
var/transform_before
|
||||||
|
var/laying_before
|
||||||
if (D)
|
if (D)
|
||||||
|
transform_before = D.transform
|
||||||
|
laying_before = D.lying
|
||||||
animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0)
|
animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0)
|
||||||
sleep(15)
|
sleep(15)
|
||||||
if (D)
|
if (D)
|
||||||
animate(D, transform = null, time = 1, loop = 0)
|
if(transform_before && laying_before == D.lying) //animate calls sleep so this should be fine and stop a bug with transforms
|
||||||
|
D.transform = transform_before
|
||||||
|
animate(D, transform = null, time = 1, loop = 0)
|
||||||
|
|
||||||
/datum/martial_art/wrestling/proc/slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
/datum/martial_art/wrestling/proc/slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||||
if(!D)
|
if(!D)
|
||||||
@@ -415,11 +421,17 @@
|
|||||||
to_chat(A, "You can't drop onto [D] from here!")
|
to_chat(A, "You can't drop onto [D] from here!")
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
|
var/transform_before
|
||||||
|
var/laying_before
|
||||||
if(A)
|
if(A)
|
||||||
|
transform_before = A.transform
|
||||||
|
laying_before = A.lying
|
||||||
animate(A, transform = matrix(90, MATRIX_ROTATE), time = 1, loop = 0)
|
animate(A, transform = matrix(90, MATRIX_ROTATE), time = 1, loop = 0)
|
||||||
sleep(10)
|
sleep(10)
|
||||||
if(A)
|
if(A)
|
||||||
animate(A, transform = null, time = 1, loop = 0)
|
if(transform_before && laying_before == A.lying) //if they suddenly dropped to the floor between this period, don't revert their animation
|
||||||
|
animate(A, transform = null, time = 1, loop = 0)
|
||||||
|
A.transform = transform_before
|
||||||
|
|
||||||
A.forceMove(D.loc)
|
A.forceMove(D.loc)
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
var/synchronizer_coeff = -1 //makes the mutation hurt the user less
|
var/synchronizer_coeff = -1 //makes the mutation hurt the user less
|
||||||
var/power_coeff = -1 //boosts mutation strength
|
var/power_coeff = -1 //boosts mutation strength
|
||||||
var/energy_coeff = -1 //lowers mutation cooldown
|
var/energy_coeff = -1 //lowers mutation cooldown
|
||||||
|
var/list/valid_chrom_list = list() //List of strings of valid chromosomes this mutation can accept.
|
||||||
|
|
||||||
/datum/mutation/human/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
/datum/mutation/human/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -90,7 +91,7 @@
|
|||||||
/datum/mutation/human/proc/get_visual_indicator()
|
/datum/mutation/human/proc/get_visual_indicator()
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/mutation/human/proc/on_attack_hand(atom/target, proximity)
|
/datum/mutation/human/proc/on_attack_hand(atom/target, proximity, act_intent, unarmed_attack_flags)
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/mutation/human/proc/on_ranged_attack(atom/target, mouseparams)
|
/datum/mutation/human/proc/on_ranged_attack(atom/target, mouseparams)
|
||||||
@@ -167,6 +168,7 @@
|
|||||||
energy_coeff = HM.energy_coeff
|
energy_coeff = HM.energy_coeff
|
||||||
mutadone_proof = HM.mutadone_proof
|
mutadone_proof = HM.mutadone_proof
|
||||||
can_chromosome = HM.can_chromosome
|
can_chromosome = HM.can_chromosome
|
||||||
|
valid_chrom_list = HM.valid_chrom_list
|
||||||
|
|
||||||
/datum/mutation/human/proc/remove_chromosome()
|
/datum/mutation/human/proc/remove_chromosome()
|
||||||
stabilizer_coeff = initial(stabilizer_coeff)
|
stabilizer_coeff = initial(stabilizer_coeff)
|
||||||
@@ -192,3 +194,23 @@
|
|||||||
power.panel = "Genetic"
|
power.panel = "Genetic"
|
||||||
owner.AddSpell(power)
|
owner.AddSpell(power)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
// Runs through all the coefficients and uses this to determine which chromosomes the
|
||||||
|
// mutation can take. Stores these as text strings in a list.
|
||||||
|
/datum/mutation/human/proc/update_valid_chromosome_list()
|
||||||
|
valid_chrom_list.Cut()
|
||||||
|
|
||||||
|
if(can_chromosome == CHROMOSOME_NEVER)
|
||||||
|
valid_chrom_list += "none"
|
||||||
|
return
|
||||||
|
|
||||||
|
valid_chrom_list += "Reinforcement"
|
||||||
|
|
||||||
|
if(stabilizer_coeff != -1)
|
||||||
|
valid_chrom_list += "Stabilizer"
|
||||||
|
if(synchronizer_coeff != -1)
|
||||||
|
valid_chrom_list += "Synchronizer"
|
||||||
|
if(power_coeff != -1)
|
||||||
|
valid_chrom_list += "Power"
|
||||||
|
if(energy_coeff != -1)
|
||||||
|
valid_chrom_list += "Energetic"
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
|
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
|
||||||
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
|
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||||
|
|
||||||
/datum/mutation/human/hulk/on_attack_hand(atom/target, proximity)
|
/datum/mutation/human/hulk/on_attack_hand(atom/target, proximity, act_intent, unarmed_attack_flags)
|
||||||
if(proximity) //no telekinetic hulk attack
|
if(proximity && (act_intent == INTENT_HARM)) //no telekinetic hulk attack
|
||||||
return target.attack_hulk(owner)
|
return target.attack_hulk(owner)
|
||||||
|
|
||||||
/datum/mutation/human/hulk/on_life()
|
/datum/mutation/human/hulk/on_life()
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
/datum/mutation/human/wacky
|
/datum/mutation/human/wacky
|
||||||
name = "Wacky"
|
name = "Wacky"
|
||||||
desc = "<span class='sans'>Unknown.</span>"
|
desc = "Unknown."
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='sans'>You feel an off sensation in your voicebox.</span>"
|
text_gain_indication = "<span class='sans'>You feel an off sensation in your voicebox.</span>"
|
||||||
text_lose_indication = "<span class='notice'>The off sensation passes.</span>"
|
text_lose_indication = "<span class='notice'>The off sensation passes.</span>"
|
||||||
|
|||||||
@@ -104,6 +104,9 @@
|
|||||||
rack.AddComponent(/datum/component/magnetic_catch)
|
rack.AddComponent(/datum/component/magnetic_catch)
|
||||||
|
|
||||||
//Whatever special stuff you want
|
//Whatever special stuff you want
|
||||||
|
/datum/map_template/shuttle/proc/post_load(obj/docking_port/mobile/M)
|
||||||
|
return
|
||||||
|
|
||||||
/datum/map_template/shuttle/proc/on_bought()
|
/datum/map_template/shuttle/proc/on_bought()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
/datum/skill_holder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state)
|
/datum/skill_holder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state)
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "skillpanel", "[owner.name]'s Skills", 620, 580, master_ui, state)
|
ui = new(user, src, ui_key, "SkillPanel", "[owner.name]'s Skills", 620, 580, master_ui, state)
|
||||||
ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input.
|
ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input.
|
||||||
ui.open()
|
ui.open()
|
||||||
else if(need_static_data_update)
|
else if(need_static_data_update)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
/datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state)
|
/datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state)
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "spawners_menu", "Spawners Menu", 700, 600, master_ui, state)
|
ui = new(user, src, ui_key, "SpawnersMenu", "Spawners Menu", 700, 600, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/datum/spawners_menu/ui_data(mob/user)
|
/datum/spawners_menu/ui_data(mob/user)
|
||||||
|
|||||||
@@ -452,3 +452,21 @@ GLOBAL_LIST_EMPTY(family_heirlooms)
|
|||||||
mob_trait = TRAIT_COLDBLOODED
|
mob_trait = TRAIT_COLDBLOODED
|
||||||
gain_text = "<span class='notice'>You feel cold-blooded.</span>"
|
gain_text = "<span class='notice'>You feel cold-blooded.</span>"
|
||||||
lose_text = "<span class='notice'>You feel more warm-blooded.</span>"
|
lose_text = "<span class='notice'>You feel more warm-blooded.</span>"
|
||||||
|
|
||||||
|
/datum/quirk/monophobia
|
||||||
|
name = "Monophobia"
|
||||||
|
desc = "You will become increasingly stressed when not in company of others, triggering panic reactions ranging from sickness to heart attacks."
|
||||||
|
value = -3 // Might change it to 4.
|
||||||
|
gain_text = "<span class='danger'>You feel really lonely...</span>"
|
||||||
|
lose_text = "<span class='notice'>You feel like you could be safe on your own.</span>"
|
||||||
|
medical_record_text = "Patient feels sick and distressed when not around other people, leading to potentially lethal levels of stress."
|
||||||
|
|
||||||
|
/datum/quirk/monophobia/post_add()
|
||||||
|
. = ..()
|
||||||
|
var/mob/living/carbon/human/H = quirk_holder
|
||||||
|
H.gain_trauma(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||||
|
|
||||||
|
/datum/quirk/monophobia/remove()
|
||||||
|
. = ..()
|
||||||
|
var/mob/living/carbon/human/H = quirk_holder
|
||||||
|
H?.cure_trauma_type(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||||
|
|||||||
@@ -242,8 +242,8 @@
|
|||||||
/datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = FALSE, \
|
/datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = FALSE, \
|
||||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if (!ui)
|
||||||
ui = new(user, src, ui_key, "wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state)
|
ui = new(user, src, ui_key, "Wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/datum/wires/ui_data(mob/user)
|
/datum/wires/ui_data(mob/user)
|
||||||
|
|||||||
@@ -516,7 +516,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
|||||||
used_environ += amount
|
used_environ += amount
|
||||||
|
|
||||||
|
|
||||||
/area/Entered(atom/movable/M)
|
/area/Entered(atom/movable/M, atom/OldLoc)
|
||||||
set waitfor = FALSE
|
set waitfor = FALSE
|
||||||
SEND_SIGNAL(src, COMSIG_AREA_ENTERED, M)
|
SEND_SIGNAL(src, COMSIG_AREA_ENTERED, M)
|
||||||
SEND_SIGNAL(M, COMSIG_ENTER_AREA, src) //The atom that enters the area
|
SEND_SIGNAL(M, COMSIG_ENTER_AREA, src) //The atom that enters the area
|
||||||
@@ -524,6 +524,11 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
|||||||
return
|
return
|
||||||
|
|
||||||
var/mob/living/L = M
|
var/mob/living/L = M
|
||||||
|
var/turf/oldTurf = get_turf(OldLoc)
|
||||||
|
var/area/A = oldTurf?.loc
|
||||||
|
if(A && (A.has_gravity != has_gravity))
|
||||||
|
L.update_gravity(L.mob_has_gravity())
|
||||||
|
|
||||||
if(!L.ckey)
|
if(!L.ckey)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -101,6 +101,8 @@
|
|||||||
stack_trace("Warning: [src]([type]) initialized multiple times!")
|
stack_trace("Warning: [src]([type]) initialized multiple times!")
|
||||||
flags_1 |= INITIALIZED_1
|
flags_1 |= INITIALIZED_1
|
||||||
|
|
||||||
|
if(loc)
|
||||||
|
SEND_SIGNAL(loc, COMSIG_ATOM_CREATED, src) /// Sends a signal that the new atom `src`, has been created at `loc`
|
||||||
//atom color stuff
|
//atom color stuff
|
||||||
if(color)
|
if(color)
|
||||||
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
|
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
|
||||||
@@ -741,7 +743,7 @@
|
|||||||
flags_1 |= ADMIN_SPAWNED_1
|
flags_1 |= ADMIN_SPAWNED_1
|
||||||
. = ..()
|
. = ..()
|
||||||
switch(var_name)
|
switch(var_name)
|
||||||
if("color")
|
if(NAMEOF(src, color))
|
||||||
add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
|
add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
|
||||||
|
|
||||||
/atom/vv_get_dropdown()
|
/atom/vv_get_dropdown()
|
||||||
@@ -930,6 +932,8 @@
|
|||||||
log_game(log_text)
|
log_game(log_text)
|
||||||
if(LOG_GAME)
|
if(LOG_GAME)
|
||||||
log_game(log_text)
|
log_game(log_text)
|
||||||
|
if(LOG_SHUTTLE)
|
||||||
|
log_shuttle(log_text)
|
||||||
else
|
else
|
||||||
stack_trace("Invalid individual logging type: [message_type]. Defaulting to [LOG_GAME] (LOG_GAME).")
|
stack_trace("Invalid individual logging type: [message_type]. Defaulting to [LOG_GAME] (LOG_GAME).")
|
||||||
log_game(log_text)
|
log_game(log_text)
|
||||||
|
|||||||
@@ -120,25 +120,25 @@
|
|||||||
if((var_name in careful_edits) && (var_value % world.icon_size) != 0)
|
if((var_name in careful_edits) && (var_value % world.icon_size) != 0)
|
||||||
return FALSE
|
return FALSE
|
||||||
switch(var_name)
|
switch(var_name)
|
||||||
if("x")
|
if(NAMEOF(src, x))
|
||||||
var/turf/T = locate(var_value, y, z)
|
var/turf/T = locate(var_value, y, z)
|
||||||
if(T)
|
if(T)
|
||||||
forceMove(T)
|
forceMove(T)
|
||||||
return TRUE
|
return TRUE
|
||||||
return FALSE
|
return FALSE
|
||||||
if("y")
|
if(NAMEOF(src, y))
|
||||||
var/turf/T = locate(x, var_value, z)
|
var/turf/T = locate(x, var_value, z)
|
||||||
if(T)
|
if(T)
|
||||||
forceMove(T)
|
forceMove(T)
|
||||||
return TRUE
|
return TRUE
|
||||||
return FALSE
|
return FALSE
|
||||||
if("z")
|
if(NAMEOF(src, z))
|
||||||
var/turf/T = locate(x, y, var_value)
|
var/turf/T = locate(x, y, var_value)
|
||||||
if(T)
|
if(T)
|
||||||
forceMove(T)
|
forceMove(T)
|
||||||
return TRUE
|
return TRUE
|
||||||
return FALSE
|
return FALSE
|
||||||
if("loc")
|
if(NAMEOF(src, loc))
|
||||||
if(istype(var_value, /atom))
|
if(istype(var_value, /atom))
|
||||||
forceMove(var_value)
|
forceMove(var_value)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -350,8 +350,9 @@ Credit where due:
|
|||||||
for(var/entry in changelog)
|
for(var/entry in changelog)
|
||||||
changelog_contents += "<li>[entry]</li>"
|
changelog_contents += "<li>[entry]</li>"
|
||||||
info = replacetext(info, "CLOCKCULTCHANGELOG", changelog_contents)
|
info = replacetext(info, "CLOCKCULTCHANGELOG", changelog_contents)
|
||||||
|
/*
|
||||||
/obj/item/paper/servant_primer/oui_getcontent(mob/target)
|
/obj/item/paper/servant_primer/oui_getcontent(mob/target)
|
||||||
if(!is_servant_of_ratvar(target) && !isobserver(target))
|
if(!is_servant_of_ratvar(target) && !isobserver(target))
|
||||||
return "<HTML><HEAD><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><TITLE>[name]</TITLE></HEAD><BODY>[stars(info)]<HR>[stamps]</BODY></HTML>"
|
return "<HTML><HEAD><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><TITLE>[name]</TITLE></HEAD><BODY>[stars(info)]<HR>[stamps]</BODY></HTML>"
|
||||||
return ..()
|
return ..()
|
||||||
|
*/
|
||||||
|
|||||||
@@ -543,6 +543,8 @@
|
|||||||
/datum/game_mode/proc/get_remaining_days(client/C)
|
/datum/game_mode/proc/get_remaining_days(client/C)
|
||||||
if(!C)
|
if(!C)
|
||||||
return 0
|
return 0
|
||||||
|
if(C.prefs?.db_flags & DB_FLAG_EXEMPT)
|
||||||
|
return 0
|
||||||
if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
|
if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
|
||||||
return 0
|
return 0
|
||||||
if(!isnum(C.player_age))
|
if(!isnum(C.player_age))
|
||||||
|
|||||||
@@ -149,7 +149,7 @@
|
|||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/dominator/attack_hand(mob/user)
|
/obj/machinery/dominator/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
if(operating || (stat & BROKEN))
|
if(operating || (stat & BROKEN))
|
||||||
examine(user)
|
examine(user)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -845,6 +845,37 @@ GLOBAL_LIST_EMPTY(possible_items_special)
|
|||||||
/datum/objective/destroy/internal
|
/datum/objective/destroy/internal
|
||||||
var/stolen = FALSE //Have we already eliminated this target?
|
var/stolen = FALSE //Have we already eliminated this target?
|
||||||
|
|
||||||
|
/datum/objective/steal_five_of_type
|
||||||
|
name = "steal five of"
|
||||||
|
explanation_text = "Steal at least five items!"
|
||||||
|
var/list/wanted_items = list(/obj/item)
|
||||||
|
|
||||||
|
/datum/objective/steal_five_of_type/New()
|
||||||
|
..()
|
||||||
|
wanted_items = typecacheof(wanted_items)
|
||||||
|
|
||||||
|
/datum/objective/steal_five_of_type/summon_guns
|
||||||
|
name = "steal guns"
|
||||||
|
explanation_text = "Steal at least five guns!"
|
||||||
|
wanted_items = list(/obj/item/gun)
|
||||||
|
|
||||||
|
/datum/objective/steal_five_of_type/summon_magic
|
||||||
|
name = "steal magic"
|
||||||
|
explanation_text = "Steal at least five magical artefacts!"
|
||||||
|
wanted_items = list(/obj/item/spellbook, /obj/item/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/scrying, /obj/item/antag_spawner/contract, /obj/item/necromantic_stone)
|
||||||
|
|
||||||
|
/datum/objective/steal_five_of_type/check_completion()
|
||||||
|
var/list/datum/mind/owners = get_owners()
|
||||||
|
var/stolen_count = 0
|
||||||
|
for(var/datum/mind/M in owners)
|
||||||
|
if(!isliving(M.current))
|
||||||
|
continue
|
||||||
|
var/list/all_items = M.current.GetAllContents() //this should get things in cheesewheels, books, etc.
|
||||||
|
for(var/obj/I in all_items) //Check for wanted items
|
||||||
|
if(is_type_in_typecache(I, wanted_items))
|
||||||
|
stolen_count++
|
||||||
|
return stolen_count >= 5
|
||||||
|
|
||||||
//Created by admin tools
|
//Created by admin tools
|
||||||
/datum/objective/custom
|
/datum/objective/custom
|
||||||
name = "custom"
|
name = "custom"
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
stat |= BROKEN
|
stat |= BROKEN
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/pdapainter/attack_hand(mob/user)
|
/obj/machinery/pdapainter/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -209,7 +209,7 @@
|
|||||||
|
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "sleeper", name, 550, 700, master_ui, state)
|
ui = new(user, src, ui_key, "Sleeper", name, 550, 700, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/obj/machinery/sleeper/process()
|
/obj/machinery/sleeper/process()
|
||||||
@@ -421,7 +421,8 @@
|
|||||||
desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch."
|
desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch."
|
||||||
icon_state = "sleeper_clockwork"
|
icon_state = "sleeper_clockwork"
|
||||||
enter_message = "<span class='bold inathneq_small'>You hear the gentle hum and click of machinery, and are lulled into a sense of peace.</span>"
|
enter_message = "<span class='bold inathneq_small'>You hear the gentle hum and click of machinery, and are lulled into a sense of peace.</span>"
|
||||||
possible_chems = list(list("epinephrine", "salbutamol", "bicaridine", "kelotane", "oculine", "inacusiate", "mannitol"))
|
possible_chems = list(list(/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine,
|
||||||
|
/datum/reagent/medicine/kelotane, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/mannitol))
|
||||||
|
|
||||||
/obj/machinery/sleeper/clockwork/process()
|
/obj/machinery/sleeper/clockwork/process()
|
||||||
if(occupant && isliving(occupant))
|
if(occupant && isliving(occupant))
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ Class Procs:
|
|||||||
var/ui_style // ID of custom TGUI style (optional)
|
var/ui_style // ID of custom TGUI style (optional)
|
||||||
var/ui_x
|
var/ui_x
|
||||||
var/ui_y
|
var/ui_y
|
||||||
|
var/init_process = TRUE //Stop processing from starting on init
|
||||||
var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
|
var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
|
||||||
|
|
||||||
var/fair_market_price = 69
|
var/fair_market_price = 69
|
||||||
@@ -138,7 +138,7 @@ Class Procs:
|
|||||||
circuit = new circuit
|
circuit = new circuit
|
||||||
circuit.apply_default_parts(src)
|
circuit.apply_default_parts(src)
|
||||||
|
|
||||||
if(!speed_process)
|
if(!speed_process && init_process)
|
||||||
START_PROCESSING(SSmachines, src)
|
START_PROCESSING(SSmachines, src)
|
||||||
else
|
else
|
||||||
START_PROCESSING(SSfastprocess, src)
|
START_PROCESSING(SSfastprocess, src)
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
else
|
else
|
||||||
icon_state = "airlock_sensor_off"
|
icon_state = "airlock_sensor_off"
|
||||||
|
|
||||||
/obj/machinery/airlock_sensor/attack_hand(mob/user)
|
/obj/machinery/airlock_sensor/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
return
|
return
|
||||||
@@ -161,4 +161,4 @@
|
|||||||
|
|
||||||
/obj/machinery/airlock_sensor/Destroy()
|
/obj/machinery/airlock_sensor/Destroy()
|
||||||
SSradio.remove_object(src,frequency)
|
SSradio.remove_object(src,frequency)
|
||||||
return ..()
|
return ..()
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
|||||||
icon_state = (panel_open ? "AAS_Off_Open" : "AAS_Off")
|
icon_state = (panel_open ? "AAS_Off_Open" : "AAS_Off")
|
||||||
|
|
||||||
/obj/machinery/announcement_system/update_overlays()
|
/obj/machinery/announcement_system/update_overlays()
|
||||||
. =..()
|
. = ..()
|
||||||
if(arrivalToggle)
|
if(arrivalToggle)
|
||||||
. += greenlight
|
. += greenlight
|
||||||
|
|
||||||
@@ -54,19 +54,15 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
|||||||
GLOB.announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!"
|
GLOB.announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!"
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/announcement_system/power_change()
|
|
||||||
..()
|
|
||||||
update_icon()
|
|
||||||
|
|
||||||
/obj/machinery/announcement_system/attackby(obj/item/P, mob/user, params)
|
/obj/machinery/announcement_system/attackby(obj/item/P, mob/user, params)
|
||||||
if(istype(P, /obj/item/screwdriver))
|
if(P.tool_behaviour == TOOL_SCREWDRIVER)
|
||||||
P.play_tool_sound(src)
|
P.play_tool_sound(src)
|
||||||
panel_open = !panel_open
|
panel_open = !panel_open
|
||||||
to_chat(user, "<span class='notice'>You [panel_open ? "open" : "close"] the maintenance hatch of [src].</span>")
|
to_chat(user, "<span class='notice'>You [panel_open ? "open" : "close"] the maintenance hatch of [src].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
else if(default_deconstruction_crowbar(P))
|
else if(default_deconstruction_crowbar(P))
|
||||||
return
|
return
|
||||||
else if(istype(P, /obj/item/multitool) && panel_open && (stat & BROKEN))
|
else if(P.tool_behaviour == TOOL_MULTITOOL && panel_open && (stat & BROKEN))
|
||||||
to_chat(user, "<span class='notice'>You reset [src]'s firmware.</span>")
|
to_chat(user, "<span class='notice'>You reset [src]'s firmware.</span>")
|
||||||
stat &= ~BROKEN
|
stat &= ~BROKEN
|
||||||
update_icon()
|
update_icon()
|
||||||
@@ -88,10 +84,6 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
|||||||
message = CompileText(arrival, user, rank)
|
message = CompileText(arrival, user, rank)
|
||||||
else if(message_type == "NEWHEAD" && newheadToggle)
|
else if(message_type == "NEWHEAD" && newheadToggle)
|
||||||
message = CompileText(newhead, user, rank)
|
message = CompileText(newhead, user, rank)
|
||||||
//CITADEL EDIT for cryopods
|
|
||||||
else if(message_type == "CRYOSTORAGE")
|
|
||||||
message = CompileText("%PERSON, %RANK has been moved to cryo storage.", user, rank)
|
|
||||||
//END EDIT
|
|
||||||
else if(message_type == "ARRIVALS_BROKEN")
|
else if(message_type == "ARRIVALS_BROKEN")
|
||||||
message = "The arrivals shuttle has been damaged. Docking for repairs..."
|
message = "The arrivals shuttle has been damaged. Docking for repairs..."
|
||||||
|
|
||||||
@@ -103,61 +95,59 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
|||||||
|
|
||||||
//config stuff
|
//config stuff
|
||||||
|
|
||||||
/obj/machinery/announcement_system/ui_interact(mob/user)
|
/obj/machinery/announcement_system/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
|
if(!ui)
|
||||||
|
ui = new(user, src, ui_key, "AutomatedAnnouncement", "Automated Announcement System", 500, 225, master_ui, state)
|
||||||
|
ui.open()
|
||||||
|
|
||||||
|
/obj/machinery/announcement_system/ui_data()
|
||||||
|
var/list/data = list()
|
||||||
|
data["arrival"] = arrival
|
||||||
|
data["arrivalToggle"] = arrivalToggle
|
||||||
|
data["newhead"] = newhead
|
||||||
|
data["newheadToggle"] = newheadToggle
|
||||||
|
return data
|
||||||
|
|
||||||
|
/obj/machinery/announcement_system/ui_act(action, param)
|
||||||
|
. = ..()
|
||||||
|
if(.)
|
||||||
|
return
|
||||||
|
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||||
return
|
return
|
||||||
if(stat & BROKEN)
|
if(stat & BROKEN)
|
||||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='italics'>You hear a faint buzz.</span>")
|
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='hear'>You hear a faint buzz.</span>")
|
||||||
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1)
|
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, TRUE)
|
||||||
return
|
return
|
||||||
|
switch(action)
|
||||||
|
if("ArrivalText")
|
||||||
var/contents = "Arrival Announcement: <A href='?src=[REF(src)];ArrivalT-Topic=1'>([(arrivalToggle ? "On" : "Off")])</a><br>\n<A href='?src=[REF(src)];ArrivalTopic=1'>[arrival]</a><br><br>\n"
|
var/NewMessage = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN)
|
||||||
contents += "Departmental Head Announcement: <A href='?src=[REF(src)];NewheadT-Topic=1'>([(newheadToggle ? "On" : "Off")])</a><br>\n<A href='?src=[REF(src)];NewheadTopic=1'>[newhead]</a><br><br>\n"
|
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||||
|
return
|
||||||
var/datum/browser/popup = new(user, "announcement_config", "Automated Announcement Configuration", 370, 220)
|
if(NewMessage)
|
||||||
popup.set_content(contents)
|
arrival = NewMessage
|
||||||
popup.open()
|
log_game("The arrivals announcement was updated: [NewMessage] by:[key_name(usr)]")
|
||||||
|
if("NewheadText")
|
||||||
/obj/machinery/announcement_system/Topic(href, href_list)
|
var/NewMessage = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN)
|
||||||
if(..())
|
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||||
return
|
return
|
||||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
if(NewMessage)
|
||||||
return
|
newhead = NewMessage
|
||||||
if(stat & BROKEN)
|
log_game("The head announcement was updated: [NewMessage] by:[key_name(usr)]")
|
||||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='italics'>You hear a faint buzz.</span>")
|
if("NewheadToggle")
|
||||||
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1)
|
newheadToggle = !newheadToggle
|
||||||
return
|
update_icon()
|
||||||
|
if("ArrivalToggle")
|
||||||
if(href_list["ArrivalTopic"])
|
arrivalToggle = !arrivalToggle
|
||||||
var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival)
|
update_icon()
|
||||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
|
||||||
return
|
|
||||||
if(NewMessage)
|
|
||||||
arrival = NewMessage
|
|
||||||
else if(href_list["NewheadTopic"])
|
|
||||||
var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead)
|
|
||||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
|
||||||
return
|
|
||||||
if(NewMessage)
|
|
||||||
newhead = NewMessage
|
|
||||||
|
|
||||||
else if(href_list["NewheadT-Topic"])
|
|
||||||
newheadToggle = !newheadToggle
|
|
||||||
update_icon()
|
|
||||||
else if(href_list["ArrivalT-Topic"])
|
|
||||||
arrivalToggle = !arrivalToggle
|
|
||||||
update_icon()
|
|
||||||
|
|
||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
interact(usr)
|
|
||||||
|
|
||||||
/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user)
|
/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user)
|
||||||
. = attack_ai(user)
|
. = attack_ai(user)
|
||||||
|
|
||||||
/obj/machinery/announcement_system/attack_ai(mob/user)
|
/obj/machinery/announcement_system/attack_ai(mob/user)
|
||||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
if(!user.canUseTopic(src, !issilicon(user)))
|
||||||
return
|
return
|
||||||
if(stat & BROKEN)
|
if(stat & BROKEN)
|
||||||
to_chat(user, "<span class='warning'>[src]'s firmware appears to be malfunctioning!</span>")
|
to_chat(user, "<span class='warning'>[src]'s firmware appears to be malfunctioning!</span>")
|
||||||
@@ -165,8 +155,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
|||||||
interact(user)
|
interact(user)
|
||||||
|
|
||||||
/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff
|
/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff
|
||||||
stat |= BROKEN
|
if(!obj_break()) // if badmins flag this unbreakable or its already broken
|
||||||
update_icon()
|
return
|
||||||
|
|
||||||
arrival = pick("#!@%ERR-34%2 CANNOT LOCAT@# JO# F*LE!", "CRITICAL ERROR 99.", "ERR)#: DA#AB@#E NOT F(*ND!")
|
arrival = pick("#!@%ERR-34%2 CANNOT LOCAT@# JO# F*LE!", "CRITICAL ERROR 99.", "ERR)#: DA#AB@#E NOT F(*ND!")
|
||||||
newhead = pick("OV#RL()D: \[UNKNOWN??\] DET*#CT)D!", "ER)#R - B*@ TEXT F*O(ND!", "AAS.exe is not responding. NanoOS is searching for a solution to the problem.")
|
newhead = pick("OV#RL()D: \[UNKNOWN??\] DET*#CT)D!", "ER)#R - B*@ TEXT F*O(ND!", "AAS.exe is not responding. NanoOS is searching for a solution to the problem.")
|
||||||
@@ -177,9 +167,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
|||||||
act_up()
|
act_up()
|
||||||
|
|
||||||
/obj/machinery/announcement_system/emag_act()
|
/obj/machinery/announcement_system/emag_act()
|
||||||
. = ..()
|
|
||||||
if(obj_flags & EMAGGED)
|
if(obj_flags & EMAGGED)
|
||||||
return
|
return
|
||||||
obj_flags |= EMAGGED
|
obj_flags |= EMAGGED
|
||||||
act_up()
|
act_up()
|
||||||
return TRUE
|
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
stat |= BROKEN
|
stat |= BROKEN
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/aug_manipulator/attack_hand(mob/user)
|
/obj/machinery/aug_manipulator/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "bank_machine", name, 320, 165, master_ui, state)
|
ui = new(user, src, ui_key, "BankMachine", name, 320, 165, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/obj/machinery/computer/bank_machine/ui_data(mob/user)
|
/obj/machinery/computer/bank_machine/ui_data(mob/user)
|
||||||
|
|||||||
@@ -43,7 +43,11 @@
|
|||||||
board.one_access = 1
|
board.one_access = 1
|
||||||
board.accesses = req_one_access
|
board.accesses = req_one_access
|
||||||
|
|
||||||
/obj/machinery/button/update_icon_state()
|
setup_device()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/button/update_icon()
|
||||||
|
cut_overlays()
|
||||||
if(panel_open)
|
if(panel_open)
|
||||||
icon_state = "button-open"
|
icon_state = "button-open"
|
||||||
else if(stat & (NOPOWER|BROKEN))
|
else if(stat & (NOPOWER|BROKEN))
|
||||||
@@ -129,6 +133,11 @@
|
|||||||
A.id = id
|
A.id = id
|
||||||
initialized_button = 1
|
initialized_button = 1
|
||||||
|
|
||||||
|
/obj/machinery/button/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
|
||||||
|
if(id && istype(device, /obj/item/assembly/control))
|
||||||
|
var/obj/item/assembly/control/A = device
|
||||||
|
A.id = "[idnum][id]"
|
||||||
|
|
||||||
/obj/machinery/button/attack_hand(mob/user)
|
/obj/machinery/button/attack_hand(mob/user)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
|
|||||||
@@ -72,6 +72,11 @@
|
|||||||
if(mapload && is_station_level(z) && prob(3) && !start_active)
|
if(mapload && is_station_level(z) && prob(3) && !start_active)
|
||||||
toggle_cam()
|
toggle_cam()
|
||||||
|
|
||||||
|
/obj/machinery/camera/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
|
||||||
|
for(var/i in network)
|
||||||
|
network -= i
|
||||||
|
network += "[idnum][i]"
|
||||||
|
|
||||||
/obj/machinery/camera/Destroy()
|
/obj/machinery/camera/Destroy()
|
||||||
if(can_use())
|
if(can_use())
|
||||||
toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks
|
toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
charging = null
|
charging = null
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/cell_charger/attack_hand(mob/user)
|
/obj/machinery/cell_charger/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
return
|
return
|
||||||
@@ -103,8 +103,18 @@
|
|||||||
removecell()
|
removecell()
|
||||||
|
|
||||||
/obj/machinery/cell_charger/attack_ai(mob/user)
|
/obj/machinery/cell_charger/attack_ai(mob/user)
|
||||||
|
if(!charging)
|
||||||
|
return
|
||||||
|
|
||||||
|
charging.forceMove(loc)
|
||||||
|
to_chat(user, "<span class='notice'>You remotely disconnect the battery port and eject [charging] from [src].</span>")
|
||||||
|
|
||||||
|
removecell()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/machinery/cell_charger/attack_robot(mob/user)
|
||||||
|
attack_ai(user)
|
||||||
|
|
||||||
/obj/machinery/cell_charger/emp_act(severity)
|
/obj/machinery/cell_charger/emp_act(severity)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
|
|||||||
@@ -75,31 +75,6 @@
|
|||||||
speed_coeff = max(1, speed_coeff)
|
speed_coeff = max(1, speed_coeff)
|
||||||
heal_level = clamp((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100)
|
heal_level = clamp((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100)
|
||||||
|
|
||||||
//The return of data disks?? Just for transferring between genetics machine/cloning machine.
|
|
||||||
//TO-DO: Make the genetics machine accept them.
|
|
||||||
/obj/item/disk/data
|
|
||||||
name = "cloning data disk"
|
|
||||||
icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk.
|
|
||||||
var/list/fields = list()
|
|
||||||
var/list/mutations = list()
|
|
||||||
var/max_mutations = 6
|
|
||||||
var/read_only = 0 //Well,it's still a floppy disk
|
|
||||||
|
|
||||||
//Disk stuff.
|
|
||||||
/obj/item/disk/data/Initialize()
|
|
||||||
. = ..()
|
|
||||||
icon_state = "datadisk[rand(0,6)]"
|
|
||||||
add_overlay("datadisk_gene")
|
|
||||||
|
|
||||||
/obj/item/disk/data/attack_self(mob/user)
|
|
||||||
read_only = !read_only
|
|
||||||
to_chat(user, "<span class='notice'>You flip the write-protect tab to [read_only ? "protected" : "unprotected"].</span>")
|
|
||||||
|
|
||||||
/obj/item/disk/data/examine(mob/user)
|
|
||||||
. = ..()
|
|
||||||
. += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]."
|
|
||||||
|
|
||||||
|
|
||||||
//Clonepod
|
//Clonepod
|
||||||
|
|
||||||
/obj/machinery/clonepod/examine(mob/user)
|
/obj/machinery/clonepod/examine(mob/user)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user