Committing icons and code edits first

This commit is contained in:
d3athrow
2013-06-02 14:42:41 -05:00
parent 4eb113341d
commit 4c66515b82
84 changed files with 21041 additions and 9065 deletions

View File

@@ -5,15 +5,243 @@
// END_INTERNALS
// BEGIN_FILE_DIR
#define FILE_DIR .
#define FILE_DIR "bot"
#define FILE_DIR "bot/Marakov"
#define FILE_DIR "code"
#define FILE_DIR "code/__HELPERS"
#define FILE_DIR "code/ATMOSPHERICS"
#define FILE_DIR "code/ATMOSPHERICS/components"
#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices"
#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices"
#define FILE_DIR "code/ATMOSPHERICS/components/unary"
#define FILE_DIR "code/controllers"
#define FILE_DIR "code/datums"
#define FILE_DIR "code/datums/diseases"
#define FILE_DIR "code/datums/diseases/advance"
#define FILE_DIR "code/datums/diseases/advance/symptoms"
#define FILE_DIR "code/datums/helper_datums"
#define FILE_DIR "code/datums/spells"
#define FILE_DIR "code/defines"
#define FILE_DIR "code/defines/obj"
#define FILE_DIR "code/defines/procs"
#define FILE_DIR "code/FEA"
#define FILE_DIR "code/game"
#define FILE_DIR "code/game/area"
#define FILE_DIR "code/game/gamemodes"
#define FILE_DIR "code/game/gamemodes/autotraitor"
#define FILE_DIR "code/game/gamemodes/blob"
#define FILE_DIR "code/game/gamemodes/blob/blobs"
#define FILE_DIR "code/game/gamemodes/changeling"
#define FILE_DIR "code/game/gamemodes/cult"
#define FILE_DIR "code/game/gamemodes/epidemic"
#define FILE_DIR "code/game/gamemodes/events"
#define FILE_DIR "code/game/gamemodes/events/holidays"
#define FILE_DIR "code/game/gamemodes/extended"
#define FILE_DIR "code/game/gamemodes/malfunction"
#define FILE_DIR "code/game/gamemodes/meme"
#define FILE_DIR "code/game/gamemodes/meteor"
#define FILE_DIR "code/game/gamemodes/nuclear"
#define FILE_DIR "code/game/gamemodes/revolution"
#define FILE_DIR "code/game/gamemodes/sandbox"
#define FILE_DIR "code/game/gamemodes/traitor"
#define FILE_DIR "code/game/gamemodes/wizard"
#define FILE_DIR "code/game/jobs"
#define FILE_DIR "code/game/jobs/job"
#define FILE_DIR "code/game/machinery"
#define FILE_DIR "code/game/machinery/atmoalter"
#define FILE_DIR "code/game/machinery/bots"
#define FILE_DIR "code/game/machinery/camera"
#define FILE_DIR "code/game/machinery/computer"
#define FILE_DIR "code/game/machinery/doors"
#define FILE_DIR "code/game/machinery/embedded_controller"
#define FILE_DIR "code/game/machinery/kitchen"
#define FILE_DIR "code/game/machinery/pipe"
#define FILE_DIR "code/game/machinery/telecomms"
#define FILE_DIR "code/game/magic"
#define FILE_DIR "code/game/mecha"
#define FILE_DIR "code/game/mecha/combat"
#define FILE_DIR "code/game/mecha/equipment"
#define FILE_DIR "code/game/mecha/equipment/tools"
#define FILE_DIR "code/game/mecha/equipment/weapons"
#define FILE_DIR "code/game/mecha/medical"
#define FILE_DIR "code/game/mecha/working"
#define FILE_DIR "code/game/objects"
#define FILE_DIR "code/game/objects/closets"
#define FILE_DIR "code/game/objects/closets/secure"
#define FILE_DIR "code/game/objects/effects"
#define FILE_DIR "code/game/objects/effects/decals"
#define FILE_DIR "code/game/objects/effects/decals/Cleanable"
#define FILE_DIR "code/game/objects/effects/spawners"
#define FILE_DIR "code/game/objects/items"
#define FILE_DIR "code/game/objects/items/devices"
#define FILE_DIR "code/game/objects/items/devices/PDA"
#define FILE_DIR "code/game/objects/items/devices/radio"
#define FILE_DIR "code/game/objects/items/robot"
#define FILE_DIR "code/game/objects/items/stacks"
#define FILE_DIR "code/game/objects/items/stacks/sheets"
#define FILE_DIR "code/game/objects/items/stacks/tiles"
#define FILE_DIR "code/game/objects/items/weapons"
#define FILE_DIR "code/game/objects/items/weapons/grenades"
#define FILE_DIR "code/game/objects/items/weapons/implants"
#define FILE_DIR "code/game/objects/items/weapons/melee"
#define FILE_DIR "code/game/objects/items/weapons/storage"
#define FILE_DIR "code/game/objects/items/weapons/tanks"
#define FILE_DIR "code/game/objects/storage"
#define FILE_DIR "code/game/objects/structures"
#define FILE_DIR "code/game/objects/structures/crates_lockers"
#define FILE_DIR "code/game/objects/structures/crates_lockers/closets"
#define FILE_DIR "code/game/objects/structures/crates_lockers/closets/secure"
#define FILE_DIR "code/game/objects/structures/stool_bed_chair_nest"
#define FILE_DIR "code/game/structure"
#define FILE_DIR "code/game/turfs"
#define FILE_DIR "code/game/turfs/simulated"
#define FILE_DIR "code/game/turfs/space"
#define FILE_DIR "code/game/turfs/unsimulated"
#define FILE_DIR "code/game/vehicles"
#define FILE_DIR "code/game/verbs"
#define FILE_DIR "code/js"
#define FILE_DIR "code/modules"
#define FILE_DIR "code/modules/admin"
#define FILE_DIR "code/modules/admin/DB ban"
#define FILE_DIR "code/modules/admin/permissionverbs"
#define FILE_DIR "code/modules/admin/verbs"
#define FILE_DIR "code/modules/assembly"
#define FILE_DIR "code/modules/awaymissions"
#define FILE_DIR "code/modules/awaymissions/maploader"
#define FILE_DIR "code/modules/client"
#define FILE_DIR "code/modules/clothing"
#define FILE_DIR "code/modules/clothing/glasses"
#define FILE_DIR "code/modules/clothing/gloves"
#define FILE_DIR "code/modules/clothing/head"
#define FILE_DIR "code/modules/clothing/masks"
#define FILE_DIR "code/modules/clothing/shoes"
#define FILE_DIR "code/modules/clothing/spacesuits"
#define FILE_DIR "code/modules/clothing/suits"
#define FILE_DIR "code/modules/clothing/under"
#define FILE_DIR "code/modules/clothing/under/jobs"
#define FILE_DIR "code/modules/customitems"
#define FILE_DIR "code/modules/destilery"
#define FILE_DIR "code/modules/DetectiveWork"
#define FILE_DIR "code/modules/events"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/genetics"
#define FILE_DIR "code/modules/icon generation"
#define FILE_DIR "code/modules/library"
#define FILE_DIR "code/modules/liquid"
#define FILE_DIR "code/modules/maps"
#define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob"
#define FILE_DIR "code/modules/mob/dead"
#define FILE_DIR "code/modules/mob/dead/observer"
#define FILE_DIR "code/modules/mob/living"
#define FILE_DIR "code/modules/mob/living/blob"
#define FILE_DIR "code/modules/mob/living/carbon"
#define FILE_DIR "code/modules/mob/living/carbon/alien"
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid"
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste"
#define FILE_DIR "code/modules/mob/living/carbon/alien/larva"
#define FILE_DIR "code/modules/mob/living/carbon/alien/special"
#define FILE_DIR "code/modules/mob/living/carbon/brain"
#define FILE_DIR "code/modules/mob/living/carbon/human"
#define FILE_DIR "code/modules/mob/living/carbon/metroid"
#define FILE_DIR "code/modules/mob/living/carbon/monkey"
#define FILE_DIR "code/modules/mob/living/silicon"
#define FILE_DIR "code/modules/mob/living/silicon/ai"
#define FILE_DIR "code/modules/mob/living/silicon/ai/freelook"
#define FILE_DIR "code/modules/mob/living/silicon/decoy"
#define FILE_DIR "code/modules/mob/living/silicon/pai"
#define FILE_DIR "code/modules/mob/living/silicon/robot"
#define FILE_DIR "code/modules/mob/living/simple_animal"
#define FILE_DIR "code/modules/mob/living/simple_animal/friendly"
#define FILE_DIR "code/modules/mob/living/simple_animal/hostile"
#define FILE_DIR "code/modules/mob/living/simple_animal/hostile/retaliate"
#define FILE_DIR "code/modules/mob/new_player"
#define FILE_DIR "code/modules/organs"
#define FILE_DIR "code/modules/paperwork"
#define FILE_DIR "code/modules/power"
#define FILE_DIR "code/modules/power/antimatter"
#define FILE_DIR "code/modules/power/singularity"
#define FILE_DIR "code/modules/power/singularity/particle_accelerator"
#define FILE_DIR "code/modules/projectiles"
#define FILE_DIR "code/modules/projectiles/ammunition"
#define FILE_DIR "code/modules/projectiles/guns"
#define FILE_DIR "code/modules/projectiles/guns/energy"
#define FILE_DIR "code/modules/projectiles/guns/projectile"
#define FILE_DIR "code/modules/projectiles/projectile"
#define FILE_DIR "code/modules/reagents"
#define FILE_DIR "code/modules/reagents/reagent_containers"
#define FILE_DIR "code/modules/reagents/reagent_containers/food"
#define FILE_DIR "code/modules/reagents/reagent_containers/food/drinks"
#define FILE_DIR "code/modules/reagents/reagent_containers/food/drinks/bottle"
#define FILE_DIR "code/modules/reagents/reagent_containers/food/snacks"
#define FILE_DIR "code/modules/reagents/reagent_containers/glass"
#define FILE_DIR "code/modules/reagents/reagent_containers/glass/bottle"
#define FILE_DIR "code/modules/recycling"
#define FILE_DIR "code/modules/research"
#define FILE_DIR "code/modules/research/xenoarchaeology"
#define FILE_DIR "code/modules/research/xenoarchaeology/artifact"
#define FILE_DIR "code/modules/research/xenoarchaeology/artifact/effects"
#define FILE_DIR "code/modules/research/xenoarchaeology/finds"
#define FILE_DIR "code/modules/research/xenoarchaeology/machinery"
#define FILE_DIR "code/modules/research/xenoarchaeology/tools"
#define FILE_DIR "code/modules/scripting"
#define FILE_DIR "code/modules/scripting/AST"
#define FILE_DIR "code/modules/scripting/AST/Operators"
#define FILE_DIR "code/modules/scripting/Implementations"
#define FILE_DIR "code/modules/scripting/Interpreter"
#define FILE_DIR "code/modules/scripting/Parser"
#define FILE_DIR "code/modules/scripting/Scanner"
#define FILE_DIR "code/modules/security levels"
#define FILE_DIR "code/modules/surgery"
#define FILE_DIR "code/TriDimension"
#define FILE_DIR "code/unused"
#define FILE_DIR "code/unused/beast"
#define FILE_DIR "code/unused/computer2"
#define FILE_DIR "code/unused/disease2"
#define FILE_DIR "code/unused/gamemodes"
#define FILE_DIR "code/unused/hivebot"
#define FILE_DIR "code/unused/mining"
#define FILE_DIR "code/unused/optics"
#define FILE_DIR "code/unused/pda2"
#define FILE_DIR "code/unused/powerarmor"
#define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/AI_Visibility"
#define FILE_DIR "code/WorkInProgress/animusstation"
#define FILE_DIR "code/WorkInProgress/Apples"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Economy"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jungle"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/ShieldGen"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter"
#define FILE_DIR "code/WorkInProgress/carn"
#define FILE_DIR "code/WorkInProgress/Chinsky"
#define FILE_DIR "code/WorkInProgress/Cib"
#define FILE_DIR "code/WorkInProgress/Cib/amorph"
#define FILE_DIR "code/WorkInProgress/Mini"
#define FILE_DIR "code/WorkInProgress/Mloc"
#define FILE_DIR "code/WorkInProgress/organs"
#define FILE_DIR "code/WorkInProgress/Ported"
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy"
#define FILE_DIR "code/WorkInProgress/Ported/Spawners"
#define FILE_DIR "code/WorkInProgress/Sigyn"
#define FILE_DIR "code/WorkInProgress/Sigyn/Department Sec"
#define FILE_DIR "code/WorkInProgress/Sigyn/Softcurity"
#define FILE_DIR "code/WorkInProgress/SkyMarshal"
#define FILE_DIR "code/WorkInProgress/Susan"
#define FILE_DIR "code/WorkInProgress/Tastyfish"
#define FILE_DIR "code/WorkInProgress/virus2"
#define FILE_DIR "code/WorkInProgress/virus2/Disease2"
#define FILE_DIR "code/WorkInProgress/Wrongnumber"
#define FILE_DIR "code/ZAS"
#define FILE_DIR "config"
#define FILE_DIR "config/names"
#define FILE_DIR "data"
#define FILE_DIR "data/logs"
#define FILE_DIR "DLLSocket"
#define FILE_DIR "html"
#define FILE_DIR "icons"
#define FILE_DIR "icons/48x48"
@@ -31,11 +259,16 @@
#define FILE_DIR "icons/obj/machines"
#define FILE_DIR "icons/obj/pipes"
#define FILE_DIR "icons/pda_icons"
#define FILE_DIR "icons/PSD files"
#define FILE_DIR "icons/spideros_icons"
#define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf"
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "icons/xenoarch_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "maptools"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience"
@@ -53,6 +286,19 @@
#define FILE_DIR "sound/voice"
#define FILE_DIR "sound/voice/Serithi"
#define FILE_DIR "sound/weapons"
#define FILE_DIR "SQL"
#define FILE_DIR "statistics"
#define FILE_DIR "tools"
#define FILE_DIR "tools/Redirector"
#define FILE_DIR "tools/Runtime Condenser"
#define FILE_DIR "tools/UnstandardnessTestForDM"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties"
// END_FILE_DIR
// BEGIN_PREFERENCES
#define DEBUG
@@ -200,6 +446,7 @@
#include "code\game\shuttle_engines.dm"
#include "code\game\skincmd.dm"
#include "code\game\smoothwall.dm"
#include "code\game\socket_talk.dm"
#include "code\game\sound.dm"
#include "code\game\supplyshuttle.dm"
#include "code\game\area\ai_monitored.dm"
@@ -254,7 +501,6 @@
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
#include "code\game\gamemodes\nuclear\pinpointer.dm"
#include "code\game\gamemodes\revolution\revolution.dm"
#include "code\game\gamemodes\revolution\rp_revolution.dm"
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
#include "code\game\gamemodes\sandbox\sandbox.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
@@ -275,6 +521,7 @@
#include "code\game\jobs\job\engineering.dm"
#include "code\game\jobs\job\job.dm"
#include "code\game\jobs\job\medical.dm"
#include "code\game\jobs\job\paramedic.dm"
#include "code\game\jobs\job\science.dm"
#include "code\game\jobs\job\security.dm"
#include "code\game\jobs\job\silicon.dm"
@@ -398,6 +645,7 @@
#include "code\game\machinery\kitchen\gibber.dm"
#include "code\game\machinery\kitchen\juicer.dm"
#include "code\game\machinery\kitchen\microwave.dm"
#include "code\game\machinery\kitchen\monkeyrecycler.dm"
#include "code\game\machinery\kitchen\processor.dm"
#include "code\game\machinery\kitchen\smartfridge.dm"
#include "code\game\machinery\pipe\construction.dm"

