diff --git a/.travis.yml b/.travis.yml
index 979e35f6aed..694cfb654e4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,74 +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
+ - tools/travis/install_build_deps.sh
- tools/travis/install_dreamchecker.sh
- before_script: skip
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
diff --git a/_build_dependencies.sh b/_build_dependencies.sh
index f9bddd66134..24a33ed3644 100644
--- a/_build_dependencies.sh
+++ b/_build_dependencies.sh
@@ -1,2 +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
diff --git a/_maps/test_all_maps.dm b/_maps/test_all_maps.dm
deleted file mode 100644
index 94bd9bac437..00000000000
--- a/_maps/test_all_maps.dm
+++ /dev/null
@@ -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
diff --git a/_maps/travis_map_testing.dm b/_maps/travis_map_testing.dm
new file mode 100644
index 00000000000..89fc4ec49ce
--- /dev/null
+++ b/_maps/travis_map_testing.dm
@@ -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
diff --git a/code/__DEFINES/logs.dm b/code/__DEFINES/logs.dm
index a8a4a457c7c..25d1fac7323 100644
--- a/code/__DEFINES/logs.dm
+++ b/code/__DEFINES/logs.dm
@@ -3,4 +3,4 @@
#define CONVERSION_LOG "Conversion"
#define SAY_LOG "Say"
#define EMOTE_LOG "Emote"
-#define MISC_LOG "Misc"
\ No newline at end of file
+#define MISC_LOG "Misc"
diff --git a/code/datums/diseases/critical.dm b/code/datums/diseases/critical.dm
index 8dc910e3baf..3afb48ce534 100644
--- a/code/datums/diseases/critical.dm
+++ b/code/datums/diseases/critical.dm
@@ -199,4 +199,4 @@
affected_mob.emote("collapse")
if(prob(12))
to_chat(affected_mob, "You feel [pick("tired", "exhausted", "sluggish")].")
- affected_mob.Slowed(rand(4, 16))
\ No newline at end of file
+ affected_mob.Slowed(rand(4, 16))
diff --git a/code/datums/spells/mime.dm b/code/datums/spells/mime.dm
index d0c052649d9..11b0a75b275 100644
--- a/code/datums/spells/mime.dm
+++ b/code/datums/spells/mime.dm
@@ -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."
\ No newline at end of file
+ desc = "It contains illustrations of the great walls of human history."
diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm
index 1888d0e4a1d..60de5ba4238 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction.dm
@@ -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)
\ No newline at end of file
+ set_antag_hud(alien_mind.current, null)
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index 3dbd9211399..82f6d833d16 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -168,4 +168,4 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
if(summon_type == SUMMON_MAGIC)
give_magic(H)
else
- give_guns(H)
\ No newline at end of file
+ give_guns(H)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index d8b948fc865..de9a9209925 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -431,4 +431,4 @@
if("l_hand")
. = "left hand"
if("r_hand")
- . = "right hand"
\ No newline at end of file
+ . = "right hand"
diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm
index 622e0919b45..3a3f4c3d3ac 100644
--- a/code/modules/mob/living/carbon/human/species/slime.dm
+++ b/code/modules/mob/living/carbon/human/species/slime.dm
@@ -198,4 +198,4 @@
#undef SLIMEPERSON_HUNGERCOST
#undef SLIMEPERSON_MINHUNGER
-#undef SLIMEPERSON_REGROWTHDELAY
\ No newline at end of file
+#undef SLIMEPERSON_REGROWTHDELAY
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d93b2723024..d08ef11db0f 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1413,4 +1413,4 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
///Force set the mob nutrition
/mob/proc/set_nutrition(change)
- nutrition = max(0, change)
\ No newline at end of file
+ nutrition = max(0, change)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 2f074aeaa9f..ef972ec97b3 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -211,4 +211,4 @@
var/list/tkgrabbed_objects = list() // Assoc list of items to TK grabs
var/forced_look = null // This can either be a numerical direction or a soft object reference (UID). It makes the mob always face towards the selected thing.
- var/registered_z
\ No newline at end of file
+ var/registered_z
diff --git a/goon/browserassets/html/browserOutput.html b/goon/browserassets/html/browserOutput.html
index a7dfb16abee..ed2c77a306c 100644
--- a/goon/browserassets/html/browserOutput.html
+++ b/goon/browserassets/html/browserOutput.html
@@ -15,7 +15,7 @@
-
+
diff --git a/goon/browserassets/json/unicode_9_annotations.json b/goon/browserassets/js/unicode_9_annotations.js
similarity index 99%
rename from goon/browserassets/json/unicode_9_annotations.json
rename to goon/browserassets/js/unicode_9_annotations.js
index 50b00d32116..483e08d47ff 100644
--- a/goon/browserassets/json/unicode_9_annotations.json
+++ b/goon/browserassets/js/unicode_9_annotations.js
@@ -1487,4 +1487,4 @@ var UNICODE_9_EMOJI = {
"zimbabwe": "πΏπΌ",
"zipper_mouth_face": "π€",
"zzz": "π€"
-};
\ No newline at end of file
+};
diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm
index e85d8e2368a..8caccf84766 100644
--- a/goon/code/datums/browserOutput.dm
+++ b/goon/code/datums/browserOutput.dm
@@ -4,6 +4,7 @@ var/list/chatResources = list(
"goon/browserassets/js/json2.min.js",
"goon/browserassets/js/twemoji.min.js",
"goon/browserassets/js/browserOutput.js",
+ "goon/browserassets/js/unicode_9_annotations.js",
"goon/browserassets/css/fonts/fontawesome-webfont.eot",
"goon/browserassets/css/fonts/fontawesome-webfont.svg",
"goon/browserassets/css/fonts/fontawesome-webfont.ttf",
@@ -12,7 +13,6 @@ var/list/chatResources = list(
"goon/browserassets/css/font-awesome.css",
"goon/browserassets/css/browserOutput.css",
"goon/browserassets/css/browserOutput-dark.css",
- "goon/browserassets/json/unicode_9_annotations.json",
"goon/browserassets/html/saveInstructions.html"
)
diff --git a/install-byond.sh b/install-byond.sh
deleted file mode 100644
index cca44342c60..00000000000
--- a/install-byond.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-set -e
-if [ -d "$HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin" ];
-then
- echo "Using cached directory."
-else
- echo "Setting up BYOND."
- mkdir -p "$HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}"
- cd "$HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}"
- curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip
- unzip byond.zip
- cd byond
- make here
-fi
diff --git a/tools/travis/build_nanoui.sh b/tools/travis/build_nanoui.sh
new file mode 100755
index 00000000000..79ce2643cc9
--- /dev/null
+++ b/tools/travis/build_nanoui.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+set -euo pipefail
+
+npm install -g gulp-cli
+cd nano
+source ~/.nvm/nvm.sh
+npm install --loglevel=error
+node node_modules/gulp/bin/gulp.js --require less-loader
diff --git a/tools/travis/check_changelogs.sh b/tools/travis/check_changelogs.sh
new file mode 100755
index 00000000000..0aab5e388ca
--- /dev/null
+++ b/tools/travis/check_changelogs.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -euo pipefail
+
+md5sum -c - <<< "6dc1b6bf583f3bd4176b6df494caa5f1 *html/changelogs/example.yml"
+python tools/ss13_genchangelog.py html/changelog.html html/changelogs
diff --git a/tools/travis/check_grep.sh b/tools/travis/check_grep.sh
old mode 100644
new mode 100755
diff --git a/dm.sh b/tools/travis/dm.sh
old mode 100644
new mode 100755
similarity index 96%
rename from dm.sh
rename to tools/travis/dm.sh
index 9585e2f1ce3..6bb00a65d7f
--- a/dm.sh
+++ b/tools/travis/dm.sh
@@ -50,7 +50,7 @@ done
if [[ `uname` == MINGW* ]]
then
dm=""
-
+
if hash dm.exe 2>/dev/null
then
dm='dm.exe'
@@ -61,13 +61,13 @@ then
then
dm='/c/Program Files/BYOND/bin/dm.exe'
fi
-
+
if [[ $dm == "" ]]
then
echo "Couldn't find the DreamMaker executable, aborting."
exit 3
fi
-
+
"$dm" $dmepath.mdme 2>&1 | tee result.log
retval=$?
if ! grep '\- 0 errors, 0 warnings' result.log
@@ -77,7 +77,7 @@ then
else
if hash DreamMaker 2>/dev/null
then
- DreamMaker $dmepath.mdme 2>&1 | tee result.log
+ DreamMaker -max_errors 0 $dmepath.mdme 2>&1 | tee result.log
retval=$?
if ! grep '\- 0 errors, 0 warnings' result.log
then
diff --git a/tools/travis/install_build_deps.sh b/tools/travis/install_build_deps.sh
new file mode 100755
index 00000000000..1bdb95fe979
--- /dev/null
+++ b/tools/travis/install_build_deps.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -euo pipefail
+
+source _build_dependencies.sh
+
+source ~/.nvm/nvm.sh
+nvm install $NODE_VERSION
+
+pip install --user PyYaml -q
+pip install --user beautifulsoup4 -q
+
+phpenv global $PHP_VERSION
diff --git a/tools/travis/install_byond.sh b/tools/travis/install_byond.sh
new file mode 100755
index 00000000000..4e73dbb1289
--- /dev/null
+++ b/tools/travis/install_byond.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+set -euo pipefail
+
+source _build_dependencies.sh
+
+if [ -d "$HOME/BYOND/byond/bin" ] && grep -Fxq "${BYOND_MAJOR}.${BYOND_MINOR}" $HOME/BYOND/version.txt;
+then
+ echo "Using cached directory."
+else
+ echo "Setting up BYOND."
+ rm -rf "$HOME/BYOND"
+ mkdir -p "$HOME/BYOND"
+ cd "$HOME/BYOND"
+ curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip
+ unzip byond.zip
+ rm byond.zip
+ cd byond
+ make here
+ echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt"
+ cd ~/
+fi
diff --git a/tools/travis/json_verifier.py b/tools/travis/json_verifier.py
new file mode 100644
index 00000000000..aa746206674
--- /dev/null
+++ b/tools/travis/json_verifier.py
@@ -0,0 +1,20 @@
+import sys
+import json
+
+if len(sys.argv) <= 1:
+ exit(1)
+
+status = 0
+
+for file in sys.argv[1:]:
+ with open(file, encoding="ISO-8859-1") as f:
+ try:
+ json.load(f)
+ except ValueError as exception:
+ print("JSON error in {}".format(file))
+ print(exception)
+ status = 1
+ else:
+ print("Valid {}".format(file))
+
+exit(status)