Conflicts:
	code/game/turfs/simulated/floor_types.dm
This commit is contained in:
Zuhayr
2015-08-22 03:57:12 +09:30
625 changed files with 17486 additions and 15293 deletions

View File

@@ -4,8 +4,8 @@ sudo: false
env: env:
BYOND_MAJOR="508" BYOND_MAJOR="508"
BYOND_MINOR="1287" BYOND_MINOR="1293"
MACRO_COUNT=1234 MACRO_COUNT=1210
cache: cache:
directories: directories:

View File

@@ -31,6 +31,7 @@
#include "code\__defines\mobs.dm" #include "code\__defines\mobs.dm"
#include "code\__defines\research.dm" #include "code\__defines\research.dm"
#include "code\__defines\species_languages.dm" #include "code\__defines\species_languages.dm"
#include "code\__defines\turfs.dm"
#include "code\_helpers\atmospherics.dm" #include "code\_helpers\atmospherics.dm"
#include "code\_helpers\datum_pool.dm" #include "code\_helpers\datum_pool.dm"
#include "code\_helpers\files.dm" #include "code\_helpers\files.dm"
@@ -222,7 +223,6 @@
#include "code\defines\procs\dbcore.dm" #include "code\defines\procs\dbcore.dm"
#include "code\defines\procs\hud.dm" #include "code\defines\procs\hud.dm"
#include "code\defines\procs\radio.dm" #include "code\defines\procs\radio.dm"
#include "code\defines\procs\records.dm"
#include "code\defines\procs\sd_Alert.dm" #include "code\defines\procs\sd_Alert.dm"
#include "code\defines\procs\statistics.dm" #include "code\defines\procs\statistics.dm"
#include "code\game\asteroid.dm" #include "code\game\asteroid.dm"
@@ -357,7 +357,6 @@
#include "code\game\machinery\autolathe.dm" #include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\autolathe_datums.dm" #include "code\game\machinery\autolathe_datums.dm"
#include "code\game\machinery\Beacon.dm" #include "code\game\machinery\Beacon.dm"
#include "code\game\machinery\bees_items.dm"
#include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\biogenerator.dm"
#include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\bioprinter.dm"
#include "code\game\machinery\bluespacerelay.dm" #include "code\game\machinery\bluespacerelay.dm"
@@ -373,6 +372,7 @@
#include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\doppler_array.dm"
#include "code\game\machinery\flasher.dm" #include "code\game\machinery\flasher.dm"
#include "code\game\machinery\floodlight.dm" #include "code\game\machinery\floodlight.dm"
#include "code\game\machinery\floor_light.dm"
#include "code\game\machinery\floorlayer.dm" #include "code\game\machinery\floorlayer.dm"
#include "code\game\machinery\hologram.dm" #include "code\game\machinery\hologram.dm"
#include "code\game\machinery\holosign.dm" #include "code\game\machinery\holosign.dm"
@@ -388,7 +388,6 @@
#include "code\game\machinery\nuclear_bomb.dm" #include "code\game\machinery\nuclear_bomb.dm"
#include "code\game\machinery\OpTable.dm" #include "code\game\machinery\OpTable.dm"
#include "code\game\machinery\overview.dm" #include "code\game\machinery\overview.dm"
#include "code\game\machinery\portable_tag_turret.dm"
#include "code\game\machinery\portable_turret.dm" #include "code\game\machinery\portable_turret.dm"
#include "code\game\machinery\recharger.dm" #include "code\game\machinery\recharger.dm"
#include "code\game\machinery\rechargestation.dm" #include "code\game\machinery\rechargestation.dm"
@@ -580,7 +579,6 @@
#include "code\game\objects\effects\decals\posters\bs12.dm" #include "code\game\objects\effects\decals\posters\bs12.dm"
#include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\bombspawner.dm"
#include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm"
#include "code\game\objects\effects\spawners\vaultspawner.dm"
#include "code\game\objects\items\apc_frame.dm" #include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\blueprints.dm"
#include "code\game\objects\items\bodybag.dm" #include "code\game\objects\items\bodybag.dm"
@@ -609,6 +607,7 @@
#include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\spy_bug.dm" #include "code\game\objects\items\devices\spy_bug.dm"
#include "code\game\objects\items\devices\suit_cooling.dm" #include "code\game\objects\items\devices\suit_cooling.dm"
#include "code\game\objects\items\devices\t_scanner.dm"
#include "code\game\objects\items\devices\taperecorder.dm" #include "code\game\objects\items\devices\taperecorder.dm"
#include "code\game\objects\items\devices\traitordevices.dm" #include "code\game\objects\items\devices\traitordevices.dm"
#include "code\game\objects\items\devices\transfer_valve.dm" #include "code\game\objects\items\devices\transfer_valve.dm"
@@ -637,14 +636,12 @@
#include "code\game\objects\items\stacks\rods.dm" #include "code\game\objects\items\stacks\rods.dm"
#include "code\game\objects\items\stacks\stack.dm" #include "code\game\objects\items\stacks\stack.dm"
#include "code\game\objects\items\stacks\sheets\leather.dm" #include "code\game\objects\items\stacks\sheets\leather.dm"
#include "code\game\objects\items\stacks\sheets\light.dm"
#include "code\game\objects\items\stacks\tiles\light.dm"
#include "code\game\objects\items\stacks\tiles\plasteel.dm"
#include "code\game\objects\items\stacks\tiles\tile_types.dm" #include "code\game\objects\items\stacks\tiles\tile_types.dm"
#include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\autopsy.dm" #include "code\game\objects\items\weapons\autopsy.dm"
#include "code\game\objects\items\weapons\candle.dm" #include "code\game\objects\items\weapons\candle.dm"
#include "code\game\objects\items\weapons\cards_ids.dm" #include "code\game\objects\items\weapons\cards_ids.dm"
#include "code\game\objects\items\weapons\cards_ids_syndicate.dm"
#include "code\game\objects\items\weapons\cigs_lighters.dm" #include "code\game\objects\items\weapons\cigs_lighters.dm"
#include "code\game\objects\items\weapons\clown_items.dm" #include "code\game\objects\items\weapons\clown_items.dm"
#include "code\game\objects\items\weapons\cosmetics.dm" #include "code\game\objects\items\weapons\cosmetics.dm"
@@ -691,6 +688,7 @@
#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
@@ -699,6 +697,7 @@
#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm"
#include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm"
#include "code\game\objects\items\weapons\grenades\chem_grenade.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm" #include "code\game\objects\items\weapons\grenades\flashbang.dm"
@@ -811,9 +810,18 @@
#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm" #include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm"
#include "code\game\turfs\simulated.dm" #include "code\game\turfs\simulated.dm"
#include "code\game\turfs\turf.dm" #include "code\game\turfs\turf.dm"
#include "code\game\turfs\turf_changing.dm"
#include "code\game\turfs\turf_flick_animations.dm" #include "code\game\turfs\turf_flick_animations.dm"
#include "code\game\turfs\unsimulated.dm" #include "code\game\turfs\unsimulated.dm"
#include "code\game\turfs\flooring\flooring.dm"
#include "code\game\turfs\flooring\flooring_decals.dm"
#include "code\game\turfs\flooring\flooring_premade.dm"
#include "code\game\turfs\simulated\floor.dm" #include "code\game\turfs\simulated\floor.dm"
#include "code\game\turfs\simulated\floor_acts.dm"
#include "code\game\turfs\simulated\floor_attackby.dm"
#include "code\game\turfs\simulated\floor_damage.dm"
#include "code\game\turfs\simulated\floor_icon.dm"
#include "code\game\turfs\simulated\floor_static.dm"
#include "code\game\turfs\simulated\floor_types.dm" #include "code\game\turfs\simulated\floor_types.dm"
#include "code\game\turfs\simulated\wall_attacks.dm" #include "code\game\turfs\simulated\wall_attacks.dm"
#include "code\game\turfs\simulated\wall_icon.dm" #include "code\game\turfs\simulated\wall_icon.dm"
@@ -834,6 +842,7 @@
#include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_investigate.dm"
#include "code\modules\admin\admin_memo.dm" #include "code\modules\admin\admin_memo.dm"
#include "code\modules\admin\admin_ranks.dm" #include "code\modules\admin\admin_ranks.dm"
#include "code\modules\admin\admin_secrets.dm"
#include "code\modules\admin\admin_verbs.dm" #include "code\modules\admin\admin_verbs.dm"
#include "code\modules\admin\banjob.dm" #include "code\modules\admin\banjob.dm"
#include "code\modules\admin\create_mob.dm" #include "code\modules\admin\create_mob.dm"
@@ -841,6 +850,7 @@
#include "code\modules\admin\create_turf.dm" #include "code\modules\admin\create_turf.dm"
#include "code\modules\admin\holder2.dm" #include "code\modules\admin\holder2.dm"
#include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\IsBanned.dm"
#include "code\modules\admin\map_capture.dm"
#include "code\modules\admin\NewBan.dm" #include "code\modules\admin\NewBan.dm"
#include "code\modules\admin\player_notes.dm" #include "code\modules\admin\player_notes.dm"
#include "code\modules\admin\player_panel.dm" #include "code\modules\admin\player_panel.dm"
@@ -848,6 +858,43 @@
#include "code\modules\admin\ToRban.dm" #include "code\modules\admin\ToRban.dm"
#include "code\modules\admin\DB ban\functions.dm" #include "code\modules\admin\DB ban\functions.dm"
#include "code\modules\admin\permissionverbs\permissionedit.dm" #include "code\modules\admin\permissionverbs\permissionedit.dm"
#include "code\modules\admin\secrets\admin_secrets\admin_logs.dm"
#include "code\modules\admin\secrets\admin_secrets\alter_narsie.dm"
#include "code\modules\admin\secrets\admin_secrets\bombing_list.dm"
#include "code\modules\admin\secrets\admin_secrets\jump_shuttle.dm"
#include "code\modules\admin\secrets\admin_secrets\launch_shuttle.dm"
#include "code\modules\admin\secrets\admin_secrets\launch_shuttle_forced.dm"
#include "code\modules\admin\secrets\admin_secrets\list_dna.dm"
#include "code\modules\admin\secrets\admin_secrets\list_fingerprints.dm"
#include "code\modules\admin\secrets\admin_secrets\move_shuttle.dm"
#include "code\modules\admin\secrets\admin_secrets\prison_warp.dm"
#include "code\modules\admin\secrets\admin_secrets\show_ai_laws.dm"
#include "code\modules\admin\secrets\admin_secrets\show_crew_manifest.dm"
#include "code\modules\admin\secrets\admin_secrets\show_game_mode.dm"
#include "code\modules\admin\secrets\admin_secrets\show_law_changes.dm"
#include "code\modules\admin\secrets\admin_secrets\show_signalers.dm"
#include "code\modules\admin\secrets\admin_secrets\traitors_and_objectives.dm"
#include "code\modules\admin\secrets\final_solutions\summon_narsie.dm"
#include "code\modules\admin\secrets\final_solutions\supermatter_cascade.dm"
#include "code\modules\admin\secrets\fun_secrets\break_all_lights.dm"
#include "code\modules\admin\secrets\fun_secrets\break_some_lights.dm"
#include "code\modules\admin\secrets\fun_secrets\fix_all_lights.dm"
#include "code\modules\admin\secrets\fun_secrets\ghost_mode.dm"
#include "code\modules\admin\secrets\fun_secrets\make_all_areas_powered.dm"
#include "code\modules\admin\secrets\fun_secrets\make_all_areas_unpowered.dm"
#include "code\modules\admin\secrets\fun_secrets\only_one.dm"
#include "code\modules\admin\secrets\fun_secrets\paintball_mode.dm"
#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm"
#include "code\modules\admin\secrets\fun_secrets\remove_all_clothing.dm"
#include "code\modules\admin\secrets\fun_secrets\remove_internal_clothing.dm"
#include "code\modules\admin\secrets\fun_secrets\send_strike_team.dm"
#include "code\modules\admin\secrets\fun_secrets\toggle_bomb_cap.dm"
#include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm"
#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm"
#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm"
#include "code\modules\admin\secrets\random_events\gravity.dm"
#include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm"
#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm"
#include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminhelp.dm"
#include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminjump.dm"
#include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminpm.dm"
@@ -913,6 +960,7 @@
#include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_savefile.dm"
#include "code\modules\client\preferences_spawnpoints.dm" #include "code\modules\client\preferences_spawnpoints.dm"
#include "code\modules\client\preferences_toggles.dm" #include "code\modules\client\preferences_toggles.dm"
#include "code\modules\client\ui_style.dm"
#include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\chameleon.dm"
#include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\clothing.dm"
#include "code\modules\clothing\ears\skrell.dm" #include "code\modules\clothing\ears\skrell.dm"
@@ -1067,11 +1115,11 @@
#include "code\modules\hydroponics\seed_mobs.dm" #include "code\modules\hydroponics\seed_mobs.dm"
#include "code\modules\hydroponics\seed_packets.dm" #include "code\modules\hydroponics\seed_packets.dm"
#include "code\modules\hydroponics\seed_storage.dm" #include "code\modules\hydroponics\seed_storage.dm"
#include "code\modules\hydroponics\beekeeping\beehive.dm"
#include "code\modules\hydroponics\spreading\spreading.dm" #include "code\modules\hydroponics\spreading\spreading.dm"
#include "code\modules\hydroponics\spreading\spreading_growth.dm" #include "code\modules\hydroponics\spreading\spreading_growth.dm"
#include "code\modules\hydroponics\spreading\spreading_response.dm" #include "code\modules\hydroponics\spreading\spreading_response.dm"
#include "code\modules\hydroponics\trays\tray.dm" #include "code\modules\hydroponics\trays\tray.dm"
#include "code\modules\hydroponics\trays\tray_apiary.dm"
#include "code\modules\hydroponics\trays\tray_process.dm" #include "code\modules\hydroponics\trays\tray_process.dm"
#include "code\modules\hydroponics\trays\tray_reagents.dm" #include "code\modules\hydroponics\trays\tray_reagents.dm"
#include "code\modules\hydroponics\trays\tray_soil.dm" #include "code\modules\hydroponics\trays\tray_soil.dm"
@@ -1117,6 +1165,7 @@
#include "code\modules\mob\animations.dm" #include "code\modules\mob\animations.dm"
#include "code\modules\mob\death.dm" #include "code\modules\mob\death.dm"
#include "code\modules\mob\emote.dm" #include "code\modules\mob\emote.dm"
#include "code\modules\mob\gender.dm"
#include "code\modules\mob\hear_say.dm" #include "code\modules\mob\hear_say.dm"
#include "code\modules\mob\holder.dm" #include "code\modules\mob\holder.dm"
#include "code\modules\mob\inventory.dm" #include "code\modules\mob\inventory.dm"
@@ -1270,6 +1319,7 @@
#include "code\modules\mob\living\silicon\silicon.dm" #include "code\modules\mob\living\silicon\silicon.dm"
#include "code\modules\mob\living\silicon\subystems.dm" #include "code\modules\mob\living\silicon\subystems.dm"
#include "code\modules\mob\living\silicon\ai\ai.dm" #include "code\modules\mob\living\silicon\ai\ai.dm"
#include "code\modules\mob\living\silicon\ai\ai_movement.dm"
#include "code\modules\mob\living\silicon\ai\death.dm" #include "code\modules\mob\living\silicon\ai\death.dm"
#include "code\modules\mob\living\silicon\ai\examine.dm" #include "code\modules\mob\living\silicon\ai\examine.dm"
#include "code\modules\mob\living\silicon\ai\icons.dm" #include "code\modules\mob\living\silicon\ai\icons.dm"
@@ -1315,7 +1365,6 @@
#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_say.dm"
#include "code\modules\mob\living\simple_animal\bees.dm"
#include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\corpse.dm"
#include "code\modules\mob\living\simple_animal\parrot.dm" #include "code\modules\mob\living\simple_animal\parrot.dm"
#include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\shade.dm"
@@ -1374,6 +1423,7 @@
#include "code\modules\nano\interaction\default.dm" #include "code\modules\nano\interaction\default.dm"
#include "code\modules\nano\interaction\inventory.dm" #include "code\modules\nano\interaction\inventory.dm"
#include "code\modules\nano\interaction\inventory_deep.dm" #include "code\modules\nano\interaction\inventory_deep.dm"
#include "code\modules\nano\interaction\outside.dm"
#include "code\modules\nano\interaction\physical.dm" #include "code\modules\nano\interaction\physical.dm"
#include "code\modules\nano\interaction\self.dm" #include "code\modules\nano\interaction\self.dm"
#include "code\modules\nano\interaction\zlevel.dm" #include "code\modules\nano\interaction\zlevel.dm"
@@ -1417,6 +1467,7 @@
#include "code\modules\paperwork\paper.dm" #include "code\modules\paperwork\paper.dm"
#include "code\modules\paperwork\paper_bundle.dm" #include "code\modules\paperwork\paper_bundle.dm"
#include "code\modules\paperwork\paperbin.dm" #include "code\modules\paperwork\paperbin.dm"
#include "code\modules\paperwork\papershredder.dm"
#include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\pen.dm"
#include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\photocopier.dm"
#include "code\modules\paperwork\photography.dm" #include "code\modules\paperwork\photography.dm"
@@ -1428,7 +1479,6 @@
#include "code\modules\power\cable.dm" #include "code\modules\power\cable.dm"
#include "code\modules\power\cable_heavyduty.dm" #include "code\modules\power\cable_heavyduty.dm"
#include "code\modules\power\cell.dm" #include "code\modules\power\cell.dm"
#include "code\modules\power\engine.dm"
#include "code\modules\power\fractal_reactor.dm" #include "code\modules\power\fractal_reactor.dm"
#include "code\modules\power\generator.dm" #include "code\modules\power\generator.dm"
#include "code\modules\power\generator_type2.dm" #include "code\modules\power\generator_type2.dm"

View File

@@ -12,14 +12,14 @@
#define PIPE_COLOR_CYAN "#00ffff" #define PIPE_COLOR_CYAN "#00ffff"
#define PIPE_COLOR_GREEN "#00ff00" #define PIPE_COLOR_GREEN "#00ff00"
#define PIPE_COLOR_YELLOW "#ffcc00" #define PIPE_COLOR_YELLOW "#ffcc00"
#define PIPE_COLOR_PURPLE "#5c1ec0" #define PIPE_COLOR_BLACK "#444444"
#define CONNECT_TYPE_REGULAR 1 #define CONNECT_TYPE_REGULAR 1
#define CONNECT_TYPE_SUPPLY 2 #define CONNECT_TYPE_SUPPLY 2
#define CONNECT_TYPE_SCRUBBER 4 #define CONNECT_TYPE_SCRUBBER 4
#define CONNECT_TYPE_HE 8 #define CONNECT_TYPE_HE 8
var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE) var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "black" = PIPE_COLOR_BLACK)
/proc/pipe_color_lookup(var/color) /proc/pipe_color_lookup(var/color)
for(var/C in pipe_colors) for(var/C in pipe_colors)

View File

@@ -49,7 +49,7 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) /obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type)
if(node) if(node)
if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
//underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) //underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node))
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
else else

View File

@@ -8,8 +8,6 @@
#define PRESSURE_CHECK_INPUT 2 #define PRESSURE_CHECK_INPUT 2
#define PRESSURE_CHECK_OUTPUT 4 #define PRESSURE_CHECK_OUTPUT 4
#undefine
/obj/machinery/atmospherics/binary/dp_vent_pump /obj/machinery/atmospherics/binary/dp_vent_pump
icon = 'icons/atmos/vent_pump.dmi' icon = 'icons/atmos/vent_pump.dmi'
icon_state = "map_dp_vent" icon_state = "map_dp_vent"
@@ -69,7 +67,7 @@
if(!istype(T)) if(!istype(T))
return return
if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
vent_icon += "h" vent_icon += "h"
if(!powered()) if(!powered())
@@ -85,7 +83,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return return
if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
return return
else else
if (node1) if (node1)
@@ -259,3 +257,13 @@
spawn(2) spawn(2)
broadcast_status() broadcast_status()
update_icon() update_icon()
#undef DEFAULT_PRESSURE_DELTA
#undef EXTERNAL_PRESSURE_BOUND
#undef INTERNAL_PRESSURE_BOUND
#undef PRESSURE_CHECKS
#undef PRESSURE_CHECK_EXTERNAL
#undef PRESSURE_CHECK_INPUT
#undef PRESSURE_CHECK_OUTPUT

View File

@@ -2,8 +2,6 @@
#define REGULATE_INPUT 1 //shuts off when input side is below the target pressure #define REGULATE_INPUT 1 //shuts off when input side is below the target pressure
#define REGULATE_OUTPUT 2 //shuts off when output side is above the target pressure #define REGULATE_OUTPUT 2 //shuts off when output side is above the target pressure
#undefine
/obj/machinery/atmospherics/binary/passive_gate /obj/machinery/atmospherics/binary/passive_gate
icon = 'icons/atmos/passive_gate.dmi' icon = 'icons/atmos/passive_gate.dmi'
icon_state = "map" icon_state = "map"
@@ -259,3 +257,7 @@
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
qdel(src) qdel(src)
#undef REGULATE_NONE
#undef REGULATE_INPUT
#undef REGULATE_OUTPUT

View File

@@ -189,7 +189,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return return
if(T.intact && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 ) if(!T.is_plating() && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 )
//pipe_state = icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node)) //pipe_state = icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node))
pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down") pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down")
else else

View File

@@ -43,6 +43,13 @@
node = target node = target
break break
//copied from pipe construction code since heaters/freezers don't use fittings and weren't doing this check - this all really really needs to be refactored someday.
//check that there are no incompatible pipes/machinery in our own location
for(var/obj/machinery/atmospherics/M in src.loc)
if(M != src && (M.initialize_directions & node_connect) && M.check_connect_types(M,src)) // matches at least one direction on either type of pipe & same connection type
node = null
break
update_icon() update_icon()
/obj/machinery/atmospherics/unary/freezer/update_icon() /obj/machinery/atmospherics/unary/freezer/update_icon()

View File

@@ -69,7 +69,7 @@
if (!istype(W, /obj/item/weapon/wrench)) if (!istype(W, /obj/item/weapon/wrench))
return ..() return ..()
var/turf/T = src.loc var/turf/T = src.loc
if (level==1 && isturf(T) && T.intact) if (level==1 && isturf(T) && !T.is_plating())
user << "<span class='warning'>You must remove the plating first.</span>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()

View File

@@ -39,11 +39,19 @@
var/node_connect = dir var/node_connect = dir
//check that there is something to connect to
for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) for(var/obj/machinery/atmospherics/target in get_step(src, node_connect))
if(target.initialize_directions & get_dir(target, src)) if(target.initialize_directions & get_dir(target, src))
node = target node = target
break break
//copied from pipe construction code since heaters/freezers don't use fittings and weren't doing this check - this all really really needs to be refactored someday.
//check that there are no incompatible pipes/machinery in our own location
for(var/obj/machinery/atmospherics/M in src.loc)
if(M != src && (M.initialize_directions & node_connect) && M.check_connect_types(M,src)) // matches at least one direction on either type of pipe & same connection type
node = null
break
update_icon() update_icon()

View File