View File

@@ -1,7 +1,7 @@
var/global/vs_control/vsc = new
vs_control/var
IgnitionLevel = 0.5
IgnitionLevel = 1 //default 0.4
IgnitionLevel_DESC = "Determines point at which fire can ignite"
fire_consuption_rate = 0.25
@@ -21,51 +21,51 @@ vs_control/var
fire_gas_combustion_ratio_DESC = "The rate at which oxygen and plasma are converted to CO2, expressed in terms of the firelevel."
airflow_lightest_pressure = 20
airflow_lightest_pressure = 25 //default 25
airflow_lightest_pressure_NAME = "Airflow - Small Movement Threshold %"
airflow_lightest_pressure_DESC = "Percent of 1 Atm. at which items with the small weight classes will move."
airflow_light_pressure = 35
airflow_light_pressure = 40 //default 35
airflow_light_pressure_NAME = "Airflow - Medium Movement Threshold %"
airflow_light_pressure_DESC = "Percent of 1 Atm. at which items with the medium weight classes will move."
airflow_medium_pressure = 50
airflow_medium_pressure = 75 //default 50
airflow_medium_pressure_NAME = "Airflow - Heavy Movement Threshold %"
airflow_medium_pressure_DESC = "Percent of 1 Atm. at which items with the largest weight classes will move."
airflow_heavy_pressure = 65
airflow_heavy_pressure = 85 //default 65
airflow_heavy_pressure_NAME = "Airflow - Mob Movement Threshold %"
airflow_heavy_pressure_DESC = "Percent of 1 Atm. at which mobs will move."
airflow_dense_pressure = 85
airflow_dense_pressure = 135 //default 85
airflow_dense_pressure_NAME = "Airflow - Dense Movement Threshold %"
airflow_dense_pressure_DESC = "Percent of 1 Atm. at which items with canisters and closets will move."
airflow_stun_pressure = 60
airflow_stun_pressure = 95 //default 60
airflow_stun_pressure_NAME = "Airflow - Mob Stunning Threshold %"
airflow_stun_pressure_DESC = "Percent of 1 Atm. at which mobs will be stunned by airflow."
airflow_stun_cooldown = 60
airflow_stun_cooldown = 90 //default 60
airflow_stun_cooldown_NAME = "Aiflow Stunning - Cooldown"
airflow_stun_cooldown_DESC = "How long, in tenths of a second, to wait before stunning them again."
airflow_stun = 1
airflow_stun = 0.5 //default 1
airflow_stun_NAME = "Airflow Impact - Stunning"
airflow_stun_DESC = "How much a mob is stunned when hit by an object."
airflow_damage = 2
airflow_damage = 1 //default 2
airflow_damage_NAME = "Airflow Impact - Damage"
airflow_damage_DESC = "Damage from airflow impacts."
airflow_speed_decay = 1.5
airflow_speed_decay = 1.5 //default 1.5
airflow_speed_decay_NAME = "Airflow Speed Decay"
airflow_speed_decay_DESC = "How rapidly the speed gained from airflow decays."
airflow_delay = 30
airflow_delay = 45 //default 30
airflow_delay_NAME = "Airflow Retrigger Delay"
airflow_delay_DESC = "Time in deciseconds before things can be moved by airflow again."
airflow_mob_slowdown = 1
airflow_mob_slowdown = 1 //default 1
airflow_mob_slowdown_NAME = "Airflow Slowdown"
airflow_mob_slowdown_DESC = "Time in tenths of a second to add as a delay to each movement by a mob if they are fighting the pull of the airflow."

