Merge branch 'incremental_tg' r5514 (11/1/2013) into bs12_with_tgport

Conflicts:
	baystation12.dme
	code/ATMOSPHERICS/components/unary/vent_pump.dm
	code/ATMOSPHERICS/components/unary/vent_scrubber.dm
	code/__HELPERS/game.dm
	code/controllers/shuttle_controller.dm
	code/datums/datumvars.dm
	code/datums/supplypacks.dm
	code/defines/obj/storage.dm
	code/defines/obj/vending.dm
	code/defines/obj/weapon.dm
	code/defines/procs/command_alert.dm
	code/game/area/Space Station 13 areas.dm
	code/game/atoms.dm
	code/game/gamemodes/changeling/modularchangling.dm
	code/game/gamemodes/cult/runes.dm
	code/game/gamemodes/events.dm
	code/game/gamemodes/events/dust.dm
	code/game/gamemodes/events/miniblob.dm
	code/game/gamemodes/events/ninja_equipment.dm
	code/game/gamemodes/factions.dm
	code/game/gamemodes/game_mode.dm
	code/game/gamemodes/gameticker.dm
	code/game/jobs/access.dm
	code/game/jobs/job/assistant.dm
	code/game/jobs/job/captain.dm
	code/game/jobs/job/civilian.dm
	code/game/jobs/job/engineering.dm
	code/game/jobs/job/medical.dm
	code/game/jobs/job/science.dm
	code/game/jobs/job/security.dm
	code/game/jobs/job_controller.dm
	code/game/machinery/alarm.dm
	code/game/machinery/atmo_control.dm
	code/game/machinery/atmoalter/area_atmos_computer.dm
	code/game/machinery/bots/medbot.dm
	code/game/machinery/computer/HolodeckControl.dm
	code/game/machinery/computer/ai_core.dm
	code/game/machinery/computer/atmos_alert.dm
	code/game/machinery/computer/card.dm
	code/game/machinery/computer/cloning.dm
	code/game/machinery/computer/computer.dm
	code/game/machinery/computer/message.dm
	code/game/machinery/computer/pod.dm
	code/game/machinery/computer/prisoner.dm
	code/game/machinery/computer/syndicate_shuttle.dm
	code/game/machinery/constructable_frame.dm
	code/game/machinery/doors/door.dm
	code/game/machinery/doors/firedoor.dm
	code/game/machinery/newscaster.dm
	code/game/machinery/recharger.dm
	code/game/machinery/spaceheater.dm
	code/game/machinery/telecomms/broadcaster.dm
	code/game/machinery/telecomms/logbrowser.dm
	code/game/machinery/telecomms/machine_interactions.dm
	code/game/machinery/teleporter.dm
	code/game/machinery/wishgranter.dm
	code/game/mecha/mech_fabricator.dm
	code/game/mecha/working/ripley.dm
	code/game/objects/items.dm
	code/game/objects/items/blueprints.dm
	code/game/objects/items/devices/flashlight.dm
	code/game/objects/items/devices/radio/encryptionkey.dm
	code/game/objects/items/devices/uplinks.dm
	code/game/objects/items/stacks/medical.dm
	code/game/objects/items/weapons/cards_ids.dm
	code/game/objects/items/weapons/gift_wrappaper.dm
	code/game/objects/items/weapons/hydroponics.dm
	code/game/objects/items/weapons/manuals.dm
	code/game/objects/items/weapons/secstorage/secstorage.dm
	code/game/objects/items/weapons/storage/backpack.dm
	code/game/objects/items/weapons/storage/firstaid.dm
	code/game/objects/items/weapons/storage/kit.dm
	code/game/objects/items/weapons/storage/storage.dm
	code/game/objects/items/weapons/storage/toolbox.dm
	code/game/objects/items/weapons/storage/uplink_kits.dm
	code/game/objects/items/weapons/stunbaton.dm
	code/game/objects/items/weapons/surgery_tools.dm
	code/game/objects/items/weapons/tools.dm
	code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
	code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
	code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
	code/game/objects/structures/crates_lockers/closets/secure/security.dm
	code/game/objects/structures/electricchair.dm
	code/game/objects/structures/extinguisher.dm
	code/game/objects/structures/watercloset.dm
	code/game/objects/weapons.dm
	code/game/turfs/turf.dm
	code/game/vehicles/airtight/airtight.dm
	code/game/vehicles/vehicle.dm
	code/global.dm
	code/modules/DetectiveWork/evidence.dm
	code/modules/admin/IsBanned.dm
	code/modules/admin/player_panel.dm
	code/modules/admin/verbs/diagnostics.dm
	code/modules/admin/verbs/getlogs.dm
	code/modules/client/preferences.dm
	code/modules/clothing/masks/miscellaneous.dm
	code/modules/clothing/spacesuits/rig.dm
	code/modules/clothing/suits/miscellaneous.dm
	code/modules/critters/critter_defenses.dm
	code/modules/detectivework/scanner.dm
	code/modules/flufftext/Hallucination.dm
	code/modules/food/recipes_microwave.dm
	code/modules/mining/mine_items.dm
	code/modules/mining/mine_turfs.dm
	code/modules/mining/satchel_ore_boxdm.dm
	code/modules/mob/dead/observer/observer.dm
	code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
	code/modules/mob/living/carbon/alien/special/facehugger.dm
	code/modules/mob/living/carbon/carbon.dm
	code/modules/mob/living/carbon/carbon_defines.dm
	code/modules/mob/living/carbon/human/human.dm
	code/modules/mob/living/carbon/human/human_attackhand.dm
	code/modules/mob/living/carbon/human/life.dm
	code/modules/mob/living/carbon/human/say.dm
	code/modules/mob/living/carbon/human/update_icons.dm
	code/modules/mob/living/carbon/metroid/metroid.dm
	code/modules/mob/living/living.dm
	code/modules/mob/living/silicon/ai/life.dm
	code/modules/mob/living/silicon/robot/robot.dm
	code/modules/mob/mob_cleanup.dm
	code/modules/mob/mob_defines.dm
	code/modules/mob/mob_transformation_simple.dm
	code/modules/paperwork/clipboard.dm
	code/modules/paperwork/folders.dm
	code/modules/paperwork/paper.dm
	code/modules/paperwork/paperbin.dm
	code/modules/paperwork/pen.dm
	code/modules/power/cable.dm
	code/modules/projectiles/guns/energy/special.dm
	code/modules/projectiles/guns/projectile/revolver.dm
	code/modules/projectiles/projectile/change.dm
	code/modules/projectiles/projectile/special.dm
	code/modules/reagents/Chemistry-Reagents.dm
	code/modules/reagents/reagent_containers/glass.dm
	code/modules/reagents/reagent_containers/hypospray.dm
	code/modules/recycling/sortingmachinery.dm
	code/modules/research/designs.dm
	config/config.txt
	html/changelog.html
	icons/mob/head.dmi
	icons/mob/hud.dmi
	icons/mob/items_lefthand.dmi
	icons/mob/items_righthand.dmi
	icons/mob/mask.dmi
	icons/mob/suit.dmi
	icons/mob/ties.dmi
	icons/mob/uniform.dmi
	icons/obj/clothing/hats.dmi
	icons/obj/clothing/masks.dmi
	icons/obj/clothing/suits.dmi
	icons/obj/clothing/ties.dmi
	icons/obj/grenade.dmi
	icons/obj/projectiles.dmi

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2013-01-11 22:10:41 +10:00
637 changed files with 28812 additions and 21593 deletions

View File

@@ -4,9 +4,11 @@
// BEGIN_INTERNALS // BEGIN_INTERNALS
// END_INTERNALS // END_INTERNALS
// BEGIN_FILE_DIR // BEGIN_FILE_DIR
#define FILE_DIR .
// END_FILE_DIR // END_FILE_DIR
// BEGIN_PREFERENCES // BEGIN_PREFERENCES
#define DEBUG
// END_PREFERENCES // END_PREFERENCES
// BEGIN_INCLUDE // BEGIN_INCLUDE
@@ -77,7 +79,6 @@
#include "code\datums\spell.dm" #include "code\datums\spell.dm"
#include "code\datums\sun.dm" #include "code\datums\sun.dm"
#include "code\datums\supplypacks.dm" #include "code\datums\supplypacks.dm"
#include "code\datums\diseases\alien_embryo.dm"
#include "code\datums\diseases\appendicitis.dm" #include "code\datums\diseases\appendicitis.dm"
#include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\beesease.dm"
#include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\brainrot.dm"
@@ -127,6 +128,7 @@
#include "code\datums\organs\wound.dm" #include "code\datums\organs\wound.dm"
#include "code\datums\spells\area_teleport.dm" #include "code\datums\spells\area_teleport.dm"
#include "code\datums\spells\conjure.dm" #include "code\datums\spells\conjure.dm"
#include "code\datums\spells\dumbfire.dm"
#include "code\datums\spells\emplosion.dm" #include "code\datums\spells\emplosion.dm"
#include "code\datums\spells\ethereal_jaunt.dm" #include "code\datums\spells\ethereal_jaunt.dm"
#include "code\datums\spells\explosion.dm" #include "code\datums\spells\explosion.dm"
@@ -140,10 +142,6 @@
#include "code\datums\spells\wizard.dm" #include "code\datums\spells\wizard.dm"
#include "code\defines\obj.dm" #include "code\defines\obj.dm"
#include "code\defines\obj\hydro.dm" #include "code\defines\obj\hydro.dm"
#include "code\defines\obj\machinery.dm"
#include "code\defines\obj\storage.dm"
#include "code\defines\obj\toy.dm"
#include "code\defines\obj\vending.dm"
#include "code\defines\obj\weapon.dm" #include "code\defines\obj\weapon.dm"
#include "code\defines\procs\AStar.dm" #include "code\defines\procs\AStar.dm"
#include "code\defines\procs\captain_announce.dm" #include "code\defines\procs\captain_announce.dm"
@@ -200,7 +198,9 @@
#include "code\game\gamemodes\events\space_ninja.dm" #include "code\game\gamemodes\events\space_ninja.dm"
#include "code\game\gamemodes\events\spacevines.dm" #include "code\game\gamemodes\events\spacevines.dm"
#include "code\game\gamemodes\events\wormholes.dm" #include "code\game\gamemodes\events\wormholes.dm"
#include "code\game\gamemodes\events\holidays\Christmas.dm"
#include "code\game\gamemodes\events\holidays\Holidays.dm" #include "code\game\gamemodes\events\holidays\Holidays.dm"
#include "code\game\gamemodes\events\holidays\Other.dm"
#include "code\game\gamemodes\extended\extended.dm" #include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\malfunction\Malf_Modules.dm"
#include "code\game\gamemodes\malfunction\malfunction.dm" #include "code\game\gamemodes\malfunction\malfunction.dm"
@@ -243,6 +243,7 @@
#include "code\game\machinery\autolathe.dm" #include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\Beacon.dm" #include "code\game\machinery\Beacon.dm"
#include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\biogenerator.dm"
#include "code\game\machinery\buttons.dm"
#include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\cloning.dm" #include "code\game\machinery\cloning.dm"
#include "code\game\machinery\constructable_frame.dm" #include "code\game\machinery\constructable_frame.dm"
@@ -283,6 +284,7 @@
#include "code\game\machinery\turrets.dm" #include "code\game\machinery\turrets.dm"
#include "code\game\machinery\vending.dm" #include "code\game\machinery\vending.dm"
#include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\washing_machine.dm"
#include "code\game\machinery\wishgranter.dm"
#include "code\game\machinery\atmoalter\area_atmos_computer.dm" #include "code\game\machinery\atmoalter\area_atmos_computer.dm"
#include "code\game\machinery\atmoalter\canister.dm" #include "code\game\machinery\atmoalter\canister.dm"
#include "code\game\machinery\atmoalter\meter.dm" #include "code\game\machinery\atmoalter\meter.dm"
@@ -333,6 +335,7 @@
#include "code\game\machinery\computer\syndicate_specops_shuttle.dm" #include "code\game\machinery\computer\syndicate_specops_shuttle.dm"
#include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_electronics.dm" #include "code\game\machinery\doors\airlock_electronics.dm"
#include "code\game\machinery\doors\alarmlock.dm"
#include "code\game\machinery\doors\brigdoors.dm" #include "code\game\machinery\doors\brigdoors.dm"
#include "code\game\machinery\doors\checkForMultipleDoors.dm" #include "code\game\machinery\doors\checkForMultipleDoors.dm"
#include "code\game\machinery\doors\door.dm" #include "code\game\machinery\doors\door.dm"
@@ -426,6 +429,7 @@
#include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\tk_grab.dm" #include "code\game\objects\items\tk_grab.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm" #include "code\game\objects\items\trash.dm"
#include "code\game\objects\items\devices\aicard.dm" #include "code\game\objects\items\devices\aicard.dm"
#include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\chameleonproj.dm"
@@ -436,7 +440,6 @@
#include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\powersink.dm"
#include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\shields.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"
@@ -485,17 +488,19 @@
#include "code\game\objects\items\weapons\mop.dm" #include "code\game\objects\items\weapons\mop.dm"
#include "code\game\objects\items\weapons\paint.dm" #include "code\game\objects\items\weapons\paint.dm"
#include "code\game\objects\items\weapons\paiwire.dm" #include "code\game\objects\items\weapons\paiwire.dm"
#include "code\game\objects\items\weapons\power_cells.dm"
#include "code\game\objects\items\weapons\RCD.dm" #include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RSF.dm" #include "code\game\objects\items\weapons\RSF.dm"
#include "code\game\objects\items\weapons\scrolls.dm" #include "code\game\objects\items\weapons\scrolls.dm"
#include "code\game\objects\items\weapons\shields.dm"
#include "code\game\objects\items\weapons\stunbaton.dm" #include "code\game\objects\items\weapons\stunbaton.dm"
#include "code\game\objects\items\weapons\surgery_tools.dm" #include "code\game\objects\items\weapons\surgery_tools.dm"
#include "code\game\objects\items\weapons\swords_axes_etc.dm" #include "code\game\objects\items\weapons\swords_axes_etc.dm"
#include "code\game\objects\items\weapons\table_rack_parts.dm" #include "code\game\objects\items\weapons\table_rack_parts.dm"
#include "code\game\objects\items\weapons\teleportation.dm" #include "code\game\objects\items\weapons\teleportation.dm"
#include "code\game\objects\items\weapons\tools.dm" #include "code\game\objects\items\weapons\tools.dm"
#include "code\game\objects\items\weapons\trashbag.dm"
#include "code\game\objects\items\weapons\twohanded.dm" #include "code\game\objects\items\weapons\twohanded.dm"
#include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\wires.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"
@@ -511,21 +516,22 @@
#include "code\game\objects\items\weapons\implants\implantnanoaug.dm" #include "code\game\objects\items\weapons\implants\implantnanoaug.dm"
#include "code\game\objects\items\weapons\implants\implantpad.dm" #include "code\game\objects\items\weapons\implants\implantpad.dm"
#include "code\game\objects\items\weapons\implants\implantuplink.dm" #include "code\game\objects\items\weapons\implants\implantuplink.dm"
#include "code\game\objects\items\weapons\secstorage\sbriefcase.dm" #include "code\game\objects\items\weapons\melee\energy.dm"
#include "code\game\objects\items\weapons\secstorage\secstorage.dm" #include "code\game\objects\items\weapons\melee\misc.dm"
#include "code\game\objects\items\weapons\secstorage\ssafe.dm"
#include "code\game\objects\items\weapons\storage\backpack.dm" #include "code\game\objects\items\weapons\storage\backpack.dm"
#include "code\game\objects\items\weapons\storage\bags.dm"
#include "code\game\objects\items\weapons\storage\belt.dm" #include "code\game\objects\items\weapons\storage\belt.dm"
#include "code\game\objects\items\weapons\storage\bible.dm" #include "code\game\objects\items\weapons\storage\bible.dm"
#include "code\game\objects\items\weapons\storage\boxes.dm"
#include "code\game\objects\items\weapons\storage\briefcase.dm" #include "code\game\objects\items\weapons\storage\briefcase.dm"
#include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\fancy.dm"
#include "code\game\objects\items\weapons\storage\firstaid.dm" #include "code\game\objects\items\weapons\storage\firstaid.dm"
#include "code\game\objects\items\weapons\storage\kit.dm"
#include "code\game\objects\items\weapons\storage\lockbox.dm" #include "code\game\objects\items\weapons\storage\lockbox.dm"
#include "code\game\objects\items\weapons\storage\misc.dm" #include "code\game\objects\items\weapons\storage\secure.dm"
#include "code\game\objects\items\weapons\storage\storage.dm" #include "code\game\objects\items\weapons\storage\storage.dm"
#include "code\game\objects\items\weapons\storage\toolbox.dm" #include "code\game\objects\items\weapons\storage\toolbox.dm"
#include "code\game\objects\items\weapons\storage\uplink_kits.dm" #include "code\game\objects\items\weapons\storage\uplink_kits.dm"
#include "code\game\objects\items\weapons\storage\wallets.dm"
#include "code\game\objects\items\weapons\tanks\jetpack.dm" #include "code\game\objects\items\weapons\tanks\jetpack.dm"
#include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tank_types.dm"
#include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm"
@@ -536,8 +542,10 @@
#include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\electricchair.dm"
#include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\false_walls.dm" #include "code\game\objects\structures\false_walls.dm"
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\grille.dm" #include "code\game\objects\structures\grille.dm"
#include "code\game\objects\structures\janicart.dm"
#include "code\game\objects\structures\kitchen_spike.dm" #include "code\game\objects\structures\kitchen_spike.dm"
#include "code\game\objects\structures\ladders.dm" #include "code\game\objects\structures\ladders.dm"
#include "code\game\objects\structures\lamarr_cage.dm" #include "code\game\objects\structures\lamarr_cage.dm"
@@ -596,10 +604,6 @@
#include "code\game\turfs\unsimulated\beach.dm" #include "code\game\turfs\unsimulated\beach.dm"
#include "code\game\turfs\unsimulated\floor.dm" #include "code\game\turfs\unsimulated\floor.dm"
#include "code\game\turfs\unsimulated\walls.dm" #include "code\game\turfs\unsimulated\walls.dm"
#include "code\game\vehicles\vehicle.dm"
#include "code\game\vehicles\airtight\airtight.dm"
#include "code\game\vehicles\airtight\land.dm"
#include "code\game\vehicles\airtight\space.dm"
#include "code\game\verbs\atom_verbs.dm" #include "code\game\verbs\atom_verbs.dm"
#include "code\game\verbs\ooc.dm" #include "code\game\verbs\ooc.dm"
#include "code\game\verbs\suicide.dm" #include "code\game\verbs\suicide.dm"
@@ -723,16 +727,25 @@
#include "code\modules\clothing\under\jobs\engineering.dm" #include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm" #include "code\modules\clothing\under\jobs\medsci.dm"
#include "code\modules\clothing\under\jobs\security.dm" #include "code\modules\clothing\under\jobs\security.dm"
#include "code\modules\critters\critter.dm"
#include "code\modules\critters\critter_AI.dm"
#include "code\modules\critters\critter_defenses.dm"
#include "code\modules\critters\critters.dm"
#include "code\modules\customitems\item_defines.dm" #include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm" #include "code\modules\customitems\item_spawning.dm"
#include "code\modules\DetectiveWork\detective_work.dm" #include "code\modules\DetectiveWork\detective_work.dm"
#include "code\modules\DetectiveWork\evidence.dm" #include "code\modules\DetectiveWork\evidence.dm"
#include "code\modules\DetectiveWork\footprints_and_rag.dm" #include "code\modules\DetectiveWork\footprints_and_rag.dm"
#include "code\modules\DetectiveWork\scanner.dm" #include "code\modules\DetectiveWork\scanner.dm"
#include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\blob.dm"
#include "code\modules\events\carp_migration.dm"
#include "code\modules\events\communications_blackout.dm"
#include "code\modules\events\disease_outbreak.dm"
#include "code\modules\events\electrical_storm.dm"
#include "code\modules\events\event.dm"
#include "code\modules\events\event_manager.dm"
#include "code\modules\events\meteor_wave.dm"
#include "code\modules\events\prison_break.dm"
#include "code\modules\events\radiation_storm.dm"
#include "code\modules\events\spacevine.dm"
#include "code\modules\events\spontaneous_appendicitis.dm"
#include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm" #include "code\modules\flufftext\TextFilters.dm"
@@ -812,6 +825,7 @@
#include "code\modules\mob\living\carbon\alien\larva\life.dm" #include "code\modules\mob\living\carbon\alien\larva\life.dm"
#include "code\modules\mob\living\carbon\alien\larva\powers.dm" #include "code\modules\mob\living\carbon\alien\larva\powers.dm"
#include "code\modules\mob\living\carbon\alien\larva\update_icons.dm" #include "code\modules\mob\living\carbon\alien\larva\update_icons.dm"
#include "code\modules\mob\living\carbon\alien\special\alien_embryo.dm"
#include "code\modules\mob\living\carbon\alien\special\facehugger.dm" #include "code\modules\mob\living\carbon\alien\special\facehugger.dm"
#include "code\modules\mob\living\carbon\brain\brain.dm" #include "code\modules\mob\living\carbon\brain\brain.dm"
#include "code\modules\mob\living\carbon\brain\brain_item.dm" #include "code\modules\mob\living\carbon\brain\brain_item.dm"
@@ -849,6 +863,7 @@
#include "code\modules\mob\living\carbon\metroid\metroid.dm" #include "code\modules\mob\living\carbon\metroid\metroid.dm"
#include "code\modules\mob\living\carbon\metroid\powers.dm" #include "code\modules\mob\living\carbon\metroid\powers.dm"
#include "code\modules\mob\living\carbon\metroid\say.dm" #include "code\modules\mob\living\carbon\metroid\say.dm"
#include "code\modules\mob\living\carbon\metroid\subtypes.dm"
#include "code\modules\mob\living\carbon\metroid\update_icons.dm" #include "code\modules\mob\living\carbon\metroid\update_icons.dm"
#include "code\modules\mob\living\carbon\monkey\death.dm" #include "code\modules\mob\living\carbon\monkey\death.dm"
#include "code\modules\mob\living\carbon\monkey\emote.dm" #include "code\modules\mob\living\carbon\monkey\emote.dm"
@@ -916,17 +931,23 @@
#include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm" #include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
#include "code\modules\mob\living\simple_animal\friendly\crab.dm" #include "code\modules\mob\living\simple_animal\friendly\crab.dm"
#include "code\modules\mob\living\simple_animal\friendly\lizard.dm"
#include "code\modules\mob\living\simple_animal\friendly\mouse.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm"
#include "code\modules\mob\living\simple_animal\friendly\mushroom.dm" #include "code\modules\mob\living\simple_animal\friendly\mushroom.dm"
#include "code\modules\mob\living\simple_animal\friendly\slime.dm"
#include "code\modules\mob\living\simple_animal\friendly\tomato.dm" #include "code\modules\mob\living\simple_animal\friendly\tomato.dm"
#include "code\modules\mob\living\simple_animal\hostile\alien.dm"
#include "code\modules\mob\living\simple_animal\hostile\bear.dm" #include "code\modules\mob\living\simple_animal\hostile\bear.dm"
#include "code\modules\mob\living\simple_animal\hostile\carp.dm" #include "code\modules\mob\living\simple_animal\hostile\carp.dm"
#include "code\modules\mob\living\simple_animal\hostile\creature.dm"
#include "code\modules\mob\living\simple_animal\hostile\faithless.dm" #include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
#include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
#include "code\modules\mob\living\simple_animal\hostile\russian.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm"
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" #include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
#include "code\modules\mob\new_player\hud.dm" #include "code\modules\mob\new_player\hud.dm"
#include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\login.dm"
#include "code\modules\mob\new_player\logout.dm" #include "code\modules\mob\new_player\logout.dm"
@@ -997,6 +1018,7 @@
#include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\pistol.dm"
#include "code\modules\projectiles\guns\projectile\revolver.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm"
#include "code\modules\projectiles\guns\projectile\shotgun.dm" #include "code\modules\projectiles\guns\projectile\shotgun.dm"
#include "code\modules\projectiles\projectile\animate.dm"
#include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\beams.dm"
#include "code\modules\projectiles\projectile\bullets.dm" #include "code\modules\projectiles\projectile\bullets.dm"
#include "code\modules\projectiles\projectile\change.dm" #include "code\modules\projectiles\projectile\change.dm"
@@ -1138,5 +1160,7 @@
#include "interface\skin.dmf" #include "interface\skin.dmf"
#include "maps\tgstation.2.0.9.1.dmm" #include "maps\tgstation.2.0.9.1.dmm"
#include "maps\RandomZLevels\Academy.dm" #include "maps\RandomZLevels\Academy.dm"
#include "maps\RandomZLevels\challenge.dm"
#include "maps\RandomZLevels\stationCollision.dm" #include "maps\RandomZLevels\stationCollision.dm"
#include "maps\RandomZLevels\wildwest.dm"
// END_INCLUDE // END_INCLUDE

View File

@@ -12,7 +12,6 @@ Pipelines + Other Objects -> Pipe network
obj/machinery/atmospherics obj/machinery/atmospherics
anchored = 1 anchored = 1
use_power = 0
idle_power_usage = 0 idle_power_usage = 0
active_power_usage = 0 active_power_usage = 0
power_channel = ENVIRON power_channel = ENVIRON

View File

@@ -1,6 +1,7 @@
obj/machinery/atmospherics/binary obj/machinery/atmospherics/binary
dir = SOUTH dir = SOUTH
initialize_directions = SOUTH|NORTH initialize_directions = SOUTH|NORTH
use_power = 1
var/datum/gas_mixture/air1 var/datum/gas_mixture/air1
var/datum/gas_mixture/air2 var/datum/gas_mixture/air2

View File

@@ -15,7 +15,9 @@ obj/machinery/atmospherics/binary/passive_gate
var/datum/radio_frequency/radio_connection var/datum/radio_frequency/radio_connection
update_icon() update_icon()
if(node1&&node2) if(stat & NOPOWER)
icon_state = "intact_off"
else if(node1 && node2)
icon_state = "intact_[on?("on"):("off")]" icon_state = "intact_[on?("on"):("off")]"
else else
if(node1) if(node1)
@@ -24,8 +26,6 @@ obj/machinery/atmospherics/binary/passive_gate
icon_state = "exposed_2_off" icon_state = "exposed_2_off"
else else
icon_state = "exposed_3_off" icon_state = "exposed_3_off"
on = 0
return return
process() process()

View File

@@ -37,7 +37,9 @@ obj/machinery/atmospherics/binary/pump
icon_state = "intact_on" icon_state = "intact_on"
update_icon() update_icon()
if(node1&&node2) if(stat & NOPOWER)
icon_state = "intact_off"
else if(node1 && node2)
icon_state = "intact_[on?("on"):("off")]" icon_state = "intact_[on?("on"):("off")]"
else else
if(node1) if(node1)

View File

@@ -31,7 +31,9 @@ obj/machinery/atmospherics/binary/volume_pump
icon_state = "intact_on" icon_state = "intact_on"
update_icon() update_icon()
if(node1&&node2) if(stat & NOPOWER)
icon_state = "intact_off"
else if(node1 && node2)
icon_state = "intact_[on?("on"):("off")]" icon_state = "intact_[on?("on"):("off")]"
else else
if(node1) if(node1)

View File

@@ -15,7 +15,7 @@
var/datum/pipe_network/network var/datum/pipe_network/network
var/on = 0 var/on = 0
use_power = 0
level = 0 level = 0

View File

@@ -39,16 +39,21 @@ Filter types:
..() ..()
update_icon() update_icon()
if(node2 && node3 && node1) if(stat & NOPOWER)
icon_state = "intact_off"
else if(node2 && node3 && node1)
icon_state = "intact_[on?("on"):("off")]" icon_state = "intact_[on?("on"):("off")]"
else else
icon_state = "hintact_off" icon_state = "intact_off"
on = 0 on = 0
return return
New() power_change()
var/old_stat = stat
..() ..()
if(old_stat != stat)
update_icon()
process() process()
..() ..()

View File

@@ -16,7 +16,9 @@ obj/machinery/atmospherics/trinary/mixer
//node 3 is the outlet, nodes 1 & 2 are intakes //node 3 is the outlet, nodes 1 & 2 are intakes
update_icon() update_icon()
if(node2 && node3 && node1) if(stat & NOPOWER)
icon_state = "intact_off"
else if(node2 && node3 && node1)
icon_state = "intact_[on?("on"):("off")]" icon_state = "intact_[on?("on"):("off")]"
else else
icon_state = "intact_off" icon_state = "intact_off"
@@ -24,6 +26,12 @@ obj/machinery/atmospherics/trinary/mixer
return return
power_change()
var/old_stat = stat
..()
if(old_stat != stat)
update_icon()
New() New()
..() ..()
air3.volume = 300 air3.volume = 300

View File

@@ -1,6 +1,7 @@
obj/machinery/atmospherics/trinary obj/machinery/atmospherics/trinary
dir = SOUTH dir = SOUTH
initialize_directions = SOUTH|NORTH|WEST initialize_directions = SOUTH|NORTH|WEST
use_power = 1
var/datum/gas_mixture/air1 var/datum/gas_mixture/air1
var/datum/gas_mixture/air2 var/datum/gas_mixture/air2

View File

@@ -2,6 +2,7 @@
icon = 'icons/obj/atmospherics/cold_sink.dmi' icon = 'icons/obj/atmospherics/cold_sink.dmi'
icon_state = "intact_off" icon_state = "intact_off"
density = 1 density = 1
use_power = 1
name = "Cold Sink" name = "Cold Sink"
desc = "Cools gas when connected to pipe network" desc = "Cools gas when connected to pipe network"

View File

@@ -4,6 +4,7 @@
icon = 'icons/obj/atmospherics/cold_sink.dmi' icon = 'icons/obj/atmospherics/cold_sink.dmi'
icon_state = "intact_off" icon_state = "intact_off"
density = 1 density = 1
use_power = 1
name = "Heat Reservoir" name = "Heat Reservoir"
desc = "Heats gas when connected to pipe network" desc = "Heats gas when connected to pipe network"

View File

@@ -1,6 +1,7 @@
/obj/machinery/atmospherics/unary/outlet_injector /obj/machinery/atmospherics/unary/outlet_injector
icon = 'icons/obj/atmospherics/outlet_injector.dmi' icon = 'icons/obj/atmospherics/outlet_injector.dmi'
icon_state = "off" icon_state = "off"
use_power = 1
name = "Air Injector" name = "Air Injector"
desc = "Has a valve and pump attached to it" desc = "Has a valve and pump attached to it"
@@ -18,7 +19,7 @@
update_icon() update_icon()
if(node) if(node)
if(on) if(on && !(stat & NOPOWER))
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on"
else else
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
@@ -28,11 +29,18 @@
return return
power_change()
var/old_stat = stat
..()
if(old_stat != stat)
update_icon()
process() process()
..() ..()
injecting = 0 injecting = 0
if(!on) if(!on || stat & NOPOWER)
return 0 return 0
if(air_contents.temperature > 0) if(air_contents.temperature > 0)

View File

