From b2e9c265c42316bfe1add4043e88cd0dde99cc73 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Sat, 9 Feb 2013 22:32:06 +1000 Subject: [PATCH] new icons, added some large artifacts, renamed/restructured a bunch of files Signed-off-by: Cael_Aislinn --- baystation12.dme | 28 +- .../game/objects/items/stacks/sheets/glass.dm | 2 +- code/modules/mining/mine_turfs.dm | 6 + code/modules/mining/ores_coins.dm | 1 - .../xenoarchaeology/archaeo_excavate.dm | 1 - .../xenoarchaeology/artifact_autocloner.dm | 87 ++ .../xenoarchaeology/artifact_gigadrill.dm | 35 + .../xenoarchaeology/artifact_hoverpod.dm | 52 + .../xenoarchaeology/artifact_replicator.dm | 120 ++ .../modules/research/xenoarchaeology/finds.dm | 279 +---- .../research/xenoarchaeology/finds_defines.dm | 258 ++++ .../{fossils.dm => finds_fossils.dm} | 0 .../research/xenoarchaeology/finds_misc.dm | 69 ++ ...{talking_item.dm => finds_talking_item.dm} | 0 .../research/xenoarchaeology/geosample.dm | 57 +- .../{artifact_misc.dm => misc.dm} | 121 +- .../research/xenoarchaeology/spacesuit.dm | 13 + .../xenoarchaeology/suspension_generator.dm | 8 +- .../{misc_tools.dm => tools.dm} | 0 .../{artifact.dm => unknown.dm} | 0 ...tifact_analysis.dm => unknown_analysis.dm} | 636 +++++----- .../{artifact_db.dm => unknown_db.dm} | 114 +- .../{artifact_effect.dm => unknown_effect.dm} | 1084 ++++++++--------- ...fact_harvester.dm => unknown_harvester.dm} | 300 ++--- ...fact_synthetic.dm => unknown_synthetic.dm} | 288 ++--- icons/obj/cryogenics.dmi | Bin 11432 -> 14976 bytes icons/obj/mining.dmi | Bin 42973 -> 43727 bytes icons/obj/vehicles.dmi | Bin 11038 -> 9127 bytes icons/obj/xenoarchaeology.dmi | Bin 41852 -> 48429 bytes 29 files changed, 1993 insertions(+), 1566 deletions(-) delete mode 100644 code/modules/research/xenoarchaeology/archaeo_excavate.dm create mode 100644 code/modules/research/xenoarchaeology/artifact_autocloner.dm create mode 100644 code/modules/research/xenoarchaeology/artifact_gigadrill.dm create mode 100644 code/modules/research/xenoarchaeology/artifact_hoverpod.dm create mode 100644 code/modules/research/xenoarchaeology/artifact_replicator.dm create mode 100644 code/modules/research/xenoarchaeology/finds_defines.dm rename code/modules/research/xenoarchaeology/{fossils.dm => finds_fossils.dm} (100%) create mode 100644 code/modules/research/xenoarchaeology/finds_misc.dm rename code/modules/research/xenoarchaeology/{talking_item.dm => finds_talking_item.dm} (100%) rename code/modules/research/xenoarchaeology/{artifact_misc.dm => misc.dm} (82%) create mode 100644 code/modules/research/xenoarchaeology/spacesuit.dm rename code/modules/research/xenoarchaeology/{misc_tools.dm => tools.dm} (100%) rename code/modules/research/xenoarchaeology/{artifact.dm => unknown.dm} (100%) rename code/modules/research/xenoarchaeology/{artifact_analysis.dm => unknown_analysis.dm} (97%) rename code/modules/research/xenoarchaeology/{artifact_db.dm => unknown_db.dm} (97%) rename code/modules/research/xenoarchaeology/{artifact_effect.dm => unknown_effect.dm} (97%) rename code/modules/research/xenoarchaeology/{artifact_harvester.dm => unknown_harvester.dm} (97%) rename code/modules/research/xenoarchaeology/{artifact_synthetic.dm => unknown_synthetic.dm} (96%) diff --git a/baystation12.dme b/baystation12.dme index ecc43c2a84d..a60303f0d05 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1126,24 +1126,30 @@ #include "code\modules\research\xenoarchaeology\analysis_ion_mobility.dm" #include "code\modules\research\xenoarchaeology\analysis_isotope_ratio.dm" #include "code\modules\research\xenoarchaeology\analysis_scanner.dm" -#include "code\modules\research\xenoarchaeology\archaeo_excavate.dm" -#include "code\modules\research\xenoarchaeology\artifact.dm" -#include "code\modules\research\xenoarchaeology\artifact_analysis.dm" -#include "code\modules\research\xenoarchaeology\artifact_db.dm" -#include "code\modules\research\xenoarchaeology\artifact_effect.dm" -#include "code\modules\research\xenoarchaeology\artifact_harvester.dm" -#include "code\modules\research\xenoarchaeology\artifact_misc.dm" -#include "code\modules\research\xenoarchaeology\artifact_synthetic.dm" +#include "code\modules\research\xenoarchaeology\artifact_autocloner.dm" +#include "code\modules\research\xenoarchaeology\artifact_gigadrill.dm" +#include "code\modules\research\xenoarchaeology\artifact_hoverpod.dm" +#include "code\modules\research\xenoarchaeology\artifact_replicator.dm" #include "code\modules\research\xenoarchaeology\bunsen_burner.dm" #include "code\modules\research\xenoarchaeology\chemistry.dm" #include "code\modules\research\xenoarchaeology\core_sampler.dm" #include "code\modules\research\xenoarchaeology\finds.dm" -#include "code\modules\research\xenoarchaeology\fossils.dm" +#include "code\modules\research\xenoarchaeology\finds_defines.dm" +#include "code\modules\research\xenoarchaeology\finds_fossils.dm" +#include "code\modules\research\xenoarchaeology\finds_misc.dm" +#include "code\modules\research\xenoarchaeology\finds_talking_item.dm" #include "code\modules\research\xenoarchaeology\geosample.dm" -#include "code\modules\research\xenoarchaeology\misc_tools.dm" +#include "code\modules\research\xenoarchaeology\misc.dm" #include "code\modules\research\xenoarchaeology\readme.dm" +#include "code\modules\research\xenoarchaeology\spacesuit.dm" #include "code\modules\research\xenoarchaeology\suspension_generator.dm" -#include "code\modules\research\xenoarchaeology\talking_item.dm" +#include "code\modules\research\xenoarchaeology\tools.dm" +#include "code\modules\research\xenoarchaeology\unknown.dm" +#include "code\modules\research\xenoarchaeology\unknown_analysis.dm" +#include "code\modules\research\xenoarchaeology\unknown_db.dm" +#include "code\modules\research\xenoarchaeology\unknown_effect.dm" +#include "code\modules\research\xenoarchaeology\unknown_harvester.dm" +#include "code\modules\research\xenoarchaeology\unknown_synthetic.dm" #include "code\modules\scripting\Errors.dm" #include "code\modules\scripting\IDE.dm" #include "code\modules\scripting\Options.dm" diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 835666b7fe4..0169f5d894c 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -287,7 +287,7 @@ var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot")) if(affecting.status & ORGAN_ROBOT) return - + H.Weaken(3) if(affecting.take_damage(5, 0)) H.UpdateDamageIcon() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index a7944ca8968..27222b680e4 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -28,6 +28,7 @@ var/archaeo_overlay = "" var/excav_overlay = "" var/obj/item/weapon/last_find + var/datum/find/artifact_find /turf/simulated/mineral/Del() return @@ -282,6 +283,7 @@ commented out in r5061, I left it because of the shroom thingies return if (istype(W, /obj/item/device/core_sampler)) + src.geological_data.UpdateNearbyArtifactInfo(src) var/obj/item/device/core_sampler/C = W C.sample_item(src, user) return @@ -395,6 +397,7 @@ commented out in r5061, I left it because of the shroom thingies while(next_rock > 100) next_rock -= 100 var/obj/item/weapon/ore/O = new(src) + src.geological_data.UpdateNearbyArtifactInfo(src) O.geological_data = src.geological_data else @@ -425,6 +428,7 @@ commented out in r5061, I left it because of the shroom thingies if (src.mineralName == "Clown") O = new /obj/item/weapon/ore/clown(src) if(O) + src.geological_data.UpdateNearbyArtifactInfo(src) O.geological_data = src.geological_data return O @@ -464,6 +468,8 @@ commented out in r5061, I left it because of the shroom thingies X = new/obj/item/weapon/archaeological_find(src, new_item_type = F.find_type) else X = new/obj/item/weapon/ore/strangerock(src, inside_item_type = F.find_type) + src.geological_data.UpdateNearbyArtifactInfo(src) + X:geological_data = src.geological_data //some find types delete the /obj/item/weapon/archaeological_find and replace it with something else, this handles when that happens //yuck diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 68457fa7fca..8232cfa3d0e 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -6,7 +6,6 @@ icon_state = "ore2" var/datum/geosample/geological_data - /obj/item/weapon/ore/uranium name = "Uranium ore" icon_state = "Uranium ore" diff --git a/code/modules/research/xenoarchaeology/archaeo_excavate.dm b/code/modules/research/xenoarchaeology/archaeo_excavate.dm deleted file mode 100644 index 51955b740d4..00000000000 --- a/code/modules/research/xenoarchaeology/archaeo_excavate.dm +++ /dev/null @@ -1 +0,0 @@ -//todo: tape, methods for excavation? \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/artifact_autocloner.dm b/code/modules/research/xenoarchaeology/artifact_autocloner.dm new file mode 100644 index 00000000000..e602e4363f6 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact_autocloner.dm @@ -0,0 +1,87 @@ + +/obj/machinery/auto_cloner + name = "mysterious pod" + desc = "It's full of a viscous liquid, but appears dark and silent." + icon = 'icons/obj/cryogenics.dmi' + icon_state = "cellold0" + var/spawn_type + var/current_ticks_spawning = 0 + var/ticks_required_to_spawn + density = 1 + var/previous_power_state = 0 + + use_power = 1 + active_power_usage = 2000 + idle_power_usage = 1000 + +/obj/machinery/auto_cloner/New() + ..() + + ticks_required_to_spawn = rand(240,1440) + + //33% chance to spawn nasties + if(prob(33)) + spawn_type = pick(\ + /mob/living/simple_animal/hostile/giant_spider/nurse,\ + /mob/living/simple_animal/hostile/alien,\ + /mob/living/simple_animal/hostile/bear,\ + /mob/living/simple_animal/hostile/creature,\ + /mob/living/simple_animal/hostile/panther,\ + /mob/living/simple_animal/hostile/snake\ + ) + else + spawn_type = pick(\ + /mob/living/simple_animal/cat,\ + /mob/living/simple_animal/corgi,\ + /mob/living/simple_animal/corgi/puppy,\ + /mob/living/simple_animal/chicken,\ + /mob/living/simple_animal/cow,\ + /mob/living/simple_animal/parrot,\ + /mob/living/simple_animal/slime,\ + /mob/living/simple_animal/crab,\ + /mob/living/simple_animal/mouse,\ + /mob/living/simple_animal/hostile/retaliate/goat,\ + /mob/living/carbon/monkey\ + ) + +//todo: how the hell is the asteroid permanently powered? +/obj/machinery/auto_cloner/process() + if(powered(power_channel)) + if(!previous_power_state) + previous_power_state = 1 + icon_state = "cellold1" + src.visible_message("\blue \icon[src] [src] suddenly comes to life!") + + //slowly grow a mob + current_ticks_spawning++ + if(prob(5)) + src.visible_message("\blue \icon[src] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].") + + //if we've finished growing... + if(current_ticks_spawning >= ticks_required_to_spawn) + current_ticks_spawning = 0 + use_power = 1 + src.visible_message("\blue \icon[src] [src] pings!") + icon_state = "cellold1" + desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow." + if(spawn_type) + new spawn_type(src.loc) + + //if we're getting close to finished, kick into overdrive power usage + if(current_ticks_spawning / ticks_required_to_spawn > 0.75) + use_power = 2 + icon_state = "cellold2" + desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow. A dark shape appears to be forming inside..." + else + use_power = 1 + icon_state = "cellold1" + desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow." + else + if(previous_power_state) + previous_power_state = 0 + icon_state = "cellold0" + src.visible_message("\blue \icon[src] [src] suddenly shuts down.") + + //cloned mob slowly breaks down + if(current_ticks_spawning > 0) + current_ticks_spawning-- diff --git a/code/modules/research/xenoarchaeology/artifact_gigadrill.dm b/code/modules/research/xenoarchaeology/artifact_gigadrill.dm new file mode 100644 index 00000000000..9d52c9c2dc0 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact_gigadrill.dm @@ -0,0 +1,35 @@ + +/obj/machinery/giga_drill + name = "alien drill" + desc = "A giant, alien drill mounted on long treads." + icon = 'icons/obj/mining.dmi' + icon_state = "gigadrill" + var/active = 0 + var/drill_time = 10 + var/turf/drilling_turf + density = 1 + layer = 3.1 //to go over ores + +/obj/machinery/giga_drill/attack_hand(mob/user as mob) + if(active) + active = 0 + icon_state = "gigadrill" + user << "\blue You press a button and [src] slowly spins down." + else + active = 1 + icon_state = "gigadrill_mov" + user << "\blue You press a button and [src] shudders to life." + +/obj/machinery/giga_drill/Bump(atom/A) + if(active && !drilling_turf) + if(istype(A,/turf/simulated/mineral)) + var/turf/simulated/mineral/M = A + drilling_turf = get_turf(src) + src.visible_message("\red [src] begins to drill into [M]!") + anchored = 1 + spawn(drill_time) + if(get_turf(src) == drilling_turf && active) + M.gets_drilled() + src.loc = M + drilling_turf = null + anchored = 0 diff --git a/code/modules/research/xenoarchaeology/artifact_hoverpod.dm b/code/modules/research/xenoarchaeology/artifact_hoverpod.dm new file mode 100644 index 00000000000..04b68a3dbd3 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact_hoverpod.dm @@ -0,0 +1,52 @@ + +/obj/mecha/working/hoverpod + name = "hover pod" + icon = 'icons/obj/vehicles.dmi' + icon_state = "engineering_pod" + desc = "Stubby and round, it has a human sized access hatch on the top." + +//duplicate of parent proc, but without space drifting +/obj/mecha/working/hoverpod/dyndomove(direction) + if(!can_move) + return 0 + if(src.pr_inertial_movement.active()) + return 0 + if(!has_charge(step_energy_drain)) + return 0 + var/move_result = 0 + if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) + move_result = mechsteprand() + else if(src.dir!=direction) + move_result = mechturn(direction) + else + move_result = mechstep(direction) + if(move_result) + can_move = 0 + use_power(step_energy_drain) + /*if(istype(src.loc, /turf/space)) + if(!src.check_for_support()) + src.pr_inertial_movement.start(list(src,direction)) + src.log_message("Movement control lost. Inertial movement started.")*/ + if(do_after(step_in)) + can_move = 1 + return 1 + return 0 + +//these three procs overriden to play different sounds +/obj/mecha/mechturn(direction) + dir = direction + //playsound(src,'sound/machines/hiss.ogg',40,1) + return 1 + +/obj/mecha/mechstep(direction) + var/result = step(src,direction) + if(result) + playsound(src,'sound/machines/hiss.ogg',40,1) + return result + + +/obj/mecha/mechsteprand() + var/result = step_rand(src) + if(result) + playsound(src,'sound/machines/hiss.ogg',40,1) + return result diff --git a/code/modules/research/xenoarchaeology/artifact_replicator.dm b/code/modules/research/xenoarchaeology/artifact_replicator.dm new file mode 100644 index 00000000000..a52a12ebaf1 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact_replicator.dm @@ -0,0 +1,120 @@ + +/obj/machinery/replicator + name = "alien machine" + desc = "It's some kind of pod with strange wires and gadgets all over it." + icon = 'xenoarchaeology.dmi' + icon_state = "borgcharger0(old)" + density = 1 + + idle_power_usage = 100 + active_power_usage = 1000 + use_power = 1 + + var/spawn_progress = 0 + var/max_spawn_ticks = 5 + var/list/construction = list() + var/list/spawning_types = list() + +/obj/machinery/replicator/New() + ..() + + var/list/viables = list(\ + /obj/item/roller,\ + /obj/structure/cult/pylon,\ + /obj/structure/closet/crate,\ + /obj/structure/closet/acloset,\ + /mob/living/simple_animal/hostile/mimic,\ + /mob/living/simple_animal/hostile/viscerator,\ + /mob/living/simple_animal/hostile/hivebot,\ + /obj/item/device/analyzer,\ + /obj/item/device/camera,\ + /obj/item/device/flash,\ + /obj/item/device/flashlight,\ + /obj/item/device/healthanalyzer,\ + /obj/item/device/multitool,\ + /obj/item/device/paicard,\ + /obj/item/device/radio,\ + /obj/item/device/radio/headset,\ + /obj/item/device/radio/beacon,\ + /obj/item/weapon/autopsy_scanner,\ + /obj/item/weapon/bikehorn,\ + /obj/item/weapon/bonesetter,\ + /obj/item/weapon/butch,\ + /obj/item/weapon/caution,\ + /obj/item/weapon/caution/cone,\ + /obj/item/weapon/crowbar,\ + /obj/item/weapon/clipboard,\ + /obj/item/weapon/cell,\ + /obj/item/weapon/circular_saw,\ + /obj/item/weapon/hatchet,\ + /obj/item/weapon/handcuffs,\ + /obj/item/weapon/hemostat,\ + /obj/item/weapon/kitchenknife,\ + /obj/item/weapon/lighter,\ + /obj/item/weapon/lighter,\ + /obj/item/weapon/light/bulb,\ + /obj/item/weapon/light/tube,\ + /obj/item/weapon/pickaxe,\ + /obj/item/weapon/shovel,\ + /obj/item/weapon/table_parts,\ + /obj/item/weapon/weldingtool,\ + /obj/item/weapon/wirecutters,\ + /obj/item/weapon/wrench,\ + /obj/item/weapon/screwdriver,\ + /obj/item/weapon/grenade/chem_grenade/cleaner,\ + /obj/item/weapon/grenade/chem_grenade/metalfoam\ + ) + + var/quantity = rand(5,15) + for(var/i=0, i max_spawn_ticks) + src.visible_message("\blue \icon[src] [src] pings!") + var/spawn_type = spawning_types[1] + new spawn_type(src.loc) + + spawning_types.Remove(spawning_types[1]) + spawn_progress = 0 + max_spawn_ticks = rand(5,30) + + if(!spawning_types.len) + use_power = 1 + icon_state = "borgcharger0(old)" + + else if(prob(5)) + src.visible_message("\blue \icon[src] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + +/obj/machinery/replicator/attack_hand(mob/user as mob) + interact(user) + +/obj/machinery/replicator/interact(mob/user) + var/dat = "The control panel displays an incomprehensible selection of controls, many with unusual markings or text around them.
" + dat += "
" + for(var/index=1, index<=construction.len, index++) + dat += "\[[construction[index]]\]
" + + user << browse(dat, "window=alien_replicator") + +/obj/machinery/replicator/Topic(href, href_list) + + if(href_list["activate"]) + var/index = text2num(href_list["activate"]) + if(index > 0 && index <= construction.len) + if(spawning_types.len) + src.visible_message("\blue \icon[src] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + else + src.visible_message("\blue \icon[src] [src]'s front compartment slides shut.") + + spawning_types.Add(construction[construction[index]]) + spawn_progress = 0 + use_power = 2 + icon_state = "borgcharger1(old)" diff --git a/code/modules/research/xenoarchaeology/finds.dm b/code/modules/research/xenoarchaeology/finds.dm index fbdb6f8ceef..10c2af2a156 100644 --- a/code/modules/research/xenoarchaeology/finds.dm +++ b/code/modules/research/xenoarchaeology/finds.dm @@ -1,224 +1,9 @@ //original code and idea from Alfie275 (luna era) and ISaidNo (goonservers) - with thanks -#define ARCHAEO_BOWL 1 -#define ARCHAEO_URN 2 -#define ARCHAEO_CUTLERY 3 -#define ARCHAEO_STATUETTE 4 -#define ARCHAEO_INSTRUMENT 5 -#define ARCHAEO_KNIFE 6 -#define ARCHAEO_COIN 7 -#define ARCHAEO_HANDCUFFS 8 -#define ARCHAEO_BEARTRAP 9 -#define ARCHAEO_LIGHTER 10 -#define ARCHAEO_BOX 11 -#define ARCHAEO_GASTANK 12 -#define ARCHAEO_TOOL 13 -#define ARCHAEO_METAL 14 -#define ARCHAEO_PEN 15 -#define ARCHAEO_CRYSTAL 16 -#define ARCHAEO_CULTBLADE 17 -#define ARCHAEO_TELEBEACON 18 -#define ARCHAEO_CLAYMORE 19 -#define ARCHAEO_CULTROBES 20 -#define ARCHAEO_SOULSTONE 21 -#define ARCHAEO_SHARD 22 -#define ARCHAEO_RODS 23 -#define ARCHAEO_STOCKPARTS 24 -#define ARCHAEO_KATANA 25 -#define ARCHAEO_LASER 26 -#define ARCHAEO_GUN 27 -#define ARCHAEO_UNKNOWN 28 -#define ARCHAEO_FOSSIL 29 -#define ARCHAEO_SHELL 30 -#define ARCHAEO_PLANT 31 -#define ARCHAEO_REMAINS_HUMANOID 32 -#define ARCHAEO_REMAINS_ROBOT 33 -#define ARCHAEO_REMAINS_XENO 34 -//eggs -//droppings -//footprints -//alien clothing - -//DNA sampling from fossils, or a new archaeo type specifically for it? - -//descending order of likeliness to spawn -#define DIGSITE_GARDEN 1 -#define DIGSITE_ANIMAL 2 -#define DIGSITE_HOUSE 3 -#define DIGSITE_TECHNICAL 4 -#define DIGSITE_TEMPLE 5 -#define DIGSITE_WAR 6 - -/proc/get_responsive_reagent(var/find_type) - switch(find_type) - if(ARCHAEO_BOWL) - return "aluminium" - if(ARCHAEO_URN) - return "aluminium" - if(ARCHAEO_CUTLERY) - return "aluminium" - if(ARCHAEO_STATUETTE) - return "aluminium" - if(ARCHAEO_INSTRUMENT) - return "aluminium" - if(ARCHAEO_COIN) - return "silicon" - if(ARCHAEO_HANDCUFFS) - return "aluminium" - if(ARCHAEO_BEARTRAP) - return "aluminium" - if(ARCHAEO_LIGHTER) - return "aluminium" - if(ARCHAEO_BOX) - return "aluminium" - if(ARCHAEO_GASTANK) - return "aluminium" - if(ARCHAEO_TOOL) - return "silicon" - if(ARCHAEO_METAL) - return "silicon" - if(ARCHAEO_PEN) - return "aluminium" - if(ARCHAEO_CRYSTAL) - return "helium" - if(ARCHAEO_CULTBLADE) - return "neon" - if(ARCHAEO_TELEBEACON) - return "neon" - if(ARCHAEO_CLAYMORE) - return "silicon" - if(ARCHAEO_CULTROBES) - return "neon" - if(ARCHAEO_SOULSTONE) - return "helium" - if(ARCHAEO_SHARD) - return "helium" - if(ARCHAEO_RODS) - return "silicon" - if(ARCHAEO_STOCKPARTS) - return "neon" - if(ARCHAEO_KATANA) - return "silicon" - if(ARCHAEO_LASER) - return "silicon" - if(ARCHAEO_GUN) - return "silicon" - if(ARCHAEO_UNKNOWN) - return "beryllium" - if(ARCHAEO_FOSSIL) - return "carbon" - if(ARCHAEO_PLANT) - return "carbon" - if(ARCHAEO_REMAINS_HUMANOID) - return "carbon" - if(ARCHAEO_REMAINS_ROBOT) - return "carbon" - if(ARCHAEO_REMAINS_XENO) - return "carbon" - return "chlorine" - -//see /turf/simulated/mineral/New() in code/modules/mining/mine_turfs.dm -/proc/get_random_digsite_type() - return pick(100;DIGSITE_GARDEN,95;DIGSITE_ANIMAL,90;DIGSITE_HOUSE,85;DIGSITE_TECHNICAL,80;DIGSITE_TEMPLE,75;DIGSITE_WAR) - -/proc/get_random_find_type(var/digsite) - - var/find_type = 0 - switch(digsite) - if(DIGSITE_GARDEN) - find_type = pick(\ - 100;ARCHAEO_PLANT,\ - 25;ARCHAEO_SHELL,\ - 25;ARCHAEO_FOSSIL,\ - 10;ARCHAEO_REMAINS_XENO,\ - 5;ARCHAEO_BEARTRAP\ - ) - if(DIGSITE_ANIMAL) - find_type = pick(\ - 100;ARCHAEO_FOSSIL,\ - 50;ARCHAEO_SHELL,\ - 50;ARCHAEO_PLANT,\ - 50;ARCHAEO_REMAINS_XENO,\ - 25;ARCHAEO_BEARTRAP\ - ) - if(DIGSITE_HOUSE) - find_type = pick(\ - 100;ARCHAEO_BOWL,\ - 100;ARCHAEO_URN,\ - 100;ARCHAEO_CUTLERY,\ - 100;ARCHAEO_STATUETTE,\ - 100;ARCHAEO_INSTRUMENT,\ - 100;ARCHAEO_PEN,\ - 100;ARCHAEO_LIGHTER,\ - 100;ARCHAEO_BOX,\ - 75;ARCHAEO_COIN,\ - 75;ARCHAEO_UNKNOWN,\ - 75;ARCHAEO_REMAINS_HUMANOID,\ - 75;ARCHAEO_REMAINS_ROBOT,\ - 75;ARCHAEO_REMAINS_XENO,\ - 50;ARCHAEO_SHARD,\ - 50;ARCHAEO_RODS,\ - 25;ARCHAEO_METAL\ - ) - if(DIGSITE_TECHNICAL) - find_type = pick(\ - 100;ARCHAEO_METAL,\ - 100;ARCHAEO_GASTANK,\ - 100;ARCHAEO_TELEBEACON,\ - 100;ARCHAEO_TOOL,\ - 100;ARCHAEO_STOCKPARTS,\ - 100;ARCHAEO_REMAINS_ROBOT,\ - 75;ARCHAEO_SHARD,\ - 75;ARCHAEO_RODS,\ - 75;ARCHAEO_UNKNOWN,\ - 50;ARCHAEO_HANDCUFFS,\ - 50;ARCHAEO_BEARTRAP,\ - 25;ARCHAEO_REMAINS_HUMANOID,\ - 25;ARCHAEO_REMAINS_XENO\ - ) - if(DIGSITE_TEMPLE) - find_type = pick(\ - 200;ARCHAEO_CULTROBES,\ - 100;ARCHAEO_URN,\ - 100;ARCHAEO_BOWL,\ - 100;ARCHAEO_KNIFE,\ - 100;ARCHAEO_CRYSTAL,\ - 75;ARCHAEO_CULTBLADE,\ - 75;ARCHAEO_REMAINS_HUMANOID,\ - 75;ARCHAEO_REMAINS_XENO,\ - 50;ARCHAEO_SOULSTONE,\ - 50;ARCHAEO_UNKNOWN,\ - 25;ARCHAEO_HANDCUFFS,\ - 25;ARCHAEO_BEARTRAP,\ - 10;ARCHAEO_KATANA,\ - 10;ARCHAEO_CLAYMORE,\ - 10;ARCHAEO_SHARD,\ - 10;ARCHAEO_RODS,\ - 10;ARCHAEO_METAL\ - ) - if(DIGSITE_WAR) - find_type = pick(\ - 100;ARCHAEO_GUN,\ - 100;ARCHAEO_KNIFE,\ - 75;ARCHAEO_LASER,\ - 75;ARCHAEO_KATANA,\ - 75;ARCHAEO_CLAYMORE,\ - 75;ARCHAEO_REMAINS_HUMANOID,\ - 75;ARCHAEO_REMAINS_XENO,\ - 50;ARCHAEO_UNKNOWN,\ - 50;ARCHAEO_CULTROBES,\ - 50;ARCHAEO_CULTBLADE,\ - 50;ARCHAEO_REMAINS_ROBOT,\ - 25;ARCHAEO_HANDCUFFS,\ - 25;ARCHAEO_BEARTRAP,\ - 25;ARCHAEO_TOOL\ - ) - return find_type - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Xenoarchaeological finds -datum/find +/datum/find var/find_type = 0 //random according to the digsite type var/excavation_required = 0 //random 5-95% var/view_range = 20 //how close excavation has to come to show an overlay on the turf @@ -228,30 +13,12 @@ datum/find var/dissonance_spread = 1 //proportion of the tile that is affected by this find //used in conjunction with analysis machines to determine correct suspension field type -datum/find/New(var/digsite, var/exc_req) +/datum/find/New(var/digsite, var/exc_req) excavation_required = exc_req find_type = get_random_find_type(digsite) clearance_range = rand(2,6) dissonance_spread = rand(1500,2500) / 100 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Rock sliver - -/obj/item/weapon/rocksliver - name = "rock sliver" - desc = "It looks extremely delicate." - icon = 'xenoarchaeology.dmi' - icon_state = "sliver1" //0-4 - w_class = 1 - //item_state = "electronic" - var/source_rock = "/turf/simulated/mineral/" - var/datum/geosample/geological_data - -/obj/item/weapon/rocksliver/New() - icon_state = "sliver[rand(1,3)]" - pixel_x = rand(0,16)-8 - pixel_y = rand(0,8)-8 - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Strange rocks @@ -266,6 +33,7 @@ datum/find/New(var/digsite, var/exc_req) /obj/item/weapon/ore/strangerock/New(loc, var/inside_item_type = 0) ..(loc) + method = rand(0,2) if(inside_item_type) inside = new/obj/item/weapon/archaeological_find(src, new_item_type = inside_item_type) @@ -306,6 +74,9 @@ datum/find/New(var/digsite, var/exc_req) src.visible_message("[src] crumbles away, leaving some dust and gravel behind.") del(src) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Archaeological finds + /obj/item/weapon/archaeological_find name = "object" icon = 'xenoarchaeology.dmi' @@ -468,12 +239,15 @@ datum/find/New(var/digsite, var/exc_req) if(prob(30)) apply_image_decorations = 1 if(16) - if(prob(50)) + if(prob(33)) item_type = "smooth green crystal" icon_state = "Green lump" - else + else if(prob(50)) item_type = "irregular purple crystal" icon_state = "Phazon" + else + item_type = "smooth red crystal" + icon_state = "ore" additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") apply_material_decorations = 0 @@ -507,7 +281,9 @@ datum/find/New(var/digsite, var/exc_req) new_item = new /obj/item/device/soulstone(src.loc) apply_material_decorations = 0 if(22) - new_item = new /obj/item/weapon/shard(src.loc) + if(prob(50)) + new_item = new /obj/item/weapon/shard(src.loc) + new_item = new /obj/item/weapon/shard/plasma(src.loc) apply_image_decorations = 0 apply_material_decorations = 0 if(23) @@ -723,30 +499,3 @@ datum/find/New(var/digsite, var/exc_req) if(prob(25)) speaking_to_players = 1 processing_objects.Add(src) - -//legacy crystal -/obj/item/weapon/crystal - name = "Crystal" - icon = 'mining.dmi' - icon_state = "crystal" - -//large finds - /* - /obj/machinery/syndicate_beacon - /obj/machinery/wish_granter - if(18) - item_type = "jagged green crystal" - additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") - icon_state = "crystal" - apply_material_decorations = 0 - if(prob(10)) - apply_image_decorations = 1 - if(19) - item_type = "jagged pink crystal" - additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") - icon_state = "crystal2" - apply_material_decorations = 0 - if(prob(10)) - apply_image_decorations = 1 - */ - //machinery type artifacts? \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/finds_defines.dm b/code/modules/research/xenoarchaeology/finds_defines.dm new file mode 100644 index 00000000000..b2aebc52fa2 --- /dev/null +++ b/code/modules/research/xenoarchaeology/finds_defines.dm @@ -0,0 +1,258 @@ + +#define ARCHAEO_BOWL 1 +#define ARCHAEO_URN 2 +#define ARCHAEO_CUTLERY 3 +#define ARCHAEO_STATUETTE 4 +#define ARCHAEO_INSTRUMENT 5 +#define ARCHAEO_KNIFE 6 +#define ARCHAEO_COIN 7 +#define ARCHAEO_HANDCUFFS 8 +#define ARCHAEO_BEARTRAP 9 +#define ARCHAEO_LIGHTER 10 +#define ARCHAEO_BOX 11 +#define ARCHAEO_GASTANK 12 +#define ARCHAEO_TOOL 13 +#define ARCHAEO_METAL 14 +#define ARCHAEO_PEN 15 +#define ARCHAEO_CRYSTAL 16 +#define ARCHAEO_CULTBLADE 17 +#define ARCHAEO_TELEBEACON 18 +#define ARCHAEO_CLAYMORE 19 +#define ARCHAEO_CULTROBES 20 +#define ARCHAEO_SOULSTONE 21 +#define ARCHAEO_SHARD 22 +#define ARCHAEO_RODS 23 +#define ARCHAEO_STOCKPARTS 24 +#define ARCHAEO_KATANA 25 +#define ARCHAEO_LASER 26 +#define ARCHAEO_GUN 27 +#define ARCHAEO_UNKNOWN 28 +#define ARCHAEO_FOSSIL 29 +#define ARCHAEO_SHELL 30 +#define ARCHAEO_PLANT 31 +//eggs +//droppings +//footprints +//alien clothing + +//DNA sampling from fossils, or a new archaeo type specifically for it? + +#define ARTIFACT_REMAINS_HUMANOID 1 +#define ARTIFACT_REMAINS_ROBOT 2 +#define ARTIFACT_REMAINS_XENO 3 +#define ARTIFACT_MACHINERY 4 +#define ARTIFACT_OCCULT 5 +#define ARTIFACT_SYNDBEACON 6 + +//? +#define ARTIFACT_HEAL 4 +#define ARTIFACT_BIODAM 5 +#define ARTIFACT_POWERCHARGE 6 +#define ARTIFACT_POWERDRAIN 7 +#define ARTIFACT_EMP 8 +#define ARTIFACT_PLANTGROW 9 +#define ARTIFACT_WEAKEN 10 +#define ARTIFACT_SLEEPY 11 +#define ARTIFACT_TELEPORT 12 +#define ARTIFACT_ROBOHURT 13 +#define ARTIFACT_ROBOHEAL 14 +#define ARTIFACT_DNASWITCH 15 +#define ARTIFACT_ +#define ARTIFACT_ + +//descending order of likeliness to spawn +#define DIGSITE_GARDEN 1 +#define DIGSITE_ANIMAL 2 +#define DIGSITE_HOUSE 3 +#define DIGSITE_TECHNICAL 4 +#define DIGSITE_TEMPLE 5 +#define DIGSITE_WAR 6 + +/proc/get_responsive_reagent(var/find_type) + switch(find_type) + if(ARCHAEO_BOWL) + return "aluminium" + if(ARCHAEO_URN) + return "aluminium" + if(ARCHAEO_CUTLERY) + return "aluminium" + if(ARCHAEO_STATUETTE) + return "aluminium" + if(ARCHAEO_INSTRUMENT) + return "aluminium" + if(ARCHAEO_COIN) + return "silicon" + if(ARCHAEO_HANDCUFFS) + return "aluminium" + if(ARCHAEO_BEARTRAP) + return "aluminium" + if(ARCHAEO_LIGHTER) + return "aluminium" + if(ARCHAEO_BOX) + return "aluminium" + if(ARCHAEO_GASTANK) + return "aluminium" + if(ARCHAEO_TOOL) + return "silicon" + if(ARCHAEO_METAL) + return "silicon" + if(ARCHAEO_PEN) + return "aluminium" + if(ARCHAEO_CRYSTAL) + return "helium" + if(ARCHAEO_CULTBLADE) + return "neon" + if(ARCHAEO_TELEBEACON) + return "neon" + if(ARCHAEO_CLAYMORE) + return "silicon" + if(ARCHAEO_CULTROBES) + return "neon" + if(ARCHAEO_SOULSTONE) + return "helium" + if(ARCHAEO_SHARD) + return "helium" + if(ARCHAEO_RODS) + return "silicon" + if(ARCHAEO_STOCKPARTS) + return "neon" + if(ARCHAEO_KATANA) + return "silicon" + if(ARCHAEO_LASER) + return "silicon" + if(ARCHAEO_GUN) + return "silicon" + if(ARCHAEO_UNKNOWN) + return "beryllium" + if(ARCHAEO_FOSSIL) + return "carbon" + if(ARCHAEO_PLANT) + return "carbon" + return "chlorine" + +//see /turf/simulated/mineral/New() in code/modules/mining/mine_turfs.dm +/proc/get_random_digsite_type() + return pick(100;DIGSITE_GARDEN,95;DIGSITE_ANIMAL,90;DIGSITE_HOUSE,85;DIGSITE_TECHNICAL,80;DIGSITE_TEMPLE,75;DIGSITE_WAR) + +/proc/get_random_find_type(var/digsite) + + var/find_type = 0 + switch(digsite) + if(DIGSITE_GARDEN) + find_type = pick(\ + 100;ARCHAEO_PLANT,\ + 25;ARCHAEO_SHELL,\ + 25;ARCHAEO_FOSSIL,\ + 5;ARCHAEO_BEARTRAP\ + ) + if(DIGSITE_ANIMAL) + find_type = pick(\ + 100;ARCHAEO_FOSSIL,\ + 50;ARCHAEO_SHELL,\ + 50;ARCHAEO_PLANT,\ + 25;ARCHAEO_BEARTRAP\ + ) + if(DIGSITE_HOUSE) + find_type = pick(\ + 100;ARCHAEO_BOWL,\ + 100;ARCHAEO_URN,\ + 100;ARCHAEO_CUTLERY,\ + 100;ARCHAEO_STATUETTE,\ + 100;ARCHAEO_INSTRUMENT,\ + 100;ARCHAEO_PEN,\ + 100;ARCHAEO_LIGHTER,\ + 100;ARCHAEO_BOX,\ + 75;ARCHAEO_COIN,\ + 75;ARCHAEO_UNKNOWN,\ + 50;ARCHAEO_SHARD,\ + 50;ARCHAEO_RODS,\ + 25;ARCHAEO_METAL\ + ) + if(DIGSITE_TECHNICAL) + find_type = pick(\ + 100;ARCHAEO_METAL,\ + 100;ARCHAEO_GASTANK,\ + 100;ARCHAEO_TELEBEACON,\ + 100;ARCHAEO_TOOL,\ + 100;ARCHAEO_STOCKPARTS,\ + 75;ARCHAEO_SHARD,\ + 75;ARCHAEO_RODS,\ + 75;ARCHAEO_UNKNOWN,\ + 50;ARCHAEO_HANDCUFFS,\ + 50;ARCHAEO_BEARTRAP,\ + ) + if(DIGSITE_TEMPLE) + find_type = pick(\ + 200;ARCHAEO_CULTROBES,\ + 100;ARCHAEO_URN,\ + 100;ARCHAEO_BOWL,\ + 100;ARCHAEO_KNIFE,\ + 100;ARCHAEO_CRYSTAL,\ + 75;ARCHAEO_CULTBLADE,\ + 50;ARCHAEO_SOULSTONE,\ + 50;ARCHAEO_UNKNOWN,\ + 25;ARCHAEO_HANDCUFFS,\ + 25;ARCHAEO_BEARTRAP,\ + 10;ARCHAEO_KATANA,\ + 10;ARCHAEO_CLAYMORE,\ + 10;ARCHAEO_SHARD,\ + 10;ARCHAEO_RODS,\ + 10;ARCHAEO_METAL\ + ) + if(DIGSITE_WAR) + find_type = pick(\ + 100;ARCHAEO_GUN,\ + 100;ARCHAEO_KNIFE,\ + 75;ARCHAEO_LASER,\ + 75;ARCHAEO_KATANA,\ + 75;ARCHAEO_CLAYMORE,\ + 50;ARCHAEO_UNKNOWN,\ + 50;ARCHAEO_CULTROBES,\ + 50;ARCHAEO_CULTBLADE,\ + 25;ARCHAEO_HANDCUFFS,\ + 25;ARCHAEO_BEARTRAP,\ + 25;ARCHAEO_TOOL\ + ) + return find_type + +#undef ARCHAEO_BOWL +#undef ARCHAEO_URN +#undef ARCHAEO_CUTLERY +#undef ARCHAEO_STATUETTE +#undef ARCHAEO_INSTRUMENT +#undef ARCHAEO_KNIFE +#undef ARCHAEO_COIN +#undef ARCHAEO_HANDCUFFS +#undef ARCHAEO_BEARTRAP +#undef ARCHAEO_LIGHTER +#undef ARCHAEO_BOX +#undef ARCHAEO_GASTANK +#undef ARCHAEO_TOOL +#undef ARCHAEO_METAL +#undef ARCHAEO_PEN +#undef ARCHAEO_CRYSTAL +#undef ARCHAEO_CULTBLADE +#undef ARCHAEO_TELEBEACON +#undef ARCHAEO_CLAYMORE +#undef ARCHAEO_CULTROBES +#undef ARCHAEO_SOULSTONE +#undef ARCHAEO_SHARD +#undef ARCHAEO_RODS +#undef ARCHAEO_STOCKPARTS +#undef ARCHAEO_KATANA +#undef ARCHAEO_LASER +#undef ARCHAEO_GUN +#undef ARCHAEO_UNKNOWN +#undef ARCHAEO_FOSSIL +#undef ARCHAEO_SHELL +#undef ARCHAEO_PLANT +#undef ARCHAEO_REMAINS_HUMANOID +#undef ARCHAEO_REMAINS_ROBOT +#undef ARCHAEO_REMAINS_XENO + +#undef DIGSITE_GARDEN +#undef DIGSITE_ANIMAL +#undef DIGSITE_HOUSE +#undef DIGSITE_TECHNICAL +#undef DIGSITE_TEMPLE +#undef DIGSITE_WAR diff --git a/code/modules/research/xenoarchaeology/fossils.dm b/code/modules/research/xenoarchaeology/finds_fossils.dm similarity index 100% rename from code/modules/research/xenoarchaeology/fossils.dm rename to code/modules/research/xenoarchaeology/finds_fossils.dm diff --git a/code/modules/research/xenoarchaeology/finds_misc.dm b/code/modules/research/xenoarchaeology/finds_misc.dm new file mode 100644 index 00000000000..6b995deff42 --- /dev/null +++ b/code/modules/research/xenoarchaeology/finds_misc.dm @@ -0,0 +1,69 @@ + +/obj/item/weapon/shard/plasma + name = "plasma shard" + icon_state = "plasmalarge" + +/obj/item/weapon/shard/plasma/New() + + src.icon_state = pick("plasmalarge", "plasmamedium", "plasmasmall") + switch(src.icon_state) + if("plasmasmall") + src.pixel_x = rand(-12, 12) + src.pixel_y = rand(-12, 12) + if("plasmamedium") + src.pixel_x = rand(-8, 8) + src.pixel_y = rand(-8, 8) + if("plasmalarge") + src.pixel_x = rand(-5, 5) + src.pixel_y = rand(-5, 5) + else + return + +/obj/item/weapon/shard/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if ( istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + var/obj/item/stack/sheet/mineral/plasma/NG = new (user.loc) + for (var/obj/item/stack/sheet/mineral/plasma/G in user.loc) + if(G==NG) + continue + if(G.amount>=G.max_amount) + continue + G.attackby(NG, user) + usr << "You add the newly-formed plasma to the stack. It now contains [NG.amount] sheets." + //SN src = null + del(src) + return + return ..() + +//legacy crystal +/obj/machinery/crystal + name = "Crystal" + icon = 'mining.dmi' + icon_state = "crystal" + +/obj/machinery/crystal/New() + if(prob(50)) + icon_state = "crystal2" + +//large finds + /* + /obj/machinery/syndicate_beacon + /obj/machinery/wish_granter + if(18) + item_type = "jagged green crystal" + additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") + icon_state = "crystal" + apply_material_decorations = 0 + if(prob(10)) + apply_image_decorations = 1 + if(19) + item_type = "jagged pink crystal" + additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") + icon_state = "crystal2" + apply_material_decorations = 0 + if(prob(10)) + apply_image_decorations = 1 + */ + //machinery type artifacts? diff --git a/code/modules/research/xenoarchaeology/talking_item.dm b/code/modules/research/xenoarchaeology/finds_talking_item.dm similarity index 100% rename from code/modules/research/xenoarchaeology/talking_item.dm rename to code/modules/research/xenoarchaeology/finds_talking_item.dm diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm index 72c454148d1..1ecc347f6da 100644 --- a/code/modules/research/xenoarchaeology/geosample.dm +++ b/code/modules/research/xenoarchaeology/geosample.dm @@ -1,4 +1,4 @@ - +/* #define FIND_PLANT 1 #define FIND_BIO 2 #define FIND_METEORIC 3 @@ -9,6 +9,25 @@ #define FIND_METAMORPHIC 8 #define FIND_SEDIMENTARY 9 #define FIND_NOTHING 10 +*/ + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Rock sliver + +/obj/item/weapon/rocksliver + name = "rock sliver" + desc = "It looks extremely delicate." + icon = 'xenoarchaeology.dmi' + icon_state = "sliver1" //0-4 + w_class = 1 + //item_state = "electronic" + var/source_rock = "/turf/simulated/mineral/" + var/datum/geosample/geological_data + +/obj/item/weapon/rocksliver/New() + icon_state = "sliver[rand(1,3)]" + pixel_x = rand(0,16)-8 + pixel_y = rand(0,8)-8 var/list/responsive_carriers = list( \ "carbon", \ @@ -34,7 +53,12 @@ var/list/finds_as_strings = list( \ "Sedimentary/generic rock", \ "Anomalous material" ) -datum/geosample +var/list/artifact_spawning_turfs = list() + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Geosample datum + +/datum/geosample var/age = 0 //age can correspond to different archaeological finds var/age_thousand = 0 var/age_million = 0 @@ -48,12 +72,15 @@ datum/geosample //all potential finds are initialised to null, so nullcheck before you access them var/list/find_presence = list() -datum/geosample/New(var/turf/simulated/mineral/container) +/datum/geosample/New(var/turf/simulated/mineral/container) UpdateTurf(container) //this should only need to be called once -datum/geosample/proc/UpdateTurf(var/turf/simulated/mineral/container) +/datum/geosample/proc/UpdateTurf(var/turf/simulated/mineral/container) + if(!container || !istype(container)) + return + //source_mineral = container.mineralName age = rand(1,999) @@ -128,3 +155,25 @@ datum/geosample/proc/UpdateTurf(var/turf/simulated/mineral/container) for(var/entry in find_presence) total_spread += find_presence[entry] +//have this separate from UpdateTurf() so that we dont have a billion turfs being updated (redundantly) every time an artifact spawns +/datum/geosample/proc/UpdateNearbyArtifactInfo(var/turf/simulated/mineral/container) + if(!container || !istype(container)) + return + + for(var/turf/simulated/mineral/holder in artifact_spawning_turfs) + var/dist = get_dist(container, holder) + if(dist < artifact_distance) + artifact_distance = dist + //artifact_id = A.display_id +/* +#undef FIND_PLANT +#undef FIND_BIO +#undef FIND_METEORIC +#undef FIND_ICE +#undef FIND_CRYSTALLINE +#undef FIND_METALLIC +#undef FIND_IGNEOUS +#undef FIND_METAMORPHIC +#undef FIND_SEDIMENTARY +#undef FIND_NOTHING +*/ \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/artifact_misc.dm b/code/modules/research/xenoarchaeology/misc.dm similarity index 82% rename from code/modules/research/xenoarchaeology/artifact_misc.dm rename to code/modules/research/xenoarchaeology/misc.dm index e30bba2f890..7d72b417c8e 100644 --- a/code/modules/research/xenoarchaeology/artifact_misc.dm +++ b/code/modules/research/xenoarchaeology/misc.dm @@ -1,67 +1,54 @@ - -/obj/item/clothing/suit/bio_suit/anomaly - name = "Anomaly Suit" - desc = "A sealed bio suit capable of resisting exotic alien energies and low pressure environments." - icon_state = "engspace_suit" - item_state = "engspace_suit" - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen) - -/obj/item/clothing/head/bio_hood/anomaly - name = "Anomaly Hood" - desc = "A sealed bio hood capable of resisting exotic alien energies and low pressure environments." - icon_state = "engspace_helmet" - item_state = "engspace_helmet" - -/obj/structure/noticeboard/anomaly/New() - notices = 5 - icon_state = "nboard05" - - //add some memos - var/obj/item/weapon/paper/P = new() - P.name = "Memo RE: proper analysis procedure" - P.info = "Rose,
activate then analyse the anomalies, your results will come so much quicker. Remember to employ basic quasi-elemental forces such as heat, energy, force and various chemical mixes - who knows why those ancient aliens made such obscure activation indices.