@@ -7,8 +7,6 @@
#define PRESSURE_CHECK_EXTERNAL 1 #define PRESSURE_CHECK_EXTERNAL 1
#define PRESSURE_CHECK_INTERNAL 2 #define PRESSURE_CHECK_INTERNAL 2
#undefine
/obj/machinery/atmospherics/unary/vent_pump /obj/machinery/atmospherics/unary/vent_pump
icon = 'icons/atmos/vent_pump.dmi' icon = 'icons/atmos/vent_pump.dmi'
icon_state = "map_vent" icon_state = "map_vent"
@@ -118,7 +116,7 @@
if(!istype(T)) if(!istype(T))
return return
if(T.intact && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
vent_icon += "h" vent_icon += "h"
if(welded) if(welded)
@@ -136,7 +134,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return return
if(T.intact && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
return return
else else
if(node) if(node)
@@ -399,7 +397,7 @@
user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>" user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>"
return 1 return 1
var/turf/T = src.loc var/turf/T = src.loc
if (node && node.level==1 && isturf(T) && T.intact) if (node && node.level==1 && isturf(T) && !T.is_plating())
user << "<span class='warning'>You must remove the plating first.</span>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()
@@ -424,3 +422,12 @@
initial_loc.air_vent_names -= id_tag initial_loc.air_vent_names -= id_tag
..() ..()
return return
#undef DEFAULT_PRESSURE_DELTA
#undef EXTERNAL_PRESSURE_BOUND
#undef INTERNAL_PRESSURE_BOUND
#undef PRESSURE_CHECKS
#undef PRESSURE_CHECK_EXTERNAL
#undef PRESSURE_CHECK_INTERNAL

View File

@@ -72,7 +72,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return return
if(T.intact && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
return return
else else
if(node) if(node)
@@ -261,7 +261,7 @@
user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>" user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>"
return 1 return 1
var/turf/T = src.loc var/turf/T = src.loc
if (node && node.level==1 && isturf(T) && T.intact) if (node && node.level==1 && isturf(T) && !T.is_plating())
user << "<span class='warning'>You must remove the plating first.</span>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()

View File

@@ -181,7 +181,7 @@ obj/machinery/atmospherics/mains_pipe/simple
..() // initialize internal pipes ..() // initialize internal pipes
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
hidden hidden
@@ -243,7 +243,7 @@ obj/machinery/atmospherics/mains_pipe/manifold
..() // initialize internal pipes ..() // initialize internal pipes
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
update_icon() update_icon()
@@ -293,7 +293,7 @@ obj/machinery/atmospherics/mains_pipe/manifold4w
..() // initialize internal pipes ..() // initialize internal pipes
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
update_icon() update_icon()
@@ -354,7 +354,7 @@ obj/machinery/atmospherics/mains_pipe/split
N1.merge(N2) N1.merge(N2)
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
update_icon() update_icon()
@@ -475,7 +475,7 @@ obj/machinery/atmospherics/mains_pipe/split3
N1.merge(N2) N1.merge(N2)
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
update_icon() update_icon()
@@ -525,7 +525,7 @@ obj/machinery/atmospherics/mains_pipe/cap
..() ..()
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
hidden hidden

View File

@@ -1,8 +1,7 @@
/obj/machinery/atmospherics/pipe /obj/machinery/atmospherics/pipe
var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke var/datum/gas_mixture/air_temporary // used when reconstructing a pipeline that broke
var/datum/pipeline/parent var/datum/pipeline/parent
var/volume = 0 var/volume = 0
force = 20 force = 20
@@ -20,10 +19,12 @@
return -1 return -1
/obj/machinery/atmospherics/pipe/New() /obj/machinery/atmospherics/pipe/New()
..()
//so pipes under walls are hidden
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall)) if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall))
level = 1 level = 1
..()
/obj/machinery/atmospherics/pipe/hides_under_flooring()
return level != 2
/obj/machinery/atmospherics/pipe/proc/pipeline_expansion() /obj/machinery/atmospherics/pipe/proc/pipeline_expansion()
return null return null
@@ -81,7 +82,7 @@
if (!istype(W, /obj/item/weapon/wrench)) if (!istype(W, /obj/item/weapon/wrench))
return ..() return ..()
var/turf/T = src.loc var/turf/T = src.loc
if (level==1 && isturf(T) && T.intact) if (level==1 && isturf(T) && !T.is_plating())
user << "<span class='warning'>You must remove the plating first.</span>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()
@@ -188,7 +189,7 @@
initialize_directions = SOUTH|WEST initialize_directions = SOUTH|WEST
/obj/machinery/atmospherics/pipe/simple/hide(var/i) /obj/machinery/atmospherics/pipe/simple/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -297,9 +298,8 @@
qdel(src) qdel(src)
return return
var/turf/T = get_turf(src) var/turf/T = loc
if(istype(T)) if(level == 1 && !T.is_plating()) hide(1)
hide(T.intact)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
@@ -348,8 +348,8 @@
/obj/machinery/atmospherics/pipe/simple/visible/green /obj/machinery/atmospherics/pipe/simple/visible/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/simple/visible/purple /obj/machinery/atmospherics/pipe/simple/visible/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/simple/visible/red /obj/machinery/atmospherics/pipe/simple/visible/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -390,8 +390,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/green /obj/machinery/atmospherics/pipe/simple/hidden/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/simple/hidden/purple /obj/machinery/atmospherics/pipe/simple/hidden/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/simple/hidden/red /obj/machinery/atmospherics/pipe/simple/hidden/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -446,7 +446,7 @@
initialize_directions = NORTH|EAST|SOUTH initialize_directions = NORTH|EAST|SOUTH
/obj/machinery/atmospherics/pipe/manifold/hide(var/i) /obj/machinery/atmospherics/pipe/manifold/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -582,8 +582,7 @@
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(istype(T)) if(level == 1 && !T.is_plating()) hide(1)
hide(T.intact)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/manifold/visible /obj/machinery/atmospherics/pipe/manifold/visible
@@ -617,8 +616,8 @@
/obj/machinery/atmospherics/pipe/manifold/visible/green /obj/machinery/atmospherics/pipe/manifold/visible/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold/visible/purple /obj/machinery/atmospherics/pipe/manifold/visible/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold/visible/red /obj/machinery/atmospherics/pipe/manifold/visible/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -659,8 +658,8 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/green /obj/machinery/atmospherics/pipe/manifold/hidden/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold/hidden/purple /obj/machinery/atmospherics/pipe/manifold/hidden/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold/hidden/red /obj/machinery/atmospherics/pipe/manifold/hidden/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -806,7 +805,7 @@
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i) /obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -841,8 +840,7 @@
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(istype(T)) if(level == 1 && !T.is_plating()) hide(1)
hide(T.intact)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/visible /obj/machinery/atmospherics/pipe/manifold4w/visible
@@ -876,8 +874,8 @@
/obj/machinery/atmospherics/pipe/manifold4w/visible/green /obj/machinery/atmospherics/pipe/manifold4w/visible/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold4w/visible/purple /obj/machinery/atmospherics/pipe/manifold4w/visible/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold4w/visible/red /obj/machinery/atmospherics/pipe/manifold4w/visible/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -917,8 +915,8 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/green /obj/machinery/atmospherics/pipe/manifold4w/hidden/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple /obj/machinery/atmospherics/pipe/manifold4w/hidden/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold4w/hidden/red /obj/machinery/atmospherics/pipe/manifold4w/hidden/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -946,7 +944,7 @@
initialize_directions = dir initialize_directions = dir
/obj/machinery/atmospherics/pipe/cap/hide(var/i) /obj/machinery/atmospherics/pipe/cap/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -997,7 +995,7 @@
break break
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) if(level == 1 && !T.is_plating()) hide(1)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/cap/visible /obj/machinery/atmospherics/pipe/cap/visible
@@ -1386,7 +1384,7 @@
/obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays /obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays
if(node) if(node)
if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
else else
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)

View File

@@ -46,8 +46,8 @@ obj/machinery/atmospherics/pipe/zpipe/New()
if(SOUTHWEST) if(SOUTHWEST)
initialize_directions = SOUTH initialize_directions = SOUTH
obj/machinery/atmospherics/pipe/zpipe/hide(var/i) /obj/machinery/atmospherics/pipe/zpipe/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -149,7 +149,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize()
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) hide(!T.is_plating())
/////////////////////// ///////////////////////
// and the down pipe // // and the down pipe //
@@ -190,7 +190,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/initialize()
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) hide(!T.is_plating())
/////////////////////// ///////////////////////
// supply/scrubbers // // supply/scrubbers //

View File

@@ -1,6 +1,5 @@
/turf/simulated/floor/open /turf/simulated/floor/open
name = "open space" name = "open space"
intact = 0
density = 0 density = 0
icon_state = "black" icon_state = "black"
pathweight = 100000 //Seriously, don't try and path over this one numbnuts pathweight = 100000 //Seriously, don't try and path over this one numbnuts
@@ -81,7 +80,6 @@
// override to make sure nothing is hidden // override to make sure nothing is hidden
/turf/simulated/floor/open/levelupdate() /turf/simulated/floor/open/levelupdate()
for(var/obj/O in src) for(var/obj/O in src)
if(O.level == 1)
O.hide(0) O.hide(0)
//overwrite the attackby of space to transform it to openspace if necessary //overwrite the attackby of space to transform it to openspace if necessary
@@ -114,16 +112,16 @@
ReplaceWithLattice() ReplaceWithLattice()
return return
if (istype(C, /obj/item/stack/tile/steel)) if (istype(C, /obj/item/stack/tile/floor))
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L) if(L)
var/obj/item/stack/tile/steel/S = C var/obj/item/stack/tile/floor/S = C
if (S.get_amount() < 1) if (S.get_amount() < 1)
return return
qdel(L) qdel(L)
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1) playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
S.build(src)
S.use(1) S.use(1)
ChangeTurf(/turf/simulated/floor/airless)
return return
else else
user << "<span class='warning'>The plating is going to need some support.</span>" user << "<span class='warning'>The plating is going to need some support.</span>"

View File

@@ -19,12 +19,12 @@ mob/proc/airflow_stun()
mob/living/silicon/airflow_stun() mob/living/silicon/airflow_stun()
return return
mob/living/carbon/metroid/airflow_stun() mob/living/carbon/slime/airflow_stun()
return return
mob/living/carbon/human/airflow_stun() mob/living/carbon/human/airflow_stun()
if(shoes) if(shoes)
if(shoes.flags & NOSLIP) return 0 if(shoes.item_flags & NOSLIP) return 0
..() ..()
atom/movable/proc/check_airflow_movable(n) atom/movable/proc/check_airflow_movable(n)
@@ -62,6 +62,19 @@ obj/item/check_airflow_movable(n)
/atom/movable/var/tmp/airflow_time = 0 /atom/movable/var/tmp/airflow_time = 0
/atom/movable/var/tmp/last_airflow = 0 /atom/movable/var/tmp/last_airflow = 0
/atom/movable/proc/AirflowCanMove(n)
return 1
/mob/AirflowCanMove(n)
if(status_flags & GODMODE)
return 0
if(buckled)
return 0
var/obj/item/shoes = get_equipped_item(slot_shoes)
if(istype(shoes) && (shoes.item_flags & NOSLIP))
return 0
return 1
/atom/movable/proc/GotoAirflowDest(n) /atom/movable/proc/GotoAirflowDest(n)
if(!airflow_dest) return if(!airflow_dest) return
if(airflow_speed < 0) return if(airflow_speed < 0) return
@@ -69,18 +82,13 @@ obj/item/check_airflow_movable(n)
if(airflow_speed) if(airflow_speed)
airflow_speed = n/max(get_dist(src,airflow_dest),1) airflow_speed = n/max(get_dist(src,airflow_dest),1)
return return
last_airflow = world.time
if(airflow_dest == loc) if(airflow_dest == loc)
step_away(src,loc) step_away(src,loc)
if(!src.AirflowCanMove(n))
return
if(ismob(src)) if(ismob(src))
if(src:status_flags & GODMODE)
return
if(istype(src, /mob/living/carbon/human))
if(src:buckled)
return
if(src:shoes && src:shoes.flags & NOSLIP)
return
src << "<span class='danger'>You are sucked away by airflow!</span>" src << "<span class='danger'>You are sucked away by airflow!</span>"
last_airflow = world.time
var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2) var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2)
if(airflow_falloff < 1) if(airflow_falloff < 1)
airflow_dest = null airflow_dest = null
@@ -116,8 +124,9 @@ obj/item/check_airflow_movable(n)
if(!istype(loc, /turf)) if(!istype(loc, /turf))
break break
step_towards(src, src.airflow_dest) step_towards(src, src.airflow_dest)
if(ismob(src) && src:client) var/mob/M = src
src:client:move_delay = world.time + vsc.airflow_mob_slowdown if(istype(M) && M.client)
M.setMoveCooldown(vsc.airflow_mob_slowdown)
airflow_dest = null airflow_dest = null
airflow_speed = 0 airflow_speed = 0
airflow_time = 0 airflow_time = 0
@@ -134,16 +143,9 @@ obj/item/check_airflow_movable(n)
return return
if(airflow_dest == loc) if(airflow_dest == loc)
step_away(src,loc) step_away(src,loc)
if(!src.AirflowCanMove(n))
return
if(ismob(src)) if(ismob(src))
if(src:status_flags & GODMODE)
return
if(istype(src, /mob/living/carbon/human))
if(src:buckled)
return
if(src:shoes)
if(istype(src:shoes, /obj/item/clothing/shoes/magboots))
if(src:shoes.flags & NOSLIP)
return
src << "<span clas='danger'>You are pushed away by airflow!</span>" src << "<span clas='danger'>You are pushed away by airflow!</span>"
last_airflow = world.time last_airflow = world.time
var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2) var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2)
@@ -242,6 +244,6 @@ zone/proc/movables()
. = list() . = list()
for(var/turf/T in contents) for(var/turf/T in contents)
for(var/atom/movable/A in T) for(var/atom/movable/A in T)
if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/aiEye)) if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/eye))
continue continue
. += A . += A

View File

@@ -97,14 +97,14 @@ obj/var/contaminated = 0
if(!wear_mask) if(!wear_mask)
burn_eyes() burn_eyes()
else else
if(!(wear_mask.flags & MASKCOVERSEYES)) if(!(wear_mask.body_parts_covered & EYES))
burn_eyes() burn_eyes()
else else
if(!(head.flags & HEADCOVERSEYES)) if(!(head.body_parts_covered & EYES))
if(!wear_mask) if(!wear_mask)
burn_eyes() burn_eyes()
else else
if(!(wear_mask.flags & MASKCOVERSEYES)) if(!(wear_mask.body_parts_covered & EYES))
burn_eyes() burn_eyes()
//Genetic Corruption //Genetic Corruption
@@ -135,19 +135,24 @@ obj/var/contaminated = 0
if(vsc.plc.PHORONGUARD_ONLY) if(vsc.plc.PHORONGUARD_ONLY)
if(head.flags & PHORONGUARD) if(head.flags & PHORONGUARD)
return 1 return 1
else if(head.flags & HEADCOVERSEYES) else if(head.body_parts_covered & EYES)
return 1 return 1
return 0 return 0
/mob/living/carbon/human/proc/pl_suit_protected() /mob/living/carbon/human/proc/pl_suit_protected()
//Checks if the suit is adequately sealed. //Checks if the suit is adequately sealed.
if(wear_suit) var/coverage = 0
if(vsc.plc.PHORONGUARD_ONLY) for(var/obj/item/protection in list(wear_suit, gloves, shoes))
if(wear_suit.flags & PHORONGUARD) return 1 if(!protection)
else continue
if(wear_suit.flags_inv & HIDEJUMPSUIT) return 1 if(vsc.plc.PHORONGUARD_ONLY && !(protection.flags & PHORONGUARD))
//should check HIDETAIL as well, but for the moment tails are not a part that can be damaged separately
return 0 return 0
coverage |= protection.body_parts_covered
if(vsc.plc.PHORONGUARD_ONLY)
return 1
return BIT_TEST_ALL(coverage, UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS)
/mob/living/carbon/human/proc/suit_contamination() /mob/living/carbon/human/proc/suit_contamination()
//Runs over the things that can be contaminated and does so. //Runs over the things that can be contaminated and does so.

View File

@@ -1,12 +1,12 @@
// A set of constants used to determine which type of mute an admin wishes to apply. // A set of constants used to determine which type of mute an admin wishes to apply.
// Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO, etc. = (MUTE_IC << 1) // Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO, etc. = (MUTE_IC << 1)
// Therefore there needs to be a gap between the flags for the automute flags. // Therefore there needs to be a gap between the flags for the automute flags.
#define MUTE_IC 1 #define MUTE_IC 0x1
#define MUTE_OOC 2 #define MUTE_OOC 0x2
#define MUTE_PRAY 4 #define MUTE_PRAY 0x4
#define MUTE_ADMINHELP 8 #define MUTE_ADMINHELP 0x8
#define MUTE_DEADCHAT 16 #define MUTE_DEADCHAT 0x10
#define MUTE_ALL 31 #define MUTE_ALL 0xFFFF
// Number of identical messages required to get the spam-prevention auto-mute thing to trigger warnings and automutes. // Number of identical messages required to get the spam-prevention auto-mute thing to trigger warnings and automutes.
#define SPAM_TRIGGER_WARNING 5 #define SPAM_TRIGGER_WARNING 5
@@ -21,22 +21,22 @@
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 // Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. #define ROUNDSTART_LOGOUT_REPORT_TIME 6000 // Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
// Admin permissions. Please don't edit these values without speaking to Errorage first. ~Carn // Admin permissions.
#define R_BUILDMODE 1 #define R_BUILDMODE 0x1
#define R_ADMIN 2 #define R_ADMIN 0x2
#define R_BAN 4 #define R_BAN 0x4
#define R_FUN 8 #define R_FUN 0x8
#define R_SERVER 16 #define R_SERVER 0x10
#define R_DEBUG 32 #define R_DEBUG 0x20
#define R_POSSESS 64 #define R_POSSESS 0x40
#define R_PERMISSIONS 128 #define R_PERMISSIONS 0x80
#define R_STEALTH 256 #define R_STEALTH 0x100
#define R_REJUVINATE 512 #define R_REJUVINATE 0x200
#define R_VAREDIT 1024 #define R_VAREDIT 0x400
#define R_SOUNDS 2048 #define R_SOUNDS 0x800
#define R_SPAWN 4096 #define R_SPAWN 0x1000
#define R_MOD 8192 #define R_MOD 0x2000
#define R_MENTOR 16384 #define R_MENTOR 0x4000
#define R_HOST 32768 #define R_HOST 0x8000 //higher than this will overflow
#define R_MAXPERMISSION 32768 // This holds the maximum value for a permission. It is used in iteration, so keep it updated. #define R_MAXPERMISSION 0x8000 // This holds the maximum value for a permission. It is used in iteration, so keep it updated.

View File

@@ -8,6 +8,8 @@
#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible. #define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible.
#define MOLES_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%) #define MOLES_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
#define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%) #define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%)
#define MOLES_O2ATMOS (MOLES_O2STANDARD*50)
#define MOLES_N2ATMOS (MOLES_N2STANDARD*50)
// These are for when a mob breathes poisonous air. // These are for when a mob breathes poisonous air.
#define MIN_TOXIN_DAMAGE 1 #define MIN_TOXIN_DAMAGE 1

View File

@@ -21,10 +21,10 @@
#define DROWSY "drowsy" #define DROWSY "drowsy"
// I hate adding defines like this but I'd much rather deal with bitflags than lists and string searches. // I hate adding defines like this but I'd much rather deal with bitflags than lists and string searches.
#define BRUTELOSS 1 #define BRUTELOSS 0x1
#define FIRELOSS 2 #define FIRELOSS 0x2
#define TOXLOSS 4 #define TOXLOSS 0x4
#define OXYLOSS 8 #define OXYLOSS 0x8
#define FIRE_DAMAGE_MODIFIER 0.0215 // Higher values result in more external fire damage to the skin. (default 0.0215) #define FIRE_DAMAGE_MODIFIER 0.0215 // Higher values result in more external fire damage to the skin. (default 0.0215)
#define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025) #define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025)

View File

@@ -31,16 +31,16 @@
#define mSmallsize 110 // Table climbing. #define mSmallsize 110 // Table climbing.
// disabilities // disabilities
#define NEARSIGHTED 1 #define NEARSIGHTED 0x1
#define EPILEPSY 2 #define EPILEPSY 0x2
#define COUGHING 4 #define COUGHING 0x4
#define TOURETTES 8 #define TOURETTES 0x8
#define NERVOUS 16 #define NERVOUS 0x10
// sdisabilities // sdisabilities
#define BLIND 1 #define BLIND 0x1
#define MUTE 2 #define MUTE 0x2
#define DEAF 4 #define DEAF 0x4
// The way blocks are handled badly needs a rewrite, this is horrible. // The way blocks are handled badly needs a rewrite, this is horrible.
// Too much of a project to handle at the moment, TODO for later. // Too much of a project to handle at the moment, TODO for later.

View File