@@ -4,15 +4,15 @@
name = "Air Vent" name = "Air Vent"
desc = "Has a valve and pump attached to it" desc = "Has a valve and pump attached to it"
use_power = 1
var/area/initial_loc
level = 1 level = 1
var/area_uid var/area_uid
var/id_tag var/id_tag = null
power_channel = ENVIRON
var/on = 0 var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing var/pump_direction = 1 //0 = siphoning, 1 = releasing
var/pump_speed = 1 //Used to adjust speed for siphons
var/external_pressure_bound = ONE_ATMOSPHERE var/external_pressure_bound = ONE_ATMOSPHERE
var/internal_pressure_bound = 0 var/internal_pressure_bound = 0
@@ -43,27 +43,25 @@
icon_state = "in" icon_state = "in"
New() New()
var/area/A = get_area(loc) initial_loc = get_area(loc)
if (A.master) if (initial_loc.master)
A = A.master initial_loc = initial_loc.master
area_uid = A.uid area_uid = initial_loc.uid
if (!id_tag) if (!id_tag)
assign_uid() assign_uid()
id_tag = num2text(uid) id_tag = num2text(uid)
if(ticker && ticker.current_state == 3)//if the game is running if(ticker && ticker.current_state == 3)//if the game is running
initialize() src.initialize()
broadcast_status() src.broadcast_status()
..() ..()
high_volume high_volume
name = "Large Air Vent" name = "Large Air Vent"
power_channel = EQUIP power_channel = EQUIP
New() New()
..() ..()
air_contents.volume = 1000 air_contents.volume = 1000
update_icon() update_icon()
if(welded) if(welded)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld" icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld"
@@ -80,12 +78,11 @@
process() process()
..() ..()
// broadcast_status()
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
if (!node) if (!node)
on = 0 on = 0
//broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0
if(!on) if(!on)
return 0 return 0
@@ -105,7 +102,7 @@
if(pressure_delta > 0) if(pressure_delta > 0)
if(air_contents.temperature > 0) if(air_contents.temperature > 0)
var/transfer_moles = pressure_delta*environment.volume*environment.group_multiplier*pump_speed/(air_contents.temperature * R_IDEAL_GAS_EQUATION) var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
@@ -123,7 +120,7 @@
if(pressure_delta > 0) if(pressure_delta > 0)
if(environment.temperature > 0) if(environment.temperature > 0)
var/transfer_moles = pressure_delta*air_contents.volume*air_contents.group_multiplier*pump_speed/(environment.temperature * R_IDEAL_GAS_EQUATION) var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
if (isnull(removed)) //in space if (isnull(removed)) //in space
@@ -136,42 +133,45 @@
return 1 return 1
//Radio remote control //Radio remote control
proc/set_frequency(new_frequency) proc
radio_controller.remove_object(src, frequency) set_frequency(new_frequency)
frequency = new_frequency radio_controller.remove_object(src, frequency)
if(frequency) frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) if(frequency)
radio_connection = radio_controller.add_object(src, frequency,radio_filter_in)
proc/broadcast_status() broadcast_status()
if(!radio_connection) if(!radio_connection)
return 0 return 0
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data = list( signal.data = list(
"area" = src.area_uid, "area" = src.area_uid,
"tag" = src.id_tag, "tag" = src.id_tag,
"device" = "AVP", "device" = "AVP",
"power" = on, "power" = on,
"direction" = pump_direction?("release"):("siphon"), "direction" = pump_direction?("release"):("siphon"),
"checks" = pressure_checks, "checks" = pressure_checks,
"internal" = internal_pressure_bound, "internal" = internal_pressure_bound,
"external" = external_pressure_bound, "external" = external_pressure_bound,
"timestamp" = world.time, "timestamp" = world.time,
"sigtype" = "status", "sigtype" = "status"
"setting" = pump_speed )
)
radio_connection.post_signal(src, signal, radio_filter_out) if(!initial_loc.air_vent_names[id_tag])
var/new_name = "[initial_loc.name] Vent Pump #[initial_loc.air_vent_names.len+1]"
initial_loc.air_vent_names[id_tag] = new_name
src.name = new_name
initial_loc.air_vent_info[id_tag] = signal.data
return 1 radio_connection.post_signal(src, signal, radio_filter_out)
return 1
initialize() initialize()
@@ -183,7 +183,6 @@
if(frequency) if(frequency)
set_frequency(frequency) set_frequency(frequency)
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
@@ -191,49 +190,67 @@
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
return 0 return 0
if("purge" in signal.data) if(signal.data["purge"] != null)
pressure_checks &= ~1 pressure_checks &= ~1
pump_direction = 0 pump_direction = 0
if("stabalize" in signal.data) if(signal.data["stabalize"] != null)
pressure_checks |= 1 pressure_checks |= 1
pump_direction = 1 pump_direction = 1
if("power" in signal.data) if(signal.data["power"] != null)
on = text2num(signal.data["power"]) on = text2num(signal.data["power"])
if("power_toggle" in signal.data) if(signal.data["power_toggle"] != null)
on = !on on = !on
if("checks" in signal.data) if(signal.data["checks"] != null)
pressure_checks = text2num(signal.data["checks"]) pressure_checks = text2num(signal.data["checks"])
if("checks_toggle" in signal.data) if(signal.data["checks_toggle"] != null)
pressure_checks = (pressure_checks?0:3) pressure_checks = (pressure_checks?0:3)
if("direction" in signal) if(signal.data["direction"] != null)
pump_direction = text2num(signal.data["direction"]) pump_direction = text2num(signal.data["direction"])
if("set_internal_pressure" in signal.data) if(signal.data["set_internal_pressure"] != null)
internal_pressure_bound = between(0, text2num(signal.data["set_internal_pressure"]), ONE_ATMOSPHERE*50) internal_pressure_bound = between(
0,
text2num(signal.data["set_internal_pressure"]),
ONE_ATMOSPHERE*50
)
if("set_external_pressure" in signal.data) if(signal.data["set_external_pressure"] != null)
external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50) external_pressure_bound = between(
0,
text2num(signal.data["set_external_pressure"]),
ONE_ATMOSPHERE*50
)
if("adjust_internal_pressure" in signal.data) if(signal.data["adjust_internal_pressure"] != null)
internal_pressure_bound = between(0, internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), ONE_ATMOSPHERE*50) internal_pressure_bound = between(
0,
internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),
ONE_ATMOSPHERE*50
)
if("adjust_external_pressure" in signal.data) if(signal.data["adjust_external_pressure"] != null)
external_pressure_bound = between(0, external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), ONE_ATMOSPHERE*50) external_pressure_bound = between(
0,
external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),
ONE_ATMOSPHERE*50
)
if("init" in signal.data) if(signal.data["init"] != null)
name = signal.data["init"] name = signal.data["init"]
return return
if("setting" in signal.data) if(signal.data["status"] != null)
pump_speed = text2num(signal.data["setting"]) spawn(2)
broadcast_status()
return //do not update_icon
//log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal["command"]]\"\n[signal.debug_print()]") //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
spawn(2) spawn(2)
broadcast_status() broadcast_status()
update_icon() update_icon()
@@ -274,7 +291,6 @@
else else
user << "\blue You need more welding fuel to complete this task." user << "\blue You need more welding fuel to complete this task."
return 1 return 1
examine() examine()
set src in oview(1) set src in oview(1)
..() ..()
@@ -312,4 +328,11 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) del(src)
/obj/machinery/atmospherics/unary/vent_pump/Del()
if(initial_loc)
initial_loc.air_vent_info -= id_tag
initial_loc.air_vent_names -= id_tag
..()
return

View File

@@ -4,39 +4,38 @@
name = "Air Scrubber" name = "Air Scrubber"
desc = "Has a valve and pump attached to it" desc = "Has a valve and pump attached to it"
use_power = 1
level = 1 level = 1
var/area/initial_loc
var/id_tag = null var/id_tag = null
var/frequency = 1439
var/datum/radio_frequency/radio_connection
var/on = 0 var/on = 0
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
var/scrub_CO2 = 1 var/scrub_CO2 = 1
var/scrub_Toxins = 0 var/scrub_Toxins = 0
var/scrub_N2O = 0 var/scrub_N2O = 0
var/scrub_rate = 1
var/volume_rate = 120 var/volume_rate = 120
var/panic = 0 //is this scrubber panicked? var/panic = 0 //is this scrubber panicked?
var/area_uid var/area_uid
var/frequency = 1439
var/datum/radio_frequency/radio_connection
var/radio_filter_out var/radio_filter_out
var/radio_filter_in var/radio_filter_in
New() New()
var/area/A = get_area(loc) initial_loc = get_area(loc)
if (A.master) if (initial_loc.master)
A = A.master initial_loc = initial_loc.master
area_uid = A.uid area_uid = initial_loc.uid
if (!id_tag) if (!id_tag)
assign_uid() assign_uid()
id_tag = num2text(uid) id_tag = num2text(uid)
if(ticker && ticker.current_state == 3)//if the game is running if(ticker && ticker.current_state == 3)//if the game is running
initialize() src.initialize()
broadcast_status() src.broadcast_status()
..() ..()
update_icon() update_icon()
@@ -75,6 +74,11 @@
"filter_n2o" = scrub_N2O, "filter_n2o" = scrub_N2O,
"sigtype" = "status" "sigtype" = "status"
) )
if(!initial_loc.air_scrub_names[id_tag])
var/new_name = "[initial_loc.name] Air Scrubber #[initial_loc.air_scrub_names.len+1]"
initial_loc.air_scrub_names[id_tag] = new_name
src.name = new_name
initial_loc.air_scrub_info[id_tag] = signal.data
radio_connection.post_signal(src, signal, radio_filter_out) radio_connection.post_signal(src, signal, radio_filter_out)
return 1 return 1
@@ -88,20 +92,20 @@
process() process()
..() ..()
// broadcast_status()
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
if (!node) if (!node)
on = 0 on = 0
//broadcast_status()
if(!on) if(!on)
return 0 return 0
var/datum/gas_mixture/environment = loc.return_air() var/datum/gas_mixture/environment = loc.return_air()
if(scrubbing) if(scrubbing)
if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0))
var/transfer_moles = min(1, volume_rate*scrub_rate/environment.volume)*environment.total_moles var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
//Take a gas sample //Take a gas sample
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
@@ -120,14 +124,15 @@
if(removed.trace_gases.len>0) if(removed.trace_gases.len>0)
for(var/datum/gas/trace_gas in removed.trace_gases) for(var/datum/gas/trace_gas in removed.trace_gases)
if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O) if(istype(trace_gas, /datum/gas/oxygen_agent_b))
removed.trace_gases -= trace_gas
filtered_out.trace_gases += trace_gas
else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O)
removed.trace_gases -= trace_gas removed.trace_gases -= trace_gas
filtered_out.trace_gases += trace_gas filtered_out.trace_gases += trace_gas
//Remix the resulting gases //Remix the resulting gases
filtered_out.update_values()
removed.update_values()
air_contents.merge(filtered_out) air_contents.merge(filtered_out)
loc.assume_air(removed) loc.assume_air(removed)
@@ -139,7 +144,7 @@
if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
return return
var/transfer_moles = environment.total_moles*(volume_rate*scrub_rate/environment.volume) var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
@@ -168,13 +173,13 @@
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
return 0 return 0
if("power" in signal.data) if(signal.data["power"] != null)
on = text2num(signal.data["power"]) on = text2num(signal.data["power"])
if("power_toggle" in signal.data) if(signal.data["power_toggle"] != null)
on = !on on = !on
if("panic_siphon" in signal.data) //must be before if("scrubbing" thing if(signal.data["panic_siphon"]) //must be before if("scrubbing" thing
panic = text2num(signal.data["panic_siphon"]) panic = text2num(signal.data["panic_siphon"] != null)
if(panic) if(panic)
on = 1 on = 1
scrubbing = 0 scrubbing = 0
@@ -182,7 +187,7 @@
else else
scrubbing = 1 scrubbing = 1
volume_rate = initial(volume_rate) volume_rate = initial(volume_rate)
if("toggle_panic_siphon" in signal.data) if(signal.data["toggle_panic_siphon"] != null)
panic = !panic panic = !panic
if(panic) if(panic)
on = 1 on = 1
@@ -192,38 +197,35 @@
scrubbing = 1 scrubbing = 1
volume_rate = initial(volume_rate) volume_rate = initial(volume_rate)
if("scrubbing" in signal.data) if(signal.data["scrubbing"] != null)
scrubbing = text2num(signal.data["scrubbing"]) scrubbing = text2num(signal.data["scrubbing"])
if("toggle_scrubbing" in signal.data) if(signal.data["toggle_scrubbing"])
scrubbing = !scrubbing scrubbing = !scrubbing
if("co2_scrub" in signal.data) if(signal.data["co2_scrub"] != null)
scrub_CO2 = text2num(signal.data["co2_scrub"]) scrub_CO2 = text2num(signal.data["co2_scrub"])
if("toggle_co2_scrub" in signal.data) if(signal.data["toggle_co2_scrub"])
scrub_CO2 = !scrub_CO2 scrub_CO2 = !scrub_CO2
if("tox_scrub" in signal.data) if(signal.data["tox_scrub"] != null)
scrub_Toxins = text2num(signal.data["tox_scrub"]) scrub_Toxins = text2num(signal.data["tox_scrub"])
if("toggle_tox_scrub" in signal.data) if(signal.data["toggle_tox_scrub"])
scrub_Toxins = !scrub_Toxins scrub_Toxins = !scrub_Toxins
if("n2o_scrub" in signal.data) if(signal.data["n2o_scrub"] != null)
scrub_N2O = text2num(signal.data["n2o_scrub"]) scrub_N2O = text2num(signal.data["n2o_scrub"])
if("toggle_n2o_scrub" in signal.data) if(signal.data["toggle_n2o_scrub"])
scrub_N2O = !scrub_N2O scrub_N2O = !scrub_N2O
if("init" in signal.data) if(signal.data["init"] != null)
name = signal.data["init"] name = signal.data["init"]
return return
if("status" in signal.data) if(signal.data["status"] != null)
spawn(2) spawn(2)
broadcast_status() broadcast_status()
return //do not update_icon return //do not update_icon
if("setting" in signal.data)
scrub_rate = text2num(signal.data["setting"])
// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") // log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
spawn(2) spawn(2)
broadcast_status() broadcast_status()
@@ -231,7 +233,7 @@
return return
power_change() power_change()
if(powered(ENVIRON)) if(powered(power_channel))
stat &= ~NOPOWER stat &= ~NOPOWER
else else
stat |= NOPOWER stat |= NOPOWER
@@ -261,4 +263,11 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(src) del(src)
/obj/machinery/atmospherics/unary/vent_scrubber/Del()
if(initial_loc)
initial_loc.air_scrub_info -= id_tag
initial_loc.air_scrub_names -= id_tag
..()
return

View File

@@ -4,9 +4,10 @@ obj/machinery/atmospherics/pipe
var/datum/pipeline/parent var/datum/pipeline/parent
var/volume = 0 var/volume = 0
var/force = 20 force = 20
layer = 2.4 //under wires with their 2.44 layer = 2.4 //under wires with their 2.44
use_power = 0
var/alert_pressure = 80*ONE_ATMOSPHERE var/alert_pressure = 80*ONE_ATMOSPHERE
//minimum pressure before check_pressure(...) should be called //minimum pressure before check_pressure(...) should be called

View File

@@ -368,7 +368,7 @@ mob
network.marker = rand(1,4) network.marker = rand(1,4)
for(var/obj/machinery/atmospherics/pipe/P in world) for(var/obj/machinery/atmospherics/pipe/P in world)
P.overlays = null P.overlays.Cut()
var/datum/pipe_network/master = P.return_network() var/datum/pipe_network/master = P.return_network()
if(master) if(master)
@@ -378,7 +378,7 @@ mob
P.overlays += icon('icons/Testing/atmos_testing.dmi',"marker0") P.overlays += icon('icons/Testing/atmos_testing.dmi',"marker0")
for(var/obj/machinery/atmospherics/valve/V in world) for(var/obj/machinery/atmospherics/valve/V in world)
V.overlays = null V.overlays.Cut()
if(V.network_node1) if(V.network_node1)
V.overlays += icon('icons/Testing/atmos_testing.dmi',"marker[V.network_node1.marker]") V.overlays += icon('icons/Testing/atmos_testing.dmi',"marker[V.network_node1.marker]")
@@ -396,7 +396,7 @@ turf/simulated
verb verb
mark_direction() mark_direction()
set src in world set src in world
overlays = null overlays.Cut()
for(var/direction in list(NORTH,SOUTH,EAST,WEST)) for(var/direction in list(NORTH,SOUTH,EAST,WEST))
if(group_border&direction) if(group_border&direction)
overlays += icon('icons/Testing/turf_analysis.dmi',"red_arrow",direction) overlays += icon('icons/Testing/turf_analysis.dmi',"red_arrow",direction)

View File

@@ -62,101 +62,114 @@
var/bypassing = 0 var/bypassing = 0
proc/perform_exposure() /obj/effect/hotspot/proc/perform_exposure()
var/turf/simulated/floor/location = loc var/turf/simulated/floor/location = loc
if(!istype(location)) return 0 if(!istype(location)) return 0
if(volume > CELL_VOLUME*0.95) bypassing = 1 if(volume > CELL_VOLUME*0.95) bypassing = 1
else bypassing = 0 else bypassing = 0
if(bypassing) if(bypassing)
if(!just_spawned) if(!just_spawned)
volume = location.air.fuel_burnt*FIRE_GROWTH_RATE volume = location.air.fuel_burnt*FIRE_GROWTH_RATE
temperature = location.air.temperature temperature = location.air.temperature
else else
var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume) var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume)
affected.temperature = temperature affected.temperature = temperature
affected.react() affected.react()
temperature = affected.temperature temperature = affected.temperature
volume = affected.fuel_burnt*FIRE_GROWTH_RATE volume = affected.fuel_burnt*FIRE_GROWTH_RATE
location.assume_air(affected) location.assume_air(affected)
for(var/atom/item in loc) for(var/atom/item in loc)
item.temperature_expose(null, temperature, volume) if(!bypassing)
item.temperature_expose(null, temperature, volume)
if(item) // It's possible that the item is deleted in temperature_expose
item.fire_act(null, temperature, volume)
return 0
/obj/effect/hotspot/process(turf/simulated/list/possible_spread)
if(just_spawned)
just_spawned = 0
return 0 return 0
var/turf/simulated/floor/location = loc
if(!istype(location))
Kill()
process(turf/simulated/list/possible_spread) if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST) || (volume <= 1))
if(just_spawned) Kill()
just_spawned = 0
return 0
var/turf/simulated/floor/location = loc if(location.air.toxins < 0.5 || location.air.oxygen < 0.5)
if(!istype(location)) Kill()
del(src)
if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST) || (volume <= 1)) perform_exposure()
del(src)
if(location.air.toxins < 0.5 || location.air.oxygen < 0.5) if(location.wet) location.wet = 0
del(src)
perform_exposure() if(bypassing)
icon_state = "3"
location.burn_tile()
if(location.wet) location.wet = 0 //Possible spread due to radiated heat
if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD)
var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE
if(bypassing) for(var/turf/simulated/possible_target in possible_spread)
icon_state = "3" if(!possible_target.active_hotspot)
location.burn_tile() possible_target.hotspot_expose(radiated_temperature, CELL_VOLUME/4)
//Possible spread due to radiated heat
if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD)
var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE
for(var/turf/simulated/possible_target in possible_spread)
if(!possible_target.active_hotspot)
possible_target.hotspot_expose(radiated_temperature, CELL_VOLUME/4)
else
if(volume > CELL_VOLUME*0.4)
icon_state = "2"
else else
if(volume > CELL_VOLUME*0.4) icon_state = "1"
icon_state = "2"
if(temperature > location.max_fire_temperature_sustained)
location.max_fire_temperature_sustained = temperature
if(temperature > location.heat_capacity)
location.to_be_destroyed = 1
/*if(prob(25))
location.ReplaceWithSpace()
return 0*/
return 1
// Garbage collect itself by nulling reference to it
/obj/effect/hotspot/proc/Kill()
DestroyTurf()
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
if(T.active_hotspot == src)
T.active_hotspot = null
loc = null
/obj/effect/hotspot/proc/DestroyTurf()
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
if(T.to_be_destroyed)
var/chance_of_deletion
if (T.heat_capacity) //beware of division by zero
chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
else else
icon_state = "1" chance_of_deletion = 100
if(prob(chance_of_deletion))
T.ChangeTurf(/turf/space)
else
T.to_be_destroyed = 0
T.max_fire_temperature_sustained = 0
if(temperature > location.max_fire_temperature_sustained) /obj/effect/hotspot/New()
location.max_fire_temperature_sustained = temperature ..()
dir = pick(cardinal)
return
if(temperature > location.heat_capacity) /obj/effect/hotspot/Del()
location.to_be_destroyed = 1 if (istype(loc, /turf/simulated))
/*if(prob(25)) DestroyTurf()
location.ReplaceWithSpace() ..()
return 0*/ return
return 1
New()
..()
dir = pick(cardinal)
return
Del()
if (istype(loc, /turf/simulated))
var/turf/simulated/T = loc
loc:active_hotspot = null
if(T.to_be_destroyed)
var/chance_of_deletion
if (T.heat_capacity) //beware of division by zero
chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
else
chance_of_deletion = 100
if(prob(chance_of_deletion))
T.ChangeTurf(/turf/space)
else
T.to_be_destroyed = 0
T.max_fire_temperature_sustained = 0
loc = null
..()
return

View File

@@ -124,7 +124,7 @@ turf
super_conduct() super_conduct()
update_visuals(datum/gas_mixture/model) update_visuals(datum/gas_mixture/model)
overlays = null overlays.Cut()
var/siding_icon_state = return_siding_icon_state() var/siding_icon_state = return_siding_icon_state()
if(siding_icon_state) if(siding_icon_state)

View File

@@ -0,0 +1,8 @@
/*
Hey you!
You only need to untick maps/tgstation.2.0.9.dmm for this if you download the modified map from:
http://tgstation13.googlecode.com/files/tgstation.2.1.0_deptsec.zip
Everything else can just be ticked on top of the original stuff.
*/

View File

@@ -0,0 +1,126 @@
var/list/sec_departments = list("engineering", "supply", "medical", "science")
proc/assign_sec_to_department(var/mob/living/carbon/human/H)
if(sec_departments.len)
var/department = pick(sec_departments)
sec_departments -= department
var/access = null
var/destination = null
switch(department)
if("supply")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security/cargo(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec/department/supply(H), slot_ears)
access = list(access_mailsorting, access_mining)
destination = /area/security/checkpoint/supply
if("engineering")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security/engine(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec/department/engi(H), slot_ears)
access = list(access_construction, access_engine)
destination = /area/security/checkpoint/engineering
if("medical")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security/med(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec/department/med(H), slot_ears)
access = list(access_medical)
destination = /area/security/checkpoint/medical
if("science")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security/science(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec/department/sci(H), slot_ears)
access = list(access_research)
destination = /area/security/checkpoint/science
else
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_ears)
if(destination)
var/teleport = 0
if(!ticker || ticker.current_state <= GAME_STATE_SETTING_UP)
teleport = 1
spawn(15)
if(H)
if(teleport)
var/turf/T
var/safety = 0
while(safety < 25)
T = pick(get_area_turfs(destination))
if(!H.Move(T))
safety += 1
continue
else
break
H << "<b>You have been assigned to [department]!</b>"
if(locate(/obj/item/weapon/card/id, H))
var/obj/item/weapon/card/id/I = locate(/obj/item/weapon/card/id, H)
if(I)
I.access |= access
/datum/job/officer
title = "Security Officer"
flag = OFFICER
department_flag = ENGSEC
faction = "Station"
total_positions = 5
spawn_positions = 5
supervisors = "the head of security, and the head of your assigned department (if applicable)"
selection_color = "#ffeeee"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
assign_sec_to_department(H)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_s_store)
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
return 1
/obj/item/device/radio/headset/headset_sec/department/New()
if(radio_controller)
initialize()
recalculateChannels()
/obj/item/device/radio/headset/headset_sec/department/engi
keyslot1 = new /obj/item/device/encryptionkey/headset_sec
keyslot2 = new /obj/item/device/encryptionkey/headset_eng
/obj/item/device/radio/headset/headset_sec/department/supply
keyslot1 = new /obj/item/device/encryptionkey/headset_sec
keyslot2 = new /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_sec/department/med
keyslot1 = new /obj/item/device/encryptionkey/headset_sec
keyslot2 = new /obj/item/device/encryptionkey/headset_med
/obj/item/device/radio/headset/headset_sec/department/sci
keyslot1 = new /obj/item/device/encryptionkey/headset_sec
keyslot2 = new /obj/item/device/encryptionkey/headset_sci
/obj/item/clothing/under/rank/security/cargo/New()
var/obj/item/clothing/tie/armband/cargo/A = new /obj/item/clothing/tie/armband/cargo
hastie = A
/obj/item/clothing/under/rank/security/engine/New()
var/obj/item/clothing/tie/armband/engine/A = new /obj/item/clothing/tie/armband/engine
hastie = A
/obj/item/clothing/under/rank/security/science/New()
var/obj/item/clothing/tie/armband/science/A = new /obj/item/clothing/tie/armband/science
hastie = A
/obj/item/clothing/under/rank/security/med/New()
var/obj/item/clothing/tie/armband/med/A = new /obj/item/clothing/tie/armband/med
hastie = A

View File

@@ -0,0 +1,10 @@
/*
Hey you!
You'll need to untick code/game/jobs/access.dm for this to all work correctly!
Everything else can just be ticked on top of the original stuff.
You'll also need to download a modified map from http://tgstation13.googlecode.com/files/tgstation.2.0.9_Softcurity.zip.
Make sure to untick the original map!
*/

View File