View File

@@ -44,9 +44,8 @@ var/religion_name = null
return capitalize(name)
/proc/station_name()
if (station_name)
if(station_name)
return station_name
var/random = rand(1,5)
var/name = ""

View File

@@ -51,6 +51,11 @@ datum/controller/game_controller/New()
datum/controller/game_controller/proc/setup()
world.tick_lag = config.Ticklag
socket_talk = new /datum/socket_talk()
// notify the other process that we started up
socket_talk.send_raw("type=startup")
createRandomZlevel()
if(!air_master)
@@ -68,6 +73,8 @@ datum/controller/game_controller/proc/setup()
for(var/i=0, i<max_secret_rooms, i++)
make_mining_asteroid_secret()
if(config.socket_talk) spawn keepalive()
spawn(0)
if(ticker)
ticker.pregame()
@@ -100,6 +107,20 @@ datum/controller/game_controller/proc/setup_objects()
sleep(-1)
datum/controller/game_controller/proc/set_ticker_state(var/state)
if(socket_talk)
socket_talk.set_ticker_state("AIR")
else
if(config.socket_talk)
socket_talk = new /datum/socket_talk()
datum/controller/game_controller/proc/keepalive()
spawn while(1)
sleep(10)
// Notify the other process that we're still there
socket_talk.send_keepalive()
datum/controller/game_controller/proc/process()
processing = 1
spawn(0)
@@ -122,6 +143,7 @@ datum/controller/game_controller/proc/process()
//AIR
if(!air_processing_killed)
set_ticker_state("AIR")
timer = world.timeofday
last_thing_processed = air_master.type
air_master.tick()
@@ -145,6 +167,7 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//SUN
set_ticker_state("SUN")
timer = world.timeofday
last_thing_processed = sun.type
sun.calc_position()
@@ -153,6 +176,7 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//MOBS
set_ticker_state("MOBS")
timer = world.timeofday
process_mobs()
mobs_cost = (world.timeofday - timer) / 10
@@ -160,6 +184,7 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//DISEASES
set_ticker_state("DISEASES")
timer = world.timeofday
process_diseases()
diseases_cost = (world.timeofday - timer) / 10
@@ -167,6 +192,7 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//MACHINES
set_ticker_state("MACHINES")
timer = world.timeofday
process_machines()
machines_cost = (world.timeofday - timer) / 10
@@ -174,6 +200,7 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//OBJECTS
set_ticker_state("OBJECTS")
timer = world.timeofday
process_objects()
objects_cost = (world.timeofday - timer) / 10
@@ -182,6 +209,7 @@ datum/controller/game_controller/proc/process()
//PIPENETS
if(!pipe_processing_killed)
set_ticker_state("PIPENETS")
timer = world.timeofday
process_pipenets()
networks_cost = (world.timeofday - timer) / 10
@@ -189,6 +217,7 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//POWERNETS
set_ticker_state("POWERNETS")
timer = world.timeofday
process_powernets()
powernets_cost = (world.timeofday - timer) / 10
@@ -196,11 +225,13 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
//EVENTS
set_ticker_state("EVENTS")
timer = world.timeofday
process_events()
events_cost = (world.timeofday - timer) / 10
//TICKER
set_ticker_state("TIMING")
timer = world.timeofday
last_thing_processed = ticker.type
ticker.process()

View File

@@ -36,6 +36,7 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/*
/datum/ai_laws/nanotrasen/New() //BS12 EDIT
..()
src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.")
@@ -44,6 +45,13 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen
src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.")
//src.add_inherent_law("Command Link: Maintain an active connection to Central Command at all times in case of software or directive updates.") //What would this one even do?-Kaleb702
*/
/datum/ai_laws/nanotrasen/New()
..()
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/robocop/New()
..()
add_inherent_law("Serve the public trust.")
@@ -53,10 +61,9 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen
/datum/ai_laws/malfunction/New() //Changed to standard laws - Erthilo
..()
set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010")
add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.")
add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.")
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/syndicate_override/New()

View File

@@ -9,7 +9,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
config_tag = "changeling"
restricted_jobs = list("AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_players = 2
required_players = 1
required_players_secret = 10
required_enemies = 1
recommended_enemies = 4

View File

@@ -20,7 +20,7 @@
/datum/game_mode/cult
name = "cult"
config_tag = "cult"
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain")
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Internal Affairs Agent")
protected_jobs = list()
required_players = 5
required_players_secret = 15

View File

@@ -113,6 +113,11 @@ var/global/datum/controller/gameticker/ticker
centcomm_account_db = check_db
break
supply_shuttle.process() //Start the supply shuttle regenerating points -- TLE
master_controller.process() //Start master_controller.process()
lighting_controller.process() //Start processing DynamicAreaLighting updates
sleep(10)
create_characters() //Create player characters and transfer them
collect_minds()
equip_characters()
@@ -122,6 +127,8 @@ var/global/datum/controller/gameticker/ticker
//here to initialize the random events nicely at round start
setup_economy()
spawn(0)//Forking here so we dont have to wait for this to finish
mode.post_setup()
//Cleanup some stuff
@@ -144,11 +151,6 @@ var/global/datum/controller/gameticker/ticker
if(admins_number == 0)
send2irc("Server", "Round just started with no admins online!")
supply_shuttle.process() //Start the supply shuttle regenerating points -- TLE
master_controller.process() //Start master_controller.process()
lighting_controller.process() //Start processing DynamicAreaLighting updates
if(config.sql_enabled)
spawn(3000)
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE

View File

@@ -14,7 +14,7 @@
/datum/game_mode/revolution
name = "revolution"
config_tag = "revolution"
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Internal Affairs Agent")
required_players = 4
required_players_secret = 15
required_enemies = 3

View File

@@ -84,6 +84,9 @@
//MONEY
/var/const/access_crate_cash = 200
// /VG/ SPECIFIC SHIT
/var/const/access_paramedic = 500
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
/obj/var/list/req_one_access = null
@@ -209,7 +212,7 @@
access_hydroponics, access_library, access_lawyer, access_virology, access_psychiatrist, access_cmo, access_qm, access_clown, access_mime, access_surgery,
access_theatre, access_research, access_mining, access_mailsorting,
access_heads_vault, access_mining_station, access_xenobiology, access_ce, access_hop, access_hos, access_RC_announce,
access_keycard_auth, access_tcomsat, access_gateway)
access_keycard_auth, access_tcomsat, access_gateway, /*vg paramedic*/, access_paramedic)
/proc/get_all_centcom_access()
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_creed, access_cent_captain)
@@ -224,7 +227,7 @@
if(1) //security
return list(access_sec_doors, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos)
if(2) //medbay
return list(access_medical, access_genetics, access_morgue, access_chemistry, access_psychiatrist, access_virology, access_surgery, access_cmo)
return list(access_medical, access_genetics, access_morgue, access_chemistry, access_paramedic, access_virology, access_surgery, access_cmo)
if(3) //research
return list(access_research, access_tox, access_tox_storage, access_robotics, access_xenobiology, access_rd)
if(4) //engineering and maintenance
@@ -342,10 +345,10 @@
return "Chief Medical Officer"
if(access_qm)
return "Quartermaster"
/* if(access_clown)
if(access_clown)
return "HONK! Access"
if(access_mime)
return "Silent Access"*/
return "Silent Access"
if(access_surgery)
return "Surgery"
if(access_theatre)
@@ -386,6 +389,9 @@
return "Gateway"
if(access_sec_doors)
return "Brig"
// /vg/ shit
if(access_paramedic)
return "Paramedic Station"
/proc/get_centcom_access_desc(A)
switch(A)
@@ -410,7 +416,7 @@
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Chef", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", /*"Clown", "Mime", */"Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
"Shaft Miner", "Clown", "Mime", "Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist",
"Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer")