And don't forget your suit this time, I can't afford to have any researchers out of commision for as long as that again!.
Ward" - P.stamped = list(/obj/item/weapon/stamp/rd) - P.overlays = list("paper_stamped_rd") - src.contents += P - - P = new() - P.name = "Memo RE: materials gathering" - P.info = "Corasang,
the hands-on approach to gathering our samples may very well be slow at times, but it's safer than allowing the blundering miners to roll willy-nilly over our dig sites in their mechs, destroying everything in the process. And don't forget the escavation tools on your way out there!
- R.W" - P.stamped = list(/obj/item/weapon/stamp/rd) - P.overlays = list("paper_stamped_rd") - src.contents += P - - P = new() - P.name = "Memo RE: ethical quandaries" - P.info = "Darion-

I don't care what his rank is, our business is that of science and knowledge - questions of moral application do not come into this. Sure, so there are those who would employ the energy-wave particles my modified device has managed to abscond for their own personal gain, but I can hardly see the practical benefits of some of those things our benefactors left behind. Ward--" - P.stamped = list(/obj/item/weapon/stamp/rd) - P.overlays = list("paper_stamped_rd") - src.contents += P - - P = new() - P.name = "READ ME! Before you people destroy any more samples" - P.info = "how many times do i have to tell you people, these xeno-arch samples are del-i-cate, and should be handled so! careful application of a focussed, ceoncentrated heat or some corrosive liquids should clear away the extraneous carbon matter, while application of an energy beam will most decidedly destroy it entirely! W, the one who signs your paychecks" - P.stamped = list(/obj/item/weapon/stamp/rd) - P.overlays = list("paper_stamped_rd") - src.contents += P - - P = new() - P.name = "Reminder regarding the anomalous material suits" - P.info = "Do you people think the anomaly suits are cheap to come by? I'm about a hair trigger away from instituting a log book for the damn things. Only wear them if you're going out for a dig, and for god's sake don't go tramping around the station in them unless you're field testing something, R" - P.stamped = list(/obj/item/weapon/stamp/rd) - P.overlays = list("paper_stamped_rd") - src.contents += P - -//Anomaly - -/area/anomaly - icon_state = "anomaly" - -/area/anomaly/hallway - name = "Anomaly Hallway" - -/area/anomaly/lab - name = "Anomaly Lab" - -/area/anomaly/outpost - name = "Research Outpost" + +/obj/structure/noticeboard/anomaly/New() + notices = 5 + icon_state = "nboard05" + + //add some memos + var/obj/item/weapon/paper/P = new() + P.name = "Memo RE: proper analysis procedure" + P.info = "Rose,
activate then analyse the anomalies, your results will come so much quicker. Remember to employ basic quasi-elemental forces such as heat, energy, force and various chemical mixes - who knows why those ancient aliens made such obscure activation indices.