@@ -9,21 +9,21 @@
#define SEC_LEVEL_RED 2 #define SEC_LEVEL_RED 2
#define SEC_LEVEL_DELTA 3 #define SEC_LEVEL_DELTA 3
#define BE_TRAITOR 1 #define BE_TRAITOR 0x1
#define BE_OPERATIVE 2 #define BE_OPERATIVE 0x2
#define BE_CHANGELING 4 #define BE_CHANGELING 0x4
#define BE_WIZARD 8 #define BE_WIZARD 0x8
#define BE_MALF 16 #define BE_MALF 0x10
#define BE_REV 32 #define BE_REV 0x20
#define BE_ALIEN 64 #define BE_ALIEN 0x40
#define BE_AI 128 #define BE_AI 0x80
#define BE_CULTIST 256 #define BE_CULTIST 0x100
#define BE_MONKEY 512 #define BE_MONKEY 0x200
#define BE_NINJA 1024 #define BE_NINJA 0x400
#define BE_RAIDER 2048 #define BE_RAIDER 0x800
#define BE_PLANT 4096 #define BE_PLANT 0x1000
#define BE_MUTINEER 8192 #define BE_MUTINEER 0x2000
#define BE_PAI 16384 #define BE_PAI 0x4000
var/list/be_special_flags = list( var/list/be_special_flags = list(
"Traitor" = BE_TRAITOR, "Traitor" = BE_TRAITOR,
@@ -47,17 +47,17 @@ var/list/be_special_flags = list(
// Antagonist datum flags. // Antagonist datum flags.
#define ANTAG_OVERRIDE_JOB 1 // Assigned job is set to MODE when spawning. #define ANTAG_OVERRIDE_JOB 0x1 // Assigned job is set to MODE when spawning.
#define ANTAG_OVERRIDE_MOB 2 // Mob is recreated from datum mob_type var when spawning. #define ANTAG_OVERRIDE_MOB 0x2 // Mob is recreated from datum mob_type var when spawning.
#define ANTAG_CLEAR_EQUIPMENT 4 // All preexisting equipment is purged. #define ANTAG_CLEAR_EQUIPMENT 0x4 // All preexisting equipment is purged.
#define ANTAG_CHOOSE_NAME 8 // Antagonists are prompted to enter a name. #define ANTAG_CHOOSE_NAME 0x8 // Antagonists are prompted to enter a name.
#define ANTAG_IMPLANT_IMMUNE 16 // Cannot be loyalty implanted. #define ANTAG_IMPLANT_IMMUNE 0x10 // Cannot be loyalty implanted.
#define ANTAG_SUSPICIOUS 32 // Shows up on roundstart report. #define ANTAG_SUSPICIOUS 0x20 // Shows up on roundstart report.
#define ANTAG_HAS_LEADER 64 // Generates a leader antagonist. #define ANTAG_HAS_LEADER 0x40 // Generates a leader antagonist.
#define ANTAG_HAS_NUKE 128 // Will spawn a nuke at supplied location. #define ANTAG_HAS_NUKE 0x80 // Will spawn a nuke at supplied location.
#define ANTAG_RANDSPAWN 256 // Potentially randomly spawns due to events. #define ANTAG_RANDSPAWN 0x100 // Potentially randomly spawns due to events.
#define ANTAG_VOTABLE 512 // Can be voted as an additional antagonist before roundstart. #define ANTAG_VOTABLE 0x200 // Can be voted as an additional antagonist before roundstart.
#define ANTAG_SET_APPEARANCE 1024 // Causes antagonists to use an appearance modifier on spawn. #define ANTAG_SET_APPEARANCE 0x400 // Causes antagonists to use an appearance modifier on spawn.
// Mode/antag template macros. // Mode/antag template macros.
#define MODE_BORER "borer" #define MODE_BORER "borer"
@@ -87,22 +87,22 @@ var/list/be_special_flags = list(
///////////////// /////////////////
/* WIZARD SPELL FLAGS */ /* WIZARD SPELL FLAGS */
#define GHOSTCAST 1 //can a ghost cast it? #define GHOSTCAST 0x1 //can a ghost cast it?
#define NEEDSCLOTHES 2 //does it need the wizard garb to cast? Nonwizard spells should not have this #define NEEDSCLOTHES 0x2 //does it need the wizard garb to cast? Nonwizard spells should not have this
#define NEEDSHUMAN 4 //does it require the caster to be human? #define NEEDSHUMAN 0x4 //does it require the caster to be human?
#define Z2NOCAST 8 //if this is added, the spell can't be cast at centcomm #define Z2NOCAST 0x8 //if this is added, the spell can't be cast at centcomm
#define STATALLOWED 16 //if set, the user doesn't have to be conscious to cast. Required for ghost spells #define STATALLOWED 0x10 //if set, the user doesn't have to be conscious to cast. Required for ghost spells
#define IGNOREPREV 32 //if set, each new target does not overlap with the previous one #define IGNOREPREV 0x20 //if set, each new target does not overlap with the previous one
//The following flags only affect different types of spell, and therefore overlap //The following flags only affect different types of spell, and therefore overlap
//Targeted spells //Targeted spells
#define INCLUDEUSER 64 //does the spell include the caster in its target selection? #define INCLUDEUSER 0x40 //does the spell include the caster in its target selection?
#define SELECTABLE 128 //can you select each target for the spell? #define SELECTABLE 0x80 //can you select each target for the spell?
//AOE spells //AOE spells
#define IGNOREDENSE 64 //are dense turfs ignored in selection? #define IGNOREDENSE 0x40 //are dense turfs ignored in selection?
#define IGNORESPACE 128 //are space turfs ignored in selection? #define IGNORESPACE 0x80 //are space turfs ignored in selection?
//End split flags //End split flags
#define CONSTRUCT_CHECK 256 //used by construct spells - checks for nullrods #define CONSTRUCT_CHECK 0x100 //used by construct spells - checks for nullrods
#define NO_BUTTON 512 //spell won't show up in the HUD with this #define NO_BUTTON 0x200 //spell won't show up in the HUD with this
//invocation //invocation
#define SpI_SHOUT "shout" #define SpI_SHOUT "shout"

View File

@@ -5,71 +5,63 @@
#define CANDLE_LUM 3 // For how bright candles are. #define CANDLE_LUM 3 // For how bright candles are.
// Item inventory slot bitmasks. // Item inventory slot bitmasks.
#define SLOT_OCLOTHING 1 #define SLOT_OCLOTHING 0x1
#define SLOT_ICLOTHING 2 #define SLOT_ICLOTHING 0x2
#define SLOT_GLOVES 4 #define SLOT_GLOVES 0x4
#define SLOT_EYES 8 #define SLOT_EYES 0x8
#define SLOT_EARS 16 #define SLOT_EARS 0x10
#define SLOT_MASK 32 #define SLOT_MASK 0x20
#define SLOT_HEAD 64 #define SLOT_HEAD 0x40
#define SLOT_FEET 128 #define SLOT_FEET 0x80
#define SLOT_ID 256 #define SLOT_ID 0x100
#define SLOT_BELT 512 #define SLOT_BELT 0x200
#define SLOT_BACK 1024 #define SLOT_BACK 0x400
#define SLOT_POCKET 2048 // This is to allow items with a w_class of 3 or 4 to fit in pockets. #define SLOT_POCKET 0x800 // This is to allow items with a w_class of 3 or 4 to fit in pockets.
#define SLOT_DENYPOCKET 4096 // This is to deny items with a w_class of 2 or 1 from fitting in pockets. #define SLOT_DENYPOCKET 0x1000 // This is to deny items with a w_class of 2 or 1 from fitting in pockets.
#define SLOT_TWOEARS 8192 #define SLOT_TWOEARS 0x2000
#define SLOT_TIE 16384 #define SLOT_TIE 0x4000
#define SLOT_HOLSTER 32768 //16th bit #define SLOT_HOLSTER 0x8000 //16th bit - higher than this will overflow
// Flags bitmasks. // Flags bitmasks.
#define STOPPRESSUREDAMAGE 1 // This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere #define NOBLUDGEON 0x1 // When an item has this it produces no "X has been hit by Y with Z" message with the default handler.
// To successfully stop you taking all pressure damage you must have both a suit and head item with this flag. #define CONDUCT 0x2 // Conducts electricity. (metal etc.)
#define NOBLUDGEON 2 // When an item has this it produces no "X has been hit by Y with Z" message with the default handler. #define ON_BORDER 0x4 // Item has priority to check when entering or leaving.
#define AIRTIGHT 4 // Functions with internals. #define NOBLOODY 0x8 // Used for items if they don't want to get a blood overlay.
#define USEDELAY 8 // 1 second extra delay on use. (Can be used once every 2s) #define OPENCONTAINER 0x10 // Is an open container for chemistry purposes.
#define NOSHIELD 16 // Weapon not affected by shield. #define PHORONGUARD 0x20 // Does not get contaminated by phoron.
#define CONDUCT 32 // Conducts electricity. (metal etc.) #define NOREACT 0x40 // Reagents don't react inside this container.
#define ON_BORDER 64 // Item has priority to check when entering or leaving. #define PROXMOVE 0x80 // Does this object require proximity checking in Enter()?
#define NOBLOODY 512 // Used for items if they don't want to get a blood overlay.
#define NODELAY 8192 // 1 second attack-by delay skipped (Can be used once every 0.2s). Most objects have a 1s attack-by delay, which doesn't require a flag.
//Use these flags to indicate if an item obscures the specified slots from view, whereas body_parts_covered seems to be used to indicate what body parts the item protects. //Flags for items (equipment)
#define GLASSESCOVERSEYES 256 #define THICKMATERIAL 0x1 // Prevents syringes, parapens and hyposprays if equiped to slot_suit or slot_head.
#define MASKCOVERSEYES 256 // Get rid of some of the other retardation in these flags. #define STOPPRESSUREDAMAGE 0x2 // Counts towards pressure protection. Note that like temperature protection, body_parts_covered is considered here as well.
#define HEADCOVERSEYES 256 // Feel free to reallocate these numbers for other purposes. #define AIRTIGHT 0x4 // Functions with internals.
#define MASKCOVERSMOUTH 512 // On other items, these are just for mask/head. #define NOSLIP 0x8 // Prevents from slipping on wet floors, in space, etc.
#define HEADCOVERSMOUTH 512 #define BLOCK_GAS_SMOKE_EFFECT 0x10 // Blocks the effect that chemical clouds would have on a mob -- glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL)
#define FLEXIBLEMATERIAL 0x20 // At the moment, masks with this flag will not prevent eating even if they are covering your face.
#define THICKMATERIAL 256 // From /tg/station: prevents syringes, parapens and hyposprays if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP for shoes)
#define NOSLIP 256 // Prevents from slipping on wet floors, in space, etc.
#define OPENCONTAINER 1024 // Is an open container for chemistry purposes.
#define BLOCK_GAS_SMOKE_EFFECT 2048 // Blocks the effect that chemical clouds would have on a mob -- glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL)
#define ONESIZEFITSALL 2048
#define PHORONGUARD 4096 // Does not get contaminated by phoron.
#define NOREACT 4096 // Reagents don't react inside this container.
#define BLOCKHEADHAIR 4 // Temporarily removes the user's hair overlay. Leaves facial hair.
#define BLOCKHAIR 8192 // Temporarily removes the user's hair, facial and otherwise.
// Flags for pass_flags. // Flags for pass_flags.
#define PASSTABLE 1 #define PASSTABLE 0x1
#define PASSGLASS 2 #define PASSGLASS 0x2
#define PASSGRILLE 4 #define PASSGRILLE 0x4
#define PASSBLOB 8 #define PASSBLOB 0x8
// Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses. // Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses.
// WARNING: The following flags apply only to the external suit! // WARNING: The following flags apply only to the external suit!
#define HIDEGLOVES 1 #define HIDEGLOVES 0x1
#define HIDESUITSTORAGE 2 #define HIDESUITSTORAGE 0x2
#define HIDEJUMPSUIT 4 #define HIDEJUMPSUIT 0x4
#define HIDESHOES 8 #define HIDESHOES 0x8
#define HIDETAIL 16 #define HIDETAIL 0x10
// WARNING: The following flags apply only to the helmets and masks! // WARNING: The following flags apply only to the helmets and masks!
#define HIDEMASK 1 #define HIDEMASK 0x1
#define HIDEEARS 2 // Headsets and such. #define HIDEEARS 0x2 // Headsets and such.
#define HIDEEYES 4 // Glasses. #define HIDEEYES 0x4 // Glasses.
#define HIDEFACE 8 // Dictates whether we appear as "Unknown". #define HIDEFACE 0x8 // Dictates whether we appear as "Unknown".
#define BLOCKHEADHAIR 0x20 // Hides the user's hair overlay. Leaves facial hair.
#define BLOCKHAIR 0x40 // Hides the user's hair, facial and otherwise.
// Slots. // Slots.
#define slot_back 1 #define slot_back 1
@@ -106,24 +98,24 @@
#define slot_wear_suit_str "slot_suit" #define slot_wear_suit_str "slot_suit"
// Bitflags for clothing parts. // Bitflags for clothing parts.
#define HEAD 1 #define HEAD 0x1
#define FACE 2 #define FACE 0x2
#define EYES 4 #define EYES 0x4
#define UPPER_TORSO 8 #define UPPER_TORSO 0x8
#define LOWER_TORSO 16 #define LOWER_TORSO 0x10
#define LEG_LEFT 32 #define LEG_LEFT 0x20
#define LEG_RIGHT 64 #define LEG_RIGHT 0x40
#define LEGS 96 // LEG_LEFT | LEG_RIGHT #define LEGS 0x60 // LEG_LEFT | LEG_RIGHT
#define FOOT_LEFT 128 #define FOOT_LEFT 0x80
#define FOOT_RIGHT 256 #define FOOT_RIGHT 0x100
#define FEET 384 // FOOT_LEFT | FOOT_RIGHT #define FEET 0x180 // FOOT_LEFT | FOOT_RIGHT
#define ARM_LEFT 512 #define ARM_LEFT 0x200
#define ARM_RIGHT 1024 #define ARM_RIGHT 0x400
#define ARMS 1536 // ARM_LEFT | ARM_RIGHT #define ARMS 0x600 // ARM_LEFT | ARM_RIGHT
#define HAND_LEFT 2048 #define HAND_LEFT 0x800
#define HAND_RIGHT 4096 #define HAND_RIGHT 0x1000
#define HANDS 6144 // HAND_LEFT | HAND_RIGHT #define HANDS 0x1800 // HAND_LEFT | HAND_RIGHT
#define FULL_BODY 8191 #define FULL_BODY 0xFFFF
// Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. // Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers.
// Used with human/proc/get_heat_protection() and human/proc/get_cold_protection(). // Used with human/proc/get_heat_protection() and human/proc/get_cold_protection().

View File

@@ -1,8 +1,7 @@
var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called manually after an event. var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called manually after an event.
var/CELLRATE = 0.002 // Multiplier for watts per tick <> cell storage (e.g., 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) #define CELLRATE 0.002 // Multiplier for watts per tick <> cell storage (e.g., 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second)
// It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided // It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided
var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second)
// Doors! // Doors!
#define DOOR_CRUSH_DAMAGE 10 #define DOOR_CRUSH_DAMAGE 10
@@ -15,18 +14,15 @@ var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-t
#define TOTAL 4 // For total power used only. #define TOTAL 4 // For total power used only.
// Bitflags for machine stat variable. // Bitflags for machine stat variable.
#define BROKEN 1 #define BROKEN 0x1
#define NOPOWER 2 #define NOPOWER 0x2
#define POWEROFF 4 // TBD. #define POWEROFF 0x4 // TBD.
#define MAINT 8 // Under maintenance. #define MAINT 0x8 // Under maintenance.
#define EMPED 16 // Temporary broken by EMP pulse. #define EMPED 0x10 // Temporary broken by EMP pulse.
// Bitmasks for door switches. // Used by firelocks
#define OPEN 1 #define FIREDOOR_OPEN 1
#define IDSCAN 2 #define FIREDOOR_CLOSED 2
#define BOLTS 4
#define SHOCK 8
#define SAFE 16
#define AI_CAMERA_LUMINOSITY 6 #define AI_CAMERA_LUMINOSITY 6
@@ -63,12 +59,12 @@ var/list/restricted_camera_networks = list("thunder","ERT","NUKE","Secret")
#define STAGE_SUPER 11 #define STAGE_SUPER 11
// computer3 error codes, move lower in the file when it passes dev -Sayu // computer3 error codes, move lower in the file when it passes dev -Sayu
#define PROG_CRASH 1 // Generic crash. #define PROG_CRASH 0x1 // Generic crash.
#define MISSING_PERIPHERAL 2 // Missing hardware. #define MISSING_PERIPHERAL 0x2 // Missing hardware.
#define BUSTED_ASS_COMPUTER 4 // Self-perpetuating error. BAC will continue to crash forever. #define BUSTED_ASS_COMPUTER 0x4 // Self-perpetuating error. BAC will continue to crash forever.
#define MISSING_PROGRAM 8 // Some files try to automatically launch a program. This is that failing. #define MISSING_PROGRAM 0x8 // Some files try to automatically launch a program. This is that failing.
#define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried. #define FILE_DRM 0x10 // Some files want to not be copied/moved. This is them complaining that you tried.
#define NETWORK_FAILURE 32 #define NETWORK_FAILURE 0x20
// NanoUI flags // NanoUI flags
#define STATUS_INTERACTIVE 2 // GREEN Visability #define STATUS_INTERACTIVE 2 // GREEN Visability

View File

@@ -31,22 +31,22 @@
#define MAX_GEAR_COST 5 // Used in chargen for accessory loadout limit. #define MAX_GEAR_COST 5 // Used in chargen for accessory loadout limit.
// Preference toggles. // Preference toggles.
#define SOUND_ADMINHELP 1 #define SOUND_ADMINHELP 0x1
#define SOUND_MIDI 2 #define SOUND_MIDI 0x2
#define SOUND_AMBIENCE 4 #define SOUND_AMBIENCE 0x4
#define SOUND_LOBBY 8 #define SOUND_LOBBY 0x8
#define CHAT_OOC 16 #define CHAT_OOC 0x10
#define CHAT_DEAD 32 #define CHAT_DEAD 0x20
#define CHAT_GHOSTEARS 64 #define CHAT_GHOSTEARS 0x40
#define CHAT_GHOSTSIGHT 128 #define CHAT_GHOSTSIGHT 0x80
#define CHAT_PRAYER 256 #define CHAT_PRAYER 0x100
#define CHAT_RADIO 512 #define CHAT_RADIO 0x200
#define CHAT_ATTACKLOGS 1024 #define CHAT_ATTACKLOGS 0x400
#define CHAT_DEBUGLOGS 2048 #define CHAT_DEBUGLOGS 0x800
#define CHAT_LOOC 4096 #define CHAT_LOOC 0x1000
#define CHAT_GHOSTRADIO 8192 #define CHAT_GHOSTRADIO 0x2000
#define SHOW_TYPING 16384 #define SHOW_TYPING 0x4000
#define CHAT_NOICONS 32768 #define CHAT_NOICONS 0x8000
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC) #define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC)
@@ -63,15 +63,23 @@
#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive #define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
//some colors //some colors
#define COLOR_RED "#FF0000"
#define COLOR_GREEN "#00FF00"
#define COLOR_BLUE "#0000FF"
#define COLOR_CYAN "#00FFFF"
#define COLOR_PINK "#FF00FF"
#define COLOR_YELLOW "#FFFF00"
#define COLOR_ORANGE "#FF9900"
#define COLOR_WHITE "#FFFFFF" #define COLOR_WHITE "#FFFFFF"
#define COLOR_SILVER "#C0C0C0"
#define COLOR_GRAY "#808080"
#define COLOR_BLACK "#000000" #define COLOR_BLACK "#000000"
#define COLOR_RED "#FF0000"
#define COLOR_MAROON "#800000"
#define COLOR_YELLOW "#FFFF00"
#define COLOR_OLIVE "#808000"
#define COLOR_LIME "#00FF00"
#define COLOR_GREEN "#008000"
#define COLOR_CYAN "#00FFFF"
#define COLOR_TEAL "#008080"
#define COLOR_BLUE "#0000FF"
#define COLOR_NAVY "#000080"
#define COLOR_PINK "#FF00FF"
#define COLOR_PURPLE "#800080"
#define COLOR_ORANGE "#FF9900"
// Shuttles. // Shuttles.
@@ -117,6 +125,7 @@
#define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6 #define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
#define DOOR_CLOSED_LAYER 3.1 //Above most items if closed #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed
#define LIGHTING_LAYER 11 #define LIGHTING_LAYER 11
#define HUD_LAYER 20 //Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put #define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put
#define SCREEN_LAYER 22 //Mob HUD/effects layer #define SCREEN_LAYER 22 //Mob HUD/effects layer
@@ -144,9 +153,9 @@
#define SHARD_SPLINTER "splinters" #define SHARD_SPLINTER "splinters"
#define SHARD_NONE "" #define SHARD_NONE ""
#define MATERIAL_UNMELTABLE 1 #define MATERIAL_UNMELTABLE 0x1
#define MATERIAL_BRITTLE 2 #define MATERIAL_BRITTLE 0x2
#define MATERIAL_PADDING 4 #define MATERIAL_PADDING 0x4
#define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass) #define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass)

View File

@@ -4,16 +4,16 @@
#define DEAD 2 #define DEAD 2
// Bitflags defining which status effects could be or are inflicted on a mob. // Bitflags defining which status effects could be or are inflicted on a mob.
#define CANSTUN 1 #define CANSTUN 0x1
#define CANWEAKEN 2 #define CANWEAKEN 0x2
#define CANPARALYSE 4 #define CANPARALYSE 0x4
#define CANPUSH 8 #define CANPUSH 0x8
#define LEAPING 16 #define LEAPING 0x10
#define PASSEMOTES 32 // Mob has a cortical borer or holders inside of it that need to see emotes. #define PASSEMOTES 0x32 // Mob has a cortical borer or holders inside of it that need to see emotes.
#define GODMODE 4096 #define GODMODE 0x1000
#define FAKEDEATH 8192 // Replaces stuff like changeling.changeling_fakedeath. #define FAKEDEATH 0x2000 // Replaces stuff like changeling.changeling_fakedeath.
#define DISFIGURED 16384 // I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system. #define DISFIGURED 0x4000 // Set but never checked. Remove this sometime and replace occurences with the appropriate organ code
#define XENO_HOST 32768 // Tracks whether we're gonna be a baby alien's mummy. #define XENO_HOST 0x8000 // Tracks whether we're gonna be a baby alien's mummy.
// Grab levels. // Grab levels.
#define GRAB_PASSIVE 1 #define GRAB_PASSIVE 1
@@ -22,9 +22,9 @@
#define GRAB_UPGRADING 4 #define GRAB_UPGRADING 4
#define GRAB_KILL 5 #define GRAB_KILL 5
#define BORGMESON 1 #define BORGMESON 0x1
#define BORGTHERM 2 #define BORGTHERM 0x2
#define BORGXRAY 4 #define BORGXRAY 0x4
#define HOSTILE_STANCE_IDLE 1 #define HOSTILE_STANCE_IDLE 1
#define HOSTILE_STANCE_ALERT 2 #define HOSTILE_STANCE_ALERT 2
@@ -49,7 +49,7 @@
#define I_HELP "help" #define I_HELP "help"
#define I_DISARM "disarm" #define I_DISARM "disarm"
#define I_GRAB "grab" #define I_GRAB "grab"
#define I_HURT "hurt" #define I_HURT "harm"
//These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom. //These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom.
#define HUMAN 1 #define HUMAN 1
@@ -58,9 +58,8 @@
#define ROBOT 8 #define ROBOT 8
#define SLIME 16 #define SLIME 16
#define SIMPLE_ANIMAL 32 #define SIMPLE_ANIMAL 32
#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL) #define HEAVY 64
#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL|HEAVY)
#define NEXT_MOVE_DELAY 8
// Robot AI notifications // Robot AI notifications
#define ROBOT_NOTIFICATION_NEW_UNIT 1 #define ROBOT_NOTIFICATION_NEW_UNIT 1
@@ -69,17 +68,20 @@
#define ROBOT_NOTIFICATION_MODULE_RESET 4 #define ROBOT_NOTIFICATION_MODULE_RESET 4
// Appearance change flags // Appearance change flags
#define APPEARANCE_UPDATE_DNA 1 #define APPEARANCE_UPDATE_DNA 0x1
#define APPEARANCE_RACE (2|APPEARANCE_UPDATE_DNA) #define APPEARANCE_RACE (0x2|APPEARANCE_UPDATE_DNA)
#define APPEARANCE_GENDER (4|APPEARANCE_UPDATE_DNA) #define APPEARANCE_GENDER (0x4|APPEARANCE_UPDATE_DNA)
#define APPEARANCE_SKIN 8 #define APPEARANCE_SKIN 0x8
#define APPEARANCE_HAIR 16 #define APPEARANCE_HAIR 0x10
#define APPEARANCE_HAIR_COLOR 32 #define APPEARANCE_HAIR_COLOR 0x20
#define APPEARANCE_FACIAL_HAIR 64 #define APPEARANCE_FACIAL_HAIR 0x40
#define APPEARANCE_FACIAL_HAIR_COLOR 128 #define APPEARANCE_FACIAL_HAIR_COLOR 0x80
#define APPEARANCE_EYE_COLOR 256 #define APPEARANCE_EYE_COLOR 0x100
#define APPEARANCE_ALL_HAIR (APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR) #define APPEARANCE_ALL_HAIR (APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR)
#define APPEARANCE_ALL 511 #define APPEARANCE_ALL 0xFFFF
// Click cooldown
#define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions
#define MIN_SUPPLIED_LAW_NUMBER 15 #define MIN_SUPPLIED_LAW_NUMBER 15
@@ -94,3 +96,14 @@
#define INV_ACCESSORIES_DEF_ICON 'icons/mob/ties.dmi' #define INV_ACCESSORIES_DEF_ICON 'icons/mob/ties.dmi'
#define INV_SUIT_DEF_ICON 'icons/mob/ties.dmi' #define INV_SUIT_DEF_ICON 'icons/mob/ties.dmi'
#define INV_SUIT_DEF_ICON 'icons/mob/suit.dmi' #define INV_SUIT_DEF_ICON 'icons/mob/suit.dmi'
#define MAX_SUPPLIED_LAW_NUMBER 50
// NT's alignment towards the character
#define COMPANY_LOYAL "Loyal"
#define COMPANY_SUPPORTATIVE "Supportive"
#define COMPANY_NEUTRAL "Neutral"
#define COMPANY_SKEPTICAL "Skeptical"
#define COMPANY_OPPOSED "Opposed"
#define COMPANY_ALIGNMENTS list(COMPANY_LOYAL,COMPANY_SUPPORTATIVE,COMPANY_NEUTRAL,COMPANY_SKEPTICAL,COMPANY_OPPOSED)

View File

@@ -1,7 +1,7 @@
#define SHEET_MATERIAL_AMOUNT 2000 #define SHEET_MATERIAL_AMOUNT 2000
#define TECH_MATERIAL "materials" #define TECH_MATERIAL "materials"
#define TECH_ENGINERING "engineering" #define TECH_ENGINEERING "engineering"
#define TECH_PHORON "phorontech" #define TECH_PHORON "phorontech"
#define TECH_POWER "powerstorage" #define TECH_POWER "powerstorage"
#define TECH_BLUESPACE "bluespace" #define TECH_BLUESPACE "bluespace"
@@ -12,7 +12,7 @@
#define TECH_ILLEGAL "syndicate" #define TECH_ILLEGAL "syndicate"
#define TECH_ARCANE "arcane" #define TECH_ARCANE "arcane"
#define IMPRINTER 1 //For circuits. Uses glass/chemicals. #define IMPRINTER 0x1 //For circuits. Uses glass/chemicals.
#define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals #define PROTOLATHE 0x2 //New stuff. Uses glass/metal/chemicals
#define MECHFAB 4 //Remember, objects utilising this flag should have construction_time and construction_cost vars. #define MECHFAB 0x4 //Remember, objects utilising this flag should have construction_time and construction_cost vars.
#define CHASSIS 8 //For protolathe, but differently #define CHASSIS 0x8 //For protolathe, but differently

View File

@@ -1,31 +1,27 @@
// Species flags. // Species flags.
#define NO_BLOOD 1 // Vessel var is not filled with blood, cannot bleed out. #define NO_BLOOD 0x1 // Vessel var is not filled with blood, cannot bleed out.
#define NO_BREATHE 2 // Cannot suffocate or take oxygen loss. #define NO_BREATHE 0x2 // Cannot suffocate or take oxygen loss.
#define NO_SCAN 4 // Cannot be scanned in a DNA machine/genome-stolen. #define NO_SCAN 0x4 // Cannot be scanned in a DNA machine/genome-stolen.
#define NO_PAIN 8 // Cannot suffer halloss/recieves deceptive health indicator. #define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
#define NO_SLIP 16 // Cannot fall over. #define NO_SLIP 0x10 // Cannot fall over.
#define NO_POISON 32 // Cannot not suffer toxloss. #define NO_POISON 0x20 // Cannot not suffer toxloss.
#define HAS_SKIN_TONE 64 // Skin tone selectable in chargen. (0-255) #define IS_PLANT 0x40 // Is a treeperson.
#define HAS_SKIN_COLOR 128 // Skin colour selectable in chargen. (RGB) #define NO_MINOR_CUT 0x80 // Can step on broken glass with no ill-effects. Either thick skin (diona/vox), cut resistant (slimes) or incorporeal (shadows)
#define HAS_LIPS 256 // Lips are drawn onto the mob icon. (lipstick) // unused: 0x8000 - higher than this will overflow
#define HAS_UNDERWEAR 512 // Underwear is drawn onto the mob icon.
#define IS_PLANT 1024 // Is a treeperson. // Species spawn flags
#define IS_WHITELISTED 2048 // Must be whitelisted to play. #define IS_WHITELISTED 0x1 // Must be whitelisted to play.
#define HAS_EYE_COLOR 4096 // Eye colour selectable in chargen. (RGB) #define CAN_JOIN 0x2 // Species is selectable in chargen.
#define CAN_JOIN 8192 // Species is selectable in chargen. #define IS_RESTRICTED 0x4 // Is not a core/normally playable species. (castes, mutantraces)
#define IS_RESTRICTED 16384 // Is not a core/normally playable species. (castes, mutantraces)
// unused: 32768 - higher than this will overflow // Species appearance flags
#define HAS_SKIN_TONE 0x1 // Skin tone selectable in chargen. (0-255)
#define HAS_SKIN_COLOR 0x2 // Skin colour selectable in chargen. (RGB)
#define HAS_LIPS 0x4 // Lips are drawn onto the mob icon. (lipstick)
#define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon.
#define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB)
// Languages. // Languages.
#define LANGUAGE_HUMAN 1
#define LANGUAGE_ALIEN 2
#define LANGUAGE_DOG 4
#define LANGUAGE_CAT 8
#define LANGUAGE_BINARY 16
#define LANGUAGE_OTHER 32768
#define LANGUAGE_UNIVERSAL 65535
#define LANGUAGE_SOL_COMMON "Sol Common" #define LANGUAGE_SOL_COMMON "Sol Common"
#define LANGUAGE_UNATHI "Sinta'unathi" #define LANGUAGE_UNATHI "Sinta'unathi"
#define LANGUAGE_SIIK_MAAS "Siik'maas" #define LANGUAGE_SIIK_MAAS "Siik'maas"
@@ -37,7 +33,7 @@
// Language flags. // Language flags.
#define WHITELISTED 1 // Language is available if the speaker is whitelisted. #define WHITELISTED 1 // Language is available if the speaker is whitelisted.
#define RESTRICTED 2 // Language can only be accquired by spawning or an admin. #define RESTRICTED 2 // Language can only be acquired by spawning or an admin.
#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight. #define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight.
#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand. #define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
#define HIVEMIND 16 // Broadcast to all mobs with this language. #define HIVEMIND 16 // Broadcast to all mobs with this language.
@@ -46,3 +42,4 @@
#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message #define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems #define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
#define COMMON_VERBS 512 // Robots will apply regular verbs to this #define COMMON_VERBS 512 // Robots will apply regular verbs to this

10
code/__defines/turfs.dm Normal file
View File

@@ -0,0 +1,10 @@
#define TURF_REMOVE_CROWBAR 1
#define TURF_REMOVE_SCREWDRIVER 2
#define TURF_REMOVE_SHOVEL 4
#define TURF_REMOVE_WRENCH 8
#define TURF_CAN_BREAK 16
#define TURF_CAN_BURN 32
#define TURF_HAS_EDGES 64
#define TURF_HAS_CORNERS 128
#define TURF_IS_FRAGILE 256
#define TURF_ACID_IMMUNE 512

View File

@@ -130,9 +130,9 @@ var/global/list/endgame_safespawns = list()
S.race_key = rkey //Used in mob icon caching. S.race_key = rkey //Used in mob icon caching.
all_species[S.name] = S all_species[S.name] = S
if(!(S.flags & IS_RESTRICTED)) if(!(S.spawn_flags & IS_RESTRICTED))
playable_species += S.name playable_species += S.name
if(S.flags & IS_WHITELISTED) if(S.spawn_flags & IS_WHITELISTED)
whitelisted_species += S.name whitelisted_species += S.name
//Posters //Posters

View File

@@ -635,7 +635,7 @@ The _flatIcons list is a cache for generated icon files.
*/ */
proc // Creates a single icon from a given /atom or /image. Only the first argument is required. proc // Creates a single icon from a given /atom or /image. Only the first argument is required.
getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT) getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT, always_use_defdir = 0)
// We start with a blank canvas, otherwise some icon procs crash silently // We start with a blank canvas, otherwise some icon procs crash silently
var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon
if(!A) if(!A)
@@ -666,7 +666,7 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu
noIcon = TRUE // Do not render this object. noIcon = TRUE // Do not render this object.
var/curdir var/curdir
if(A.dir != 2) if(A.dir != 2 && !always_use_defdir)
curdir = A.dir curdir = A.dir
else else
curdir = defdir curdir = defdir

