code:
		#define CROSSLINKED 2
		#define SELFLOOPING 1
		#define UNAFFECTED 0
		#define MAIN_STATION "Main Station"
		#define CENTCOMM "CentComm"
		#define ABANDONED_SATELLITE "Abandoned Satellite"
		#define DERELICT "Derelicted Station"
		#define MINING "Mining Asteroid"
		#define EMPTY_AREA_1 "Empty Area 1"
		#define EMPTY_AREA_2 "Empty Area 2"
		#define AWAY_MISSION "Away Mission"
		#define AWAY_MISSION_LIST list(AWAY_MISSION = SELFLOOPING)


code:
/*
Birdstation by Tokiko1

A small map intended for lowpop(40 players and less).

*/

#if !defined(MAP_FILE)

		#define TITLESCREEN "title" //Add an image in misc/fullscreen.dmi, and set this define to the icon_state, to set a custom titlescreen for your map

		#define MINETYPE "mining"

        #include "map_files\BirdStation\BirdStation.dmm"
        #include "map_files\generic\z2.dmm"
        #include "map_files\generic\z3.dmm"
        #include "map_files\generic\z4.dmm"
        #include "map_files\BirdStation\z5.dmm"
        #include "map_files\generic\z6.dmm"
        #include "map_files\generic\z7.dmm"

		#define MAP_PATH "map_files/BirdStation"
        #define MAP_FILE "BirdStation.dmm"
        #define MAP_NAME "BirdboatStation"

        #define MAP_TRANSITION_CONFIG	list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, ABANDONED_SATELLITE = CROSSLINKED, DERELICT = CROSSLINKED, MINING = CROSSLINKED, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED)

		#if !defined(MAP_OVERRIDE_FILES)
				#define MAP_OVERRIDE_FILES
				#include "map_files\BirdStation\telecomms.dm"
				#include "map_files\BirdStation\misc.dm"
				#include "map_files\BirdStation\job\job_changes.dm"
		        #include "map_files\BirdStation\job\removed_jobs.dm"
		#endif

#elif !defined(MAP_OVERRIDE)

	#warn a map has already been included, ignoring birdstation.

#endif

license: mit


code:
/*
The /tg/ codebase currently requires you to have 7 z-levels of the same size dimensions.
z-level order is important, the order you put them in inside this file will determine what z level number they are assigned ingame.
Names of z-level do not matter, but order does greatly, for instances such as checking alive status of revheads on z1

current as of 2014/11/24
z1 = station
z2 = centcomm
z3 = derelict telecomms satellite
z4 = derelict station
z5 = mining
z6 = empty space
z7 = empty space
*/

#if !defined(MAP_FILE)

		#define TITLESCREEN "title" //Add an image in misc/fullscreen.dmi, and set this define to the icon_state, to set a custom titlescreen for your map

		#define MINETYPE "lavaland"

        #include "map_files\DreamStation\dreamstation04.dmm"
        #include "map_files\generic\z2.dmm"
        #include "map_files\generic\z3.dmm"
        #include "map_files\generic\z4.dmm"
        #include "map_files\generic\lavaland.dmm"
        #include "map_files\generic\z6.dmm"
        #include "map_files\generic\z7.dmm"

		#define MAP_PATH "map_files/DreamStation"
        #define MAP_FILE "dreamstation04.dmm"
        #define MAP_NAME "DreamStation"

        #define MAP_TRANSITION_CONFIG	list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, ABANDONED_SATELLITE = CROSSLINKED, DERELICT = CROSSLINKED, MINING = SELFLOOPING, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED)

#elif !defined(MAP_OVERRIDE)

	#warn a map has already been included, ignoring DreamStation.

#endif


code:
/*
The /tg/ codebase currently requires you to have 7 z-levels of the same size dimensions.
z-level order is important, the order you put them in inside this file will determine what z level number they are assigned ingame.
Names of z-level do not matter, but order does greatly, for instances such as checking alive status of revheads on z1

current as of 2014/11/24
z1 = station
z2 = centcomm
z3 = derelict telecomms satellite
z4 = derelict station
z5 = mining
z6 = empty space
z7 = empty space
*/

#if !defined(MAP_FILE)

		#define TITLESCREEN "title" //Add an image in misc/fullscreen.dmi, and set this define to the icon_state, to set a custom titlescreen for your map

		#define MINETYPE "lavaland"

        #include "map_files\EfficiencyStation\EfficiencyStation.dmm"
        #include "map_files\generic\z2.dmm"
        #include "map_files\generic\z3.dmm"
        #include "map_files\generic\z4.dmm"
        #include "map_files\generic\lavaland.dmm"
        #include "map_files\generic\z6.dmm"
        #include "map_files\generic\z7.dmm"

		#define MAP_PATH "map_files/EfficiencyStation"
        #define MAP_FILE "EfficiencyStation.dmm"
        #define MAP_NAME "Efficiency Station"

        #define MAP_TRANSITION_CONFIG	list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, ABANDONED_SATELLITE = CROSSLINKED, DERELICT = CROSSLINKED, MINING = SELFLOOPING, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED)

#elif !defined(MAP_OVERRIDE)

	#warn a map has already been included, ignoring Efficiency Station.

#endif


code:
//custom access for some jobs. pasted together from ministation.