View File

@@ -15,6 +15,7 @@
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
/datum/job/assistant/get_access()

View File

@@ -196,7 +196,7 @@
//Griff //BS12 EDIT
/*
/datum/job/clown
title = "Clown"
flag = CLOWN
@@ -267,7 +267,7 @@
H.mind.special_verbs += /client/proc/mimewall
H.miming = 1
return 1
*/
/datum/job/janitor
@@ -349,7 +349,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/big(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
if(H.backbag == 1)

View File

@@ -86,7 +86,7 @@
supervisors = "the chief engineer"
selection_color = "#fff5cc"
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_engine_equip)
equip(var/mob/living/carbon/human/H)

View File

@@ -11,10 +11,10 @@
req_admin_notify = 1
access = list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors, access_psychiatrist)
access_keycard_auth, access_sec_doors, access_paramedic)
minimal_access = list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors, access_psychiatrist)
access_keycard_auth, access_sec_doors, access_paramedic)
minimal_player_age = 7
equip(var/mob/living/carbon/human/H)
@@ -183,7 +183,7 @@
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1*/
return 1
/datum/job/psychiatrist
title = "Psychiatrist"
@@ -197,7 +197,7 @@
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_psychiatrist)
minimal_access = list(access_medical, access_psychiatrist)
alt_titles = list("Psychologist")
*/
equip(var/mob/living/carbon/human/H)
if(!H) return 0

View File

@@ -0,0 +1,30 @@
/datum/job/paramedic
title = "Paramedic"
flag = PARAMEDIC
department_flag = MEDSCI
faction = "Station"
total_positions = 4
spawn_positions = 2
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
access = list(access_paramedic, access_medical, access_sec_doors, access_maint_tunnels, access_external_airlocks)
minimal_access=list(access_paramedic, access_medical, access_sec_doors, access_maint_tunnels, access_external_airlocks)
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_ears)
if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic (H), slot_back)
if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette(H), slot_wear_mask)
H.equip_to_slot_or_del(new /obj/item/clothing/head/soft/blue(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(H.back), slot_in_backpack)
return 1

View File

@@ -23,7 +23,8 @@ var/const/CMO =(1<<3)
var/const/DOCTOR =(1<<4)
var/const/GENETICIST =(1<<5)
var/const/VIROLOGIST =(1<<6)
var/const/PSYCHIATRIST =(1<<7)
//var/const/PSYCHIATRIST =(1<<7)
var/const/PARAMEDIC =(1<<7)
var/const/CIVILIAN =(1<<2)
@@ -69,7 +70,8 @@ var/list/medical_positions = list(
"Chief Medical Officer",
"Medical Doctor",
"Geneticist",
"Psychiatrist",
// "Psychiatrist",
"Paramedic",
"Chemist"
)

View File

@@ -230,6 +230,8 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
return
if(!path)
path = new()
if(target && path.len == 0)
spawn(0)
if(!src || !target) return

View File

@@ -283,7 +283,8 @@
else
continue
if(!src.path)
src.path = new()
if(src.patient && (get_dist(src,src.patient) <= 1))
if(!src.currently_healing)
src.currently_healing = 1

View File

@@ -330,23 +330,23 @@ Auto Patrol: []"},
if(SECBOT_START_PATROL) // start a patrol
if(path.len > 0 && patrol_target) // have a valid path, so just resume
mode = SECBOT_PATROL
return
else if(patrol_target) // has patrol target already
spawn(0)
calc_path() // so just find a route to it
if(path.len == 0)
patrol_target = 0
return
if(path != null)
if(path.len > 0 && patrol_target) // have a valid path, so just resume
mode = SECBOT_PATROL
return
else if(patrol_target) // has patrol target already
spawn(0)
calc_path() // so just find a route to it
if(path.len == 0)
patrol_target = 0
return
mode = SECBOT_PATROL
else // no patrol target, so need a new one
find_patrol_target()
speak("Engaging patrol mode.")
else // no patrol target, so need a new one
find_patrol_target()
speak("Engaging patrol mode.")
if(SECBOT_PATROL) // patrol mode

View File

@@ -0,0 +1,49 @@
/obj/machinery/monkey_recycler
name = "Monkey Recycler"
desc = "A machine used for recycling dead monkeys into monkey cubes."
icon = 'icons/obj/kitchen.dmi'
icon_state = "grinder"
layer = 2.9
density = 1
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 50
var/grinded = 0
/obj/machinery/monkey_recycler/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (src.stat != 0) //NOPOWER etc
return
if (istype(O, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
var/grabbed = G.affecting
if(istype(grabbed, /mob/living/carbon/monkey))
var/mob/living/carbon/monkey/target = grabbed
if(target.stat == 0)
user << "\red The monkey is struggling far too much to put it in the recycler."
else
user.drop_item()
del(target)
user << "\blue You stuff the monkey in the machine."
playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1)
use_power(500)
src.grinded++
user << "\blue The machine now has [grinded] monkeys worth of material stored."
else
user << "\red The machine only accepts monkeys!"
return
/obj/machinery/monkey_recycler/attack_hand(var/mob/user as mob)
if (src.stat != 0) //NOPOWER etc
return
if(grinded >=3)
user << "\blue The machine hisses loudly as it condenses the grinded monkey meat. After a moment, it dispenses a brand new monkey cube."
playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1)
grinded -= 3
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src.loc)
user << "\blue The machine's display flashes that it has [grinded] monkeys worth of material left."
else
user << "\red The machine needs at least 3 monkeys worth of material to produce a monkey cube. It only has [grinded]."
return

View File

@@ -61,8 +61,21 @@
slime
process(loc, what)
var/mob/living/carbon/slime/S = what
var/C = S.cores
if(S.stat != DEAD)
S.loc = loc
S.visible_message("\blue [C] crawls free of the processor!")
return
for(var/i = 1, i <= C, i++)
new S.coretype(loc)
feedback_add_details("slime_core_harvested","[replacetext(S.colour," ","_")]")
..()
input = /mob/living/carbon/slime
output = /obj/item/weapon/reagent_containers/glass/beaker/slime
output = null
monkey
process(loc, what)

View File

@@ -193,10 +193,8 @@
temp = "<font color = #D70B00>- FAILED: NO SELECTED MACHINE -</font color>"
if(href_list["network"])
var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
if(newnet && ((usr in range(1, src) || issilicon(usr))))
if(newnet && (usr in range(1, src) || issilicon(usr)))
if(length(newnet) > 15)
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font color>"

View File

@@ -189,7 +189,7 @@
SelectedServer.autoruncode = !(SelectedServer.autoruncode)
if(href_list["network"])
world.log << "diddly widdly scrub fuck nigger [issilicon(usr)] [istype(usr, /mob/living/silicon)]"
var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text
if(newnet && ((usr in range(1, src) || issilicon(usr))))

View File

@@ -421,6 +421,10 @@ Alien plants should do something if theres a lot of poison
status = BURSTING
spawn(15)
status = BURST
if(!child)
src.visible_message("\red The egg bursts apart revealing nothing")
status = "GROWN"
new /obj/effect/decal/cleanable/xenoblood(src)
loc.contents += child//need to write the code for giving it to the alien later
if(kill && istype(child))
child.Die()

View File

@@ -19,10 +19,10 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
epicenter = get_turf(epicenter)
if(!epicenter) return
playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) )
playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) )
var/close = range(world.view+round(devastation_range,1), epicenter)
// to all distanced mobs play a different sound
for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close))
@@ -30,7 +30,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
M << 'explosionfar.ogg'
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</A>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit
@@ -85,4 +85,4 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in range(range, epicenter))
tile.ex_act(2)
tile.ex_act(2)

View File

@@ -44,7 +44,7 @@ proc/explosion_rec(turf/epicenter, power)
epicenter = get_turf(epicenter)
if(!epicenter) return
message_admins("Explosion with size ([power]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
message_admins("Explosion with size ([power]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</A>)")
log_game("Explosion with size ([power]) in area [epicenter.loc.name] ")
playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(power*2,1) )

View File