View File

@@ -592,7 +592,7 @@ proc/dd_sortedTextList(list/incoming)
return dd_sortedtextlist(incoming, case_sensitive) return dd_sortedtextlist(incoming, case_sensitive)
datum/proc/dd_SortValue() /datum/proc/dd_SortValue()
return "[src]" return "[src]"
/obj/machinery/dd_SortValue() /obj/machinery/dd_SortValue()
@@ -604,10 +604,13 @@ datum/proc/dd_SortValue()
/datum/alarm/dd_SortValue() /datum/alarm/dd_SortValue()
return "[sanitize_old(last_name)]" return "[sanitize_old(last_name)]"
/proc/subtypes(prototype)
return (typesof(prototype) - prototype)
//creates every subtype of prototype (excluding prototype) and adds it to list L. //creates every subtype of prototype (excluding prototype) and adds it to list L.
//if no list/L is provided, one is created. //if no list/L is provided, one is created.
/proc/init_subtypes(prototype, list/L) /proc/init_subtypes(prototype, list/L)
if(!istype(L)) L = list() if(!istype(L)) L = list()
for(var/path in (typesof(prototype) - prototype)) for(var/path in subtypes(prototype))
L += new path() L += new path()
return L return L

View File

@@ -109,6 +109,12 @@
M = whom M = whom
C = M.client C = M.client
key = M.key key = M.key
else if(istype(whom, /datum/mind))
var/datum/mind/D = whom
key = D.key
M = D.current
if(D.current)
C = D.current.client
else if(istype(whom, /datum)) else if(istype(whom, /datum))
var/datum/D = whom var/datum/D = whom
return "*invalid:[D.type]*" return "*invalid:[D.type]*"

View File

@@ -55,7 +55,7 @@
//If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites - //If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites -
//this is a problem of double-encode(when & becomes &amp;), use sanitize() with encode=0, but not the sanitizeSafe()! //this is a problem of double-encode(when & becomes &amp;), use sanitize() with encode=0, but not the sanitizeSafe()!
/proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) /proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1)
return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'"), max_length, encode, trim, extra)) return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra)
//Filters out undesirable characters from names //Filters out undesirable characters from names
/proc/sanitizeName(var/input, var/max_length = MAX_NAME_LEN, var/allow_numbers = 0) /proc/sanitizeName(var/input, var/max_length = MAX_NAME_LEN, var/allow_numbers = 0)
@@ -116,7 +116,7 @@
if(last_char_group == 1) if(last_char_group == 1)
output = copytext(output,1,length(output)) //removes the last character (in this case a space) output = copytext(output,1,length(output)) //removes the last character (in this case a space)
for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai")) //prevents these common metagamey names for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai","plating")) //prevents these common metagamey names
if(cmptext(output,bad_name)) return //(not case sensitive) if(cmptext(output,bad_name)) return //(not case sensitive)
return output return output

View File

@@ -27,3 +27,18 @@ proc/isDay(var/month, var/day)
// Uncomment this out when debugging! // Uncomment this out when debugging!
//else //else
//return 1 //return 1
var/next_duration_update = 0
var/last_round_duration = 0
proc/round_duration()
if(last_round_duration && world.time < next_duration_update)
return last_round_duration
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
var/mins = (mills % 36000) / 600
var/hours = mills / 36000
last_round_duration = "[round(hours)]h [round(mins)]m"
next_duration_update = world.time + 1 MINUTES
return last_round_duration

View File

@@ -275,13 +275,6 @@ proc/tg_list2text(list/list, glue=",")
if (rights & R_MENTOR) . += "[seperator]+MENTOR" if (rights & R_MENTOR) . += "[seperator]+MENTOR"
return . return .
/proc/ui_style2icon(ui_style)
switch (ui_style)
if ("old") return 'icons/mob/screen1_old.dmi'
if ("Orange") return 'icons/mob/screen1_Orange.dmi'
if ("Midnight") return 'icons/mob/screen1_Midnight.dmi'
else return 'icons/mob/screen1_White.dmi'
// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ // heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
/proc/heat2color(temp) /proc/heat2color(temp)
return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp))

View File

@@ -4,6 +4,9 @@
* A large number of misc global procs. * A large number of misc global procs.
*/ */
//Checks if all high bits in req_mask are set in bitfield
#define BIT_TEST_ALL(bitfield, req_mask) ((~(bitfield) & (req_mask)) == 0)
//Inverts the colour of an HTML string //Inverts the colour of an HTML string
/proc/invertHTML(HTMLstring) /proc/invertHTML(HTMLstring)
@@ -562,11 +565,14 @@ proc/GaussRandRound(var/sigma,var/roundto)
return toReturn return toReturn
//Step-towards method of determining whether one atom can see another. Similar to viewers() //Step-towards method of determining whether one atom can see another. Similar to viewers()
/proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. /proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldn't be arsed to do actual raycasting :I This is horribly inaccurate.
var/turf/current = get_turf(source) var/turf/current = get_turf(source)
var/turf/target_turf = get_turf(target) var/turf/target_turf = get_turf(target)
var/steps = 0 var/steps = 0
if(!current || !target_turf)
return 0
while(current != target_turf) while(current != target_turf)
if(steps > length) return 0 if(steps > length) return 0
if(current.opacity) return 0 if(current.opacity) return 0
@@ -774,11 +780,15 @@ proc/GaussRandRound(var/sigma,var/roundto)
var/old_dir1 = T.dir var/old_dir1 = T.dir
var/old_icon_state1 = T.icon_state var/old_icon_state1 = T.icon_state
var/old_icon1 = T.icon var/old_icon1 = T.icon
var/old_overlays = T.overlays.Copy()
var/old_underlays = T.underlays.Copy()
var/turf/X = B.ChangeTurf(T.type) var/turf/X = B.ChangeTurf(T.type)
X.set_dir(old_dir1) X.set_dir(old_dir1)
X.icon_state = old_icon_state1 X.icon_state = old_icon_state1
X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
X.overlays = old_overlays
X.underlays = old_underlays
var/turf/simulated/ST = T var/turf/simulated/ST = T
if(istype(ST) && ST.zone) if(istype(ST) && ST.zone)
@@ -824,7 +834,7 @@ proc/GaussRandRound(var/sigma,var/roundto)
if(!istype(O,/obj)) continue if(!istype(O,/obj)) continue
O.loc = X O.loc = X
for(var/mob/M in T) for(var/mob/M in T)
if(!istype(M,/mob) || istype(M, /mob/aiEye)) continue // If we need to check for more mobs, I'll add a variable if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable
M.loc = X M.loc = X
// var/area/AR = X.loc // var/area/AR = X.loc
@@ -921,6 +931,8 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
var/old_dir1 = T.dir var/old_dir1 = T.dir
var/old_icon_state1 = T.icon_state var/old_icon_state1 = T.icon_state
var/old_icon1 = T.icon var/old_icon1 = T.icon
var/old_overlays = T.overlays.Copy()
var/old_underlays = T.underlays.Copy()
if(platingRequired) if(platingRequired)
if(istype(B, get_base_turf(B.z))) if(istype(B, get_base_turf(B.z)))
@@ -931,7 +943,8 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
X.set_dir(old_dir1) X.set_dir(old_dir1)
X.icon_state = old_icon_state1 X.icon_state = old_icon_state1
X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
X.overlays = old_overlays
X.underlays = old_underlays
var/list/objs = new/list() var/list/objs = new/list()
var/list/newobjs = new/list() var/list/newobjs = new/list()
@@ -955,7 +968,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
for(var/mob/M in T) for(var/mob/M in T)
if(!istype(M,/mob) || istype(M, /mob/aiEye)) continue // If we need to check for more mobs, I'll add a variable if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable
mobs += M mobs += M
for(var/mob/M in mobs) for(var/mob/M in mobs)

View File

@@ -15,7 +15,6 @@
return return
if(control_disabled || stat) return if(control_disabled || stat) return
next_move = world.time + 9
if(ismob(A)) if(ismob(A))
ai_actual_track(A) ai_actual_track(A)
@@ -52,9 +51,8 @@
CtrlClickOn(A) CtrlClickOn(A)
return return
if(world.time <= next_move) if(!canClick())
return return
next_move = world.time + 9
if(aiCamera.in_camera_mode) if(aiCamera.in_camera_mode)
aiCamera.camera_mode_off() aiCamera.camera_mode_off()

View File

