Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master' into wizloadouts

This commit is contained in:
datlo
2020-05-02 10:25:05 +02:00
274 changed files with 1182 additions and 1009 deletions
+26 -56
View File
@@ -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
+10
View File
@@ -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
+11
View File
@@ -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"
},
+1 -1
View File
@@ -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"
-145
View File
@@ -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
+157
View File
@@ -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
+26
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -3,4 +3,4 @@
#define CONVERSION_LOG "Conversion"
#define SAY_LOG "Say"
#define EMOTE_LOG "Emote"
#define MISC_LOG "Misc"
#define MISC_LOG "Misc"
+1 -1
View File
@@ -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
+1
View File
@@ -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
View File
@@ -1,4 +1,5 @@
/proc/get_area(atom/A)
RETURN_TYPE(/area)
if(isarea(A))
return A
var/turf/T = get_turf(A)
+12
View File
@@ -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
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+2 -2
View File
@@ -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)
+7 -7
View File
@@ -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)
+85
View File
@@ -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
+2 -1
View File
@@ -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
+11 -2
View File
@@ -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]")
+1 -6
View File
@@ -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
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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>")
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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
View File
@@ -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"
-1
View File
@@ -22,5 +22,4 @@
/mutable_appearance/clean/New()
. = ..()
alpha = 255
opacity = 1
transform = null
+4 -1
View File
@@ -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
+3 -1
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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>")
+1 -1
View File
@@ -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."
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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
-1
View File
@@ -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
+1 -1
View File
@@ -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
+7 -9
View File
@@ -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)
..()
+4
View File
@@ -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)
+1 -1
View File
@@ -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!
+1 -1
View File
@@ -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))
-1
View File
@@ -3,7 +3,6 @@
var/interceptname = ""
switch(report)
if(0)
..()
return
if(1)
interceptname = "Level 5-6 Biohazard Response Procedures"
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+8 -5
View File
@@ -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))
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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 ------ */
+2 -2
View File
@@ -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)
+4 -2
View File
@@ -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)
+4 -5
View File
@@ -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
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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>")
+3
View File
@@ -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
+3 -6
View File
@@ -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>")
+1 -1
View File
@@ -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
+2 -6
View File
@@ -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()
+8 -8
View File
@@ -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()
+24 -10
View File
@@ -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 ..()
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+6
View File
@@ -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
+1 -1
View File
@@ -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>")
+1 -1
View File
@@ -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()
+2 -2
View File
@@ -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)
+6 -6
View File
@@ -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)
+1 -1
View File
@@ -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>"
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
+2
View File
@@ -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
+22 -20
View File
@@ -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
+1 -1
View File
@@ -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!
+1 -1
View File
@@ -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
+2 -1
View File
@@ -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