And don't forget your suit this time, I can't afford to have any researchers out of commision for as long as that again!.
Ward" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "Memo RE: materials gathering" + P.info = "Corasang,
the hands-on approach to gathering our samples may very well be slow at times, but it's safer than allowing the blundering miners to roll willy-nilly over our dig sites in their mechs, destroying everything in the process. And don't forget the escavation tools on your way out there!
- R.W" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "Memo RE: ethical quandaries" + P.info = "Darion-

I don't care what his rank is, our business is that of science and knowledge - questions of moral application do not come into this. Sure, so there are those who would employ the energy-wave particles my modified device has managed to abscond for their own personal gain, but I can hardly see the practical benefits of some of those things our benefactors left behind. Ward--" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "READ ME! Before you people destroy any more samples" + P.info = "how many times do i have to tell you people, these xeno-arch samples are del-i-cate, and should be handled so! careful application of a focussed, ceoncentrated heat or some corrosive liquids should clear away the extraneous carbon matter, while application of an energy beam will most decidedly destroy it entirely! W, the one who signs your paychecks" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "Reminder regarding the anomalous material suits" + P.info = "Do you people think the anomaly suits are cheap to come by? I'm about a hair trigger away from instituting a log book for the damn things. Only wear them if you're going out for a dig, and for god's sake don't go tramping around the station in them unless you're field testing something, R" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + +//Anomaly + +/area/anomaly + icon_state = "anomaly" + +/area/anomaly/hallway + name = "Anomaly Hallway" + +/area/anomaly/lab + name = "Anomaly Lab" + +/area/anomaly/outpost + name = "Research Outpost" diff --git a/code/modules/research/xenoarchaeology/spacesuit.dm b/code/modules/research/xenoarchaeology/spacesuit.dm new file mode 100644 index 00000000000..66c9dedb22d --- /dev/null +++ b/code/modules/research/xenoarchaeology/spacesuit.dm @@ -0,0 +1,13 @@ + +/obj/item/clothing/suit/space/anomaly + name = "Anomaly Suit" + desc = "A sealed bio suit capable of resisting exotic alien energies and low pressure environments." + icon_state = "engspace_suit" + item_state = "engspace_suit" + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen) + +/obj/item/clothing/head/helmet/space/anomaly + name = "Anomaly Hood" + desc = "A sealed bio hood capable of resisting exotic alien energies and low pressure environments." + icon_state = "engspace_helmet" + item_state = "engspace_helmet" diff --git a/code/modules/research/xenoarchaeology/suspension_generator.dm b/code/modules/research/xenoarchaeology/suspension_generator.dm index 3c1449f6b49..b24080df2ff 100644 --- a/code/modules/research/xenoarchaeology/suspension_generator.dm +++ b/code/modules/research/xenoarchaeology/suspension_generator.dm @@ -1,5 +1,3 @@ -//these are probably broken - /obj/machinery/suspension_gen name = "suspension field generator" desc = "It has stubby legs bolted up against it's body for stabilising." @@ -32,14 +30,14 @@ for(var/mob/living/carbon/M in T) M.weakened = max(M.weakened, 3) cell.charge -= power_use - if(prob(10)) + if(prob(5)) M << "\blue [pick("You feel tingly.","You feel like floating.","It is hard to speak.","You can barely move.")]" if(field_type == "silicon") for(var/mob/living/silicon/M in T) M.weakened = max(M.weakened, 3) cell.charge -= power_use - if(prob(10)) + if(prob(5)) M << "\blue [pick("You feel tingly.","You feel like floating.","It is hard to speak.","You can barely move.")]" for(var/obj/item/I in T) @@ -51,7 +49,7 @@ for(var/mob/living/simple_animal/M in T) M.weakened = max(M.weakened, 3) cell.charge -= power_use - if(prob(10)) + if(prob(5)) M << "\blue [pick("You feel tingly.","You feel like floating.","It is hard to speak.","You can barely move.")]" if(cell.charge <= 0) diff --git a/code/modules/research/xenoarchaeology/misc_tools.dm b/code/modules/research/xenoarchaeology/tools.dm similarity index 100% rename from code/modules/research/xenoarchaeology/misc_tools.dm rename to code/modules/research/xenoarchaeology/tools.dm diff --git a/code/modules/research/xenoarchaeology/artifact.dm b/code/modules/research/xenoarchaeology/unknown.dm similarity index 100% rename from code/modules/research/xenoarchaeology/artifact.dm rename to code/modules/research/xenoarchaeology/unknown.dm diff --git a/code/modules/research/xenoarchaeology/artifact_analysis.dm b/code/modules/research/xenoarchaeology/unknown_analysis.dm similarity index 97% rename from code/modules/research/xenoarchaeology/artifact_analysis.dm rename to code/modules/research/xenoarchaeology/unknown_analysis.dm index 5225b650e7f..706343e8f62 100644 --- a/code/modules/research/xenoarchaeology/artifact_analysis.dm +++ b/code/modules/research/xenoarchaeology/unknown_analysis.dm @@ -1,318 +1,318 @@ - -//cael - some changes here. the analysis pad is entirely new - -/obj/machinery/artifact_analyser - name = "Artifact Analyser" - desc = "Studies the structure of artifacts to discover their uses." - icon = 'virology.dmi' - icon_state = "analyser" - anchored = 1 - density = 1 - var/working = 0 - var/accuO = 0 - var/accuT = 0 - var/accuE1 = 0 - var/accuE2 = 0 - var/aorigin = "None" - var/atrigger = "None" - var/aeffect1 = "None" - var/aeffect2 = "None" - var/list/origin_bonuses - var/list/trigger_bonuses - var/list/function_bonuses - var/list/range_bonuses - var/cur_id = "" - var/scan_num = 0 - var/obj/machinery/artifact/cur_artifact = null - var/obj/machinery/analyser_pad/owned_pad = null - var/list/allorigins = list("Ancient Robots","Martian","Wizard Federation","Extradimensional","Precursor") - var/list/alltriggers = list("Contact with Living Organism","Heavy Impact","Contact with Energy Source","Contact with Hydrogen","Contact with Corrosive Substance","Contact with Volatile Substance","Contact with Toxins","Exposure to Heat") - var/list/alleffects = list("Healing Device","Anti-biological Weapon","Non-lethal Stunning Trap","Mechanoid Repair Module","Mechanoid Deconstruction Device","Power Generator","Power Drain","Stellar Mineral Attractor","Agriculture Regulator","Shield Generator","Space-Time Displacer") - var/list/allranges = list("Constant Short-Range Energy Field","Medium Range Energy Pulses","Long Range Energy Pulses","Extreme Range Energy Pulses","Requires contact with subject") - -/obj/machinery/artifact_analyser/New() - ..() - origin_bonuses = new/list() - origin_bonuses["ancient"] = 0 - origin_bonuses["martian"] = 0 - origin_bonuses["wizard"] = 0 - origin_bonuses["eldritch"] = 0 - origin_bonuses["precursor"] = 0 - trigger_bonuses = new/list() - trigger_bonuses["ancient"] = 0 - trigger_bonuses["martian"] = 0 - trigger_bonuses["wizard"] = 0 - trigger_bonuses["eldritch"] = 0 - trigger_bonuses["precursor"] = 0 - function_bonuses = new/list() - function_bonuses["ancient"] = 0 - function_bonuses["martian"] = 0 - function_bonuses["wizard"] = 0 - function_bonuses["eldritch"] = 0 - function_bonuses["precursor"] = 0 - range_bonuses = new/list() - range_bonuses["ancient"] = 0 - range_bonuses["martian"] = 0 - range_bonuses["wizard"] = 0 - range_bonuses["eldritch"] = 0 - range_bonuses["precursor"] = 0 - // - spawn(10) - owned_pad = locate() in orange(1, src) - -/obj/machinery/artifact_analyser/attack_hand(var/mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - user.machine = src - var/dat = "Artifact Analyser
" - dat += "