/datum/job/New()
	..()
	supervisors = "the captain and the head of personnel"

/datum/outfit/job/New()
	box = /obj/item/weapon/storage/box/birdsurv

/datum/job/assistant // Here so assistant appears on the top of the select job list.

//Command

/datum/job/captain/New()
	..()
	supervisors = "Nanotrasen and Central Command"

/datum/job/hop/New()
	..()
	supervisors = "the captain and Central Command"

/datum/job/hop/get_access()
	return get_all_accesses()

//Security

/datum/job/hos/New()
	..()

/datum/outfit/job/hos/New()
	box = /obj/item/weapon/storage/box/birdsec

/datum/job/officer/New()
	..()
	total_positions = 4
	spawn_positions = 4
	access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
	minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)

/datum/outfit/job/officer/New()
	box = /obj/item/weapon/storage/box/birdsec

/datum/job/detective/New()
	..()
	access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
	minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)

/datum/outfit/job/detective/New()
	box = /obj/item/weapon/storage/box/birdsec

//Medbay

/datum/job/doctor/New()
	..()
	selection_color = "#ffffff"
	total_positions = 6
	spawn_positions = 6
	access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
	minimal_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)

//Engineering

/datum/job/engineer/New()
	..()
	total_positions = 4
	spawn_positions = 4
	access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat)
	minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat)

/datum/outfit/job/engineer/New()
	box = /obj/item/weapon/storage/box/birdeng

//Science

/datum/job/scientist/New()
	..()
	total_positions = 5
	spawn_positions = 5
	access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage)
	minimal_access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage)

//Cargo

/datum/job/cargo_tech/New()
	..()
	access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
	minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)

/datum/job/mining/New()
	..()
	access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
	minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)

/datum/outfit/job/mining/New()
	box = /obj/item/weapon/storage/box/birdeng

//Service

/datum/job/bartender/New()
	..()
	access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons)
	minimal_access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons)

/datum/job/cook/New()
	..()
	access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons)
	minimal_access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons)

/datum/job/hydro/New()
	..()
	access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels)
	minimal_access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels)
	// they get maint access because of all the hydro content in maint

/datum/job/janitor/New()
	..()
	access = list(access_janitor, access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels)
	minimal_access = list(access_janitor, access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels)

//Civilian

/datum/job/clown/New()
	..()
	supervisors = "nobody but yourself" //Honk


code:
//removed jobs. pasted together from MiniStation.

/datum/job/atmos/config_check()
	return 0

/datum/job/chief_engineer/config_check()
	return 0

/datum/job/qm/config_check()
	return 0

/datum/job/cmo/config_check()
	return 0

/datum/job/chemist/config_check()
	return 0

/datum/job/geneticist/config_check()
	return 0

/datum/job/virologist/config_check()
	return 0

/datum/job/rd/config_check()
	return 0

/datum/job/roboticist/config_check()
	return 0

/datum/job/chaplain/config_check()
	return 0

/datum/job/warden/config_check()
	return 0

/datum/job/lawyer/config_check()
	return 0


code:
// modified crusher
// only does 120 brute damage and won't eat the victims items

/obj/machinery/recycler/birdstation/eat(mob/living/L)

	L.loc = src.loc

	if(istype(L,/mob/living/silicon))
		playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
	else
		playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)

	var/gib = 1
	if(istype(L,/mob/living/carbon))
		gib = 0
		add_blood(L)

	if(!blood && !istype(L,/mob/living/silicon))
		blood = 1
		update_icon()
	L.Paralyse(5)
	if(gib || emagged == 2)
		L.gib()
	else if(emagged == 1)
		L.adjustBruteLoss(120)

// we don't want anyone to dismantle or disable the crusher easily

/obj/machinery/recycler/birdstation/attackby(obj/item/I, mob/user, params)
	if (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/screwdriver))
		return

//special birdstation survival boxes

/obj/item/weapon/storage/box/birdsurv/New()
	..()
	contents = list()
	new /obj/item/clothing/mask/breath(src)
	new /obj/item/weapon/tank/internals/emergency_oxygen(src)
	new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
	new /obj/item/device/radio/off(src)
	return

/obj/item/weapon/storage/box/birdeng/New()
	..()
	contents = list()
	new /obj/item/clothing/mask/breath(src)
	new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src)
	new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
	new /obj/item/device/radio/off(src)
	return

/obj/item/weapon/storage/box/birdsec/New()
	..()
	contents = list()
	new /obj/item/clothing/mask/gas/sechailer(src)
	new /obj/item/weapon/tank/internals/emergency_oxygen(src)
	new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
	new /obj/item/device/radio/off(src)
	return


code:
//preset comms, taken from MiniStation

/obj/machinery/telecomms/receiver/preset_left/birdstation
	name = "Receiver"
	freq_listening = list()

/obj/machinery/telecomms/bus/preset_one/birdstation
	name = "Bus"
	autolinkers = list("processor1", "common")
	freq_listening = list()

/obj/machinery/telecomms/processor/preset_one/birdstation
	name = "Processor"

/obj/machinery/telecomms/server/presets/common/birdstation/New()
	..()
	freq_listening = list()

/obj/machinery/telecomms/broadcaster/preset_left/birdstation
	name = "Broadcaster"