@@ -15,12 +15,14 @@
Note that this proc can be overridden, and is in the case of screen objects. Note that this proc can be overridden, and is in the case of screen objects.
*/ */
/atom/Click(location,control,params)
/atom/Click(var/location, var/control, var/params) // This is their reaction to being clicked on (standard proc)
if(src) if(src)
usr.ClickOn(src, params) usr.ClickOn(src, params)
/atom/DblClick(location,control,params)
/atom/DblClick(var/location, var/control, var/params)
if(src) if(src)
usr.DblClickOn(src,params) usr.DblClickOn(src, params)
/* /*
Standard mob ClickOn() Standard mob ClickOn()
@@ -35,8 +37,8 @@
* item/afterattack(atom,user,adjacent,params) - used both ranged and adjacent * item/afterattack(atom,user,adjacent,params) - used both ranged and adjacent
* mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed * mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed
*/ */
/mob/proc/ClickOn( var/atom/A, var/params ) /mob/proc/ClickOn(var/atom/A, var/params)
if(world.time <= next_click) if(world.time <= next_click) // Hard check, before anything else, to avoid crashing
return return
next_click = world.time + 1 next_click = world.time + 1
@@ -66,16 +68,17 @@
face_atom(A) // change direction to face what you clicked on face_atom(A) // change direction to face what you clicked on
if(next_move > world.time) // in the year 2000... if(!canClick()) // in the year 2000...
return return
if(istype(loc,/obj/mecha)) if(istype(loc, /obj/mecha))
if(!locate(/turf) in list(A,A.loc)) // Prevents inventory from being drilled if(!locate(/turf) in list(A, A.loc)) // Prevents inventory from being drilled
return return
var/obj/mecha/M = loc var/obj/mecha/M = loc
return M.click_action(A,src) return M.click_action(A, src)
if(restrained()) if(restrained())
setClickCooldown(10)
RestrainedClickOn(A) RestrainedClickOn(A)
return return
@@ -85,79 +88,78 @@
return return
throw_mode_off() throw_mode_off()
if(!istype(A,/obj/item/weapon/gun) && !isturf(A) && !istype(A,/obj/screen)) if(!istype(A, /obj/item/weapon/gun) && !isturf(A) && !istype(A, /obj/screen))
last_target_click = world.time last_target_click = world.time
var/obj/item/W = get_active_hand() var/obj/item/W = get_active_hand()
if(W == A) if(W == A) // Handle attack_self
next_move = world.time + 6
if(W.flags&USEDELAY)
next_move += 5
W.attack_self(src) W.attack_self(src)
if(hand) if(hand)
update_inv_l_hand(0) update_inv_l_hand(0)
else else
update_inv_r_hand(0) update_inv_r_hand(0)
return return
// operate two STORAGE levels deep here (item in backpack in src; NOT item in box in backpack in src) //Atoms on your person
// A is your location but is not a turf; or is on you (backpack); or is on something on you (box in backpack); sdepth is needed here because contents depth does not equate inventory storage depth.
var/sdepth = A.storage_depth(src) var/sdepth = A.storage_depth(src)
if(A == loc || (A in loc) || (sdepth != -1 && sdepth <= 1)) if((!isturf(A) && A == loc) || (sdepth != -1 && sdepth <= 1))
// faster access to objects already on you // faster access to objects already on you
if(A in contents) if(A in contents)
next_move = world.time + 6 // on your person setMoveCooldown(5) //taking an item off of an inventory slot
else else
next_move = world.time + 8 // in a box/bag or in your square setMoveCooldown(10) //getting something out of a backpack
// No adjacency needed
if(W) if(W)
if(W.flags&USEDELAY)
next_move += 5
var/resolved = W.resolve_attackby(A, src) var/resolved = W.resolve_attackby(A, src)
if(!resolved && A && W) if(!resolved && A && W)
W.afterattack(A,src,1,params) // 1 indicates adjacency W.afterattack(A, src, 1, params) // 1 indicates adjacency
else else
if(ismob(A)) // No instant mob attacking
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
UnarmedAttack(A, 1) UnarmedAttack(A, 1)
return return
if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that
return return
// Allows you to click on a box's contents, if that box is on the ground, but no deeper than that //Atoms on turfs (not on your person)
// A is a turf or is on a turf, or in something on a turf (pen in a box); but not something in something on a turf (pen in a box in a backpack)
sdepth = A.storage_depth_turf() sdepth = A.storage_depth_turf()
if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1))
next_move = world.time + 10
if(A.Adjacent(src)) // see adjacent.dm if(A.Adjacent(src)) // see adjacent.dm
if(W) setMoveCooldown(10)
if(W.flags&USEDELAY)
next_move += 5
if(W)
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
var/resolved = W.resolve_attackby(A,src) var/resolved = W.resolve_attackby(A,src)
if(!resolved && A && W) if(!resolved && A && W)
W.afterattack(A,src,1,params) // 1: clicking something Adjacent W.afterattack(A, src, 1, params) // 1: clicking something Adjacent
else else
if(ismob(A)) // No instant mob attacking
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
UnarmedAttack(A, 1) UnarmedAttack(A, 1)
return return
else // non-adjacent click else // non-adjacent click
if(W) if(W)
W.afterattack(A,src,0,params) // 0: not Adjacent W.afterattack(A, src, 0, params) // 0: not Adjacent
else else
RangedAttack(A, params) RangedAttack(A, params)
return return
/mob/proc/changeNext_move(num) /mob/proc/setClickCooldown(var/timeout)
next_move = world.time + num next_move = max(world.time + timeout, next_move)
// Default behavior: ignore double clicks, consider them normal clicks instead /mob/proc/canClick()
if(config.no_click_cooldown || next_move <= world.time)
return 1
return 0
// Default behavior: ignore double clicks, the second click that makes the doubleclick call already calls for a normal click
/mob/proc/DblClickOn(var/atom/A, var/params) /mob/proc/DblClickOn(var/atom/A, var/params)
ClickOn(A,params) return
/* /*
Translates into attack_hand, etc. Translates into attack_hand, etc.
@@ -201,14 +203,12 @@
LaserEyes(A) // moved into a proc below LaserEyes(A) // moved into a proc below
else if(TK in mutations) else if(TK in mutations)
switch(get_dist(src,A)) switch(get_dist(src,A))
if(0)
;
if(1 to 5) // not adjacent may mean blocked by window if(1 to 5) // not adjacent may mean blocked by window
next_move += 2 setMoveCooldown(2)
if(5 to 7) if(5 to 7)
next_move += 5 setMoveCooldown(5)
if(8 to tk_maxrange) if(8 to tk_maxrange)
next_move += 10 setMoveCooldown(10)
else else
return return
A.attack_tk(src) A.attack_tk(src)
@@ -231,7 +231,6 @@
/mob/living/carbon/MiddleClickOn(var/atom/A) /mob/living/carbon/MiddleClickOn(var/atom/A)
swap_hand() swap_hand()
// In case of use break glass // In case of use break glass
/* /*
/atom/proc/MiddleClick(var/mob/M as mob) /atom/proc/MiddleClick(var/mob/M as mob)
@@ -307,7 +306,7 @@
return return
/mob/living/LaserEyes(atom/A) /mob/living/LaserEyes(atom/A)
next_move = world.time + 6 setClickCooldown(4)
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
var/turf/U = get_turf(A) var/turf/U = get_turf(A)

View File

@@ -35,7 +35,7 @@
if(stat || lockcharge || weakened || stunned || paralysis) if(stat || lockcharge || weakened || stunned || paralysis)
return return
if(next_move >= world.time) if(!canClick())
return return
face_atom(A) // change direction to face what you clicked on face_atom(A) // change direction to face what you clicked on
@@ -68,9 +68,6 @@
return return
if(W == A) if(W == A)
next_move = world.time + 8
if(W.flags&USEDELAY)
next_move += 5
W.attack_self(src) W.attack_self(src)
return return
@@ -78,9 +75,6 @@
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
if(A == loc || (A in loc) || (A in contents)) if(A == loc || (A in loc) || (A in contents))
// No adjacency checks // No adjacency checks
next_move = world.time + 8
if(W.flags&USEDELAY)
next_move += 5
var/resolved = A.attackby(W,src) var/resolved = A.attackby(W,src)
if(!resolved && A && W) if(!resolved && A && W)
@@ -93,16 +87,12 @@
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc))
if(isturf(A) || isturf(A.loc)) if(isturf(A) || isturf(A.loc))
if(A.Adjacent(src)) // see adjacent.dm if(A.Adjacent(src)) // see adjacent.dm
next_move = world.time + 10
if(W.flags&USEDELAY)
next_move += 5
var/resolved = A.attackby(W, src) var/resolved = A.attackby(W, src)
if(!resolved && A && W) if(!resolved && A && W)
W.afterattack(A, src, 1, params) W.afterattack(A, src, 1, params)
return return
else else
next_move = world.time + 10
W.afterattack(A, src, 0, params) W.afterattack(A, src, 0, params)
return return
return return

View File

@@ -256,7 +256,7 @@ datum/hud/New(mob/owner)
if(ishuman(mymob)) if(ishuman(mymob))
human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences
else if(issmall(mymob)) else if(issmall(mymob))
monkey_hud(ui_style) monkey_hud(ui_style, ui_color, ui_alpha)
else if(isbrain(mymob)) else if(isbrain(mymob))
brain_hud(ui_style) brain_hud(ui_style)
else if(isalien(mymob)) else if(isalien(mymob))

View File

@@ -58,7 +58,6 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "act_intent" using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.icon_state = "intent_"+mymob.a_intent using.icon_state = "intent_"+mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
@@ -125,7 +124,6 @@
if(hud_data.has_m_intent) if(hud_data.has_m_intent)
using = new /obj/screen() using = new /obj/screen()
using.name = "mov_intent" using.name = "mov_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi using.screen_loc = ui_movi
@@ -160,11 +158,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "r_hand" inv_box.name = "r_hand"
inv_box.set_dir(WEST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" inv_box.icon_state = "r_hand_inactive"
if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "r_hand_active"
inv_box.screen_loc = ui_rhand inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand inv_box.slot_id = slot_r_hand
inv_box.layer = 19 inv_box.layer = 19
@@ -176,11 +173,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "l_hand" inv_box.name = "l_hand"
inv_box.set_dir(EAST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" inv_box.icon_state = "l_hand_inactive"
if(mymob && mymob.hand) //This being 1 means the left hand is in use if(mymob && mymob.hand) //This being 1 means the left hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "l_hand_active"
inv_box.screen_loc = ui_lhand inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand inv_box.slot_id = slot_l_hand
inv_box.layer = 19 inv_box.layer = 19
@@ -191,7 +187,6 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.icon_state = "hand1" using.icon_state = "hand1"
using.screen_loc = ui_swaphand1 using.screen_loc = ui_swaphand1
@@ -202,7 +197,6 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.icon_state = "hand2" using.icon_state = "hand2"
using.screen_loc = ui_swaphand2 using.screen_loc = ui_swaphand2
@@ -340,29 +334,31 @@
//Handle the gun settings buttons //Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null) mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
//mymob.gun_setting_icon.color = ui_color mymob.gun_setting_icon.icon = ui_style
mymob.gun_setting_icon.color = ui_color
mymob.gun_setting_icon.alpha = ui_alpha mymob.gun_setting_icon.alpha = ui_alpha
hud_elements |= mymob.gun_setting_icon hud_elements |= mymob.gun_setting_icon
mymob.item_use_icon = new /obj/screen/gun/item(null) mymob.item_use_icon = new /obj/screen/gun/item(null)
//mymob.item_use_icon.color = ui_color mymob.item_use_icon.icon = ui_style
mymob.item_use_icon.color = ui_color
mymob.item_use_icon.alpha = ui_alpha mymob.item_use_icon.alpha = ui_alpha
mymob.gun_move_icon = new /obj/screen/gun/move(null) mymob.gun_move_icon = new /obj/screen/gun/move(null)
//mymob.gun_move_icon.color = ui_color mymob.gun_move_icon.icon = ui_style
mymob.gun_move_icon.color = ui_color
mymob.gun_move_icon.alpha = ui_alpha mymob.gun_move_icon.alpha = ui_alpha
mymob.gun_run_icon = new /obj/screen/gun/run(null) mymob.gun_run_icon = new /obj/screen/gun/run(null)
//mymob.gun_run_icon.color = ui_color mymob.gun_run_icon.icon = ui_style
mymob.gun_run_icon.color = ui_color
mymob.gun_run_icon.alpha = ui_alpha mymob.gun_run_icon.alpha = ui_alpha
mymob.radio_use_icon = new /obj/screen/gun/radio(null) mymob.radio_use_icon = new /obj/screen/gun/radio(null)
mymob.radio_use_icon.icon = ui_style
mymob.radio_use_icon.color = ui_color
mymob.radio_use_icon.alpha = ui_alpha mymob.radio_use_icon.alpha = ui_alpha
if (mymob.client)
if (mymob.client.gun_mode) // If in aim mode, correct the sprite
mymob.gun_setting_icon.set_dir(2)
mymob.client.screen = null mymob.client.screen = null

View File

@@ -1,4 +1,4 @@
/datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_old.dmi') /datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_old.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255)
src.adding = list() src.adding = list()
src.other = list() src.other = list()
@@ -8,9 +8,10 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "act_intent" using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.icon_state = (mymob.a_intent == I_HURT ? I_HURT : mymob.a_intent) using.color = ui_color
using.alpha = ui_alpha
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 20 using.layer = 20
src.adding += using src.adding += using
@@ -23,7 +24,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height()) ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height())
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "help" using.name = I_HELP
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -34,7 +35,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height()) ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height())
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "disarm" using.name = I_DISARM
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -45,7 +46,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2) ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2)
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "grab" using.name = I_GRAB
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -56,7 +57,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2) ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2)
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "harm" using.name = I_HURT
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -67,8 +68,9 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "mov_intent" using.name = "mov_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi using.screen_loc = ui_movi
using.layer = 20 using.layer = 20
@@ -78,6 +80,8 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "drop" using.name = "drop"
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "act_drop" using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw using.screen_loc = ui_drop_throw
using.layer = 19 using.layer = 19
@@ -85,9 +89,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "r_hand" inv_box.name = "r_hand"
inv_box.set_dir(WEST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" using.color = ui_color
using.alpha = ui_alpha
inv_box.icon_state = "r_hand_inactive"
if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "hand_active"
inv_box.screen_loc = ui_rhand inv_box.screen_loc = ui_rhand
@@ -98,9 +103,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "l_hand" inv_box.name = "l_hand"
inv_box.set_dir(EAST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" using.color = ui_color
using.alpha = ui_alpha
inv_box.icon_state = "l_hand_inactive"
if(mymob && mymob.hand) //This being 1 means the left hand is in use if(mymob && mymob.hand) //This being 1 means the left hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "hand_active"
inv_box.screen_loc = ui_lhand inv_box.screen_loc = ui_lhand
@@ -111,8 +117,9 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "hand1" using.icon_state = "hand1"
using.screen_loc = ui_swaphand1 using.screen_loc = ui_swaphand1
using.layer = 19 using.layer = 19
@@ -120,8 +127,9 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "hand2" using.icon_state = "hand2"
using.screen_loc = ui_swaphand2 using.screen_loc = ui_swaphand2
using.layer = 19 using.layer = 19
@@ -129,8 +137,9 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "mask" inv_box.name = "mask"
inv_box.set_dir(NORTH)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.color = ui_color
inv_box.alpha = ui_alpha
inv_box.icon_state = "equip" inv_box.icon_state = "equip"
inv_box.screen_loc = ui_monkey_mask inv_box.screen_loc = ui_monkey_mask
inv_box.slot_id = slot_wear_mask inv_box.slot_id = slot_wear_mask
@@ -139,8 +148,9 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "back" inv_box.name = "back"
inv_box.set_dir(NORTHEAST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.color = ui_color
inv_box.alpha = ui_alpha
inv_box.icon_state = "equip" inv_box.icon_state = "equip"
inv_box.screen_loc = ui_back inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back inv_box.slot_id = slot_back
@@ -149,54 +159,72 @@
mymob.throw_icon = new /obj/screen() mymob.throw_icon = new /obj/screen()
mymob.throw_icon.icon = ui_style mymob.throw_icon.icon = ui_style
mymob.throw_icon.color = ui_color
mymob.throw_icon.alpha = ui_alpha
mymob.throw_icon.icon_state = "act_throw_off" mymob.throw_icon.icon_state = "act_throw_off"
mymob.throw_icon.name = "throw" mymob.throw_icon.name = "throw"
mymob.throw_icon.screen_loc = ui_drop_throw mymob.throw_icon.screen_loc = ui_drop_throw
mymob.oxygen = new /obj/screen() mymob.oxygen = new /obj/screen()
mymob.oxygen.icon = ui_style mymob.oxygen.icon = ui_style
mymob.oxygen.color = ui_color
mymob.oxygen.alpha = ui_alpha
mymob.oxygen.icon_state = "oxy0" mymob.oxygen.icon_state = "oxy0"
mymob.oxygen.name = "oxygen" mymob.oxygen.name = "oxygen"
mymob.oxygen.screen_loc = ui_oxygen mymob.oxygen.screen_loc = ui_oxygen
mymob.pressure = new /obj/screen() mymob.pressure = new /obj/screen()
mymob.pressure.icon = ui_style mymob.pressure.icon = ui_style
mymob.pressure.color = ui_color
mymob.pressure.alpha = ui_alpha
mymob.pressure.icon_state = "pressure0" mymob.pressure.icon_state = "pressure0"
mymob.pressure.name = "pressure" mymob.pressure.name = "pressure"
mymob.pressure.screen_loc = ui_pressure mymob.pressure.screen_loc = ui_pressure
mymob.toxin = new /obj/screen() mymob.toxin = new /obj/screen()
mymob.toxin.icon = ui_style mymob.toxin.icon = ui_style
mymob.toxin.color = ui_color
mymob.toxin.alpha = ui_alpha
mymob.toxin.icon_state = "tox0" mymob.toxin.icon_state = "tox0"
mymob.toxin.name = "toxin" mymob.toxin.name = "toxin"
mymob.toxin.screen_loc = ui_toxin mymob.toxin.screen_loc = ui_toxin
mymob.internals = new /obj/screen() mymob.internals = new /obj/screen()
mymob.internals.icon = ui_style mymob.internals.icon = ui_style
mymob.internals.color = ui_color
mymob.internals.alpha = ui_alpha
mymob.internals.icon_state = "internal0" mymob.internals.icon_state = "internal0"
mymob.internals.name = "internal" mymob.internals.name = "internal"
mymob.internals.screen_loc = ui_internal mymob.internals.screen_loc = ui_internal
mymob.fire = new /obj/screen() mymob.fire = new /obj/screen()
mymob.fire.icon = ui_style mymob.fire.icon = ui_style
mymob.fire.color = ui_color
mymob.fire.alpha = ui_alpha
mymob.fire.icon_state = "fire0" mymob.fire.icon_state = "fire0"
mymob.fire.name = "fire" mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_fire mymob.fire.screen_loc = ui_fire
mymob.bodytemp = new /obj/screen() mymob.bodytemp = new /obj/screen()
mymob.bodytemp.icon = ui_style mymob.bodytemp.icon = ui_style
mymob.bodytemp.color = ui_color
mymob.bodytemp.alpha = ui_alpha
mymob.bodytemp.icon_state = "temp1" mymob.bodytemp.icon_state = "temp1"
mymob.bodytemp.name = "body temperature" mymob.bodytemp.name = "body temperature"
mymob.bodytemp.screen_loc = ui_temp mymob.bodytemp.screen_loc = ui_temp
mymob.healths = new /obj/screen() mymob.healths = new /obj/screen()
mymob.healths.icon = ui_style mymob.healths.icon = ui_style
mymob.healths.color = ui_color
mymob.healths.alpha = ui_alpha
mymob.healths.icon_state = "health0" mymob.healths.icon_state = "health0"
mymob.healths.name = "health" mymob.healths.name = "health"
mymob.healths.screen_loc = ui_health mymob.healths.screen_loc = ui_health
mymob.pullin = new /obj/screen() mymob.pullin = new /obj/screen()
mymob.pullin.icon = ui_style mymob.pullin.icon = ui_style
mymob.pullin.color = ui_color
mymob.pullin.alpha = ui_alpha
mymob.pullin.icon_state = "pull0" mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull" mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist mymob.pullin.screen_loc = ui_pull_resist
@@ -217,6 +245,8 @@
mymob.zone_sel = new /obj/screen/zone_sel() mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = ui_style mymob.zone_sel.icon = ui_style
mymob.zone_sel.color = ui_color
mymob.zone_sel.alpha = ui_alpha
mymob.zone_sel.overlays.Cut() mymob.zone_sel.overlays.Cut()
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")

View File

@@ -57,7 +57,7 @@ var/obj/screen/robot_inventory
using.name = "act_intent" using.name = "act_intent"
using.set_dir(SOUTHWEST) using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi' using.icon = 'icons/mob/screen1_robot.dmi'
using.icon_state = (mymob.a_intent == I_HURT ? I_HURT : mymob.a_intent) using.icon_state = mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 20 using.layer = 20
src.adding += using src.adding += using

View File

@@ -52,9 +52,8 @@
/obj/screen/item_action/Click() /obj/screen/item_action/Click()
if(!usr || !owner) if(!usr || !owner)
return 1 return 1
if(usr.next_move >= world.time) if(!usr.canClick())
return return
usr.next_move = world.time + 6
if(usr.stat || usr.restrained() || usr.stunned || usr.lying) if(usr.stat || usr.restrained() || usr.stunned || usr.lying)
return 1 return 1
@@ -84,7 +83,7 @@
name = "storage" name = "storage"
/obj/screen/storage/Click() /obj/screen/storage/Click()
if(world.time <= usr.next_move) if(!usr.canClick())
return 1 return 1
if(usr.stat || usr.paralysis || usr.stunned || usr.weakened) if(usr.stat || usr.paralysis || usr.stunned || usr.weakened)
return 1 return 1
@@ -94,7 +93,6 @@
var/obj/item/I = usr.get_active_hand() var/obj/item/I = usr.get_active_hand()
if(I) if(I)
usr.ClickOn(master) usr.ClickOn(master)
usr.next_move = world.time+2
return 1 return 1
/obj/screen/gun /obj/screen/gun
@@ -278,7 +276,7 @@
var/no_mask var/no_mask
if(!(C.wear_mask && C.wear_mask.flags & AIRTIGHT)) if(!(C.wear_mask && C.wear_mask.flags & AIRTIGHT))
var/mob/living/carbon/human/H = C var/mob/living/carbon/human/H = C
if(!(H.head && H.head.flags & AIRTIGHT)) if(!(H.head && H.head.item_flags & AIRTIGHT))
no_mask = 1 no_mask = 1
if(no_mask) if(no_mask)
@@ -372,7 +370,7 @@
usr.hud_used.action_intent.icon_state = "intent_help" usr.hud_used.action_intent.icon_state = "intent_help"
if(I_HURT) if(I_HURT)
usr.a_intent = I_HURT usr.a_intent = I_HURT
usr.hud_used.action_intent.icon_state = "intent_hurt" usr.hud_used.action_intent.icon_state = "intent_harm"
if(I_GRAB) if(I_GRAB)
usr.a_intent = I_GRAB usr.a_intent = I_GRAB
usr.hud_used.action_intent.icon_state = "intent_grab" usr.hud_used.action_intent.icon_state = "intent_grab"
@@ -480,7 +478,7 @@
/obj/screen/inventory/Click() /obj/screen/inventory/Click()
// At this point in client Click() code we have passed the 1/10 sec check and little else // At this point in client Click() code we have passed the 1/10 sec check and little else
// We don't even know if it's a middle click // We don't even know if it's a middle click
if(world.time <= usr.next_move) if(!usr.canClick())
return 1 return 1
if(usr.stat || usr.paralysis || usr.stunned || usr.weakened) if(usr.stat || usr.paralysis || usr.stunned || usr.weakened)
return 1 return 1
@@ -491,12 +489,10 @@
if(iscarbon(usr)) if(iscarbon(usr))
var/mob/living/carbon/C = usr var/mob/living/carbon/C = usr
C.activate_hand("r") C.activate_hand("r")
usr.next_move = world.time+2
if("l_hand") if("l_hand")
if(iscarbon(usr)) if(iscarbon(usr))
var/mob/living/carbon/C = usr var/mob/living/carbon/C = usr
C.activate_hand("l") C.activate_hand("l")
usr.next_move = world.time+2
if("swap") if("swap")
usr:swap_hand() usr:swap_hand()
if("hand") if("hand")
@@ -505,5 +501,4 @@
if(usr.attack_ui(slot_id)) if(usr.attack_ui(slot_id))
usr.update_inv_l_hand(0) usr.update_inv_l_hand(0)
usr.update_inv_r_hand(0) usr.update_inv_r_hand(0)
usr.next_move = world.time+6
return 1 return 1

View File

@@ -6,11 +6,13 @@
// No comment // No comment
/atom/proc/attackby(obj/item/W, mob/user) /atom/proc/attackby(obj/item/W, mob/user)
return return
/atom/movable/attackby(obj/item/W, mob/user) /atom/movable/attackby(obj/item/W, mob/user)
if(!(W.flags&NOBLUDGEON)) if(!(W.flags&NOBLUDGEON))
visible_message("<span class='danger'>[src] has been hit by [user] with [W].</span>") visible_message("<span class='danger'>[src] has been hit by [user] with [W].</span>")
/mob/living/attackby(obj/item/I, mob/user) /mob/living/attackby(obj/item/I, mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(istype(I) && ismob(user)) if(istype(I) && ismob(user))
I.attack(src, user) I.attack(src, user)

View File

@@ -32,8 +32,8 @@
if(client.buildmode) if(client.buildmode)
build_click(src, client.buildmode, params, A) build_click(src, client.buildmode, params, A)
return return
if(world.time <= next_move) return if(!canClick()) return
next_move = world.time + 8 setClickCooldown(4)
// You are responsible for checking config.ghost_interaction when you override this function // You are responsible for checking config.ghost_interaction when you override this function
// Not all of them require checking, see below // Not all of them require checking, see below
A.attack_ghost(src) A.attack_ghost(src)

View File

@@ -38,15 +38,6 @@
return return
else if(TK in mutations) else if(TK in mutations)
switch(get_dist(src,A))
if(1 to 5) // not adjacent may mean blocked by window
next_move += 2
if(5 to 7)
next_move += 5
if(8 to 15)
next_move += 10
if(16 to 128)
return
A.attack_tk(src) A.attack_tk(src)
/mob/living/RestrainedClickOn(var/atom/A) /mob/living/RestrainedClickOn(var/atom/A)

View File

@@ -48,12 +48,14 @@
..() ..()
/mob/living/carbon/human/proc/HardsuitClickOn(atom/A) /mob/living/carbon/human/proc/HardsuitClickOn(atom/A)
if(!canClick())
return
if(back) if(back)
var/obj/item/weapon/rig/rig = back var/obj/item/weapon/rig/rig = back
if(istype(rig) && rig.selected_module) if(istype(rig) && rig.selected_module)
if(world.time <= next_move) return 1
next_move = world.time + 8
rig.selected_module.engage(A) rig.selected_module.engage(A)
if(ismob(A)) // No instant mob attacking - though modules have their own cooldowns
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
return 1 return 1
return 0 return 0

View File

@@ -111,12 +111,16 @@ var/const/tk_maxrange = 15
if(0) if(0)
; ;
if(1 to 5) // not adjacent may mean blocked by window if(1 to 5) // not adjacent may mean blocked by window
if(!proximity) ;
user.next_move += 2 //TODO replace these with movement timeouts
//if(!proximity)
// user.next_move += 2
if(5 to 7) if(5 to 7)
user.next_move += 5 ;
//user.next_move += 5
if(8 to tk_maxrange) if(8 to tk_maxrange)
user.next_move += 10 ;
//user.next_move += 10
else else
user << "<span class='notice'>Your mind won't reach that far.</span>" user << "<span class='notice'>Your mind won't reach that far.</span>"
return return

View File

@@ -135,6 +135,10 @@ world/loop_checks = 0
/datum/controller/process/garbage_collector/getStatName() /datum/controller/process/garbage_collector/getStatName()
return ..()+"([garbage_collector.destroyed.len]/[garbage_collector.dels]/[garbage_collector.hard_dels])" return ..()+"([garbage_collector.destroyed.len]/[garbage_collector.dels]/[garbage_collector.hard_dels])"
// Tests if an atom has been deleted.
/proc/deleted(atom/A)
return !A || !isnull(A.gcDestroyed)
// Should be treated as a replacement for the 'del' keyword. // Should be treated as a replacement for the 'del' keyword.
// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. // Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
/proc/qdel(var/datum/A) /proc/qdel(var/datum/A)

View File

@@ -0,0 +1,31 @@
var/list/pending_init_objects
/datum/controller/process/initialize
var/list/objects_to_initialize
/datum/controller/process/initialize/setup()
name = "init"
schedule_interval = 1 // Every tick, scary
objects_to_initialize = pending_init_objects
/datum/controller/process/initialize/doWork()
for(var/atom/movable/A in objects_to_initialize)
A.initialize()
scheck()
objects_to_initialize.Remove(A)
if(!objects_to_initialize.len)
disable()
/proc/initialize_object(var/atom/movable/obj_to_init)
if(processScheduler.hasProcess("init"))
var/datum/controller/process/initialize/init = processScheduler.getProcess("init")
init.objects_to_initialize += obj_to_init
init.enable()
else
world.log << "Not yet"
if(!pending_init_objects) pending_init_objects = list()
pending_init_objects += obj_to_init
/datum/controller/process/initialize/getStatName()
return ..()+"([objects_to_initialize.len])"

View File

@@ -97,20 +97,21 @@ On the map:
1455 for AI access 1455 for AI access
*/ */
var/const/BOT_FREQ = 1447
var/const/COMM_FREQ = 1353 var/const/COMM_FREQ = 1353
var/const/SYND_FREQ = 1213
var/const/ERT_FREQ = 1345 var/const/ERT_FREQ = 1345
var/const/AI_FREQ = 1343
var/const/DTH_FREQ = 1341 var/const/DTH_FREQ = 1341
var/const/AI_FREQ = 1447 var/const/SYND_FREQ = 1213
// department channels // department channels
var/const/PUB_FREQ = 1459 var/const/PUB_FREQ = 1459
var/const/SEC_FREQ = 1359 var/const/SEC_FREQ = 1359
var/const/ENG_FREQ = 1357 var/const/ENG_FREQ = 1357
var/const/SCI_FREQ = 1351
var/const/MED_FREQ = 1355 var/const/MED_FREQ = 1355
var/const/SUP_FREQ = 1347 var/const/SCI_FREQ = 1351
var/const/SRV_FREQ = 1349 var/const/SRV_FREQ = 1349
var/const/SUP_FREQ = 1347
var/list/radiochannels = list( var/list/radiochannels = list(
"Common" = PUB_FREQ, "Common" = PUB_FREQ,

View File

@@ -139,6 +139,7 @@ var/list/gamemode_cache = list()
var/welder_vision = 1 var/welder_vision = 1
var/generate_asteroid = 0 var/generate_asteroid = 0
var/no_click_cooldown = 0
//Used for modifying movement speed for mobs. //Used for modifying movement speed for mobs.
//Unversal modifiers //Unversal modifiers
@@ -328,6 +329,9 @@ var/list/gamemode_cache = list()
if ("generate_asteroid") if ("generate_asteroid")
config.generate_asteroid = 1 config.generate_asteroid = 1
if ("no_click_cooldown")
config.no_click_cooldown = 1
if("allow_admin_ooccolor") if("allow_admin_ooccolor")
config.allow_admin_ooccolor = 1 config.allow_admin_ooccolor = 1

View File

@@ -203,7 +203,7 @@ var/global/datum/shuttle_controller/shuttle_controller
//Skipjack. //Skipjack.
var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle() var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle()
VS.origin = locate(/area/shuttle/skipjack/station) VS.origin = locate(/area/skipjack_station/start)
VS.destinations = list( VS.destinations = list(
"Fore Starboard Solars" = locate(/area/skipjack_station/northeast_solars), "Fore Starboard Solars" = locate(/area/skipjack_station/northeast_solars),

View File

@@ -1,16 +1,136 @@
/hook/startup/proc/createDatacore() /hook/startup/proc/createDatacore()
data_core = new /obj/effect/datacore() data_core = new /datum/datacore()
return 1 return 1
/obj/effect/datacore/proc/manifest() /datum/datacore
var/name = "datacore"
var/medical[] = list()
var/general[] = list()
var/security[] = list()
//This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
var/locked[] = list()
/datum/datacore/proc/get_manifest(monochrome, OOC)
var/list/heads = new()
var/list/sec = new()
var/list/eng = new()
var/list/med = new()
var/list/sci = new()
var/list/civ = new()
var/list/bot = new()
var/list/misc = new()
var/list/isactive = new()
var/dat = {"
<head><style>
.manifest {border-collapse:collapse;}
.manifest td, th {border:1px solid [monochrome?"black":"#DEF; background-color:white; color:black"]; padding:.25em}
.manifest th {height: 2em; [monochrome?"border-top-width: 3px":"background-color: #48C; color:white"]}
.manifest tr.head th { [monochrome?"border-top-width: 1px":"background-color: #488;"] }
.manifest td:first-child {text-align:right}
.manifest tr.alt td {[monochrome?"border-top-width: 2px":"background-color: #DEF"]}
</style></head>
<table class="manifest" width='350px'>
<tr class='head'><th>Name</th><th>Rank</th><th>Activity</th></tr>
"}
var/even = 0
// sort mobs
for(var/datum/data/record/t in data_core.general)
var/name = t.fields["name"]
var/rank = t.fields["rank"]
var/real_rank = make_list_rank(t.fields["real_rank"])
if(OOC)
var/active = 0
for(var/mob/M in player_list)
if(M.real_name == name && M.client && M.client.inactivity <= 10 * 60 * 10)
active = 1
break
isactive[name] = active ? "Active" : "Inactive"
else
isactive[name] = t.fields["p_stat"]
//world << "[name]: [rank]"
//cael - to prevent multiple appearances of a player/job combination, add a continue after each line
var/department = 0
if(real_rank in command_positions)
heads[name] = rank
department = 1
if(real_rank in security_positions)
sec[name] = rank
department = 1
if(real_rank in engineering_positions)
eng[name] = rank
department = 1
if(real_rank in medical_positions)
med[name] = rank
department = 1
if(real_rank in science_positions)
sci[name] = rank
department = 1
if(real_rank in civilian_positions)
civ[name] = rank
department = 1
if(real_rank in nonhuman_positions)
bot[name] = rank
department = 1
if(!department && !(name in heads))
misc[name] = rank
if(heads.len > 0)
dat += "<tr><th colspan=3>Heads</th></tr>"
for(name in heads)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[heads[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(sec.len > 0)
dat += "<tr><th colspan=3>Security</th></tr>"
for(name in sec)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sec[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(eng.len > 0)
dat += "<tr><th colspan=3>Engineering</th></tr>"
for(name in eng)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[eng[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(med.len > 0)
dat += "<tr><th colspan=3>Medical</th></tr>"
for(name in med)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[med[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(sci.len > 0)
dat += "<tr><th colspan=3>Science</th></tr>"
for(name in sci)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sci[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(civ.len > 0)
dat += "<tr><th colspan=3>Civilian</th></tr>"
for(name in civ)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[civ[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
// in case somebody is insane and added them to the manifest, why not
if(bot.len > 0)
dat += "<tr><th colspan=3>Silicon</th></tr>"
for(name in bot)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[bot[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
// misc guys
if(misc.len > 0)
dat += "<tr><th colspan=3>Miscellaneous</th></tr>"
for(name in misc)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[misc[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
dat += "</table>"
dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly
dat = replacetext(dat, "\t", "")
return dat
/datum/datacore/proc/manifest()
spawn() spawn()
for(var/mob/living/carbon/human/H in player_list) for(var/mob/living/carbon/human/H in player_list)
manifest_inject(H) manifest_inject(H)
return return
/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment) /datum/datacore/proc/manifest_modify(var/name, var/assignment)
if(PDA_Manifest.len) ResetPDAManifest()
PDA_Manifest.Cut()
var/datum/data/record/foundrecord var/datum/data/record/foundrecord
var/real_title = assignment var/real_title = assignment
@@ -33,27 +153,13 @@
foundrecord.fields["rank"] = assignment foundrecord.fields["rank"] = assignment
foundrecord.fields["real_rank"] = real_title foundrecord.fields["real_rank"] = real_title
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H) /datum/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
if(PDA_Manifest.len)
PDA_Manifest.Cut()
if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1)) if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1))
var/assignment var/assignment = GetAssignment(H)
if(H.mind.role_alt_title)
assignment = H.mind.role_alt_title
else if(H.mind.assigned_role)
assignment = H.mind.assigned_role
else if(H.job)
assignment = H.job
else
assignment = "Unassigned"
var/id = add_zero(num2hex(rand(1, 1.6777215E7)), 6) //this was the best they could come up with? A large random number? *sigh* var/id = add_zero(num2hex(rand(1, 1.6777215E7)), 6) //this was the best they could come up with? A large random number? *sigh*
var/icon/front = new(get_id_photo(H), dir = SOUTH)
var/icon/side = new(get_id_photo(H), dir = WEST)
//General Record //General Record
var/datum/data/record/G = new() var/datum/data/record/G = CreateGeneralRecord(H, id)
G.fields["id"] = id
G.fields["name"] = H.real_name G.fields["name"] = H.real_name
G.fields["real_rank"] = H.mind.assigned_role G.fields["real_rank"] = H.mind.assigned_role
G.fields["rank"] = assignment G.fields["rank"] = assignment
@@ -67,49 +173,20 @@
G.fields["citizenship"] = H.citizenship G.fields["citizenship"] = H.citizenship
G.fields["faction"] = H.personal_faction G.fields["faction"] = H.personal_faction
G.fields["religion"] = H.religion G.fields["religion"] = H.religion
G.fields["photo_front"] = front
G.fields["photo_side"] = side
if(H.gen_record && !jobban_isbanned(H, "Records")) if(H.gen_record && !jobban_isbanned(H, "Records"))
G.fields["notes"] = H.gen_record G.fields["notes"] = H.gen_record
else
G.fields["notes"] = "No notes found."
general += G
//Medical Record //Medical Record
var/datum/data/record/M = new() var/datum/data/record/M = CreateMedicalRecord(H.real_name, id)
M.fields["id"] = id
M.fields["name"] = H.real_name
M.fields["b_type"] = H.b_type M.fields["b_type"] = H.b_type
M.fields["b_dna"] = H.dna.unique_enzymes M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
M.fields["ma_dis"] = "None"
M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
M.fields["alg"] = "None"
M.fields["alg_d"] = "No allergies have been detected in this patient."
M.fields["cdi"] = "None"
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
if(H.med_record && !jobban_isbanned(H, "Records")) if(H.med_record && !jobban_isbanned(H, "Records"))
M.fields["notes"] = H.med_record M.fields["notes"] = H.med_record
else
M.fields["notes"] = "No notes found."
medical += M
//Security Record //Security Record
var/datum/data/record/S = new() var/datum/data/record/S = CreateSecurityRecord(H.real_name, id)
S.fields["id"] = id
S.fields["name"] = H.real_name
S.fields["criminal"] = "None"
S.fields["mi_crim"] = "None"
S.fields["mi_crim_d"] = "No minor crime convictions."
S.fields["ma_crim"] = "None"
S.fields["ma_crim_d"] = "No major crime convictions."
S.fields["notes"] = "No notes."
if(H.sec_record && !jobban_isbanned(H, "Records")) if(H.sec_record && !jobban_isbanned(H, "Records"))
S.fields["notes"] = H.sec_record S.fields["notes"] = H.sec_record
else
S.fields["notes"] = "No notes."
security += S
//Locked Record //Locked Record
var/datum/data/record/L = new() var/datum/data/record/L = new()
@@ -136,8 +213,7 @@
locked += L locked += L
return return
proc/get_id_photo(var/mob/living/carbon/human/H, var/assigned_role)
proc/get_id_photo(var/mob/living/carbon/human/H)
var/icon/preview_icon = null var/icon/preview_icon = null
var/g = "m" var/g = "m"
@@ -191,7 +267,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
eyes_s.Blend(facial_s, ICON_OVERLAY) eyes_s.Blend(facial_s, ICON_OVERLAY)
var/icon/clothes_s = null var/icon/clothes_s = null
switch(H.mind.assigned_role) if(!assigned_role) assigned_role = H.mind.assigned_role
switch(assigned_role)
if("Head of Personnel") if("Head of Personnel")
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
@@ -295,3 +372,106 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
qdel(clothes_s) qdel(clothes_s)
return preview_icon return preview_icon
/datum/datacore/proc/CreateGeneralRecord(var/mob/living/carbon/human/H, var/id)
ResetPDAManifest()
var/icon/front
var/icon/side
if(H)
front = getFlatIcon(H, SOUTH, always_use_defdir = 1)
side = getFlatIcon(H, WEST, always_use_defdir = 1)
else
var/mob/living/carbon/human/dummy = new()
front = new(get_id_photo(dummy), dir = SOUTH)
side = new(get_id_photo(dummy), dir = WEST)
qdel(dummy)
if(!id) id = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
var/datum/data/record/G = new /datum/data/record()
G.name = "Employee Record #[id]"
G.fields["name"] = "New Record"
G.fields["id"] = id
G.fields["rank"] = "Unassigned"
G.fields["real_rank"] = "Unassigned"
G.fields["sex"] = "Male"
G.fields["age"] = "Unknown"
G.fields["fingerprint"] = "Unknown"
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
G.fields["species"] = "Human"
G.fields["home_system"] = "Unknown"
G.fields["citizenship"] = "Unknown"
G.fields["faction"] = "Unknown"
G.fields["religion"] = "Unknown"
G.fields["photo_front"] = front
G.fields["photo_side"] = side
G.fields["notes"] = "No notes found."
general += G
return G
/datum/datacore/proc/CreateSecurityRecord(var/name, var/id)
ResetPDAManifest()
var/datum/data/record/R = new /datum/data/record()
R.name = "Security Record #[id]"
R.fields["name"] = name
R.fields["id"] = id
R.fields["criminal"] = "None"
R.fields["mi_crim"] = "None"
R.fields["mi_crim_d"] = "No minor crime convictions."
R.fields["ma_crim"] = "None"
R.fields["ma_crim_d"] = "No major crime convictions."
R.fields["notes"] = "No notes."
R.fields["notes"] = "No notes."
data_core.security += R
return R
/datum/datacore/proc/CreateMedicalRecord(var/name, var/id)
ResetPDAManifest()
var/datum/data/record/M = new()
M.name = "Medical Record #[id]"
M.fields["id"] = id
M.fields["name"] = name
M.fields["b_type"] = "AB+"
M.fields["b_dna"] = md5(name)
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
M.fields["ma_dis"] = "None"
M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
M.fields["alg"] = "None"
M.fields["alg_d"] = "No allergies have been detected in this patient."
M.fields["cdi"] = "None"
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
M.fields["notes"] = "No notes found."
data_core.medical += M
return M
/datum/datacore/proc/ResetPDAManifest()
if(PDA_Manifest.len)
PDA_Manifest.Cut()
/proc/find_general_record(field, value)
return find_record(field, value, data_core.general)
/proc/find_medical_record(field, value)
return find_record(field, value, data_core.medical)
/proc/find_security_record(field, value)
return find_record(field, value, data_core.security)
/proc/find_record(field, value, list/L)
for(var/datum/data/record/R in L)
if(R.fields[field] == value)
return R
/proc/GetAssignment(var/mob/living/carbon/human/H)
if(H.mind.role_alt_title)
return H.mind.role_alt_title
else if(H.mind.assigned_role)
return H.mind.assigned_role
else if(H.job)
return H.job
else
return "Unassigned"

View File

@@ -143,7 +143,11 @@
if(href_list["add_antagonist"]) if(href_list["add_antagonist"])
var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]]
if(antag) antag.add_antagonist(src, 1, 1, 0, 1, 1) // Ignore equipment and role type for this. if(antag)
if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this.
log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].")
else
usr << "<span class='warning'>[src] could not be made into a [antag.role_text]!</span>"
else if(href_list["remove_antagonist"]) else if(href_list["remove_antagonist"])
var/datum/antagonist/antag = all_antag_types[href_list["remove_antagonist"]] var/datum/antagonist/antag = all_antag_types[href_list["remove_antagonist"]]

View File

@@ -126,12 +126,12 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, /obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
/obj/item/weapon/lipstick/random, /obj/item/weapon/lipstick/random,
/obj/item/weapon/reagent_containers/food/drinks/cans/ale, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale,
/obj/item/weapon/reagent_containers/food/drinks/cans/ale, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer) /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer)
cost = 20 cost = 20
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Party equipment" containername = "Party equipment"
@@ -1091,9 +1091,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/clothing/under/kilt) /obj/item/clothing/under/kilt)
name = "Costumes crate" name = "Costumes crate"
cost = 10 cost = 10
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate
containername = "Actor Costumes" containername = "Actor Costumes"
access = access_theatre
group = "Miscellaneous" group = "Miscellaneous"
/datum/supply_packs/formal_wear /datum/supply_packs/formal_wear
@@ -1209,12 +1208,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/bee_keeper /datum/supply_packs/bee_keeper
name = "Beekeeping crate" name = "Beekeeping crate"
contains = list(/obj/item/beezeez, contains = list(/obj/item/beehive_assembly,
/obj/item/weapon/bee_net, /obj/item/bee_smoker,
/obj/item/apiary, /obj/item/honey_frame,
/obj/item/queen_bee) /obj/item/honey_frame,
/obj/item/honey_frame,
/obj/item/honey_frame,
/obj/item/honey_frame,
/obj/item/bee_pack)
cost = 40 cost = 40
contraband = 1
containertype = /obj/structure/closet/crate/hydroponics containertype = /obj/structure/closet/crate/hydroponics
containername = "Beekeeping crate" containername = "Beekeeping crate"
access = access_hydroponics access = access_hydroponics
@@ -1416,7 +1418,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/clothing/head/helmet/gladiator, /obj/item/clothing/head/helmet/gladiator,
/obj/item/clothing/head/ushanka) /obj/item/clothing/head/ushanka)
group = "Miscellaneous" group = "Miscellaneous"
access = access_theatre
/datum/supply_packs/randomised/webbing /datum/supply_packs/randomised/webbing
name = "Webbing crate" name = "Webbing crate"

View File

@@ -27,8 +27,10 @@
/obj/effect/beam /obj/effect/beam
name = "beam" name = "beam"
density = 0
unacidable = 1//Just to be sure. unacidable = 1//Just to be sure.
var/def_zone var/def_zone
flags = PROXMOVE
pass_flags = PASSTABLE pass_flags = PASSTABLE
@@ -43,129 +45,6 @@
* This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile * This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile
*/ */
/obj/effect/datacore
name = "datacore"
var/medical[] = list()
var/general[] = list()
var/security[] = list()
//This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
var/locked[] = list()
/obj/effect/datacore/proc/get_manifest(monochrome, OOC)
var/list/heads = new()
var/list/sec = new()
var/list/eng = new()
var/list/med = new()
var/list/sci = new()
var/list/civ = new()
var/list/bot = new()
var/list/misc = new()
var/list/isactive = new()
var/dat = {"
<head><style>
.manifest {border-collapse:collapse;}
.manifest td, th {border:1px solid [monochrome?"black":"#DEF; background-color:white; color:black"]; padding:.25em}
.manifest th {height: 2em; [monochrome?"border-top-width: 3px":"background-color: #48C; color:white"]}
.manifest tr.head th { [monochrome?"border-top-width: 1px":"background-color: #488;"] }
.manifest td:first-child {text-align:right}
.manifest tr.alt td {[monochrome?"border-top-width: 2px":"background-color: #DEF"]}
</style></head>
<table class="manifest" width='350px'>
<tr class='head'><th>Name</th><th>Rank</th><th>Activity</th></tr>
"}
var/even = 0
// sort mobs
for(var/datum/data/record/t in data_core.general)
var/name = t.fields["name"]
var/rank = t.fields["rank"]
var/real_rank = make_list_rank(t.fields["real_rank"])
if(OOC)
var/active = 0
for(var/mob/M in player_list)
if(M.real_name == name && M.client && M.client.inactivity <= 10 * 60 * 10)
active = 1
break
isactive[name] = active ? "Active" : "Inactive"
else
isactive[name] = t.fields["p_stat"]
//world << "[name]: [rank]"
//cael - to prevent multiple appearances of a player/job combination, add a continue after each line
var/department = 0
if(real_rank in command_positions)
heads[name] = rank
department = 1
if(real_rank in security_positions)
sec[name] = rank
department = 1
if(real_rank in engineering_positions)
eng[name] = rank
department = 1
if(real_rank in medical_positions)
med[name] = rank
department = 1
if(real_rank in science_positions)
sci[name] = rank
department = 1
if(real_rank in civilian_positions)
civ[name] = rank
department = 1
if(real_rank in nonhuman_positions)
bot[name] = rank
department = 1
if(!department && !(name in heads))
misc[name] = rank
if(heads.len > 0)
dat += "<tr><th colspan=3>Heads</th></tr>"
for(name in heads)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[heads[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(sec.len > 0)
dat += "<tr><th colspan=3>Security</th></tr>"
for(name in sec)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sec[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(eng.len > 0)
dat += "<tr><th colspan=3>Engineering</th></tr>"
for(name in eng)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[eng[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(med.len > 0)
dat += "<tr><th colspan=3>Medical</th></tr>"
for(name in med)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[med[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(sci.len > 0)
dat += "<tr><th colspan=3>Science</th></tr>"
for(name in sci)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sci[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
if(civ.len > 0)
dat += "<tr><th colspan=3>Civilian</th></tr>"
for(name in civ)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[civ[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
// in case somebody is insane and added them to the manifest, why not
if(bot.len > 0)
dat += "<tr><th colspan=3>Silicon</th></tr>"
for(name in bot)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[bot[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
// misc guys
if(misc.len > 0)
dat += "<tr><th colspan=3>Miscellaneous</th></tr>"
for(name in misc)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[misc[name]]</td><td>[isactive[name]]</td></tr>"
even = !even
dat += "</table>"
dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly
dat = replacetext(dat, "\t", "")
return dat
/var/list/acting_rank_prefixes = list("acting", "temporary", "interim", "provisional") /var/list/acting_rank_prefixes = list("acting", "temporary", "interim", "provisional")
/proc/make_list_rank(rank) /proc/make_list_rank(rank)
@@ -179,13 +58,13 @@
We can't just insert in HTML into the nanoUI so we need the raw data to play with. We can't just insert in HTML into the nanoUI so we need the raw data to play with.
Instead of creating this list over and over when someone leaves their PDA open to the page Instead of creating this list over and over when someone leaves their PDA open to the page
we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change
using /obj/effect/datacore/proc/manifest_inject( ), or manifest_insert( ) using /datum/datacore/proc/manifest_inject( ), or manifest_insert( )
*/ */
var/global/list/PDA_Manifest = list() var/global/list/PDA_Manifest = list()
var/global/ManifestJSON var/global/ManifestJSON
/obj/effect/datacore/proc/get_manifest_json() /datum/datacore/proc/get_manifest_json()
if(PDA_Manifest.len) if(PDA_Manifest.len)
return return
var/heads[0] var/heads[0]

View File

@@ -241,7 +241,6 @@
throw_speed = 1 throw_speed = 1
throw_range = 5 throw_range = 5
w_class = 2.0 w_class = 2.0
flags = NOSHIELD
attack_verb = list("bludgeoned", "whacked", "disciplined") attack_verb = list("bludgeoned", "whacked", "disciplined")
/obj/item/weapon/staff/broom /obj/item/weapon/staff/broom
@@ -268,7 +267,6 @@
throw_speed = 1 throw_speed = 1
throw_range = 5 throw_range = 5
w_class = 2.0 w_class = 2.0
flags = NOSHIELD
/obj/item/weapon/wire /obj/item/weapon/wire
desc = "This is just a simple piece of regular insulated wire." desc = "This is just a simple piece of regular insulated wire."
@@ -599,4 +597,4 @@
desc = "Instant research tool. For testing purposes only." desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/stock_parts.dmi' icon = 'icons/obj/stock_parts.dmi'
icon_state = "smes_coil" icon_state = "smes_coil"
origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19) origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19)

View File

@@ -117,3 +117,18 @@ datum/announcement/proc/Log(message as text, message_title as text)
/proc/GetNameAndAssignmentFromId(var/obj/item/weapon/card/id/I) /proc/GetNameAndAssignmentFromId(var/obj/item/weapon/card/id/I)
// Format currently matches that of newscaster feeds: Registered Name (Assigned Rank) // Format currently matches that of newscaster feeds: Registered Name (Assigned Rank)
return I.assignment ? "[I.registered_name] ([I.assignment])" : I.registered_name return I.assignment ? "[I.registered_name] ([I.assignment])" : I.registered_name
/proc/level_seven_announcement()
command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
/proc/ion_storm_announcement()
command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message)
if (ticker.current_state == GAME_STATE_PLAYING)
if(character.mind.role_alt_title)
rank = character.mind.role_alt_title
AnnounceArrivalSimple(character.real_name, rank, join_message)
/proc/AnnounceArrivalSimple(var/name, var/rank = "visitor", var/join_message = "has arrived on the station")
global_announcer.autosay("[name], [rank], [join_message].", "Arrivals Announcement Computer")

View File

@@ -72,7 +72,7 @@ mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use
mob/proc/in_view(var/turf/T) mob/proc/in_view(var/turf/T)
return view(T) return view(T)
/mob/aiEye/in_view(var/turf/T) /mob/eye/in_view(var/turf/T)
var/list/viewed = new var/list/viewed = new
for(var/mob/living/carbon/human/H in mob_list) for(var/mob/living/carbon/human/H in mob_list)
if(get_dist(H, T) <= 7) if(get_dist(H, T) <= 7)

View File

@@ -1,48 +0,0 @@
/proc/CreateGeneralRecord()
var/mob/living/carbon/human/dummy = new()
dummy.mind = new()
var/icon/front = new(get_id_photo(dummy), dir = SOUTH)
var/icon/side = new(get_id_photo(dummy), dir = WEST)
var/datum/data/record/G = new /datum/data/record()
G.fields["name"] = "New Record"
G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
G.fields["rank"] = "Unassigned"
G.fields["real_rank"] = "Unassigned"
G.fields["sex"] = "Male"
G.fields["age"] = "Unknown"
G.fields["fingerprint"] = "Unknown"
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
G.fields["species"] = "Human"
G.fields["home_system"] = "Unknown"
G.fields["citizenship"] = "Unknown"
G.fields["faction"] = "Unknown"
G.fields["religion"] = "Unknown"
G.fields["photo_front"] = front
G.fields["photo_side"] = side
data_core.general += G
qdel(dummy)
return G
/proc/CreateSecurityRecord(var/name as text, var/id as text)
var/datum/data/record/R = new /datum/data/record()
R.fields["name"] = name
R.fields["id"] = id
R.name = text("Security Record #[id]")
R.fields["criminal"] = "None"
R.fields["mi_crim"] = "None"
R.fields["mi_crim_d"] = "No minor crime convictions."
R.fields["ma_crim"] = "None"
R.fields["ma_crim_d"] = "No major crime convictions."
R.fields["notes"] = "No notes."
data_core.security += R
return R
/proc/find_security_record(field, value)
return find_record(field, value, data_core.security)
/proc/find_record(field, value, list/L)
for(var/datum/data/record/R in L)
if(R.fields[field] == value)
return R

View File

@@ -59,20 +59,23 @@
/datum/antagonist/proc/get_candidates(var/ghosts_only) /datum/antagonist/proc/get_candidates(var/ghosts_only)
candidates = list() // Clear. candidates = list() // Clear.
candidates = ticker.mode.get_players_for_role(role_type, id)
// Prune restricted status. Broke it up for readability. // Prune restricted status. Broke it up for readability.
// Note that this is done before jobs are handed out. // Note that this is done before jobs are handed out.
for(var/datum/mind/player in candidates) for(var/datum/mind/player in ticker.mode.get_players_for_role(role_type, id))
if(ghosts_only && !istype(player.current, /mob/dead)) if(ghosts_only && !istype(player.current, /mob/dead))
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!")
else if(player.special_role) else if(player.special_role)
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])!")
else if (player in pending_antagonists) else if (player in pending_antagonists)
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role!")
else if(!can_become_antag(player)) else if(!can_become_antag(player))
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They are blacklisted for this role!")
else if(player_is_antag(player)) else if(player_is_antag(player))
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!")
else
candidates += player
return candidates return candidates
/datum/antagonist/proc/attempt_random_spawn() /datum/antagonist/proc/attempt_random_spawn()
@@ -108,6 +111,7 @@
return 0 return 0
//Grab candidates randomly until we have enough. //Grab candidates randomly until we have enough.
candidates = shuffle(candidates)
while(candidates.len && pending_antagonists.len < cur_max) while(candidates.len && pending_antagonists.len < cur_max)
var/datum/mind/player = pick(candidates) var/datum/mind/player = pick(candidates)
candidates -= player candidates -= player
@@ -118,6 +122,7 @@
/datum/antagonist/proc/draft_antagonist(var/datum/mind/player) /datum/antagonist/proc/draft_antagonist(var/datum/mind/player)
//Check if the player can join in this antag role, or if the player has already been given an antag role. //Check if the player can join in this antag role, or if the player has already been given an antag role.
if(!can_become_antag(player) || player.special_role) if(!can_become_antag(player) || player.special_role)
log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.")
return 0 return 0
pending_antagonists |= player pending_antagonists |= player

View File

@@ -34,10 +34,9 @@
var/obj/item/weapon/card/id/W = new id_type(player) var/obj/item/weapon/card/id/W = new id_type(player)
if(!W) return if(!W) return
W.name = "[player.real_name]'s ID Card"
W.access |= default_access W.access |= default_access
W.assignment = "[assignment]" W.assignment = "[assignment]"
W.registered_name = player.real_name W.set_owner_info(player)
if(equip) player.equip_to_slot_or_del(W, slot_wear_id) if(equip) player.equip_to_slot_or_del(W, slot_wear_id)
return W return W
@@ -86,7 +85,7 @@
code_owner.store_memory("<B>Nuclear Bomb Code</B>: [code]", 0, 0) code_owner.store_memory("<B>Nuclear Bomb Code</B>: [code]", 0, 0)
code_owner.current << "The nuclear authorization code is: <B>[code]</B>" code_owner.current << "The nuclear authorization code is: <B>[code]</B>"
else else
world << "<span class='danger'>Could not spawn nuclear bomb. Contact a developer.</span>" message_admins("<span class='danger'>Could not spawn nuclear bomb. Contact a developer.</span>")
return return
spawned_nuke = code spawned_nuke = code

View File

@@ -2,9 +2,9 @@
if(player.current && jobban_isbanned(player.current, bantype)) if(player.current && jobban_isbanned(player.current, bantype))
return 0 return 0
if(!ignore_role) if(!ignore_role)
if(player.assigned_role in protected_jobs) if(player.assigned_role in restricted_jobs)
return 0 return 0
if(config.protect_roles_from_antagonist && (player.assigned_role in restricted_jobs)) if(config.protect_roles_from_antagonist && (player.assigned_role in protected_jobs))
return 0 return 0
return 1 return 1

View File

@@ -8,7 +8,7 @@
/datum/antagonist/proc/create_objectives(var/datum/mind/player) /datum/antagonist/proc/create_objectives(var/datum/mind/player)
if(config.objectives_disabled) if(config.objectives_disabled)
return 0 return 0
if(create_global_objectives()) if(create_global_objectives() || global_objectives.len)
player.objectives |= global_objectives player.objectives |= global_objectives
return 1 return 1

View File

@@ -7,8 +7,8 @@
for(var/datum/mind/P in current_antagonists) for(var/datum/mind/P in current_antagonists)
text += print_player_full(P) text += print_player_full(P)
text += get_special_objective_text(P) text += get_special_objective_text(P)
var/failed
if(!global_objectives.len && P.objectives && P.objectives.len) if(!global_objectives.len && P.objectives && P.objectives.len)
var/failed
var/num = 1 var/num = 1
for(var/datum/objective/O in P.objectives) for(var/datum/objective/O in P.objectives)
text += print_objective(O, num) text += print_objective(O, num)
@@ -20,8 +20,6 @@
feedback_add_details(feedback_tag,"[O.type]|FAIL") feedback_add_details(feedback_tag,"[O.type]|FAIL")
failed = 1 failed = 1
num++ num++
if(!config.objectives_disabled)
if(failed) if(failed)
text += "<br><font color='red'><B>The [role_text] has failed.</B></font>" text += "<br><font color='red'><B>The [role_text] has failed.</B></font>"
else else

View File

@@ -6,6 +6,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
role_text = "Syndicate Commando" role_text = "Syndicate Commando"
role_text_plural = "Commandos" role_text_plural = "Commandos"
welcome_text = "You are in the employ of a criminal syndicate hostile to NanoTrasen." welcome_text = "You are in the employ of a criminal syndicate hostile to NanoTrasen."
id_type = /obj/item/weapon/card/id/centcom/ERT
/datum/antagonist/deathsquad/mercenary/New() /datum/antagonist/deathsquad/mercenary/New()
..(1) ..(1)
@@ -24,7 +25,6 @@ var/datum/antagonist/deathsquad/mercenary/commandos
player.equip_to_slot_or_del(new /obj/item/weapon/rig/merc(player), slot_back) player.equip_to_slot_or_del(new /obj/item/weapon/rig/merc(player), slot_back)
player.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(player), slot_r_hand) player.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(player), slot_r_hand)
var/obj/item/weapon/card/id/id = create_id("Commando", player) create_id("Commando", player)
id.access |= get_all_station_access()
id.icon_state = "centcom"
create_radio(SYND_FREQ, player) create_radio(SYND_FREQ, player)
return 1

View File

@@ -11,6 +11,7 @@ var/datum/antagonist/ert/ert
max_antags = 5 max_antags = 5
max_antags_round = 5 // ERT mode? max_antags_round = 5 // ERT mode?
landmark_id = "Response Team" landmark_id = "Response Team"
id_type = /obj/item/weapon/card/id/centcom/ERT
flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME
@@ -37,9 +38,5 @@ var/datum/antagonist/ert/ert
player.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves) player.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses) player.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses)
var/obj/item/weapon/card/id/centcom/ERT/W = new(src) create_id(role_text, player)
W.registered_name = player.real_name
W.name = "[player.real_name]'s ID Card ([W.assignment])"
player.equip_to_slot_or_del(W, slot_wear_id)
return 1 return 1

View File

@@ -184,7 +184,7 @@ var/datum/antagonist/raider/raiders
return 0 return 0
for(var/datum/mind/player in current_antagonists) for(var/datum/mind/player in current_antagonists)
if(!player.current || get_area(player.current) != locate(/area/shuttle/skipjack/station)) if(!player.current || get_area(player.current) != locate(/area/skipjack_station/start))
return 0 return 0
return 1 return 1
@@ -193,7 +193,7 @@ var/datum/antagonist/raider/raiders
if(!..()) if(!..())
return 0 return 0
if(player.species && player.species.name == "Vox") if(player.species && player.species.get_bodytype() == "Vox")
equip_vox(player) equip_vox(player)
else else
var/new_shoes = pick(raider_shoes) var/new_shoes = pick(raider_shoes)

View File

@@ -135,10 +135,10 @@ datum/antagonist/revolutionary/finalize(var/datum/mind/target)
world << text world << text
// This is a total redefine because headrevs are greeted differently to subrevs. // This is a total redefine because headrevs are greeted differently to subrevs.
/datum/antagonist/revolutionary/add_antagonist(var/datum/mind/player) /datum/antagonist/revolutionary/add_antagonist(var/datum/mind/player, var/ignore_role)
if((player in current_antagonists) || (player in head_revolutionaries)) if((player in current_antagonists) || (player in head_revolutionaries))
return 0 return 0
if(!can_become_antag(player)) if(!can_become_antag(player, ignore_role))
return 0 return 0
current_antagonists |= player current_antagonists |= player
player.current << "<span class='danger'><font size=3>You are a Revolutionary!</font></span>" player.current << "<span class='danger'><font size=3>You are a Revolutionary!</font></span>"
@@ -168,11 +168,6 @@ datum/antagonist/revolutionary/finalize(var/datum/mind/target)
if(show_message) if(show_message)
player.current.visible_message("[player.current] looks like they just remembered their real allegiance!") player.current.visible_message("[player.current] looks like they just remembered their real allegiance!")
/datum/antagonist/revolutionary/can_become_antag(var/datum/mind/player)
return ..() && istype(player) && \
istype(player.current, /mob/living/carbon/human) && \
!(player.assigned_role in command_positions)
// Used by RP-rev. // Used by RP-rev.
/mob/living/carbon/human/proc/convert_to_rev(mob/M as mob in oview(src)) /mob/living/carbon/human/proc/convert_to_rev(mob/M as mob in oview(src))
set name = "Convert Bourgeoise" set name = "Convert Bourgeoise"

View File

@@ -52,7 +52,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/air_doors_activated = 0 var/air_doors_activated = 0
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/list/forced_ambience = null var/list/forced_ambience = null
var/sound_env = 2 //reverb preset for sounds played in this area, see sound datum reference for more var/sound_env = STANDARD_STATION
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list() var/list/teleportlocs = list()
@@ -142,6 +142,7 @@ area/space/atmosalert()
/area/shuttle /area/shuttle
requires_power = 0 requires_power = 0
sound_env = SMALL_ENCLOSED
/area/shuttle/arrival /area/shuttle/arrival
name = "\improper Arrival Shuttle" name = "\improper Arrival Shuttle"
@@ -319,11 +320,6 @@ area/space/atmosalert()
/area/shuttle/research/outpost /area/shuttle/research/outpost
icon_state = "shuttle" icon_state = "shuttle"
/area/shuttle/skipjack/station
name = "\improper Skipjack"
icon_state = "yellow"
requires_power = 0
/area/airtunnel1/ // referenced in airtunnel.dm:759 /area/airtunnel1/ // referenced in airtunnel.dm:759
/area/dummy/ // Referenced in engine.dm:261 /area/dummy/ // Referenced in engine.dm:261
@@ -402,15 +398,18 @@ area/space/atmosalert()
name = "\improper Moon" name = "\improper Moon"
icon_state = "asteroid" icon_state = "asteroid"
requires_power = 0 requires_power = 0
sound_env = ASTEROID
/area/asteroid/cave // -- TLE /area/asteroid/cave // -- TLE
name = "\improper Moon - Underground" name = "\improper Moon - Underground"
icon_state = "cave" icon_state = "cave"
requires_power = 0 requires_power = 0
sound_env = ASTEROID
/area/asteroid/artifactroom /area/asteroid/artifactroom
name = "\improper Moon - Artifact" name = "\improper Moon - Artifact"
icon_state = "cave" icon_state = "cave"
sound_env = SMALL_ENCLOSED
@@ -436,6 +435,7 @@ area/space/atmosalert()
icon_state = "thunder" icon_state = "thunder"
requires_power = 0 requires_power = 0
lighting_use_dynamic = 0 lighting_use_dynamic = 0
sound_env = ARENA
/area/tdome/tdome1 /area/tdome/tdome1
name = "\improper Thunderdome (Team 1)" name = "\improper Thunderdome (Team 1)"
@@ -516,8 +516,16 @@ area/space/atmosalert()
requires_power = 0 requires_power = 0
lighting_use_dynamic = 0 lighting_use_dynamic = 0
/area/skipjack_station/transit /area/skipjack_station
name = "\improper Skipjack"
icon_state = "yellow"
requires_power = 0
/area/skipjack_station/start
name = "\improper Skipjack"
icon_state = "yellow"
/area/skipjack_station/transit
name = "\improper hyperspace" name = "\improper hyperspace"
icon_state = "shuttle" icon_state = "shuttle"
@@ -632,6 +640,7 @@ area/space/atmosalert()
/area/maintenance /area/maintenance
flags = RAD_SHIELDED flags = RAD_SHIELDED
sound_env = TUNNEL_ENCLOSED
/area/maintenance/aft /area/maintenance/aft
name = "Aft Maintenance" name = "Aft Maintenance"
@@ -766,6 +775,7 @@ area/space/atmosalert()
/area/maintenance/substation /area/maintenance/substation
name = "Substation" name = "Substation"
icon_state = "substation" icon_state = "substation"
sound_env = SMALL_ENCLOSED
/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets. /area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets.
name = "Engineering Substation" name = "Engineering Substation"
@@ -798,7 +808,7 @@ area/space/atmosalert()
//Hallway //Hallway
/area/hallway/primary/ /area/hallway/primary/
sound_env = 12 //hallway sound_env = LARGE_ENCLOSED
/area/hallway/primary/fore /area/hallway/primary/fore
name = "\improper Fore Primary Hallway" name = "\improper Fore Primary Hallway"
@@ -863,10 +873,12 @@ area/space/atmosalert()
name = "\improper Heads of Staff Meeting Room" name = "\improper Heads of Staff Meeting Room"
icon_state = "bridge" icon_state = "bridge"
music = null music = null
sound_env = MEDIUM_SOFTFLOOR
/area/crew_quarters/captain /area/crew_quarters/captain
name = "\improper Command - Captain's Office" name = "\improper Command - Captain's Office"
icon_state = "captain" icon_state = "captain"
sound_env = MEDIUM_SOFTFLOOR
/area/crew_quarters/heads/hop /area/crew_quarters/heads/hop
name = "\improper Command - HoP's Office" name = "\improper Command - HoP's Office"
@@ -914,6 +926,7 @@ area/space/atmosalert()
/area/crew_quarters/toilet /area/crew_quarters/toilet
name = "\improper Dormitory Toilets" name = "\improper Dormitory Toilets"
icon_state = "toilet" icon_state = "toilet"
sound_env = SMALL_ENCLOSED
/area/crew_quarters/sleep /area/crew_quarters/sleep
name = "\improper Dormitories" name = "\improper Dormitories"
@@ -922,10 +935,12 @@ area/space/atmosalert()
/area/crew_quarters/sleep/engi_wash /area/crew_quarters/sleep/engi_wash
name = "\improper Engineering Washroom" name = "\improper Engineering Washroom"
icon_state = "toilet" icon_state = "toilet"
sound_env = SMALL_ENCLOSED
/area/crew_quarters/sleep/bedrooms /area/crew_quarters/sleep/bedrooms
name = "\improper Dormitory Bedroom One" name = "\improper Dormitory Bedroom One"
icon_state = "Sleep" icon_state = "Sleep"
sound_env = SMALL_SOFTFLOOR
/area/crew_quarters/sleep/cryo /area/crew_quarters/sleep/cryo
name = "\improper Cryogenic Storage" name = "\improper Cryogenic Storage"
@@ -938,6 +953,7 @@ area/space/atmosalert()
/area/crew_quarters/sleep_male/toilet_male /area/crew_quarters/sleep_male/toilet_male
name = "\improper Male Toilets" name = "\improper Male Toilets"
icon_state = "toilet" icon_state = "toilet"
sound_env = SMALL_ENCLOSED
/area/crew_quarters/sleep_female /area/crew_quarters/sleep_female
name = "\improper Female Dorm" name = "\improper Female Dorm"
@@ -946,6 +962,7 @@ area/space/atmosalert()
/area/crew_quarters/sleep_female/toilet_female /area/crew_quarters/sleep_female/toilet_female
name = "\improper Female Toilets" name = "\improper Female Toilets"
icon_state = "toilet" icon_state = "toilet"
sound_env = SMALL_ENCLOSED
/area/crew_quarters/locker /area/crew_quarters/locker
name = "\improper Locker Room" name = "\improper Locker Room"
@@ -954,6 +971,7 @@ area/space/atmosalert()
/area/crew_quarters/locker/locker_toilet /area/crew_quarters/locker/locker_toilet
name = "\improper Locker Toilets" name = "\improper Locker Toilets"
icon_state = "toilet" icon_state = "toilet"
sound_env = SMALL_ENCLOSED
/area/crew_quarters/fitness /area/crew_quarters/fitness
name = "\improper Fitness Room" name = "\improper Fitness Room"
@@ -970,19 +988,23 @@ area/space/atmosalert()
/area/crew_quarters/bar /area/crew_quarters/bar
name = "\improper Bar" name = "\improper Bar"
icon_state = "bar" icon_state = "bar"
sound_env = LARGE_SOFTFLOOR
/area/crew_quarters/theatre /area/crew_quarters/theatre
name = "\improper Theatre" name = "\improper Theatre"
icon_state = "Theatre" icon_state = "Theatre"
sound_env = LARGE_SOFTFLOOR
/area/library /area/library
name = "\improper Library" name = "\improper Library"
icon_state = "library" icon_state = "library"
sound_env = LARGE_SOFTFLOOR
/area/chapel/main /area/chapel/main
name = "\improper Chapel" name = "\improper Chapel"
icon_state = "chapel" icon_state = "chapel"
ambience = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg','sound/music/traitor.ogg') ambience = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg','sound/music/traitor.ogg')
sound_env = LARGE_ENCLOSED
/area/chapel/office /area/chapel/office
name = "\improper Chapel Office" name = "\improper Chapel Office"
@@ -999,6 +1021,7 @@ area/space/atmosalert()
name = "\improper Holodeck" name = "\improper Holodeck"
icon_state = "Holodeck" icon_state = "Holodeck"
lighting_use_dynamic = 0 lighting_use_dynamic = 0
sound_env = LARGE_ENCLOSED
/area/holodeck/alphadeck /area/holodeck/alphadeck
name = "\improper Holodeck Alpha" name = "\improper Holodeck Alpha"
@@ -1008,21 +1031,27 @@ area/space/atmosalert()
/area/holodeck/source_emptycourt /area/holodeck/source_emptycourt
name = "\improper Holodeck - Empty Court" name = "\improper Holodeck - Empty Court"
sound_env = ARENA
/area/holodeck/source_boxingcourt /area/holodeck/source_boxingcourt
name = "\improper Holodeck - Boxing Court" name = "\improper Holodeck - Boxing Court"
sound_env = ARENA
/area/holodeck/source_basketball /area/holodeck/source_basketball
name = "\improper Holodeck - Basketball Court" name = "\improper Holodeck - Basketball Court"
sound_env = ARENA
/area/holodeck/source_thunderdomecourt /area/holodeck/source_thunderdomecourt
name = "\improper Holodeck - Thunderdome Court" name = "\improper Holodeck - Thunderdome Court"
sound_env = ARENA
/area/holodeck/source_courtroom /area/holodeck/source_courtroom
name = "\improper Holodeck - Courtroom" name = "\improper Holodeck - Courtroom"
sound_env = AUDITORIUM
/area/holodeck/source_beach /area/holodeck/source_beach
name = "\improper Holodeck - Beach" name = "\improper Holodeck - Beach"
sound_env = PLAIN
/area/holodeck/source_burntest /area/holodeck/source_burntest
name = "\improper Holodeck - Atmospheric Burn Test" name = "\improper Holodeck - Atmospheric Burn Test"
@@ -1032,22 +1061,28 @@ area/space/atmosalert()
/area/holodeck/source_meetinghall /area/holodeck/source_meetinghall
name = "\improper Holodeck - Meeting Hall" name = "\improper Holodeck - Meeting Hall"
sound_env = AUDITORIUM
/area/holodeck/source_theatre /area/holodeck/source_theatre
name = "\improper Holodeck - Theatre" name = "\improper Holodeck - Theatre"
sound_env = CONCERT_HALL
/area/holodeck/source_picnicarea /area/holodeck/source_picnicarea
name = "\improper Holodeck - Picnic Area" name = "\improper Holodeck - Picnic Area"
sound_env = PLAIN
/area/holodeck/source_snowfield /area/holodeck/source_snowfield
name = "\improper Holodeck - Snow Field" name = "\improper Holodeck - Snow Field"
sound_env = FOREST
/area/holodeck/source_desert /area/holodeck/source_desert
name = "\improper Holodeck - Desert" name = "\improper Holodeck - Desert"
sound_env = PLAIN
/area/holodeck/source_space /area/holodeck/source_space
name = "\improper Holodeck - Space" name = "\improper Holodeck - Space"
has_gravity = 0 has_gravity = 0
sound_env = SPACE
//Engineering //Engineering
@@ -1059,26 +1094,32 @@ area/space/atmosalert()
/area/engineering/atmos /area/engineering/atmos
name = "\improper Atmospherics" name = "\improper Atmospherics"
icon_state = "atmos" icon_state = "atmos"
sound_env = LARGE_ENCLOSED
/area/engineering/atmos/monitoring /area/engineering/atmos/monitoring
name = "\improper Atmospherics Monitoring Room" name = "\improper Atmospherics Monitoring Room"
icon_state = "atmos_monitoring" icon_state = "atmos_monitoring"
sound_env = STANDARD_STATION
/area/engineering/atmos/storage /area/engineering/atmos/storage
name = "\improper Atmospherics Storage" name = "\improper Atmospherics Storage"
icon_state = "atmos_storage" icon_state = "atmos_storage"
sound_env = SMALL_ENCLOSED
/area/engineering/drone_fabrication /area/engineering/drone_fabrication
name = "\improper Engineering Drone Fabrication" name = "\improper Engineering Drone Fabrication"
icon_state = "drone_fab" icon_state = "drone_fab"
sound_env = SMALL_ENCLOSED
/area/engineering/engine_smes /area/engineering/engine_smes
name = "\improper Engineering SMES" name = "\improper Engineering SMES"
icon_state = "engine_smes" icon_state = "engine_smes"
sound_env = SMALL_ENCLOSED
/area/engineering/engine_room /area/engineering/engine_room
name = "\improper Engine Room" name = "\improper Engine Room"
icon_state = "engine" icon_state = "engine"
sound_env = LARGE_ENCLOSED
/area/engineering/engine_airlock /area/engineering/engine_airlock
name = "\improper Engine Room Airlock" name = "\improper Engine Room Airlock"
@@ -1107,6 +1148,7 @@ area/space/atmosalert()
/area/engineering/break_room /area/engineering/break_room
name = "\improper Engineering Break Room" name = "\improper Engineering Break Room"
icon_state = "engineering_break" icon_state = "engineering_break"
sound_env = MEDIUM_SOFTFLOOR
/area/engineering/engine_eva /area/engineering/engine_eva
name = "\improper Engine EVA" name = "\improper Engine EVA"
@@ -1156,22 +1198,27 @@ area/space/atmosalert()
/area/maintenance/auxsolarport /area/maintenance/auxsolarport
name = "Solar Maintenance - Fore Port" name = "Solar Maintenance - Fore Port"
icon_state = "SolarcontrolP" icon_state = "SolarcontrolP"
sound_env = SMALL_ENCLOSED
/area/maintenance/starboardsolar /area/maintenance/starboardsolar
name = "Solar Maintenance - Aft Starboard" name = "Solar Maintenance - Aft Starboard"
icon_state = "SolarcontrolS" icon_state = "SolarcontrolS"
sound_env = SMALL_ENCLOSED
/area/maintenance/portsolar /area/maintenance/portsolar
name = "Solar Maintenance - Aft Port" name = "Solar Maintenance - Aft Port"
icon_state = "SolarcontrolP" icon_state = "SolarcontrolP"
sound_env = SMALL_ENCLOSED
/area/maintenance/auxsolarstarboard /area/maintenance/auxsolarstarboard
name = "Solar Maintenance - Fore Starboard" name = "Solar Maintenance - Fore Starboard"
icon_state = "SolarcontrolS" icon_state = "SolarcontrolS"
sound_env = SMALL_ENCLOSED
/area/maintenance/foresolar /area/maintenance/foresolar
name = "Solar Maintenance - Fore" name = "Solar Maintenance - Fore"
icon_state = "SolarcontrolA" icon_state = "SolarcontrolA"
sound_env = SMALL_ENCLOSED
/area/assembly/chargebay /area/assembly/chargebay
name = "\improper Mech Bay" name = "\improper Mech Bay"
@@ -1383,6 +1430,7 @@ area/space/atmosalert()
/area/security/detectives_office /area/security/detectives_office
name = "\improper Security - Forensic Office" name = "\improper Security - Forensic Office"
icon_state = "detective" icon_state = "detective"
sound_env = MEDIUM_SOFTFLOOR
/area/security/range /area/security/range
name = "\improper Security - Firing Range" name = "\improper Security - Firing Range"
@@ -1457,6 +1505,7 @@ area/space/atmosalert()
/area/quartermaster/storage /area/quartermaster/storage
name = "\improper Cargo Bay" name = "\improper Cargo Bay"
icon_state = "quartstorage" icon_state = "quartstorage"
sound_env = LARGE_ENCLOSED
/area/quartermaster/qm /area/quartermaster/qm
name = "\improper Cargo - Quartermaster's Office" name = "\improper Cargo - Quartermaster's Office"
@@ -1807,10 +1856,12 @@ area/space/atmosalert()
name = "AI Upload Access" name = "AI Upload Access"
icon_state = "ai_foyer" icon_state = "ai_foyer"
ambience = list('sound/ambience/ambimalf.ogg') ambience = list('sound/ambience/ambimalf.ogg')
sound_env = SMALL_ENCLOSED
/area/turret_protected/ai_server_room /area/turret_protected/ai_server_room
name = "Messaging Server Room" name = "Messaging Server Room"
icon_state = "ai_server" icon_state = "ai_server"
sound_env = SMALL_ENCLOSED
/area/turret_protected/ai /area/turret_protected/ai
name = "\improper AI Chamber" name = "\improper AI Chamber"
@@ -1820,6 +1871,7 @@ area/space/atmosalert()
/area/turret_protected/ai_cyborg_station /area/turret_protected/ai_cyborg_station
name = "\improper Cyborg Station" name = "\improper Cyborg Station"
icon_state = "ai_cyborg" icon_state = "ai_cyborg"
sound_env = SMALL_ENCLOSED
/area/turret_protected/aisat /area/turret_protected/aisat
name = "\improper AI Satellite" name = "\improper AI Satellite"

View File

@@ -67,7 +67,7 @@
for(var/obj/machinery/door/firedoor/E in all_doors) for(var/obj/machinery/door/firedoor/E in all_doors)
if(!E.blocked) if(!E.blocked)
if(E.operating) if(E.operating)
E.nextstate = CLOSED E.nextstate = FIREDOOR_CLOSED
else if(!E.density) else if(!E.density)
spawn(0) spawn(0)
E.close() E.close()
@@ -78,7 +78,7 @@
for(var/obj/machinery/door/firedoor/E in all_doors) for(var/obj/machinery/door/firedoor/E in all_doors)
if(!E.blocked) if(!E.blocked)
if(E.operating) if(E.operating)
E.nextstate = OPEN E.nextstate = FIREDOOR_OPEN
else if(E.density) else if(E.density)
spawn(0) spawn(0)
E.open() E.open()
@@ -92,7 +92,7 @@
for(var/obj/machinery/door/firedoor/D in all_doors) for(var/obj/machinery/door/firedoor/D in all_doors)
if(!D.blocked) if(!D.blocked)
if(D.operating) if(D.operating)
D.nextstate = CLOSED D.nextstate = FIREDOOR_CLOSED
else if(!D.density) else if(!D.density)
spawn() spawn()
D.close() D.close()
@@ -105,7 +105,7 @@
for(var/obj/machinery/door/firedoor/D in all_doors) for(var/obj/machinery/door/firedoor/D in all_doors)
if(!D.blocked) if(!D.blocked)
if(D.operating) if(D.operating)
D.nextstate = OPEN D.nextstate = FIREDOOR_OPEN
else if(D.density) else if(D.density)
spawn(0) spawn(0)
D.open() D.open()
@@ -137,7 +137,7 @@
for(var/obj/machinery/door/firedoor/D in src) for(var/obj/machinery/door/firedoor/D in src)
if(!D.blocked) if(!D.blocked)
if(D.operating) if(D.operating)
D.nextstate = OPEN D.nextstate = FIREDOOR_OPEN
else if(D.density) else if(D.density)
spawn(0) spawn(0)
D.open() D.open()
@@ -275,7 +275,7 @@ var/list/mob/living/forced_ambiance_list = new
if(istype(mob,/mob/living/carbon/human/)) if(istype(mob,/mob/living/carbon/human/))
var/mob/living/carbon/human/H = mob var/mob/living/carbon/human/H = mob
if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags & NOSLIP)) if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.item_flags & NOSLIP))
return return
if(H.m_intent == "run") if(H.m_intent == "run")

View File

@@ -3,7 +3,7 @@
/area/mine /area/mine
icon_state = "mining" icon_state = "mining"
music = 'sound/ambience/song_game.ogg' music = 'sound/ambience/song_game.ogg'
sound_env = 5 //stoneroom sound_env = ASTEROID
/area/mine/explored /area/mine/explored
name = "Mine" name = "Mine"

View File

@@ -24,7 +24,7 @@ proc/spawn_room(var/atom/start_loc,var/x_size,var/y_size,var/wall,var/floor , va
if(!wall) if(!wall)
wall = pick(/turf/simulated/wall/r_wall,/turf/simulated/wall,/obj/effect/alien/resin) wall = pick(/turf/simulated/wall/r_wall,/turf/simulated/wall,/obj/effect/alien/resin)
if(!floor) if(!floor)
floor = pick(/turf/simulated/floor,/turf/simulated/floor/engine) floor = pick(/turf/simulated/floor,/turf/simulated/floor/tiled,/turf/simulated/floor/reinforced)
for(var/x = 0,x<x_size,x++) for(var/x = 0,x<x_size,x++)
for(var/y = 0,y<y_size,y++) for(var/y = 0,y<y_size,y++)
@@ -76,9 +76,9 @@ proc/admin_spawn_room_at_pos()
wall=/obj/effect/alien/resin wall=/obj/effect/alien/resin
switch(alert("Floor type",null,"Regular floor","Reinforced floor")) switch(alert("Floor type",null,"Regular floor","Reinforced floor"))
if("Regular floor") if("Regular floor")
floor=/turf/simulated/floor floor=/turf/simulated/floor/tiled
if("Reinforced floor") if("Reinforced floor")
floor=/turf/simulated/floor/engine floor=/turf/simulated/floor/reinforced
if(x && y && z && wall && floor && x_len && y_len) if(x && y && z && wall && floor && x_len && y_len)
spawn_room(locate(x,y,z),x_len,y_len,wall,floor,clean) spawn_room(locate(x,y,z),x_len,y_len,wall,floor,clean)
return return

View File

@@ -66,6 +66,8 @@
/atom/proc/CheckExit() /atom/proc/CheckExit()
return 1 return 1
// If you want to use this, the atom must have the PROXMOVE flag, and the moving
// atom must also have the PROXMOVE flag currently to help with lag. ~ ComicIronic
/atom/proc/HasProximity(atom/movable/AM as mob|obj) /atom/proc/HasProximity(atom/movable/AM as mob|obj)
return return
@@ -411,7 +413,6 @@ its easier to just keep the beam vertical.
/atom/proc/clean_blood() /atom/proc/clean_blood()
if(!simulated) if(!simulated)
return return
src.color = initial(src.color) //paint
src.germ_level = 0 src.germ_level = 0
if(istype(blood_DNA, /list)) if(istype(blood_DNA, /list))
del(blood_DNA) del(blood_DNA)

View File

@@ -39,6 +39,7 @@
. = ..() . = ..()
if(reagents) if(reagents)
qdel(reagents) qdel(reagents)
reagents = null
for(var/atom/movable/AM in contents) for(var/atom/movable/AM in contents)
qdel(AM) qdel(AM)
loc = null loc = null

View File

@@ -1,6 +1,6 @@
// Returns the lowest turf available on a given Z-level, defaults to space. // Returns the lowest turf available on a given Z-level, defaults to space.
var/global/list/base_turf_by_z = list( var/global/list/base_turf_by_z = list(
"5" = /turf/simulated/floor/plating/airless/asteroid // Moonbase. "5" = /turf/simulated/floor/asteroid // Moonbase.
) )
proc/get_base_turf(var/z) proc/get_base_turf(var/z)

View File

@@ -218,7 +218,8 @@
name = "DNA Modifier Access Console" name = "DNA Modifier Access Console"
desc = "Scand DNA." desc = "Scand DNA."
icon = 'icons/obj/computer.dmi' icon = 'icons/obj/computer.dmi'
icon_state = "scanner" icon_keyboard = "med_key"
icon_screen = "dna"
density = 1 density = 1
circuit = /obj/item/weapon/circuitboard/scan_consolenew circuit = /obj/item/weapon/circuitboard/scan_consolenew
var/selected_ui_block = 1.0 var/selected_ui_block = 1.0
@@ -270,21 +271,9 @@
return return
/obj/machinery/computer/scan_consolenew/blob_act() /obj/machinery/computer/scan_consolenew/blob_act()
if(prob(75)) if(prob(75))
qdel(src) qdel(src)
/obj/machinery/computer/scan_consolenew/power_change()
..()
if(stat & BROKEN)
icon_state = "broken"
else
if (stat & NOPOWER)
spawn(rand(0, 15))
src.icon_state = "c_unpowered"
else
icon_state = initial(icon_state)
/obj/machinery/computer/scan_consolenew/New() /obj/machinery/computer/scan_consolenew/New()
..() ..()
for(var/i=0;i<3;i++) for(var/i=0;i<3;i++)

View File

@@ -157,6 +157,7 @@
attackby(var/obj/item/weapon/W, var/mob/user) attackby(var/obj/item/weapon/W, var/mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
src.visible_message("<span class='danger'>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]</span>") src.visible_message("<span class='danger'>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]</span>")
var/damage = 0 var/damage = 0

View File

@@ -35,8 +35,7 @@
icon_state = "culthood" icon_state = "culthood"
desc = "A hood worn by the followers of Nar-Sie." desc = "A hood worn by the followers of Nar-Sie."
flags_inv = HIDEFACE flags_inv = HIDEFACE
flags = HEADCOVERSEYES body_parts_covered = HEAD
body_parts_covered = HEAD|EYES
armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
cold_protection = HEAD cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
@@ -49,8 +48,7 @@
name = "magus helm" name = "magus helm"
icon_state = "magus" icon_state = "magus"
desc = "A helm worn by the followers of Nar-Sie." desc = "A helm worn by the followers of Nar-Sie."
flags_inv = HIDEFACE flags_inv = HIDEFACE | BLOCKHAIR
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/head/culthood/alt /obj/item/clothing/head/culthood/alt

View File

@@ -127,11 +127,6 @@
T.ChangeTurf(/turf/simulated/wall/cult) T.ChangeTurf(/turf/simulated/wall/cult)
..() ..()
/obj/structure/stool/cultify()
var/obj/structure/bed/chair/wood/wings/I = new(loc)
I.dir = dir
..()
/obj/structure/table/cultify() /obj/structure/table/cultify()
// Make it a wood-reinforced wooden table. // Make it a wood-reinforced wooden table.
// There are cult materials available, but it'd make the table non-deconstructable with how holotables work. // There are cult materials available, but it'd make the table non-deconstructable with how holotables work.

View File

@@ -3,11 +3,9 @@
return return
/turf/simulated/floor/cultify() /turf/simulated/floor/cultify()
//todo: flooring datum cultify check
cultify_floor() cultify_floor()
/turf/simulated/floor/carpet/cultify()
return
/turf/simulated/shuttle/floor/cultify() /turf/simulated/shuttle/floor/cultify()
cultify_floor() cultify_floor()
@@ -39,8 +37,6 @@
if((icon_state != "cult")&&(icon_state != "cult-narsie")) if((icon_state != "cult")&&(icon_state != "cult-narsie"))
name = "engraved floor" name = "engraved floor"
icon_state = "cult" icon_state = "cult"
turf_animation('icons/effects/effects.dmi',"cultfloor",0,0,MOB_LAYER-1)
/turf/proc/cultify_wall() /turf/proc/cultify_wall()
ChangeTurf(/turf/unsimulated/wall/cult) ChangeTurf(/turf/unsimulated/wall/cult)
turf_animation('icons/effects/effects.dmi',"cultwall",0,0,MOB_LAYER-1)

View File

@@ -144,6 +144,7 @@ var/global/list/narsie_list = list()
if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space))) if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space)))
if(T.icon_state != "cult-narsie") if(T.icon_state != "cult-narsie")
T.desc = "something that goes beyond your understanding went this way" T.desc = "something that goes beyond your understanding went this way"
T.icon = 'icons/turf/flooring/cult.dmi'
T.icon_state = "cult-narsie" T.icon_state = "cult-narsie"
T.set_light(1) T.set_light(1)