" - if(!owned_pad) - dat += "Unable to locate analysis pad.
" - dat += "

" - else if (!src.working) - dat += "Artifact ID: [cur_id]
" - dat += "Artifact Origin: [aorigin] ([accuO]%)
" - dat += "Activation Trigger: [atrigger] ([accuT]%)
" - dat += "Artifact Function: [aeffect1] ([accuE1]%)
" - dat += "Artifact Range: [aeffect2] ([accuE2]%)

" - dat += "

" - dat += "Artifact ID is determined from unique energy emission signatures.
" - dat += "Analyse Artifact (Scan number #[scan_num+1])
" - dat += "Upload/update artifact scan
" - dat += "Print Page
" - else - dat += "Please wait. Analysis in progress.
" - dat += "

" - // - dat += "Close
" - user << browse(dat, "window=artanalyser;size=450x500") - onclose(user, "artanalyser") - -/obj/machinery/artifact_analyser/process() - if(stat & (NOPOWER|BROKEN)) - return - use_power(350) - // - if(!owned_pad) - for(var/obj/machinery/analyser_pad/pad in range(1)) - owned_pad = pad - break - -/obj/machinery/artifact_analyser/proc/AA_FailedAnalysis(var/failtype) - switch(failtype) - if(1) - src.aorigin = "Failed to Identify" - if (prob(20)) src.aorigin = pick(src.allorigins) - if(2) - src.atrigger = "Failed to Identify" - if (prob(20)) src.atrigger = pick(src.alltriggers) - if(3) - src.aeffect1 = "Failed to Identify" - if (prob(20)) src.aeffect1 = pick(src.alleffects) - if(4) - src.aeffect2 = "Failed to Identify" - if (prob(20)) src.aeffect2 = pick(src.allranges) - -/obj/machinery/artifact_analyser/proc/AA_Analyse() - if(!cur_artifact) - return - src.accuO = 5 + rand(0,10) + origin_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 - src.accuT = 5 + rand(0,10) + trigger_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 - src.accuE1 = 5 + rand(0,10) + function_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 - src.accuE2 = 5 + rand(0,10) + range_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 - - //keep any correctly determined properties the same - var/origin_correct = 0 - var/trigger_correct = 0 - var/function_correct = 0 - var/range_correct = 0 - if(cur_id == cur_artifact.display_id) - if(src.aorigin == cur_artifact.origin) - origin_correct = 1 - - if(src.atrigger == cur_artifact.my_effect.trigger) - trigger_correct = 1 - else if(src.atrigger == cur_artifact.my_effect.triggerX) - trigger_correct = 1 - - if(src.aeffect1 == cur_artifact.my_effect.effecttype) - function_correct = 1 - - if(src.aeffect2 == cur_artifact.my_effect.effectmode) - range_correct = 1 - - if (src.accuO > 100) src.accuO = 100 - if (src.accuT > 100) src.accuT = 100 - if (src.accuE1 > 100) src.accuE1 = 100 - if (src.accuE2 > 100) src.accuE2 = 100 - // Roll to generate report - if (prob(accuO) || origin_correct) - switch(cur_artifact.origin) - if("ancient") src.aorigin = "Ancient Robots" - if("martian") src.aorigin = "Martian" - if("wizard") src.aorigin = "Wizard Federation" - if("eldritch") src.aorigin = "Extradimensional" - if("precursor") src.aorigin = "Precursor" - else src.aorigin = "Unknown Origin" - origin_bonuses[cur_artifact.origin] += 10 - else - AA_FailedAnalysis(1) - origin_bonuses[cur_artifact.origin] += 5 - if (prob(accuT) || trigger_correct) - switch(cur_artifact.my_effect.trigger) - if("touch") src.atrigger = "Contact with Living Organism" - if("force") src.atrigger = "Heavy Impact" - if("energy") src.atrigger = "Contact with Energy Source" - if("chemical") - switch(cur_artifact.my_effect.triggerX) - if("hydrogen") src.atrigger = "Contact with Hydrogen" - if("corrosive") src.atrigger = "Contact with Corrosive Substance" - if("volatile") src.atrigger = "Contact with Volatile Substance" - if("toxin") src.atrigger = "Contact with Toxins" - if("heat") src.atrigger = "Exposure to Heat" - else src.atrigger = "Unknown Trigger" - trigger_bonuses[cur_artifact.origin] += 5 - else - AA_FailedAnalysis(2) - trigger_bonuses[cur_artifact.origin] += 1 - if (prob(accuE1) || function_correct) - switch(cur_artifact.my_effect.effecttype) - if("healing") src.aeffect1 = "Healing Device" - if("injure") src.aeffect1 = "Anti-biological Weapon" - // if("stun") src.aeffect1 = "Non-lethal Stunning Trap" - if("roboheal") src.aeffect1 = "Mechanoid Repair Module" - if("robohurt") src.aeffect1 = "Mechanoid Deconstruction Device" - if("cellcharge") src.aeffect1 = "Power Generator" - if("celldrain") src.aeffect1 = "Power Drain" - if("planthelper") src.aeffect1 = "Agriculture Regulator" - if("forcefield") src.aeffect1 = "Shield Generator" - if("teleport") src.aeffect1 = "Space-Time Displacer" - else src.aeffect1 = "Unknown Effect" - function_bonuses[cur_artifact.origin] += 5 - else - AA_FailedAnalysis(3) - function_bonuses[cur_artifact.origin] += 1 - if (prob(accuE2) || range_correct) - switch(cur_artifact.my_effect.effectmode) - if("aura") src.aeffect2 = "Constant Short-Range Energy Field" - if("pulse") - if(cur_artifact.my_effect.aurarange > 7) src.aeffect2 = "Long Range Energy Pulses" - else src.aeffect2 = "Medium Range Energy Pulses" - if("worldpulse") src.aeffect2 = "Extreme Range Energy Pulses" - if("contact") src.aeffect2 = "Requires contact with subject" - else src.aeffect2 = "Unknown Range" - range_bonuses[cur_artifact.origin] += 5 - else - AA_FailedAnalysis(4) - range_bonuses[cur_artifact.origin] += 1 - - cur_artifact.name = "alien artifact ([cur_artifact.display_id])" - cur_artifact.desc = "A large alien device. It has a small tag near the bottom that reads \"[cur_artifact.display_id]\"." - cur_id = cur_artifact.display_id - cur_artifact.my_effect.artifact_id = cur_artifact.display_id - -/obj/machinery/artifact_analyser/Topic(href, href_list) - - if(href_list["analyse"]) - if(owned_pad) - var/turf/pad_turf = get_turf(owned_pad) - var/findarti = 0 - for(var/obj/machinery/artifact/A in pad_turf.contents) - findarti++ - cur_artifact = A - if (findarti == 1) - if(cur_artifact && cur_artifact.being_used) - var/message = "[src] states, \"Cannot analyse. Excess energy drain is disrupting signal.\"" - src.visible_message(message, message) - else - cur_artifact.anchored = 1 - cur_artifact.being_used = 1 - src.working = 1 - src.icon_state = "analyser_processing" - var/time = rand(30,50) + max(0, 300 - scan_num * 10) - /*for(var/i = artifact_research.starting_tier, i <= artifact_research.max_tiers, i++) - for(var/datum/artiresearch/R in artifact_research.researched_items[i]) - if (R.bonustype == "analyser") time -= R.bonusTime*/ - time *= 10 - var/message = "[src] states, \"Commencing analysis.\"" - src.visible_message(message, message) - use_power(500) - spawn(time) - src.working = 0 - icon_state = "analyser" - cur_artifact.anchored = 0 - cur_artifact.being_used = 0 - if(cur_artifact.loc == pad_turf) - AA_Analyse() - scan_num++ - message = "[src] states, \"Analysis complete.\"" - src.visible_message(message, message) - use_power(500) - else if (findarti > 1) - var/message = "[src] states, \"Cannot analyse. Error isolating energy signature.\"" - src.visible_message(message, message) - else - var/message = "[src] states, \"Cannot analyse. No noteworthy energy signature isolated.\"" - src.visible_message(message, message) - - if(href_list["upload"] && cur_id != "") - //add new datum to every DB in the world - for(var/obj/machinery/computer/artifact_database/DB in world) - var/update = 0 - for(var/datum/catalogued_artifact/CA in DB.catalogued_artifacts) - if(CA.display_id == cur_id) - //already there, so update it - update = 1 - CA.origin = aorigin + " ([accuO]%)" - CA.trigger = atrigger + " ([accuT]%)" - CA.effecttype = aeffect1 + " ([accuE1]%)" - CA.effectmode = aeffect2 + " ([accuE2]%)" - if(!update) - //not there, so add it - var/datum/catalogued_artifact/CA = new() - CA.display_id = cur_id - CA.origin = aorigin + " ([accuO]%)" - CA.trigger = atrigger + " ([accuT]%)" - CA.effecttype = aeffect1 + " ([accuE1]%)" - CA.effectmode = aeffect2 + " ([accuE2]%)" - DB.catalogued_artifacts.Add(CA) - use_power(100) - - if(href_list["print"]) - var/r = "Artifact Analysis Report (Scan #[scan_num])
" - r += "Artifact ID: [cur_id] (determined from unique energy emission signatures)
" - r += "Artifact Origin: [aorigin] ([accuO]%)
" - r += "Activation Trigger: [atrigger] ([accuT]%)
" - r += "Artifact Function: [aeffect1] ([accuE1]%)
" - r += "Artifact Range: [aeffect2] ([accuE2]%)

" - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) - P.name = "Artifact Analysis Report #[scan_num]" - P.info = r - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3) - use_power(10) - - if(href_list["close"]) - usr << browse(null, "window=artanalyser") - usr.machine = null - - src.updateDialog() - -//stick artifacts onto this then switch the analyser on -/obj/machinery/analyser_pad - name = "artifact analysis pad" - desc = "Studies the structure of artifacts to discover their uses." - icon = 'stationobjs.dmi' - icon_state = "tele0" - anchored = 1 - density = 0 - -/obj/machinery/analyser_pad/New() - ..() - /*spawn(10) - for(var/obj/machinery/artifact_analyser/analyser in orange(1)) - world << "pad found analyser" - if(!analyser.owned_pad) - analyser.owned_pad = src - world << "pad set analyser to self" - break*/ + +//cael - some changes here. the analysis pad is entirely new + +/obj/machinery/artifact_analyser + name = "Artifact Analyser" + desc = "Studies the structure of artifacts to discover their uses." + icon = 'virology.dmi' + icon_state = "analyser" + anchored = 1 + density = 1 + var/working = 0 + var/accuO = 0 + var/accuT = 0 + var/accuE1 = 0 + var/accuE2 = 0 + var/aorigin = "None" + var/atrigger = "None" + var/aeffect1 = "None" + var/aeffect2 = "None" + var/list/origin_bonuses + var/list/trigger_bonuses + var/list/function_bonuses + var/list/range_bonuses + var/cur_id = "" + var/scan_num = 0 + var/obj/machinery/artifact/cur_artifact = null + var/obj/machinery/analyser_pad/owned_pad = null + var/list/allorigins = list("Ancient Robots","Martian","Wizard Federation","Extradimensional","Precursor") + var/list/alltriggers = list("Contact with Living Organism","Heavy Impact","Contact with Energy Source","Contact with Hydrogen","Contact with Corrosive Substance","Contact with Volatile Substance","Contact with Toxins","Exposure to Heat") + var/list/alleffects = list("Healing Device","Anti-biological Weapon","Non-lethal Stunning Trap","Mechanoid Repair Module","Mechanoid Deconstruction Device","Power Generator","Power Drain","Stellar Mineral Attractor","Agriculture Regulator","Shield Generator","Space-Time Displacer") + var/list/allranges = list("Constant Short-Range Energy Field","Medium Range Energy Pulses","Long Range Energy Pulses","Extreme Range Energy Pulses","Requires contact with subject") + +/obj/machinery/artifact_analyser/New() + ..() + origin_bonuses = new/list() + origin_bonuses["ancient"] = 0 + origin_bonuses["martian"] = 0 + origin_bonuses["wizard"] = 0 + origin_bonuses["eldritch"] = 0 + origin_bonuses["precursor"] = 0 + trigger_bonuses = new/list() + trigger_bonuses["ancient"] = 0 + trigger_bonuses["martian"] = 0 + trigger_bonuses["wizard"] = 0 + trigger_bonuses["eldritch"] = 0 + trigger_bonuses["precursor"] = 0 + function_bonuses = new/list() + function_bonuses["ancient"] = 0 + function_bonuses["martian"] = 0 + function_bonuses["wizard"] = 0 + function_bonuses["eldritch"] = 0 + function_bonuses["precursor"] = 0 + range_bonuses = new/list() + range_bonuses["ancient"] = 0 + range_bonuses["martian"] = 0 + range_bonuses["wizard"] = 0 + range_bonuses["eldritch"] = 0 + range_bonuses["precursor"] = 0 + // + spawn(10) + owned_pad = locate() in orange(1, src) + +/obj/machinery/artifact_analyser/attack_hand(var/mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return + user.machine = src + var/dat = "Artifact Analyser
" + dat += "

" + if(!owned_pad) + dat += "Unable to locate analysis pad.
" + dat += "

" + else if (!src.working) + dat += "Artifact ID: [cur_id]
" + dat += "Artifact Origin: [aorigin] ([accuO]%)
" + dat += "Activation Trigger: [atrigger] ([accuT]%)
" + dat += "Artifact Function: [aeffect1] ([accuE1]%)
" + dat += "Artifact Range: [aeffect2] ([accuE2]%)

" + dat += "

" + dat += "Artifact ID is determined from unique energy emission signatures.
" + dat += "
Analyse Artifact (Scan number #[scan_num+1])
" + dat += "Upload/update artifact scan
" + dat += "Print Page
" + else + dat += "Please wait. Analysis in progress.
" + dat += "

" + // + dat += "Close
" + user << browse(dat, "window=artanalyser;size=450x500") + onclose(user, "artanalyser") + +/obj/machinery/artifact_analyser/process() + if(stat & (NOPOWER|BROKEN)) + return + use_power(350) + // + if(!owned_pad) + for(var/obj/machinery/analyser_pad/pad in range(1)) + owned_pad = pad + break + +/obj/machinery/artifact_analyser/proc/AA_FailedAnalysis(var/failtype) + switch(failtype) + if(1) + src.aorigin = "Failed to Identify" + if (prob(20)) src.aorigin = pick(src.allorigins) + if(2) + src.atrigger = "Failed to Identify" + if (prob(20)) src.atrigger = pick(src.alltriggers) + if(3) + src.aeffect1 = "Failed to Identify" + if (prob(20)) src.aeffect1 = pick(src.alleffects) + if(4) + src.aeffect2 = "Failed to Identify" + if (prob(20)) src.aeffect2 = pick(src.allranges) + +/obj/machinery/artifact_analyser/proc/AA_Analyse() + if(!cur_artifact) + return + src.accuO = 5 + rand(0,10) + origin_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 + src.accuT = 5 + rand(0,10) + trigger_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 + src.accuE1 = 5 + rand(0,10) + function_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 + src.accuE2 = 5 + rand(0,10) + range_bonuses[cur_artifact.origin] + cur_artifact.activated * 50 + + //keep any correctly determined properties the same + var/origin_correct = 0 + var/trigger_correct = 0 + var/function_correct = 0 + var/range_correct = 0 + if(cur_id == cur_artifact.display_id) + if(src.aorigin == cur_artifact.origin) + origin_correct = 1 + + if(src.atrigger == cur_artifact.my_effect.trigger) + trigger_correct = 1 + else if(src.atrigger == cur_artifact.my_effect.triggerX) + trigger_correct = 1 + + if(src.aeffect1 == cur_artifact.my_effect.effecttype) + function_correct = 1 + + if(src.aeffect2 == cur_artifact.my_effect.effectmode) + range_correct = 1 + + if (src.accuO > 100) src.accuO = 100 + if (src.accuT > 100) src.accuT = 100 + if (src.accuE1 > 100) src.accuE1 = 100 + if (src.accuE2 > 100) src.accuE2 = 100 + // Roll to generate report + if (prob(accuO) || origin_correct) + switch(cur_artifact.origin) + if("ancient") src.aorigin = "Ancient Robots" + if("martian") src.aorigin = "Martian" + if("wizard") src.aorigin = "Wizard Federation" + if("eldritch") src.aorigin = "Extradimensional" + if("precursor") src.aorigin = "Precursor" + else src.aorigin = "Unknown Origin" + origin_bonuses[cur_artifact.origin] += 10 + else + AA_FailedAnalysis(1) + origin_bonuses[cur_artifact.origin] += 5 + if (prob(accuT) || trigger_correct) + switch(cur_artifact.my_effect.trigger) + if("touch") src.atrigger = "Contact with Living Organism" + if("force") src.atrigger = "Heavy Impact" + if("energy") src.atrigger = "Contact with Energy Source" + if("chemical") + switch(cur_artifact.my_effect.triggerX) + if("hydrogen") src.atrigger = "Contact with Hydrogen" + if("corrosive") src.atrigger = "Contact with Corrosive Substance" + if("volatile") src.atrigger = "Contact with Volatile Substance" + if("toxin") src.atrigger = "Contact with Toxins" + if("heat") src.atrigger = "Exposure to Heat" + else src.atrigger = "Unknown Trigger" + trigger_bonuses[cur_artifact.origin] += 5 + else + AA_FailedAnalysis(2) + trigger_bonuses[cur_artifact.origin] += 1 + if (prob(accuE1) || function_correct) + switch(cur_artifact.my_effect.effecttype) + if("healing") src.aeffect1 = "Healing Device" + if("injure") src.aeffect1 = "Anti-biological Weapon" + // if("stun") src.aeffect1 = "Non-lethal Stunning Trap" + if("roboheal") src.aeffect1 = "Mechanoid Repair Module" + if("robohurt") src.aeffect1 = "Mechanoid Deconstruction Device" + if("cellcharge") src.aeffect1 = "Power Generator" + if("celldrain") src.aeffect1 = "Power Drain" + if("planthelper") src.aeffect1 = "Agriculture Regulator" + if("forcefield") src.aeffect1 = "Shield Generator" + if("teleport") src.aeffect1 = "Space-Time Displacer" + else src.aeffect1 = "Unknown Effect" + function_bonuses[cur_artifact.origin] += 5 + else + AA_FailedAnalysis(3) + function_bonuses[cur_artifact.origin] += 1 + if (prob(accuE2) || range_correct) + switch(cur_artifact.my_effect.effectmode) + if("aura") src.aeffect2 = "Constant Short-Range Energy Field" + if("pulse") + if(cur_artifact.my_effect.aurarange > 7) src.aeffect2 = "Long Range Energy Pulses" + else src.aeffect2 = "Medium Range Energy Pulses" + if("worldpulse") src.aeffect2 = "Extreme Range Energy Pulses" + if("contact") src.aeffect2 = "Requires contact with subject" + else src.aeffect2 = "Unknown Range" + range_bonuses[cur_artifact.origin] += 5 + else + AA_FailedAnalysis(4) + range_bonuses[cur_artifact.origin] += 1 + + cur_artifact.name = "alien artifact ([cur_artifact.display_id])" + cur_artifact.desc = "A large alien device. It has a small tag near the bottom that reads \"[cur_artifact.display_id]\"." + cur_id = cur_artifact.display_id + cur_artifact.my_effect.artifact_id = cur_artifact.display_id + +/obj/machinery/artifact_analyser/Topic(href, href_list) + + if(href_list["analyse"]) + if(owned_pad) + var/turf/pad_turf = get_turf(owned_pad) + var/findarti = 0 + for(var/obj/machinery/artifact/A in pad_turf.contents) + findarti++ + cur_artifact = A + if (findarti == 1) + if(cur_artifact && cur_artifact.being_used) + var/message = "[src] states, \"Cannot analyse. Excess energy drain is disrupting signal.\"" + src.visible_message(message, message) + else + cur_artifact.anchored = 1 + cur_artifact.being_used = 1 + src.working = 1 + src.icon_state = "analyser_processing" + var/time = rand(30,50) + max(0, 300 - scan_num * 10) + /*for(var/i = artifact_research.starting_tier, i <= artifact_research.max_tiers, i++) + for(var/datum/artiresearch/R in artifact_research.researched_items[i]) + if (R.bonustype == "analyser") time -= R.bonusTime*/ + time *= 10 + var/message = "[src] states, \"Commencing analysis.\"" + src.visible_message(message, message) + use_power(500) + spawn(time) + src.working = 0 + icon_state = "analyser" + cur_artifact.anchored = 0 + cur_artifact.being_used = 0 + if(cur_artifact.loc == pad_turf) + AA_Analyse() + scan_num++ + message = "[src] states, \"Analysis complete.\"" + src.visible_message(message, message) + use_power(500) + else if (findarti > 1) + var/message = "[src] states, \"Cannot analyse. Error isolating energy signature.\"" + src.visible_message(message, message) + else + var/message = "[src] states, \"Cannot analyse. No noteworthy energy signature isolated.\"" + src.visible_message(message, message) + + if(href_list["upload"] && cur_id != "") + //add new datum to every DB in the world + for(var/obj/machinery/computer/artifact_database/DB in world) + var/update = 0 + for(var/datum/catalogued_artifact/CA in DB.catalogued_artifacts) + if(CA.display_id == cur_id) + //already there, so update it + update = 1 + CA.origin = aorigin + " ([accuO]%)" + CA.trigger = atrigger + " ([accuT]%)" + CA.effecttype = aeffect1 + " ([accuE1]%)" + CA.effectmode = aeffect2 + " ([accuE2]%)" + if(!update) + //not there, so add it + var/datum/catalogued_artifact/CA = new() + CA.display_id = cur_id + CA.origin = aorigin + " ([accuO]%)" + CA.trigger = atrigger + " ([accuT]%)" + CA.effecttype = aeffect1 + " ([accuE1]%)" + CA.effectmode = aeffect2 + " ([accuE2]%)" + DB.catalogued_artifacts.Add(CA) + use_power(100) + + if(href_list["print"]) + var/r = "Artifact Analysis Report (Scan #[scan_num])
" + r += "Artifact ID: [cur_id] (determined from unique energy emission signatures)
" + r += "Artifact Origin: [aorigin] ([accuO]%)
" + r += "Activation Trigger: [atrigger] ([accuT]%)
" + r += "Artifact Function: [aeffect1] ([accuE1]%)
" + r += "Artifact Range: [aeffect2] ([accuE2]%)

" + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) + P.name = "Artifact Analysis Report #[scan_num]" + P.info = r + for(var/mob/O in hearers(src, null)) + O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3) + use_power(10) + + if(href_list["close"]) + usr << browse(null, "window=artanalyser") + usr.machine = null + + src.updateDialog() + +//stick artifacts onto this then switch the analyser on +/obj/machinery/analyser_pad + name = "artifact analysis pad" + desc = "Studies the structure of artifacts to discover their uses." + icon = 'stationobjs.dmi' + icon_state = "tele0" + anchored = 1 + density = 0 + +/obj/machinery/analyser_pad/New() + ..() + /*spawn(10) + for(var/obj/machinery/artifact_analyser/analyser in orange(1)) + world << "pad found analyser" + if(!analyser.owned_pad) + analyser.owned_pad = src + world << "pad set analyser to self" + break*/ diff --git a/code/modules/research/xenoarchaeology/artifact_db.dm b/code/modules/research/xenoarchaeology/unknown_db.dm similarity index 97% rename from code/modules/research/xenoarchaeology/artifact_db.dm rename to code/modules/research/xenoarchaeology/unknown_db.dm index 5bdb66d71fd..c6e0d1fb3fa 100644 --- a/code/modules/research/xenoarchaeology/artifact_db.dm +++ b/code/modules/research/xenoarchaeology/unknown_db.dm @@ -1,58 +1,58 @@ - -/datum/catalogued_artifact - var/trigger = "touch" // What activates it? - var/effecttype = "healing" // What does it do? - var/effectmode = "aura" // How does it carry out the effect? - var/display_id = "" // Artifact ID to display once successfully scanned - var/origin = "" - -/obj/machinery/computer/artifact_database - name = "Artifact Database" - icon_state = "rdcomp" - var/list/catalogued_artifacts - -/obj/machinery/computer/artifact_database/New() - ..() - catalogued_artifacts = new/list - -/obj/machinery/computer/artifact_database/Topic(href, href_list) - ..() - if( href_list["close"] ) - usr << browse(null, "window=artifact_db") - usr.machine = null - updateDialog() - -/obj/machinery/computer/artifact_database/process() - ..() - updateDialog() - -/obj/machinery/computer/artifact_database/interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.machine = null - user << browse(null, "window=artifact_db") - return - var/t = "Artifact Database
" - t += "
" - for(var/datum/catalogued_artifact/CA in catalogued_artifacts) - t += "Artifact ID: [CA.display_id] (determined from unique energy emission signatures)
" - t += "Artifact Origin: [CA.origin]
" - t += "Activation Trigger: [CA.trigger]
" - t += "Artifact Function: [CA.effecttype]
" - t += "Artifact Range: [CA.effectmode]

" - t += "
" - t += "
Refresh Close
" - user << browse(t, "window=artifact_db;size=500x800") - user.machine = src - -/* -/datum/artifact_effect - var/origin = null // Used in the randomisation/research of the artifact. - var/trigger = "touch" // What activates it? - var/triggerX = "none" // Used for more varied triggers - var/effecttype = "healing" // What does it do? - var/effectmode = "aura" // How does it carry out the effect? - var/aurarange = 4 // How far the artifact will extend an aura effect. - var/display_id = "" // Artifact ID to display once successfully scanned - var/list/created_field + +/datum/catalogued_artifact + var/trigger = "touch" // What activates it? + var/effecttype = "healing" // What does it do? + var/effectmode = "aura" // How does it carry out the effect? + var/display_id = "" // Artifact ID to display once successfully scanned + var/origin = "" + +/obj/machinery/computer/artifact_database + name = "Artifact Database" + icon_state = "rdcomp" + var/list/catalogued_artifacts + +/obj/machinery/computer/artifact_database/New() + ..() + catalogued_artifacts = new/list + +/obj/machinery/computer/artifact_database/Topic(href, href_list) + ..() + if( href_list["close"] ) + usr << browse(null, "window=artifact_db") + usr.machine = null + updateDialog() + +/obj/machinery/computer/artifact_database/process() + ..() + updateDialog() + +/obj/machinery/computer/artifact_database/interact(mob/user) + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + if (!istype(user, /mob/living/silicon)) + user.machine = null + user << browse(null, "window=artifact_db") + return + var/t = "Artifact Database
" + t += "
" + for(var/datum/catalogued_artifact/CA in catalogued_artifacts) + t += "Artifact ID: [CA.display_id] (determined from unique energy emission signatures)
" + t += "Artifact Origin: [CA.origin]
" + t += "Activation Trigger: [CA.trigger]
" + t += "Artifact Function: [CA.effecttype]
" + t += "Artifact Range: [CA.effectmode]

" + t += "
" + t += "Refresh Close
" + user << browse(t, "window=artifact_db;size=500x800") + user.machine = src + +/* +/datum/artifact_effect + var/origin = null // Used in the randomisation/research of the artifact. + var/trigger = "touch" // What activates it? + var/triggerX = "none" // Used for more varied triggers + var/effecttype = "healing" // What does it do? + var/effectmode = "aura" // How does it carry out the effect? + var/aurarange = 4 // How far the artifact will extend an aura effect. + var/display_id = "" // Artifact ID to display once successfully scanned + var/list/created_field */ \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/artifact_effect.dm b/code/modules/research/xenoarchaeology/unknown_effect.dm similarity index 97% rename from code/modules/research/xenoarchaeology/artifact_effect.dm rename to code/modules/research/xenoarchaeology/unknown_effect.dm index 118e94adc17..092cb0d0f58 100644 --- a/code/modules/research/xenoarchaeology/artifact_effect.dm +++ b/code/modules/research/xenoarchaeology/unknown_effect.dm @@ -1,542 +1,542 @@ -// - -/datum/artifact_effect - var/artifact_id = "" // Display ID of the spawning artifact - var/trigger = "touch" // What activates it? - var/triggerX = "none" // Used for more varied triggers - var/effecttype = "healing" // What does it do? - var/effectmode = "aura" // How does it carry out the effect? - var/aurarange = 4 // How far the artifact will extend an aura effect. - var/list/created_field - var/archived_loc - -/datum/artifact_effect/New() - // - created_field = new() - -/datum/artifact_effect/proc/GetOriginString(var/origin) - -/datum/artifact_effect/proc/GetEffectString(var/effect) - -/datum/artifact_effect/proc/GetTriggerString(var/trigger) - -/datum/artifact_effect/proc/GetRangeString(var/range) - switch(effectmode) - if("aura") return "Constant Short-Range Energy Field" - if("pulse") - if(aurarange > 7) return "Long Range Energy Pulses" - else return "Medium Range Energy Pulses" - if("worldpulse") return "Extreme Range Energy Pulses" - if("contact") return "Requires contact with subject" - else return "Unknown Range" - -/datum/artifact_effect/proc/HaltEffect() - for(var/obj/effect/energy_field/F in created_field) - created_field.Remove(F) - del F - -/datum/artifact_effect/proc/UpdateEffect(var/atom/originator) - /*for(var/obj/effect/energy_field/F in created_field) - created_field.Remove(F) - del F*/ - if(originator.loc != archived_loc) - archived_loc = originator.loc - update_move(originator) - - for(var/obj/effect/energy_field/E in created_field) - if(E.strength < 5) - E.Strengthen(0.2) - -/datum/artifact_effect/proc/DoEffect(var/atom/originator) - archived_loc = originator.loc - if (src.effectmode == "contact") - var/mob/living/user = originator - if(!user) - return - switch(src.effecttype) - if("healing") - //caeltodo - if (istype(user, /mob/living/carbon/human/)) - user << "\blue You feel a soothing energy invigorate you." - - var/mob/living/carbon/human/H = user - for(var/datum/organ/external/affecting in H.organs) - if(!affecting) continue - if(!istype(affecting, /datum/organ/external)) continue - affecting.heal_damage(25, 25) //fixes getting hit after ingestion, killing you when game updates organ health - //user:heal_organ_damage(25, 25) - // - user.adjustOxyLoss(-25) - user.adjustToxLoss(-25) - user.adjustBruteLoss(-25) - user.adjustFireLoss(-25) - user.adjustBrainLoss(-25) - user.radiation -= min(user.radiation, 25) - user.nutrition += 50 - H.bodytemperature = initial(H.bodytemperature) - // - H.vessel.add_reagent("blood",50) - spawn(1) - H.fixblood() - H.regenerate_icons() - return 1 - // - if (istype(user, /mob/living/carbon/monkey/)) - user << "\blue You feel a soothing energy invigorate you." - user.adjustOxyLoss(-25) - user.adjustToxLoss(-25) - user.adjustBruteLoss(-25) - user.adjustFireLoss(-25) - user.adjustBrainLoss(-25) - return 1 - else user << "Nothing happens." - if("injure") - if (istype(user, /mob/living/carbon/)) - user << "\red A painful discharge of energy strikes you!" - user.adjustOxyLoss(rand(5,25)) - user.adjustToxLoss(rand(5,25)) - user.adjustBruteLoss(rand(5,25)) - user.adjustFireLoss(rand(5,25)) - user.adjustBrainLoss(rand(5,25)) - user.radiation += 25 - user.nutrition -= min(50, user.nutrition) - user.make_dizzy(6) - user.weakened += 6 - return 1 - else user << "Nothing happens." - if("stun") - if (istype(user, /mob/living/carbon/)) - user << "\red A powerful force overwhelms your consciousness." - user.weakened += 45 - user.stuttering += 45 - if(prob(50)) - user.stunned += rand(1,10) - return 1 - else user << "Nothing happens." - if("roboheal") - if (istype(user, /mob/living/silicon/robot)) - user << "\blue Your systems report damaged components mending by themselves!" - user.adjustBruteLoss(rand(-10,-30)) - user.adjustFireLoss(rand(-10,-30)) - return 1 - else user << "Nothing happens." - if("robohurt") - if (istype(user, /mob/living/silicon/robot)) - user << "\red Your systems report severe damage has been inflicted!" - user.adjustBruteLoss(rand(10,50)) - user.adjustFireLoss(rand(10,50)) - return 1 - else user << "Nothing happens." - if("forcefield") - while(created_field.len < 16) - var/obj/effect/energy_field/E = new (locate(user.x,user.y,user.z)) - created_field.Add(E) - E.strength = 1 - E.density = 1 - E.anchored = 1 - E.invisibility = 0 - return 1 - if("teleport") - var/list/randomturfs = new/list() - for(var/turf/T in orange(user, 50)) - if(!istype(T, /turf/simulated/floor) || T.density) - continue - randomturfs.Add(T) - if(randomturfs.len > 0) - user << "\red You are suddenly zapped away elsewhere!" - if (user.buckled) - user.buckled.unbuckle() - user.loc = pick(randomturfs) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is - sparks.start() - return 1 - if("sleepy") - user << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") - user.drowsyness = min(user.drowsyness + rand(5,25), 50) - user.eye_blurry = min(user.eye_blurry + rand(1,3), 50) - return 1 - else if (src.effectmode == "aura") - switch(src.effecttype) - //caeltodo - if("healing") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - if(prob(10)) M << "\blue You feel a soothing energy radiating from something nearby." - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - M.adjustToxLoss(-1) - M.adjustOxyLoss(-1) - M.adjustBrainLoss(-1) - M.updatehealth() - return 1 - if("injure") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - if(prob(10)) M << "\red You feel a painful force radiating from something nearby." - M.adjustBruteLoss(1) - M.adjustFireLoss(1) - M.adjustToxLoss(1) - M.adjustOxyLoss(1) - M.adjustBrainLoss(1) - M.updatehealth() - return 1 - if("stun") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - if(prob(10)) M << "\red Energy radiating from the [originator] is making you feel numb." - if(prob(20)) - M << "\red Your body goes numb for a moment." - M.stunned += 2 - M.weakened += 2 - M.stuttering += 2 - return 1 - if("roboheal") - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - if(prob(10)) M << "\blue SYSTEM ALERT: Beneficial energy field detected!" - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - M.updatehealth() - return 1 - if("robohurt") - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - if(prob(10)) M << "\red SYSTEM ALERT: Harmful energy field detected!" - M.adjustBruteLoss(1) - M.adjustFireLoss(1) - M.updatehealth() - return 1 - if("cellcharge") - for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/B in C.contents) - B.charge += 10 - for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) S.charge += 20 - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/D in M.contents) - D.charge += 10 - if(prob(10)) M << "\blue SYSTEM ALERT: Energy boosting field detected!" - return 1 - if("celldrain") - for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/B in C.contents) - B.charge = max(B.charge-10,0) - for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) - S.charge = max(S.charge-20,0) - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/D in M.contents) - D.charge = max(D.charge-10,0) - if(prob(10)) M << "\red SYSTEM ALERT: Energy draining field detected!" - return 1 - if("planthelper") - for (var/obj/machinery/hydroponics/H in range(src.aurarange,originator)) - //makes weeds and shrooms and stuff more potent too - if(H.planted) - H.waterlevel += 2 - H.nutrilevel += 2 - if(H.toxic > 0) - H.toxic -= 1 - H.health += 1 - if(H.pestlevel > 0) - H.pestlevel -= 1 - if(H.weedlevel > 0) - H.weedlevel -= 1 - H.lastcycle += 5 - return 1 - if("sleepy") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(prob(10)) - M << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") - M.drowsyness = min(M.drowsyness + 1, 25) - M.eye_blurry = min(M.eye_blurry + 1, 25) - return 1 - else if (src.effectmode == "pulse") - for(var/mob/O in viewers(originator, null)) - O.show_message(text("[] emits a pulse of energy!", originator), 1) - switch(src.effecttype) - //caeltodo - if("healing") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\blue A wave of energy invigorates you." - M.adjustBruteLoss(-5) - M.adjustFireLoss(-5) - M.adjustToxLoss(-5) - M.adjustOxyLoss(-5) - M.adjustBrainLoss(-5) - M.updatehealth() - return 1 - if("injure") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\red A wave of energy causes you great pain!" - M.adjustBruteLoss(5) - M.adjustFireLoss(5) - M.adjustToxLoss(5) - M.adjustOxyLoss(5) - M.adjustBrainLoss(5) - M.make_dizzy(6) - M.weakened += 3 - M.updatehealth() - return 1 - if("stun") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\red A wave of energy overwhelms your senses!" - M.paralysis += 3 - M.weakened += 4 - M.stuttering += 4 - return 1 - if("roboheal") - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - M << "\blue SYSTEM ALERT: Structural damage has been repaired by energy pulse!" - M.adjustBruteLoss(-10) - M.adjustFireLoss(-10) - M.updatehealth() - return 1 - if("robohurt") - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - M << "\red SYSTEM ALERT: Structural damage inflicted by energy pulse!" - M.adjustBruteLoss(10) - M.adjustFireLoss(10) - M.updatehealth() - return 1 - if("cellcharge") - for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/B in C.contents) - B.charge += 250 - for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) S.charge += 400 - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/D in M.contents) - D.charge += 250 - M << "\blue SYSTEM ALERT: Large energy boost detected!" - return 1 - if("celldrain") - for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/B in C.contents) - B.charge = max(B.charge-500,0) - for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) - S.charge = max(S.charge-400,0) - for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) - for (var/obj/item/weapon/cell/D in M.contents) - D.charge = max(D.charge-500,0) - M << "\red SYSTEM ALERT: Severe energy drain detected!" - return 1 - if("planthelper") - //makes weeds and shrooms and stuff more potent too - for (var/obj/machinery/hydroponics/H in range(src.aurarange,originator)) - if(H.planted) - H.dead = 0 - H.waterlevel = 200 - H.nutrilevel = 200 - H.toxic = 0 - H.health = 100 - H.pestlevel = 0 - H.weedlevel = 0 - H.lastcycle = H.cycledelay - return 1 - if("teleport") - for (var/mob/living/M in range(src.aurarange,originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - var/list/randomturfs = new/list() - for(var/turf/T in orange(M, 30)) - if(!istype(T, /turf/simulated/floor) || T.density) - continue - randomturfs.Add(T) - if(randomturfs.len > 0) - M << "\red You are displaced by a strange force!" - if(M.buckled) - M.buckled.unbuckle() - M.loc = pick(randomturfs) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is - sparks.start() - return 1 - if("dnaswitch") - for(var/mob/living/H in range(src.aurarange,originator)) - if(ishuman(H) && istype(H:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(H:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - - if(prob(30)) - H << pick("\green You feel a little different.","\green You feel strange.","\green You feel different.") - //todo - if (H.gender == FEMALE) - H.gender = MALE - else - H.gender = FEMALE - /*H.dna.ready_dna(H) - H.update_body() - H.update_face()*/ - return 1 - if("emp") - empulse(get_turf(originator), aurarange/2, aurarange) - return 1 - if("sleepy") - for (var/mob/living/carbon/M in range(src.aurarange,originator)) - if(prob(30)) - M << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") - if(prob(50)) - M.drowsyness = min(M.drowsyness + rand(1,5), 25) - if(prob(50)) - M.eye_blurry = min(M.eye_blurry + rand(1,5), 25) - return 1 - else if (src.effectmode == "worldpulse") - for(var/mob/O in viewers(originator, null)) - O.show_message(text("[] emits a powerful burst of energy!", originator), 1) - switch(src.effecttype) - if("healing") - for (var/mob/living/carbon/M in range(200, originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\blue Waves of soothing energy wash over you." - M.adjustBruteLoss(-3) - M.adjustFireLoss(-3) - M.adjustToxLoss(-3) - M.adjustOxyLoss(-3) - M.adjustBrainLoss(-3) - M.updatehealth() - return 1 - if("injure") - for (var/mob/living/carbon/human/M in range(200, originator)) - M << "\red A wave of painful energy strikes you!" - M.adjustBruteLoss(3) - M.adjustFireLoss(3) - M.adjustToxLoss(3) - M.adjustOxyLoss(3) - M.adjustBrainLoss(3) - M.updatehealth() - return 1 - if("stun") - for (var/mob/living/carbon/M in range(200, originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\red A powerful force causes you to black out momentarily." - M.paralysis += 5 - M.weakened += 8 - M.stuttering += 8 - return 1 - if("roboheal") - for (var/mob/living/silicon/robot/M in range(200, originator)) - M << "\blue SYSTEM ALERT: Structural damage has been repaired by energy pulse!" - M.adjustBruteLoss(-5) - M.adjustFireLoss(-5) - M.updatehealth() - return 1 - if("robohurt") - for (var/mob/living/silicon/robot/M in range(200, originator)) - M << "\red SYSTEM ALERT: Structural damage inflicted by energy pulse!" - M.adjustBruteLoss(5) - M.adjustFireLoss(5) - M.updatehealth() - return 1 - if("cellcharge") - for (var/obj/machinery/power/apc/C in range(200, originator)) - for (var/obj/item/weapon/cell/B in C.contents) - B.charge += 100 - for (var/obj/machinery/power/smes/S in range (src.aurarange,src)) S.charge += 250 - for (var/mob/living/silicon/robot/M in world) - for (var/obj/item/weapon/cell/D in M.contents) - D.charge += 100 - M << "\blue SYSTEM ALERT: Energy boost detected!" - return 1 - if("celldrain") - for (var/obj/machinery/power/apc/C in range(200, originator)) - for (var/obj/item/weapon/cell/B in C.contents) - B.charge = max(B.charge-250,0) - for (var/obj/machinery/power/smes/S in range (src.aurarange,src)) - S.charge = max(S.charge-250,0) - for (var/mob/living/silicon/robot/M in world) - for (var/obj/item/weapon/cell/D in M.contents) - D.charge = max(D.charge-250,0) - M << "\red SYSTEM ALERT: Energy drain detected!" - return 1 - if("teleport") - for (var/mob/living/M in range(200, originator)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - var/list/randomturfs = new/list() - for(var/turf/T in orange(M, 15)) - if(!istype(T, /turf/simulated/floor) || T.density) - continue - randomturfs.Add(T) - if(randomturfs.len > 0) - M << "\red You are displaced by a strange force!" - if(M.buckled) - M.buckled.unbuckle() - M.loc = pick(randomturfs) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is - sparks.start() - return 1 - if("dnaswitch") - for(var/mob/living/H in range(200, originator)) - if(ishuman(H) && istype(H:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(H:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - - if(prob(30)) - H << pick("\green You feel a little different.","\green You feel strange.","\green You feel different.") - //todo - if (H.gender == FEMALE) - H.gender = MALE - else - H.gender = FEMALE - /*H.dna.ready_dna(H) - H.update_body() - H.update_face()*/ - return 1 - if("sleepy") - for(var/mob/living/H in range(200, originator)) - H.drowsyness = min(H.drowsyness + rand(5,15), 50) - H.eye_blurry = min(H.eye_blurry + rand(5,15), 50) - return 1 - -//initially for the force field artifact -/datum/artifact_effect/proc/update_move(var/atom/originator) - switch(effecttype) - if("forcefield") - while(created_field.len < 16) - //for now, just instantly respawn the fields when they get destroyed - var/obj/effect/energy_field/E = new (locate(originator.x,originator.y,originator)) - created_field.Add(E) - E.strength = 1 - E.density = 1 - E.anchored = 1 - E.invisibility = 0 - - var/obj/effect/energy_field/E = created_field[1] - E.loc = locate(originator.x + 2,originator.y + 2,originator.z) - E = created_field[2] - E.loc = locate(originator.x + 2,originator.y + 1,originator.z) - E = created_field[3] - E.loc = locate(originator.x + 2,originator.y,originator.z) - E = created_field[4] - E.loc = locate(originator.x + 2,originator.y - 1,originator.z) - E = created_field[5] - E.loc = locate(originator.x + 2,originator.y - 2,originator.z) - E = created_field[6] - E.loc = locate(originator.x + 1,originator.y + 2,originator.z) - E = created_field[7] - E.loc = locate(originator.x + 1,originator.y - 2,originator.z) - E = created_field[8] - E.loc = locate(originator.x,originator.y + 2,originator.z) - E = created_field[9] - E.loc = locate(originator.x,originator.y - 2,originator.z) - E = created_field[10] - E.loc = locate(originator.x - 1,originator.y + 2,originator.z) - E = created_field[11] - E.loc = locate(originator.x - 1,originator.y - 2,originator.z) - E = created_field[12] - E.loc = locate(originator.x - 2,originator.y + 2,originator.z) - E = created_field[13] - E.loc = locate(originator.x - 2,originator.y + 1,originator.z) - E = created_field[14] - E.loc = locate(originator.x - 2,originator.y,originator.z) - E = created_field[15] - E.loc = locate(originator.x - 2,originator.y - 1,originator.z) - E = created_field[16] - E.loc = locate(originator.x - 2,originator.y - 2,originator.z) +// + +/datum/artifact_effect + var/artifact_id = "" // Display ID of the spawning artifact + var/trigger = "touch" // What activates it? + var/triggerX = "none" // Used for more varied triggers + var/effecttype = "healing" // What does it do? + var/effectmode = "aura" // How does it carry out the effect? + var/aurarange = 4 // How far the artifact will extend an aura effect. + var/list/created_field + var/archived_loc + +/datum/artifact_effect/New() + // + created_field = new() + +/datum/artifact_effect/proc/GetOriginString(var/origin) + +/datum/artifact_effect/proc/GetEffectString(var/effect) + +/datum/artifact_effect/proc/GetTriggerString(var/trigger) + +/datum/artifact_effect/proc/GetRangeString(var/range) + switch(effectmode) + if("aura") return "Constant Short-Range Energy Field" + if("pulse") + if(aurarange > 7) return "Long Range Energy Pulses" + else return "Medium Range Energy Pulses" + if("worldpulse") return "Extreme Range Energy Pulses" + if("contact") return "Requires contact with subject" + else return "Unknown Range" + +/datum/artifact_effect/proc/HaltEffect() + for(var/obj/effect/energy_field/F in created_field) + created_field.Remove(F) + del F + +/datum/artifact_effect/proc/UpdateEffect(var/atom/originator) + /*for(var/obj/effect/energy_field/F in created_field) + created_field.Remove(F) + del F*/ + if(originator.loc != archived_loc) + archived_loc = originator.loc + update_move(originator) + + for(var/obj/effect/energy_field/E in created_field) + if(E.strength < 5) + E.Strengthen(0.2) + +/datum/artifact_effect/proc/DoEffect(var/atom/originator) + archived_loc = originator.loc + if (src.effectmode == "contact") + var/mob/living/user = originator + if(!user) + return + switch(src.effecttype) + if("healing") + //caeltodo + if (istype(user, /mob/living/carbon/human/)) + user << "\blue You feel a soothing energy invigorate you." + + var/mob/living/carbon/human/H = user + for(var/datum/organ/external/affecting in H.organs) + if(!affecting) continue + if(!istype(affecting, /datum/organ/external)) continue + affecting.heal_damage(25, 25) //fixes getting hit after ingestion, killing you when game updates organ health + //user:heal_organ_damage(25, 25) + // + user.adjustOxyLoss(-25) + user.adjustToxLoss(-25) + user.adjustBruteLoss(-25) + user.adjustFireLoss(-25) + user.adjustBrainLoss(-25) + user.radiation -= min(user.radiation, 25) + user.nutrition += 50 + H.bodytemperature = initial(H.bodytemperature) + // + H.vessel.add_reagent("blood",50) + spawn(1) + H.fixblood() + H.regenerate_icons() + return 1 + // + if (istype(user, /mob/living/carbon/monkey/)) + user << "\blue You feel a soothing energy invigorate you." + user.adjustOxyLoss(-25) + user.adjustToxLoss(-25) + user.adjustBruteLoss(-25) + user.adjustFireLoss(-25) + user.adjustBrainLoss(-25) + return 1 + else user << "Nothing happens." + if("injure") + if (istype(user, /mob/living/carbon/)) + user << "\red A painful discharge of energy strikes you!" + user.adjustOxyLoss(rand(5,25)) + user.adjustToxLoss(rand(5,25)) + user.adjustBruteLoss(rand(5,25)) + user.adjustFireLoss(rand(5,25)) + user.adjustBrainLoss(rand(5,25)) + user.radiation += 25 + user.nutrition -= min(50, user.nutrition) + user.make_dizzy(6) + user.weakened += 6 + return 1 + else user << "Nothing happens." + if("stun") + if (istype(user, /mob/living/carbon/)) + user << "\red A powerful force overwhelms your consciousness." + user.weakened += 45 + user.stuttering += 45 + if(prob(50)) + user.stunned += rand(1,10) + return 1 + else user << "Nothing happens." + if("roboheal") + if (istype(user, /mob/living/silicon/robot)) + user << "\blue Your systems report damaged components mending by themselves!" + user.adjustBruteLoss(rand(-10,-30)) + user.adjustFireLoss(rand(-10,-30)) + return 1 + else user << "Nothing happens." + if("robohurt") + if (istype(user, /mob/living/silicon/robot)) + user << "\red Your systems report severe damage has been inflicted!" + user.adjustBruteLoss(rand(10,50)) + user.adjustFireLoss(rand(10,50)) + return 1 + else user << "Nothing happens." + if("forcefield") + while(created_field.len < 16) + var/obj/effect/energy_field/E = new (locate(user.x,user.y,user.z)) + created_field.Add(E) + E.strength = 1 + E.density = 1 + E.anchored = 1 + E.invisibility = 0 + return 1 + if("teleport") + var/list/randomturfs = new/list() + for(var/turf/T in orange(user, 50)) + if(!istype(T, /turf/simulated/floor) || T.density) + continue + randomturfs.Add(T) + if(randomturfs.len > 0) + user << "\red You are suddenly zapped away elsewhere!" + if (user.buckled) + user.buckled.unbuckle() + user.loc = pick(randomturfs) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is + sparks.start() + return 1 + if("sleepy") + user << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") + user.drowsyness = min(user.drowsyness + rand(5,25), 50) + user.eye_blurry = min(user.eye_blurry + rand(1,3), 50) + return 1 + else if (src.effectmode == "aura") + switch(src.effecttype) + //caeltodo + if("healing") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + if(prob(10)) M << "\blue You feel a soothing energy radiating from something nearby." + M.adjustBruteLoss(-1) + M.adjustFireLoss(-1) + M.adjustToxLoss(-1) + M.adjustOxyLoss(-1) + M.adjustBrainLoss(-1) + M.updatehealth() + return 1 + if("injure") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + if(prob(10)) M << "\red You feel a painful force radiating from something nearby." + M.adjustBruteLoss(1) + M.adjustFireLoss(1) + M.adjustToxLoss(1) + M.adjustOxyLoss(1) + M.adjustBrainLoss(1) + M.updatehealth() + return 1 + if("stun") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + if(prob(10)) M << "\red Energy radiating from the [originator] is making you feel numb." + if(prob(20)) + M << "\red Your body goes numb for a moment." + M.stunned += 2 + M.weakened += 2 + M.stuttering += 2 + return 1 + if("roboheal") + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + if(prob(10)) M << "\blue SYSTEM ALERT: Beneficial energy field detected!" + M.adjustBruteLoss(-1) + M.adjustFireLoss(-1) + M.updatehealth() + return 1 + if("robohurt") + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + if(prob(10)) M << "\red SYSTEM ALERT: Harmful energy field detected!" + M.adjustBruteLoss(1) + M.adjustFireLoss(1) + M.updatehealth() + return 1 + if("cellcharge") + for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/B in C.contents) + B.charge += 10 + for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) S.charge += 20 + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/D in M.contents) + D.charge += 10 + if(prob(10)) M << "\blue SYSTEM ALERT: Energy boosting field detected!" + return 1 + if("celldrain") + for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/B in C.contents) + B.charge = max(B.charge-10,0) + for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) + S.charge = max(S.charge-20,0) + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/D in M.contents) + D.charge = max(D.charge-10,0) + if(prob(10)) M << "\red SYSTEM ALERT: Energy draining field detected!" + return 1 + if("planthelper") + for (var/obj/machinery/hydroponics/H in range(src.aurarange,originator)) + //makes weeds and shrooms and stuff more potent too + if(H.planted) + H.waterlevel += 2 + H.nutrilevel += 2 + if(H.toxic > 0) + H.toxic -= 1 + H.health += 1 + if(H.pestlevel > 0) + H.pestlevel -= 1 + if(H.weedlevel > 0) + H.weedlevel -= 1 + H.lastcycle += 5 + return 1 + if("sleepy") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(prob(10)) + M << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") + M.drowsyness = min(M.drowsyness + 1, 25) + M.eye_blurry = min(M.eye_blurry + 1, 25) + return 1 + else if (src.effectmode == "pulse") + for(var/mob/O in viewers(originator, null)) + O.show_message(text("[] emits a pulse of energy!", originator), 1) + switch(src.effecttype) + //caeltodo + if("healing") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + M << "\blue A wave of energy invigorates you." + M.adjustBruteLoss(-5) + M.adjustFireLoss(-5) + M.adjustToxLoss(-5) + M.adjustOxyLoss(-5) + M.adjustBrainLoss(-5) + M.updatehealth() + return 1 + if("injure") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + M << "\red A wave of energy causes you great pain!" + M.adjustBruteLoss(5) + M.adjustFireLoss(5) + M.adjustToxLoss(5) + M.adjustOxyLoss(5) + M.adjustBrainLoss(5) + M.make_dizzy(6) + M.weakened += 3 + M.updatehealth() + return 1 + if("stun") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + M << "\red A wave of energy overwhelms your senses!" + M.paralysis += 3 + M.weakened += 4 + M.stuttering += 4 + return 1 + if("roboheal") + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + M << "\blue SYSTEM ALERT: Structural damage has been repaired by energy pulse!" + M.adjustBruteLoss(-10) + M.adjustFireLoss(-10) + M.updatehealth() + return 1 + if("robohurt") + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + M << "\red SYSTEM ALERT: Structural damage inflicted by energy pulse!" + M.adjustBruteLoss(10) + M.adjustFireLoss(10) + M.updatehealth() + return 1 + if("cellcharge") + for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/B in C.contents) + B.charge += 250 + for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) S.charge += 400 + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/D in M.contents) + D.charge += 250 + M << "\blue SYSTEM ALERT: Large energy boost detected!" + return 1 + if("celldrain") + for (var/obj/machinery/power/apc/C in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/B in C.contents) + B.charge = max(B.charge-500,0) + for (var/obj/machinery/power/smes/S in range (src.aurarange,originator)) + S.charge = max(S.charge-400,0) + for (var/mob/living/silicon/robot/M in range(src.aurarange,originator)) + for (var/obj/item/weapon/cell/D in M.contents) + D.charge = max(D.charge-500,0) + M << "\red SYSTEM ALERT: Severe energy drain detected!" + return 1 + if("planthelper") + //makes weeds and shrooms and stuff more potent too + for (var/obj/machinery/hydroponics/H in range(src.aurarange,originator)) + if(H.planted) + H.dead = 0 + H.waterlevel = 200 + H.nutrilevel = 200 + H.toxic = 0 + H.health = 100 + H.pestlevel = 0 + H.weedlevel = 0 + H.lastcycle = H.cycledelay + return 1 + if("teleport") + for (var/mob/living/M in range(src.aurarange,originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + var/list/randomturfs = new/list() + for(var/turf/T in orange(M, 30)) + if(!istype(T, /turf/simulated/floor) || T.density) + continue + randomturfs.Add(T) + if(randomturfs.len > 0) + M << "\red You are displaced by a strange force!" + if(M.buckled) + M.buckled.unbuckle() + M.loc = pick(randomturfs) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is + sparks.start() + return 1 + if("dnaswitch") + for(var/mob/living/H in range(src.aurarange,originator)) + if(ishuman(H) && istype(H:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(H:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + + if(prob(30)) + H << pick("\green You feel a little different.","\green You feel strange.","\green You feel different.") + //todo + if (H.gender == FEMALE) + H.gender = MALE + else + H.gender = FEMALE + /*H.dna.ready_dna(H) + H.update_body() + H.update_face()*/ + return 1 + if("emp") + empulse(get_turf(originator), aurarange/2, aurarange) + return 1 + if("sleepy") + for (var/mob/living/carbon/M in range(src.aurarange,originator)) + if(prob(30)) + M << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") + if(prob(50)) + M.drowsyness = min(M.drowsyness + rand(1,5), 25) + if(prob(50)) + M.eye_blurry = min(M.eye_blurry + rand(1,5), 25) + return 1 + else if (src.effectmode == "worldpulse") + for(var/mob/O in viewers(originator, null)) + O.show_message(text("[] emits a powerful burst of energy!", originator), 1) + switch(src.effecttype) + if("healing") + for (var/mob/living/carbon/M in range(200, originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + M << "\blue Waves of soothing energy wash over you." + M.adjustBruteLoss(-3) + M.adjustFireLoss(-3) + M.adjustToxLoss(-3) + M.adjustOxyLoss(-3) + M.adjustBrainLoss(-3) + M.updatehealth() + return 1 + if("injure") + for (var/mob/living/carbon/human/M in range(200, originator)) + M << "\red A wave of painful energy strikes you!" + M.adjustBruteLoss(3) + M.adjustFireLoss(3) + M.adjustToxLoss(3) + M.adjustOxyLoss(3) + M.adjustBrainLoss(3) + M.updatehealth() + return 1 + if("stun") + for (var/mob/living/carbon/M in range(200, originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + M << "\red A powerful force causes you to black out momentarily." + M.paralysis += 5 + M.weakened += 8 + M.stuttering += 8 + return 1 + if("roboheal") + for (var/mob/living/silicon/robot/M in range(200, originator)) + M << "\blue SYSTEM ALERT: Structural damage has been repaired by energy pulse!" + M.adjustBruteLoss(-5) + M.adjustFireLoss(-5) + M.updatehealth() + return 1 + if("robohurt") + for (var/mob/living/silicon/robot/M in range(200, originator)) + M << "\red SYSTEM ALERT: Structural damage inflicted by energy pulse!" + M.adjustBruteLoss(5) + M.adjustFireLoss(5) + M.updatehealth() + return 1 + if("cellcharge") + for (var/obj/machinery/power/apc/C in range(200, originator)) + for (var/obj/item/weapon/cell/B in C.contents) + B.charge += 100 + for (var/obj/machinery/power/smes/S in range (src.aurarange,src)) S.charge += 250 + for (var/mob/living/silicon/robot/M in world) + for (var/obj/item/weapon/cell/D in M.contents) + D.charge += 100 + M << "\blue SYSTEM ALERT: Energy boost detected!" + return 1 + if("celldrain") + for (var/obj/machinery/power/apc/C in range(200, originator)) + for (var/obj/item/weapon/cell/B in C.contents) + B.charge = max(B.charge-250,0) + for (var/obj/machinery/power/smes/S in range (src.aurarange,src)) + S.charge = max(S.charge-250,0) + for (var/mob/living/silicon/robot/M in world) + for (var/obj/item/weapon/cell/D in M.contents) + D.charge = max(D.charge-250,0) + M << "\red SYSTEM ALERT: Energy drain detected!" + return 1 + if("teleport") + for (var/mob/living/M in range(200, originator)) + if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + var/list/randomturfs = new/list() + for(var/turf/T in orange(M, 15)) + if(!istype(T, /turf/simulated/floor) || T.density) + continue + randomturfs.Add(T) + if(randomturfs.len > 0) + M << "\red You are displaced by a strange force!" + if(M.buckled) + M.buckled.unbuckle() + M.loc = pick(randomturfs) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is + sparks.start() + return 1 + if("dnaswitch") + for(var/mob/living/H in range(200, originator)) + if(ishuman(H) && istype(H:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(H:head,/obj/item/clothing/head/bio_hood/anomaly)) + continue + + if(prob(30)) + H << pick("\green You feel a little different.","\green You feel strange.","\green You feel different.") + //todo + if (H.gender == FEMALE) + H.gender = MALE + else + H.gender = FEMALE + /*H.dna.ready_dna(H) + H.update_body() + H.update_face()*/ + return 1 + if("sleepy") + for(var/mob/living/H in range(200, originator)) + H.drowsyness = min(H.drowsyness + rand(5,15), 50) + H.eye_blurry = min(H.eye_blurry + rand(5,15), 50) + return 1 + +//initially for the force field artifact +/datum/artifact_effect/proc/update_move(var/atom/originator) + switch(effecttype) + if("forcefield") + while(created_field.len < 16) + //for now, just instantly respawn the fields when they get destroyed + var/obj/effect/energy_field/E = new (locate(originator.x,originator.y,originator)) + created_field.Add(E) + E.strength = 1 + E.density = 1 + E.anchored = 1 + E.invisibility = 0 + + var/obj/effect/energy_field/E = created_field[1] + E.loc = locate(originator.x + 2,originator.y + 2,originator.z) + E = created_field[2] + E.loc = locate(originator.x + 2,originator.y + 1,originator.z) + E = created_field[3] + E.loc = locate(originator.x + 2,originator.y,originator.z) + E = created_field[4] + E.loc = locate(originator.x + 2,originator.y - 1,originator.z) + E = created_field[5] + E.loc = locate(originator.x + 2,originator.y - 2,originator.z) + E = created_field[6] + E.loc = locate(originator.x + 1,originator.y + 2,originator.z) + E = created_field[7] + E.loc = locate(originator.x + 1,originator.y - 2,originator.z) + E = created_field[8] + E.loc = locate(originator.x,originator.y + 2,originator.z) + E = created_field[9] + E.loc = locate(originator.x,originator.y - 2,originator.z) + E = created_field[10] + E.loc = locate(originator.x - 1,originator.y + 2,originator.z) + E = created_field[11] + E.loc = locate(originator.x - 1,originator.y - 2,originator.z) + E = created_field[12] + E.loc = locate(originator.x - 2,originator.y + 2,originator.z) + E = created_field[13] + E.loc = locate(originator.x - 2,originator.y + 1,originator.z) + E = created_field[14] + E.loc = locate(originator.x - 2,originator.y,originator.z) + E = created_field[15] + E.loc = locate(originator.x - 2,originator.y - 1,originator.z) + E = created_field[16] + E.loc = locate(originator.x - 2,originator.y - 2,originator.z) diff --git a/code/modules/research/xenoarchaeology/artifact_harvester.dm b/code/modules/research/xenoarchaeology/unknown_harvester.dm similarity index 97% rename from code/modules/research/xenoarchaeology/artifact_harvester.dm rename to code/modules/research/xenoarchaeology/unknown_harvester.dm index 4aba7ae2c1f..39463888c59 100644 --- a/code/modules/research/xenoarchaeology/artifact_harvester.dm +++ b/code/modules/research/xenoarchaeology/unknown_harvester.dm @@ -1,150 +1,150 @@ - -/obj/machinery/artifact_harvester - name = "Anomaly Power Collector" - icon = 'virology.dmi' - icon_state = "incubator" //incubator_on - anchored = 1 - density = 1 - var/harvesting = 0 - var/obj/item/weapon/anobattery/inserted_battery - var/obj/machinery/artifact/cur_artifact - var/obj/machinery/analyser_pad/owned_pad = null - -/obj/machinery/artifact_harvester/New() - ..() - spawn(10) - owned_pad = locate() in orange(1, src) - -/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I,/obj/item/weapon/anobattery)) - if(!inserted_battery) - user << "You insert the battery." - user.drop_item() - I.loc = src - src.inserted_battery = I - return - else - return..() - -/obj/machinery/artifact_harvester/process() - if(stat & (NOPOWER|BROKEN)) - return - use_power(350) - - if(harvesting) - use_power(250) - inserted_battery.stored_charge += 10 - if(inserted_battery.stored_charge >= inserted_battery.capacity) - inserted_battery.stored_charge = inserted_battery.capacity - harvesting = 0 - cur_artifact.anchored = 0 - cur_artifact.being_used = 0 - src.visible_message("[name] states, \"Battery is full.\"") - icon_state = "incubator" - return - -/obj/machinery/artifact_harvester/interact(var/mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - user.machine = src - var/dat = "Artifact Power Harvester
" - dat += "

" - // - if(owned_pad) - if(harvesting) - dat += "Please wait. Harvesting in progress ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%).
" - dat += "Halt early
" - else - if(inserted_battery) - dat += "[inserted_battery.name] inserted, charge level: [inserted_battery.stored_charge]/[inserted_battery.capacity] ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%)
" - dat += "Energy signature ID:[inserted_battery.battery_effect.artifact_id == "" ? "???" : "[inserted_battery.battery_effect.artifact_id]"]
" - dat += "Eject battery
" - dat += "Drain battery of all charge
" - dat += "Begin harvesting
" - - else - dat += "No battery inserted.
" - else - dat += "Unable to locate analysis pad.
" - // - dat += "
" - dat += "Refresh Close
" - user << browse(dat, "window=artharvester;size=450x500") - onclose(user, "artharvester") - -/obj/machinery/artifact_harvester/Topic(href, href_list) - - if (href_list["harvest"]) - //locate artifact on analysis pad - cur_artifact = null - var/articount = 0 - var/obj/machinery/artifact/analysed - for(var/obj/machinery/artifact/A in get_turf(owned_pad)) - analysed = A - articount++ - - var/mundane = 0 - for(var/obj/O in get_turf(owned_pad)) - if(!istype(O, /obj/machinery/artifact) && !istype(O, /obj/machinery/analyser_pad)) - mundane++ - break - for(var/mob/O in get_turf(owned_pad)) - if(!istype(O, /obj/machinery/artifact)) - mundane++ - break - - if(articount == 1 && !mundane) - cur_artifact = analysed - //check to see if the battery is compatible - if(inserted_battery) - if(inserted_battery.battery_effect.artifact_id == cur_artifact.my_effect.artifact_id || inserted_battery.stored_charge == 0) - harvesting = 1 - cur_artifact.anchored = 1 - cur_artifact.being_used = 1 - icon_state = "incubator_on" - var/message = "[src] states, \"Beginning artifact energy harvesting.\"" - src.visible_message(message, message) - // - inserted_battery.battery_effect = cur_artifact.my_effect - else - var/message = "[src] states, \"Cannot harvest. Incompatible energy signatures detected.\"" - src.visible_message(message, message) - else if(cur_artifact) - var/message = "[src] states, \"Cannot harvest. No battery inserted.\"" - src.visible_message(message, message) - else if(articount > 1 || mundane) - var/message = "[src] states, \"Cannot harvest. Error isolating energy signature.\"" - src.visible_message(message, message) - else if(!articount) - var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" - src.visible_message(message, message) - else if (cur_artifact.being_used) - var/message = "[src] states, \"Cannot harvest. Too much interferance from energy scan.\"" - src.visible_message(message, message) - - if (href_list["stopharvest"]) - if(harvesting) - harvesting = 0 - cur_artifact.anchored = 0 - cur_artifact.being_used = 0 - src.visible_message("[name] states, \"Harvesting interrupted.\"") - icon_state = "incubator" - - - if (href_list["ejectbattery"]) - src.inserted_battery.loc = src.loc - src.inserted_battery = null - - if (href_list["drainbattery"]) - use_power(100) - src.inserted_battery.battery_effect.artifact_id = "" - src.inserted_battery.stored_charge = 0 - var/message = "[src] states, \"Battery drained of all charge.\"" - src.visible_message(message, message) - - if(href_list["close"]) - usr << browse(null, "window=artharvester") - usr.machine = null - - src.updateDialog() - return + +/obj/machinery/artifact_harvester + name = "Anomaly Power Collector" + icon = 'virology.dmi' + icon_state = "incubator" //incubator_on + anchored = 1 + density = 1 + var/harvesting = 0 + var/obj/item/weapon/anobattery/inserted_battery + var/obj/machinery/artifact/cur_artifact + var/obj/machinery/analyser_pad/owned_pad = null + +/obj/machinery/artifact_harvester/New() + ..() + spawn(10) + owned_pad = locate() in orange(1, src) + +/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob) + if(istype(I,/obj/item/weapon/anobattery)) + if(!inserted_battery) + user << "You insert the battery." + user.drop_item() + I.loc = src + src.inserted_battery = I + return + else + return..() + +/obj/machinery/artifact_harvester/process() + if(stat & (NOPOWER|BROKEN)) + return + use_power(350) + + if(harvesting) + use_power(250) + inserted_battery.stored_charge += 10 + if(inserted_battery.stored_charge >= inserted_battery.capacity) + inserted_battery.stored_charge = inserted_battery.capacity + harvesting = 0 + cur_artifact.anchored = 0 + cur_artifact.being_used = 0 + src.visible_message("[name] states, \"Battery is full.\"") + icon_state = "incubator" + return + +/obj/machinery/artifact_harvester/interact(var/mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return + user.machine = src + var/dat = "Artifact Power Harvester
" + dat += "

