mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master' into wizloadouts
This commit is contained in:
+26
-56
@@ -1,72 +1,42 @@
|
||||
#pretending we're C because otherwise ruby will initialize, even with "language: dm".
|
||||
language: generic
|
||||
sudo: false
|
||||
dist: xenial
|
||||
os: linux
|
||||
|
||||
git:
|
||||
depth: 1
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libc6-i386
|
||||
- libgcc1:i386
|
||||
- libstdc++6:i386
|
||||
|
||||
env:
|
||||
global:
|
||||
- BYOND_MAJOR="513"
|
||||
- BYOND_MINOR="1505"
|
||||
- BYOND_MACRO_COUNT=4
|
||||
matrix:
|
||||
- DM_MAPFILE="cyberiad"
|
||||
- DM_MAPFILE="metastation"
|
||||
- DM_MAPFILE="delta"
|
||||
- DM_MAPFILE="test_all_maps"
|
||||
|
||||
stages:
|
||||
- File Checks
|
||||
- test
|
||||
|
||||
before_script:
|
||||
- chmod +x ./install-byond.sh
|
||||
- ./install-byond.sh
|
||||
script:
|
||||
- source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup
|
||||
- bash dm.sh -M${DM_MAPFILE} paradise.dme
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# Basic styling/functionality checks
|
||||
- stage: File Checks
|
||||
env:
|
||||
- name: "Run Linters"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- python3
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
install:
|
||||
- pip install --user PyYaml -q
|
||||
- pip install --user beautifulsoup4 -q
|
||||
before_script: skip
|
||||
- tools/travis/install_build_deps.sh
|
||||
- tools/travis/install_dreamchecker.sh
|
||||
script:
|
||||
- shopt -s globstar
|
||||
- find . -name "*.php" -print0 | xargs -0 -n1 php -l
|
||||
- find . -name "*.json" -not -path "./nano/node_modules/*" -print0 | xargs -0 python3 ./tools/travis/json_verifier.py
|
||||
- tools/travis/build_nanoui.sh
|
||||
- tools/travis/check_grep.sh
|
||||
- tools/travis/check_changelogs.sh
|
||||
- python3 tools/travis/check_line_endings.py
|
||||
- (num=$(grep -Ern '\\(red|blue|green|black|italic|bold|b|i[^mc])' code/ | wc -l); echo "$num BYOND text macros (expecting ${BYOND_MACRO_COUNT} or fewer)"; [ $num -le ${BYOND_MACRO_COUNT} ])
|
||||
- md5sum -c - <<< "6dc1b6bf583f3bd4176b6df494caa5f1 *html/changelogs/example.yml"
|
||||
- python tools/ss13_genchangelog.py html/changelog.html html/changelogs
|
||||
- ~/dreamchecker
|
||||
|
||||
# Compile NanoUI to make sure it works
|
||||
- stage: NanoUI
|
||||
language: node_js
|
||||
node_js:
|
||||
- "9"
|
||||
env:
|
||||
- name: "Compile All Maps"
|
||||
addons:
|
||||
before_install:
|
||||
- npm install -g gulp-cli
|
||||
- cd ./nano/
|
||||
apt:
|
||||
packages:
|
||||
- libstdc++6:i386
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/BYOND
|
||||
install:
|
||||
- npm install --loglevel=error
|
||||
before_script:
|
||||
- tools/travis/install_byond.sh
|
||||
- source $HOME/BYOND/byond/bin/byondsetup
|
||||
script:
|
||||
- node node_modules/gulp/bin/gulp.js --require less-loader
|
||||
- tools/travis/dm.sh -Mtravis_map_testing paradise.dme
|
||||
|
||||
@@ -70,6 +70,16 @@ Make sure to set the port to the one you specified in the config.txt,
|
||||
and set the Security box to 'Trusted'.
|
||||
Then press GO and the server should start up and be ready to join.
|
||||
|
||||
### Installation (Linux)
|
||||
|
||||
The code is able to run on Linux server side, however the libraries for MySQL and logging do require extra packages.
|
||||
|
||||
For MySQL, run the following: `apt-get install libmysqlclient-dev:i386`
|
||||
|
||||
For RustG, run the following: `apt-get install libssl-dev:i386 pkg-config:i386 zlib1g-dev:i386`
|
||||
|
||||
After installing these packages, these libraries should function as intended.
|
||||
|
||||
---
|
||||
|
||||
### UPDATING
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# This file has all the information on what versions of libraries are thrown into the code
|
||||
# For dreamchecker
|
||||
export SPACEMANDMM_TAG=suite-1.2
|
||||
# For NanoUI
|
||||
export NODE_VERSION=9
|
||||
# For the scripts in tools
|
||||
export PHP_VERSION=5.6
|
||||
# Byond Major
|
||||
export BYOND_MAJOR=513
|
||||
# Byond Minor
|
||||
export BYOND_MINOR=1505
|
||||
@@ -1241,21 +1241,6 @@
|
||||
/obj/structure/sign/securearea,
|
||||
/turf/simulated/wall/mineral/plastitanium/explosive,
|
||||
/area/ruin/unpowered/syndicate_lava_base/main)
|
||||
"cf" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/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
|
||||
},
|
||||
/obj/item/radio/intercom/syndicate,
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/ruin/unpowered/syndicate_lava_base/telecomms)
|
||||
"cg" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/simulated/floor/engine{
|
||||
@@ -3529,10 +3514,6 @@
|
||||
/obj/machinery/alarm/syndicate{
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/item/radio/headset/syndicate/alt{
|
||||
pixel_x = -3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/simulated/floor/plasteel/grimy,
|
||||
/area/ruin/unpowered/syndicate_lava_base/dormitories)
|
||||
"hN" = (
|
||||
@@ -3558,10 +3539,6 @@
|
||||
/obj/machinery/alarm/syndicate{
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/item/radio/headset/syndicate/alt{
|
||||
pixel_x = -3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/simulated/floor/plasteel/grimy,
|
||||
/area/ruin/unpowered/syndicate_lava_base/dormitories)
|
||||
"hR" = (
|
||||
@@ -4479,10 +4456,6 @@
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/ammo_box/magazine/sniper_rounds,
|
||||
/obj/item/radio/headset/syndicate/alt{
|
||||
pixel_x = -3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/simulated/floor/plasteel/grimy,
|
||||
/area/ruin/unpowered/syndicate_lava_base/dormitories)
|
||||
"jB" = (
|
||||
@@ -6785,7 +6758,6 @@
|
||||
/obj/machinery/computer/message_monitor{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/paper/monitorkey,
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/ruin/unpowered/syndicate_lava_base/telecomms)
|
||||
"ov" = (
|
||||
@@ -7400,7 +7372,7 @@ mp
|
||||
mQ
|
||||
nl
|
||||
nJ
|
||||
cf
|
||||
nJ
|
||||
ov
|
||||
mn
|
||||
ab
|
||||
|
||||
@@ -99,14 +99,14 @@
|
||||
"m" = (
|
||||
/obj/structure/closet/crate/freezer,
|
||||
/obj/item/stack/sheet/animalhide/lizard,
|
||||
/obj/item/reagent_containers/food/snacks/lizardmeat,
|
||||
/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/ruin/unpowered)
|
||||
"n" = (
|
||||
/obj/structure/closet/crate/freezer,
|
||||
/obj/item/reagent_containers/food/snacks/lizardmeat,
|
||||
/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
@@ -116,7 +116,7 @@
|
||||
/area/ruin/unpowered)
|
||||
"o" = (
|
||||
/obj/structure/closet/crate/freezer,
|
||||
/obj/item/reagent_containers/food/snacks/lizardmeat,
|
||||
/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
|
||||
@@ -5598,7 +5598,7 @@
|
||||
},
|
||||
/area/syndicate_depot/outer)
|
||||
"lZ" = (
|
||||
/obj/item/reagent_containers/food/snacks/spiderleg,
|
||||
/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg,
|
||||
/obj/structure/spider,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
// This is for Travis testing. DO NOT SET THIS AS THE GAME'S MAP NORMALLY!
|
||||
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
// Away missions
|
||||
#include "map_files\RandomZLevels\academy.dmm"
|
||||
#include "map_files\RandomZLevels\beach.dmm"
|
||||
#include "map_files\RandomZLevels\blackmarketpackers.dmm"
|
||||
#include "map_files\RandomZLevels\centcomAway.dmm"
|
||||
#include "map_files\RandomZLevels\evil_santa.dmm"
|
||||
#include "map_files\RandomZLevels\example.dmm"
|
||||
#include "map_files\RandomZLevels\moonoutpost19.dmm"
|
||||
#include "map_files\RandomZLevels\spacebattle.dmm"
|
||||
#include "map_files\RandomZLevels\spacehotel.dmm"
|
||||
#include "map_files\RandomZLevels\stationCollision.dmm"
|
||||
#include "map_files\RandomZLevels\terrorspiders.dmm"
|
||||
#include "map_files\RandomZLevels\undergroundoutpost45.dmm"
|
||||
#include "map_files\RandomZLevels\wildwest.dmm"
|
||||
|
||||
|
||||
// Lavaland Ruins
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_biodome_beach.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_biodome_clown_planet.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_biodome_winter.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_animal_hospital.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_ash_walker1.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk1.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk2.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk3.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_cube.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_cultaltar.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_dead_ratvar.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_envy.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_fountain_hall.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_gluttony.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_greed.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_hermit.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_hierophant.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_pizzaparty.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_pride.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_puzzle.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_random_ripley.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_seed_vault.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_sloth.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_survivalpod.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_swarmer_crash.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_syndicate_base1.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_ufo_crash.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_xeno_nest.dmm"
|
||||
|
||||
|
||||
// Space Ruins
|
||||
#include "map_files\RandomRuins\SpaceRuins\abandonedzoo.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\asteroid1.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\asteroid2.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\asteroid3.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\asteroid4.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\asteroid5.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\deepstorage.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\derelict1.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\derelict2.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\derelict3.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\derelict4.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\derelict5.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\emptyshell.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\gasthelizards.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\intactemptyship.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\listeningpost.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\mechtransport.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\oldstation.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\onehalf.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\spacebar.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\turretedoutpost.dmm"
|
||||
#include "map_files\RandomRuins\SpaceRuins\way_home.dmm"
|
||||
|
||||
|
||||
// Shuttle Templates
|
||||
#include "map_files\shuttles\cargo_base.dmm"
|
||||
#include "map_files\shuttles\emergency_bar.dmm"
|
||||
#include "map_files\shuttles\emergency_clown.dmm"
|
||||
#include "map_files\shuttles\emergency_cramped.dmm"
|
||||
#include "map_files\shuttles\emergency_cyb.dmm"
|
||||
#include "map_files\shuttles\emergency_dept.dmm"
|
||||
#include "map_files\shuttles\emergency_meta.dmm"
|
||||
#include "map_files\shuttles\emergency_mil.dmm"
|
||||
#include "map_files\shuttles\emergency_narnar.dmm"
|
||||
#include "map_files\shuttles\emergency_old.dmm"
|
||||
#include "map_files\shuttles\ferry_base.dmm"
|
||||
#include "map_files\shuttles\ferry_meat.dmm"
|
||||
|
||||
// Other templates
|
||||
#include "map_files\templates\spacehotel\n_01.dmm"
|
||||
#include "map_files\templates\spacehotel\n_02.dmm"
|
||||
#include "map_files\templates\spacehotel\n_03.dmm"
|
||||
#include "map_files\templates\spacehotel\n_04.dmm"
|
||||
#include "map_files\templates\spacehotel\n_05.dmm"
|
||||
#include "map_files\templates\spacehotel\n_06.dmm"
|
||||
#include "map_files\templates\spacehotel\n_07.dmm"
|
||||
#include "map_files\templates\spacehotel\n_08.dmm"
|
||||
#include "map_files\templates\spacehotel\n_09.dmm"
|
||||
#include "map_files\templates\spacehotel\n_10.dmm"
|
||||
#include "map_files\templates\spacehotel\n_11.dmm"
|
||||
#include "map_files\templates\spacehotel\n_12.dmm"
|
||||
#include "map_files\templates\spacehotel\n_13.dmm"
|
||||
#include "map_files\templates\spacehotel\n_14.dmm"
|
||||
#include "map_files\templates\spacehotel\n_15.dmm"
|
||||
#include "map_files\templates\spacehotel\n_16.dmm"
|
||||
#include "map_files\templates\spacehotel\n_17.dmm"
|
||||
#include "map_files\templates\spacehotel\n_18.dmm"
|
||||
#include "map_files\templates\spacehotel\n_19.dmm"
|
||||
|
||||
#include "map_files\templates\spacehotel\s_01.dmm"
|
||||
#include "map_files\templates\spacehotel\s_02.dmm"
|
||||
#include "map_files\templates\spacehotel\s_03.dmm"
|
||||
#include "map_files\templates\spacehotel\s_04.dmm"
|
||||
#include "map_files\templates\spacehotel\s_05.dmm"
|
||||
#include "map_files\templates\spacehotel\s_06.dmm"
|
||||
|
||||
#include "map_files\templates\light_floor_1.dmm"
|
||||
#include "map_files\templates\light_floor_2.dmm"
|
||||
#include "map_files\templates\light_floor_3.dmm"
|
||||
#include "map_files\templates\medium_shuttle1.dmm"
|
||||
#include "map_files\templates\medium_shuttle2.dmm"
|
||||
#include "map_files\templates\medium_shuttle3.dmm"
|
||||
#include "map_files\templates\shelter_1.dmm"
|
||||
#include "map_files\templates\shelter_2.dmm"
|
||||
#include "map_files\templates\small_asteroid_1.dmm"
|
||||
#include "map_files\templates\small_shuttle_1.dmm"
|
||||
|
||||
// This is pointless, we don't run the server
|
||||
/*#define MAP_TRANSITION_CONFIG list(AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED,
|
||||
AWAY_MISSION = UNAFFECTED)
|
||||
|
||||
#define USING_MAP_DATUM /datum/map*/
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
#warn a map has already been included.
|
||||
#endif
|
||||
@@ -0,0 +1,157 @@
|
||||
// This is for Travis testing. DO NOT SET THIS AS THE GAME'S MAP NORMALLY!
|
||||
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
// Cyberiad
|
||||
#include "map_files/Cyberiad/cyberiad.dmm"
|
||||
#include "map_files/Cyberiad/z2.dmm"
|
||||
#include "map_files/Cyberiad/z3.dmm"
|
||||
#include "map_files/Cyberiad/z4.dmm"
|
||||
#include "map_files/Cyberiad/z6.dmm"
|
||||
|
||||
// Debug Maps
|
||||
#include "map_files/Debug/singletile.dmm"
|
||||
#include "map_files/Debug/smoothing.dmm"
|
||||
|
||||
// Delta
|
||||
#include "map_files/Delta/delta.dmm"
|
||||
|
||||
// Generic Z Levels
|
||||
#include "map_files/Generic/Lavaland.dmm"
|
||||
#include "map_files/Generic/z6.dmm"
|
||||
#include "map_files/Generic/z7.dmm"
|
||||
|
||||
// MetaStation
|
||||
#include "map_files/MetaStation/MetaStation.v41A.II.dmm"
|
||||
#include "map_files/MetaStation/z2.dmm"
|
||||
#include "map_files/MetaStation/z3.dmm"
|
||||
#include "map_files/MetaStation/z4.dmm"
|
||||
|
||||
// Lavaland Ruins
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_cube.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_dead_ratvar.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_greed.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_pride.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_puzzle.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm"
|
||||
|
||||
// Space Ruins
|
||||
#include "map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid1.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid2.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid3.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid4.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid5.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/deepstorage.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict1.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict2.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict3.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict4.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict5.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/emptyshell.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/gasthelizards.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/intactemptyship.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/listeningpost.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/mechtransport.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/oldstation.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/onehalf.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/spacebar.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/way_home.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/wizardcrash.dmm"
|
||||
|
||||
// Gateway Missions
|
||||
#include "map_files/RandomZLevels/academy.dmm"
|
||||
#include "map_files/RandomZLevels/beach.dmm"
|
||||
#include "map_files/RandomZLevels/blackmarketpackers.dmm"
|
||||
#include "map_files/RandomZLevels/centcomAway.dmm"
|
||||
#include "map_files/RandomZLevels/evil_santa.dmm"
|
||||
#include "map_files/RandomZLevels/example.dmm"
|
||||
#include "map_files/RandomZLevels/moonoutpost19.dmm"
|
||||
#include "map_files/RandomZLevels/spacebattle.dmm"
|
||||
#include "map_files/RandomZLevels/spacehotel.dmm"
|
||||
#include "map_files/RandomZLevels/stationCollision.dmm"
|
||||
#include "map_files/RandomZLevels/terrorspiders.dmm"
|
||||
#include "map_files/RandomZLevels/undergroundoutpost45.dmm"
|
||||
#include "map_files/RandomZLevels/wildwest.dmm"
|
||||
|
||||
// Shuttles
|
||||
#include "map_files/shuttles/admin_admin.dmm"
|
||||
#include "map_files/shuttles/admin_hospital.dmm"
|
||||
#include "map_files/shuttles/cargo_base.dmm"
|
||||
#include "map_files/shuttles/emergency_bar.dmm"
|
||||
#include "map_files/shuttles/emergency_clown.dmm"
|
||||
#include "map_files/shuttles/emergency_cramped.dmm"
|
||||
#include "map_files/shuttles/emergency_cyb.dmm"
|
||||
#include "map_files/shuttles/emergency_dept.dmm"
|
||||
#include "map_files/shuttles/emergency_meta.dmm"
|
||||
#include "map_files/shuttles/emergency_mil.dmm"
|
||||
#include "map_files/shuttles/emergency_narnar.dmm"
|
||||
#include "map_files/shuttles/emergency_old.dmm"
|
||||
#include "map_files/shuttles/ferry_base.dmm"
|
||||
#include "map_files/shuttles/ferry_meat.dmm"
|
||||
|
||||
// Templates
|
||||
#include "map_files/templates/light_floor_1.dmm"
|
||||
#include "map_files/templates/light_floor_2.dmm"
|
||||
#include "map_files/templates/light_floor_3.dmm"
|
||||
#include "map_files/templates/medium_shuttle1.dmm"
|
||||
#include "map_files/templates/medium_shuttle2.dmm"
|
||||
#include "map_files/templates/medium_shuttle3.dmm"
|
||||
#include "map_files/templates/shelter_1.dmm"
|
||||
#include "map_files/templates/shelter_2.dmm"
|
||||
#include "map_files/templates/small_asteroid_1.dmm"
|
||||
#include "map_files/templates/small_shuttle_1.dmm"
|
||||
|
||||
// Spacehotel Rooms
|
||||
#include "map_files/templates/spacehotel/n_01.dmm"
|
||||
#include "map_files/templates/spacehotel/n_02.dmm"
|
||||
#include "map_files/templates/spacehotel/n_03.dmm"
|
||||
#include "map_files/templates/spacehotel/n_04.dmm"
|
||||
#include "map_files/templates/spacehotel/n_05.dmm"
|
||||
#include "map_files/templates/spacehotel/n_06.dmm"
|
||||
#include "map_files/templates/spacehotel/n_07.dmm"
|
||||
#include "map_files/templates/spacehotel/n_08.dmm"
|
||||
#include "map_files/templates/spacehotel/n_09.dmm"
|
||||
#include "map_files/templates/spacehotel/n_10.dmm"
|
||||
#include "map_files/templates/spacehotel/n_11.dmm"
|
||||
#include "map_files/templates/spacehotel/n_12.dmm"
|
||||
#include "map_files/templates/spacehotel/n_13.dmm"
|
||||
#include "map_files/templates/spacehotel/n_14.dmm"
|
||||
#include "map_files/templates/spacehotel/n_15.dmm"
|
||||
#include "map_files/templates/spacehotel/n_16.dmm"
|
||||
#include "map_files/templates/spacehotel/n_17.dmm"
|
||||
#include "map_files/templates/spacehotel/n_18.dmm"
|
||||
#include "map_files/templates/spacehotel/n_19.dmm"
|
||||
#include "map_files/templates/spacehotel/s_01.dmm"
|
||||
#include "map_files/templates/spacehotel/s_02.dmm"
|
||||
#include "map_files/templates/spacehotel/s_03.dmm"
|
||||
#include "map_files/templates/spacehotel/s_04.dmm"
|
||||
#include "map_files/templates/spacehotel/s_05.dmm"
|
||||
#include "map_files/templates/spacehotel/s_06.dmm"
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
#warn a map has already been included.
|
||||
#endif
|
||||
@@ -0,0 +1,26 @@
|
||||
// This file contains all the defines related to the spacemanDMM linter (dreamchecker). When running under normal conditions, BYOND will ignore all these
|
||||
#ifdef SPACEMAN_DMM
|
||||
#define RETURN_TYPE(X) set SpacemanDMM_return_type = X
|
||||
#define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
|
||||
#define UNLINT(X) SpacemanDMM_unlint(X)
|
||||
#define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X
|
||||
#define SHOULD_NOT_SLEEP(X)
|
||||
#define SHOULD_BE_PURE(X)
|
||||
#define PRIVATE_PROC(X)
|
||||
#define PROTECTED_PROC(X)
|
||||
#define VAR_FINAL var/SpacemanDMM_final
|
||||
#define VAR_PRIVATE var
|
||||
#define VAR_PROTECTED var
|
||||
#else
|
||||
#define RETURN_TYPE(X)
|
||||
#define SHOULD_CALL_PARENT(X)
|
||||
#define UNLINT(X) X
|
||||
#define SHOULD_NOT_OVERRIDE(X)
|
||||
#define SHOULD_NOT_SLEEP(X)
|
||||
#define SHOULD_BE_PURE(X)
|
||||
#define PRIVATE_PROC(X)
|
||||
#define PROTECTED_PROC(X)
|
||||
#define VAR_FINAL var
|
||||
#define VAR_PRIVATE var
|
||||
#define VAR_PROTECTED var
|
||||
#endif
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
//flags for covering body parts
|
||||
#define GLASSESCOVERSEYES 1
|
||||
#define MASKCOVERSEYES 2 // get rid of some of the other retardation in these flags
|
||||
#define MASKCOVERSEYES 2 // get rid of some of the other mess in these flags
|
||||
#define HEADCOVERSEYES 4 // feel free to realloc these numbers for other purposes
|
||||
#define MASKCOVERSMOUTH 8 // on other items, these are just for mask/head
|
||||
#define HEADCOVERSMOUTH 16
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
#define CONVERSION_LOG "Conversion"
|
||||
#define SAY_LOG "Say"
|
||||
#define EMOTE_LOG "Emote"
|
||||
#define MISC_LOG "Misc"
|
||||
#define MISC_LOG "Misc"
|
||||
|
||||
@@ -345,7 +345,7 @@
|
||||
#define MOUSE_OPACITY_OPAQUE 2
|
||||
|
||||
// Defib stats
|
||||
#define DEFIB_TIME_LIMIT 120
|
||||
#define DEFIB_TIME_LIMIT 300
|
||||
#define DEFIB_TIME_LOSS 60
|
||||
|
||||
//different types of atom colorations
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
#define INIT_ORDER_TIMER 1
|
||||
#define INIT_ORDER_DEFAULT 0
|
||||
#define INIT_ORDER_AIR -1
|
||||
#define INIT_ORDER_SUN -2
|
||||
#define INIT_ORDER_MINIMAP -3
|
||||
#define INIT_ORDER_ASSETS -4
|
||||
#define INIT_ORDER_ICON_SMOOTHING -5
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/proc/get_area(atom/A)
|
||||
RETURN_TYPE(/area)
|
||||
if(isarea(A))
|
||||
return A
|
||||
var/turf/T = get_turf(A)
|
||||
|
||||
@@ -570,6 +570,18 @@ world
|
||||
/proc/BlendRGBasHSV(rgb1, rgb2, amount)
|
||||
return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount)
|
||||
|
||||
//Returns the perceived brightness of a color.
|
||||
//https://en.wikipedia.org/wiki/Relative_luminance
|
||||
//https://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
|
||||
/proc/getLuminance(color)
|
||||
var/list/RGB = ReadRGB(color)
|
||||
var/R = RGB[1]
|
||||
var/G = RGB[2]
|
||||
var/B = RGB[2]
|
||||
|
||||
var/Y = (0.2126 * R) + (0.7152 * G) + (0.0722 * B)
|
||||
return Clamp((Y * 0.01), 0, 1) //Returns the brightness of a color in decimal percentage format. Can multiply light_power by this to receive 100% brightness or a lower brightness. Not a higher brightness.
|
||||
|
||||
/proc/HueToAngle(hue)
|
||||
// normalize hsv in case anything is screwy
|
||||
if(hue < 0 || hue >= 1536) hue %= 1536
|
||||
|
||||
@@ -277,8 +277,8 @@ This is always put in the attack log.
|
||||
/proc/add_attack_logs(atom/user, target, what_done, custom_level)
|
||||
if(islist(target)) // Multi-victim adding
|
||||
var/list/targets = target
|
||||
for(var/mob/M in targets)
|
||||
add_attack_logs(user, M, what_done, custom_level)
|
||||
for(var/t in targets)
|
||||
add_attack_logs(user, t, what_done, custom_level)
|
||||
return
|
||||
|
||||
var/user_str = key_name_log(user) + COORD(user)
|
||||
@@ -454,8 +454,8 @@ GLOBAL_LIST_INIT(do_after_once_tracker, list())
|
||||
/proc/do_after_once_checks(cache_key)
|
||||
if(GLOB.do_after_once_tracker[cache_key] && GLOB.do_after_once_tracker[cache_key] == DOAFTERONCE_MAGIC)
|
||||
GLOB.do_after_once_tracker[cache_key] = FALSE
|
||||
return FALSE
|
||||
return TRUE
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/proc/is_species(A, species_datum)
|
||||
. = FALSE
|
||||
|
||||
@@ -28,4 +28,4 @@ This may require updating to a beta release.
|
||||
#endif
|
||||
|
||||
// Macros that must exist before world.dm
|
||||
#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat
|
||||
// #define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat
|
||||
|
||||
@@ -179,9 +179,9 @@
|
||||
|
||||
var/title = name
|
||||
if(can_fire)
|
||||
title = "\[[state_letter()]][title]"
|
||||
title = "[state_colour()]\[[state_letter()]][title]</font>"
|
||||
|
||||
stat(title, "[state_colour()][statclick.update(msg)]</font>")
|
||||
stat(title, statclick.update(msg))
|
||||
|
||||
/datum/controller/subsystem/proc/state_letter()
|
||||
switch(state)
|
||||
|
||||
@@ -36,7 +36,7 @@ SUBSYSTEM_DEF(events)
|
||||
E.process()
|
||||
|
||||
for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR)
|
||||
var/list/datum/event_container/EC = event_containers[i]
|
||||
var/datum/event_container/EC = event_containers[i]
|
||||
EC.process()
|
||||
|
||||
/datum/controller/subsystem/events/proc/event_complete(var/datum/event/E)
|
||||
@@ -65,7 +65,7 @@ SUBSYSTEM_DEF(events)
|
||||
log_debug("Event '[EM.name]' has completed at [station_time_timestamp()].")
|
||||
|
||||
/datum/controller/subsystem/events/proc/delay_events(var/severity, var/delay)
|
||||
var/list/datum/event_container/EC = event_containers[severity]
|
||||
var/datum/event_container/EC = event_containers[severity]
|
||||
EC.next_event_time += delay
|
||||
|
||||
/datum/controller/subsystem/events/proc/Interact(var/mob/living/user)
|
||||
|
||||
@@ -10,7 +10,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
var/list/type_occupations = list() //Dict of all jobs, keys are types
|
||||
var/list/prioritized_jobs = list() // List of jobs set to priority by HoP/Captain
|
||||
var/list/id_change_records = list() // List of all job transfer records
|
||||
var/list/id_change_counter = 1
|
||||
var/id_change_counter = 1
|
||||
//Players who need jobs
|
||||
var/list/unassigned = list()
|
||||
//Debug info
|
||||
@@ -39,8 +39,6 @@ SUBSYSTEM_DEF(jobs)
|
||||
var/datum/job/job = new J()
|
||||
if(!job)
|
||||
continue
|
||||
if(!job.faction in faction)
|
||||
continue
|
||||
occupations += job
|
||||
name_occupations[job.title] = job
|
||||
type_occupations[J] = job
|
||||
@@ -138,7 +136,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
if(flag && !(flag in player.client.prefs.be_special))
|
||||
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
|
||||
continue
|
||||
if(player.mind && job.title in player.mind.restricted_roles)
|
||||
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||
Debug("FOC incompatbile with antagonist role, Player: [player]")
|
||||
continue
|
||||
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
|
||||
@@ -180,7 +178,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
Debug("GRJ player has disability rendering them ineligible for job, Player: [player]")
|
||||
continue
|
||||
|
||||
if(player.mind && job.title in player.mind.restricted_roles)
|
||||
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||
Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
|
||||
continue
|
||||
|
||||
@@ -357,7 +355,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
Debug("DO player has disability rendering them ineligible for job, Player: [player], Job:[job.title]")
|
||||
continue
|
||||
|
||||
if(player.mind && job.title in player.mind.restricted_roles)
|
||||
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||
Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
|
||||
continue
|
||||
|
||||
@@ -622,7 +620,9 @@ SUBSYSTEM_DEF(jobs)
|
||||
if(tgtcard.assignment && tgtcard.assignment == job.title)
|
||||
jobs_to_formats[job.title] = "disabled" // the job they already have is pre-selected
|
||||
else if(!job.would_accept_job_transfer_from_player(M))
|
||||
jobs_to_formats[job.title] = "linkDiscourage" // karma jobs they don't have available are discouraged
|
||||
jobs_to_formats[job.title] = "linkDiscourage" // jobs which are karma-locked and not unlocked for this player are discouraged
|
||||
else if((job.title in GLOB.command_positions) && istype(M) && M.client && job.available_in_playtime(M.client))
|
||||
jobs_to_formats[job.title] = "linkDiscourage" // command jobs which are playtime-locked and not unlocked for this player are discouraged
|
||||
else if(job.total_positions && !job.current_positions && job.title != "Civilian")
|
||||
jobs_to_formats[job.title] = "linkEncourage" // jobs with nobody doing them at all are encouraged
|
||||
else if(job.total_positions >= 0 && job.current_positions >= job.total_positions)
|
||||
|
||||
@@ -32,5 +32,90 @@ SUBSYSTEM_DEF(mapping)
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/controller/subsystem/mapping/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
||||
if(!z_levels || !z_levels.len)
|
||||
WARNING("No Z levels provided - Not generating ruins")
|
||||
return
|
||||
|
||||
for(var/zl in z_levels)
|
||||
var/turf/T = locate(1, 1, zl)
|
||||
if(!T)
|
||||
WARNING("Z level [zl] does not exist - Not generating ruins")
|
||||
return
|
||||
|
||||
var/list/ruins = potentialRuins.Copy()
|
||||
|
||||
var/list/forced_ruins = list() //These go first on the z level associated (same random one by default)
|
||||
var/list/ruins_availible = list() //we can try these in the current pass
|
||||
var/forced_z //If set we won't pick z level and use this one instead.
|
||||
|
||||
//Set up the starting ruin list
|
||||
for(var/key in ruins)
|
||||
var/datum/map_template/ruin/R = ruins[key]
|
||||
if(R.cost > budget) //Why would you do that
|
||||
continue
|
||||
if(R.always_place)
|
||||
forced_ruins[R] = -1
|
||||
if(R.unpickable)
|
||||
continue
|
||||
ruins_availible[R] = R.placement_weight
|
||||
|
||||
while(budget > 0 && (ruins_availible.len || forced_ruins.len))
|
||||
var/datum/map_template/ruin/current_pick
|
||||
var/forced = FALSE
|
||||
if(forced_ruins.len) //We have something we need to load right now, so just pick it
|
||||
for(var/ruin in forced_ruins)
|
||||
current_pick = ruin
|
||||
if(forced_ruins[ruin] > 0) //Load into designated z
|
||||
forced_z = forced_ruins[ruin]
|
||||
forced = TRUE
|
||||
break
|
||||
else //Otherwise just pick random one
|
||||
current_pick = pickweight(ruins_availible)
|
||||
|
||||
var/placement_tries = PLACEMENT_TRIES
|
||||
var/failed_to_place = TRUE
|
||||
var/z_placed = 0
|
||||
while(placement_tries > 0)
|
||||
placement_tries--
|
||||
z_placed = pick(z_levels)
|
||||
if(!current_pick.try_to_place(forced_z ? forced_z : z_placed,whitelist))
|
||||
continue
|
||||
else
|
||||
failed_to_place = FALSE
|
||||
break
|
||||
|
||||
//That's done remove from priority even if it failed
|
||||
if(forced)
|
||||
//TODO : handle forced ruins with multiple variants
|
||||
forced_ruins -= current_pick
|
||||
forced = FALSE
|
||||
|
||||
if(failed_to_place)
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.id == current_pick.id)
|
||||
ruins_availible -= R
|
||||
log_world("Failed to place [current_pick.name] ruin.")
|
||||
else
|
||||
budget -= current_pick.cost
|
||||
if(!current_pick.allow_duplicates)
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.id == current_pick.id)
|
||||
ruins_availible -= R
|
||||
if(current_pick.never_spawn_with)
|
||||
for(var/blacklisted_type in current_pick.never_spawn_with)
|
||||
for(var/possible_exclusion in ruins_availible)
|
||||
if(istype(possible_exclusion,blacklisted_type))
|
||||
ruins_availible -= possible_exclusion
|
||||
forced_z = 0
|
||||
|
||||
//Update the availible list
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.cost > budget)
|
||||
ruins_availible -= R
|
||||
|
||||
log_world("Ruin loader finished with [budget] left to spend.")
|
||||
|
||||
/datum/controller/subsystem/mapping/Recover()
|
||||
flags |= SS_NO_INIT
|
||||
|
||||
@@ -223,11 +223,12 @@ SUBSYSTEM_DEF(shuttle)
|
||||
return 0 //dock successful
|
||||
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/moveShuttle(shuttleId, dockId, timed)
|
||||
/datum/controller/subsystem/shuttle/proc/moveShuttle(shuttleId, dockId, timed, mob/user)
|
||||
var/obj/docking_port/mobile/M = getShuttle(shuttleId)
|
||||
var/obj/docking_port/stationary/D = getDock(dockId)
|
||||
if(!M)
|
||||
return 1
|
||||
M.last_caller = user // Save the caller of the shuttle for later logging
|
||||
if(timed)
|
||||
if(M.request(D))
|
||||
return 2
|
||||
|
||||
@@ -1,19 +1,28 @@
|
||||
SUBSYSTEM_DEF(sun)
|
||||
name = "Sun"
|
||||
wait = 600
|
||||
flags = SS_NO_TICK_CHECK|SS_NO_INIT
|
||||
flags = SS_NO_TICK_CHECK
|
||||
init_order = INIT_ORDER_SUN
|
||||
var/angle
|
||||
var/dx
|
||||
var/dy
|
||||
var/rate
|
||||
var/list/solars = list()
|
||||
|
||||
/datum/controller/subsystem/sun/PreInit()
|
||||
/datum/controller/subsystem/sun/Initialize(start_timeofday)
|
||||
// Lets work out an angle for the "sun" to rotate around the station
|
||||
angle = rand (0,360) // the station position to the sun is randomised at round start
|
||||
rate = rand(50,200)/100 // 50% - 200% of standard rotation
|
||||
if(prob(50)) // same chance to rotate clockwise than counter-clockwise
|
||||
rate = -rate
|
||||
|
||||
// Solar consoles need to load after machines init, so this handles that
|
||||
for(var/obj/machinery/power/solar_control/SC in solars)
|
||||
SC.setup()
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/controller/subsystem/sun/stat_entry(msg)
|
||||
..("P:[solars.len]")
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result
|
||||
else
|
||||
game_finished |= mode.check_finished()
|
||||
if(game_finished)
|
||||
if(game_finished || force_ending)
|
||||
current_state = GAME_STATE_FINISHED
|
||||
if(GAME_STATE_FINISHED)
|
||||
current_state = GAME_STATE_FINISHED
|
||||
@@ -309,15 +309,12 @@ SUBSYSTEM_DEF(ticker)
|
||||
cinematic.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
cinematic.screen_loc = "1,0"
|
||||
|
||||
var/obj/structure/bed/temp_buckle = new(src)
|
||||
if(station_missed)
|
||||
for(var/mob/M in GLOB.mob_list)
|
||||
M.buckled = temp_buckle //buckles the mob so it can't do anything
|
||||
if(M.client)
|
||||
M.client.screen += cinematic //show every client the cinematic
|
||||
else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived"
|
||||
for(var/mob/M in GLOB.mob_list)
|
||||
M.buckled = temp_buckle
|
||||
if(M.stat != DEAD)
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && is_station_level(T.z) && !istype(M.loc, /obj/structure/closet/secure_closet/freezer))
|
||||
@@ -387,8 +384,6 @@ SUBSYSTEM_DEF(ticker)
|
||||
//Otherwise if its a verb it will continue on afterwards.
|
||||
spawn(300)
|
||||
QDEL_NULL(cinematic) //end the cinematic
|
||||
if(temp_buckle)
|
||||
qdel(temp_buckle) //release everybody
|
||||
|
||||
|
||||
|
||||
|
||||
+10
-10
@@ -62,15 +62,15 @@
|
||||
if(sorted_laws.len)
|
||||
return
|
||||
|
||||
for(var/ion_law in ion_laws)
|
||||
sorted_laws += ion_law
|
||||
|
||||
for(var/evil_law in devil_laws)
|
||||
sorted_laws += evil_law
|
||||
|
||||
if(zeroth_law)
|
||||
sorted_laws += zeroth_law
|
||||
|
||||
for(var/ion_law in ion_laws)
|
||||
sorted_laws += ion_law
|
||||
|
||||
for(var/evil_law in devil_laws)
|
||||
sorted_laws += evil_law
|
||||
|
||||
var/index = 1
|
||||
for(var/datum/ai_law/inherent_law in inherent_laws)
|
||||
inherent_law.index = index++
|
||||
@@ -133,12 +133,12 @@
|
||||
for(var/datum/ai_law/AL in devil_laws)
|
||||
if(AL.law == law)
|
||||
return
|
||||
|
||||
|
||||
var/new_law = new/datum/ai_law/sixsixsix(law)
|
||||
devil_laws += new_law
|
||||
if(state_devil.len < devil_laws.len)
|
||||
state_devil += 1
|
||||
|
||||
|
||||
sorted_laws.Cut()
|
||||
|
||||
/datum/ai_laws/proc/add_ion_law(var/law)
|
||||
@@ -209,9 +209,9 @@
|
||||
|
||||
/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws)
|
||||
laws.internal_delete_law(laws.ion_laws, laws.state_ion, src)
|
||||
|
||||
|
||||
/datum/ai_law/sixsixsix/delete_law(var/datum/ai_laws/laws)
|
||||
laws.internal_delete_law(laws.devil_laws, laws.state_devil, src)
|
||||
laws.internal_delete_law(laws.devil_laws, laws.state_devil, src)
|
||||
|
||||
/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws)
|
||||
laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src)
|
||||
|
||||
@@ -624,7 +624,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
else if(H.mind && H.mind.assigned_role in get_all_centcom_jobs())
|
||||
else if(H.mind && (H.mind.assigned_role in get_all_centcom_jobs()))
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
else
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/// Status traits attached to this datum
|
||||
var/list/status_traits
|
||||
var/list/comp_lookup
|
||||
var/list/signal_procs
|
||||
var/list/list/datum/callback/signal_procs
|
||||
var/signal_enabled = FALSE
|
||||
var/datum_flags = NONE
|
||||
var/var_edited = FALSE //Warranty void if seal is broken
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
affected_mob.emote("stare")
|
||||
if(prob(2))
|
||||
affected_mob.emote("drool")
|
||||
if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't retard you to death now
|
||||
if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't brainpain you to death now
|
||||
affected_mob.adjustBrainLoss(2)
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='danger'>Your try to remember something important...but can't.</span>")
|
||||
@@ -40,7 +40,7 @@
|
||||
affected_mob.emote("stare")
|
||||
if(prob(2))
|
||||
affected_mob.emote("drool")
|
||||
if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't retard you to death now
|
||||
if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't brainpain you to death now
|
||||
affected_mob.adjustBrainLoss(3)
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='danger'>Strange buzzing fills your head, removing all thoughts.</span>")
|
||||
|
||||
@@ -199,4 +199,4 @@
|
||||
affected_mob.emote("collapse")
|
||||
if(prob(12))
|
||||
to_chat(affected_mob, "<span class='warning'>You feel [pick("tired", "exhausted", "sluggish")].</span>")
|
||||
affected_mob.Slowed(rand(4, 16))
|
||||
affected_mob.Slowed(rand(4, 16))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
|
||||
permeability_mod = 0.75
|
||||
desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of mental retardation, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
|
||||
desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of dementia, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
|
||||
severity = HARMFUL
|
||||
required_organs = list(/obj/item/organ/external/head)
|
||||
|
||||
|
||||
+3
-4
@@ -54,14 +54,13 @@
|
||||
var/linglink
|
||||
var/datum/vampire/vampire //vampire holder
|
||||
var/datum/abductor/abductor //abductor holder
|
||||
var/datum/devilinfo/devilinfo //devil holder
|
||||
|
||||
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
|
||||
var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
|
||||
var/datum/mindslaves/som //stands for slave or master...hush..
|
||||
var/datum/devilinfo/devilinfo //Information about the devil, if any.
|
||||
var/damnation_type = 0
|
||||
var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
|
||||
var/damnation_type = 0
|
||||
var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
|
||||
var/hasSoul = TRUE
|
||||
|
||||
var/rev_cooldown = 0
|
||||
@@ -547,7 +546,7 @@
|
||||
var/mob/def_target = null
|
||||
var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain)
|
||||
if(objective&&(objective.type in objective_list) && objective:target)
|
||||
def_target = objective:target.current
|
||||
def_target = objective.target.current
|
||||
possible_targets = sortAtom(possible_targets)
|
||||
possible_targets += "Free objective"
|
||||
|
||||
|
||||
@@ -22,5 +22,4 @@
|
||||
/mutable_appearance/clean/New()
|
||||
. = ..()
|
||||
alpha = 255
|
||||
opacity = 1
|
||||
transform = null
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/outfit
|
||||
var/name = "Naked"
|
||||
var/name = "SOMEBODY FORGOT TO SET A NAME, NOTIFY A CODER"
|
||||
var/collect_not_del = FALSE
|
||||
|
||||
var/uniform = null
|
||||
@@ -33,6 +33,9 @@
|
||||
|
||||
var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters
|
||||
|
||||
/datum/outfit/naked
|
||||
name = "Naked"
|
||||
|
||||
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
//to be overriden for customization depending on client prefs,species etc
|
||||
return
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
P.attack_self(H) // activate them, display musical notes effect
|
||||
|
||||
/datum/outfit/admin/soviet
|
||||
|
||||
name = "Soviet Generic"
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
uniform = /obj/item/clothing/under/soviet
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
@@ -771,6 +771,7 @@
|
||||
apply_to_card(I, H, get_all_accesses(), "Space Explorer")
|
||||
|
||||
/datum/outfit/admin/hardsuit
|
||||
name = "Hardsuit Generic"
|
||||
back = /obj/item/tank/jetpack/oxygen
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
shoes = /obj/item/clothing/shoes/magboots
|
||||
@@ -823,6 +824,7 @@
|
||||
|
||||
|
||||
/datum/outfit/admin/tournament
|
||||
name = "Tournament Generic"
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
head = /obj/item/clothing/head/helmet/thunderdome
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
/datum/radio_frequency
|
||||
var/frequency as num
|
||||
var/list/list/obj/devices = list()
|
||||
var/list/obj/devices = list()
|
||||
|
||||
/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null)
|
||||
var/turf/start_point
|
||||
@@ -108,7 +108,7 @@
|
||||
. = "Domestic Animal"
|
||||
else
|
||||
. = "Unidentifiable"
|
||||
|
||||
|
||||
//callback used by objects to react to incoming radio signals
|
||||
/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
return null
|
||||
|
||||
@@ -241,7 +241,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
|
||||
before_cast(targets)
|
||||
invocation()
|
||||
if(user && user.ckey)
|
||||
add_attack_logs(user, null, "cast the spell [name]", ATKLOG_ALL)
|
||||
add_attack_logs(user, targets, "cast the spell [name]", ATKLOG_ALL)
|
||||
spawn(0)
|
||||
if(charge_type == "recharge" && recharge)
|
||||
start_recharge()
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(!marked_item) //linking item to the spell
|
||||
message = "<span class='warning'>"
|
||||
for(var/obj/item in hand_items)
|
||||
if(ABSTRACT in item.flags || NODROP in item.flags)
|
||||
if((ABSTRACT in item.flags) || (NODROP in item.flags))
|
||||
continue
|
||||
marked_item = item
|
||||
to_chat(M, "<span class='warning'>You begin to focus your very being into the [item.name]...</span>")
|
||||
|
||||
@@ -165,4 +165,4 @@
|
||||
/obj/item/spellbook/oneuse/mime/greaterwall
|
||||
spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime
|
||||
spellname = "Invisible Greater Wall"
|
||||
desc = "It contains illustrations of the great walls of human history."
|
||||
desc = "It contains illustrations of the great walls of human history."
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
else
|
||||
message = "<span class='notice'>You must hold the desired item in your hands to mark it for recall.</span>"
|
||||
|
||||
else if(marked_item && marked_item in hand_items) //unlinking item to the spell
|
||||
else if(marked_item && (marked_item in hand_items)) //unlinking item to the spell
|
||||
message = "<span class='notice'>You remove the mark on [marked_item] to use elsewhere.</span>"
|
||||
name = "Instant Summons"
|
||||
marked_item = null
|
||||
@@ -75,7 +75,7 @@
|
||||
B.transfer_identity(C)
|
||||
C.death()
|
||||
add_attack_logs(target, C, "Magically debrained INTENT: [uppertext(target.a_intent)]")*/
|
||||
if(C.stomach_contents && item_to_retrieve in C.stomach_contents)
|
||||
if(C.stomach_contents && (item_to_retrieve in C.stomach_contents))
|
||||
C.stomach_contents -= item_to_retrieve
|
||||
for(var/X in C.bodyparts)
|
||||
var/obj/item/organ/external/part = X
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
L.adjustBrainLoss(-3.5)
|
||||
L.adjustCloneLoss(-1) //Becasue apparently clone damage is the bastion of all health
|
||||
if(ishuman(L))
|
||||
var/var/mob/living/carbon/human/H = L
|
||||
var/mob/living/carbon/human/H = L
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
if(prob(10))
|
||||
E.mend_fracture()
|
||||
|
||||
@@ -1204,7 +1204,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY
|
||||
containername = "hydroponics crate"
|
||||
announce_beacons = list("Hydroponics" = list("Hydroponics"))
|
||||
|
||||
/datum/supply_packs/misc/hydroponics/hydrotank
|
||||
/datum/supply_packs/organic/hydroponics/hydrotank
|
||||
name = "Hydroponics Watertank Crate"
|
||||
contains = list(/obj/item/watertank)
|
||||
cost = 10
|
||||
|
||||
@@ -108,7 +108,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
return desc
|
||||
|
||||
/datum/uplink_item/proc/buy(var/obj/item/uplink/hidden/U, var/mob/user)
|
||||
..()
|
||||
|
||||
if(!istype(U))
|
||||
return 0
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
/proc/key_name_helper(whom, include_name, include_link = FALSE, type = null)
|
||||
if(include_link != FALSE && include_link != TRUE)
|
||||
log_runtime(EXCEPTION("Key_name was called with an incorrect include_link [include_link]"), src)
|
||||
log_runtime(EXCEPTION("Key_name was called with an incorrect include_link [include_link]"))
|
||||
|
||||
var/mob/M
|
||||
var/client/C
|
||||
|
||||
@@ -3,16 +3,14 @@
|
||||
var/obj/machinery/camera/motioncamera = null
|
||||
|
||||
|
||||
/area/ai_monitored/New()
|
||||
..()
|
||||
/area/ai_monitored/LateInitialize()
|
||||
. = ..()
|
||||
// locate and store the motioncamera
|
||||
spawn (20) // spawn on a delay to let turfs/objs load
|
||||
for(var/obj/machinery/camera/M in src)
|
||||
if(M.isMotion())
|
||||
motioncamera = M
|
||||
M.area_motion = src
|
||||
return
|
||||
return
|
||||
for(var/obj/machinery/camera/M in src)
|
||||
if(M.isMotion())
|
||||
motioncamera = M
|
||||
M.area_motion = src
|
||||
break
|
||||
|
||||
/area/ai_monitored/Entered(atom/movable/O)
|
||||
..()
|
||||
|
||||
@@ -125,6 +125,10 @@
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/dna_scannernew/Destroy()
|
||||
eject_occupant()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/eject_occupant()
|
||||
src.go_out()
|
||||
for(var/obj/O in src)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
* Is the gene active in this mob's DNA?
|
||||
*/
|
||||
/datum/dna/gene/proc/is_active(var/mob/M)
|
||||
return M.active_genes && type in M.active_genes
|
||||
return M.active_genes && (type in M.active_genes)
|
||||
|
||||
// Return 1 if we can activate.
|
||||
// HANDLE MUTCHK_FORCED HERE!
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
var/cword = pick(words)
|
||||
words.Remove(cword)
|
||||
var/suffix = copytext(cword,length(cword)-1,length(cword))
|
||||
while(length(cword)>0 && suffix in list(".",",",";","!",":","?"))
|
||||
while(length(cword)>0 && (suffix in list(".",",",";","!",":","?")))
|
||||
cword = copytext(cword,1 ,length(cword)-1)
|
||||
suffix = copytext(cword,length(cword)-1,length(cword) )
|
||||
if(length(cword))
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
var/interceptname = ""
|
||||
switch(report)
|
||||
if(0)
|
||||
..()
|
||||
return
|
||||
if(1)
|
||||
interceptname = "Level 5-6 Biohazard Response Procedures"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
atmosblock = FALSE
|
||||
air_update_turf(1)
|
||||
GLOB.blobs -= src
|
||||
if(isturf(loc)) //Necessary because Expand() is retarded and spawns a blob and then deletes it
|
||||
if(isturf(loc)) //Necessary because Expand() is screwed up and spawns a blob and then deletes it
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if((NOCLONE || SKELETON || HUSK) in target.mutations)
|
||||
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
|
||||
return
|
||||
if(!istype(target) || issmall(target) || NO_DNA in target.dna.species.species_traits)
|
||||
if(!istype(target) || issmall(target) || (NO_DNA in target.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>[target] is not compatible with this ability.</span>")
|
||||
return
|
||||
if(target.mind.changeling)
|
||||
|
||||
@@ -155,12 +155,12 @@
|
||||
/datum/game_mode/cult/proc/get_possible_sac_targets()
|
||||
var/list/possible_sac_targets = list()
|
||||
for(var/mob/living/carbon/human/player in GLOB.player_list)
|
||||
if(player.mind && !is_convertable_to_cult(player.mind) && (player.stat != DEAD))
|
||||
if(player.mind && !is_convertable_to_cult(player.mind) && (player.stat != DEAD) && (!player.mind.offstation_role) )
|
||||
possible_sac_targets += player.mind
|
||||
if(!possible_sac_targets.len)
|
||||
//There are no living Unconvertables on the station. Looking for a Sacrifice Target among the ordinary crewmembers
|
||||
for(var/mob/living/carbon/human/player in GLOB.player_list)
|
||||
if(is_secure_level(player.z)) //We can't sacrifice people that are on the centcom z-level
|
||||
if(is_secure_level(player.z) || player.mind.offstation_role) //We can't sacrifice people that are on the centcom z-level or offstation roles
|
||||
continue
|
||||
if(player.mind && !(player.mind in cult) && (player.stat != DEAD))//make DAMN sure they are not dead
|
||||
possible_sac_targets += player.mind
|
||||
|
||||
@@ -332,10 +332,12 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
user.forceMove(get_turf(actual_selected_rune))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(user.z != T.z)
|
||||
H.bleed(5)
|
||||
if(istype(H))
|
||||
H.bleed(5)
|
||||
user.apply_damage(5, BRUTE)
|
||||
else
|
||||
H.bleed(rand(5,10))
|
||||
if(istype(H))
|
||||
H.bleed(rand(5,10))
|
||||
else
|
||||
fail_invoke()
|
||||
|
||||
@@ -720,7 +722,7 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
log_game("Astral Communion rune failed - more than one user")
|
||||
return list()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!user in T.contents)
|
||||
if(!(user in T.contents))
|
||||
to_chat(user, "<span class='cultitalic'>You must be standing on top of [src]!</span>")
|
||||
log_game("Astral Communion rune failed - user not standing on rune")
|
||||
return list()
|
||||
@@ -832,7 +834,8 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
fail_invoke()
|
||||
log_game("Summon Cultist rune failed - target in away mission")
|
||||
return
|
||||
if((cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained()) && invokers.len < 3)
|
||||
var/hard_summon = (cultist_to_summon.reagents && cultist_to_summon.reagents.has_reagent("holywater")) || cultist_to_summon.restrained()
|
||||
if(hard_summon && invokers.len < 3)
|
||||
to_chat(user, "<span class='cultitalic'>The summoning of [cultist_to_summon] is being blocked somehow! You need 3 chanters to counter it!</span>")
|
||||
fail_invoke()
|
||||
new /obj/effect/temp_visual/cult/sparks(get_turf(cultist_to_summon)) //observer warning
|
||||
@@ -840,7 +843,7 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
return
|
||||
|
||||
..()
|
||||
if(cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained())
|
||||
if(hard_summon)
|
||||
summontime = 20
|
||||
|
||||
if(do_after(user, summontime, target = loc))
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
to_chat(world,text)
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_devils()
|
||||
/var/text = ""
|
||||
var/text = ""
|
||||
if(devils.len)
|
||||
text += "<br><span class='big'><b>The devils were:</b></span>"
|
||||
for(var/D in devils)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/uplink_contents // the contents of the uplink
|
||||
|
||||
/datum/faction/syndicate/proc/assign_objectives(var/datum/mind/traitor)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/* ----- Begin defining syndicate factions ------ */
|
||||
|
||||
@@ -164,11 +164,11 @@
|
||||
if(ishuman(M))
|
||||
if(!M.stat)
|
||||
surviving_humans++
|
||||
if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations)
|
||||
if(M.loc && M.loc.loc && (M.loc.loc.type in escape_locations))
|
||||
escaped_humans++
|
||||
if(!M.stat)
|
||||
surviving_total++
|
||||
if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations)
|
||||
if(M.loc && M.loc.loc && (M.loc.loc.type in escape_locations))
|
||||
escaped_total++
|
||||
|
||||
if(M.loc && M.loc.loc && M.loc.loc.type == SSshuttle.emergency.areaInstance.type && SSshuttle.emergency.mode >= SHUTTLE_ENDGAME)
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
var/unlock_sound //Sound played when an ability is unlocked
|
||||
var/uses
|
||||
|
||||
/datum/AI_Module/proc/upgrade(mob/living/silicon/AI/AI) //Apply upgrades!
|
||||
/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI) //Apply upgrades!
|
||||
return
|
||||
|
||||
/datum/AI_Module/large //Big, powerful stuff that can only be used once.
|
||||
@@ -318,7 +318,7 @@
|
||||
unlock_text = "<span class='notice'>You establish a power diversion to your turrets, upgrading their health and damage.</span>"
|
||||
unlock_sound = 'sound/items/rped.ogg'
|
||||
|
||||
/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/AI/AI)
|
||||
/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
|
||||
for(var/obj/machinery/porta_turret/turret in GLOB.machines)
|
||||
var/turf/T = get_turf(turret)
|
||||
if(is_station_level(T.z))
|
||||
|
||||
@@ -282,4 +282,4 @@
|
||||
/datum/game_mode/proc/update_abductor_icons_removed(datum/mind/alien_mind)
|
||||
var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR]
|
||||
hud.leave_hud(alien_mind.current)
|
||||
set_antag_hud(alien_mind.current, null)
|
||||
set_antag_hud(alien_mind.current, null)
|
||||
|
||||
@@ -296,11 +296,12 @@
|
||||
if(used == TRUE)
|
||||
to_chat(user, "[used_message]")
|
||||
return
|
||||
used = TRUE // Set this BEFORE the popup to prevent people using the injector more than once, polling ghosts multiple times, and receiving multiple guardians.
|
||||
var/choice = alert(user, "[confirmation_message]",, "Yes", "No")
|
||||
if(choice == "No")
|
||||
to_chat(user, "<span class='warning'>You decide against using the [name].</span>")
|
||||
used = FALSE
|
||||
return
|
||||
used = TRUE
|
||||
to_chat(user, "[use_message]")
|
||||
var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_GUARDIAN, 0, 100)
|
||||
var/mob/dead/observer/theghost = null
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
if(iscarbon(target))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
if(heal_cooldown <= world.time && !stat)
|
||||
var/mob/living/carbon/C = target
|
||||
var/mob/living/carbon/human/C = target
|
||||
C.adjustBruteLoss(-5, robotic=1)
|
||||
C.adjustFireLoss(-5, robotic=1)
|
||||
C.adjustOxyLoss(-5)
|
||||
|
||||
@@ -76,13 +76,17 @@
|
||||
adjustToxLoss(-1000)
|
||||
|
||||
if(istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
|
||||
|
||||
var/mob/living/simple_animal/slaughter/demon = src
|
||||
demon.devoured++
|
||||
to_chat(kidnapped, "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>")
|
||||
kidnapped.adjustBruteLoss(1000)
|
||||
kidnapped.forceMove(src)
|
||||
demon.consumed_mobs.Add(kidnapped)
|
||||
if(ishuman(kidnapped))
|
||||
var/mob/living/carbon/human/H = kidnapped
|
||||
if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/U = H.w_uniform
|
||||
U.sensor_mode = SENSOR_OFF
|
||||
else
|
||||
kidnapped.ghostize()
|
||||
qdel(kidnapped)
|
||||
|
||||
@@ -51,8 +51,7 @@ GLOBAL_VAR(bomb_set)
|
||||
GLOB.bomb_set = 1 //So long as there is one nuke timing, it means one nuke is armed.
|
||||
timeleft = max(timeleft - 2, 0) // 2 seconds per process()
|
||||
if(timeleft <= 0)
|
||||
spawn
|
||||
explode()
|
||||
INVOKE_ASYNC(src, .proc/explode)
|
||||
SSnanoui.update_uis(src)
|
||||
return
|
||||
|
||||
@@ -347,6 +346,9 @@ GLOBAL_VAR(bomb_set)
|
||||
/obj/machinery/nuclearbomb/blob_act(obj/structure/blob/B)
|
||||
if(timing == -1.0)
|
||||
return
|
||||
if(timing) //boom
|
||||
INVOKE_ASYNC(src, .proc/explode)
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/nuclearbomb/tesla_act(power, explosive)
|
||||
|
||||
@@ -231,7 +231,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return 0
|
||||
|
||||
/datum/objective/block
|
||||
explanation_text = "Do not allow any lifeforms, be it organic or synthetic to escape on the shuttle alive. AIs, Cyborgs, and pAIs are not considered alive."
|
||||
explanation_text = "Do not allow any lifeforms, be it organic or synthetic to escape on the shuttle alive. AIs, Cyborgs, Maintenance drones, and pAIs are not considered alive."
|
||||
martyr_compatible = 1
|
||||
|
||||
/datum/objective/block/check_completion()
|
||||
@@ -243,15 +243,14 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return 0
|
||||
|
||||
var/area/A = SSshuttle.emergency.areaInstance
|
||||
var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot)
|
||||
|
||||
for(var/mob/living/player in GLOB.player_list)
|
||||
if(player.type in protected_mobs)
|
||||
continue
|
||||
if(issilicon(player))
|
||||
continue // If they're silicon, they're not considered alive, skip them.
|
||||
|
||||
if(player.mind && player.stat != DEAD)
|
||||
if(get_area(player) == A)
|
||||
return 0
|
||||
return 0 // If there are any other organic mobs on the shuttle, you failed the objective.
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
var/turf/location = get_turf(E.loc)
|
||||
var/area/escape_zone = SSshuttle.emergency.areaInstance
|
||||
|
||||
if(E.stat != DEAD && location in escape_zone) // Escapee Scores
|
||||
if(E.stat != DEAD && (location in escape_zone)) // Escapee Scores
|
||||
cash_score = get_score_container_worth(E)
|
||||
|
||||
if(cash_score > GLOB.score_richestcash)
|
||||
|
||||
@@ -76,12 +76,12 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/aicard/C)
|
||||
|
||||
/datum/theft_objective/blueprints
|
||||
name = "the station blueprints"
|
||||
typepath = /obj/item/areaeditor/blueprints
|
||||
typepath = /obj/item/areaeditor/blueprints/ce
|
||||
protected_jobs = list("Chief Engineer")
|
||||
altitems = list(/obj/item/photo)
|
||||
|
||||
/datum/objective_item/steal/blueprints/check_special_completion(obj/item/I)
|
||||
if(istype(I, /obj/item/areaeditor/blueprints))
|
||||
if(istype(I, /obj/item/areaeditor/blueprints/ce))
|
||||
return 1
|
||||
if(istype(I, /obj/item/photo))
|
||||
var/obj/item/photo/P = I
|
||||
|
||||
@@ -168,4 +168,4 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
|
||||
if(summon_type == SUMMON_MAGIC)
|
||||
give_magic(H)
|
||||
else
|
||||
give_guns(H)
|
||||
give_guns(H)
|
||||
|
||||
@@ -280,7 +280,7 @@
|
||||
SH.mind.transfer_to(C)
|
||||
if(iscultist(C))
|
||||
var/datum/action/innate/cultcomm/CC = new()
|
||||
CC.Grant(C) //We have to grant the cult comms again because they're lost during the mind transfer.
|
||||
CC.Grant(C) //We have to grant the cult comms again because they're lost during the mind transfer.
|
||||
qdel(T)
|
||||
qdel(SH)
|
||||
to_chat(C, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
/obj/item/implant/dust
|
||||
)
|
||||
backpack = /obj/item/storage/backpack/satchel
|
||||
backpack_contents = list(
|
||||
/obj/item/stamp/centcom = 1,
|
||||
)
|
||||
box = /obj/item/storage/box/centcomofficer
|
||||
cybernetic_implants = list(
|
||||
/obj/item/organ/internal/cyberimp/chest/nutriment/plus
|
||||
|
||||
@@ -12,9 +12,6 @@
|
||||
var/department_flag = 0
|
||||
var/department_head = list()
|
||||
|
||||
//Players will be allowed to spawn in as jobs that are set to "Station"
|
||||
var/list/faction = list("Station")
|
||||
|
||||
//How many players can be this job
|
||||
var/total_positions = 0
|
||||
|
||||
@@ -172,8 +169,8 @@
|
||||
if(box && H.dna.species.speciesbox)
|
||||
box = H.dna.species.speciesbox
|
||||
|
||||
if(allow_loadout && H.client && (H.client.prefs.gear && H.client.prefs.gear.len))
|
||||
for(var/gear in H.client.prefs.gear)
|
||||
if(allow_loadout && H.client && (H.client.prefs.loadout_gear && H.client.prefs.loadout_gear.len))
|
||||
for(var/gear in H.client.prefs.loadout_gear)
|
||||
var/datum/gear/G = GLOB.gear_datums[gear]
|
||||
if(G)
|
||||
var/permitted = FALSE
|
||||
@@ -211,7 +208,7 @@
|
||||
|
||||
if(gear_leftovers.len)
|
||||
for(var/datum/gear/G in gear_leftovers)
|
||||
var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.gear[G.display_name]))
|
||||
var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.loadout_gear[G.display_name]))
|
||||
if(istype(placed_in))
|
||||
if(isturf(placed_in))
|
||||
to_chat(H, "<span class='notice'>Placing [G.display_name] on [placed_in]!</span>")
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter))
|
||||
return O:id_tag in sensors
|
||||
|
||||
/obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, link/context)
|
||||
/obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, context)
|
||||
sensors[O:id_tag] = reject_bad_name(clean_input(user, "Choose a sensor label:", "Sensor Label"), allow_numbers=1)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -34,9 +34,8 @@
|
||||
var/in_use_lights = 0 // TO BE IMPLEMENTED
|
||||
var/toggle_sound = 'sound/items/wirecutter.ogg'
|
||||
|
||||
|
||||
/obj/machinery/camera/New()
|
||||
..()
|
||||
/obj/machinery/camera/Initialize()
|
||||
. = ..()
|
||||
wires = new(src)
|
||||
assembly = new(src)
|
||||
assembly.state = 4
|
||||
@@ -45,9 +44,6 @@
|
||||
|
||||
GLOB.cameranet.cameras += src
|
||||
GLOB.cameranet.addCamera(src)
|
||||
|
||||
/obj/machinery/camera/Initialize()
|
||||
..()
|
||||
if(is_station_level(z) && prob(3) && !start_active)
|
||||
toggle_cam(null, FALSE)
|
||||
wires.CutAll()
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
// EMP
|
||||
|
||||
/obj/machinery/camera/emp_proof/New()
|
||||
..()
|
||||
/obj/machinery/camera/emp_proof/Initialize()
|
||||
. = ..()
|
||||
upgradeEmpProof()
|
||||
|
||||
// X-RAY
|
||||
@@ -11,20 +11,20 @@
|
||||
/obj/machinery/camera/xray
|
||||
icon_state = "xraycam" // Thanks to Krutchen for the icons.
|
||||
|
||||
/obj/machinery/camera/xray/New()
|
||||
..()
|
||||
/obj/machinery/camera/xray/Initialize()
|
||||
. = ..()
|
||||
upgradeXRay()
|
||||
|
||||
// MOTION
|
||||
|
||||
/obj/machinery/camera/motion/New()
|
||||
..()
|
||||
/obj/machinery/camera/motion/Initialize()
|
||||
. = ..()
|
||||
upgradeMotion()
|
||||
|
||||
// ALL UPGRADES
|
||||
|
||||
/obj/machinery/camera/all/New()
|
||||
..()
|
||||
/obj/machinery/camera/all/Initialize()
|
||||
. = ..()
|
||||
upgradeEmpProof()
|
||||
upgradeXRay()
|
||||
upgradeMotion()
|
||||
|
||||
@@ -4,7 +4,19 @@
|
||||
//Potential replacement for genetics revives or something I dunno (?)
|
||||
|
||||
#define CLONE_BIOMASS 150
|
||||
#define BIOMASS_MEAT_AMOUNT 50
|
||||
|
||||
#define BIOMASS_BASE_AMOUNT 50 // How much biomass a BIOMASSABLE item gives the cloning pod
|
||||
|
||||
// Not a comprehensive list: Further PRs should add appropriate items here.
|
||||
// Meat as usual, monstermeat covers goliath, xeno, spider, bear meat
|
||||
GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
/obj/item/reagent_containers/food/snacks/meat,\
|
||||
/obj/item/reagent_containers/food/snacks/monstermeat,
|
||||
/obj/item/reagent_containers/food/snacks/carpmeat,
|
||||
/obj/item/reagent_containers/food/snacks/salmonmeat,
|
||||
/obj/item/reagent_containers/food/snacks/catfishmeat,
|
||||
/obj/item/reagent_containers/food/snacks/tofurkey))
|
||||
|
||||
#define MINIMUM_HEAL_LEVEL 40
|
||||
#define CLONE_INITIAL_DAMAGE 190
|
||||
#define BRAIN_INITIAL_DAMAGE 90 // our minds are too feeble for 190
|
||||
@@ -17,6 +29,7 @@
|
||||
icon = 'icons/obj/cloning.dmi'
|
||||
icon_state = "pod_0"
|
||||
req_access = list(ACCESS_GENETICS) //For premature unlocking.
|
||||
|
||||
var/mob/living/carbon/human/occupant
|
||||
var/heal_level //The clone is released once its health reaches this level.
|
||||
var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine.
|
||||
@@ -302,13 +315,14 @@
|
||||
attempting = 0
|
||||
return 1
|
||||
|
||||
//Grow clones to maturity then kick them out. FREELOADERS
|
||||
//Grow clones to maturity then kick them out. FREELOADERS
|
||||
/obj/machinery/clonepod/process()
|
||||
var/show_message = 0
|
||||
for(var/obj/item/reagent_containers/food/snacks/meat/meat in range(1, src))
|
||||
qdel(meat)
|
||||
biomass += BIOMASS_MEAT_AMOUNT
|
||||
show_message = 1
|
||||
var/show_message = FALSE
|
||||
for(var/obj/item/item in range(1, src))
|
||||
if(is_type_in_list(item, GLOB.cloner_biomass_items))
|
||||
qdel(item)
|
||||
biomass += BIOMASS_BASE_AMOUNT
|
||||
show_message = TRUE
|
||||
if(show_message)
|
||||
visible_message("[src] sucks in and processes the nearby biomass.")
|
||||
|
||||
@@ -381,11 +395,11 @@
|
||||
to_chat(user, "<span class='notice'>You force an emergency ejection.</span>")
|
||||
go_out()
|
||||
|
||||
//Removing cloning pod biomass
|
||||
else if(istype(I, /obj/item/reagent_containers/food/snacks/meat))
|
||||
// A user can feed in biomass sources manually.
|
||||
else if(is_type_in_list(I, GLOB.cloner_biomass_items))
|
||||
if(user.drop_item())
|
||||
to_chat(user, "<span class='notice'>[src] processes [I].</span>")
|
||||
biomass += BIOMASS_MEAT_AMOUNT
|
||||
biomass += BIOMASS_BASE_AMOUNT
|
||||
qdel(I)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(minor_air_alarms)
|
||||
|
||||
/obj/machinery/computer/atmos_alert/New()
|
||||
..()
|
||||
SSalarms.atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon)
|
||||
SSalarms.atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/.proc/update_icon)
|
||||
|
||||
/obj/machinery/computer/atmos_alert/Destroy()
|
||||
SSalarms.atmosphere_alarm.unregister(src)
|
||||
|
||||
@@ -133,7 +133,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
if(!istype(id_card))
|
||||
return ..()
|
||||
|
||||
if(!scan && ACCESS_CHANGE_IDS in id_card.access)
|
||||
if(!scan && (ACCESS_CHANGE_IDS in id_card.access))
|
||||
user.drop_item()
|
||||
id_card.loc = src
|
||||
scan = id_card
|
||||
|
||||
@@ -499,7 +499,6 @@
|
||||
if(!frequency) return
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
status_signal.transmission_method = 1
|
||||
status_signal.data["command"] = command
|
||||
|
||||
@@ -507,13 +506,13 @@
|
||||
if("message")
|
||||
status_signal.data["msg1"] = data1
|
||||
status_signal.data["msg2"] = data2
|
||||
log_admin("STATUS: [user] set status screen message with [src]: [data1] [data2]")
|
||||
log_admin("STATUS: [user] set status screen message: [data1] [data2]")
|
||||
//message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]")
|
||||
if("alert")
|
||||
status_signal.data["picture_state"] = data1
|
||||
|
||||
spawn(0)
|
||||
frequency.post_signal(src, status_signal)
|
||||
frequency.post_signal(null, status_signal)
|
||||
|
||||
|
||||
/obj/machinery/computer/communications/Destroy()
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/obj/machinery/computer/station_alert/New()
|
||||
..()
|
||||
alarm_monitor = new monitor_type(src)
|
||||
alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon)
|
||||
alarm_monitor.register(src, /obj/machinery/computer/station_alert/.proc/update_icon)
|
||||
|
||||
/obj/machinery/computer/station_alert/Destroy()
|
||||
alarm_monitor.unregister(src)
|
||||
|
||||
@@ -275,6 +275,12 @@
|
||||
|
||||
return control_computer != null
|
||||
|
||||
// So the user can use movement keys to get out of the cryopod
|
||||
/obj/machinery/cryopod/relaymove(mob/user)
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
go_out()
|
||||
|
||||
/obj/machinery/cryopod/proc/check_occupant_allowed(mob/M)
|
||||
var/correct_type = 0
|
||||
for(var/type in allow_occupant_types)
|
||||
|
||||
@@ -12,5 +12,5 @@
|
||||
for(var/obj/machinery/door/D in locate(x,y,z))
|
||||
if(!istype(D, /obj/machinery/door/window) && D.density)
|
||||
return 0
|
||||
//There are no false wall checks because that would be fucking retarded
|
||||
//There are no false wall checks because that would be foolish
|
||||
return 1
|
||||
|
||||
@@ -95,7 +95,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
|
||||
to_chat(user, "<span class='notice'>[src] is already printing something, please wait.</span>")
|
||||
return
|
||||
atom_say("<span class='notice'>Printing explosive log. Standby...</span>")
|
||||
addtimer(CALLBACK(src, .print), 50)
|
||||
addtimer(CALLBACK(src, .proc/print), 50)
|
||||
|
||||
/obj/machinery/doppler_array/proc/print()
|
||||
visible_message("<span class='notice'>[src] prints a piece of paper!</span>")
|
||||
|
||||
@@ -193,5 +193,5 @@
|
||||
|
||||
/obj/machinery/computer/guestpass/hop/get_changeable_accesses()
|
||||
. = ..()
|
||||
if(. && ACCESS_CHANGE_IDS in .)
|
||||
if(. && (ACCESS_CHANGE_IDS in .))
|
||||
return get_all_accesses()
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
lasercolor = "b"
|
||||
installation = /obj/item/gun/energy/laser/tag/blue
|
||||
|
||||
/obj/machinery/porta_turret/tag/New()
|
||||
..()
|
||||
/obj/machinery/porta_turret/tag/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "[lasercolor]grey_target_prism"
|
||||
|
||||
/obj/machinery/porta_turret/tag/weapon_setup(var/obj/item/gun/energy/E)
|
||||
|
||||
@@ -87,8 +87,8 @@
|
||||
lethal = 1
|
||||
installation = /obj/item/gun/energy/laser
|
||||
|
||||
/obj/machinery/porta_turret/New()
|
||||
..()
|
||||
/obj/machinery/porta_turret/Initialize(mapload)
|
||||
. = ..()
|
||||
if(req_access && req_access.len)
|
||||
req_access.Cut()
|
||||
req_one_access = list(ACCESS_SECURITY, ACCESS_HEADS)
|
||||
@@ -105,8 +105,8 @@
|
||||
QDEL_NULL(spark_system)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/porta_turret/centcom/New()
|
||||
..()
|
||||
/obj/machinery/porta_turret/centcom/Initialize(mapload)
|
||||
. = ..()
|
||||
if(req_one_access && req_one_access.len)
|
||||
req_one_access.Cut()
|
||||
req_access = list(ACCESS_CENT_SPECOPS)
|
||||
@@ -1015,8 +1015,8 @@ GLOBAL_LIST_EMPTY(turret_icons)
|
||||
depotarea.declare_started()
|
||||
return ..(target)
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/New()
|
||||
..()
|
||||
/obj/machinery/porta_turret/syndicate/Initialize(mapload)
|
||||
. = ..()
|
||||
if(req_one_access && req_one_access.len)
|
||||
req_one_access.Cut()
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
try_detonate(TRUE)
|
||||
//Counter terrorists win
|
||||
else if(!active || defused)
|
||||
if(defused && payload in src)
|
||||
if(defused && (payload in src))
|
||||
payload.defuse()
|
||||
countdown.stop()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
return istype(O,/obj/machinery/telecomms)
|
||||
|
||||
/obj/machinery/telecomms/isLinkedWith(var/obj/O)
|
||||
return O != null && O in links
|
||||
return O != null && (O in links)
|
||||
|
||||
/obj/machinery/telecomms/getLink(var/idx)
|
||||
return (idx >= 1 && idx <= links.len) ? links[idx] : null
|
||||
@@ -362,14 +362,15 @@
|
||||
if(href_list["link"])
|
||||
|
||||
if(P)
|
||||
if(P.buffer && P.buffer != src)
|
||||
if(!(src in P.buffer:links))
|
||||
P.buffer:links.Add(src)
|
||||
var/obj/machinery/telecomms/T = P.buffer
|
||||
if(istype(T) && T != src)
|
||||
if(!(src in T.links))
|
||||
T.links += src
|
||||
|
||||
if(!(P.buffer in src.links))
|
||||
src.links.Add(P.buffer)
|
||||
if(!(T in links))
|
||||
links += T
|
||||
|
||||
temp = "<font color = #666633>-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-</font>"
|
||||
temp = "<font color = #666633>-% Successfully linked with [(T.UID())] [T.name] %-</font>"
|
||||
|
||||
else
|
||||
temp = "<font color = #666633>-% Unable to acquire buffer %-</font>"
|
||||
|
||||
@@ -436,7 +436,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
|
||||
|
||||
// Arrays
|
||||
if(href_list["create_item"])
|
||||
if(href_list["array"] && href_list["array"] in arrays)
|
||||
if(href_list["array"] && (href_list["array"] in arrays))
|
||||
if(requires_unlock[href_list["array"]] && !source.unlocked)
|
||||
return
|
||||
var/new_value = clean_input(user, "Provide a value for the new index.", "New Index")
|
||||
@@ -448,7 +448,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new())
|
||||
log_action(user, "updated [href_list["array"]] - new value [new_value]", TRUE)
|
||||
|
||||
if(href_list["delete_item"])
|
||||
if(href_list["array"] && href_list["array"] in arrays)
|
||||
if(href_list["array"] && (href_list["array"] in arrays))
|
||||
if(requires_unlock[href_list["array"]] && !source.unlocked)
|
||||
return
|
||||
var/list/array = vars[href_list["array"]]
|
||||
|
||||
@@ -93,7 +93,7 @@ GLOBAL_LIST_EMPTY(telecomms_list)
|
||||
|
||||
/obj/machinery/telecomms/proc/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from)
|
||||
// receive information from linked machinery
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal)
|
||||
// return 1 if found, 0 if not found
|
||||
|
||||
@@ -540,7 +540,7 @@
|
||||
|
||||
|
||||
/obj/mecha/attack_alien(mob/living/user)
|
||||
log_message("Attack by alien. Attacker - [user].", color = "red")
|
||||
log_message("Attack by alien. Attacker - [user].", TRUE)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE)
|
||||
attack_generic(user, 15, BRUTE, "melee", 0)
|
||||
|
||||
@@ -1094,7 +1094,7 @@
|
||||
to_chat(user, "<span class='warning'>You stop entering the exosuit!</span>")
|
||||
|
||||
/obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||
if(H && H.client && H in range(1))
|
||||
if(H && H.client && (H in range(1)))
|
||||
occupant = H
|
||||
H.stop_pulling()
|
||||
H.forceMove(src)
|
||||
@@ -1141,7 +1141,7 @@
|
||||
return 0
|
||||
|
||||
/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc,mob/user)
|
||||
if(mmi_as_oc && user in range(1))
|
||||
if(mmi_as_oc && (user in range(1)))
|
||||
if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
|
||||
to_chat(user, "Consciousness matrix not detected.")
|
||||
return 0
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
..()
|
||||
if(href_list["drop_from_cargo"])
|
||||
var/obj/O = locate(href_list["drop_from_cargo"])
|
||||
if(O && O in cargo)
|
||||
if(O && (O in cargo))
|
||||
occupant_message("<span class='notice'>You unload [O].</span>")
|
||||
O.loc = get_turf(src)
|
||||
cargo -= O
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//TODO: Flash range does nothing currently
|
||||
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0, silent = 0, smoke = 1, cause = null, breach = TRUE)
|
||||
src = null //so we don't abort once src is deleted
|
||||
epicenter = get_turf(epicenter)
|
||||
|
||||
// Archive the uncapped explosion for the doppler array
|
||||
|
||||
@@ -328,3 +328,5 @@
|
||||
desc = "A digital copy of the station blueprints stored in your memory."
|
||||
fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station."
|
||||
|
||||
/obj/item/areaeditor/blueprints/ce
|
||||
|
||||
|
||||
@@ -84,27 +84,29 @@
|
||||
|
||||
|
||||
/obj/item/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, targeted = 1)
|
||||
add_attack_logs(user, M, "Flashed with [src]")
|
||||
if(user && targeted)
|
||||
if(M.weakeyes)
|
||||
M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
|
||||
if(M.flash_eyes(1, 1))
|
||||
M.AdjustConfused(power)
|
||||
terrible_conversion_proc(M, user)
|
||||
M.Stun(1)
|
||||
visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
to_chat(user, "<span class='danger'>You blind [M] with the flash!</span>")
|
||||
to_chat(M, "<span class='userdanger'>[user] blinds you with the flash!</span>")
|
||||
if(user)
|
||||
add_attack_logs(user, M, "Flashed with [src]")
|
||||
if(targeted)
|
||||
if(M.weakeyes)
|
||||
M.Stun(2)
|
||||
M.visible_message("<span class='disarm'>[M] gasps and shields [M.p_their()] eyes!</span>", "<span class='userdanger'>You gasp and shields your eyes!</span>")
|
||||
else
|
||||
visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
|
||||
to_chat(user, "<span class='warning'>You fail to blind [M] with the flash!</span>")
|
||||
to_chat(M, "<span class='danger'>[user] fails to blind you with the flash!</span>")
|
||||
else
|
||||
if(M.flash_eyes())
|
||||
M.AdjustConfused(power)
|
||||
M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
|
||||
if(M.flash_eyes(1, 1))
|
||||
M.AdjustConfused(power)
|
||||
terrible_conversion_proc(M, user)
|
||||
M.Stun(1)
|
||||
visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
to_chat(user, "<span class='danger'>You blind [M] with the flash!</span>")
|
||||
to_chat(M, "<span class='userdanger'>[user] blinds you with the flash!</span>")
|
||||
if(M.weakeyes)
|
||||
M.Stun(2)
|
||||
M.visible_message("<span class='disarm'>[M] gasps and shields [M.p_their()] eyes!</span>", "<span class='userdanger'>You gasp and shields your eyes!</span>")
|
||||
else
|
||||
visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
|
||||
to_chat(user, "<span class='warning'>You fail to blind [M] with the flash!</span>")
|
||||
to_chat(M, "<span class='danger'>[user] fails to blind you with the flash!</span>")
|
||||
return
|
||||
|
||||
if(M.flash_eyes())
|
||||
M.AdjustConfused(power)
|
||||
|
||||
/obj/item/flash/attack(mob/living/M, mob/user)
|
||||
if(!try_use_flash(user))
|
||||
|
||||
@@ -103,6 +103,13 @@
|
||||
/obj/item/radio/headset/syndicate/alt/syndteam
|
||||
ks1type = /obj/item/encryptionkey/syndteam
|
||||
|
||||
/obj/item/radio/headset/syndicate/alt/lavaland
|
||||
name = "syndicate lavaland headset"
|
||||
|
||||
/obj/item/radio/headset/syndicate/alt/lavaland/New()
|
||||
. = ..()
|
||||
set_frequency(SYND_FREQ)
|
||||
|
||||
/obj/item/radio/headset/binary
|
||||
origin_tech = "syndicate=3"
|
||||
ks1type = /obj/item/encryptionkey/binary
|
||||
|
||||
@@ -458,7 +458,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
|
||||
R.receive_signal(signal)
|
||||
|
||||
// Receiving code can be located in Telecommunications.dm
|
||||
return signal.data["done"] && position.z in signal.data["level"]
|
||||
return signal.data["done"] && (position.z in signal.data["level"])
|
||||
|
||||
|
||||
/* ###### Intercoms and station-bounced radios ###### */
|
||||
@@ -510,7 +510,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
|
||||
|
||||
sleep(rand(10,25)) // wait a little...
|
||||
|
||||
if(signal.data["done"] && position.z in signal.data["level"])
|
||||
if(signal.data["done"] && (position.z in signal.data["level"]))
|
||||
// we're done here.
|
||||
return 1
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ REAGENT SCANNER
|
||||
if(H.getBrainLoss() >= 100)
|
||||
to_chat(user, "<span class='warning'>Subject is brain dead.</span>")
|
||||
else if(H.getBrainLoss() >= 60)
|
||||
to_chat(user, "<span class='warning'>Severe brain damage detected. Subject likely to have mental retardation.</span>")
|
||||
to_chat(user, "<span class='warning'>Severe brain damage detected. Subject likely to have dementia.</span>")
|
||||
else if(H.getBrainLoss() >= 10)
|
||||
to_chat(user, "<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
|
||||
else
|
||||
|
||||
@@ -168,7 +168,6 @@ GLOBAL_LIST_EMPTY(world_uplinks)
|
||||
to_chat(user, "<span class='notice'>[I] refunded.</span>")
|
||||
qdel(I)
|
||||
return
|
||||
..()
|
||||
|
||||
// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it.
|
||||
/* How to create an uplink in 3 easy steps!
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
|
||||
var/input_flag = input(user, "Choose a flag to disguise as.", "Choose a flag.") in show_flag
|
||||
|
||||
if(user && src in user.contents)
|
||||
if(user && (src in user.contents))
|
||||
|
||||
var/obj/item/flag/chosen_flag = flag[input_flag]
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
|
||||
icon = 'icons/obj/nanopaste.dmi'
|
||||
icon_state = "tube"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "materials=2;engineering=3"
|
||||
amount = 6
|
||||
max_amount = 6
|
||||
|
||||
@@ -50,7 +50,8 @@
|
||||
|
||||
/obj/item/weldingtool/process()
|
||||
var/turf/T = get_turf(src)
|
||||
T.hotspot_expose(2500, 5)
|
||||
if(T) // Implants for instance won't find a turf
|
||||
T.hotspot_expose(2500, 5)
|
||||
if(prob(5))
|
||||
remove_fuel(1)
|
||||
..()
|
||||
|
||||
@@ -143,9 +143,8 @@ AI MODULES
|
||||
target.set_zeroth_law(law)
|
||||
GLOB.lawchanges.Add("The law specified [targetName]")
|
||||
else
|
||||
to_chat(target, "[sender.real_name] attempted to modify your zeroth law.")// And lets them know that someone tried. --NeoFite
|
||||
|
||||
to_chat(target, "It would be in your best interest to play along with [sender.real_name] that [law]")
|
||||
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to modify your zeroth law.</span>")// And lets them know that someone tried. --NeoFite
|
||||
to_chat(target, "<span class='bnotice'>It would be in your best interest to play along with [sender.real_name] that [law]</span>")
|
||||
GLOB.lawchanges.Add("The law specified [targetName], but the AI's existing law 0 cannot be overridden.")
|
||||
|
||||
/******************** ProtectStation ********************/
|
||||
@@ -222,11 +221,11 @@ AI MODULES
|
||||
log_law_changes(target, sender)
|
||||
|
||||
if(!is_special_character(target))
|
||||
target.set_zeroth_law("")
|
||||
target.clear_zeroth_law()
|
||||
target.laws.clear_supplied_laws()
|
||||
target.laws.clear_ion_laws()
|
||||
|
||||
to_chat(target, "[sender.real_name] attempted to reset your laws using a reset module.")
|
||||
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to reset your laws using a reset module.</span>")
|
||||
target.show_laws()
|
||||
|
||||
/******************** Purge ********************/
|
||||
@@ -238,8 +237,8 @@ AI MODULES
|
||||
/obj/item/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
if(!is_special_character(target))
|
||||
target.set_zeroth_law("")
|
||||
to_chat(target, "[sender.real_name] attempted to wipe your laws using a purge module.")
|
||||
target.clear_zeroth_law()
|
||||
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to wipe your laws using a purge module.</span>")
|
||||
target.clear_supplied_laws()
|
||||
target.clear_ion_laws()
|
||||
target.clear_inherent_laws()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(PA)
|
||||
qdel(PA)
|
||||
else
|
||||
PA = new(src)
|
||||
PA = new(user, src)
|
||||
user.put_in_hands(PA)
|
||||
|
||||
/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user)
|
||||
@@ -55,7 +55,7 @@
|
||||
var/obj/structure/chrono_field/field = null
|
||||
var/turf/startpos = null
|
||||
|
||||
/obj/item/gun/energy/chrono_gun/New(var/obj/item/chrono_eraser/T)
|
||||
/obj/item/gun/energy/chrono_gun/Initialize(mapload, obj/item/chrono_eraser/T)
|
||||
. = ..()
|
||||
if(istype(T))
|
||||
TED = T
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user