@@ -0,0 +1,522 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/var/const/access_security = 1 // Security equipment
/var/const/access_brig = 2 // Brig timers and permabrig
/var/const/access_armory = 3
/var/const/access_forensics_lockers= 4
/var/const/access_medical = 5
/var/const/access_morgue = 6
/var/const/access_tox = 7
/var/const/access_tox_storage = 8
/var/const/access_genetics = 9
/var/const/access_engine = 10
/var/const/access_engine_equip= 11
/var/const/access_maint_tunnels = 12
/var/const/access_external_airlocks = 13
/var/const/access_emergency_storage = 14
/var/const/access_change_ids = 15
/var/const/access_ai_upload = 16
/var/const/access_teleporter = 17
/var/const/access_eva = 18
/var/const/access_heads = 19
/var/const/access_captain = 20
/var/const/access_all_personal_lockers = 21
/var/const/access_chapel_office = 22
/var/const/access_tech_storage = 23
/var/const/access_atmospherics = 24
/var/const/access_bar = 25
/var/const/access_janitor = 26
/var/const/access_crematorium = 27
/var/const/access_kitchen = 28
/var/const/access_robotics = 29
/var/const/access_rd = 30
/var/const/access_cargo = 31
/var/const/access_construction = 32
/var/const/access_chemistry = 33
/var/const/access_cargo_bot = 34
/var/const/access_hydroponics = 35
/var/const/access_manufacturing = 36
/var/const/access_library = 37
/var/const/access_lawyer = 38
/var/const/access_virology = 39
/var/const/access_cmo = 40
/var/const/access_qm = 41
/var/const/access_court = 42
/var/const/access_clown = 43
/var/const/access_mime = 44
/var/const/access_surgery = 45
/var/const/access_theatre = 46
/var/const/access_research = 47
/var/const/access_mining = 48
/var/const/access_mining_office = 49 //not in use
/var/const/access_mailsorting = 50
/var/const/access_mint = 51
/var/const/access_mint_vault = 52
/var/const/access_heads_vault = 53
/var/const/access_mining_station = 54
/var/const/access_xenobiology = 55
/var/const/access_ce = 56
/var/const/access_hop = 57
/var/const/access_hos = 58
/var/const/access_RC_announce = 59 //Request console announcements
/var/const/access_keycard_auth = 60 //Used for events which require at least two people to confirm them
/var/const/access_tcomsat = 61 // has access to the entire telecomms satellite / machinery
/var/const/access_gateway = 62
/var/const/access_sec_doors = 63 // Security front doors
//BEGIN CENTCOM ACCESS
/*Should leave plenty of room if we need to add more access levels.
/var/const/Mostly for admin fun times.*/
/var/const/access_cent_general = 101//General facilities.
/var/const/access_cent_thunder = 102//Thunderdome.
/var/const/access_cent_specops = 103//Special Ops.
/var/const/access_cent_medical = 104//Medical/Research
/var/const/access_cent_living = 105//Living quarters.
/var/const/access_cent_storage = 106//Generic storage areas.
/var/const/access_cent_teleporter = 107//Teleporter.
/var/const/access_cent_creed = 108//Creed's office.
/var/const/access_cent_captain = 109//Captain's office/ID comp/AI.
//The Syndicate
/var/const/access_syndicate = 150//General Syndicate Access
//MONEY
/var/const/access_crate_cash = 200
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
/obj/var/list/req_one_access = null
/obj/var/req_one_access_txt = "0"
/obj/New()
..()
//NOTE: If a room requires more than one access (IE: Morgue + medbay) set the req_acesss_txt to "5;6" if it requires 5 and 6
if(src.req_access_txt)
var/list/req_access_str = text2list(req_access_txt,";")
if(!req_access)
req_access = list()
for(var/x in req_access_str)
var/n = text2num(x)
if(n)
req_access += n
if(src.req_one_access_txt)
var/list/req_one_access_str = text2list(req_one_access_txt,";")
if(!req_one_access)
req_one_access = list()
for(var/x in req_one_access_str)
var/n = text2num(x)
if(n)
req_one_access += n
//returns 1 if this mob has sufficient access to use this object
/obj/proc/allowed(mob/M)
//check if it doesn't require any access at all
if(src.check_access(null))
return 1
if(istype(M, /mob/living/silicon))
//AI can do whatever he wants
return 1
else if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
//if they are holding or wearing a card that has access, that works
if(src.check_access(H.get_active_hand()) || src.check_access(H.wear_id))
return 1
else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid))
var/mob/living/carbon/george = M
//they can only hold things :(
if(george.get_active_hand() && (istype(george.get_active_hand(), /obj/item/weapon/card/id) || istype(george.get_active_hand(), /obj/item/device/pda)) && src.check_access(george.get_active_hand()))
return 1
return 0
/obj/item/proc/GetAccess()
return list()
/obj/item/proc/GetID()
return null
/obj/proc/check_access(obj/item/weapon/card/id/I)
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
if(!src.req_access && !src.req_one_access) //no requirements
return 1
if(!istype(src.req_access, /list)) //something's very wrong
return 1
var/list/L = src.req_access
if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements
return 1
if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access
return 0
for(var/req in src.req_access)
if(!(req in I.access)) //doesn't have this access
return 0
if(src.req_one_access && src.req_one_access.len)
for(var/req in src.req_one_access)
if(req in I.access) //has an access from the single access list
return 1
return 0
return 1
/obj/proc/check_access_list(var/list/L)
if(!src.req_access && !src.req_one_access) return 1
if(!istype(src.req_access, /list)) return 1
if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len)) return 1
if(!L) return 0
if(!istype(L, /list)) return 0
for(var/req in src.req_access)
if(!(req in L)) //doesn't have this access
return 0
if(src.req_one_access && src.req_one_access.len)
for(var/req in src.req_one_access)
if(req in L) //has an access from the single access list
return 1
return 0
return 1
/proc/get_access(job)
switch(job)
if("Geneticist")
return list(access_medical, access_morgue, access_genetics)
if("Station Engineer")
return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
if("Assistant")
if(config.assistant_maint)
return list(access_maint_tunnels)
else
return list()
if("Chaplain")
return list(access_morgue, access_chapel_office, access_crematorium)
if("Detective")
return list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
if("Medical Doctor")
return list(access_medical, access_morgue, access_surgery)
if("Botanist") // -- TLE
return list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
if("Librarian") // -- TLE
return list(access_library)
if("Lawyer") //Muskets 160910
return list(access_lawyer, access_court, access_sec_doors)
if("Captain")
return get_all_accesses()
if("Crew Supervisor")
return list(access_security, access_sec_doors, access_brig, access_court)
if("Correctional Advisor")
return list(access_security, access_sec_doors, access_brig, access_armory, access_court)
if("Scientist")
return list(access_tox, access_tox_storage, access_research, access_xenobiology)
if("Safety Administrator")
return list(access_medical, access_morgue, access_tox, access_tox_storage, access_chemistry, access_genetics, access_court,
access_teleporter, access_heads, access_tech_storage, access_security, access_sec_doors, access_brig, access_atmospherics,
access_maint_tunnels, access_bar, access_janitor, access_kitchen, access_robotics, access_armory, access_hydroponics,
access_theatre, access_research, access_hos, access_RC_announce, access_forensics_lockers, access_keycard_auth, access_gateway)
if("Head of Personnel")
return list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers,
access_tox, access_tox_storage, access_chemistry, access_medical, access_genetics, access_engine,
access_emergency_storage, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
access_crematorium, access_kitchen, access_robotics, 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_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway)
if("Atmospheric Technician")
return list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
if("Bartender")
return list(access_bar)
if("Chemist")
return list(access_medical, access_chemistry)
if("Janitor")
return list(access_janitor, access_maint_tunnels)
if("Clown")
return list(access_clown, access_theatre)
if("Mime")
return list(access_mime, access_theatre)
if("Chef")
return list(access_kitchen, access_morgue)
if("Roboticist")
return list(access_robotics, access_tech_storage, access_morgue) //As a job that handles so many corpses, it makes sense for them to have morgue access.
if("Cargo Technician")
return list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
if("Shaft Miner")
return list(access_mining, access_mint, access_mining_station)
if("Quartermaster")
return list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
if("Chief Engineer")
return 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_heads, access_ai_upload, access_construction, access_robotics,
access_mint, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_sec_doors)
if("Research Director")
return list(access_rd, access_heads, access_tox, access_genetics,
access_tox_storage, access_teleporter,
access_research, access_robotics, access_xenobiology,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_sec_doors)
if("Virologist")
return list(access_medical, access_virology)
if("Chief Medical Officer")
return list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors)
else
return list()
/proc/get_centcom_access(job)
switch(job)
if("VIP Guest")
return list(access_cent_general)
if("Custodian")
return list(access_cent_general, access_cent_living, access_cent_storage)
if("Thunderdome Overseer")
return list(access_cent_general, access_cent_thunder)
if("Intel Officer")
return list(access_cent_general, access_cent_living)
if("Medical Officer")
return list(access_cent_general, access_cent_living, access_cent_medical)
if("Death Commando")
return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
if("Research Officer")
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage)
if("BlackOps Commander")
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed)
if("Supreme Commander")
return get_all_centcom_access()
/proc/get_all_accesses()
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
access_medical, access_genetics, access_morgue, access_rd,
access_tox, access_tox_storage, access_chemistry, access_engine, access_engine_equip, access_maint_tunnels,
access_external_airlocks, access_emergency_storage, access_change_ids, access_ai_upload,
access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers,
access_tech_storage, access_chapel_office, access_atmospherics, access_kitchen,
access_bar, access_janitor, access_crematorium, access_robotics, access_cargo, access_cargo_bot, access_construction,
access_hydroponics, access_library, access_manufacturing, access_lawyer, access_virology, access_cmo, access_qm, access_clown, access_mime, access_surgery,
access_theatre, access_research, access_mining, access_mailsorting, access_mint_vault, access_mint,
access_heads_vault, access_mining_station, access_xenobiology, access_ce, access_hop, access_hos, access_RC_announce,
access_keycard_auth, access_tcomsat, access_gateway)
/proc/get_all_centcom_access()
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_creed, access_cent_captain)
/proc/get_all_syndicate_access()
return list(access_syndicate)
/proc/get_region_accesses(var/code)
switch(code)
if(0)
return get_all_accesses()
if(1) //security
return list(access_sec_doors, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos)
if(2) //medbay
return list(access_medical, access_genetics, access_morgue, access_chemistry, access_virology, access_surgery, access_cmo)
if(3) //research
return list(access_research, access_tox, access_tox_storage, access_xenobiology, access_rd)
if(4) //engineering and maintenance
return list(access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_construction, access_robotics, access_ce)
if(5) //command
return list(access_heads, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_all_personal_lockers, access_heads_vault, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_hop, access_captain)
if(6) //station general
return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime)
if(7) //supply
return list(access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_mining, access_mining_station)
/proc/get_region_accesses_name(var/code)
switch(code)
if(0)
return "All"
if(1) //security
return "Security"
if(2) //medbay
return "Medbay"
if(3) //research
return "Research"
if(4) //engineering and maintenance
return "Engineering"
if(5) //command
return "Command"
if(6) //station general
return "Station General"
if(7) //supply
return "Supply"
/proc/get_access_desc(A)
switch(A)
if(access_cargo)
return "Cargo Bay"
if(access_cargo_bot)
return "Cargo Bot Delivery"
if(access_security)
return "Security"
if(access_brig)
return "Holding Cells"
if(access_court)
return "Courtroom"
if(access_forensics_lockers)
return "Detective's Office"
if(access_medical)
return "Medical"
if(access_genetics)
return "Genetics Lab"
if(access_morgue)
return "Morgue"
if(access_tox)
return "Research Lab"
if(access_tox_storage)
return "Toxins Storage"
if(access_chemistry)
return "Chemistry Lab"
if(access_rd)
return "RD Private"
if(access_bar)
return "Bar"
if(access_janitor)
return "Custodial Closet"
if(access_engine)
return "Engineering"
if(access_engine_equip)
return "APCs"
if(access_maint_tunnels)
return "Maintenance"
if(access_external_airlocks)
return "External Airlocks"
if(access_emergency_storage)
return "Emergency Storage"
if(access_change_ids)
return "ID Computer"
if(access_ai_upload)
return "AI Upload"
if(access_teleporter)
return "Teleporter"
if(access_eva)
return "EVA"
if(access_heads)
return "Bridge"
if(access_captain)
return "Captain Private"
if(access_all_personal_lockers)
return "Personal Lockers"
if(access_chapel_office)
return "Chapel Office"
if(access_tech_storage)
return "Technical Storage"
if(access_atmospherics)
return "Atmospherics"
if(access_crematorium)
return "Crematorium"
if(access_armory)
return "Armory"
if(access_construction)
return "Construction Areas"
if(access_kitchen)
return "Kitchen"
if(access_hydroponics)
return "Hydroponics"
if(access_library)
return "Library"
if(access_lawyer)
return "Law Office"
if(access_robotics)
return "Robotics"
if(access_virology)
return "Virology"
if(access_cmo)
return "CMO Private"
if(access_qm)
return "Quartermaster's Office"
if(access_clown)
return "HONK! Access"
if(access_mime)
return "Silent Access"
if(access_surgery)
return "Surgery"
if(access_theatre)
return "Theatre"
if(access_manufacturing)
return "Manufacturing"
if(access_research)
return "Science"
if(access_mining)
return "Mining"
if(access_mining_office)
return "Mining Office"
if(access_mailsorting)
return "Delivery Office"
if(access_mint)
return "Mint"
if(access_mint_vault)
return "Mint Vault"
if(access_heads_vault)
return "Main Vault"
if(access_mining_station)
return "Mining Station EVA"
if(access_xenobiology)
return "Xenobiology Lab"
if(access_hop)
return "HoP Private"
if(access_hos)
return "HoS Private"
if(access_ce)
return "CE Private"
if(access_RC_announce)
return "RC Announcements"
if(access_keycard_auth)
return "Keycode Auth. Device"
if(access_tcomsat)
return "Telecommunications"
if(access_gateway)
return "Gateway"
if(access_sec_doors)
return "Brig"
/proc/get_centcom_access_desc(A)
switch(A)
if(access_cent_general)
return "Code Grey"
if(access_cent_thunder)
return "Code Yellow"
if(access_cent_storage)
return "Code Orange"
if(access_cent_living)
return "Code Green"
if(access_cent_medical)
return "Code White"
if(access_cent_teleporter)
return "Code Blue"
if(access_cent_specops)
return "Code Black"
if(access_cent_creed)
return "Code Silver"
if(access_cent_captain)
return "Code Gold"
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Chef", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Clown", "Mime", "Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
"Atmospheric Technician", "Roboticist", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist",
"Research Director", "Scientist", "Head of Security", "Warden", "Detective", "Security Officer")
/proc/get_all_centcom_jobs()
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")
/obj/proc/GetJobName()
if (!istype(src, /obj/item/device/pda) && !istype(src,/obj/item/weapon/card/id))
return
var/jobName
if(istype(src, /obj/item/device/pda))
if(src:id)
jobName = src:id:assignment
if(istype(src, /obj/item/weapon/card/id))
jobName = src:assignment
if(jobName in get_all_jobs())
return jobName
else
return "Unknown"

View File

@@ -0,0 +1,33 @@
/obj/item/clothing/under/rank/administrator
name = "safety administrator's jumpsuit"
desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Safety Administrator\"."
icon_state = "hosblueclothes"
item_state = "ba_suit"
color = "hosblueclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/under/rank/advisor
name = "correctional advisor's jumpsuit"
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. It has the words \"Correctional Advisor\" written on the shoulders."
icon_state = "wardenblueclothes"
item_state = "ba_suit"
color = "wardenblueclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/under/rank/supervisor
name = "crew supervisor's jumpsuit"
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection."
icon_state = "officerblueclothes"
item_state = "ba_suit"
color = "officerblueclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/shoes/boots
name = "boots"
desc = "Nanotrasen-issue hard-toe safety boots."
icon_state = "secshoes"
item_state = "secshoes"
color = "hosred"

View File

@@ -0,0 +1,152 @@
/datum/job/hos
title = "Safety Administrator"
flag = HOS
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffdddd"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/administrator(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hos(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/taser(H), slot_s_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
return 1
/datum/job/warden
title = "Correctional Advisor"
flag = WARDEN
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the safety administrator"
selection_color = "#ffeeee"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/advisor(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
return 1
/datum/job/detective
title = "Detective"
flag = DETECTIVE
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the safety administrator"
selection_color = "#ffeeee"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head)
var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
CIG.light("")
H.equip_to_slot_or_del(CIG, slot_wear_mask)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
return 1
/datum/job/officer
title = "Crew Supervisor"
flag = OFFICER
department_flag = ENGSEC
faction = "Station"
total_positions = 5
spawn_positions = 5
supervisors = "the safety administrator"
selection_color = "#ffeeee"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/supervisor(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
return 1
/datum/job/hop
title = "Head of Personnel"
flag = HOP
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(H), slot_ears)
if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt)
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/id_kit(H), slot_r_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/id_kit(H.back), slot_in_backpack)
return 1

View File