View File

@@ -286,7 +286,6 @@ var/global/list/additional_antag_types = list()
/datum/game_mode/proc/declare_completion() /datum/game_mode/proc/declare_completion()
var/is_antag_mode = (antag_templates && antag_templates.len) var/is_antag_mode = (antag_templates && antag_templates.len)
if(!config.objectives_disabled)
check_victory() check_victory()
if(is_antag_mode) if(is_antag_mode)
sleep(10) sleep(10)
@@ -395,8 +394,8 @@ var/global/list/additional_antag_types = list()
if (special_role in disregard_roles) if (special_role in disregard_roles)
continue continue
else if(man.client.prefs.nanotrasen_relation == "Opposed" && prob(50) || \ else if(man.client.prefs.nanotrasen_relation == COMPANY_OPPOSED && prob(50) || \
man.client.prefs.nanotrasen_relation == "Skeptical" && prob(20)) man.client.prefs.nanotrasen_relation == COMPANY_SKEPTICAL && prob(20))
suspects += man suspects += man
// Antags // Antags
else if(special_role_data && prob(special_role_data.suspicion_chance)) else if(special_role_data && prob(special_role_data.suspicion_chance))
@@ -433,28 +432,22 @@ var/global/list/additional_antag_types = list()
if(!antag_template) if(!antag_template)
return candidates return candidates
var/roletext
// Assemble a list of active players without jobbans. // Assemble a list of active players without jobbans.
for(var/mob/new_player/player in player_list) for(var/mob/new_player/player in player_list)
if( player.client && player.ready ) if( player.client && player.ready )
if(!(jobban_isbanned(player, "Syndicate") || jobban_isbanned(player, antag_template.bantype)))
players += player players += player
// Shuffle the players list so that it becomes ping-independent.
players = shuffle(players)
// Get a list of all the people who want to be the antagonist for this round // Get a list of all the people who want to be the antagonist for this round
for(var/mob/new_player/player in players) for(var/mob/new_player/player in players)
if(!role || (player.client.prefs.be_special & role)) if(!role || (player.client.prefs.be_special & role))
log_debug("[player.key] had [roletext] enabled, so we are drafting them.") log_debug("[player.key] had [antag_id] enabled, so we are drafting them.")
candidates += player.mind candidates += player.mind
players -= player players -= player
// If we don't have enough antags, draft people who voted for the round. // If we don't have enough antags, draft people who voted for the round.
if(candidates.len < required_enemies) if(candidates.len < required_enemies)
for(var/key in round_voters)
for(var/mob/new_player/player in players) for(var/mob/new_player/player in players)
if(player.ckey == key) if(player.ckey in round_voters)
log_debug("[player.key] voted for this round, so we are drafting them.") log_debug("[player.key] voted for this round, so we are drafting them.")
candidates += player.mind candidates += player.mind
players -= player players -= player
@@ -491,12 +484,14 @@ var/global/list/additional_antag_types = list()
if(antag) if(antag)
antag_templates |= antag antag_templates |= antag
/*
if(antag_templates && antag_templates.len) if(antag_templates && antag_templates.len)
for(var/datum/antagonist/antag in antag_templates) for(var/datum/antagonist/antag in antag_templates)
if(antag.flags & (ANTAG_OVERRIDE_JOB|ANTAG_RANDSPAWN)) if(antag.flags & (ANTAG_OVERRIDE_JOB|ANTAG_RANDSPAWN))
continue continue
antag_templates -= antag antag_templates -= antag
world << "<span class='danger'>[antag.role_text_plural] are invalid for additional roundtype antags!</span>" world << "<span class='danger'>[antag.role_text_plural] are invalid for additional roundtype antags!</span>"
*/
newscaster_announcements = pick(newscaster_standard_feeds) newscaster_announcements = pick(newscaster_standard_feeds)
@@ -562,9 +557,9 @@ proc/get_nt_opposed()
var/list/dudes = list() var/list/dudes = list()
for(var/mob/living/carbon/human/man in player_list) for(var/mob/living/carbon/human/man in player_list)
if(man.client) if(man.client)
if(man.client.prefs.nanotrasen_relation == "Opposed") if(man.client.prefs.nanotrasen_relation == COMPANY_OPPOSED)
dudes += man dudes += man
else if(man.client.prefs.nanotrasen_relation == "Skeptical" && prob(50)) else if(man.client.prefs.nanotrasen_relation == COMPANY_SKEPTICAL && prob(50))
dudes += man dudes += man
if(dudes.len == 0) return null if(dudes.len == 0) return null
return pick(dudes) return pick(dudes)