" + // + if(owned_pad) + if(harvesting) + dat += "Please wait. Harvesting in progress ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%).
" + dat += "
Halt early
" + else + if(inserted_battery) + dat += "[inserted_battery.name] inserted, charge level: [inserted_battery.stored_charge]/[inserted_battery.capacity] ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%)
" + dat += "Energy signature ID:[inserted_battery.battery_effect.artifact_id == "" ? "???" : "[inserted_battery.battery_effect.artifact_id]"]
" + dat += "Eject battery
" + dat += "Drain battery of all charge
" + dat += "Begin harvesting
" + + else + dat += "No battery inserted.
" + else + dat += "Unable to locate analysis pad.
" + // + dat += "
" + dat += "Refresh Close
" + user << browse(dat, "window=artharvester;size=450x500") + onclose(user, "artharvester") + +/obj/machinery/artifact_harvester/Topic(href, href_list) + + if (href_list["harvest"]) + //locate artifact on analysis pad + cur_artifact = null + var/articount = 0 + var/obj/machinery/artifact/analysed + for(var/obj/machinery/artifact/A in get_turf(owned_pad)) + analysed = A + articount++ + + var/mundane = 0 + for(var/obj/O in get_turf(owned_pad)) + if(!istype(O, /obj/machinery/artifact) && !istype(O, /obj/machinery/analyser_pad)) + mundane++ + break + for(var/mob/O in get_turf(owned_pad)) + if(!istype(O, /obj/machinery/artifact)) + mundane++ + break + + if(articount == 1 && !mundane) + cur_artifact = analysed + //check to see if the battery is compatible + if(inserted_battery) + if(inserted_battery.battery_effect.artifact_id == cur_artifact.my_effect.artifact_id || inserted_battery.stored_charge == 0) + harvesting = 1 + cur_artifact.anchored = 1 + cur_artifact.being_used = 1 + icon_state = "incubator_on" + var/message = "[src] states, \"Beginning artifact energy harvesting.\"" + src.visible_message(message, message) + // + inserted_battery.battery_effect = cur_artifact.my_effect + else + var/message = "[src] states, \"Cannot harvest. Incompatible energy signatures detected.\"" + src.visible_message(message, message) + else if(cur_artifact) + var/message = "[src] states, \"Cannot harvest. No battery inserted.\"" + src.visible_message(message, message) + else if(articount > 1 || mundane) + var/message = "[src] states, \"Cannot harvest. Error isolating energy signature.\"" + src.visible_message(message, message) + else if(!articount) + var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" + src.visible_message(message, message) + else if (cur_artifact.being_used) + var/message = "[src] states, \"Cannot harvest. Too much interferance from energy scan.\"" + src.visible_message(message, message) + + if (href_list["stopharvest"]) + if(harvesting) + harvesting = 0 + cur_artifact.anchored = 0 + cur_artifact.being_used = 0 + src.visible_message("[name] states, \"Harvesting interrupted.\"") + icon_state = "incubator" + + + if (href_list["ejectbattery"]) + src.inserted_battery.loc = src.loc + src.inserted_battery = null + + if (href_list["drainbattery"]) + use_power(100) + src.inserted_battery.battery_effect.artifact_id = "" + src.inserted_battery.stored_charge = 0 + var/message = "[src] states, \"Battery drained of all charge.\"" + src.visible_message(message, message) + + if(href_list["close"]) + usr << browse(null, "window=artharvester") + usr.machine = null + + src.updateDialog() + return diff --git a/code/modules/research/xenoarchaeology/artifact_synthetic.dm b/code/modules/research/xenoarchaeology/unknown_synthetic.dm similarity index 96% rename from code/modules/research/xenoarchaeology/artifact_synthetic.dm rename to code/modules/research/xenoarchaeology/unknown_synthetic.dm index 3b21ac36f85..24bd324e4c0 100644 --- a/code/modules/research/xenoarchaeology/artifact_synthetic.dm +++ b/code/modules/research/xenoarchaeology/unknown_synthetic.dm @@ -1,144 +1,144 @@ - -/obj/item/weapon/anobattery - name = "Anomaly power battery" - icon = 'xenoarchaeology.dmi' - icon_state = "anobattery0" - var/datum/artifact_effect/battery_effect - var/capacity = 200 - var/stored_charge = 0 - -/obj/item/weapon/anobattery/New() - battery_effect = new() - -/obj/item/weapon/anobattery/proc/UpdateSprite() - var/p = (stored_charge/capacity)*100 - icon_state = "anobattery[round(p,25)]" - -/obj/item/weapon/anodevice - name = "Anomaly power utilizer" - icon = 'xenoarchaeology.dmi' - icon_state = "anodev" - var/cooldown = 0 - var/activated = 0 - var/time = 50 - var/obj/item/weapon/anobattery/inserted_battery - -/obj/item/weapon/anodevice/New() - spawn(10) - pulse() - -/obj/item/weapon/anodevice/proc/UpdateSprite() - if(!inserted_battery) - icon_state = "anodev" - return - var/p = (inserted_battery.stored_charge/inserted_battery.capacity)*100 - var/s = round(p,25) - icon_state = "anodev[s]" - -/obj/item/weapon/anodevice/interact(var/mob/user) - user.machine = src - var/dat = "Anomalous Materials Energy Utiliser
" - if(activated) - dat += "Device active, stand by.
" - else if(cooldown) - dat += "Cooldown in progress, please wait.
" - else - if(!inserted_battery) - dat += "Please insert battery
" - else - dat += "[inserted_battery] inserted, anomaly ID: [inserted_battery.battery_effect.artifact_id == "" ? "???" : "[inserted_battery.battery_effect.artifact_id]"]
" - dat += "Total Power: [inserted_battery.stored_charge]/[inserted_battery.capacity]