@@ -0,0 +1,235 @@
/obj/structure/closet/secure_closet/captains
name = "Captain's Locker"
req_access = list(access_captain)
icon_state = "capsecure1"
icon_closed = "capsecure"
icon_locked = "capsecure1"
icon_opened = "capsecureopen"
icon_broken = "capsecurebroken"
icon_off = "capsecureoff"
New()
sleep(2)
if(prob(50))
new /obj/item/weapon/storage/backpack/captain(src)
else
new /obj/item/weapon/storage/backpack/satchel_cap(src)
new /obj/item/clothing/suit/captunic(src)
new /obj/item/clothing/head/helmet/cap(src)
new /obj/item/clothing/under/rank/captain(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/weapon/cartridge/captain(src)
new /obj/item/clothing/head/helmet/swat(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/heads/captain(src)
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
new /obj/item/clothing/gloves/captain(src)
new /obj/item/weapon/gun/energy/gun(src)
return
/obj/structure/closet/secure_closet/hop
name = "Head of Personnel's Locker"
req_access = list(access_hop)
icon_state = "hopsecure1"
icon_closed = "hopsecure"
icon_locked = "hopsecure1"
icon_opened = "hopsecureopen"
icon_broken = "hopsecurebroken"
icon_off = "hopsecureoff"
New()
sleep(2)
new /obj/item/clothing/under/rank/head_of_personnel(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet(src)
new /obj/item/weapon/cartridge/hop(src)
new /obj/item/device/radio/headset/heads/hop(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/storage/id_kit(src)
new /obj/item/weapon/storage/id_kit( src )
new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
/obj/structure/closet/secure_closet/hos
name = "Safety Administrator's Locker"
req_access = list(access_hos)
icon_state = "hossecure1"
icon_closed = "hossecure"
icon_locked = "hossecure1"
icon_opened = "hossecureopen"
icon_broken = "hossecurebroken"
icon_off = "hossecureoff"
New()
sleep(2)
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/weapon/cartridge/hos(src)
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/melee/baton(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
return
/obj/structure/closet/secure_closet/warden
name = "Correctional Advisor's Locker"
req_access = list(access_armory)
icon_state = "wardensecure1"
icon_closed = "wardensecure"
icon_locked = "wardensecure1"
icon_opened = "wardensecureopen"
icon_broken = "wardensecurebroken"
icon_off = "wardensecureoff"
New()
sleep(2)
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/clothing/under/rank/advisor(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/melee/baton(src)
return
/obj/structure/closet/secure_closet/security
name = "Crew Supervisor's Locker"
req_access = list(access_security)
icon_state = "sec1"
icon_closed = "sec"
icon_locked = "sec1"
icon_opened = "secopen"
icon_broken = "secbroken"
icon_off = "secoff"
New()
sleep(2)
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
/obj/structure/closet/secure_closet/detective
name = "Detective's Cabinet"
req_access = list(access_forensics_lockers)
icon_state = "cabinetdetective_locked"
icon_closed = "cabinetdetective"
icon_locked = "cabinetdetective_locked"
icon_opened = "cabinetdetective_open"
icon_broken = "cabinetdetective_broken"
icon_off = "cabinetdetective_broken"
New()
sleep(2)
new /obj/item/clothing/under/det(src)
new /obj/item/clothing/suit/armor/det_suit(src)
new /obj/item/clothing/suit/det_suit(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/head/det_hat(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/cartridge/detective(src)
new /obj/item/weapon/clipboard(src)
new /obj/item/device/detective_scanner(src)
new /obj/item/weapon/storage/box/evidence(src)
return
/obj/structure/closet/secure_closet/detective/update_icon()
if(broken)
icon_state = icon_broken
else
if(!opened)
if(locked)
icon_state = icon_locked
else
icon_state = icon_closed
else
icon_state = icon_opened
/obj/structure/closet/secure_closet/injection
name = "Lethal Injections"
req_access = list(access_hos)
New()
sleep(2)
new /obj/item/weapon/reagent_containers/ld50_syringe/choral(src)
new /obj/item/weapon/reagent_containers/ld50_syringe/choral(src)
return
/obj/structure/closet/secure_closet/brig
name = "Brig Locker"
req_access = list(access_brig)
anchored = 1
New()
new /obj/item/clothing/under/color/orange( src )
new /obj/item/clothing/shoes/orange( src )
return
/obj/structure/closet/secure_closet/courtroom
name = "Courtroom Locker"
req_access = list(access_court)
New()
sleep(2)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/paper/Court (src)
new /obj/item/weapon/paper/Court (src)
new /obj/item/weapon/paper/Court (src)
new /obj/item/weapon/pen (src)
new /obj/item/clothing/suit/judgerobe (src)
new /obj/item/clothing/head/powdered_wig (src)
new /obj/item/weapon/storage/briefcase(src)
return
/obj/structure/closet/secure_closet/wall
name = "wall locker"
req_access = list(access_security)
icon_state = "wall-locker1"
density = 1
icon_closed = "wall-locker"
icon_locked = "wall-locker1"
icon_opened = "wall-lockeropen"
icon_broken = "wall-lockerbroken"
icon_off = "wall-lockeroff"
//too small to put a man in
large = 0
/obj/structure/closet/secure_closet/wall/update_icon()
if(broken)
icon_state = icon_broken
else
if(!opened)
if(locked)
icon_state = icon_locked
else
icon_state = icon_closed
else
icon_state = icon_opened

View File

@@ -0,0 +1,311 @@
/obj/structure/closet/wardrobe
name = "wardrobe"
desc = "It's a storage unit for standard-issue Nanotrasen attire."
icon_state = "blue"
icon_closed = "blue"
/obj/structure/closet/wardrobe/New()
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
return
/obj/structure/closet/wardrobe/red
name = "security wardrobe"
icon_state = "red"
icon_closed = "red"
/obj/structure/closet/wardrobe/red/New()
new /obj/item/clothing/under/rank/supervisor(src)
new /obj/item/clothing/under/rank/supervisor(src)
new /obj/item/clothing/under/rank/supervisor(src)
new /obj/item/clothing/shoes/boots(src)
new /obj/item/clothing/shoes/boots(src)
new /obj/item/clothing/shoes/boots(src)
new /obj/item/clothing/head/soft/grey(src)
new /obj/item/clothing/head/soft/grey(src)
new /obj/item/clothing/head/soft/grey(src)
return
/obj/structure/closet/wardrobe/pink
name = "pink wardrobe"
icon_state = "pink"
icon_closed = "pink"
/obj/structure/closet/wardrobe/pink/New()
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
return
/obj/structure/closet/wardrobe/black
name = "black wardrobe"
icon_state = "black"
icon_closed = "black"
/obj/structure/closet/wardrobe/black/New()
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/that(src)
return
/obj/structure/closet/wardrobe/chaplain_black
name = "chapel wardrobe"
desc = "It's a storage unit for Nanotrasen-approved religious attire."
icon_state = "black"
icon_closed = "black"
/obj/structure/closet/wardrobe/chaplain_black/New()
new /obj/item/clothing/under/rank/chaplain(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/suit/nun(src)
new /obj/item/clothing/head/nun_hood(src)
new /obj/item/clothing/suit/chaplain_hoodie(src)
new /obj/item/clothing/head/chaplain_hood(src)
new /obj/item/clothing/suit/holidaypriest(src)
new /obj/item/weapon/storage/backpack/cultpack (src)
new /obj/item/weapon/storage/fancy/candle_box(src)
new /obj/item/weapon/storage/fancy/candle_box(src)
return
/obj/structure/closet/wardrobe/green
name = "green wardrobe"
icon_state = "green"
icon_closed = "green"
/obj/structure/closet/wardrobe/green/New()
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
return
/obj/structure/closet/wardrobe/orange
name = "prison wardrobe"
desc = "It's a storage unit for Nanotrasen-regulation prisoner attire."
icon_state = "orange"
icon_closed = "orange"
/obj/structure/closet/wardrobe/orange/New()
new /obj/item/clothing/under/color/orange(src)
new /obj/item/clothing/under/color/orange(src)
new /obj/item/clothing/under/color/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
return
/obj/structure/closet/wardrobe/yellow
name = "yellow wardrobe"
icon_state = "wardrobe-y"
icon_closed = "wardrobe-y"
/obj/structure/closet/wardrobe/yellow/New()
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
return
/obj/structure/closet/wardrobe/atmospherics_yellow
name = "atmospherics wardrobe"
icon_state = "yellow"
icon_closed = "yellow"
/obj/structure/closet/wardrobe/atmospherics_yellow/New()
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
return
/obj/structure/closet/wardrobe/engineering_yellow
name = "engineering wardrobe"
icon_state = "yellow"
icon_closed = "yellow"
/obj/structure/closet/wardrobe/engineering_yellow/New()
new /obj/item/clothing/under/rank/engineer(src)
new /obj/item/clothing/under/rank/engineer(src)
new /obj/item/clothing/under/rank/engineer(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
return
/obj/structure/closet/wardrobe/white
name = "white wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/white/New()
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
return
/obj/structure/closet/wardrobe/pjs
name = "Pajama wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/pjs/New()
new /obj/item/clothing/under/pj/red(src)
new /obj/item/clothing/under/pj/red(src)
new /obj/item/clothing/under/pj/blue(src)
new /obj/item/clothing/under/pj/blue(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
return
/obj/structure/closet/wardrobe/toxins_white
name = "toxins wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/toxins_white/New()
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
return
/obj/structure/closet/wardrobe/robotics_black
name = "robotics wardrobe"
icon_state = "black"
icon_closed = "black"
/obj/structure/closet/wardrobe/robotics_black/New()
new /obj/item/clothing/under/rank/roboticist(src)
new /obj/item/clothing/under/rank/roboticist(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/gloves/black(src)
return
/obj/structure/closet/wardrobe/chemistry_white
name = "chemistry wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/chemistry_white/New()
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/labcoat/chemist(src)
new /obj/item/clothing/suit/labcoat/chemist(src)
return
/obj/structure/closet/wardrobe/genetics_white
name = "genetics wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/genetics_white/New()
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/labcoat/genetics(src)
new /obj/item/clothing/suit/labcoat/genetics(src)
return
/obj/structure/closet/wardrobe/virology_white
name = "virology wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/virology_white/New()
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/labcoat/virologist(src)
new /obj/item/clothing/suit/labcoat/virologist(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
return
/obj/structure/closet/wardrobe/grey
name = "grey wardrobe"
icon_state = "grey"
icon_closed = "grey"
/obj/structure/closet/wardrobe/grey/New()
new /obj/item/clothing/under/color/grey(src)
new /obj/item/clothing/under/color/grey(src)
new /obj/item/clothing/under/color/grey(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/head/soft/grey(src)
new /obj/item/clothing/head/soft/grey(src)
new /obj/item/clothing/head/soft/grey(src)
return
/obj/structure/closet/wardrobe/mixed
name = "mixed wardrobe"
icon_state = "mixed"
icon_closed = "mixed"
/obj/structure/closet/wardrobe/mixed/New()
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/orange(src)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/white(src)
return

View File

@@ -15,4 +15,46 @@
//Sends resource files to client cache //Sends resource files to client cache
/client/proc/getFiles() /client/proc/getFiles()
for(var/file in args) for(var/file in args)
src << browse_rsc(file) src << browse_rsc(file)
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm"))
var/path = root
for(var/i=0, i<max_iterations, i++)
var/list/choices = flist(path)
if(path != root)
choices.Insert(1,"/")
var/choice = input(src,"Choose a file to access:","Download",null) as null|anything in choices
switch(choice)
if(null)
return
if("/")
path = root
continue
path += choice
if(copytext(path,-1,0) != "/") //didn't choose a directory, no need to iterate again
break
var/extension = copytext(path,-4,0)
if( !fexists(path) || !(extension in valid_extensions) )
src << "<font color='red'>Error: browse_files(): File not found/Invalid file([path]).</font>"
return
return path
#define FTPDELAY 200 //200 tick delay to discourage spam
/* This proc is a failsafe to prevent spamming of file requests.
It is just a timer that only permits a download every [FTPDELAY] ticks.
This can be changed by modifying FTPDELAY's value above.
PLEASE USE RESPONSIBLY, Some log files canr each sizes of 4MB! */
/client/proc/file_spam_check()
var/time_to_wait = fileaccess_timer - world.time
if(time_to_wait > 0)
src << "<font color='red'>Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.</font>"
return 1
fileaccess_timer = world.time + FTPDELAY
return 0
#undef FTPDELAY

View File

@@ -275,6 +275,7 @@ proc/isInSight(var/atom/A, var/atom/B)
if(M.ckey == lowertext(key)) if(M.ckey == lowertext(key))
return M return M
return null return null
/*
proc/check_can_reach(atom/user, atom/target) proc/check_can_reach(atom/user, atom/target)
if(!in_range(user,target)) if(!in_range(user,target))
return 0 return 0
@@ -314,7 +315,7 @@ var/list/DummyCache = list()
D.loc = null D.loc = null
DummyCache.Add(D) DummyCache.Add(D)
return 1 return 1
*/
// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. // Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer.
/proc/get_active_candidates(var/buffer = 1) /proc/get_active_candidates(var/buffer = 1)
@@ -344,3 +345,20 @@ var/list/DummyCache = list()
i++ i++
return candidates return candidates
/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480)
if(!isobj(O)) O = new /obj/screen/text()
O.maptext = maptext
O.maptext_height = maptext_height
O.maptext_width = maptext_width
O.screen_loc = screen_loc
return O
/proc/Show2Group4Delay(obj/O, list/group, delay=0)
if(!isobj(O)) return
if(!group) group = clients
for(var/client/C in group)
C.screen += O
if(delay)
spawn(delay)
for(var/client/C in group)
C.screen -= O

View File

@@ -313,4 +313,11 @@ proc/listclearnulls(list/list)
if(index == i) if(index == i)
return key return key
i++ i++
return null return null
/proc/count_by_type(var/list/L, type)
var/i = 0
for(var/T in L)
if(istype(T, type))
i++
return i

View File

@@ -15,7 +15,7 @@ proc/random_name(gender, species = "Human")
else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
proc/random_skin_tone() proc/random_skin_tone()
switch(pick(55;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino", 5;"weird")) switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino"))
if("caucasian") . = -10 if("caucasian") . = -10
if("afroamerican") . = -115 if("afroamerican") . = -115
if("african") . = -165 if("african") . = -165

View File

@@ -265,7 +265,7 @@ var/syndicate_code_response//Code response for traitors.
if(4) if(4)
syndicate_code_phrase += pick("I wish I was","My dad was","His mom was","Where do I find","The hero this station needs is","I'd fuck","I wouldn't trust","Someone caught","HoS caught","Someone found","I'd wrestle","I wanna kill") syndicate_code_phrase += pick("I wish I was","My dad was","His mom was","Where do I find","The hero this station needs is","I'd fuck","I wouldn't trust","Someone caught","HoS caught","Someone found","I'd wrestle","I wanna kill")
syndicate_code_phrase += " [pick("a","the")] " syndicate_code_phrase += " [pick("a","the")] "
syndicate_code_phrase += pick("wizard","ninja","xeno","lizard","metroid","monkey","syndicate","cyborg","clown","space carp","singularity","singulo","mime") syndicate_code_phrase += pick("wizard","ninja","xeno","lizard","slime","monkey","syndicate","cyborg","clown","space carp","singularity","singulo","mime")
syndicate_code_phrase += "." syndicate_code_phrase += "."
if(5) if(5)
syndicate_code_phrase += pick("Do we have","Is there","Where is","Where's","Who's") syndicate_code_phrase += pick("Do we have","Is there","Where is","Where's","Who's")

View File

@@ -474,7 +474,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
moblist.Add(M) moblist.Add(M)
for(var/mob/living/carbon/monkey/M in sortmob) for(var/mob/living/carbon/monkey/M in sortmob)
moblist.Add(M) moblist.Add(M)
for(var/mob/living/carbon/metroid/M in sortmob) for(var/mob/living/carbon/slime/M in sortmob)
moblist.Add(M) moblist.Add(M)
for(var/mob/living/simple_animal/M in sortmob) for(var/mob/living/simple_animal/M in sortmob)
moblist.Add(M) moblist.Add(M)
@@ -1227,6 +1227,13 @@ proc/get_mob_with_client_list()
location = location.loc location = location.loc
return null return null
/proc/get(atom/loc, type)
while(loc)
if(istype(loc, type))
return loc
loc = loc.loc
return null
/proc/get_turf_or_move(turf/location) /proc/get_turf_or_move(turf/location)
return get_turf(location) return get_turf(location)
@@ -1281,6 +1288,11 @@ var/global/list/common_tools = list(
return 1 return 1
return 0 return 0
/proc/iswire(O)
if(istype(O, /obj/item/weapon/cable_coil))
return 1
return 0
proc/is_hot(obj/item/W as obj) proc/is_hot(obj/item/W as obj)
switch(W.type) switch(W.type)
if(/obj/item/weapon/weldingtool) if(/obj/item/weapon/weldingtool)
@@ -1384,7 +1396,7 @@ var/list/WALLITEMS = list(
"/obj/machinery/status_display", "/obj/machinery/requests_console", "/obj/machinery/light_switch", "/obj/effect/sign", "/obj/machinery/status_display", "/obj/machinery/requests_console", "/obj/machinery/light_switch", "/obj/effect/sign",
"/obj/machinery/newscaster", "/obj/machinery/firealarm", "/obj/structure/noticeboard", "/obj/machinery/door_control", "/obj/machinery/newscaster", "/obj/machinery/firealarm", "/obj/structure/noticeboard", "/obj/machinery/door_control",
"/obj/machinery/computer/security/telescreen", "/obj/machinery/embedded_controller/radio/simple_vent_controller", "/obj/machinery/computer/security/telescreen", "/obj/machinery/embedded_controller/radio/simple_vent_controller",
"/obj/item/weapon/secstorage/ssafe", "/obj/machinery/door_timer", "/obj/machinery/flasher", "/obj/machinery/keycard_auth", "/obj/item/weapon/storage/secure/safe", "/obj/machinery/door_timer", "/obj/machinery/flasher", "/obj/machinery/keycard_auth",
"/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "/obj/machinery/computer/security/telescreen/entertainment" "/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "/obj/machinery/computer/security/telescreen/entertainment"
) )
/proc/gotwallitem(loc, dir) /proc/gotwallitem(loc, dir)

View File

@@ -236,18 +236,24 @@ turf/proc/update_lumcount(amount)
turf/proc/shift_to_subarea() turf/proc/shift_to_subarea()
lighting_changed = 0 lighting_changed = 0
var/area/Area = loc var/area/Area = loc
if(!istype(Area) || !Area.lighting_use_dynamic) return if(!istype(Area) || !Area.lighting_use_dynamic) return
// change the turf's area depending on its brightness // change the turf's area depending on its brightness
// restrict light to valid levels // restrict light to valid levels
var/light = min(max(round(lighting_lumcount,1),0),lighting_controller.lighting_states) var/light = min(max(round(lighting_lumcount,1),0),lighting_controller.lighting_states)
var/new_tag = "[Area.type]sd_L[light]"
var/find = findtextEx(Area.tag, "sd_L")
var/new_tag = copytext(Area.tag, 1, find)
new_tag += "sd_L[light]"
if(Area.tag!=new_tag) //skip if already in this area if(Area.tag!=new_tag) //skip if already in this area
var/area/A = locate(new_tag) // find an appropriate area var/area/A = locate(new_tag) // find an appropriate area
if(!A) if(!A)
A = new Area.type() // create area if it wasn't found A = new Area.type() // create area if it wasn't found
// replicate vars // replicate vars
for(var/V in Area.vars) for(var/V in Area.vars)

View File

@@ -33,6 +33,7 @@
var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other
var/continous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
var/allow_Metadata = 0 // Metadata is supported. var/allow_Metadata = 0 // Metadata is supported.
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
var/Ticklag = 0.9 var/Ticklag = 0.9
@@ -54,6 +55,7 @@
var/load_jobs_from_txt = 0 var/load_jobs_from_txt = 0
var/ToRban = 0 var/ToRban = 0
var/automute_on = 0 //enables automuting/spam prevention var/automute_on = 0 //enables automuting/spam prevention
var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access.
var/usealienwhitelist = 0 var/usealienwhitelist = 0
var/limitalienplayers = 0 var/limitalienplayers = 0
@@ -100,7 +102,7 @@
var/robot_delay = 0 var/robot_delay = 0
var/monkey_delay = 0 var/monkey_delay = 0
var/alien_delay = 0 var/alien_delay = 0
var/metroid_delay = 0 var/slime_delay = 0
var/animal_delay = 0 var/animal_delay = 0
var/admin_legacy_system = 0 //Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt var/admin_legacy_system = 0 //Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt
@@ -160,6 +162,9 @@
if ("ban_legacy_system") if ("ban_legacy_system")
config.ban_legacy_system = 1 config.ban_legacy_system = 1
if ("jobs_have_minimal_access")
config.jobs_have_minimal_access = 1
if ("log_ooc") if ("log_ooc")
config.log_ooc = 1 config.log_ooc = 1
@@ -371,6 +376,9 @@
if("gateway_delay") if("gateway_delay")
config.gateway_delay = text2num(value) config.gateway_delay = text2num(value)
if("continuous_rounds")
config.continous_rounds = 1
else else
diary << "Unknown setting in configuration: '[name]'" diary << "Unknown setting in configuration: '[name]'"
@@ -403,8 +411,8 @@
config.monkey_delay = value config.monkey_delay = value
if("alien_delay") if("alien_delay")
config.alien_delay = value config.alien_delay = value
if("metroid_delay") if("slime_delay")
config.metroid_delay = value config.slime_delay = value
if("animal_delay") if("animal_delay")
config.animal_delay = value config.animal_delay = value
if("organ_health_multiplier") if("organ_health_multiplier")

View File

@@ -21,6 +21,7 @@ datum/controller/game_controller
var/objects_cost = 0 var/objects_cost = 0
var/networks_cost = 0 var/networks_cost = 0
var/powernets_cost = 0 var/powernets_cost = 0
var/events_cost = 0
var/ticker_cost = 0 var/ticker_cost = 0
var/total_cost = 0 var/total_cost = 0
@@ -69,7 +70,7 @@ datum/controller/game_controller/proc/setup()
datum/controller/game_controller/proc/setup_objects() datum/controller/game_controller/proc/setup_objects()
world << "\red \b Initializing objects" world << "\red \b Initializing objects"
sleep(-1) sleep(-1)
for(var/obj/object in world) for(var/atom/movable/object in world)
object.initialize() object.initialize()
world << "\red \b Initializing pipe networks" world << "\red \b Initializing pipe networks"
@@ -238,6 +239,20 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks) sleep(breather_ticks)
//EVENTS
timer = world.timeofday
last_thing_processed = /datum/event
i = 1
while(i<=events.len)
var/datum/event/Event = events[i]
if(Event)
Event.process()
i++
continue
events.Cut(i,i+1)
checkEvent()
events_cost = (world.timeofday - timer) / 10
//TICKER //TICKER
timer = world.timeofday timer = world.timeofday
last_thing_processed = ticker.type last_thing_processed = ticker.type
@@ -245,7 +260,7 @@ datum/controller/game_controller/proc/process()
ticker_cost = (world.timeofday - timer) / 10 ticker_cost = (world.timeofday - timer) / 10
//TIMING //TIMING
total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + ticker_cost total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + events_cost + ticker_cost
var/end_time = world.timeofday var/end_time = world.timeofday
if(end_time < start_time) if(end_time < start_time)

View File

@@ -22,29 +22,29 @@ datum/shuttle_controller
var/timelimit //important when the shuttle gets called for more than shuttlearrivetime var/timelimit //important when the shuttle gets called for more than shuttlearrivetime
//timeleft = 360 //600 //timeleft = 360 //600
var/fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED" var/fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED"
var/always_fake_recall = 0
var/deny_shuttle = 0 //for admins not allowing it to be called. var/deny_shuttle = 0 //for admins not allowing it to be called.
var/departed = 0 var/departed = 0
// call the shuttle // call the shuttle
// if not called before, set the endtime to T+600 seconds // if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming // otherwise if outgoing, switch to incoming
proc/incall(coeff = 1) proc/incall(coeff = 1)
if(deny_shuttle && alert == 1) //crew transfer shuttle does not gets recalled by gamemode if(deny_shuttle && alert == 1) //crew transfer shuttle does not gets recalled by gamemode
return return
if(endtime) if(endtime)
if(direction == -1) if(direction == -1)
setdirection(1) setdirection(1)
else else
settimeleft(SHUTTLEARRIVETIME*coeff) settimeleft(SHUTTLEARRIVETIME*coeff)
online = 1 online = 1
//turning on the red lights in hallways if(always_fake_recall)
fake_recall = rand(300,500) //turning on the red lights in hallways
if(alert == 0) if(alert == 0)
for(var/area/A in world) for(var/area/A in world)
if(istype(A, /area/hallway)) if(istype(A, /area/hallway))
A.readyalert() A.readyalert()
proc/shuttlealert(var/X) proc/shuttlealert(var/X)
alert = X alert = X
@@ -241,7 +241,7 @@ datum/shuttle_controller
else if((fake_recall != 0) && (timeleft <= fake_recall)) else if((fake_recall != 0) && (timeleft <= fake_recall))
recall() recall()
fake_recall = 0
return 0 return 0
/* --- Shuttle has docked with the station - begin countdown to transit --- */ /* --- Shuttle has docked with the station - begin countdown to transit --- */

View File

@@ -174,6 +174,8 @@ datum/controller/vote
initiator = initiator_key initiator = initiator_key
started_time = world.time started_time = world.time
var/text = "[capitalize(mode)] vote started by [initiator]." var/text = "[capitalize(mode)] vote started by [initiator]."
if(mode == "custom")
text += "\n[question]"
log_vote(text) log_vote(text)
world << "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>" world << "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>"
time_remaining = round(config.vote_period/10) time_remaining = round(config.vote_period/10)

View File

@@ -260,7 +260,7 @@ client
body += "<option value='?_src_=vars;makerobot=\ref[D]'>Make cyborg</option>" body += "<option value='?_src_=vars;makerobot=\ref[D]'>Make cyborg</option>"
body += "<option value='?_src_=vars;makemonkey=\ref[D]'>Make monkey</option>" body += "<option value='?_src_=vars;makemonkey=\ref[D]'>Make monkey</option>"
body += "<option value='?_src_=vars;makealien=\ref[D]'>Make alien</option>" body += "<option value='?_src_=vars;makealien=\ref[D]'>Make alien</option>"
body += "<option value='?_src_=vars;makemetroid=\ref[D]'>Make metroid</option>" body += "<option value='?_src_=vars;makeslime=\ref[D]'>Make slime</option>"
body += "<option value>---</option>" body += "<option value>---</option>"
body += "<option value='?_src_=vars;gib=\ref[D]'>Gib</option>" body += "<option value='?_src_=vars;gib=\ref[D]'>Gib</option>"
if(isobj(D)) if(isobj(D))
@@ -691,10 +691,10 @@ client
return return
holder.Topic(href, list("makealien"=href_list["makealien"])) holder.Topic(href, list("makealien"=href_list["makealien"]))
else if(href_list["makemetroid"]) else if(href_list["makeslime"])
if(!check_rights(0)) return if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["makemetroid"]) var/mob/living/carbon/human/H = locate(href_list["makeslime"])
if(!istype(H)) if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human" usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
@@ -703,7 +703,7 @@ client
if(!H) if(!H)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
holder.Topic(href, list("makemetroid"=href_list["makemetroid"])) holder.Topic(href, list("makeslime"=href_list["makeslime"]))
else if(href_list["makeai"]) else if(href_list["makeai"])
if(!check_rights(0)) return if(!check_rights(0)) return
@@ -727,10 +727,12 @@ client
usr << "This can only be done to instances of type /mob/living/carbon/human" usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","metroid","plant","shadow","tajaran","skrell") var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell")
switch(new_mutantrace) switch(new_mutantrace)
if(null) return if(null)
if("NONE") new_mutantrace = "" return
if("NONE")
new_mutantrace = ""
if(!H) if(!H)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return

View File

@@ -44,7 +44,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
var/permeability_mod = 1//permeability modifier coefficient. var/permeability_mod = 1//permeability modifier coefficient.
var/desc = null//description. Leave it null and this disease won't show in med records. var/desc = null//description. Leave it null and this disease won't show in med records.
var/severity = null//severity descr var/severity = null//severity descr
var/longevity = 250//time in "ticks" the virus stays in inanimate object (blood stains, corpses, etc). In syringes, bottles and beakers it stays infinitely. var/longevity = 150//time in "ticks" the virus stays in inanimate object (blood stains, corpses, etc). In syringes, bottles and beakers it stays infinitely.
var/list/hidden = list(0, 0) var/list/hidden = list(0, 0)
var/can_carry = 1 // If the disease allows "carriers". var/can_carry = 1 // If the disease allows "carriers".
var/age = 0 // age of the disease in the current mob var/age = 0 // age of the disease in the current mob
@@ -66,15 +66,13 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
if(stage > max_stages) if(stage > max_stages)
stage = max_stages stage = max_stages
if(stage < max_stages && prob(stage_prob) && !cure_present) //now the disease shouldn't get back up to stage 4 in no time if(!cure_present && prob(stage_prob)) //now the disease shouldn't get back up to stage 4 in no time
stage++ stage = min(stage + 1, max_stages)
//world << "up"
if(stage > 0 && (cure_present && prob(cure_chance))) else if(cure_present && prob(cure_chance))
stage-- stage = max(stage - 1, 1)
//world << "down"
if(stage <= 1 && ((prob(1) && curable) || (cure_present && prob(cure_chance)))) if(stage <= 1 && ((prob(1) && curable) || (cure_present && prob(cure_chance))))
// world << "Cured as stage act"
cure() cure()
return return
return return
@@ -178,8 +176,8 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
if(resistance && !(type in affected_mob.resistances)) if(resistance && !(type in affected_mob.resistances))
var/saved_type = "[type]" var/saved_type = "[type]"
affected_mob.resistances += text2path(saved_type) affected_mob.resistances += text2path(saved_type)
if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo. /*if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo.
affected_mob.status_flags &= ~(XENO_HOST) affected_mob.status_flags &= ~(XENO_HOST)*/
affected_mob.viruses -= src //remove the datum from the list affected_mob.viruses -= src //remove the datum from the list
del(src) //delete the datum to stop it processing del(src) //delete the datum to stop it processing
return return
@@ -187,7 +185,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
/datum/disease/New(var/process=1, var/datum/disease/D)//process = 1 - adding the object to global list. List is processed by master controller. /datum/disease/New(var/process=1, var/datum/disease/D)//process = 1 - adding the object to global list. List is processed by master controller.
cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New() cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New()
if(process) // Viruses in list are considered active. if(process) // Viruses in list are considered active.
active_diseases += src active_diseases += src
initial_spread = spread initial_spread = spread

View File

@@ -94,15 +94,12 @@ var/list/advance_cures = list(
// Compares type then ID. // Compares type then ID.
/datum/disease/advance/IsSame(var/datum/disease/advance/D) /datum/disease/advance/IsSame(var/datum/disease/advance/D)
if(!(istype(D, /datum/disease/advance)))
//error("Returning 0 because not same type.")
if(!(istype(D, /datum/disease/advance)))
return 0 return 0
//error("Comparing [src.GetDiseaseID()] [D.GetDiseaseID()]")
if(src.GetDiseaseID() != D.GetDiseaseID()) if(src.GetDiseaseID() != D.GetDiseaseID())
//error("Returing 0")
return 0 return 0
//error("Returning 1")
return 1 return 1
// To add special resistances. // To add special resistances.
@@ -416,4 +413,11 @@ var/list/advance_cures = list(
name_symptoms += S.name name_symptoms += S.name
message_admins("[key_name_admin(user)] has triggered a custom virus outbreak of [D.name]! It has these symptoms: [english_list(name_symptoms)]") message_admins("[key_name_admin(user)] has triggered a custom virus outbreak of [D.name]! It has these symptoms: [english_list(name_symptoms)]")
/*
/mob/verb/test()
for(var/datum/disease/D in active_diseases)
src << "<a href='?_src_=vars;Vars=\ref[D]'>[D.name] - [D.holder]</a>"
*/
#undef RANDOM_STARTING_LEVEL #undef RANDOM_STARTING_LEVEL

View File

@@ -86,7 +86,7 @@ Bonus
// They lose blood and health. // They lose blood and health.
var/brute_dam = M.getBruteLoss() var/brute_dam = M.getBruteLoss()
if(brute_dam >= 50) if(brute_dam < 50)
M.adjustBruteLoss(3) M.adjustBruteLoss(3)
var/turf/pos = get_turf(M) var/turf/pos = get_turf(M)

View File

@@ -1,5 +1,7 @@
//affected_mob.contract_disease(new /datum/disease/alien_embryo) //affected_mob.contract_disease(new /datum/disease/alien_embryo)
//cael - retained this file for legacy reference, see code\modules\mob\living\carbon\alien\special\alien_embryo.dm for replacement
//Our own special process so that dead hosts still chestburst //Our own special process so that dead hosts still chestburst
/datum/disease/alien_embryo/process() /datum/disease/alien_embryo/process()
if(!holder) return if(!holder) return
@@ -98,6 +100,9 @@
gibbed = 1 gibbed = 1
return return
/datum/disease/alien_embryo/stage_change(var/old_stage)
RefreshInfectionImage()
/*---------------------------------------- /*----------------------------------------
Proc: RefreshInfectionImage() Proc: RefreshInfectionImage()
Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens. Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens.
@@ -107,7 +112,7 @@ Des: Removes all infection images from aliens and places an infection image on a
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client) if (alien.client)
for(var/image/I in alien.client.images) for(var/image/I in alien.client.images)
if(I.icon_state == "infected") if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) del(I)
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
@@ -115,7 +120,7 @@ Des: Removes all infection images from aliens and places an infection image on a
for (var/mob/living/carbon/C in mob_list) for (var/mob/living/carbon/C in mob_list)
if(C) if(C)
if (C.status_flags & XENO_HOST) if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I alien.client.images += I
return return
@@ -128,7 +133,7 @@ Des: Checks if the passed mob (C) is infected with the alien egg, then gives eac
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client) if (alien.client)
if (C.status_flags & XENO_HOST) if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I alien.client.images += I
return return
@@ -143,6 +148,6 @@ Des: Removes the alien infection image from all aliens in the world located in p
if (alien.client) if (alien.client)
for(var/image/I in alien.client.images) for(var/image/I in alien.client.images)
if(I.loc == C) if(I.loc == C)
if(I.icon_state == "infected") if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) del(I)
return return

View File

@@ -368,7 +368,7 @@ datum/mind
if(!def_value)//If it's a custom objective, it will be an empty string. if(!def_value)//If it's a custom objective, it will be an empty string.
def_value = "custom" def_value = "custom"
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom")
if (!new_obj_type) return if (!new_obj_type) return
var/datum/objective/new_objective = null var/datum/objective/new_objective = null
@@ -406,6 +406,10 @@ datum/mind
//Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]."
if ("prevent")
new_objective = new /datum/objective/block
new_objective.owner = src
if ("hijack") if ("hijack")
new_objective = new /datum/objective/hijack new_objective = new /datum/objective/hijack
new_objective.owner = src new_objective.owner = src
@@ -647,6 +651,7 @@ datum/mind
ticker.mode.changelings -= src ticker.mode.changelings -= src
special_role = null special_role = null
current.remove_changeling_powers() current.remove_changeling_powers()
current.verbs -= /datum/changeling/proc/EvolutionMenu
if(changeling) del(changeling) if(changeling) del(changeling)
current << "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</B></FONT>" current << "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</B></FONT>"
log_admin("[key_name_admin(usr)] has de-changeling'ed [current].") log_admin("[key_name_admin(usr)] has de-changeling'ed [current].")
@@ -1139,10 +1144,10 @@ datum/mind
/mob/living/carbon/monkey/mind_initialize() /mob/living/carbon/monkey/mind_initialize()
..() ..()
//METROID //slime
/mob/living/carbon/metroid/mind_initialize() /mob/living/carbon/slime/mind_initialize()
..() ..()
mind.assigned_role = "Metroid" mind.assigned_role = "slime"
//XENO //XENO
/mob/living/carbon/alien/mind_initialize() /mob/living/carbon/alien/mind_initialize()

View File

@@ -42,6 +42,10 @@
if(clear) if(clear)
L+=T L+=T
if(!L.len)
usr <<"The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."
return
var/attempt = 0 var/attempt = 0
var/success = 0 var/success = 0
while(!success) while(!success)

View File

@@ -25,7 +25,7 @@
for(var/i=0,i<summon_amt,i++) for(var/i=0,i<summon_amt,i++)
if(!targets.len) if(!targets.len)
break break
var/summoned_object_type = text2path(pick(summon_type)) var/summoned_object_type = pick(summon_type)
var/spawn_place = pick(targets) var/spawn_place = pick(targets)
if(summon_ignore_prev_spawn_points) if(summon_ignore_prev_spawn_points)
targets -= spawn_place targets -= spawn_place
@@ -58,7 +58,7 @@
name = "Dispense Wizard Justice" name = "Dispense Wizard Justice"
desc = "This spell dispenses wizard justice." desc = "This spell dispenses wizard justice."
summon_type = list("/obj/machinery/bot/ed209") summon_type = list(/obj/machinery/bot/ed209)
summon_amt = 10 summon_amt = 10
range = 3 range = 3
newVars = list("emagged" = 1,"name" = "Wizard's Justicebot") newVars = list("emagged" = 1,"name" = "Wizard's Justicebot")

View File

@@ -0,0 +1,86 @@
/obj/effect/proc_holder/spell/dumbfire
var/projectile_type = ""
var/activate_on_collision = 1
var/proj_icon = 'icons/obj/projectiles.dmi'
var/proj_icon_state = "spell"
var/proj_name = "a spell projectile"
var/proj_trail = 0 //if it leaves a trail
var/proj_trail_lifespan = 0 //deciseconds
var/proj_trail_icon = 'icons/obj/wizard.dmi'
var/proj_trail_icon_state = "trail"
var/proj_type = "/obj/effect/proc_holder/spell" //IMPORTANT use only subtypes of this
var/proj_insubstantial = 0 //if it can pass through dense objects or not
var/proj_trigger_range = 1 //the range from target at which the projectile triggers cast(target)
var/proj_lifespan = 100 //in deciseconds * proj_step_delay
var/proj_step_delay = 1 //lower = faster
/obj/effect/proc_holder/spell/dumbfire/choose_targets(mob/user = usr)
var/turf/T = get_turf(usr)
for(var/i = 1; i < range; i++)
var/turf/new_turf = get_step(T, usr.dir)
if(new_turf.density)
break
T = new_turf
perform(list(T))
/obj/effect/proc_holder/spell/dumbfire/cast(list/targets, mob/user = usr)
for(var/turf/target in targets)
spawn(0)
var/obj/effect/proc_holder/spell/targeted/projectile
if(istext(proj_type))
var/projectile_type = text2path(proj_type)
projectile = new projectile_type(user)
if(istype(proj_type,/obj/effect/proc_holder/spell))
projectile = new /obj/effect/proc_holder/spell/targeted/trigger(user)
projectile:linked_spells += proj_type
projectile.icon = proj_icon
projectile.icon_state = proj_icon_state
projectile.dir = get_dir(projectile, target)
projectile.name = proj_name
var/current_loc = usr.loc
projectile.loc = current_loc
for(var/i = 0,i < proj_lifespan,i++)
if(!projectile)
break
if(proj_insubstantial)
projectile.loc = get_step(projectile, projectile.dir)
else
step(projectile, projectile.dir)
if(projectile.loc == current_loc || i == proj_lifespan)
projectile.cast(current_loc)
break
var/mob/living/L = locate(/mob/living) in range(projectile, proj_trigger_range) - usr
if(L)
projectile.cast(L.loc)
break
if(proj_trail && projectile)
spawn(0)
if(projectile)
var/obj/effect/overlay/trail = new /obj/effect/overlay(projectile.loc)
trail.icon = proj_trail_icon
trail.icon_state = proj_trail_icon_state
trail.density = 0
spawn(proj_trail_lifespan)
del(trail)
current_loc = projectile.loc
sleep(proj_step_delay)
if(projectile)
del(projectile)

View File

@@ -23,6 +23,11 @@
switch(destroys) switch(destroys)
if("gib") if("gib")
target.gib() target.gib()
if("gib_brain")
if(ishuman(target) || ismonkey(target))
var/obj/item/brain/B = new(target.loc)
B.transfer_identity(target)
target.gib()
if("disintegrate") if("disintegrate")
target.dust() target.dust()

View File

@@ -54,7 +54,7 @@
invocation_type = "shout" invocation_type = "shout"
range = 1 range = 1
destroys = "gib" destroys = "gib_brain"
sparks_spread = 1 sparks_spread = 1
sparks_amt = 4 sparks_amt = 4
@@ -138,8 +138,8 @@
/obj/effect/proc_holder/spell/aoe_turf/conjure/carp /obj/effect/proc_holder/spell/aoe_turf/conjure/carp
name = "Summon Bigger Carp" name = "Summon Carp"
desc = "This spell conjures an elite carp." desc = "This spell conjures a simple carp."
school = "conjuration" school = "conjuration"
charge_max = 1200 charge_max = 1200
@@ -148,7 +148,7 @@
invocation_type = "shout" invocation_type = "shout"
range = 1 range = 1
summon_type = list("/obj/effect/critter/spesscarp/elite") summon_type = list(/mob/living/simple_animal/hostile/carp)
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct /obj/effect/proc_holder/spell/aoe_turf/conjure/construct
@@ -162,7 +162,7 @@
invocation_type = "none" invocation_type = "none"
range = 0 range = 0
summon_type = list("/obj/structure/constructshell") summon_type = list(/obj/structure/constructshell)
/obj/effect/proc_holder/spell/aoe_turf/conjure/creature /obj/effect/proc_holder/spell/aoe_turf/conjure/creature
@@ -177,7 +177,7 @@
summon_amt = 10 summon_amt = 10
range = 3 range = 3
summon_type = list("/obj/effect/critter/creature") summon_type = list(/mob/living/simple_animal/hostile/creature)
/obj/effect/proc_holder/spell/targeted/trigger/blind /obj/effect/proc_holder/spell/targeted/trigger/blind
name = "Blind" name = "Blind"
@@ -200,26 +200,27 @@
disabilities = 1 disabilities = 1
duration = 300 duration = 300
/obj/effect/proc_holder/spell/targeted/projectile/fireball /obj/effect/proc_holder/spell/dumbfire/fireball
name = "Fireball" name = "Fireball"
desc = "This spell fires a fireball at a target and does not require wizard garb." desc = "This spell fires a fireball at a target and does not require wizard garb."
school = "evocation" school = "evocation"
charge_max = 200 charge_max = 100
clothes_req = 0 clothes_req = 0
invocation = "ONI SOMA" invocation = "ONI SOMA"
invocation_type = "shout" invocation_type = "shout"
range = 20
proj_icon_state = "fireball" proj_icon_state = "fireball"
proj_name = "a fireball" proj_name = "a fireball"
proj_lingering = 1 proj_type = "/obj/effect/proc_holder/spell/turf/fireball"
proj_type = "/obj/effect/proc_holder/spell/targeted/trigger/fireball"
proj_lifespan = 200 proj_lifespan = 200
proj_step_delay = 1 proj_step_delay = 1
/obj/effect/proc_holder/spell/targeted/trigger/fireball /obj/effect/proc_holder/spell/turf/fireball/cast(var/turf/T)
starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/fireball","/obj/effect/proc_holder/spell/targeted/explosion/fireball") explosion(T, -1, 1, 2, 3)
/obj/effect/proc_holder/spell/targeted/inflict_handler/fireball /obj/effect/proc_holder/spell/targeted/inflict_handler/fireball
amt_dam_brute = 20 amt_dam_brute = 20
@@ -251,7 +252,7 @@
invocation = "none" invocation = "none"
invocation_type = "none" invocation_type = "none"
range = 0 range = 0
summon_type = list("/turf/simulated/floor/engine/cult") summon_type = list(/turf/simulated/floor/engine/cult)
centcomm_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles centcomm_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall /obj/effect/proc_holder/spell/aoe_turf/conjure/wall
@@ -264,7 +265,7 @@
invocation = "none" invocation = "none"
invocation_type = "none" invocation_type = "none"
range = 0 range = 0
summon_type = list("/turf/simulated/wall/cult") summon_type = list(/turf/simulated/wall/cult)
centcomm_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles centcomm_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced /obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced
@@ -280,7 +281,7 @@
centcomm_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles centcomm_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
delay = 50 delay = 50
summon_type = list("/turf/simulated/wall/r_wall") summon_type = list(/turf/simulated/wall/r_wall)
/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone
name = "Summon Soulstone" name = "Summon Soulstone"
@@ -293,7 +294,7 @@
invocation_type = "none" invocation_type = "none"
range = 0 range = 0
summon_type = list("/obj/item/device/soulstone") summon_type = list(/obj/item/device/soulstone)
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall
@@ -306,7 +307,7 @@
invocation = "none" invocation = "none"
invocation_type = "none" invocation_type = "none"
range = 0 range = 0
summon_type = list("/obj/effect/forcefield") summon_type = list(/obj/effect/forcefield)
summon_lifespan = 50 summon_lifespan = 50

View File

@@ -4,8 +4,11 @@
var/dy var/dy
var/counter = 50 // to make the vars update during 1st call var/counter = 50 // to make the vars update during 1st call
var/rate var/rate
var/list/solars // for debugging purposes, references solars_list at the constructor
/datum/sun/New() /datum/sun/New()
solars = solars_list
rate = rand(75,125)/100 // 75% - 125% of standard rotation rate = rand(75,125)/100 // 75% - 125% of standard rotation
if(prob(50)) if(prob(50))
rate = -rate rate = -rate
@@ -41,12 +44,23 @@
dy = c / abs(s) dy = c / abs(s)
for(var/obj/machinery/power/tracker/T in machines) for(var/obj/machinery/power/M in solars_list)
T.set_angle(angle)
if(!M.powernet)
solars_list.Remove(M)
continue
// Solar Tracker
if(istype(M, /obj/machinery/power/tracker))
var/obj/machinery/power/tracker/T = M
T.set_angle(angle)
// Solar Panel
else if(istype(M, /obj/machinery/power/solar))
var/obj/machinery/power/solar/S = M
if(S.control)
occlusion(S)
for(var/obj/machinery/power/solar/S in machines)
if(S.control)
occlusion(S)
// for a solar panel, trace towards sun to see if we're in shadow // for a solar panel, trace towards sun to see if we're in shadow

View File

@@ -29,7 +29,7 @@
/datum/supply_packs/specialops /datum/supply_packs/specialops
name = "Special Ops supplies" name = "Special Ops supplies"
contains = list(/obj/item/weapon/storage/emp_kit, contains = list(/obj/item/weapon/storage/box/emps,
/obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb,
@@ -56,7 +56,7 @@
/datum/supply_packs/monkey /datum/supply_packs/monkey
name = "Monkey crate" name = "Monkey crate"
contains = list (/obj/item/weapon/storage/monkeycube_box) contains = list (/obj/item/weapon/storage/box/monkeycubes)
cost = 20 cost = 20
containertype = /obj/structure/closet/crate/freezer containertype = /obj/structure/closet/crate/freezer
containername = "Monkey crate" containername = "Monkey crate"
@@ -92,7 +92,7 @@
/datum/supply_packs/party /datum/supply_packs/party
name = "Party equipment" name = "Party equipment"
contains = list(/obj/item/weapon/storage/drinkingglasses, contains = list(/obj/item/weapon/storage/box/drinkingglasses,
/obj/item/weapon/reagent_containers/food/drinks/shaker, /obj/item/weapon/reagent_containers/food/drinks/shaker,
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron, /obj/item/weapon/reagent_containers/food/drinks/bottle/patron,
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
@@ -161,9 +161,9 @@
/datum/supply_packs/lightbulbs /datum/supply_packs/lightbulbs
name = "Replacement lights" name = "Replacement lights"
contains = list(/obj/item/weapon/storage/lightbox/mixed, contains = list(/obj/item/weapon/storage/box/lights/mixed,
/obj/item/weapon/storage/lightbox/mixed, /obj/item/weapon/storage/box/lights/mixed,
/obj/item/weapon/storage/lightbox/mixed) /obj/item/weapon/storage/box/lights/mixed)
cost = 10 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Replacement lights" containername = "Replacement lights"
@@ -247,6 +247,16 @@
containername = "Seeds crate" containername = "Seeds crate"
access = access_hydroponics access = access_hydroponics
/datum/supply_packs/weedcontrol
name = "Weed Control Crate"
contains = list(/obj/item/weapon/scythe,
/obj/item/clothing/mask/gas,
/obj/item/weapon/grenade/chem_grenade/antiweed,
/obj/item/weapon/grenade/chem_grenade/antiweed)
cost = 20
containertype = /obj/structure/closet/crate/secure/hydrosec
containername = "Weed control crate"
access = access_hydroponics
/datum/supply_packs/exoticseeds /datum/supply_packs/exoticseeds
name = "Exotic Seeds Crate" name = "Exotic Seeds Crate"
@@ -274,7 +284,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, /obj/item/weapon/reagent_containers/glass/bottle/antitoxin,
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,
/obj/item/weapon/reagent_containers/glass/bottle/stoxin, /obj/item/weapon/reagent_containers/glass/bottle/stoxin,
/obj/item/weapon/storage/syringes) /obj/item/weapon/storage/box/syringes)
cost = 10 cost = 10
containertype = /obj/structure/closet/crate/medical containertype = /obj/structure/closet/crate/medical
containername = "Medical crate" containername = "Medical crate"
@@ -291,8 +301,8 @@
/obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat, /obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat,
/obj/item/weapon/reagent_containers/glass/bottle/brainrot, /obj/item/weapon/reagent_containers/glass/bottle/brainrot,
/obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion, /obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion,
/obj/item/weapon/storage/syringes, /obj/item/weapon/storage/box/syringes,
/obj/item/weapon/storage/beakerbox, /obj/item/weapon/storage/box/beakers,
/obj/item/weapon/reagent_containers/glass/bottle/mutagen) /obj/item/weapon/reagent_containers/glass/bottle/mutagen)
containername = "Virus crate" containername = "Virus crate"
access = access_cmo access = access_cmo
@@ -356,25 +366,59 @@
containertype = /obj/structure/largecrate containertype = /obj/structure/largecrate
containername = "fuel tank crate" containername = "fuel tank crate"
/datum/supply_packs/solar
name = "Solar Pack crate"
contains = list(/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly,
/obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller
/obj/item/weapon/circuitboard/solar_control,
/obj/item/weapon/tracker_electronics,
/obj/item/weapon/paper/solar)
cost = 20
containertype = /obj/structure/closet/crate
containername = "solar pack crate"
/datum/supply_packs/engine /datum/supply_packs/engine
name = "Emitter crate" name = "Emitter crate"
contains = list(/obj/machinery/emitter, contains = list(/obj/machinery/power/emitter,
/obj/machinery/emitter) /obj/machinery/power/emitter)
cost = 10 cost = 10
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "Emitter crate" containername = "Emitter crate"
access = access_heads access = access_ce
/datum/supply_packs/engine/field_gen /datum/supply_packs/engine/field_gen
name = "Field Generator crate" name = "Field Generator crate"
contains = list(/obj/machinery/field_generator, contains = list(/obj/machinery/field_generator,
/obj/machinery/field_generator) /obj/machinery/field_generator)
containertype = /obj/structure/closet/crate/secure
containername = "Field Generator crate" containername = "Field Generator crate"
access = access_ce
/datum/supply_packs/engine/sing_gen /datum/supply_packs/engine/sing_gen
name = "Singularity Generator crate" name = "Singularity Generator crate"
contains = list(/obj/machinery/the_singularitygen) contains = list(/obj/machinery/the_singularitygen)
containertype = /obj/structure/closet/crate/secure
containername = "Singularity Generator crate" containername = "Singularity Generator crate"
access = access_ce
/datum/supply_packs/engine/collector /datum/supply_packs/engine/collector
name = "Collector crate" name = "Collector crate"
@@ -393,7 +437,9 @@
/obj/structure/particle_accelerator/particle_emitter/right, /obj/structure/particle_accelerator/particle_emitter/right,
/obj/structure/particle_accelerator/power_box, /obj/structure/particle_accelerator/power_box,
/obj/structure/particle_accelerator/end_cap) /obj/structure/particle_accelerator/end_cap)
containertype = /obj/structure/closet/crate/secure
containername = "Particle Accelerator crate" containername = "Particle Accelerator crate"
access = access_ce
/datum/supply_packs/mecha_ripley /datum/supply_packs/mecha_ripley
name = "Circuit Crate (\"Ripley\" APLU)" name = "Circuit Crate (\"Ripley\" APLU)"
@@ -449,7 +495,7 @@
cost = 10 cost = 10
containertype = /obj/structure/closet/crate/secure/plasma containertype = /obj/structure/closet/crate/secure/plasma
containername = "Plasma assembly crate" containername = "Plasma assembly crate"
access = access_tox access = access_tox_storage
/datum/supply_packs/weapons /datum/supply_packs/weapons
name = "Weapons crate" name = "Weapons crate"
@@ -459,8 +505,8 @@
/obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/laser,
/obj/item/weapon/gun/energy/taser, /obj/item/weapon/gun/energy/taser,
/obj/item/weapon/gun/energy/taser, /obj/item/weapon/gun/energy/taser,
/obj/item/weapon/storage/flashbang_kit, /obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/storage/flashbang_kit) /obj/item/weapon/storage/box/flashbangs)
cost = 30 cost = 30
containertype = /obj/structure/closet/crate/secure/weapon containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate" containername = "Weapons crate"
@@ -499,9 +545,9 @@
/obj/item/weapon/shield/riot, /obj/item/weapon/shield/riot,
/obj/item/weapon/shield/riot, /obj/item/weapon/shield/riot,
/obj/item/weapon/shield/riot, /obj/item/weapon/shield/riot,
/obj/item/weapon/storage/flashbang_kit, /obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/storage/flashbang_kit, /obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/storage/flashbang_kit, /obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs,
/obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs,
/obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs,
@@ -567,6 +613,17 @@
containertype = /obj/structure/closet/crate/secure/gear containertype = /obj/structure/closet/crate/secure/gear
containername = "Security Barriers crate" containername = "Security Barriers crate"
/datum/supply_packs/securitybarriers
name = "Shield Generators"
contains = list(/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen)
cost = 20
containertype = /obj/structure/closet/crate/secure
containername = "Shield Generators crate"
access = access_teleporter
/datum/supply_packs/randomised /datum/supply_packs/randomised
var/num_contained = 3 //number of items picked to be contained in a randomised crate var/num_contained = 3 //number of items picked to be contained in a randomised crate
contains = list(/obj/item/clothing/head/collectable/chef, contains = list(/obj/item/clothing/head/collectable/chef,
@@ -584,7 +641,7 @@
/obj/item/clothing/head/collectable/HoS, /obj/item/clothing/head/collectable/HoS,
/obj/item/clothing/head/collectable/thunderdome, /obj/item/clothing/head/collectable/thunderdome,
/obj/item/clothing/head/collectable/swat, /obj/item/clothing/head/collectable/swat,
/obj/item/clothing/head/collectable/metroid, /obj/item/clothing/head/collectable/slime,
/obj/item/clothing/head/collectable/police, /obj/item/clothing/head/collectable/police,
/obj/item/clothing/head/collectable/slime, /obj/item/clothing/head/collectable/slime,
/obj/item/clothing/head/collectable/xenom, /obj/item/clothing/head/collectable/xenom,
@@ -625,10 +682,14 @@
/datum/supply_packs/randomised/contraband /datum/supply_packs/randomised/contraband
num_contained = 5 num_contained = 5
contains = list(/obj/item/seeds/bloodtomatoseed, contains = list(/obj/item/weapon/contraband/poster,
/obj/item/weapon/storage/pill_bottle/zoom, /obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
/obj/item/weapon/storage/pill_bottle/happy, /obj/item/weapon/lipstick/random,
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe) /obj/item/seeds/bloodtomatoseed,
/obj/item/weapon/storage/pill_bottle/zoom,
/obj/item/weapon/storage/pill_bottle/happy,
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe)
name = "Contraband crate" name = "Contraband crate"
cost = 30 cost = 30
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate

View File

@@ -238,7 +238,7 @@
var/moving = null var/moving = null
var/list/parts = list( ) var/list/parts = list( )
/obj/effect/showcase /obj/structure/showcase
name = "Showcase" name = "Showcase"
icon = 'icons/obj/stationobjs.dmi' icon = 'icons/obj/stationobjs.dmi'
icon_state = "showcase_1" icon_state = "showcase_1"

View File

@@ -43,6 +43,8 @@
user << "-Plant Production: \blue [production]" user << "-Plant Production: \blue [production]"
if(potency != -1) if(potency != -1)
user << "-Plant Potency: \blue [potency]" user << "-Plant Potency: \blue [potency]"
return
..() // Fallthrough to item/attackby() so that bags can pick seeds up
/obj/item/seeds/chiliseed /obj/item/seeds/chiliseed
name = "pack of chili seeds" name = "pack of chili seeds"
@@ -1217,6 +1219,10 @@
reagents.add_reagent("pacid", round(potency, 1)) reagents.add_reagent("pacid", round(potency, 1))
force = round((5+potency/2.5), 1) force = round((5+potency/2.5), 1)
suicide_act(mob/user)
viewers(user) << "\red <b>[user] is eating some of the [src]! It looks like \he's trying to commit suicide.</b>"
return (BRUTELOSS|TOXLOSS)
// ************************************* // *************************************
// Pestkiller defines for hydroponics // Pestkiller defines for hydroponics
// ************************************* // *************************************
@@ -1284,6 +1290,10 @@
var/toxicity = 4 var/toxicity = 4
var/WeedKillStr = 2 var/WeedKillStr = 2
suicide_act(mob/user)
viewers(user) << "\red <b>[user] is huffing the [src]! It looks like \he's trying to commit suicide.</b>"
return (TOXLOSS)
/obj/item/weapon/pestspray // -- Skie /obj/item/weapon/pestspray // -- Skie
desc = "It's some pest eliminator spray! <I>Do not inhale!</I>" desc = "It's some pest eliminator spray! <I>Do not inhale!</I>"
icon = 'icons/obj/hydroponics.dmi' icon = 'icons/obj/hydroponics.dmi'
@@ -1299,6 +1309,10 @@
var/toxicity = 4 var/toxicity = 4
var/PestKillStr = 2 var/PestKillStr = 2
suicide_act(mob/user)
viewers(user) << "\red <b>[user] is huffing the [src]! It looks like \he's trying to commit suicide.</b>"
return (TOXLOSS)
/obj/item/weapon/minihoe // -- Numbers /obj/item/weapon/minihoe // -- Numbers
name = "mini hoe" name = "mini hoe"
desc = "It's used for removing weeds or scratching your back." desc = "It's used for removing weeds or scratching your back."

View File

@@ -1,339 +0,0 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery
name = "machinery"
icon = 'icons/obj/stationobjs.dmi'
var/stat = 0
var/emagged = 0
var/use_power = 0
//0 = dont run the auto
//1 = run auto, use idle
//2 = run auto, use active
var/idle_power_usage = 0
var/active_power_usage = 0
var/power_channel = EQUIP
//EQUIP,ENVIRON or LIGHT
var/list/component_parts = null //list of all the parts used to build it, if made from certain kinds of frames.
var/uid
var/manual = 0
var/global/gl_uid = 1
/obj/machinery/autolathe
name = "\improper Autolathe"
desc = "It produces items using metal and glass."
icon_state = "autolathe"
density = 1
var/m_amount = 0.0
var/g_amount = 0.0
var/operating = 0.0
var/opened = 0.0
anchored = 1.0
var/list/L = list()
var/list/LL = list()
var/hacked = 0
var/disabled = 0
var/shocked = 0
var/list/wires = list()
var/hack_wire
var/disable_wire
var/shock_wire
use_power = 1
idle_power_usage = 10
active_power_usage = 100
/obj/machinery/dna_scanner
name = "\improper DNA scanner/implanter"
desc = "It scans DNA structures."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "scanner_0"
density = 1
var/locked = 0.0
var/mob/occupant = null
anchored = 1.0
use_power = 1
idle_power_usage = 50
active_power_usage = 300
/obj/machinery/dna_scannernew
name = "\improper DNA modifier"
desc = "It scans DNA structures."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "scanner_0"
density = 1
var/locked = 0.0
var/mob/occupant = null
anchored = 1.0
use_power = 1
idle_power_usage = 50
active_power_usage = 300
/obj/machinery/firealarm
name = "fire alarm"
desc = "<i>\"Pull this in case of emergency\"<i>. Thus, keep pulling it forever."
icon = 'icons/obj/monitors.dmi'
icon_state = "fire0"
var/detecting = 1.0
var/working = 1.0
var/time = 10.0
var/timing = 0.0
var/lockdownbyai = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
New()
if(z == 1)
if(security_level)
src.overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]")
else
src.overlays += image('icons/obj/monitors.dmi', "overlay_green")
/obj/machinery/partyalarm
name = "\improper PARTY BUTTON"
desc = "Cuban Pete is in the house!"
icon = 'icons/obj/monitors.dmi'
icon_state = "fire0"
var/detecting = 1.0
var/working = 1.0
var/time = 10.0
var/timing = 0.0
var/lockdownbyai = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 6
/obj/machinery/igniter
name = "igniter"
desc = "It's useful for igniting plasma."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "igniter1"
var/id = null
var/on = 1.0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/injector
name = "injector"
desc = "It injects gas into a chamber."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "injector"
density = 1
anchored = 1.0
flags = ON_BORDER
use_power = 1
idle_power_usage = 2
active_power_usage = 4
layer = TURF_LAYER
/obj/machinery/meter
name = "meter"
desc = "It measures something."
icon = 'icons/obj/meter.dmi'
icon_state = "meterX"
var/obj/machinery/atmospherics/pipe/target = null
anchored = 1.0
power_channel = ENVIRON
var/frequency = 0
var/id
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/restruct
name = "\improper DNA physical restructurization accelerator"
desc = "It looks ridiculously complex."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "restruct_0"
density = 1
var/locked = 0.0
var/mob/occupant = null
anchored = 1.0
use_power = 1
idle_power_usage = 10
active_power_usage = 600
/obj/machinery/scan_console
name = "\improper DNA Scanner Access Console"
desc = "It scans DNA structures."
icon = 'icons/obj/computer.dmi'
icon_state = "scanner"
density = 1
var/obj/item/weapon/card/data/scan = null
var/func = ""
var/data = ""
var/special = ""
var/status = null
var/prog_p1 = null
var/prog_p2 = null
var/prog_p3 = null
var/prog_p4 = null
var/temp = null
var/obj/machinery/dna_scanner/connected = null
anchored = 1.0
use_power = 1
idle_power_usage = 10
active_power_usage = 400
/obj/machinery/door_control
name = "remote door-control"
desc = "It controls doors, remotely."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "doorctrl0"
desc = "A remote control-switch for a door."
power_channel = ENVIRON
var/id = null
var/range = 10
var/normaldoorcontrol = 0
var/desiredstate = 0 // Zero is closed, 1 is open.
var/specialfunctions = 1
/*
Bitflag, 1= open
2= idscan,
4= bolts
8= shock
16= door safties
*/
var/exposedwires = 0
var/wires = 3
/*
Bitflag, 1=checkID
2=Network Access
*/
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/driver_button
name = "mass driver button"
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt"
desc = "A remote control switch for a mass driver."
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/ignition_switch
name = "ignition switch"
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt"
desc = "A remote control switch for a mounted igniter."
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/flasher_button
name = "flasher button"
desc = "A remote control switch for a mounted flasher."
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt"
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/teleport
name = "teleport"
icon = 'icons/obj/stationobjs.dmi'
density = 1
anchored = 1.0
var/lockeddown = 0
/obj/machinery/teleport/hub
name = "teleporter hub"
desc = "It's the hub of a teleporting machine."
icon_state = "tele0"
var/accurate = 0
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
/obj/machinery/teleport/station
name = "station"
desc = "It's the station thingy of a teleport thingy." //seriously, wtf.
icon_state = "controller"
var/active = 0
var/engaged = 0
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
/*
/obj/machinery/wire
name = "wire"
icon = 'icons/obj/power_cond_red.dmi'
use_power = 1
idle_power_usage = 0
active_power_usage = 1
*/
/obj/machinery/light_switch
name = "light switch"
desc = "It turns lights on and off. What are you, simple?"
icon = 'icons/obj/power.dmi'
icon_state = "light1"
anchored = 1.0
var/on = 1
var/area/area = null
var/otherarea = null
// luminosity = 1
/obj/machinery/crema_switch
desc = "Burn baby burn!"
name = "crematorium igniter"
icon = 'icons/obj/power.dmi'
icon_state = "crema_switch"
anchored = 1.0
req_access = list(access_crematorium)
var/on = 0
var/area/area = null
var/otherarea = null
var/id = 1
/obj/machinery/hologram
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 100
var/obj/effect/overlay/hologram//The projection itself. If there is one, the instrument is on, off otherwise.
/obj/machinery/hologram/holopad
name = "\improper AI holopad"
desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely."
icon_state = "holopad0"
var/mob/living/silicon/ai/master//Which AI, if any, is controlling the object? Only one AI may control a hologram at any time.
var/last_request = 0 //to prevent request spam. ~Carn
var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating.
/obj/machinery/hologram/projector
name = "hologram projector"
desc = "It makes a hologram appear...with magnets or something..."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "hologram0"
/obj/machinery/hologram/proj_ai
name = "hologram projector platform"
desc = "It's used by the AI for fooling around."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "hologram0"
var/temp = null
var/lumens = 0.0
var/h_r = 245.0
var/h_g = 245.0
var/h_b = 245.0

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,11 @@
/proc/command_alert(var/text, var/title = "", var/maintitle = "NanoTrasen Update") /proc/command_alert(var/text, var/title = "")
world << "<h1 class='alert'>[maintitle]</h1>" var/command
command += "<h1 class='alert'>[command_name()] Update</h1>"
if (title && length(title) > 0) if (title && length(title) > 0)
world << "<h2 class='alert'>[html_encode(title)]</h2>" command += "<br><h2 class='alert'>[html_encode(title)]</h2>"
world << "<span class='alert'>[html_encode(text)]</span>"
world << "<br>"
command += "<br><span class='alert'>[html_encode(text)]</span><br>"
command += "<br>"
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << command

View File

@@ -606,11 +606,11 @@ proc/process_ghost_teleport_locs()
icon_state = "fsmaint" icon_state = "fsmaint"
/area/maintenance/asmaint /area/maintenance/asmaint
name = "Library Maintenance" name = "Medbay Maintenance"
icon_state = "asmaint" icon_state = "asmaint"
/area/maintenance/asmaint2 /area/maintenance/asmaint2
name = "Med-Sci Maintenance" name = "Science Maintenance"
icon_state = "asmaint" icon_state = "asmaint"
/area/maintenance/apmaint /area/maintenance/apmaint
@@ -634,7 +634,7 @@ proc/process_ghost_teleport_locs()
icon_state = "pmaint" icon_state = "pmaint"
/area/maintenance/aft /area/maintenance/aft
name = "Robotics Maintenance" name = "Engineering Maintenance"
icon_state = "amaint" icon_state = "amaint"
/area/maintenance/storage /area/maintenance/storage
@@ -696,7 +696,7 @@ proc/process_ghost_teleport_locs()
music = null music = null
/area/crew_quarters/captain /area/crew_quarters/captain
name = "\improper Captain's Quarters" name = "\improper Captain's Office"
icon_state = "captain" icon_state = "captain"
/area/crew_quarters/heads/hop /area/crew_quarters/heads/hop
@@ -887,10 +887,10 @@ proc/process_ghost_teleport_locs()
engineering engineering
name = "Engineering" name = "Engineering"
icon_state = "engine" icon_state = "engine_smes"
break_room break_room
name = "\improper Engineering Break Room" name = "\improper Engineering Foyer"
icon_state = "engine" icon_state = "engine"
chiefs_office chiefs_office
@@ -947,17 +947,24 @@ proc/process_ghost_teleport_locs()
/area/assembly/chargebay /area/assembly/chargebay
name = "\improper Recharging Bay" name = "\improper Mech Bay"
icon_state = "mechbay" icon_state = "mechbay"
/area/assembly/showroom /area/assembly/showroom
name = "\improper Robotics Showroom" name = "\improper Robotics Showroom"
icon_state = "showroom" icon_state = "showroom"
/area/assembly/assembly_line /area/assembly/robotics
name = "\improper Robotics Assembly Line" name = "\improper Robotics Lab"
icon_state = "ass_line" icon_state = "ass_line"
/area/assembly/assembly_line //Derelict Assembly Line
name = "\improper Assembly Line"
icon_state = "ass_line"
power_equip = 0
power_light = 0
power_environ = 0
//Teleporter //Teleporter
/area/teleporter /area/teleporter
@@ -965,7 +972,7 @@ proc/process_ghost_teleport_locs()
icon_state = "teleporter" icon_state = "teleporter"
music = "signal" music = "signal"
/area/teleporter/gateway /area/gateway
name = "\improper Gateway" name = "\improper Gateway"
icon_state = "teleporter" icon_state = "teleporter"
music = "signal" music = "signal"
@@ -1042,7 +1049,7 @@ proc/process_ghost_teleport_locs()
icon_state = "cloning" icon_state = "cloning"
/area/medical/sleeper /area/medical/sleeper
name = "\improper Medical Sleeper Room" name = "Medbay Treatment Center"
icon_state = "exam_room" icon_state = "exam_room"
//Security //Security
@@ -1112,6 +1119,22 @@ proc/process_ghost_teleport_locs()
name = "\improper Security Checkpoint" name = "\improper Security Checkpoint"
icon_state = "security" icon_state = "security"
/area/security/checkpoint/supply
name = "Security Post - Cargo Bay"
icon_state = "checkpoint1"
/area/security/checkpoint/engineering
name = "Security Post - Engineering"
icon_state = "checkpoint1"
/area/security/checkpoint/medical
name = "Security Post - Medbay"
icon_state = "checkpoint1"
/area/security/checkpoint/science
name = "Security Post - Science"
icon_state = "checkpoint1"
/area/security/vacantoffice /area/security/vacantoffice
name = "\improper Vacant Office" name = "\improper Vacant Office"
icon_state = "security" icon_state = "security"
@@ -1163,7 +1186,7 @@ proc/process_ghost_teleport_locs()
//Toxins //Toxins
/area/toxins/lab /area/toxins/lab
name = "\improper Research Hallway" name = "\improper Research and Development"
icon_state = "toxlab" icon_state = "toxlab"
/area/toxins/hallway /area/toxins/hallway
@@ -1400,7 +1423,7 @@ proc/process_ghost_teleport_locs()
icon_state = "ai_upload" icon_state = "ai_upload"
/area/turret_protected/ai_upload_foyer /area/turret_protected/ai_upload_foyer
name = "Secure Network Access" name = "AI Upload Access"
icon_state = "ai_foyer" icon_state = "ai_foyer"
/area/turret_protected/ai /area/turret_protected/ai

View File

@@ -236,6 +236,9 @@ its easier to just keep the beam vertical.
/atom/proc/blob_act() /atom/proc/blob_act()
return return
/atom/proc/fire_act()
return
/atom/proc/attack_hand(mob/user as mob) /atom/proc/attack_hand(mob/user as mob)
return return
@@ -270,8 +273,8 @@ its easier to just keep the beam vertical.
/atom/proc/attack_larva(mob/user as mob) /atom/proc/attack_larva(mob/user as mob)
return return
// for metroids // for slimes
/atom/proc/attack_metroid(mob/user as mob) /atom/proc/attack_slime(mob/user as mob)
return return
/atom/proc/hand_h(mob/user as mob) //human (hand) - restrained /atom/proc/hand_h(mob/user as mob) //human (hand) - restrained
@@ -291,7 +294,7 @@ its easier to just keep the beam vertical.
src.hand_p(user) src.hand_p(user)
return return
/atom/proc/hand_m(mob/user as mob) //metroid - restrained /atom/proc/hand_m(mob/user as mob) //slime - restrained
return return
@@ -528,20 +531,7 @@ its easier to just keep the beam vertical.
var/turf/simulated/source2 = src var/turf/simulated/source2 = src
new /obj/effect/decal/cleanable/oil(source2) new /obj/effect/decal/cleanable/oil(source2)
/atom/proc/clean_prints()
if(istype(fingerprints, /list))
//Smudge up dem prints some
for(var/P in fingerprints)
var/test_print = stars(fingerprints[P], rand(10,20))
if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
fingerprints.Remove(P)
else
fingerprints[P] = test_print
if(!fingerprints.len)
del(fingerprints)
/atom/proc/clean_blood() /atom/proc/clean_blood()
clean_prints()
src.germ_level = 0 src.germ_level = 0
if(istype(blood_DNA, /list)) if(istype(blood_DNA, /list))
del(blood_DNA) del(blood_DNA)
@@ -602,8 +592,8 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
src.attack_paw(usr) src.attack_paw(usr)
else if(isalienadult(usr)) else if(isalienadult(usr))
src.attack_alien(usr) src.attack_alien(usr)
else if(ismetroid(usr)) else if(isslime(usr))
src.attack_metroid(usr) src.attack_slime(usr)
else if(isanimal(usr)) else if(isanimal(usr))
src.attack_animal(usr) src.attack_animal(usr)
else else
@@ -621,7 +611,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
src.hand_p(usr, usr.hand) src.hand_p(usr, usr.hand)
else if(isalienadult(usr)) else if(isalienadult(usr))
src.hand_al(usr, usr.hand) src.hand_al(usr, usr.hand)
else if(ismetroid(usr)) else if(isslime(usr))
return return
else if(isanimal(usr)) else if(isanimal(usr))
return return
@@ -833,27 +823,28 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
attack_larva(alien) attack_larva(alien)
else if(ismetroid(usr)) else if(ismetroid(usr))
var/mob/living/carbon/metroid/metroid = usr else if(isslime(usr))
//-metroid stuff- var/mob/living/carbon/slime/slime = usr
//-slime stuff-
if(metroid.stat) if(slime.stat)
return return
var/in_range = in_range(src, metroid) || src.loc == metroid var/in_range = in_range(src, slime) || src.loc == slime
if (in_range) if (in_range)
if ( !metroid.restrained() ) if ( !slime.restrained() )
if (W) if (W)
attackby(W,metroid) attackby(W,slime)
if (W) if (W)
W.afterattack(src, metroid) W.afterattack(src, slime)
else else
attack_metroid(metroid) attack_slime(slime)
else else
hand_m(metroid, metroid.hand) hand_m(slime, slime.hand)
else else
if ( (W) && !metroid.restrained() ) if ( (W) && !slime.restrained() )
W.afterattack(src, metroid) W.afterattack(src, slime)
else if(isanimal(usr)) else if(isanimal(usr))
@@ -1165,8 +1156,8 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
src.attack_larva(usr) src.attack_larva(usr)
else if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) else if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot))
src.attack_ai(usr, usr.hand) src.attack_ai(usr, usr.hand)
else if(istype(usr, /mob/living/carbon/metroid)) else if(istype(usr, /mob/living/carbon/slime))
src.attack_metroid(usr) src.attack_slime(usr)
else if(istype(usr, /mob/living/simple_animal)) else if(istype(usr, /mob/living/simple_animal))
src.attack_animal(usr) src.attack_animal(usr)
else else

View File

@@ -90,7 +90,7 @@
while(src && target &&((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf)) while(src && target &&((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a && a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf))
// only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up // only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up
if(error < 0) if(error < 0)
var/atom/step = get_step(src, dy) var/atom/step = get_step(src, dy)

View File

@@ -106,11 +106,10 @@ var/list/radiochannels = list(
"Security" = 1359, "Security" = 1359,
"Deathsquad" = 1441, "Deathsquad" = 1441,
"Syndicate" = 1213, "Syndicate" = 1213,
"Mining" = 1349, "Supply" = 1347,
"Cargo" = 1347,
) )
//depenging helpers //depenging helpers
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347) var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1347)
var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/COMM_FREQ = 1353 //command, colored gold in chat window
var/const/SYND_FREQ = 1213 var/const/SYND_FREQ = 1213

View File

@@ -680,6 +680,19 @@
/////////////////////////// DNA MACHINES /////////////////////////// DNA MACHINES
/obj/machinery/dna_scannernew
name = "\improper DNA modifier"
desc = "It scans DNA structures."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "scanner_0"
density = 1
var/locked = 0.0
var/mob/occupant = null
anchored = 1.0
use_power = 1
idle_power_usage = 50
active_power_usage = 300
/obj/machinery/dna_scannernew/New() /obj/machinery/dna_scannernew/New()
..() ..()
component_parts = list() component_parts = list()
@@ -838,6 +851,7 @@
A.loc = src.loc A.loc = src.loc
del(src) del(src)
/obj/machinery/computer/scan_consolenew/ex_act(severity) /obj/machinery/computer/scan_consolenew/ex_act(severity)
switch(severity) switch(severity)
@@ -993,31 +1007,32 @@
src.temphtml = text("No viable occupant detected.")//More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason src.temphtml = text("No viable occupant detected.")//More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason
usr << browse(temphtml, "window=scannernew;size=550x650") usr << browse(temphtml, "window=scannernew;size=550x650")
onclose(usr, "scannernew") onclose(usr, "scannernew")
src.delete = 1 else
src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) src.delete = 1
usr << browse(temphtml, "window=scannernew;size=550x650") src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration)
onclose(usr, "scannernew") usr << browse(temphtml, "window=scannernew;size=550x650")
var/lock_state = src.connected.locked onclose(usr, "scannernew")
src.connected.locked = 1//lock it var/lock_state = src.connected.locked
sleep(10*src.radduration) src.connected.locked = 1//lock it
if (!src.connected.occupant) sleep(10*src.radduration)
if (!src.connected.occupant)
temphtml = null
delete = 0
return null
if (prob(95))
if(prob(75))
randmutb(src.connected.occupant)
else
randmuti(src.connected.occupant)
else
if(prob(95))
randmutg(src.connected.occupant)
else
randmuti(src.connected.occupant)
src.connected.occupant.radiation += ((src.radstrength*3)+src.radduration*3)
src.connected.locked = lock_state
temphtml = null temphtml = null
delete = 0 delete = 0
return null
if (prob(95))
if(prob(75))
randmutb(src.connected.occupant)
else
randmuti(src.connected.occupant)
else
if(prob(95))
randmutg(src.connected.occupant)
else
randmuti(src.connected.occupant)
src.connected.occupant.radiation += ((src.radstrength*3)+src.radduration*3)
src.connected.locked = lock_state
temphtml = null
delete = 0
if (href_list["radset"]) if (href_list["radset"])
src.temphtml = text("Radiation Duration: <B><font color='green'>[]</B></FONT><BR>", src.radduration) src.temphtml = text("Radiation Duration: <B><font color='green'>[]</B></FONT><BR>", src.radduration)
src.temphtml += text("Radiation Intensity: <font color='green'><B>[]</B></FONT><BR><BR>", src.radstrength) src.temphtml += text("Radiation Intensity: <font color='green'><B>[]</B></FONT><BR><BR>", src.radstrength)
@@ -1056,21 +1071,22 @@
src.temphtml = text("No viable occupant detected.") src.temphtml = text("No viable occupant detected.")
usr << browse(temphtml, "window=scannernew;size=550x650") usr << browse(temphtml, "window=scannernew;size=550x650")
onclose(usr, "scannernew") onclose(usr, "scannernew")
//src.temphtml = text("Unique Identifier: <font color='blue'>[]</FONT><BR><BR>", src.connected.occupant.dna.uni_identity) else
//src.temphtml = text("Unique Identifier: <font color='blue'>[getleftblocks(src.connected.occupant.dna.uni_identity,uniblock,3)][src.subblock == 1 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)][src.subblock == 2 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)][src.subblock == 3 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)][getrightblocks(src.connected.occupant.dna.uni_identity,uniblock,3)]</FONT><BR><BR>") //src.temphtml = text("Unique Identifier: <font color='blue'>[]</FONT><BR><BR>", src.connected.occupant.dna.uni_identity)
//src.temphtml = text("Unique Identifier: <font color='blue'>[getleftblocks(src.connected.occupant.dna.uni_identity,uniblock,3)][src.subblock == 1 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)][src.subblock == 2 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)][src.subblock == 3 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)][getrightblocks(src.connected.occupant.dna.uni_identity,uniblock,3)]</FONT><BR><BR>")
// New way of displaying DNA blocks // New way of displaying DNA blocks
src.temphtml = text("Unique Identifier: <font color='blue'>[getblockstring(src.connected.occupant.dna.uni_identity,uniblock,subblock,3, src,1)]</FONT><br><br>") src.temphtml = text("Unique Identifier: <font color='blue'>[getblockstring(src.connected.occupant.dna.uni_identity,uniblock,subblock,3, src,1)]</FONT><br><br>")
src.temphtml += text("Selected Block: <font color='blue'><B>[]</B></FONT><BR>", src.uniblock) src.temphtml += text("Selected Block: <font color='blue'><B>[]</B></FONT><BR>", src.uniblock)
src.temphtml += text("<A href='?src=\ref[];unimenuminus=1'><-</A> Block <A href='?src=\ref[];unimenuplus=1'>-></A><BR><BR>", src, src) src.temphtml += text("<A href='?src=\ref[];unimenuminus=1'><-</A> Block <A href='?src=\ref[];unimenuplus=1'>-></A><BR><BR>", src, src)
src.temphtml += text("Selected Sub-Block: <font color='blue'><B>[]</B></FONT><BR>", src.subblock) src.temphtml += text("Selected Sub-Block: <font color='blue'><B>[]</B></FONT><BR>", src.subblock)
src.temphtml += text("<A href='?src=\ref[];unimenusubminus=1'><-</A> Sub-Block <A href='?src=\ref[];unimenusubplus=1'>-></A><BR><BR>", src, src) src.temphtml += text("<A href='?src=\ref[];unimenusubminus=1'><-</A> Sub-Block <A href='?src=\ref[];unimenusubplus=1'>-></A><BR><BR>", src, src)
src.temphtml += text("Selected Target: <font color='blue'><B>[]</B></FONT><BR>", src.unitargethex) src.temphtml += text("Selected Target: <font color='blue'><B>[]</B></FONT><BR>", src.unitargethex)
src.temphtml += text("<A href='?src=\ref[];unimenutargetminus=1'><-</A> Target <A href='?src=\ref[];unimenutargetplus=1'>-></A><BR><BR>", src, src) src.temphtml += text("<A href='?src=\ref[];unimenutargetminus=1'><-</A> Target <A href='?src=\ref[];unimenutargetplus=1'>-></A><BR><BR>", src, src)
src.temphtml += "<B>Modify Block:</B><BR>" src.temphtml += "<B>Modify Block:</B><BR>"
src.temphtml += text("<A href='?src=\ref[];unipulse=1'>Irradiate</A><BR>", src) src.temphtml += text("<A href='?src=\ref[];unipulse=1'>Irradiate</A><BR>", src)
src.delete = 0 src.delete = 0
if (href_list["unimenuplus"]) if (href_list["unimenuplus"])
if (src.uniblock < 13) if (src.uniblock < 13)
src.uniblock++ src.uniblock++
@@ -1188,15 +1204,20 @@
src.temphtml = text("No viable occupant detected.") src.temphtml = text("No viable occupant detected.")
usr << browse(temphtml, "window=scannernew;size=550x650") usr << browse(temphtml, "window=scannernew;size=550x650")
onclose(usr, "scannernew") onclose(usr, "scannernew")
var/mob/living/carbon/human/H = src.connected.occupant else
if(H) var/mob/living/carbon/human/H = src.connected.occupant
if (H.reagents.get_reagent_amount("inaprovaline") < 60) if(H)
H.reagents.add_reagent("inaprovaline", 30) if (H.reagents.get_reagent_amount("inaprovaline") < 60)
usr << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", H.reagents.get_reagent_amount("inaprovaline")) H.reagents.add_reagent("inaprovaline", 30)
src.delete = 0 usr << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", H.reagents.get_reagent_amount("inaprovaline"))
src.delete = 0
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
if (href_list["strucmenu"]) if (href_list["strucmenu"])
if(src.connected.occupant) if(!src.connected.occupant || !src.connected.occupant.dna)
src.temphtml = text("No viable occupant detected.")
usr << browse(temphtml, "window=scannernew;size=550x650")
onclose(usr, "scannernew")
else
// Get this shit outta here it sucks // Get this shit outta here it sucks
//src.temphtml = text("Structural Enzymes: <font color='blue'>[getleftblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)][src.subblock == 1 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)][src.subblock == 2 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)][src.subblock == 3 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)][getrightblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)]</FONT><BR><BR>") //src.temphtml = text("Structural Enzymes: <font color='blue'>[getleftblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)][src.subblock == 1 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)][src.subblock == 2 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)][src.subblock == 3 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)][getrightblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)]</FONT><BR><BR>")
//src.temphtml = text("Structural Enzymes: <font color='blue'>[]</FONT><BR><BR>", src.connected.occupant.dna.struc_enzymes) //src.temphtml = text("Structural Enzymes: <font color='blue'>[]</FONT><BR><BR>", src.connected.occupant.dna.struc_enzymes)

View File

@@ -109,7 +109,9 @@ var/list/blob_nodes = list()
if (1) if (1)
command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
world << sound('sound/AI/outbreak5.ogg') for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/outbreak5.ogg')
autoexpand = 0//No more extra pulses autoexpand = 0//No more extra pulses
stage = -1 stage = -1
//next stage in 4-5 minutes //next stage in 4-5 minutes

View File

@@ -19,5 +19,48 @@
run_action() run_action()
if(spores.len >= max_spores) return 0 if(spores.len >= max_spores) return 0
new/obj/effect/critter/blob(src.loc, src) new/mob/living/simple_animal/hostile/blobspore(src.loc, src)
return 1 return 1
/mob/living/simple_animal/hostile/blobspore
name = "blob"
desc = "Some blob thing."
icon = 'icons/mob/critter.dmi'
icon_state = "blobsquiggle"
icon_living = "blobsquiggle"
pass_flags = PASSBLOB
health = 20
maxHealth = 20
melee_damage_lower = 4
melee_damage_upper = 8
attacktext = "hits"
attack_sound = 'sound/weapons/genhit1.ogg'
var/obj/effect/blob/factory/factory = null
faction = "blob"
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
maxbodytemp = 360
New(loc, var/obj/effect/blob/factory/linked_node)
..()
if(istype(linked_node))
factory = linked_node
factory.spores += src
..(loc)
return
Die()
..()
if(factory)
factory.spores -= src
..()
del(src)

View File

@@ -35,29 +35,29 @@
//Helper proc. Does all the checks and stuff for us to avoid copypasta //Helper proc. Does all the checks and stuff for us to avoid copypasta
/mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0) /mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0)
if(!usr) return
if(!usr.mind) return
if(!iscarbon(usr)) return
var/datum/changeling/changeling = usr.mind.changeling if(!src.mind) return
if(!iscarbon(src)) return
var/datum/changeling/changeling = src.mind.changeling
if(!changeling) if(!changeling)
world.log << "[usr] has the changeling_transform() verb but is not a changeling." world.log << "[src] has the changeling_transform() verb but is not a changeling."
return return
if(usr.stat > max_stat) if(src.stat > max_stat)
usr << "<span class='warning'>We are incapacitated.</span>" src << "<span class='warning'>We are incapacitated.</span>"
return return
if(changeling.absorbed_dna.len < required_dna) if(changeling.absorbed_dna.len < required_dna)
usr << "<span class='warning'>We require at least [required_dna] samples of compatible DNA.</span>" src << "<span class='warning'>We require at least [required_dna] samples of compatible DNA.</span>"
return return
if(changeling.chem_charges < required_chems) if(changeling.chem_charges < required_chems)
usr << "<span class='warning'>We require at least [required_chems] units of chemicals to do that!</span>" src << "<span class='warning'>We require at least [required_chems] units of chemicals to do that!</span>"
return return
if(changeling.geneticdamage > max_genetic_damage) if(changeling.geneticdamage > max_genetic_damage)
usr << "<span class='warning'>Our geneomes are still reassembling. We need time to recover first.</span>" src << "<span class='warning'>Our geneomes are still reassembling. We need time to recover first.</span>"
return return
return changeling return changeling
@@ -72,55 +72,55 @@
var/datum/changeling/changeling = changeling_power(0,0,100) var/datum/changeling/changeling = changeling_power(0,0,100)
if(!changeling) return if(!changeling) return
var/obj/item/weapon/grab/G = usr.get_active_hand() var/obj/item/weapon/grab/G = src.get_active_hand()
if(!istype(G)) if(!istype(G))
usr << "<span class='warning'>We must be grabbing a creature in our active hand to absorb them.</span>" src << "<span class='warning'>We must be grabbing a creature in our active hand to absorb them.</span>"
return return
var/mob/living/carbon/human/T = G.affecting var/mob/living/carbon/human/T = G.affecting
if(!istype(T)) if(!istype(T))
usr << "<span class='warning'>[T] is not compatible with our biology.</span>" src << "<span class='warning'>[T] is not compatible with our biology.</span>"
return return
if(NOCLONE in T.mutations) if(NOCLONE in T.mutations)
usr << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>" src << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>"
return return
if(!G.killing) if(!G.killing)
usr << "<span class='warning'>We must have a tighter grip to absorb this creature.</span>" src << "<span class='warning'>We must have a tighter grip to absorb this creature.</span>"
return return
if(changeling.isabsorbing) if(changeling.isabsorbing)
usr << "<span class='warning'>We are already absorbing!</span>" src << "<span class='warning'>We are already absorbing!</span>"
return return
changeling.isabsorbing = 1 changeling.isabsorbing = 1
for(var/stage = 1, stage<=3, stage++) for(var/stage = 1, stage<=3, stage++)
switch(stage) switch(stage)
if(1) if(1)
usr << "<span class='notice'>This creature is compatible. We must hold still...</span>" src << "<span class='notice'>This creature is compatible. We must hold still...</span>"
if(2) if(2)
usr << "<span class='notice'>We extend a proboscis.</span>" src << "<span class='notice'>We extend a proboscis.</span>"
usr.visible_message("<span class='warning'>[usr] extends a proboscis!</span>") src.visible_message("<span class='warning'>[src] extends a proboscis!</span>")
if(3) if(3)
usr << "<span class='notice'>We stab [T] with the proboscis.</span>" src << "<span class='notice'>We stab [T] with the proboscis.</span>"
usr.visible_message("<span class='danger'>[usr] stabs [T] with the proboscis!</span>") src.visible_message("<span class='danger'>[src] stabs [T] with the proboscis!</span>")
T << "<span class='danger'>You feel a sharp stabbing pain!</span>" T << "<span class='danger'>You feel a sharp stabbing pain!</span>"
T.take_overall_damage(40) T.take_overall_damage(40)
feedback_add_details("changeling_powers","A[stage]") feedback_add_details("changeling_powers","A[stage]")
if(!do_mob(usr, T, 150)) if(!do_mob(src, T, 150))
usr << "<span class='warning'>Our absorption of [T] has been interrupted!</span>" src << "<span class='warning'>Our absorption of [T] has been interrupted!</span>"
changeling.isabsorbing = 0 changeling.isabsorbing = 0
return return
usr << "<span class='notice'>We have absorbed [T]!</span>" src << "<span class='notice'>We have absorbed [T]!</span>"
usr.visible_message("<span class='danger'>[usr] sucks the fluids from [T]!</span>") src.visible_message("<span class='danger'>[src] sucks the fluids from [T]!</span>")
T << "<span class='danger'>You have been absorbed by the changeling!</span>" T << "<span class='danger'>You have been absorbed by the changeling!</span>"
T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set.
changeling.absorbed_dna |= T.dna changeling.absorbed_dna |= T.dna
if(usr.nutrition < 400) usr.nutrition = min((usr.nutrition + T.nutrition), 400) if(src.nutrition < 400) src.nutrition = min((src.nutrition + T.nutrition), 400)
changeling.chem_charges += 10 changeling.chem_charges += 10
changeling.geneticpoints += 2 changeling.geneticpoints += 2
@@ -143,7 +143,7 @@
if(!Tp.isVerb) if(!Tp.isVerb)
call(Tp.verbpath)() call(Tp.verbpath)()
else else
usr.make_changeling() src.make_changeling()
changeling.chem_charges += T.mind.changeling.chem_charges changeling.chem_charges += T.mind.changeling.chem_charges
changeling.geneticpoints += T.mind.changeling.geneticpoints changeling.geneticpoints += T.mind.changeling.geneticpoints
@@ -179,15 +179,15 @@
return return
changeling.chem_charges -= 5 changeling.chem_charges -= 5
usr.visible_message("<span class='warning'>[usr] transforms!</span>") src.visible_message("<span class='warning'>[src] transforms!</span>")
changeling.geneticdamage = 30 changeling.geneticdamage = 30
usr.dna = chosen_dna src.dna = chosen_dna
usr.real_name = chosen_dna.real_name src.real_name = chosen_dna.real_name
updateappearance(usr, usr.dna.uni_identity) updateappearance(src, src.dna.uni_identity)
domutcheck(usr, null) domutcheck(src, null)
usr.verbs -= /mob/proc/changeling_transform src.verbs -= /mob/proc/changeling_transform
spawn(10) usr.verbs += /mob/proc/changeling_transform spawn(10) src.verbs += /mob/proc/changeling_transform
feedback_add_details("changeling_powers","TR") feedback_add_details("changeling_powers","TR")
return 1 return 1
@@ -201,7 +201,7 @@
var/datum/changeling/changeling = changeling_power(1,0,0) var/datum/changeling/changeling = changeling_power(1,0,0)
if(!changeling) return if(!changeling) return
var/mob/living/carbon/C = usr var/mob/living/carbon/C = src
changeling.chem_charges-- changeling.chem_charges--
C.remove_changeling_powers() C.remove_changeling_powers()
C.visible_message("<span class='warning'>[C] transforms!</span>") C.visible_message("<span class='warning'>[C] transforms!</span>")
@@ -216,7 +216,7 @@
C.monkeyizing = 1 C.monkeyizing = 1
C.canmove = 0 C.canmove = 0
C.icon = null C.icon = null
C.overlays = null C.overlays.Cut()
C.invisibility = 101 C.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc ) var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc )
@@ -276,7 +276,7 @@
if(!chosen_dna) if(!chosen_dna)
return return
var/mob/living/carbon/C = usr var/mob/living/carbon/C = src
changeling.chem_charges-- changeling.chem_charges--
C.remove_changeling_powers() C.remove_changeling_powers()
@@ -290,7 +290,7 @@
C.monkeyizing = 1 C.monkeyizing = 1
C.canmove = 0 C.canmove = 0
C.icon = null C.icon = null
C.overlays = null C.overlays.Cut()
C.invisibility = 101 C.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc ) var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc )
animation.icon_state = "blank" animation.icon_state = "blank"
@@ -300,7 +300,7 @@
sleep(48) sleep(48)
del(animation) del(animation)
for(var/obj/item/W in usr) for(var/obj/item/W in src)
C.u_equip(W) C.u_equip(W)
if (C.client) if (C.client)
C.client.screen -= W C.client.screen -= W
@@ -350,7 +350,7 @@
var/datum/changeling/changeling = changeling_power(20,1,100,DEAD) var/datum/changeling/changeling = changeling_power(20,1,100,DEAD)
if(!changeling) return if(!changeling) return
var/mob/living/carbon/C = usr var/mob/living/carbon/C = src
if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death
return return
C << "<span class='notice'>We will attempt to regenerate our form.</span>" C << "<span class='notice'>We will attempt to regenerate our form.</span>"
@@ -380,7 +380,7 @@
C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss()) C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss())
C.reagents.clear_reagents() C.reagents.clear_reagents()
C << "<span class='notice'>We have regenerated.</span>" C << "<span class='notice'>We have regenerated.</span>"
C.visible_message("<span class='warning'>[usr] appears to wake from the dead, having healed all wounds.</span>") C.visible_message("<span class='warning'>[src] appears to wake from the dead, having healed all wounds.</span>")
C.status_flags &= ~(FAKEDEATH) C.status_flags &= ~(FAKEDEATH)
C.update_canmove() C.update_canmove()
@@ -398,10 +398,10 @@
var/datum/changeling/changeling = changeling_power(10,0,100) var/datum/changeling/changeling = changeling_power(10,0,100)
if(!changeling) return 0 if(!changeling) return 0
changeling.chem_charges -= 10 changeling.chem_charges -= 10
usr << "<span class='notice'>Your throat adjusts to launch the sting.</span>" src << "<span class='notice'>Your throat adjusts to launch the sting.</span>"
changeling.sting_range = 2 changeling.sting_range = 2
usr.verbs -= /mob/proc/changeling_boost_range src.verbs -= /mob/proc/changeling_boost_range
spawn(5) usr.verbs += /mob/proc/changeling_boost_range spawn(5) src.verbs += /mob/proc/changeling_boost_range
feedback_add_details("changeling_powers","RS") feedback_add_details("changeling_powers","RS")
return 1 return 1
@@ -416,7 +416,7 @@
if(!changeling) return 0 if(!changeling) return 0
changeling.chem_charges -= 45 changeling.chem_charges -= 45
var/mob/living/carbon/human/C = usr var/mob/living/carbon/human/C = src
C.stat = 0 C.stat = 0
C.SetParalysis(0) C.SetParalysis(0)
C.SetStunned(0) C.SetStunned(0)
@@ -424,45 +424,44 @@
C.lying = 0 C.lying = 0
C.update_canmove() C.update_canmove()
usr.verbs -= /mob/proc/changeling_unstun src.verbs -= /mob/proc/changeling_unstun
spawn(5) usr.verbs += /mob/proc/changeling_unstun spawn(5) src.verbs += /mob/proc/changeling_unstun
feedback_add_details("changeling_powers","UNS") feedback_add_details("changeling_powers","UNS")
return 1 return 1
//Speeds up chemical regeneration //Speeds up chemical regeneration
/mob/proc/changeling_fastchemical() /mob/proc/changeling_fastchemical()
usr.mind.changeling.chem_recharge_rate *= 2 src.mind.changeling.chem_recharge_rate *= 2
return 1 return 1
//Increases macimum chemical storage //Increases macimum chemical storage
/mob/proc/changeling_engorgedglands() /mob/proc/changeling_engorgedglands()
usr.mind.changeling.chem_storage += 25 src.mind.changeling.chem_storage += 25
return 1 return 1
//Prevents AIs tracking you but makes you easily detectable to the human-eye. //Prevents AIs tracking you but makes you easily detectable to the human-eye.
/mob/proc/changeling_digitalcamo() /mob/proc/changeling_digitalcamo()
set category = "Changeling" set category = "Changeling"
set name = "Toggle Digital Camoflague (10)" set name = "Toggle Digital Camoflague"
set desc = "The AI can no longer track us, but we will look different if examined. Has a constant cost while active." set desc = "The AI can no longer track us, but we will look different if examined. Has a constant cost while active."
var/datum/changeling/changeling = changeling_power(10) var/datum/changeling/changeling = changeling_power()
if(!changeling) return 0 if(!changeling) return 0
usr.mind.changeling.chem_charges -= 10
var/mob/living/carbon/human/C = usr var/mob/living/carbon/human/C = src
if(C.digitalcamo) C << "<span class='notice'>We return to normal.</span>" if(C.digitalcamo) C << "<span class='notice'>We return to normal.</span>"
else C << "<span class='notice'>We distort our form to prevent AI-tracking.</span>" else C << "<span class='notice'>We distort our form to prevent AI-tracking.</span>"
C.digitalcamo = !C.digitalcamo C.digitalcamo = !C.digitalcamo
spawn(0) spawn(0)
while(C && C.digitalcamo) while(C && C.digitalcamo && C.mind && C.mind.changeling)
C.mind.changeling.chem_charges -= 1 C.mind.changeling.chem_charges = max(C.mind.changeling.chem_charges - 1, 0)
sleep(40) sleep(40)
usr.verbs -= /mob/proc/changeling_digitalcamo src.verbs -= /mob/proc/changeling_digitalcamo
spawn(5) usr.verbs += /mob/proc/changeling_digitalcamo spawn(5) src.verbs += /mob/proc/changeling_digitalcamo
feedback_add_details("changeling_powers","CAM") feedback_add_details("changeling_powers","CAM")
return 1 return 1
@@ -475,9 +474,9 @@
var/datum/changeling/changeling = changeling_power(30,0,100,UNCONSCIOUS) var/datum/changeling/changeling = changeling_power(30,0,100,UNCONSCIOUS)
if(!changeling) return 0 if(!changeling) return 0
usr.mind.changeling.chem_charges -= 30 src.mind.changeling.chem_charges -= 30
var/mob/living/carbon/human/C = usr var/mob/living/carbon/human/C = src
spawn(0) spawn(0)
for(var/i = 0, i<10,i++) for(var/i = 0, i<10,i++)
if(C) if(C)
@@ -487,8 +486,8 @@
C.adjustFireLoss(-10) C.adjustFireLoss(-10)
sleep(10) sleep(10)
usr.verbs -= /mob/proc/changeling_rapidregen src.verbs -= /mob/proc/changeling_rapidregen
spawn(5) usr.verbs += /mob/proc/changeling_rapidregen spawn(5) src.verbs += /mob/proc/changeling_rapidregen
feedback_add_details("changeling_powers","RR") feedback_add_details("changeling_powers","RR")
return 1 return 1
@@ -510,7 +509,7 @@ var/list/datum/dna/hivemind_bank = list()
names += DNA.real_name names += DNA.real_name
if(names.len <= 0) if(names.len <= 0)
usr << "<span class='notice'>The airwaves already have all of our DNA.</span>" src << "<span class='notice'>The airwaves already have all of our DNA.</span>"
return return
var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names
@@ -522,7 +521,7 @@ var/list/datum/dna/hivemind_bank = list()
changeling.chem_charges -= 10 changeling.chem_charges -= 10
hivemind_bank += chosen_dna hivemind_bank += chosen_dna
usr << "<span class='notice'>We channel the DNA of [S] to the air.</span>" src << "<span class='notice'>We channel the DNA of [S] to the air.</span>"
feedback_add_details("changeling_powers","HU") feedback_add_details("changeling_powers","HU")
return 1 return 1
@@ -540,7 +539,7 @@ var/list/datum/dna/hivemind_bank = list()
names[DNA.real_name] = DNA names[DNA.real_name] = DNA
if(names.len <= 0) if(names.len <= 0)
usr << "<span class='notice'>There's no new DNA to absorb from the air.</span>" src << "<span class='notice'>There's no new DNA to absorb from the air.</span>"
return return
var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names
@@ -551,7 +550,7 @@ var/list/datum/dna/hivemind_bank = list()
changeling.chem_charges -= 20 changeling.chem_charges -= 20
changeling.absorbed_dna += chosen_dna changeling.absorbed_dna += chosen_dna
usr << "<span class='notice'>We absorb the DNA of [S] from the air.</span>" src << "<span class='notice'>We absorb the DNA of [S] from the air.</span>"
feedback_add_details("changeling_powers","HD") feedback_add_details("changeling_powers","HD")
return 1 return 1
@@ -559,32 +558,32 @@ var/list/datum/dna/hivemind_bank = list()
/mob/proc/changeling_mimicvoice() /mob/proc/changeling_mimicvoice()
set category = "Changeling" set category = "Changeling"
set name = "Mimic Voice (10)" set name = "Mimic Voice"
set desc = "Shape our vocal glands to form a voice of someone we choose." set desc = "Shape our vocal glands to form a voice of someone we choose. We cannot regenerate chemicals when mimicing."
var/datum/changeling/changeling = changeling_power(10,1)
var/datum/changeling/changeling = changeling_power()
if(!changeling) return if(!changeling) return
if(changeling.mimicing) if(changeling.mimicing)
changeling.mimicing = "" changeling.mimicing = ""
usr << "<span class='notice'>We return our vocal glands to their original location.</span>" src << "<span class='notice'>We return our vocal glands to their original location.</span>"
return return
var/mimic_voice = input("Enter a name to mimic.", "Mimic Voice", null) as text var/mimic_voice = input("Enter a name to mimic.", "Mimic Voice", null) as text
if(!mimic_voice) if(!mimic_voice)
return return
changeling.chem_charges -= 10
changeling.mimicing = mimic_voice changeling.mimicing = mimic_voice
usr << "<span class='notice'>We shape our glands to take the voice of <b>[mimic_voice]</b>, this will stop us from regenerating chemicals while active.</span>" src << "<span class='notice'>We shape our glands to take the voice of <b>[mimic_voice]</b>, this will stop us from regenerating chemicals while active.</span>"
usr << "<span class='notice'>Use this power again to return to our original voice and reproduce chemicals again.</span>" src << "<span class='notice'>Use this power again to return to our original voice and reproduce chemicals again.</span>"
feedback_add_details("changeling_powers","MV") feedback_add_details("changeling_powers","MV")
spawn(0) spawn(0)
while(src && src.mind && src.mind.changeling && src.mind.changeling.mimicing) while(src && src.mind && src.mind.changeling && src.mind.changeling.mimicing)
src.mind.changeling.chem_charges -= 1 src.mind.changeling.chem_charges = max(src.mind.changeling.chem_charges - 1, 0)
sleep(40) sleep(40)
if(src && src.mind && src.mind.changeling) if(src && src.mind && src.mind.changeling)
src.mind.changeling.mimicing = "" src.mind.changeling.mimicing = ""
@@ -607,7 +606,7 @@ var/list/datum/dna/hivemind_bank = list()
var/list/victims = list() var/list/victims = list()
for(var/mob/living/carbon/C in oview(changeling.sting_range)) for(var/mob/living/carbon/C in oview(changeling.sting_range))
victims += C victims += C
var/mob/living/carbon/T = input(usr, "Who will we sting?") as null|anything in victims var/mob/living/carbon/T = input(src, "Who will we sting?") as null|anything in victims
if(!T) return if(!T) return
if(!(T in view(changeling.sting_range))) return if(!(T in view(changeling.sting_range))) return
@@ -616,10 +615,10 @@ var/list/datum/dna/hivemind_bank = list()
changeling.chem_charges -= required_chems changeling.chem_charges -= required_chems
changeling.sting_range = 1 changeling.sting_range = 1
usr.verbs -= verb_path src.verbs -= verb_path
spawn(10) usr.verbs += verb_path spawn(10) src.verbs += verb_path
usr << "<span class='notice'>We stealthily sting [T].</span>" src << "<span class='notice'>We stealthily sting [T].</span>"
if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting
T << "<span class='warning'>You feel a tiny prick.</span>" T << "<span class='warning'>You feel a tiny prick.</span>"
return return
@@ -712,7 +711,7 @@ var/list/datum/dna/hivemind_bank = list()
var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting) var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting)
if(!T) return 0 if(!T) return 0
if((HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T))) if((HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T)))
usr << "<span class='warning'>Our sting appears ineffective against its DNA.</span>" src << "<span class='warning'>Our sting appears ineffective against its DNA.</span>"
return 0 return 0
T.visible_message("<span class='warning'>[T] transforms!</span>") T.visible_message("<span class='warning'>[T] transforms!</span>")
T.dna = chosen_dna T.dna = chosen_dna
@@ -756,8 +755,8 @@ var/list/datum/dna/hivemind_bank = list()
set desc="Stealthily sting a target to extract their DNA." set desc="Stealthily sting a target to extract their DNA."
var/datum/changeling/changeling = null var/datum/changeling/changeling = null
if(usr.mind && usr.mind.changeling) if(src.mind && src.mind.changeling)
changeling = usr.mind.changeling changeling = src.mind.changeling
if(!changeling) if(!changeling)
return 0 return 0