View File

@@ -90,7 +90,7 @@
/datum/intercept_text/proc/get_suspect() /datum/intercept_text/proc/get_suspect()
var/list/dudes = list() var/list/dudes = list()
for(var/mob/living/carbon/human/man in player_list) if(man.client && man.client.prefs.nanotrasen_relation == "Opposed") for(var/mob/living/carbon/human/man in player_list) if(man.client && man.client.prefs.nanotrasen_relation == COMPANY_OPPOSED)
dudes += man dudes += man
for(var/i = 0, i < max(player_list.len/10,2), i++) for(var/i = 0, i < max(player_list.len/10,2), i++)
dudes += pick(player_list) dudes += pick(player_list)

View File

@@ -163,13 +163,12 @@
command_announcement.Announce(fulltext) command_announcement.Announce(fulltext)
// Proc: get_unhacked_apcs() // Proc: get_all_apcs()
// Parameters: None // Parameters: None
// Description: Returns a list of APCs that are not yet hacked. // Description: Returns a list of all APCs
/proc/get_unhacked_apcs() /proc/get_all_apcs()
var/list/H = list() var/list/H = list()
for(var/obj/machinery/power/apc/A in machines) for(var/obj/machinery/power/apc/A in machines)
if(!A.hacker)
H.Add(A) H.Add(A)
return H return H