" - dat += "Timed activation:
-- - [time >= 1000 ? "[time/10]" : time >= 100 ? " [time/10]" : " [time/10]" ] + ++
" - if(cooldown && !activated) - dat += "Cooldown in progress.
" - else if(activated) - dat += "Stop timer
" - else - dat += "Start timer
" - dat += "Eject battery
" - dat += "Refresh
" - dat += "Close
" - - user << browse(dat, "window=anodevice;size=400x500") - onclose(user, "anodevice") - return - -/obj/item/weapon/anodevice/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/weapon/anobattery)) - if(!inserted_battery) - user << "\blue You insert the battery." - user.drop_item() - I.loc = src - inserted_battery = I - UpdateSprite() - else - return ..() - -/obj/item/weapon/anodevice/attack_self(var/mob/user as mob) - return src.interact(user) - -/obj/item/weapon/anodevice/proc/pulse() - if(activated) - if(time <= 0 || !inserted_battery) - time = 0 - activated = 0 - var/turf/T = get_turf(src) - T.visible_message("\icon[src]\blue The utiliser device buzzes.", "\icon[src]\blue You hear something buzz.") - else - inserted_battery.battery_effect.DoEffect(src) - time -= 10 - inserted_battery.stored_charge -= 10 + rand(-1,1) - cooldown += 10 - else if(cooldown > 0) - cooldown -= 10 - if(cooldown <= 0) - cooldown = 0 - var/turf/T = get_turf(src) - T.visible_message("\icon[src]\blue The utiliser device chimes.", "\icon[src]\blue You hear something chime.") - - spawn(10) - pulse() - -/obj/item/weapon/anodevice/Topic(href, href_list) - - if(href_list["neg_changetime_max"]) - time += -100 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 - if(href_list["neg_changetime"]) - time += -10 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 - if(href_list["changetime"]) - time += 10 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 - if(href_list["changetime_max"]) - time += 100 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 - - if(href_list["stoptimer"]) - activated = 0 - - if(href_list["starttimer"]) - activated = 1 - - if(href_list["ejectbattery"]) - inserted_battery.loc = get_turf(src) - inserted_battery = null - UpdateSprite() - - if(href_list["close"]) - usr << browse(null, "window=anodevice") - usr.machine = null - else if(usr) - src.interact(usr) + +/obj/item/weapon/anobattery + name = "Anomaly power battery" + icon = 'xenoarchaeology.dmi' + icon_state = "anobattery0" + var/datum/artifact_effect/battery_effect + var/capacity = 200 + var/stored_charge = 0 + +/obj/item/weapon/anobattery/New() + battery_effect = new() + +/obj/item/weapon/anobattery/proc/UpdateSprite() + var/p = (stored_charge/capacity)*100 + icon_state = "anobattery[round(p,25)]" + +/obj/item/weapon/anodevice + name = "Anomaly power utilizer" + icon = 'xenoarchaeology.dmi' + icon_state = "anodev" + var/cooldown = 0 + var/activated = 0 + var/time = 50 + var/obj/item/weapon/anobattery/inserted_battery + +/obj/item/weapon/anodevice/New() + spawn(10) + pulse() + +/obj/item/weapon/anodevice/proc/UpdateSprite() + if(!inserted_battery) + icon_state = "anodev" + return + var/p = (inserted_battery.stored_charge/inserted_battery.capacity)*100 + var/s = round(p,25) + icon_state = "anodev[s]" + +/obj/item/weapon/anodevice/interact(var/mob/user) + user.machine = src + var/dat = "Anomalous Materials Energy Utiliser
" + if(activated) + dat += "Device active, stand by.
" + else if(cooldown) + dat += "Cooldown in progress, please wait.
" + else + if(!inserted_battery) + dat += "Please insert battery
" + else + dat += "[inserted_battery] inserted, anomaly ID: [inserted_battery.battery_effect.artifact_id == "" ? "???" : "[inserted_battery.battery_effect.artifact_id]"]
" + dat += "Total Power: [inserted_battery.stored_charge]/[inserted_battery.capacity]