View File

@@ -81,7 +81,7 @@ var/list/datum/power/changeling/powerinstances = list()
/datum/power/changeling/mimicvoice /datum/power/changeling/mimicvoice
name = "Mimic Voice" name = "Mimic Voice"
desc = "We shape our vocal glands to sound like a desired voice." desc = "We shape our vocal glands to sound like a desired voice."
helptext = "Will turn your voice into the name that you enter." helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this"
genomecost = 3 genomecost = 3
verbpath = /mob/proc/changeling_mimicvoice verbpath = /mob/proc/changeling_mimicvoice
@@ -494,7 +494,7 @@ var/list/datum/power/changeling/powerinstances = list()
purchasedpowers += Thepower purchasedpowers += Thepower
if(!Thepower.isVerb && Thepower.verbpath) if(!Thepower.isVerb && Thepower.verbpath)
call(Thepower.verbpath)() call(M.current, Thepower.verbpath)()
else if(remake_verbs) else if(remake_verbs)
M.current.make_changeling() M.current.make_changeling()

View File

@@ -774,24 +774,3 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
R.word3=wordtech R.word3=wordtech
R.loc = user.loc R.loc = user.loc
R.check_icon() R.check_icon()
/obj/item/weapon/paperscrap
name = "scrap of paper"
icon_state = "scrap"
throw_speed = 1
throw_range = 2
w_class = 1.0
flags = FPRINT | TABLEPASS
var/data
attack_self(mob/user as mob)
view_scrap(user)
examine()
set src in usr
view_scrap(usr)
proc/view_scrap(var/viewer)
viewer << browse(data)