View File

@@ -38,7 +38,7 @@
// END RESEARCH DATUMS // END RESEARCH DATUMS
// BEGIN ABILITY VERBS // BEGIN ABILITY VERBS
/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_unhacked_apcs()) /datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_all_apcs())
set category = "Software" set category = "Software"
set name = "Basic Encryption Hack" set name = "Basic Encryption Hack"
set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station." set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station."

View File

@@ -728,7 +728,7 @@ datum/objective/heist/kidnap
//if (!target.current.restrained()) //if (!target.current.restrained())
// return 0 // They're loose. Close but no cigar. // return 0 // They're loose. Close but no cigar.
var/area/shuttle/skipjack/station/A = locate() var/area/skipjack_station/start/A = locate()
for(var/mob/living/carbon/human/M in A) for(var/mob/living/carbon/human/M in A)
if(target.current == M) if(target.current == M)
return 1 //They're restrained on the shuttle. Success. return 1 //They're restrained on the shuttle. Success.
@@ -779,7 +779,7 @@ datum/objective/heist/loot
var/total_amount = 0 var/total_amount = 0
for(var/obj/O in locate(/area/shuttle/skipjack/station)) for(var/obj/O in locate(/area/skipjack_station/start))
if(istype(O,target)) total_amount++ if(istype(O,target)) total_amount++
for(var/obj/I in O.contents) for(var/obj/I in O.contents)
if(istype(I,target)) total_amount++ if(istype(I,target)) total_amount++
@@ -828,7 +828,7 @@ datum/objective/heist/salvage
var/total_amount = 0 var/total_amount = 0
for(var/obj/item/O in locate(/area/shuttle/skipjack/station)) for(var/obj/item/O in locate(/area/skipjack_station/start))
var/obj/item/stack/material/S var/obj/item/stack/material/S
if(istype(O,/obj/item/stack/material)) if(istype(O,/obj/item/stack/material))

View File

@@ -9,7 +9,7 @@
#define ACCESS_REGION_SUPPLY 7 #define ACCESS_REGION_SUPPLY 7
#define ACCESS_TYPE_NONE 0 #define ACCESS_TYPE_NONE 0
#define ACCESS_TYPE_STATION 1 #define ACCESS_TYPE_CENTCOM 1
#define ACCESS_TYPE_CENTCOM 2 #define ACCESS_TYPE_STATION 2
#define ACCESS_TYPE_SYNDICATE 4 #define ACCESS_TYPE_SYNDICATE 4
#define ACCESS_TYPE_ALL 7 #define ACCESS_TYPE_ALL (ACCESS_TYPE_CENTCOM|ACCESS_TYPE_STATION|ACCESS_TYPE_SYNDICATE)

View File

@@ -67,17 +67,29 @@
/proc/get_all_access_datums() /proc/get_all_access_datums()
if(!priv_all_access_datums) if(!priv_all_access_datums)
priv_all_access_datums = init_subtypes(/datum/access) priv_all_access_datums = init_subtypes(/datum/access)
priv_all_access_datums = dd_sortedObjectList(priv_all_access_datums)
return priv_all_access_datums return priv_all_access_datums
/var/list/datum/access/priv_all_access_datums_assoc /var/list/datum/access/priv_all_access_datums_id
/proc/get_all_access_datums_assoc() /proc/get_all_access_datums_by_id()
if(!priv_all_access_datums_assoc) if(!priv_all_access_datums_id)
priv_all_access_datums_assoc = list() priv_all_access_datums_id = list()
for(var/datum/access/A in get_all_access_datums()) for(var/datum/access/A in get_all_access_datums())
priv_all_access_datums_assoc["[A.id]"] = A priv_all_access_datums_id["[A.id]"] = A
return priv_all_access_datums_assoc return priv_all_access_datums_id
/var/list/datum/access/priv_all_access_datums_region
/proc/get_all_access_datums_by_region()
if(!priv_all_access_datums_region)
priv_all_access_datums_region = list()
for(var/datum/access/A in get_all_access_datums())
if(!priv_all_access_datums_region[A.region])
priv_all_access_datums_region[A.region] = list()
priv_all_access_datums_region[A.region] += A
return priv_all_access_datums_region
/proc/get_access_ids(var/access_types = ACCESS_TYPE_ALL) /proc/get_access_ids(var/access_types = ACCESS_TYPE_ALL)
var/list/L = new() var/list/L = new()
@@ -148,7 +160,7 @@
return "Supply" return "Supply"
/proc/get_access_desc(id) /proc/get_access_desc(id)
var/list/AS = get_all_access_datums_assoc() var/list/AS = get_all_access_datums_by_id()
var/datum/access/A = AS["[id]"] var/datum/access/A = AS["[id]"]
return A ? A.desc : "" return A ? A.desc : ""

View File

@@ -4,6 +4,9 @@
var/region = ACCESS_REGION_NONE var/region = ACCESS_REGION_NONE
var/access_type = ACCESS_TYPE_STATION var/access_type = ACCESS_TYPE_STATION
/datum/access/dd_SortValue()
return "[access_type][desc]"
/***************** /*****************
* Station access * * Station access *
*****************/ *****************/
@@ -232,8 +235,8 @@
/var/const/access_lawyer = 38 /var/const/access_lawyer = 38
/datum/access/lawyer /datum/access/lawyer
id = access_lawyer id = access_lawyer
desc = "Law Office" desc = "Internal Affairs"
region = ACCESS_REGION_GENERAL region = ACCESS_REGION_COMMAND
/var/const/access_virology = 39 /var/const/access_virology = 39
/datum/access/virology /datum/access/virology
@@ -253,21 +256,9 @@
desc = "Quartermaster" desc = "Quartermaster"
region = ACCESS_REGION_SUPPLY region = ACCESS_REGION_SUPPLY
/var/const/access_court = 42 // /var/const/free_access_id = 43
/datum/access/court // /var/const/free_access_id = 43
id = access_court // /var/const/free_access_id = 44
desc = "Courtroom"
region = ACCESS_REGION_SECURITY
/var/const/access_clown = 43
/datum/access/clown
id = access_clown
desc = "HONK! Access"
/var/const/access_mime = 44
/datum/access/mime
id = access_mime
desc = "Silent Access"
/var/const/access_surgery = 45 /var/const/access_surgery = 45
/datum/access/surgery /datum/access/surgery
@@ -275,11 +266,7 @@
desc = "Surgery" desc = "Surgery"
region = ACCESS_REGION_MEDBAY region = ACCESS_REGION_MEDBAY
/var/const/access_theatre = 46 // /var/const/free_access_id = 46
/datum/access/theatre
id = access_theatre
desc = "Theatre"
region = ACCESS_REGION_GENERAL
/var/const/access_research = 47 /var/const/access_research = 47
/datum/access/research /datum/access/research

View File

@@ -8,6 +8,7 @@
spawn_positions = -1 spawn_positions = -1
supervisors = "absolutely everyone" supervisors = "absolutely everyone"
selection_color = "#dddddd" selection_color = "#dddddd"
economic_modifier = 1
access = list() //See /datum/job/assistant/get_access() access = list() //See /datum/job/assistant/get_access()
minimal_access = list() //See /datum/job/assistant/get_access() minimal_access = list() //See /datum/job/assistant/get_access()
alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor") alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor")

View File

@@ -16,6 +16,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
access = list() //See get_access() access = list() //See get_access()
minimal_access = list() //See get_access() minimal_access = list() //See get_access()
minimal_player_age = 14 minimal_player_age = 14
economic_modifier = 20
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
if(!H) return 0 if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
@@ -60,18 +61,19 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
idtype = /obj/item/weapon/card/id/silver idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 10 minimal_player_age = 10
access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers, economic_modifier = 10
access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway) access_hop, access_RC_announce, access_keycard_auth, access_gateway)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers, minimal_access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway) access_hop, access_RC_announce, access_keycard_auth, access_gateway)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)

View File

@@ -97,6 +97,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
economic_modifier = 5
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
@@ -149,6 +150,7 @@
spawn_positions = 3 spawn_positions = 3
supervisors = "the quartermaster and the head of personnel" supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
economic_modifier = 5
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
minimal_access = list(access_mining, access_mining_station, access_mailsorting) minimal_access = list(access_mining, access_mining_station, access_mailsorting)
alt_titles = list("Drill Technician","Prospector") alt_titles = list("Drill Technician","Prospector")
@@ -311,8 +313,9 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "Nanotrasen officials and Corporate Regulations" supervisors = "Nanotrasen officials and Corporate Regulations"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_lawyer, access_court, access_sec_doors, access_maint_tunnels, access_heads) economic_modifier = 7
minimal_access = list(access_lawyer, access_court, access_sec_doors, access_heads) access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
minimal_access = list(access_lawyer, access_sec_doors, access_heads)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)

View File

@@ -11,6 +11,7 @@
selection_color = "#ffeeaa" selection_color = "#ffeeaa"
idtype = /obj/item/weapon/card/id/silver idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1 req_admin_notify = 1
economic_modifier = 10
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
access_heads, access_construction, access_sec_doors, access_heads, access_construction, access_sec_doors,
@@ -53,6 +54,7 @@
spawn_positions = 5 spawn_positions = 5
supervisors = "the chief engineer" supervisors = "the chief engineer"
selection_color = "#fff5cc" selection_color = "#fff5cc"
economic_modifier = 5
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics) 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_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction) minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
alt_titles = list("Maintenance Technician","Engine Technician","Electrician") alt_titles = list("Maintenance Technician","Engine Technician","Electrician")
@@ -89,6 +91,7 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief engineer" supervisors = "the chief engineer"
selection_color = "#fff5cc" selection_color = "#fff5cc"
economic_modifier = 5
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks) access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks) minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)

View File

@@ -20,6 +20,9 @@
var/department = null // Does this position have a department tag? var/department = null // Does this position have a department tag?
var/head_position = 0 // Is this position Command? var/head_position = 0 // Is this position Command?
var/account_allowed = 1 // Does this job type come with a station account?
var/economic_modifier = 2 // With how much does this job modify the initial account amount?
/datum/job/proc/equip(var/mob/living/carbon/human/H) /datum/job/proc/equip(var/mob/living/carbon/human/H)
return 1 return 1
@@ -34,6 +37,37 @@
H.species.equip_survival_gear(H,0) H.species.equip_survival_gear(H,0)
return 1 return 1
/datum/job/proc/setup_account(var/mob/living/carbon/human/H)
if(!account_allowed || (H.mind && H.mind.initial_account))
return
var/loyalty = 1
if(H.client)
switch(H.client.prefs.nanotrasen_relation)
if(COMPANY_LOYAL) loyalty = 1.30
if(COMPANY_SUPPORTATIVE)loyalty = 1.15
if(COMPANY_NEUTRAL) loyalty = 1
if(COMPANY_SKEPTICAL) loyalty = 0.85
if(COMPANY_OPPOSED) loyalty = 0.70
//give them an account in the station database
var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * (H.species ? economic_species_modifier[H.species.type] : 2)
var/datum/money_account/M = create_account(H.real_name, money_amount, null)
if(H.mind)
var/remembered_info = ""
remembered_info += "<b>Your account number is:</b> #[M.account_number]<br>"
remembered_info += "<b>Your account pin is:</b> [M.remote_access_pin]<br>"
remembered_info += "<b>Your account funds are:</b> $[M.money]<br>"
if(M.transaction_log.len)
var/datum/transaction/T = M.transaction_log[1]
remembered_info += "<b>Your account was created:</b> [T.time], [T.date] at [T.source_terminal]<br>"
H.mind.store_memory(remembered_info)
H.mind.initial_account = M
H << "<span class='notice'><b>Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]</b></span>"
// overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/del() // overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/del()
/datum/job/proc/equip_preview(mob/living/carbon/human/H) /datum/job/proc/equip_preview(mob/living/carbon/human/H)
return equip(H) return equip(H)

View File

@@ -11,6 +11,7 @@
selection_color = "#ffddf0" selection_color = "#ffddf0"
idtype = /obj/item/weapon/card/id/silver idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1 req_admin_notify = 1
economic_modifier = 10
access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads, access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks) access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks)
@@ -44,6 +45,7 @@
spawn_positions = 3 spawn_positions = 3
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
economic_modifier = 7
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology)
alt_titles = list("Surgeon","Emergency Physician","Nurse","Virologist") alt_titles = list("Surgeon","Emergency Physician","Nurse","Virologist")
@@ -106,8 +108,9 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
economic_modifier = 5
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_chemistry) minimal_access = list(access_medical, access_medical_equip, access_chemistry)
alt_titles = list("Pharmacist") alt_titles = list("Pharmacist")
@@ -136,6 +139,7 @@
spawn_positions = 0 spawn_positions = 0
supervisors = "the chief medical officer and research director" supervisors = "the chief medical officer and research director"
selection_color = "#ffeef0" selection_color = "#ffeef0"
economic_modifier = 7
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research) minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
@@ -162,6 +166,7 @@
faction = "Station" faction = "Station"
total_positions = 1 total_positions = 1
spawn_positions = 1 spawn_positions = 1
economic_modifier = 5
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_psychiatrist) access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_psychiatrist)
@@ -198,6 +203,7 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
economic_modifier = 4
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist) access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist)
minimal_access = list(access_medical, access_medical_equip, access_eva, access_maint_tunnels, access_external_airlocks) minimal_access = list(access_medical, access_medical_equip, access_eva, access_maint_tunnels, access_external_airlocks)
alt_titles = list("Emergency Medical Technician") alt_titles = list("Emergency Medical Technician")

Some files were not shown because too many files have changed in this diff Show More