" + dat += "Timed activation: -- - [time >= 1000 ? "[time/10]" : time >= 100 ? " [time/10]" : " [time/10]" ] + ++
" + if(cooldown && !activated) + dat += "Cooldown in progress.
" + else if(activated) + dat += "Stop timer
" + else + dat += "Start timer
" + dat += "Eject battery
" + dat += "Refresh
" + dat += "Close
" + + user << browse(dat, "window=anodevice;size=400x500") + onclose(user, "anodevice") + return + +/obj/item/weapon/anodevice/attackby(var/obj/I as obj, var/mob/user as mob) + if(istype(I, /obj/item/weapon/anobattery)) + if(!inserted_battery) + user << "\blue You insert the battery." + user.drop_item() + I.loc = src + inserted_battery = I + UpdateSprite() + else + return ..() + +/obj/item/weapon/anodevice/attack_self(var/mob/user as mob) + return src.interact(user) + +/obj/item/weapon/anodevice/proc/pulse() + if(activated) + if(time <= 0 || !inserted_battery) + time = 0 + activated = 0 + var/turf/T = get_turf(src) + T.visible_message("\icon[src]\blue The utiliser device buzzes.", "\icon[src]\blue You hear something buzz.") + else + inserted_battery.battery_effect.DoEffect(src) + time -= 10 + inserted_battery.stored_charge -= 10 + rand(-1,1) + cooldown += 10 + else if(cooldown > 0) + cooldown -= 10 + if(cooldown <= 0) + cooldown = 0 + var/turf/T = get_turf(src) + T.visible_message("\icon[src]\blue The utiliser device chimes.", "\icon[src]\blue You hear something chime.") + + spawn(10) + pulse() + +/obj/item/weapon/anodevice/Topic(href, href_list) + + if(href_list["neg_changetime_max"]) + time += -100 + if(time > inserted_battery.capacity) + time = inserted_battery.capacity + else if (time < 0) + time = 0 + if(href_list["neg_changetime"]) + time += -10 + if(time > inserted_battery.capacity) + time = inserted_battery.capacity + else if (time < 0) + time = 0 + if(href_list["changetime"]) + time += 10 + if(time > inserted_battery.capacity) + time = inserted_battery.capacity + else if (time < 0) + time = 0 + if(href_list["changetime_max"]) + time += 100 + if(time > inserted_battery.capacity) + time = inserted_battery.capacity + else if (time < 0) + time = 0 + + if(href_list["stoptimer"]) + activated = 0 + + if(href_list["starttimer"]) + activated = 1 + + if(href_list["ejectbattery"]) + inserted_battery.loc = get_turf(src) + inserted_battery = null + UpdateSprite() + + if(href_list["close"]) + usr << browse(null, "window=anodevice") + usr.machine = null + else if(usr) + src.interact(usr) diff --git a/icons/obj/cryogenics.dmi b/icons/obj/cryogenics.dmi index 5b5e55ca48b796b2098e65a29164cbb78cc15dd0..e063421fd529fa5f5dae8b2f58c6f459e2f729e3 100644 GIT binary patch literal 14976 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 z zY%gZdkfc3enn_58$$`j>f|*Y}VQqow^8&hx_rBBt-0AcdPCe5t_vrl*+`5XtyP*j3 znZru42eDi>95^>(Y*b$Ypg;&V`KyUj8J8z+r)>J;1+po7WjV*IrMaK2Zs6O6S^emZAIWnFnis%w4015b!3&5v^ey2NSaVbUTpMXSd+?AjNVld;c!zo=AK)x5^zBAR00G=wC9T zJD|uj%(ihOKGbUh{u5Z`hlYyvKK-TZ64UsRJ@rTU;eB2GEyS!@_bKzM^0C*8`$GHiQ!Sf2M#GjC=2R3y;0ln+#Y(k^cWc z(E0?$w~UH6ijMnZ^8b|O)2Cl09|kFp^Exj{VUs8-Dqe1fVV}q^Z7Ux-H?ypv1pG&0 z2yxTN+myGF!&b&HHYqCVClUEfV=UzljG11=q^rX`@KJO)sO}S?UvN0KY039Fwntd1 zt~Ugcxn;sc8#`ZS0KwdFySp#^u3%a?Co-sOt+O#| zFRUN_9CV9TE5GhR-nH+QD|qeP<#CIQ6>Bsx@nAd=b2!7|D;Yx}VWR!Qj&g_avSNJv z@=w*xKKLCK@Fy&$bqNoUo%=ASyj`^Cf5A4K`C|=9QSO|Yy<|^8ygF;YVb)QrTgu4E zDbTLlt&9$9o%9yK$_t3<5|$+X&<)pD z_btOrFOL5&Qde|XA=UK!w-4l}fYr+27fR^ecQ?JBjkE8M&L)JW*%Z({(gnJxV7 zjt7T|70bcF(M~1Pn#~eKX<*cC$O=B=?bTvY&$TEJ-}GEDLQk|LnQo7XcMf;(_P2s{ dzw!_Ot>LmjFt6nR>@THoU!;|#Y9&lV|33>W=2HLw literal 11432 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 WXc6<7B)xhJc%bzVT&?je{Qm%mxm4@` diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index a2ae3e00fd6da0678a2e5c5e3fa5e6c98fed268e..1cfdb8384b6a99193a317309c633f3ef8c642dee 100644 GIT binary patch delta 21501 zcmZ^~byyT{*fzX$cO%j%DIzW1DWG(RpdcVp!phJg($dIENw%h0?U5G z?|I($`~LZkV-J|!xo75%E6(%0?pYi~ADu$43NZqJe@oAFKJET`fHJfyahrTX_zQ~x zTV*qslh)$h`h$V_hflegak0Gyy3@QYZr_^!TU4^2qK$Zr*TlwtLon_$^YhSEv_H2@ zt)DOQc)@ z2pCgG3z}7m6B{}swxl-BnTR98j6OWQ*5yp<%p6j>MkTY!s<6`ctO?458_1~H7eXgl zPFpmPT*%RP#?Z}mtP7x#F&G_fa)4XIrXuMSAj1C6YK7D9tSel6=%ucWDENJ(bTS=R zvHoiMtT9_1+4At=!k53V2rn-&p3~sqg~<1>e)Bwj&4YrfiXxLv{F8`x@ji9BORGDg?e3IPDQHD&-DNXkAxqXfNSYq$}(3B)(JTmj|-Sd|yiZ8?HZ5PvKVM0lA%z=x|K6!iX zib9eME8@fhC-182>V(p@aAQA1RM@CTfg7?EK`Y|up5V9h^)_y9IB-rG2I|D)1+N(k z+J_H&M!rf_du(dZ#;9B&1H>7Kl~~DM7#VfBi1IEaH#l;LI z{eCdtu%2S(+L5oGbnJ%u=LQL^I8?R%VcJo{*EU^4?6dF=hcyA$G63P=`S6w{9#Cty zG>i6?j@|CZCDh@f4VPynZC~SM>dRG*4o$Z3^wq8>rt$tA*z`bQz{}|IW$xCjV}}r7 zNl6JQe%Q+8O&BIyv(Hg)ev{;9VnWDd(92RomISp(&R+B&$gfwmLdLfNvXW9#XmF;- zSgUpoOMa!_PYW)sijO1;q}sn|-T^08DEc5dxj)7>M@y~S*DE+evj>qlA%Ww#)2|d+ z69Q*lRM^Qoay1!yPB({aglLZ^GzD|^^1PWD!attcvmBi+`Ygw+uG%D!SP^Tc@U8lU z3(>Z}W3YstD7ScQ^a;_gNA}o8DzW~2eMo`^8A=t57i1XcEn1?iu^ye=jwQk#6-mIxlPRxP%!`Rb1N+NZ9g7h)? zL5DdBWG}=-n0sqlMmcFQtI&LwKZ-$c=iya+;EWQ7bOfH9oCF)vQavct`HDVNBScFW z*|*+VCZNtC?l4FxeYx;{8}LKf&>ndIDKSYKeszV76GUxEq9B#1ZmBxX4UdVP`ee`A zu~nY*zs8fADE2O)NR>P%CnrdI!)V%El&z;HrAi*z)YMex z3iAeCjLIswJ`Q^;;#ay~(KC3>?hwSnQ7T+<)#6`oRa%N~GHOi|0NjX#NTtw4b@C`B zKg|Ls$|_UPppFL#g z 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 delta 20741 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 TTI1aB00000NkvXXu0mjfrlk8Q diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 1ba74f830a8a2be84db982da0238b7124a32f217..a2950c0b0e66e6e009598bdbf7470cf5e748c825 100644 GIT binary patch literal 9127 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 literal 11038 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 diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi index 71e6f773c8f2717a9aac29a84d68ffb838a1c4b9..6806854a242ff76d0c229673c004a4b80f1eeaa2 100644 GIT binary patch literal 48429 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%0ASbtU0OBRqiM~1RXyJ;AiYuzopq9->bYPKv9*J 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 literal 41852 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%0AxsJx^4!1=y9%acyyZked;q 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 Pz>luBp;noOZRr01x!ZaQ