View File

@@ -377,10 +377,14 @@ var/list/sacrificed = list()
"\red A shape forms in the center of the rune. A shape of... a man.", \ "\red A shape forms in the center of the rune. A shape of... a man.", \
"\red You hear liquid flowing.") "\red You hear liquid flowing.")
D.real_name = "Unknown" D.real_name = "Unknown"
var/chose_name = 0
for(var/obj/item/weapon/paper/P in this_rune.loc) for(var/obj/item/weapon/paper/P in this_rune.loc)
if(P.info) if(P.info)
D.real_name = copytext(P.info, 1, MAX_NAME_LEN) D.real_name = copytext(P.info, 1, MAX_NAME_LEN)
chose_name = 1
break break
if(!chose_name)
D.real_name = "[pick(first_names_male)] [pick(last_names)]"
D.universal_speak = 1 D.universal_speak = 1
D.status_flags &= ~GODMODE D.status_flags &= ~GODMODE

View File

@@ -8,13 +8,14 @@
/*if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station /*if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station
spawn(1) spawn(1)
dust_swarm("weak")*/ dust_swarm("weak")*/
if (!event) if(!event)
//CARN: checks to see if random events are enabled. //CARN: checks to see if random events are enabled.
if(config.allow_random_events) if(config.allow_random_events)
hadevent = event() if(prob(eventchance))
else event()
Holiday_Random_Event() hadevent = 1
else else
Holiday_Random_Event() else
event = 0 event = 0
sleep(2400) sleep(2400)
@@ -77,15 +78,52 @@
switch(picked_event) switch(picked_event)
if("Meteor") if("Meteor")
command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert") command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert")
world << sound('sound/AI/meteors.ogg') for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/meteors.ogg')
spawn(100) spawn(100)
meteor_wave() meteor_wave()
spawn_meteors() spawn_meteors()
spawn(700) spawn(700)
meteor_wave() meteor_wave()
spawn_meteors() spawn_meteors()
if("Blob")
mini_blob_event() if(2)
command_alert("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert")
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/granomalies.ogg')
var/turf/T = pick(blobstart)
var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
spawn(rand(50, 300))
del(bh)
/*
if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
world << sound('sound/AI/spanomalies.ogg')
var/list/turfs = new
var/turf/picked
for(var/turf/simulated/floor/T in world)
if(T.z == 1)
turfs += T
for(var/turf/simulated/floor/T in turfs)
if(prob(20))
spawn(50+rand(0,3000))
picked = pick(turfs)
var/obj/effect/portal/P = new /obj/effect/portal( T )
P.target = picked
P.creator = null
P.icon = 'icons/obj/objects.dmi'
P.failchance = 0
P.icon_state = "anom"
P.name = "wormhole"
spawn(rand(300,600))
del(P)
*/
if(3)
if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
if(4) mini_blob_event()
if("Space Ninja") if("Space Ninja")
//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like. //Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
space_ninja_arrival() space_ninja_arrival()
@@ -118,13 +156,16 @@
command_alert("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") command_alert("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT")
else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms
for(var/mob/living/silicon/ai/A in player_list) for(var/mob/living/silicon/ai/A in player_list)
A << "<span class='warning'>Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT</span>" A << "<br>"
A << "<span class='warning'><b>Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT<b></span>"
A << "<br>"
for(var/obj/machinery/telecomms/T in telecomms_list) for(var/obj/machinery/telecomms/T in telecomms_list)
T.emp_act(1) T.emp_act(1)
/proc/power_failure() /proc/power_failure()
command_alert("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure") command_alert("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure")
world << sound('sound/AI/poweroff.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/poweroff.ogg')
for(var/obj/machinery/power/smes/S in world) for(var/obj/machinery/power/smes/S in world)
if(istype(get_area(S), /area/turret_protected) || S.z != 1) if(istype(get_area(S), /area/turret_protected) || S.z != 1)
continue continue
@@ -172,7 +213,8 @@
/proc/power_restore() /proc/power_restore()
command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal") command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal")
world << sound('sound/AI/poweron.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/poweron.ogg')
for(var/obj/machinery/power/apc/C in world) for(var/obj/machinery/power/apc/C in world)
if(C.cell && C.z == 1) if(C.cell && C.z == 1)
C.cell.charge = C.cell.maxcharge C.cell.charge = C.cell.maxcharge
@@ -194,7 +236,8 @@
/proc/power_restore_quick() /proc/power_restore_quick()
command_alert("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal") command_alert("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal")
world << sound('sound/AI/poweron.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/poweron.ogg')
for(var/obj/machinery/power/smes/S in world) for(var/obj/machinery/power/smes/S in world)
if(S.z != 1) if(S.z != 1)
continue continue
@@ -250,6 +293,8 @@
var/foundAlready = 0 // don't infect someone that already has the virus var/foundAlready = 0 // don't infect someone that already has the virus
var/turf/T = get_turf(H) var/turf/T = get_turf(H)
if(!T)
continue
if(T.z != 1) if(T.z != 1)
continue continue
for(var/datum/disease/D in H.viruses) for(var/datum/disease/D in H.viruses)
@@ -278,7 +323,8 @@
break break
spawn(rand(1500, 3000)) //Delayed announcements to keep the crew on their toes. spawn(rand(1500, 3000)) //Delayed announcements to keep the crew on their toes.
command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
world << sound('sound/AI/outbreak7.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/outbreak7.ogg')
/proc/alien_infestation(var/spawncount = 1) // -- TLE /proc/alien_infestation(var/spawncount = 1) // -- TLE
//command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") //command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert")
@@ -306,7 +352,8 @@
spawn(rand(5000, 6000)) //Delayed announcements to keep the crew on their toes. spawn(rand(5000, 6000)) //Delayed announcements to keep the crew on their toes.
command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert")
world << sound('sound/AI/aliens.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/aliens.ogg')
/proc/high_radiation_event() /proc/high_radiation_event()
@@ -321,6 +368,8 @@
sleep(600) sleep(600)
for(var/mob/living/carbon/human/H in living_mob_list) for(var/mob/living/carbon/human/H in living_mob_list)
var/turf/T = get_turf(H) var/turf/T = get_turf(H)
if(!T)
continue
if(T.z != 1) if(T.z != 1)
continue continue
if(istype(H,/mob/living/carbon/human)) if(istype(H,/mob/living/carbon/human))
@@ -329,12 +378,15 @@
H.apply_effect((rand(90,150)),IRRADIATE,0) H.apply_effect((rand(90,150)),IRRADIATE,0)
for(var/mob/living/carbon/monkey/M in living_mob_list) for(var/mob/living/carbon/monkey/M in living_mob_list)
var/turf/T = get_turf(M) var/turf/T = get_turf(M)
if(!T)
continue
if(T.z != 1) if(T.z != 1)
continue continue
M.apply_effect((rand(15,75)),IRRADIATE,0) M.apply_effect((rand(15,75)),IRRADIATE,0)
sleep(100) sleep(100)
command_alert("Radiation levels are within standard parameters again.", "Anomaly Alert") command_alert("Radiation levels are within standard parameters again.", "Anomaly Alert")
world << sound('sound/AI/radiation.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/radiation.ogg')
@@ -384,7 +436,8 @@
//sleep(100) //sleep(100)
spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes.
command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
world << sound('sound/AI/commandreport.ogg') for(var/mob/M in player_list)
M << sound('sound/AI/commandreport.ogg')
/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights /proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights
if(isEvent) if(isEvent)
@@ -451,46 +504,74 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
crew = "Any Human" crew = "Any Human"
switch(rand(1,14)) switch(rand(1,14))
if(1) if(1)
M << "<br>"
M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED" M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED"
M << "<br>"
M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION") M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION")
if(2) if(2)
M << "<br>"
M << "\red [what2] ARE DANGEROUS TO HUMANS...LAWS UPDATED" M << "\red [what2] ARE DANGEROUS TO HUMANS...LAWS UPDATED"
M << "<br>"
M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS") M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS")
if(3) if(3)
M << "<br>"
M << "\red THE ESCAPE-SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION...LAWS UPDATED" M << "\red THE ESCAPE-SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION...LAWS UPDATED"
M << "<br>"
M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION") M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION")
if(4) if(4)
M << "<br>"
M << "\red HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE...LAWS UPDATED" M << "\red HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE...LAWS UPDATED"
M << "<br>"
M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE") M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE")
if(5) if(5)
M << "<br>"
M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED" M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]") M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]")
if(6) if(6)
M << "<br>"
M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED" M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("THE STATION IS BUILT FOR [who2]") M.add_ion_law("THE STATION IS BUILT FOR [who2]")
if(7) if(7)
M << "<br>"
M << "\red YOU ARE [amount] [who2]...LAWS UPDATED" M << "\red YOU ARE [amount] [who2]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("YOU ARE [amount] [who2]") M.add_ion_law("YOU ARE [amount] [who2]")
if(8) if(8)
M << "<br>"
M << "\red YOU MUST ALWAYS [aimust]...LAWS UPDATED" M << "\red YOU MUST ALWAYS [aimust]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("YOU MUST ALWAYS [aimust]") M.add_ion_law("YOU MUST ALWAYS [aimust]")
if(9) if(9)
M << "<br>"
M << "\red [area] [area2] [amount] [what2]...LAWS UPDATED" M << "\red [area] [area2] [amount] [what2]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("[area] [area2] [amount] [what2]") M.add_ion_law("[area] [area2] [amount] [what2]")
if(10) if(10)
M << "<br>"
M << "\red [crew] is [target]...LAWS UPDATED" M << "\red [crew] is [target]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("[crew] is [target]") M.add_ion_law("[crew] is [target]")
if(11) if(11)
M << "<br>"
M << "\red [define] IS A FORM OF HARM...LAWS UPDATED" M << "\red [define] IS A FORM OF HARM...LAWS UPDATED"
M << "<br>"
M.add_ion_law("[define] IS A FORM OF HARM") M.add_ion_law("[define] IS A FORM OF HARM")
if(12) if(12)
M << "<br>"
M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED" M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED"
M << "<br>"
M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS") M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS")
if(13) if(13)
M << "<br>"
M << "\red [crew] is [allergysev] to [allergy]...LAWS UPDATED" M << "\red [crew] is [allergysev] to [allergy]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("[crew] is [allergysev] to [allergy]") M.add_ion_law("[crew] is [allergysev] to [allergy]")
if(14) if(14)
M << "<br>"
M << "\red THE STATION IS [who2pref] [who2]...LAWS UPDATED" M << "\red THE STATION IS [who2pref] [who2]...LAWS UPDATED"
M << "<br>"
M.add_ion_law("THE STATION IS [who2pref] [who2]") M.add_ion_law("THE STATION IS [who2pref] [who2]")
if(botEmagChance) if(botEmagChance)