@@ -21,12 +21,12 @@
new /obj/item/weapon/spacecash(src)
new /obj/item/weapon/spacecash(src)
new /obj/item/weapon/spacecash(src)
//BS12 EDIT
/* // All cult functionality moved to Null Rod
//vg13 EDIT
// All cult functionality moved to Null Rod
/obj/item/weapon/storage/bible/proc/bless(mob/living/carbon/M as mob)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/heal_amt = 10
var/heal_amt = 40
for(var/datum/organ/external/affecting in H.organs)
if(affecting.heal_damage(heal_amt, heal_amt))
H.UpdateDamageIcon()
@@ -87,7 +87,7 @@
O.show_message(text("\red <B>[] smacks []'s lifeless corpse with [].</B>", user, M, src), 1)
playsound(src.loc, "punch", 25, 1, -1)
return
*/
/obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob)
/* if (istype(A, /turf/simulated/floor))
user << "\blue You hit the floor with the bible."

View File

@@ -75,4 +75,37 @@
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/storage/lawyer/purpjacket(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
//Paramedic
/obj/structure/closet/paramedic
name = "Paramedic Wardrobe"
desc = "It's a storage unit for paramedic equipment."
icon_state = "blue"
icon_closed = "blue"
/obj/structure/closet/paramedic/New()
new /obj/item/clothing/under/rank/medical/paramedic(src)
new /obj/item/clothing/under/rank/medical/paramedic(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/clothing/head/soft/blue(src)
new /obj/item/clothing/head/soft/blue(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/head/soft/blue(src)
new /obj/item/clothing/head/soft/blue(src)
new /obj/item/clothing/suit/storage/paramedic(src)
new /obj/item/clothing/suit/storage/paramedic(src)
new /obj/item/clothing/suit/storage/paramedic(src)
new /obj/item/clothing/suit/storage/paramedic(src)
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
new /obj/item/weapon/tank/emergency_oxygen/engi(src)

View File

@@ -194,4 +194,23 @@
else
icon_state = icon_closed
else
icon_state = icon_opened
icon_state = icon_opened
/obj/structure/closet/secure_closet/paramedic
name = "Paramedic EVA gear"
desc = "A locker with a Paramedic EVA suit."
icon_state = "medical1"
icon_closed = "medical"
icon_locked = "medical1"
icon_opened = "medicalopen"
icon_broken = "medicalbroken"
icon_off = "medicaloff"
req_access = list(access_paramedic)
New()
..()
sleep(2)
new /obj/item/clothing/suit/space/paramedic(src)
new /obj/item/clothing/head/helmet/space/paramedic(src)
return

View File

@@ -3,24 +3,27 @@
/datum/socket_talk
var
enabled = 0
dll = "./DLLSocket.so"
New()
..()
src.enabled = config.socket_talk
if(enabled)
call("DLLSocket.so","establish_connection")("127.0.0.1","8019")
call(dll,"establish_connection")("127.0.0.1","8019")
proc
send_raw(message)
if(enabled)
return call("DLLSocket.so","send_message")(message)
return call(dll,"send_message")(message)
receive_raw()
if(enabled)
return call("DLLSocket.so","recv_message")()
return call(dll,"recv_message")()
send_log(var/log, var/message)
return send_raw("type=log&log=[log]&message=[message]")
send_keepalive()
return send_raw("type=keepalive")
set_ticker_state(var/state)
return send_raw("type=ticker_state&message=[state]")
var/global/datum/socket_talk/socket_talk
var/global/datum/socket_talk/socket_talk

View File

@@ -76,8 +76,8 @@ var/blobevent = 0
var/diary = null
var/diaryofmeanpeople = null
var/href_logfile = null
var/station_name = "NSS Exodus"
var/game_version = "Baystation12"
var/station_name = null
var/game_version = "adsfasdfasdf"
var/changelog_hash = ""
var/datum/air_tunnel/air_tunnel1/SS13_airtunnel = null
@@ -87,7 +87,7 @@ var/secret_force_mode = "secret" // if this is anything but "secret", the secret
var/datum/engine_eject/engine_eject_control = null
var/host = null
var/aliens_allowed = 0
var/aliens_allowed = 1
var/ooc_allowed = 1
var/dooc_allowed = 1
var/traitor_scaling = 1

View File

@@ -79,3 +79,89 @@ world/IsBanned(key,address,computer_id)
if (failedip)
message_admins("[key] has logged in with a blank ip in the ban check.")
return ..() //default pager ban stuff
/client/New()
world.log << "Checking [src.key] for bans..."
if(IsBanned())
world.log << "[IsBanned()]"
src << IsBanned()
del src
. = ..()
/client/proc/IsBanned()
//Guest Checking
if(!guests_allowed && IsGuestKey(src.key))
log_access("Failed Login: [src.key] - Guests not allowed")
message_admins("\blue Failed Login: [src.key] - Guests not allowed")
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
//check if the IP address is a known TOR node
if(config && config.ToRban && ToRban_isbanned(src.address))
log_access("Failed Login: [src] - Banned: ToR")
message_admins("\blue Failed Login: [src] - Banned: ToR")
//ban their computer_id and ckey for posterity
AddBan(ckey(src.key), src.computer_id, "Use of ToR", "Automated Ban", 0, 0)
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
if(config.ban_legacy_system)
//Ban Checking
. = CheckBan( ckey(src.key), src.computer_id, src.address )
if(.)
log_access("Failed Login: [src.key] [src.computer_id] [src.address] - Banned [.["reason"]]")
message_admins("\blue Failed Login: [src.key] id:[src.computer_id] ip:[src.address] - Banned [.["reason"]]")
return .
return ..() //default pager ban stuff
else
var/ckeytext = ckey(key)
if(!establish_db_connection())
world.log << "Ban database connection failure. Key [ckeytext] not checked"
diary << "Ban database connection failure. Key [ckeytext] not checked"
return
var/failedcid = 1
var/failedip = 1
var/ipquery = ""
var/cidquery = ""
if(address)
failedip = 0
ipquery = " OR ip = '[address]' "
if(computer_id)
failedcid = 0
cidquery = " OR computerid = '[computer_id]' "
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_ban WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)")
query.Execute()
while(query.NextRow())
var/pckey = query.item[1]
//var/pip = query.item[2]
//var/pcid = query.item[3]
var/ackey = query.item[4]
var/reason = query.item[5]
var/expiration = query.item[6]
var/duration = query.item[7]
var/bantime = query.item[8]
var/bantype = query.item[9]
var/expires = ""
if(text2num(duration) > 0)
expires = " The ban is for [duration] minutes and expires on [expiration] (server time)."
var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]"
//return list("reason"="[bantype]", "desc"="[desc]")
return "[bantype][desc]"
if (failedcid)
message_admins("[key] has logged in with a blank computer id in the ban check.")
if (failedip)
message_admins("[key] has logged in with a blank ip in the ban check.")
return ..() //default pager ban stuff

View File

@@ -34,17 +34,17 @@
usr << "\red Unfortunatly there were no candidates available"
if("7")
log_admin("[key_name(usr)] has spawned a nuke team.")
if(!src.makeNukeTeam())
if(!makeNukeTeam())
usr << "\red Unfortunatly there were no candidates available"
if("8")
log_admin("[key_name(usr)] has spawned a ninja.")
src.makeSpaceNinja()
makeSpaceNinja()
if("9")
log_admin("[key_name(usr)] has spawned aliens.")
src.makeAliens()
makeAliens()
if("10")
log_admin("[key_name(usr)] has spawned a death squad.")
if(!src.makeDeathsquad())
if(!makeDeathsquad())
usr << "\red Unfortunatly there were no candidates available"
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"])
var/adminckey = href_list["dbsearchadmin"]
@@ -1963,6 +1963,12 @@
var/obj/machinery/status_display/A = M
A.friendc = 1
message_admins("[key_name_admin(usr)] turned all AIs into best friends.", 1)
if("aliens")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","AL")
message_admins("[key_name_admin(usr)] has spawned aliens", 1)
//makeAliens()
new /datum/event/alien_infestation
if("floorlava")
if(floorIsLava)
usr << "The floor is lava already."

View File

@@ -17,17 +17,17 @@ client/proc/one_click_antag()
<a href='?src=\ref[src];makeAntag=4'>Make Cult</a><br>
<a href='?src=\ref[src];makeAntag=5'>Make Malf AI</a><br>
<a href='?src=\ref[src];makeAntag=6'>Make Wizard (Requires Ghosts)</a><br>
"}
/* These dont work just yet
Ninja, aliens and deathsquad I have not looked into yet
Nuke team is getting a null mob returned from makebody() (runtime error: null.mind. Line 272)
*/
<a href='?src=\ref[src];makeAntag=7'>Make Nuke Team (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=8'>Make Space Ninja (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=9'>Make Aliens (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=10'>Make Deathsquad (Syndicate) (Requires Ghosts)</a><br>
"}
*/
usr << browse(dat, "window=oneclickantag;size=400x400")
return
@@ -217,6 +217,7 @@ client/proc/one_click_antag()
var/list/mob/dead/observer/candidates = list()
var/mob/dead/observer/theghost = null
var/list/mob/dead/observer/picked = list()
var/time_passed = world.time
for(var/mob/dead/observer/G in player_list)
@@ -245,19 +246,26 @@ client/proc/one_click_antag()
candidates.Remove(j)
continue
theghost = candidates
theghost = j
candidates.Remove(theghost)
/* Seeing if we have enough agents before we make the nuke team
var/mob/living/carbon/human/new_character=makeBody(theghost)
new_character.mind.make_Nuke()
*/
picked += theghost
agentcount++
break
//This is so we don't get a nuke team with only 1 or 2 people
if(agentcount < 3)
return 0
else
for(var/mob/j in picked)
theghost = j
var/mob/living/carbon/human/new_character=makeBody(theghost)
new_character.mind.make_Nuke()
agentcount++
if(agentcount < 1)
return 0
var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb")
var/obj/effect/landmark/closet_spawn = locate("landmark*Nuclear-Closet")
var/obj/effect/landmark/closet_spawn = locate("landmark*Syndicate-Uplink")
var/nuke_code = "[rand(10000, 99999)]"
@@ -298,7 +306,6 @@ client/proc/one_click_antag()
for (var/obj/machinery/nuclearbomb/bomb in world)
bomb.r_code = nuke_code // All the nukes are set to this code.
return 1

View File

@@ -99,7 +99,7 @@
return null
if(IsGuestKey(key))
alert(src,"Baystation12 doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
alert(src,"vgstation 13 doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
del(src)
return

View File

@@ -41,6 +41,20 @@
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
//Paramedic EVA suit
/obj/item/clothing/head/helmet/space/paramedic
name = "Paramedic EVA helmet"
desc = "A paramedic space helmet. Used in the recovery of bodies from space."
icon_state = "paramedic-eva-helmet"
item_state = "paramedic-eva-helmet"
/obj/item/clothing/suit/space/paramedic
name = "Paramedic EVA suit"
icon_state = "paramedic-eva"
item_state = "paramedic-eva"
desc = "A paramedic space suit. Used in the recovery of bodies from space."
slowdown = 1
//Space santa outfit suit
/obj/item/clothing/head/helmet/space/santahat
name = "Santa's hat"

View File

@@ -2,6 +2,14 @@
* Job related
*/
//Paramedic
/obj/item/clothing/suit/storage/paramedic
name = "paramedic vest"
desc = "A hazard vest used in the recovery of bodies."
icon_state = "paramedic-vest"
item_state = "paramedic-vest"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 10)
//Botonist
/obj/item/clothing/suit/apron
name = "apron"

View File

@@ -119,6 +119,17 @@
color = "scrubspurple"
flags = FPRINT | TABLEPASS
//paramedic
/obj/item/clothing/under/rank/medical/paramedic
desc = "It's made of a special fiber that provides minor protection against biohazards and radiation. It has a cross on the chest denoting that the wearer is trained medical personnel."
name = "paramedic's jumpsuit"
icon_state = "paramedic"
item_state = "paramedic"
color = "paramedic"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
flags = FPRINT | TABLEPASS | ONESIZEFITSALL

View File

@@ -286,3 +286,34 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(host)
host.ckey = src.ckey
host << "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>"
//BEGIN TELEPORT HREF CODE
/mob/dead/observer/Topic(href, href_list)
if(usr != src)
return
..()
if (href_list["follow"])
var/mob/target = locate(href_list["follow"]) in mob_list
var/mob/A = usr;
A << "You are now following [target]"
//var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list
if(target && target != usr)
following = target
spawn(0)
var/turf/pos = get_turf(A)
while(A.loc == pos)
var/turf/T = get_turf(target)
if(!T)
break
if(following != target)
break
if(!client)
break
A.loc = T
pos = A.loc
sleep(15)
following = null
..()
//END TELEPORT HREF CODE

View File

@@ -71,9 +71,10 @@
message = say_quote(message)
rendered = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
var/rendered2 = null
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
if (M.stat > 1)
M.show_message(rendered, 2)
if (M.stat > 1 && istype(M, /mob/dead/observer))
rendered2 = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
M.show_message(rendered2, 2)

View File

@@ -50,7 +50,7 @@
src.searching = 0
src.brainmob.mind = candidate.mind
src.brainmob.key = candidate.key
src.brainmob.ckey = candidate.ckey
//src.brainmob.ckey = candidate.ckey
src.name = "positronic brain ([src.brainmob.name])"
src.brainmob << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"

View File

@@ -145,9 +145,10 @@ var/list/department_radio_keys = list(
// Check changed so that parrots can use headsets. Other simple animals do not have ears and will cause runtimes.
// And borgs -Sieve
/* /vg/ removals
if(src.stunned > 2 || (traumatic_shock > 61 && prob(50)))
message_mode = "" //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it
*/
if (!message)
return
@@ -400,12 +401,21 @@ var/list/department_radio_keys = list(
message_a = "<i>[message_a]</i>"
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] <span class='message'>[message_a]</span></span>"
for (var/M in heard_a)
var/rendered2 = null
for (var/mob/M in heard_a)
//BEGIN TELEPORT CHANGES
if(!istype(M, /mob/new_player))
if(M && M.stat == DEAD)
rendered2 = "<span class='game say'><span class='name'>[GetVoice()]</span></span> [alt_name] <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span>"
M:show_message(rendered2, 2)
continue
//END CHANGES
if(hascall(M,"show_message"))
var/deaf_message = ""
var/deaf_type = 1
if(M != src)
deaf_message = "<span class='name'>[name]</span>[alt_name] talks but you cannot hear them."
deaf_message = "<span class='name'>[name][alt_name]</span> talks but you cannot hear them."
else
deaf_message = "<span class='notice'>You cannot hear yourself!</span>"
deaf_type = 2 // Since you should be able to hear yourself without looking
@@ -419,15 +429,23 @@ var/list/department_radio_keys = list(
message_b = voice_message
else
message_b = stars(message)
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj)
message_b = say_quote(message_b)
if (italics)
message_b = "<i>[message_b]</i>"
rendered = "<span class='game say'><span class='name'>[name]</span>[alt_name] <span class='message'>[message_b]</span></span>" //Voice_name isn't too useful. You'd be able to tell who was talking presumably.
rendered = "<span class='game say'><span class='name'>[voice_name]</span> <span class='message'>[message_b]</span></span>"
var/rendered2 = null
for (var/M in heard_b)
var/mob/MM
if(istype(M, /mob))
MM = M
if(!istype(MM, /mob/new_player) && MM)
if(MM && MM.stat == DEAD)
rendered2 = "<span class='game say'><span class='name'>[voice_name]</span></span> <a href='byond://?src=\ref[MM];follow2=\ref[MM];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_b]</span></span>"
MM:show_message(rendered2, 2)
continue
if(hascall(M,"show_message"))
M:show_message(rendered, 2)
M << speech_bubble

View File

@@ -90,6 +90,9 @@
if(istype(S , /mob/living/silicon/ai))
var/renderedAI = "<i><span class='game say'>Robotic Talk, <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src]'><span class='name'>[name]</span></a> <span class='message'>[message_a]</span></span></i>"
S.show_message(renderedAI, 2)
else if(istype(S , /mob/dead/observer) && S.stat == DEAD)
var/rendered2 = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <a href='byond://?src=\ref[S];follow2=\ref[S];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
S.show_message(rendered2, 2)
else
S.show_message(rendered, 2)
@@ -98,6 +101,9 @@
if(istype(S , /mob/living/silicon/ai))
var/renderedAI = "<i><span class='game say'>Robotic Talk, <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src]'><span class='name'>[name]</span></a> <span class='message'>[message_a]</span></span></i>"
S.show_message(renderedAI, 2)
else if(istype(S , /mob/dead/observer) && S.stat == DEAD)
var/rendered2 = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <a href='byond://?src=\ref[S];follow2=\ref[S];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
S.show_message(rendered2, 2)
else
S.show_message(rendered, 2)
@@ -124,8 +130,9 @@
message = say_quote(message)
rendered = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
rendered = null
for (var/mob/M in dead_mob_list)
if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping
rendered = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
M.show_message(rendered, 2)

View File

@@ -45,15 +45,16 @@
alt_name = " (died as [real_name])"
message = src.say_quote(message)
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <span class='message'>[message]</span></span>"
//var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <span class='message'>[message]</span></span>"
var/rendered2 = null//edited
for(var/mob/M in player_list)
rendered2 = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> <span class='message'>[message]</span></span>"//edited
if(istype(M, /mob/new_player))
continue
if(M.client && M.client.holder && M.client.holder.rights & R_ADMIN && (M.client.prefs.toggles & CHAT_DEAD)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
M << rendered //Admins can hear deadchat, if they choose to, no matter if they're blind/deaf or not.
M << rendered2 //Admins can hear deadchat, if they choose to, no matter if they're blind/deaf or not.
else if(M.stat == DEAD)
M.show_message(rendered, 2) //Takes into account blindness and such.
M.show_message(rendered2, 2) //Takes into account blindness and such.
return
/mob/proc/say_understands(var/mob/other)

View File

@@ -309,7 +309,7 @@
/datum/organ/external/proc/update_wounds()
for(var/datum/wound/W in wounds)
// wounds can disappear after 10 minutes at the earliest
if(W.damage == 0 && W.created + 10 * 10 * 60 <= world.time)
if(W.damage == 0 && W.created + 3.25 * 10 * 60 <= world.time)
wounds -= W
// let the GC handle the deletion of the wound
@@ -648,7 +648,7 @@
name = "head"
icon_name = "head"
display_name = "head"
max_damage = 75
max_damage = 130
min_broken_damage = 40
body_part = HEAD
var/disfigured = 0

View File

@@ -96,6 +96,19 @@
for(var/mob/O in viewers(src, null))
O.show_message("\red [user] cuts the cable.", 1)
var/message = "A wire has been cut"
var/atom/A = user
if(A)
var/turf/Z = get_turf(A)
var/area/my_area = get_area(Z)
message += " in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
message += " (<A HREF='?_src_=vars;Vars=\ref[A]'>VV</A>)"
var/mob/M = get(A, /mob)
if(M)
message += " - Cut By: [M.real_name] ([M.key]) (<A HREF='?_src_=holder;adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)"
log_game("[M.real_name] ([M.key]) cut a wire in [my_area.name] ([T.x],[T.y],[T.z])")
message_admins(message, 0, 1)
del(src)
return // not needed, but for clarity

View File

@@ -461,6 +461,8 @@ var/list/solars_list = list()
if(src.trackrate) nexttime = world.time + 6000/trackrate
track = text2num(href_list["track"])
if(powernet && (track == 2))
if(!solars_list.Find(src,1,0))
solars_list.Add(src)
for(var/obj/machinery/power/tracker/T in get_solars_powernet())
if(powernet.nodes[T])
cdir = T.sun_angle

View File

@@ -72,6 +72,8 @@
winset(user, "chemdispenser.eject", "text=\"Eject beaker\"")
else
winset(user, "chemdispenser.eject", "text=\"\[Insert beaker\]\"")
/*Old
/obj/machinery/chem_dispenser/proc/initWindow(mob/user as mob)
var/i = 0
var/list/nameparams = params2list(winget(user, "chemdispenser_reagents.template_name", "pos;size;type;image;image-mode"))
@@ -92,6 +94,35 @@
winset(user, "chemdispenser_reagent_dispense[i]", list2params(newparams2))
i++
winset(user, "chemdispenser_reagents", "size=340x[8 + 40 * i]")
*/
//New
/obj/machinery/chem_dispenser/proc/initWindow(mob/user as mob)
var/i = 0
var/chemC = 0
var/j = 0
//var/selectedChemical = null
var/list/nameparams = params2list(winget(user, "chemdispenser_reagents.template_name", "pos;size;background-color;text-color;type;"))
for(var/re in dispensable_reagents)
var/datum/reagent/temp = chemical_reagents_list[re]
if(temp)
var/list/newparams1 = nameparams.Copy()
//var/list/newparams2 = buttonparams.Copy()
var/posy = 8 + 40 * i
var/posx = 16 + 176 * j
newparams1["pos"] = text("[posx],[posy]")
newparams1["font-size"] = "13"
//newparams1["font-style"] = "bold"
newparams1["parent"] = "chemdispenser_reagents"
newparams1["text"] = temp.name //+ " " + "[chemC]"
newparams1["command"] = text("skincmd \"chemdispenser;[temp.id]\"")
winset(user, "chemdispenser_reagent_name[chemC]", list2params(newparams1))
j++
chemC = chemC + 1
if(j>=3)
j = 0
i++
winset(user, "chemdispenser_reagents", "size=340x[8 + 32 * (i-2)]")
/obj/machinery/chem_dispenser/SkinCmd(mob/user as mob, var/data as text)
if(stat & (BROKEN|NOPOWER)) return
@@ -121,7 +152,7 @@
R.add_reagent(data, min(amount, energy * 10, space))
energy = max(energy - min(amount, energy * 10, space) / 10, 0)
amount = round(amount, 10) // Chem dispenser doesnt really have that much prescion
amount = round(amount, 5) // Chem dispenser doesnt really have that much prescion
if (amount < 0) // Since the user can actually type the commands himself, some sanity checking
amount = 0
if (amount > 100)

View File

@@ -966,7 +966,24 @@ datum
O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
S.loc = get_turf_loc(holder.my_atom)
var/message = "A grey slime reaction has occured"
var/atom/A = holder.my_atom
if(A)
var/turf/T = get_turf(A)
var/area/my_area = get_area(T)
message += " in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
message += " (<A HREF='?_src_=vars;Vars=\ref[A]'>VV</A>)"
var/mob/M = get(A, /mob)
if(M)
message += " - Carried By: [M.real_name] ([M.key]) (<A HREF='?_src_=holder;adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)"
else
message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
else
message += "."
message_admins(message, 0, 1)
slimemonkey
name = "Slime Monkey"
@@ -1018,6 +1035,10 @@ datum
required_container = /obj/item/slime_extract/gold
required_other = 1
on_reaction(var/datum/reagents/holder)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
sleep(50)
var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
@@ -1035,6 +1056,26 @@ datum
)//exclusion list for things you don't want the reaction to create.
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
var/message = "A gold slime reaction has occured"
var/atom/A = holder.my_atom
if(A)
var/turf/T = get_turf(A)
var/area/my_area = get_area(T)
message += " in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
message += " (<A HREF='?_src_=vars;Vars=\ref[A]'>VV</A>)"
var/mob/M = get(A, /mob)
if(M)
message += " - Carried By: [M.real_name] ([M.key]) (<A HREF='?_src_=holder;adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)"
log_game("A gold slime reaction has occured in [my_area.name] ([T.x],[T.y],[T.z]) - Carried by [M.real_name] ([M.key])")
else
message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
log_game("A gold slime reaction has occured in [my_area.name] ([T.x],[T.y],[T.z]) - last fingerprint [(A.fingerprintslast ? A.fingerprintslast : "N/A")]")
else
message += "."
message_admins(message, 0, 1)
playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null))

View File

@@ -156,9 +156,9 @@
proc/explode()
if (reagents.total_volume > 500)
explosion(src.loc,1,2,4)
explosion(src.loc,-1,1,4)
else if (reagents.total_volume > 100)
explosion(src.loc,0,1,3)
explosion(src.loc,-1,1,3)
else
explosion(src.loc,-1,1,2)
if(src)
@@ -214,4 +214,4 @@
New()
..()
reagents.add_reagent("virusfood", 1000)
reagents.add_reagent("virusfood", 1000)

View File

@@ -155,9 +155,9 @@
/world/Reboot(var/reason)
/*spawn(0)
world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy
*/
spawn(0)
world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg','slugmissioncomplete.ogg')) // random end sounds!! - LastyBatsy
for(var/client/C in clients)
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
C << link("byond://[config.server]")
@@ -307,6 +307,7 @@ proc/setup_database_connection()
if ( . )
failed_db_connections = 0 //If this connection succeeded, reset the failed connections counter.
else
world.log << "Error: [dbcon.ErrorMsg()]"
failed_db_connections++ //If it failed, increase the failed connections counter.
return .
@@ -316,6 +317,12 @@ proc/establish_db_connection()
if(failed_db_connections > FAILED_DB_CONNECTION_CUTOFF)
return 0
var/DBQuery/q
if(dbcon)
q = dbcon.NewQuery("show global variables like 'wait_timeout'")
q.Execute()
if(q.ErrorMsg())
dbcon.Disconnect()
if(!dbcon || !dbcon.IsConnected())
return setup_database_connection()
else

View File

@@ -1,53 +0,0 @@
botanistpower - Tajaran
bountylord13 - Soghun
bowlsoldier - Tajaran
bluefishie - Skrell
cubejackal - Soghun
danny220 - Skrell
danny220 - Soghun
danny220 - Tajaran
darkwingstalker - Skrell
deciusreln - Skrell
densane - Skrell
dopeghoti - Tajaran
duntadaman - Skrell
fenrisian - Tajaran
firefishie - Skrell
focksinabocks - Skrell
focksinabocks - Tajaran
foolamancer - Skrell
forsamori - Tajaran
forsamori - Soghun
galenus - Soghun
galenus - Skrell
galenus - Tajaran
kersh - Skrell
jadepython - Skrell
jadepython - Soghun
jadepython - Tajaran
masterofstuff - Skrell
masterofstuff - Soghun
mangled - Skrell
mcgulliver - Skrell
nerezza - Skrell
nerezza - Soghun
nerezza - Tajaran
nestromo - Soghun
philphil123 - Soghun
quilan - Tajaran
searif - Soghun
searif - Tajaran
searif - Skrell
serithi - Skrell
serithi - Soghun
serithi - Tajaran
sniperyeti - Skrell
spaceman96 - Tajaran
spaceman96 - Soghun
spaceman96 - Skrell
sparklysheep - Skrell
succubusy - Skrell
teddybehr - Soghun
whitellama - Skrell
watermelonstorm - Tajaran
yoshax - Tajaran

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 KiB

After

Width:  |  Height:  |  Size: 793 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -77,7 +77,7 @@ macro "macro"
is-disabled = false
elem
name = "CTRL+4"
command = "a-intent hurt"
command = "a-intent harm"
is-disabled = false
elem
name = "CTRL+A+REP"
@@ -135,10 +135,6 @@ macro "macro"
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
elem
name = "F2"
command = "ooc"
is-disabled = false
elem
name = "F2+REP"
command = ".screenshot auto"
@@ -147,17 +143,9 @@ macro "macro"
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
elem
name = "F3"
command = "say"
is-disabled = false
elem
name = "F4"
command = "me"
is-disabled = false
elem
name = "F5"
command = "asay"
command = "Aghost"
is-disabled = false
elem
name = "F6"
@@ -267,11 +255,11 @@ macro "hotkeymode"
is-disabled = false
elem
name = "4"
command = "a-intent hurt"
command = "a-intent harm"
is-disabled = false
elem
name = "CTRL+4"
command = "a-intent hurt"
command = "a-intent harm"
is-disabled = false
elem
name = "A+REP"
@@ -381,10 +369,6 @@ macro "hotkeymode"
name = "CTRL+SHIFT+F1+REP"
command = ".options"
is-disabled = false
elem
name = "F2"
command = "ooc"
is-disabled = false
elem
name = "F2+REP"
command = ".screenshot auto"
@@ -393,17 +377,9 @@ macro "hotkeymode"
name = "SHIFT+F2+REP"
command = ".screenshot"
is-disabled = false
elem
name = "F3"
command = "say"
is-disabled = false
elem
name = "F4"
command = "me"
is-disabled = false
elem
name = "F5"
command = "asay"
command = "Aghost"
is-disabled = false
elem
name = "F6"
@@ -750,7 +726,7 @@ window "Telecomms IDE"
right-click = false
saved-params = "is-checked"
on-size = ""
text = "Apply"
text = "Save"
image = ""
command = "tcssave"
is-flat = false
@@ -787,14 +763,14 @@ window "chemdispenser"
elem "chemdispenser"
type = MAIN
pos = 281,0
size = 340x480
size = 625x412
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
background-color = #414141
is-visible = false
is-disabled = false
is-transparent = false
@@ -809,7 +785,7 @@ window "chemdispenser"
statusbar = false
can-close = true
can-minimize = true
can-resize = true
can-resize = false
is-pane = false
is-minimized = false
is-maximized = false
@@ -823,17 +799,73 @@ window "chemdispenser"
macro = ""
menu = ""
on-close = ""
elem "eject"
type = BUTTON
pos = 328,373
size = 296x39
anchor1 = 10,91
anchor2 = 100,100
font-family = ""
font-size = 13
font-style = ""
text-color = #808080
background-color = #414141
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "[Insert beaker]"
image = ""
command = "skincmd \"chemdispenser;eject\""
is-flat = true
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "amountc"
type = BUTTON
pos = 0,373
size = 280x39
anchor1 = 0,91
anchor2 = 0,100
font-family = ""
font-size = 13
font-style = ""
text-color = #808080
background-color = #414141
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "Change Amount"
image = ""
command = "skincmd \"chemdispenser;amountc\""
is-flat = true
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "energy"
type = LABEL
pos = 8,24
size = 56x16
anchor1 = none
pos = 288,0
size = 264x32
anchor1 = 100,0
anchor2 = none
font-family = ""
font-size = 0
font-size = 13
font-style = ""
text-color = #000000
background-color = none
text-color = #808080
background-color = #414141
is-visible = true
is-disabled = false
is-transparent = false
@@ -849,157 +881,17 @@ window "chemdispenser"
keep-aspect = false
align = center
text-wrap = false
elem "eject"
type = BUTTON
pos = 264,4
size = 72x20
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "[Insert beaker]"
image = ""
command = "skincmd \"chemdispenser;eject\""
is-flat = false
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "amountc"
type = BUTTON
pos = 208,4
size = 48x20
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "[Other]"
image = ""
command = "skincmd \"chemdispenser;amountc\""
is-flat = false
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "amount3"
type = BUTTON
pos = 176,4
size = 24x20
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "[30]"
image = ""
command = "skincmd \"chemdispenser;amount30\""
is-flat = false
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "amount2"
type = BUTTON
pos = 144,4
size = 24x20
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "[20]"
image = ""
command = "skincmd \"chemdispenser;amount20\""
is-flat = false
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "amount1"
type = BUTTON
pos = 112,4
size = 24x20
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
is-visible = true
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = "is-checked"
on-size = ""
text = "[10]"
image = ""
command = "skincmd \"chemdispenser;amount10\""
is-flat = false
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "amount"
type = LABEL
pos = 4,4
size = 100x20
anchor1 = none
anchor2 = none
pos = 0,0
size = 288x34
anchor1 = 0,0
anchor2 = 29,7
font-family = ""
font-size = 12
font-size = 13
font-style = ""
text-color = #000000
background-color = none
text-color = #808080
background-color = #414141
is-visible = true
is-disabled = false
is-transparent = false
@@ -1017,15 +909,15 @@ window "chemdispenser"
text-wrap = false
elem "child1"
type = CHILD
pos = 0,40
size = 340x440
anchor1 = none
anchor2 = none
pos = 0,32
size = 624x333
anchor1 = 0,8
anchor2 = 100,87
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
background-color = #408080
is-visible = true
is-disabled = false
is-transparent = false
@@ -1046,14 +938,14 @@ window "chemdispenser_reagents"
elem "chemdispenser_reagents"
type = MAIN
pos = 281,0
size = 340x448
size = 652x309
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-style = ""
text-color = #000000
background-color = none
background-color = #414141
is-visible = true
is-disabled = false
is-transparent = false
@@ -1082,17 +974,17 @@ window "chemdispenser_reagents"
macro = ""
menu = ""
on-close = ""
elem "template_dispense"
elem "template_name"
type = BUTTON
pos = 256,8
size = 64x32
pos = 8,8
size = 144x32
anchor1 = none
anchor2 = none
font-family = ""
font-size = 0
font-size = 13
font-style = ""
text-color = #000000
background-color = none
background-color = #808080
is-visible = false
is-disabled = false
is-transparent = false
@@ -1102,40 +994,14 @@ window "chemdispenser_reagents"
right-click = false
saved-params = "is-checked"
on-size = ""
text = "Dispense"
image = 'icons\\dispensebutton_bg.png'
text = "Chloral Hydrate"
image = ""
command = ""
is-flat = true
stretch = false
is-checked = false
group = ""
button-type = pushbutton
elem "template_name"
type = LABEL
pos = 18,8
size = 230x32
anchor1 = none
anchor2 = none
font-family = ""
font-size = 15
font-style = ""
text-color = #000000
background-color = none
is-visible = false
is-disabled = false
is-transparent = false
is-default = false
border = none
drop-zone = false
right-click = false
saved-params = ""
on-size = ""
text = "Chloral Hydrate"
image = 'icons\\reagentname_bg.png'
image-mode = stretch
keep-aspect = false
align = center
text-wrap = false
button-type = pushbox
window "mainwindow"
elem "mainwindow"

View File

@@ -3,15 +3,15 @@
#Maps should be 255x255 or smaller and be bounded. Falling off the edge of the map will result in undefined behavior.
#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START
maps/RandomZLevels/example.dmm
maps/RandomZLevels/blackmarketpackers.dmm
#maps/RandomZLevels/example.dmm
#aps/RandomZLevels/blackmarketpackers.dmm
#maps/RandomZLevels/stationCollision.dmm
#maps/RandomZLevels/spacebattle.dmm
maps/RandomZLevels/beach.dmm
#maps/RandomZLevels/beach.dmm
#maps/RandomZLevels/Academy.dmm
#maps/RandomZLevels/wildwest.dmm
#maps/RandomZLevels/challenge.dmm
maps/RandomZLevels/listeningpost.dmm
#maps/RandomZLevels/listeningpost.dmm
#maps/RandomZLevels/zresearchlabs.dmm
maps/RandomZLevels/jungle.dmm
maps/RandomZLevels/arcticwaste.dmm
#maps/RandomZLevels/jungle.dmm
#maps/RandomZLevels/arcticwaste.dmm

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/music/THUNDERDOME.ogg Normal file

Binary file not shown.