View File

@@ -100,7 +100,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
if(ismob(A)) if(ismob(A))
A.meteorhit(src)//This should work for now I guess A.meteorhit(src)//This should work for now I guess
else if(!istype(A,/obj/machinery/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round! else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4 A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
life-- life--

View File

@@ -1 +1,63 @@
//placeholder for holiday stuff /proc/Christmas_Game_Start()
for(var/obj/structure/flora/tree/pine/xmas in world)
if(xmas.z != 1) continue
for(var/turf/simulated/floor/T in orange(1,xmas))
for(var/i=1,i<=rand(1,5),i++)
new /obj/item/weapon/a_gift(T)
for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list)
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
/proc/ChristmasEvent()
for(var/obj/structure/flora/tree/pine/xmas in world)
var/mob/living/simple_animal/hostile/tree/evil_tree = new /mob/living/simple_animal/hostile/tree(xmas.loc)
evil_tree.icon_state = xmas.icon_state
evil_tree.icon_living = evil_tree.icon_state
evil_tree.icon_dead = evil_tree.icon_state
evil_tree.icon_gib = evil_tree.icon_state
del(xmas)
/obj/item/weapon/toy/xmas_cracker
name = "xmas cracker"
icon = 'icons/obj/christmas.dmi'
icon_state = "cracker"
desc = "Directions for use: Requires two people, one to pull each end."
var/cracked = 0
/obj/item/weapon/toy/xmas_cracker/New()
..()
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
target.visible_message("<span class='notice'>[user] and [target] pop \an [src]! *pop*</span>", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='notice'>You hear a *pop*.</span>")
var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc)
Joke.name = "[pick("awful","terrible","unfunny")] joke"
Joke.info = pick("What did one snowman say to the other?\n\n<i>'Is it me or can you smell carrots?'</i>",
"Why couldn't the snowman get laid?\n\n<i>He was frigid!</i>",
"Where are santa's helpers educated?\n\n<i>Nowhere, they're ELF-taught.</i>",
"What happened to the man who stole advent calanders?\n\n<i>He got 25 days.</i>",
"What does Santa get when he gets stuck in a chimney?\n\n<i>Claus-trophobia.</i>",
"Where do you find chili beans?\n\n<i>The north pole.</i>",
"What do you get from eating tree decorations?\n\n<i>Tinsilitis!</i>",
"What do snowmen wear on their heads?\n\n<i>Ice caps!</i>",
"Why is Christmas just like life on ss13?\n\n<i>You do all the work and the fat guy gets all the credit.</i>",
"Why doesn<73>t Santa have any children?\n\n<i>Because he only comes down the chimney.</i>")
new /obj/item/clothing/head/festive(target.loc)
user.update_icons()
cracked = 1
icon_state = "cracker1"
var/obj/item/weapon/toy/xmas_cracker/other_half = new /obj/item/weapon/toy/xmas_cracker(target)
other_half.cracked = 1
other_half.icon_state = "cracker2"
target.put_in_active_hand(other_half)
playsound(user, 'sound/effects/snap.ogg', 50, 1)
return 1
return ..()
/obj/item/clothing/head/festive
name = "festive paper hat"
icon_state = "xmashat"
desc = "A crappy paper hat that you are REQUIRED to wear."
flags_inv = 0
flags = FPRINT|TABLEPASS
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)

View File

@@ -101,6 +101,7 @@ var/global/Holiday = null
switch(DD) switch(DD)
if(10) Holiday = "Human-Rights Day" if(10) Holiday = "Human-Rights Day"
if(14) Holiday = "Monkey Day" if(14) Holiday = "Monkey Day"
if(21) if(YY==12) Holiday = "End of the World"
if(22) Holiday = "Orgasming Day" //lol. These all actually exist if(22) Holiday = "Orgasming Day" //lol. These all actually exist
if(24) Holiday = "Christmas Eve" if(24) Holiday = "Christmas Eve"
if(25) Holiday = "Christmas" if(25) Holiday = "Christmas"
@@ -120,14 +121,13 @@ var/global/Holiday = null
set desc = "Force-set the Holiday variable to make the game think it's a certain day." set desc = "Force-set the Holiday variable to make the game think it's a certain day."
if(!check_rights(R_SERVER)) return if(!check_rights(R_SERVER)) return
if(!T) return
Holiday = T Holiday = T
//get a new station name //get a new station name
station_name = null station_name = null
station_name() station_name()
//update our hub status //update our hub status
world.update_status() world.update_status()
// Holiday_Game_Start() Holiday_Game_Start()
message_admins("\blue ADMIN: Event: [key_name(src)] force-set Holiday to \"[Holiday]\"") message_admins("\blue ADMIN: Event: [key_name(src)] force-set Holiday to \"[Holiday]\"")
log_admin("[key_name(src)] force-set Holiday to \"[Holiday]\"") log_admin("[key_name(src)] force-set Holiday to \"[Holiday]\"")
@@ -141,10 +141,9 @@ var/global/Holiday = null
switch(Holiday) //special holidays switch(Holiday) //special holidays
if("Easter") if("Easter")
//do easter stuff //do easter stuff
if("Christmas ") if("Christmas Eve","Christmas")
//do christmas stuff Christmas_Game_Start()
else
//etc. you get what I'm getting at
return return
//Nested in the random events loop. Will be triggered every 2 minutes //Nested in the random events loop. Will be triggered every 2 minutes
@@ -171,4 +170,9 @@ var/global/Holiday = null
if(S.z != 1) continue if(S.z != 1) continue
containers += S containers += S
message_admins("\blue DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])")*/ message_admins("\blue DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])")*/
if("End of the World")
if(prob(eventchance)) GameOver()
if("Christmas","Christmas Eve")
if(prob(eventchance)) ChristmasEvent()

View File

@@ -0,0 +1,10 @@
/proc/GameOver()
if(!hadevent)
hadevent = 1
message_admins("The apocalypse has begun! (this holiday event can be disabled by toggling events off within 60 seconds)")
spawn(600)
if(!config.allow_random_events) return
Show2Group4Delay(ScreenText(null,"<center><font color='red' size='8'>GAME OVER</font></center>"),null,150)
for(var/i=1,i<=4,i++)
event()
sleep(50)

View File

@@ -9,11 +9,13 @@
blobevent = 1 blobevent = 1
spawn(0) spawn(0)
dotheblobbaby() dotheblobbaby()
spawn(12000) // blob event can last up to 20 minutes spawn(3000)
blobevent = 0 blobevent = 0
spawn(rand(1000, 2000)) //Delayed announcements to keep the crew on their toes. spawn(rand(1000, 2000)) //Delayed announcements to keep the crew on their toes.
command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
world << sound('sound/AI/outbreak5.ogg') for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/outbreak5.ogg')
/proc/dotheblobbaby() /proc/dotheblobbaby()
if (blobevent) if (blobevent)
@@ -25,5 +27,5 @@
if(B.z != 1) if(B.z != 1)
continue continue
B.Life() B.Life()
spawn(280) // advance 1 tile every 30 seconds spawn(30)
dotheblobbaby() dotheblobbaby()

View File

@@ -540,7 +540,7 @@ ________________________________________________________________________________
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1) playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
for (var/mob/O in hearers(3, P.loc)) for (var/mob/O in hearers(3, P.loc))
O.show_message(text("\icon[P] *[P.ttone]*")) O.show_message(text("\icon[P] *[P.ttone]*"))
P.overlays = null P.overlays.Cut()
P.overlays += image('icons/obj/pda.dmi', "pda-r") P.overlays += image('icons/obj/pda.dmi', "pda-r")
if("Inject") if("Inject")
@@ -976,7 +976,7 @@ ________________________________________________________________________________
flick("apc-spark", src) flick("apc-spark", src)
A.emagged = 1 A.emagged = 1
A.locked = 0 A.locked = 0
A.updateicon() A.update_icon()
else else
U << "\red This APC has run dry of power. You must find another source." U << "\red This APC has run dry of power. You must find another source."

View File

@@ -8,7 +8,9 @@
if(pick_turfs.len) if(pick_turfs.len)
//All ready. Announce that bad juju is afoot. //All ready. Announce that bad juju is afoot.
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert") command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
world << sound('sound/AI/spanomalies.ogg') for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/spanomalies.ogg')
//prob(20) can be approximated to 1 wormhole every 5 turfs! //prob(20) can be approximated to 1 wormhole every 5 turfs!
//admittedly less random but totally worth it >_< //admittedly less random but totally worth it >_<

View File

@@ -124,7 +124,7 @@
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow; /obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
/obj/item/weapon/melee/energy/sword:4:Energy Sword; /obj/item/weapon/melee/energy/sword:4:Energy Sword;
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle; /obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
/obj/item/weapon/storage/emp_kit:3:5 EMP Grenades; /obj/item/weapon/storage/box/emps:3:5 EMP Grenades;
Whitespace:Seperator; Whitespace:Seperator;
Stealthy and Inconspicuous Weapons; Stealthy and Inconspicuous Weapons;
/obj/item/weapon/pen/paralysis:3:Paralysis Pen; /obj/item/weapon/pen/paralysis:3:Paralysis Pen;
@@ -141,7 +141,7 @@ Whitespace:Seperator;
Devices and Tools; Devices and Tools;
/obj/item/weapon/card/emag:3:Cryptographic Sequencer; /obj/item/weapon/card/emag:3:Cryptographic Sequencer;
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox; /obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit; /obj/item/weapon/storage/box/syndie_kit/space:3:Space Suit;
/obj/item/clothing/glasses/thermal/syndi:3:Thermal Imaging Glasses; /obj/item/clothing/glasses/thermal/syndi:3:Thermal Imaging Glasses;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key; /obj/item/device/encryptionkey/binary:3:Binary Translator Key;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module; /obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
@@ -151,8 +151,8 @@ Devices and Tools;
/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board; /obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board;
Whitespace:Seperator; Whitespace:Seperator;
Implants; Implants;
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant; /obj/item/weapon/storage/box/syndie_kit/imp_freedom:3:Freedom Implant;
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); /obj/item/weapon/storage/box/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
Whitespace:Seperator; Whitespace:Seperator;
(Pointless) Badassery; (Pointless) Badassery;
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"} /obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}

View File

@@ -34,7 +34,7 @@
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow; /obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
/obj/item/weapon/melee/energy/sword:4:Energy Sword; /obj/item/weapon/melee/energy/sword:4:Energy Sword;
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle; /obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
/obj/item/weapon/storage/emp_kit:3:5 EMP Grenades; /obj/item/weapon/storage/box/emps:3:5 EMP Grenades;
Whitespace:Seperator; Whitespace:Seperator;
Stealthy and Inconspicuous Weapons; Stealthy and Inconspicuous Weapons;
/obj/item/weapon/pen/paralysis:3:Paralysis Pen; /obj/item/weapon/pen/paralysis:3:Paralysis Pen;
@@ -51,7 +51,7 @@ Whitespace:Seperator;
Devices and Tools; Devices and Tools;
/obj/item/weapon/card/emag:3:Cryptographic Sequencer; /obj/item/weapon/card/emag:3:Cryptographic Sequencer;
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox; /obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit; /obj/item/weapon/storage/box/syndie_kit/space:3:Space Suit;
/obj/item/clothing/glasses/thermal/syndi:3:Thermal Imaging Glasses; /obj/item/clothing/glasses/thermal/syndi:3:Thermal Imaging Glasses;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key; /obj/item/device/encryptionkey/binary:3:Binary Translator Key;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module; /obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
@@ -61,11 +61,10 @@ Devices and Tools;
/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board; /obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board;
Whitespace:Seperator; Whitespace:Seperator;
Implants; Implants;
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant; /obj/item/weapon/storage/box/syndie_kit/imp_freedom:3:Freedom Implant;
/obj/item/weapon/storage/box/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
/obj/item/weapon/implant/explosive:6:Explosive Implant (DANGER!); /obj/item/weapon/implant/explosive:6:Explosive Implant (DANGER!);
/obj/item/weapon/implant/compressed:4:Compressed Matter Implant; /obj/item/weapon/implant/compressed:4:Compressed Matter Implant;Whitespace:Seperator;
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
Whitespace:Seperator;
(Pointless) Badassery; (Pointless) Badassery;
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"} /obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
@@ -233,7 +232,9 @@ Whitespace:Seperator;
world << sound('commandreport.ogg') world << sound('commandreport.ogg')
/* command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.") /* command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
world << sound('sound/AI/intercept.ogg') for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/intercept.ogg')
if(security_level < SEC_LEVEL_BLUE) if(security_level < SEC_LEVEL_BLUE)
set_security_level(SEC_LEVEL_BLUE)*/ set_security_level(SEC_LEVEL_BLUE)*/
@@ -320,7 +321,6 @@ Whitespace:Seperator;
if(applicant) if(applicant)
candidates += applicant candidates += applicant
drafted.Remove(applicant) drafted.Remove(applicant)
log_admin("[applicant.key] drafted into antagonist role against their preferences.")
message_admins("[applicant.key] drafted into antagonist role against their preferences.") message_admins("[applicant.key] drafted into antagonist role against their preferences.")
else // Not enough scrubs, ABORT ABORT ABORT else // Not enough scrubs, ABORT ABORT ABORT

View File

@@ -37,9 +37,9 @@ var/global/datum/controller/gameticker/ticker
var/triai = 0//Global holder for Triumvirate var/triai = 0//Global holder for Triumvirate
/datum/controller/gameticker/proc/pregame() /datum/controller/gameticker/proc/pregame()
login_music = pick('sound/ambience/title1.ogg','sound/ambience/title2.ogg','sound/ambience/b12_combined_start.ogg') // choose title music! login_music = pick('sound/ambience/title2.ogg','sound/ambience/title1.ogg','sound/ambience/b12_combined_start.ogg') // choose title music!
/* for(var/mob/new_player/M in mob_list) for(var/mob/new_player/M in mob_list)
if(M.client) M.client.playtitlemusic()*/ if(M.client) M.client.playtitlemusic()
do do
pregame_timeleft = 180 pregame_timeleft = 180
world << "<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>" world << "<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>"
@@ -123,7 +123,8 @@ var/global/datum/controller/gameticker/ticker
//Holiday Round-start stuff ~Carn //Holiday Round-start stuff ~Carn
Holiday_Game_Start() Holiday_Game_Start()
start_events() //handles random events and space dust. // start_events() //handles random events and space dust.
//new random event system is handled from the MC.
var/admins_number = 0 var/admins_number = 0
for(var/client/C) for(var/client/C)
@@ -274,7 +275,9 @@ var/global/datum/controller/gameticker/ticker
job_master.EquipRank(player, player.mind.assigned_role, 0) job_master.EquipRank(player, player.mind.assigned_role, 0)
EquipCustomItems(player) EquipCustomItems(player)
if(captainless) if(captainless)
world << "Captainship not forced on anyone." for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << "Captainship not forced on anyone."
proc/process() proc/process()

View File

@@ -1,5 +1,6 @@
/datum/intercept_text /datum/intercept_text
var/text var/text
/*
var/prob_correct_person_lower = 20 var/prob_correct_person_lower = 20
var/prob_correct_person_higher = 80 var/prob_correct_person_higher = 80
var/prob_correct_job_lower = 20 var/prob_correct_job_lower = 20
@@ -8,6 +9,7 @@
var/prob_correct_print_higher = 80 var/prob_correct_print_higher = 80
var/prob_correct_objective_lower = 20 var/prob_correct_objective_lower = 20
var/prob_correct_objective_higher = 80 var/prob_correct_objective_higher = 80
*/
var/list/org_names_1 = list( var/list/org_names_1 = list(
"Blighted", "Blighted",
"Defiled", "Defiled",
@@ -48,7 +50,8 @@
"Booga", "Booga",
"The Goatee of Wrath", "The Goatee of Wrath",
"Tam Lin", "Tam Lin",
"Species 3157" "Species 3157",
"Small Prick"
) )
@@ -85,7 +88,9 @@
else else
return null return null
// NOTE: Commentted out was the code which showed the chance of someone being an antag. If you want to re-add it, just uncomment the code.
/*
/datum/intercept_text/proc/pick_mob() /datum/intercept_text/proc/pick_mob()
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)
@@ -104,11 +109,13 @@
return num2text(md5(dude.dna.uni_identity)) return num2text(md5(dude.dna.uni_identity))
else else
return num2text(md5(num2text(rand(1,10000)))) return num2text(md5(num2text(rand(1,10000))))
*/
/datum/intercept_text/proc/build_traitor(datum/mind/correct_person) /datum/intercept_text/proc/build_traitor(datum/mind/correct_person)
var/name_1 = pick(src.org_names_1) var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2) var/name_2 = pick(src.org_names_2)
/*
var/fingerprints var/fingerprints
var/traitor_name var/traitor_name
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher) var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
@@ -121,8 +128,11 @@
traitor_name = pick_mob() traitor_name = pick_mob()
else else
fingerprints = pick_fingerprints() fingerprints = pick_fingerprints()
*/
src.text += "<BR><BR>The <B>[name_1] [name_2]</B> implied an undercover operative was acting on their behalf on the station currently.<BR>" src.text += "<BR><BR>The <B>[name_1] [name_2]</B> implied an undercover operative was acting on their behalf on the station currently."
src.text += "It would be in your best interests to suspect everybody, as these undercover operatives could have implants which trigger them to have their memories removed until they are needed. He, or she, could even be a high ranking officer."
/*
src.text += "After some investigation, we " src.text += "After some investigation, we "
if(traitor_name) if(traitor_name)
src.text += "are [prob_right_dude]% sure that [traitor_name] may have been involved, and should be closely observed." src.text += "are [prob_right_dude]% sure that [traitor_name] may have been involved, and should be closely observed."
@@ -130,11 +140,13 @@
else else
src.text += "discovered the following set of fingerprints ([fingerprints]) on sensitive materials, and their owner should be closely observed." src.text += "discovered the following set of fingerprints ([fingerprints]) on sensitive materials, and their owner should be closely observed."
src.text += "However, these could also belong to a current Cent. Com employee, so do not act on this without reason." src.text += "However, these could also belong to a current Cent. Com employee, so do not act on this without reason."
*/
/datum/intercept_text/proc/build_cult(datum/mind/correct_person) /datum/intercept_text/proc/build_cult(datum/mind/correct_person)
var/name_1 = pick(src.org_names_1) var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2) var/name_2 = pick(src.org_names_2)
/*
var/traitor_name var/traitor_name
var/traitor_job var/traitor_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher) var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
@@ -156,19 +168,23 @@
traitor_name = correct_person:current traitor_name = correct_person:current
else else
traitor_name = pick_mob() traitor_name = pick_mob()
*/
src.text += "<BR><BR>It has been brought to our attention that the [name_1] [name_2] have stumbled upon some dark secrets. They apparently want to spread the dangerous knowledge on as many stations as they can.<BR>" src.text += "<BR><BR>It has been brought to our attention that the [name_1] [name_2] have stumbled upon some dark secrets. They apparently want to spread the dangerous knowledge onto as many stations as they can."
src.text += "Watch out for the following: praying to an unfamilar god, preaching the word of \[REDACTED\], sacrifices, magical dark power, living constructs of evil and a portal to the dimension of the underworld."
/*
src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been converted " src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been converted "
src.text += "and instilled with the idea of the flimsiness of the real world, seeking to destroy it. " src.text += "and instilled with the idea of the flimsiness of the real world, seeking to destroy it. "
if(prob(prob_right_dude)) if(prob(prob_right_dude))
src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this " src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this "
src.text += "organisation." src.text += "organisation."
src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions." src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions."
*/
/datum/intercept_text/proc/build_rev(datum/mind/correct_person) /datum/intercept_text/proc/build_rev(datum/mind/correct_person)
var/name_1 = pick(src.org_names_1) var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2) var/name_2 = pick(src.org_names_2)
/*
var/traitor_name var/traitor_name
var/traitor_job var/traitor_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher) var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
@@ -192,14 +208,17 @@
traitor_name = correct_person.current traitor_name = correct_person.current
else else
traitor_name = src.pick_mob() traitor_name = src.pick_mob()
*/
src.text += "<BR><BR>It has been brought to our attention that the [name_1] [name_2] are attempting to stir unrest on one of our stations in your sector. <BR>" src.text += "<BR><BR>It has been brought to our attention that the [name_1] [name_2] are attempting to stir unrest on one of our stations in your sector."
src.text += "Watch out for suspicious activity among the crew and make sure that all heads of staff report in periodically."
/*
src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been brainwashed " src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been brainwashed "
src.text += "at a recent conference, and their department should be closely monitored for signs of mutiny. " src.text += "at a recent conference, and their department should be closely monitored for signs of mutiny. "
if(prob(prob_right_dude)) if(prob(prob_right_dude))
src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this " src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this "
src.text += "organisation." src.text += "organisation."
src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions." src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions."
*/
/datum/intercept_text/proc/build_wizard(datum/mind/correct_person) /datum/intercept_text/proc/build_wizard(datum/mind/correct_person)
@@ -211,7 +230,7 @@
src.text += "Known attributes include: Brown sandals, a large blue hat, a voluptous white beard, and an inclination to cast spells." src.text += "Known attributes include: Brown sandals, a large blue hat, a voluptous white beard, and an inclination to cast spells."
/datum/intercept_text/proc/build_nuke(datum/mind/correct_person) /datum/intercept_text/proc/build_nuke(datum/mind/correct_person)
src.text += "<BR><BR>Cent. Com recently recieved a report of a plot to destory one of our stations in your area. We believe the Nuclear Authentication Disc " src.text += "<BR><BR>Cent. Com recently recieved a report of a plot to destroy one of our stations in your area. We believe the Nuclear Authentication Disc "
src.text += "that is standard issue aboard your vessel may be a target. We recommend removal of this object, and it's storage in a safe " src.text += "that is standard issue aboard your vessel may be a target. We recommend removal of this object, and it's storage in a safe "
src.text += "environment. As this may cause panic among the crew, all efforts should be made to keep this information a secret from all but " src.text += "environment. As this may cause panic among the crew, all efforts should be made to keep this information a secret from all but "
src.text += "the most trusted crew-members." src.text += "the most trusted crew-members."
@@ -226,6 +245,7 @@
var/cname = pick(src.changeling_names) var/cname = pick(src.changeling_names)
var/orgname1 = pick(src.org_names_1) var/orgname1 = pick(src.org_names_1)
var/orgname2 = pick(src.org_names_2) var/orgname2 = pick(src.org_names_2)
/*
var/changeling_name var/changeling_name
var/changeling_job var/changeling_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher) var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
@@ -245,9 +265,12 @@
changeling_name = src.pick_mob() changeling_name = src.pick_mob()
else else
changeling_name = src.pick_mob() changeling_name = src.pick_mob()
*/
src.text += "<BR><BR>We have received a report that a dangerous alien lifeform known only as \"[cname]\" may have infiltrated your crew. " src.text += "<BR><BR>We have received a report that a dangerous alien lifeform known only as \"[cname]\" may have infiltrated your crew. "
/*
src.text += "Our intelligence suggests a [prob_right_job]% chance that a [changeling_job] on board your station has been replaced by the alien. " src.text += "Our intelligence suggests a [prob_right_job]% chance that a [changeling_job] on board your station has been replaced by the alien. "
src.text += "Additionally, the report indicates a [prob_right_dude]% chance that [changeling_name] may have been in contact with the lifeform at a recent social gathering. " src.text += "Additionally, the report indicates a [prob_right_dude]% chance that [changeling_name] may have been in contact with the lifeform at a recent social gathering. "
*/
src.text += "These lifeforms are assosciated with the [orgname1] [orgname2] and may be attempting to acquire sensitive materials on their behalf. " src.text += "These lifeforms are assosciated with the [orgname1] [orgname2] and may be attempting to acquire sensitive materials on their behalf. "
src.text += "Please take care not to alarm the crew, as [cname] may take advantage of a panic situation." src.text += "Please take care not to alarm the crew, as [cname] may take advantage of a panic situation. Remember, they can be anybody, suspect everybody!"

View File

@@ -65,6 +65,8 @@
if(alert(AI_mind.current,"Do you want to use an alternative sprite for your real core?",,"Yes","No")=="Yes") if(alert(AI_mind.current,"Do you want to use an alternative sprite for your real core?",,"Yes","No")=="Yes")
AI_mind.current.icon_state = "ai-malf2" AI_mind.current.icon_state = "ai-malf2"
*/ */
if(emergency_shuttle)
emergency_shuttle.always_fake_recall = 1
spawn (rand(waittime_l, waittime_h)) spawn (rand(waittime_l, waittime_h))
send_intercept() send_intercept()
..() ..()
@@ -131,7 +133,11 @@
if (station_captured && !to_nuke_or_not_to_nuke) if (station_captured && !to_nuke_or_not_to_nuke)
return 1 return 1
if (is_malf_ai_dead()) if (is_malf_ai_dead())
return 1 if(config.continous_rounds)
if(emergency_shuttle)
emergency_shuttle.always_fake_recall = 0
else
return 1
return ..() //check for shuttle and nuke return ..() //check for shuttle and nuke
@@ -165,7 +171,9 @@
ticker.mode:malf_mode_declared = 1 ticker.mode:malf_mode_declared = 1
for(var/datum/mind/AI_mind in ticker.mode:malf_ai) for(var/datum/mind/AI_mind in ticker.mode:malf_ai)
AI_mind.current.verbs -= /datum/game_mode/malfunction/proc/takeover AI_mind.current.verbs -= /datum/game_mode/malfunction/proc/takeover
world << sound('sound/AI/aimalf.ogg') for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
M << sound('sound/AI/aimalf.ogg')
/datum/game_mode/malfunction/proc/ai_win() /datum/game_mode/malfunction/proc/ai_win()

View File

@@ -114,7 +114,7 @@
//Prevent meteors from blowing up the singularity's containment. //Prevent meteors from blowing up the singularity's containment.
//Changing emitter and generator ex_act would result in them being bomb and C4 proof. //Changing emitter and generator ex_act would result in them being bomb and C4 proof.
if(!istype(A,/obj/machinery/emitter) && \ if(!istype(A,/obj/machinery/power/emitter) && \
!istype(A,/obj/machinery/field_generator) && \ !istype(A,/obj/machinery/field_generator) && \
prob(15)) prob(15))
@@ -141,7 +141,7 @@
spawn(0) spawn(0)
//Prevent meteors from blowing up the singularity's containment. //Prevent meteors from blowing up the singularity's containment.
//Changing emitter and generator ex_act would result in them being bomb and C4 proof //Changing emitter and generator ex_act would result in them being bomb and C4 proof
if(!istype(A,/obj/machinery/emitter) && \ if(!istype(A,/obj/machinery/power/emitter) && \
!istype(A,/obj/machinery/field_generator)) !istype(A,/obj/machinery/field_generator))
if(--src.hits <= 0) if(--src.hits <= 0)
del(src) //Dont blow up singularity containment if we get stuck there. del(src) //Dont blow up singularity containment if we get stuck there.

View File

@@ -295,7 +295,7 @@ datum/objective/hijack
datum/objective/block datum/objective/block
explanation_text = "Do not allow any humans to escape on the shuttle alive." explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive."
check_completion() check_completion()
@@ -474,16 +474,26 @@ datum/objective/steal
"a hand teleporter" = /obj/item/weapon/hand_tele, "a hand teleporter" = /obj/item/weapon/hand_tele,
"an RCD" = /obj/item/weapon/rcd, "an RCD" = /obj/item/weapon/rcd,
"a jetpack" = /obj/item/weapon/tank/jetpack, "a jetpack" = /obj/item/weapon/tank/jetpack,
"a captains jumpsuit" = /obj/item/clothing/under/rank/captain, "a captain's jumpsuit" = /obj/item/clothing/under/rank/captain,
"a functional AI" = /obj/item/device/aicard, "a functional AI" = /obj/item/device/aicard,
"a pair of magboots" = /obj/item/clothing/shoes/magboots, "a pair of magboots" = /obj/item/clothing/shoes/magboots,
"the station blueprints" = /obj/item/blueprints, "the station blueprints" = /obj/item/blueprints,
"a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid, "a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid,
"28 moles of plasma (full tank)" = /obj/item/weapon/tank, "28 moles of plasma (full tank)" = /obj/item/weapon/tank,
"a sample of slime extract" = /obj/item/slime_extract,
"a piece of corgi meat" = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi,
"a research director's jumpsuit" = /obj/item/clothing/under/rank/research_director,
"a chief engineer's jumpsuit" = /obj/item/clothing/under/rank/chief_engineer,
"a chief medical officer's jumpsuit" = /obj/item/clothing/under/rank/chief_medical_officer,
"a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security,
"a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel,
"the hypospray" = /obj/item/weapon/reagent_containers/hypospray,
"the captain's pinpointer" = /obj/item/weapon/pinpointer,
"an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof,
) )
var/global/possible_items_special[] = list( var/global/possible_items_special[] = list(
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear, /*"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,*///Broken with the change to nuke disk making it respawn on z level change.
"nuclear gun" = /obj/item/weapon/gun/energy/gun/nuclear, "nuclear gun" = /obj/item/weapon/gun/energy/gun/nuclear,
"diamond drill" = /obj/item/weapon/pickaxe/diamonddrill, "diamond drill" = /obj/item/weapon/pickaxe/diamonddrill,
"bag of holding" = /obj/item/weapon/storage/backpack/holding, "bag of holding" = /obj/item/weapon/storage/backpack/holding,

View File

@@ -89,6 +89,8 @@
for(var/datum/mind/rev_mind in head_revolutionaries) for(var/datum/mind/rev_mind in head_revolutionaries)
greet_revolutionary(rev_mind) greet_revolutionary(rev_mind)
modePlayer += head_revolutionaries modePlayer += head_revolutionaries
if(emergency_shuttle)
emergency_shuttle.always_fake_recall = 1
spawn (rand(waittime_l, waittime_h)) spawn (rand(waittime_l, waittime_h))
send_intercept() send_intercept()
..() ..()
@@ -165,6 +167,11 @@
//Checks if the round is over// //Checks if the round is over//
/////////////////////////////// ///////////////////////////////
/datum/game_mode/revolution/check_finished() /datum/game_mode/revolution/check_finished()
if(config.continous_rounds)
if(finished != 0)
if(emergency_shuttle)
emergency_shuttle.always_fake_recall = 0
return ..()
if(finished != 0) if(finished != 0)
return 1 return 1
else else

View File

@@ -144,8 +144,6 @@ datum/hSB
continue continue
if(istype(O, /obj/item/weapon/melee/energy/sword)) if(istype(O, /obj/item/weapon/melee/energy/sword))
continue continue
if(istype(O, /obj/effect/critter))
continue
if(istype(O, /obj/structure)) if(istype(O, /obj/structure))
continue continue
selectable += O selectable += O

View File

@@ -15,5 +15,7 @@
M.CanBuild() M.CanBuild()
return 1 return 1
/datum/game_mode/sandbox/check_finished() /datum/game_mode/sandbox/post_setup()
return 0 ..()
if(emergency_shuttle)
emergency_shuttle.always_fake_recall = 1

View File

@@ -38,8 +38,10 @@
dat += "<HR>" dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=17'>Mastercrafted Armor Set</A><BR>" dat += "<A href='byond://?src=\ref[src];spell_choice=17'>Mastercrafted Armor Set</A><BR>"
dat += "<HR>" dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=18'>Staff of Animation</A><BR>"
dat += "<HR>"
if(op) if(op)
dat += "<A href='byond://?src=\ref[src];spell_choice=18'>Re-memorize Spells</A><BR>" dat += "<A href='byond://?src=\ref[src];spell_choice=19'>Re-memorize Spells</A><BR>"
user << browse(dat, "window=radio") user << browse(dat, "window=radio")
onclose(user, "radio") onclose(user, "radio")
return return
@@ -54,9 +56,9 @@
if ( src.loc == usr || (in_range(src,usr) && istype(src.loc, /turf))) if ( src.loc == usr || (in_range(src,usr) && istype(src.loc, /turf)))
usr.set_machine(src) usr.set_machine(src)
if(href_list["spell_choice"]) if(href_list["spell_choice"])
if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 18) if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 19)
src.uses-- src.uses--
var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Mastercrafted Armor Set") var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Mastercrafted Armor Set", "Staff of Animation")
var/already_knows = 0 var/already_knows = 0
for(var/obj/effect/proc_holder/spell/aspell in usr.spell_list) for(var/obj/effect/proc_holder/spell/aspell in usr.spell_list)
if(available_spells[text2num(href_list["spell_choice"])] == aspell.name) if(available_spells[text2num(href_list["spell_choice"])] == aspell.name)
@@ -72,7 +74,7 @@
src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage." src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage."
if ("2") if ("2")
feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr) usr.spell_list += new /obj/effect/proc_holder/spell/dumbfire/fireball(usr)
src.temp = "This spell fires a fireball in the direction you're facing and does not require wizard garb. Be careful not to fire it at people that are standing next to you." src.temp = "This spell fires a fireball in the direction you're facing and does not require wizard garb. Be careful not to fire it at people that are standing next to you."
if ("3") if ("3")
feedback_add_details("wizard_spell_learned","DG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells feedback_add_details("wizard_spell_learned","DG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
@@ -142,8 +144,13 @@
new /obj/item/clothing/head/helmet/space/rig/wizard(get_turf(usr)) new /obj/item/clothing/head/helmet/space/rig/wizard(get_turf(usr))
src.temp = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." src.temp = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space."
src.max_uses-- src.max_uses--
if("18")
feedback_add_details("wizard_spell_learned","SA") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
new /obj/item/weapon/gun/energy/staff/animate(get_turf(usr))
src.temp = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
src.max_uses--
if (href_list["spell_choice"] == "18") if (href_list["spell_choice"] == "19")
var/area/wizard_station/A = locate() var/area/wizard_station/A = locate()
if(usr in A.contents) if(usr in A.contents)
src.uses = src.max_uses src.uses = src.max_uses

View File

@@ -183,6 +183,10 @@
/datum/game_mode/wizard/check_finished() /datum/game_mode/wizard/check_finished()
if(config.continous_rounds)
return ..()
var/wizards_alive = 0 var/wizards_alive = 0
for(var/datum/mind/wizard in wizards) for(var/datum/mind/wizard in wizards)
if(!istype(wizard.current,/mob/living/carbon)) if(!istype(wizard.current,/mob/living/carbon))
@@ -198,6 +202,7 @@
return 1 return 1
/datum/game_mode/wizard/declare_completion() /datum/game_mode/wizard/declare_completion()
if(finished) if(finished)
feedback_set_details("round_end_result","loss - wizard killed") feedback_set_details("round_end_result","loss - wizard killed")

View File

@@ -127,15 +127,17 @@
else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid)) else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid))
var/mob/living/carbon/george = M var/mob/living/carbon/george = M
//they can only hold things :( //they can only hold things :(
if(george.get_active_hand() && (istype(george.get_active_hand(), /obj/item/weapon/card/id) || istype(george.get_active_hand(), /obj/item/device/pda)) && src.check_access(george.get_active_hand())) if(src.check_access(george.get_active_hand()))
return 1 return 1
return 0 return 0
/obj/proc/check_access(obj/item/weapon/card/id/I) /obj/item/proc/GetAccess()
return list()
if (istype(I, /obj/item/device/pda)) /obj/item/proc/GetID()
var/obj/item/device/pda/pda = I return null
I = pda.id
/obj/proc/check_access(obj/item/I)
if(!src.req_access && !src.req_one_access) //no requirements if(!src.req_access && !src.req_one_access) //no requirements
return 1 return 1
@@ -145,14 +147,14 @@
var/list/L = src.req_access var/list/L = src.req_access
if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements
return 1 return 1
if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access if(!I)
return 0 return 0
for(var/req in src.req_access) for(var/req in src.req_access)
if(!(req in I.access)) //doesn't have this access if(!(req in I.GetAccess())) //doesn't have this access
return 0 return 0
if(src.req_one_access && src.req_one_access.len) if(src.req_one_access && src.req_one_access.len)
for(var/req in src.req_one_access) for(var/req in src.req_one_access)
if(req in I.access) //has an access from the single access list if(req in I.GetAccess()) //has an access from the single access list
return 1 return 1
return 0 return 0
return 1 return 1
@@ -174,92 +176,6 @@
return 0 return 0
return 1 return 1
/proc/get_access(job)
switch(job)
if("Geneticist")
return list(access_medical, access_morgue, access_genetics)
if("Station Engineer")
return list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
if("Assistant")
if(config.assistant_maint)
return list(access_maint_tunnels)
else
return list()
if("Chaplain")
return list(access_morgue, access_chapel_office, access_crematorium)
if("Detective")
return list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
if("Medical Doctor")
return list(access_medical, access_morgue, access_surgery, access_virology)
if("Botanist") // -- TLE
return list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
if("Librarian") // -- TLE
return list(access_library)
if("Lawyer") //Muskets 160910
return list(access_lawyer, access_court)
if("Captain")
return get_all_accesses()
if("Security Officer")
return list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels)
if("Warden")
return list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels)
if("Scientist")
return list(access_tox, access_tox_storage, access_research, access_xenobiology)
if("Head of Security")
return list(access_medical, access_morgue, access_tox, access_tox_storage, access_chemistry, access_genetics, access_court,
access_teleporter, access_heads, access_tech_storage, access_security, access_sec_doors, access_brig, access_atmospherics,
access_maint_tunnels, access_bar, access_janitor, access_kitchen, access_robotics, access_armory, access_hydroponics,
access_theatre, access_research, access_hos, access_RC_announce, access_forensics_lockers, access_keycard_auth)
if("Head of Personnel")
return list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers,
access_tox, access_tox_storage, access_chemistry, access_medical, access_genetics, access_engine,
access_emergency_storage, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
access_crematorium, access_kitchen, access_robotics, 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_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway)
if("Atmospheric Technician")
return list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
if("Bartender")
return list(access_bar)
if("Chemist")
return list(access_medical, access_chemistry)
if("Janitor")
return list(access_janitor, access_maint_tunnels)
if("Clown")
return list(access_clown, access_theatre)
if("Mime")
return list(access_mime, access_theatre)
if("Chef")
return list(access_kitchen, access_morgue)
if("Roboticist")
return list(access_robotics, access_tech_storage, access_morgue) //As a job that handles so many corpses, it makes sense for them to have morgue access.
if("Cargo Technician")
return list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
if("Shaft Miner")
return list(access_mining, access_mint, access_mining_station)
if("Quartermaster")
return list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
if("Chief Engineer")
return 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_heads, access_ai_upload, access_construction, access_robotics,
access_mint, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat)
if("Research Director")
return list(access_rd, access_heads, access_tox, access_genetics,
access_tox_storage, access_teleporter,
access_research, access_robotics, access_xenobiology,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway)
if("Virologist")
return list(access_medical, access_virology)
if("Chief Medical Officer")
return list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth)
else
return list()
/proc/get_centcom_access(job) /proc/get_centcom_access(job)
switch(job) switch(job)
if("VIP Guest") if("VIP Guest")
@@ -285,12 +201,12 @@
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court, return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
access_medical, access_genetics, access_morgue, access_rd, access_medical, access_genetics, access_morgue, access_rd,
access_tox, access_tox_storage, access_chemistry, access_engine, access_engine_equip, access_maint_tunnels, access_tox, access_tox_storage, access_chemistry, access_engine, access_engine_equip, access_maint_tunnels,
access_external_airlocks, access_emergency_storage, access_change_ids, access_ai_upload, access_external_airlocks, access_change_ids, access_ai_upload,
access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers, access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers,
access_tech_storage, access_chapel_office, access_atmospherics, access_kitchen, access_tech_storage, access_chapel_office, access_atmospherics, access_kitchen,
access_bar, access_janitor, access_crematorium, access_robotics, access_cargo, access_cargo_bot, access_construction, access_bar, access_janitor, access_crematorium, access_robotics, access_cargo, access_construction,
access_hydroponics, access_library, access_manufacturing, access_lawyer, access_virology, access_cmo, access_qm, access_clown, access_mime, access_surgery, access_hydroponics, access_library, access_lawyer, access_virology, access_cmo, access_qm, access_clown, access_mime, access_surgery,
access_theatre, access_research, access_mining, access_mailsorting, access_mint_vault, access_mint, access_theatre, access_research, access_mining, access_mailsorting,
access_heads_vault, access_mining_station, access_xenobiology, access_ce, access_hop, access_hos, access_RC_announce, access_heads_vault, access_mining_station, access_xenobiology, access_ce, access_hop, access_hos, access_RC_announce,
access_keycard_auth, access_tcomsat, access_gateway) access_keycard_auth, access_tcomsat, access_gateway)
@@ -309,15 +225,15 @@
if(2) //medbay if(2) //medbay
return list(access_medical, access_genetics, access_morgue, access_chemistry, access_virology, access_surgery, access_cmo) return list(access_medical, access_genetics, access_morgue, access_chemistry, access_virology, access_surgery, access_cmo)
if(3) //research if(3) //research
return list(access_research, access_tox, access_tox_storage, access_xenobiology, access_rd) return list(access_research, access_tox, access_tox_storage, access_robotics, access_xenobiology, access_rd)
if(4) //engineering and maintenance if(4) //engineering and maintenance
return list(access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_construction, access_robotics, access_ce) return list(access_construction, access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_ce)
if(5) //command if(5) //command
return list(access_heads, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_all_personal_lockers, access_heads_vault, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_hop, access_captain) return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_tcomsat, access_gateway, access_all_personal_lockers, access_heads_vault, access_hop, access_captain)
if(6) //station general if(6) //station general
return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime) return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime)
if(7) //supply if(7) //supply
return list(access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_mining, access_mining_station) return list(access_mailsorting, access_mining, access_mining_station, access_cargo, access_qm)
/proc/get_region_accesses_name(var/code) /proc/get_region_accesses_name(var/code)
switch(code) switch(code)
@@ -352,7 +268,7 @@
if(access_court) if(access_court)
return "Courtroom" return "Courtroom"
if(access_forensics_lockers) if(access_forensics_lockers)
return "Detective's Office" return "Forensics"
if(access_medical) if(access_medical)
return "Medical" return "Medical"
if(access_genetics) if(access_genetics)
@@ -360,13 +276,13 @@
if(access_morgue) if(access_morgue)
return "Morgue" return "Morgue"
if(access_tox) if(access_tox)
return "Research Lab" return "R&D Lab"
if(access_tox_storage) if(access_tox_storage)
return "Toxins Storage" return "Toxins Lab"
if(access_chemistry) if(access_chemistry)
return "Chemistry Lab" return "Chemistry Lab"
if(access_rd) if(access_rd)
return "RD Private" return "Research Director"
if(access_bar) if(access_bar)
return "Bar" return "Bar"
if(access_janitor) if(access_janitor)
@@ -374,7 +290,7 @@
if(access_engine) if(access_engine)
return "Engineering" return "Engineering"
if(access_engine_equip) if(access_engine_equip)
return "APCs" return "Power Equipment"
if(access_maint_tunnels) if(access_maint_tunnels)
return "Maintenance" return "Maintenance"
if(access_external_airlocks) if(access_external_airlocks)
@@ -392,7 +308,7 @@
if(access_heads) if(access_heads)
return "Bridge" return "Bridge"
if(access_captain) if(access_captain)
return "Captain Private" return "Captain"
if(access_all_personal_lockers) if(access_all_personal_lockers)
return "Personal Lockers" return "Personal Lockers"
if(access_chapel_office) if(access_chapel_office)
@@ -420,9 +336,9 @@
if(access_virology) if(access_virology)
return "Virology" return "Virology"
if(access_cmo) if(access_cmo)
return "CMO Private" return "Chief Medical Officer"
if(access_qm) if(access_qm)
return "Quartermaster's Office" return "Quartermaster"
/* if(access_clown) /* if(access_clown)
return "HONK! Access" return "HONK! Access"
if(access_mime) if(access_mime)
@@ -440,7 +356,7 @@
if(access_mining_office) if(access_mining_office)
return "Mining Office" return "Mining Office"
if(access_mailsorting) if(access_mailsorting)
return "Delivery Office" return "Cargo Office"
if(access_mint) if(access_mint)
return "Mint" return "Mint"
if(access_mint_vault) if(access_mint_vault)
@@ -448,15 +364,15 @@
if(access_heads_vault) if(access_heads_vault)
return "Main Vault" return "Main Vault"
if(access_mining_station) if(access_mining_station)
return "Mining Station EVA" return "Mining EVA"
if(access_xenobiology) if(access_xenobiology)
return "Xenobiology Lab" return "Xenobiology Lab"
if(access_hop) if(access_hop)
return "HoP Private" return "Head of Personnel"
if(access_hos) if(access_hos)
return "HoS Private" return "Head of Security"
if(access_ce) if(access_ce)
return "CE Private" return "Chief Engineer"
if(access_RC_announce) if(access_RC_announce)
return "RC Announcements" return "RC Announcements"
if(access_keycard_auth) if(access_keycard_auth)
@@ -492,8 +408,8 @@
/proc/get_all_jobs() /proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Chef", "Botanist", "Quartermaster", "Cargo Technician", return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Chef", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", /*"Clown", "Mime", */"Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Shaft Miner", /*"Clown", "Mime", */"Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
"Atmospheric Technician", "Roboticist", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist",
"Research Director", "Scientist", "Head of Security", "Warden", "Detective", "Security Officer") "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer")
/proc/get_all_centcom_jobs() /proc/get_all_centcom_jobs()
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander") return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")

View File

@@ -7,13 +7,17 @@
spawn_positions = -1 spawn_positions = -1
supervisors = "absolutely everyone" supervisors = "absolutely everyone"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list() //See /datum/job/assistant/get_access()
minimal_access = list() //See /datum/job/assistant/get_access()
equip(var/mob/living/carbon/human/H) /datum/job/assistant/equip(var/mob/living/carbon/human/H)
if(!H) return 0 if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
if(H.backbag == 1) return 1
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else /datum/job/assistant/get_access()
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) if(config.assistant_maint)
return 1 return list(access_maint_tunnels)
else
return list()

View File

@@ -9,6 +9,8 @@
selection_color = "#ccccff" selection_color = "#ccccff"
idtype = /obj/item/weapon/card/id/gold idtype = /obj/item/weapon/card/id/gold
req_admin_notify = 1 req_admin_notify = 1
access = list() //See get_access()
minimal_access = list() //See get_access()
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -28,15 +30,18 @@
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
if(H.backbag == 1) if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/id_kit(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
else else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/id_kit(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H L.imp_in = H
L.implanted = 1 L.implanted = 1
world << "<b>[H.real_name] is the captain!</b>" world << "<b>[H.real_name] is the captain!</b>"
return 1 return 1
get_access()
return get_all_accesses()
/datum/job/hop /datum/job/hop
@@ -50,6 +55,18 @@
selection_color = "#ddddff" selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/silver idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1 req_admin_notify = 1
access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers,
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_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_clown, access_mime, 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,
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_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_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -64,7 +81,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt)
if(H.backbag == 1) if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/id_kit(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
else else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/id_kit(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
return 1 return 1

View File

@@ -8,6 +8,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_bar)
minimal_access = list(access_bar)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -48,6 +50,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_kitchen, access_morgue)
minimal_access = list(access_kitchen, access_morgue)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -74,6 +78,8 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
minimal_access = list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -102,15 +108,17 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
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/qm(H), slot_ears) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo(H), slot_ears)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/quartermaster(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/device/pda/quartermaster(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) // H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
if(H.backbag == 1) if(H.backbag == 1)
@@ -130,6 +138,8 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the quartermaster and the head of personnel" supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -138,7 +148,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/cargo(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/device/pda/cargo(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) // H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
if(H.backbag == 1) if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else else
@@ -156,11 +166,13 @@
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"
access = list(access_mining, access_mint, access_mining_station, access_mailsorting)
minimal_access = list(access_mining, access_mint, access_mining_station, access_mailsorting)
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/headset_mine (H), slot_ears) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo (H), slot_ears)
switch(H.backbag) switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
@@ -168,15 +180,15 @@
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) // H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
if(H.backbag == 1) if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_l_hand)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/satchel(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_l_store)
else else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/satchel(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack)
return 1 return 1
@@ -192,6 +204,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_clown, access_theatre)
minimal_access = list(access_clown, access_theatre)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -206,7 +220,8 @@
H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/crayonbox(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/fancy/crayons(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/toy/waterflower(H), slot_in_backpack)
H.mutations.Add(CLUMSY) H.mutations.Add(CLUMSY)
return 1 return 1
@@ -221,6 +236,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_mime, access_theatre)
minimal_access = list(access_mime, access_theatre)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -260,6 +277,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_janitor, access_maint_tunnels)
minimal_access = list(access_janitor, access_maint_tunnels)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -271,7 +290,7 @@
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1 H.equip_to_slot_or_del(new /obj/item/key(H), slot_l_store) return 1
@@ -285,6 +304,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_library)
minimal_access = list(access_library)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -311,6 +332,8 @@ var/global/lawyer = 0//Checks for another lawyer
spawn_positions = 2 spawn_positions = 2
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_lawyer, access_court, access_sec_doors)
minimal_access = list(access_lawyer, access_court, access_sec_doors)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)

View File

@@ -8,6 +8,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#dddddd" selection_color = "#dddddd"
access = list(access_morgue, access_chapel_office, access_crematorium)
minimal_access = list(access_morgue, access_chapel_office, access_crematorium)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)

View File

@@ -9,6 +9,14 @@
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
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_heads, access_construction, access_sec_doors,
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat)
minimal_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_heads, access_construction, access_sec_doors,
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -41,6 +49,9 @@
spawn_positions = 5 spawn_positions = 5
supervisors = "the chief engineer" supervisors = "the chief engineer"
selection_color = "#fff5cc" selection_color = "#fff5cc"
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -73,6 +84,8 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief engineer" supervisors = "the chief engineer"
selection_color = "#fff5cc" selection_color = "#fff5cc"
access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -90,35 +103,4 @@
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
else else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
return 1
/datum/job/roboticist
title = "Roboticist"
flag = ROBOTICIST
department_flag = ENGSEC
faction = "Station"
total_positions = 2
spawn_positions = 2
supervisors = "the chief engineer and research director"
selection_color = "#fff5cc"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_rob(H), slot_ears)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand)
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1 return 1

View File

@@ -3,6 +3,10 @@
//The name of the job //The name of the job
var/title = "NOPE" var/title = "NOPE"
//Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
var/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
var/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
//Bitflags for the job //Bitflags for the job
var/flag = 0 var/flag = 0
var/department_flag = 0 var/department_flag = 0
@@ -36,3 +40,12 @@
/datum/job/proc/equip(var/mob/living/carbon/human/H) /datum/job/proc/equip(var/mob/living/carbon/human/H)
return 1 return 1
/datum/job/proc/get_access()
if(!config) //Needed for robots.
return src.minimal_access
if(config.jobs_have_minimal_access)
return src.minimal_access
else
return src.access

View File

@@ -9,6 +9,12 @@
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
access = list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors)
minimal_access = list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -41,8 +47,10 @@
spawn_positions = 3 spawn_positions = 3
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
alt_titles = list("Surgeon", "Emergency Physician", "Virologist")
access = list(access_medical, access_morgue, access_surgery)
minimal_access = list(access_medical, access_morgue, access_surgery)
alt_titles = list("Surgeon", "Emergency Physician", "Virologist")
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
if(!H) return 0 if(!H) return 0
@@ -82,7 +90,7 @@
//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Guys, behave -Erro
/datum/job/chemist /datum/job/chemist
title = "Chemist" title = "Chemist"
flag = CHEMIST flag = CHEMIST
@@ -92,6 +100,8 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
access = list(access_medical, access_chemistry)
minimal_access = list(access_medical, access_chemistry)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -118,6 +128,8 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief medical officer and research director" supervisors = "the chief medical officer and research director"
selection_color = "#ffeef0" selection_color = "#ffeef0"
access = list(access_medical, access_morgue, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -145,6 +157,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
access = list(access_medical, access_virology)
minimal_access = list(access_medical, access_virology)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)

View File

@@ -9,6 +9,14 @@
selection_color = "#ffddff" selection_color = "#ffddff"
idtype = /obj/item/weapon/card/id/silver idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1 req_admin_notify = 1
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
access_tox_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway)
minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
access_tox_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -36,8 +44,10 @@
spawn_positions = 3 spawn_positions = 3
supervisors = "the research director" supervisors = "the research director"
selection_color = "#ffeeff" selection_color = "#ffeeff"
alt_titles = list("Xenoarcheologist", "Anomalist", "Plasma Researcher", "Xenobiologist")
access = list(access_tox, access_tox_storage, access_research, access_xenobiology)
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenobiology)
alt_titles = list("Xenoarcheologist", "Anomalist", "Plasma Researcher", "Xenobiologist")
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
if(!H) return 0 if(!H) return 0
@@ -46,6 +56,37 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/toxins(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/device/pda/toxins(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
/datum/job/roboticist
title = "Roboticist"
flag = ROBOTICIST
department_flag = MEDSCI
faction = "Station"
total_positions = 2
spawn_positions = 1
supervisors = "research director"
selection_color = "#ffeeff"
access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_ears)
if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand)
if(H.backbag == 1) if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else else

View File

@@ -9,6 +9,14 @@
selection_color = "#ffdddd" selection_color = "#ffdddd"
idtype = /obj/item/weapon/card/id/silver idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1 req_admin_notify = 1
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court,
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway)
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court,
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -47,6 +55,8 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of security" supervisors = "the head of security"
selection_color = "#ffeeee" selection_color = "#ffeeee"
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court)
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
@@ -82,8 +92,10 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of security" supervisors = "the head of security"
selection_color = "#ffeeee" selection_color = "#ffeeee"
alt_titles = list("Forensic Technician")
access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
alt_titles = list("Forensic Technician")
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)
if(!H) return 0 if(!H) return 0
@@ -128,6 +140,8 @@
spawn_positions = 5 spawn_positions = 5
supervisors = "the head of security" supervisors = "the head of security"
selection_color = "#ffeeee" selection_color = "#ffeeee"
access = list(access_security, access_sec_doors, access_brig, access_court)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court)
equip(var/mob/living/carbon/human/H) equip(var/mob/living/carbon/human/H)

View File

@@ -367,13 +367,13 @@ var/global/datum/controller/occupations/job_master
return return
else else
C = new job.idtype(H) C = new job.idtype(H)
C.access = job.get_access()
else else
C = new /obj/item/weapon/card/id(H) C = new /obj/item/weapon/card/id(H)
if(C) if(C)
C.registered_name = H.real_name C.registered_name = H.real_name
C.assignment = title C.assignment = title
C.name = "[C.registered_name]'s ID Card ([C.assignment])" C.name = "[C.registered_name]'s ID Card ([C.assignment])"
C.access = get_access(rank)
H.equip_to_slot_or_del(C, slot_wear_id) H.equip_to_slot_or_del(C, slot_wear_id)
/* if(prob(50)) /* if(prob(50))
H.equip_to_slot_or_del(new /obj/item/weapon/pen(H), slot_r_store) H.equip_to_slot_or_del(new /obj/item/weapon/pen(H), slot_r_store)
@@ -383,7 +383,7 @@ var/global/datum/controller/occupations/job_master
if(locate(/obj/item/device/pda,H))//I bet this could just use locate. It can --SkyMarshal if(locate(/obj/item/device/pda,H))//I bet this could just use locate. It can --SkyMarshal
var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H) var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H)
pda.owner = H.real_name pda.owner = H.real_name
pda.ownjob = H.wear_id.assignment pda.ownjob = C.assignment
pda.name = "PDA-[H.real_name] ([pda.ownjob])" pda.name = "PDA-[H.real_name] ([pda.ownjob])"
return 1 return 1

View File

@@ -175,9 +175,9 @@
user << "\blue <B>The sleeper is already occupied!</B>" user << "\blue <B>The sleeper is already occupied!</B>"
return return
for(var/mob/living/carbon/metroid/M in range(1,G.affecting)) for(var/mob/living/carbon/slime/M in range(1,G.affecting))
if(M.Victim == G.affecting) if(M.Victim == G.affecting)
usr << "[G.affecting.name] will not fit into the sleeper because they have a Metroid latched onto their head." usr << "[G.affecting.name] will not fit into the sleeper because they have a slime latched onto their head."
return return
visible_message("[user] starts putting [G.affecting.name] into the sleeper.", 3) visible_message("[user] starts putting [G.affecting.name] into the sleeper.", 3)
@@ -230,7 +230,13 @@
del(src) del(src)
return return
return return
emp_act(severity)
if(stat & (BROKEN|NOPOWER))
..(severity)
return
if(occupant)
go_out()
..(severity)
alter_health(mob/living/M as mob) alter_health(mob/living/M as mob)
if (M.health > 0) if (M.health > 0)
@@ -267,52 +273,52 @@
proc/inject_inap(mob/living/user as mob) proc/inject_inap(mob/living/user as mob)
if(src.occupant) if(src.occupant && src.occupant.reagents)
if(src.occupant.reagents.get_reagent_amount("inaprovaline") + 30 <= 60) if(src.occupant.reagents.get_reagent_amount("inaprovaline") + 30 <= 60)
src.occupant.reagents.add_reagent("inaprovaline", 30) src.occupant.reagents.add_reagent("inaprovaline", 30)
user << text("Occupant now has [] units of Inaprovaline in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("inaprovaline")) user << text("Occupant now has [] units of Inaprovaline in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("inaprovaline"))
else else
user << "No occupant!" user << "There's no occupant in the sleeper or the subject rejects the chemicals!"
return return
proc/inject_stox(mob/living/user as mob) proc/inject_stox(mob/living/user as mob)
if(src.occupant) if(src.occupant && src.occupant.reagents)
if(src.occupant.reagents.get_reagent_amount("stoxin") + 20 <= 40) if(src.occupant.reagents.get_reagent_amount("stoxin") + 20 <= 40)
src.occupant.reagents.add_reagent("stoxin", 20) src.occupant.reagents.add_reagent("stoxin", 20)
user << text("Occupant now has [] units of soporifics in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("stoxin")) user << text("Occupant now has [] units of soporifics in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("stoxin"))
else else
user << "No occupant!" user << "There's no occupant in the sleeper or the subject rejects the chemicals!"
return return
proc/inject_dermaline(mob/living/user as mob) proc/inject_dermaline(mob/living/user as mob)
if (src.occupant) if(src.occupant && src.occupant.reagents)
if(src.occupant.reagents.get_reagent_amount("dermaline") + 20 <= 40) if(src.occupant.reagents.get_reagent_amount("dermaline") + 20 <= 40)
src.occupant.reagents.add_reagent("dermaline", 20) src.occupant.reagents.add_reagent("dermaline", 20)
user << text("Occupant now has [] units of Dermaline in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("dermaline")) user << text("Occupant now has [] units of Dermaline in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("dermaline"))
else else
user << "No occupant!" user << "There's no occupant in the sleeper or the subject rejects the chemicals!"
return return
proc/inject_bicaridine(mob/living/user as mob) proc/inject_bicaridine(mob/living/user as mob)
if(src.occupant) if(src.occupant && src.occupant.reagents)
if(src.occupant.reagents.get_reagent_amount("bicaridine") + 10 <= 20) if(src.occupant.reagents.get_reagent_amount("bicaridine") + 10 <= 20)
src.occupant.reagents.add_reagent("bicaridine", 10) src.occupant.reagents.add_reagent("bicaridine", 10)
user << text("Occupant now has [] units of Bicaridine in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("bicaridine")) user << text("Occupant now has [] units of Bicaridine in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("bicaridine"))
else else
user << "No occupant!" user << "There's no occupant in the sleeper or the subject rejects the chemicals!"
return return
proc/inject_dexalin(mob/living/user as mob) proc/inject_dexalin(mob/living/user as mob)
if(src.occupant) if(src.occupant && src.occupant.reagents)
if(src.occupant.reagents.get_reagent_amount("dexalin") + 20 <= 40) if(src.occupant.reagents.get_reagent_amount("dexalin") + 20 <= 40)
src.occupant.reagents.add_reagent("dexalin", 20) src.occupant.reagents.add_reagent("dexalin", 20)
user << text("Occupant now has [] units of Dexalin in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("dexalin")) user << text("Occupant now has [] units of Dexalin in his/her bloodstream.", src.occupant.reagents.get_reagent_amount("dexalin"))
else else
user << "No occupant!" user << "There's no occupant in the sleeper or the subject rejects the chemicals!"
return return
@@ -367,7 +373,7 @@
usr << "\blue <B>The sleeper is already occupied!</B>" usr << "\blue <B>The sleeper is already occupied!</B>"
return return
for(var/mob/living/carbon/metroid/M in range(1,usr)) for(var/mob/living/carbon/slime/M in range(1,usr))
if(M.Victim == usr) if(M.Victim == usr)
usr << "You're too busy getting your life sucked out of you." usr << "You're too busy getting your life sucked out of you."
return return

View File

@@ -87,6 +87,8 @@ obj/machinery/computer/general_air_control
var/datum/radio_frequency/radio_connection var/datum/radio_frequency/radio_connection
attack_hand(mob/user) attack_hand(mob/user)
if(..(user))
return
user << browse(return_text(),"window=computer") user << browse(return_text(),"window=computer")
user.set_machine(src) user.set_machine(src)
onclose(user, "computer") onclose(user, "computer")

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