diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index bbb366abf5..06313b5fa7 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -549,14 +549,15 @@ var/list/mining_overlay_cache = list() return attack_hand(user) +//THIS IS THE 'YOU HIT AN ARTIFACT AND ARE GOING TOO DEEP' PROC. This is NOT the 'you destroyed the turf' proc. For that, look at 'GetDrilled' /turf/simulated/mineral/proc/wreckfinds(var/destroy = FALSE) - if(!destroy && prob(90)) //nondestructive methods have a chance of letting you step away to not trash things - if(prob(25)) - excavate_find(prob(5), finds[1]) - else if(prob(50) || destroy) //destructive methods will always destroy finds, no bowls menacing with spikes for you + if(!destroy) //nondestructive methods have a chance of letting you step away to not trash things + if(prob(10)) //This is to keep you from just running into an artifact turf over and over and over and over while also keeping a small % chance to cause a small rock to drop if you truly accidentally went too deep. + //Technically you CAN KEEP RUNNING INTO THE TILE but like, you're wasting so much time at that point. Just buy a pick set from the mining vendor. + excavate_find(prob(1), finds[1]) //1 in 100 chance of digging it out + else //destructive methods will always destroy finds, no bowls menacing with spikes for you finds.Remove(finds[1]) - if(prob(50)) - artifact_debris() + artifact_debris() /turf/simulated/mineral/proc/update_archeo_overlays(var/excavation_amount = 0) var/updateIcon = 0 @@ -645,7 +646,7 @@ var/list/mining_overlay_cache = list() //destroyed artifacts have weird, unpleasant effects //make sure to destroy them before changing the turf though - if(artifact_find && artifact_fail) + if(finds && finds.len && prob(10)) //You destroyed an artifact turf! var/pain = 0 if(prob(50)) pain = 1 @@ -653,15 +654,12 @@ var/list/mining_overlay_cache = list() to_chat(M, span_danger("[pick("A high-pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!")) if(pain) flick("pain",M.pain) - if(prob(50)) - M.adjustBruteLoss(5) - else - M.flash_eyes() - if(prob(50)) - M.Stun(5) - SSradiation.flat_radiate(src, 25, 100) + M.flash_eyes() + if(prob(50)) + M.Stun(5) + M.make_jittery(1000) //SHAKY if(prob(25)) - excavate_find(prob(5), finds[1]) + excavate_find(prob(25), finds[1]) else if(rand(1,500) == 1) visible_message(span_notice("An old dusty crate was buried within!")) new /obj/structure/closet/crate/secure/loot(src) diff --git a/code/modules/xenoarcheaology/artifacts/artifact_find.dm b/code/modules/xenoarcheaology/artifacts/artifact_find.dm index 49369d861c..6e5e5d9cee 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact_find.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact_find.dm @@ -9,19 +9,18 @@ artifact_find_type = pick( 300;/obj/machinery/artifact, - 50;/obj/machinery/syndicate_beacon/virgo, // VOREStation Edit: use virgo-specific subtype that doesn't create 'real' antags, - 50;/obj/machinery/auto_cloner, - 50;/obj/machinery/replicator/vore, + 25;/obj/machinery/auto_cloner, + 25;/obj/machinery/replicator/vore, 25;/obj/structure/constructshell, - 25;/obj/machinery/giga_drill, - 25;/obj/machinery/replicator/clothing, //VOREStation Edit: use virgo-specific subtype that allows TF into items. //VOREStation Edit: use virgo-specific subtype that allows TF into mobs. + 25;/obj/machinery/replicator/clothing, 25;/obj/structure/crystal, - 5;/obj/machinery/power/supermatter/shard, - 5;/obj/machinery/power/supermatter,) + 15;/obj/machinery/giga_drill, + 5;/obj/machinery/syndicate_beacon/virgo, + 2;/obj/machinery/power/supermatter/shard, + 1;/obj/machinery/power/supermatter) // Calculations: - // Our total is 560 (As of the time of writing. If ANY of the weights are adjusted above, you have to recalculate. Formula: (thingy_wt/total_wt)*100 = % chance of drop) - // Artifact: 53% - // 50 wt: 8.9% - // 25 wt: 4.4% - // 5 wt: 0.89% + // TO do the math calculation: + // OBJECT_WEIGHT = The weight of the object. (Ex: supermatter is 1) + // TOTAL_WEIGHT = The weight of ALL the objects added together + // To calculate the chance of an artifact spawning, do: ((OBJECT_WEIGHT / TOTAL_WEIGHT) * 100) and that is your % diff --git a/code/modules/xenoarcheaology/effects/electric_field.dm b/code/modules/xenoarcheaology/effects/electric_field.dm index b1173a8126..428fcc287c 100644 --- a/code/modules/xenoarcheaology/effects/electric_field.dm +++ b/code/modules/xenoarcheaology/effects/electric_field.dm @@ -4,12 +4,19 @@ effect_type = EFFECT_ELECTIC_FIELD effect_color = "#ffff00" + var/last_used = 0 + var/use_delay = 5 SECONDS //Time between uses. /datum/artifact_effect/electric_field/DoEffectTouch(var/mob/user) var/atom/holder = get_master_holder() + if(last_used >= world.time + use_delay) + return + else + last_used = world.time if(istype(holder, /obj/item/anobattery)) var/obj/item/anobattery/battery = holder var/obj/item/anodevice/utilizer = holder.loc + use_delay = 0 //We're in an artifact, our delay is handled by the utilizer iself. battery.stored_charge = 0 //You only get ONE use of this. This is WAY too strong. holder = utilizer user = utilizer.last_user_touched @@ -39,10 +46,15 @@ /datum/artifact_effect/electric_field/DoEffectAura() var/atom/holder = get_master_holder() + if(last_used >= world.time + use_delay) + return + else + last_used = world.time var/mob/living/user if(istype(holder, /obj/item/anobattery)) var/obj/item/anobattery/battery = holder var/obj/item/anodevice/utilizer = holder.loc + use_delay = 0 //We're in an artifact, our delay is handled by the utilizer iself. battery.stored_charge = max(0, battery.stored_charge-100) //This one isn't TOO terrible. It doesn't stun, so lets just have it do extra drain. holder = utilizer user = utilizer.last_user_touched @@ -79,6 +91,11 @@ holder = utilizer user = utilizer.last_user_touched battery.stored_charge = 0 + use_delay = 0 //We're in an artifact, our delay is handled by the utilizer iself. + if(last_used >= world.time + use_delay) + return + else + last_used = world.time var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(user && L == user) // You're "grounded" when you contact the artifact... diff --git a/code/modules/xenoarcheaology/finds/Weapons/archeo_eguns.dm b/code/modules/xenoarcheaology/finds/Weapons/archeo_eguns.dm index ac02b99846..3598cdd484 100644 --- a/code/modules/xenoarcheaology/finds/Weapons/archeo_eguns.dm +++ b/code/modules/xenoarcheaology/finds/Weapons/archeo_eguns.dm @@ -1,6 +1,10 @@ //snowflake guns for xenoarch because you can't override the update_icon() proc inside the giant mess that is find creation /obj/item/gun/energy/laser/xenoarch + name = "Relic Rifle" + desc = "An anomalous rifle that shoots abnormal types of beams." icon = 'icons/obj/xenoarchaeology.dmi' + one_handed_penalty = FALSE + firemodes = list() //none /obj/item/gun/energy/laser/xenoarch/update_icon() return diff --git a/code/modules/xenoarcheaology/finds/Weapons/archeo_melee.dm b/code/modules/xenoarcheaology/finds/Weapons/archeo_melee.dm index 4b9664c28e..8cd1198b32 100644 --- a/code/modules/xenoarcheaology/finds/Weapons/archeo_melee.dm +++ b/code/modules/xenoarcheaology/finds/Weapons/archeo_melee.dm @@ -85,6 +85,8 @@ return /obj/item/melee/artifact_blade/attack(mob/living/M, mob/living/user, var/target_zone) + if(M == user) //No accidentally hitting yourself and exploding. + return var/zone = (user.hand ? "l_arm":"r_arm") //Which arm we're in! var/prior_force = force if(empowered) @@ -123,7 +125,7 @@ stored_blood += blood_loss //We add the damage dealt to our owner to our stored blood. /// If the thing we're hitting is dead, our faction, friendly, or synthetic, we get no blood. - if(M.stat < DEAD && M.faction != user.faction && !ispassive(M) && !issilicon(M) && !isbot(M) && isslime(M)) + if(M.stat < DEAD && M.faction != user.faction && !ispassive(M) && !issilicon(M) && !isbot(M) && !isslime(M)) stored_blood += force //If the user isn't 'worthy' they get a single swing before the sword THROWS itself away from them. Possibly even off-screen! @@ -161,10 +163,10 @@ to_chat(user, span_cult("The blade does not respond to your attempts, having recently performed an action!")) return last_special = world.time - if(stored_blood < 20) + if(stored_blood < 10) to_chat(user, span_cult("The blade does not respond to your attempts, seeming to have not enough blood to perform any actions!")) return - if(stored_blood > 100) + if(stored_blood >= 10) var/choice = tgui_input_list(user, "What action do you wish to have the blade perform?", "Download", abilities) if(choice && loc == user) switch(choice) diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm index 4ea50324e4..9ac2f70289 100644 --- a/code/modules/xenoarcheaology/finds/find_spawning.dm +++ b/code/modules/xenoarcheaology/finds/find_spawning.dm @@ -341,11 +341,13 @@ // possible_laser_paths += /obj/item/projectile/animate //Funny 'turns object into mimic' beam. Currently unticked in the .dme, but here in case it gets toggled! possible_laser_paths += /obj/item/projectile/ion possible_laser_paths += subtypesof(/obj/item/projectile/energy/floramut) + // THE BLACKLIST + possible_laser_paths -= list(/obj/item/projectile/beam/pulse, /obj/item/projectile/beam/pulse/heavy) var/new_laser = pick(possible_laser_paths) new_gun.projectile_type = new_laser new_item = new_gun new_item.icon_state = "egun[rand(1,18)]" - new_gun.desc = "This is an antique energy weapon, you're not sure if it will fire or not." + new_gun.desc = "This is an antique energy weapon." //10% chance to have an unchargeable cell //15% chance to gain a random amount of starting energy, otherwise start with an empty cell @@ -357,7 +359,7 @@ LAZYSET(new_gun.origin_tech, TECH_ARCANE, 1) else new_gun.power_supply.charge = 0 - item_type = "gun" + item_type = "Relic Laser Gun" /// Artifact type gun that requires a random caliber and selects a random bullet type it shoots out!. @@ -365,7 +367,7 @@ var/obj/item/gun/projectile/artifact/new_gun = new /obj/item/gun/projectile/artifact(src.loc) new_item = new_gun new_item.icon_state = "gun[rand(1,7)]" - item_type = "gun" + item_type = "Relic Gun" //There is no 'global list of all the gun caliber types' so...Whatever. This will have to do. (Side note: After further review, making it a global list would result in the gun requiring unobtainable calibers, so this is ideal.) //When someone does make a global list of all the calibers, replace the below with it. new_gun.caliber = "[pick(".357", "12g", ".38", "7.62mm", ".38", "9mm", "10mm", ".45", "5.45mm", "7.62mm")]" //A list of gun calibers that are obtainable. @@ -428,7 +430,7 @@ if(ARCHAEO_REMAINS_HUMANOID) //humanoid remains apply_prefix = FALSE - item_type = "humanoid organ]" + item_type = "humanoid organ" icon = 'icons/effects/blood.dmi' icon_state = "remains" apply_image_decorations = FALSE diff --git a/code/modules/xenoarcheaology/finds/finds_defines.dm b/code/modules/xenoarcheaology/finds/finds_defines.dm index d5f031022f..59c0d22308 100644 --- a/code/modules/xenoarcheaology/finds/finds_defines.dm +++ b/code/modules/xenoarcheaology/finds/finds_defines.dm @@ -63,7 +63,9 @@ var/global/list/finds_as_strings = list( 100;ARCHAEO_PLANT, 25;ARCHAEO_SHELL, 25;ARCHAEO_FOSSIL, - 5;ARCHAEO_BEARTRAP) + 25;ARCHAEO_REMAINS_HUMANOID, + 25;ARCHAEO_REMAINS_XENO, + 5;ARCHAEO_BEARTRAP,) if(DIGSITE_HOUSE) . = pick( 100;ARCHAEO_BOWL, @@ -91,13 +93,14 @@ var/global/list/finds_as_strings = list( 75;ARCHAEO_UNKNOWN, 50;ARCHAEO_HANDCUFFS, 50;ARCHAEO_BEARTRAP, - 50;ARCHAEO_IMPERION_CIRCUIT) //They're not even that USEFUL. Why was it a 1 in 1000 chance? + 50;ARCHAEO_IMPERION_CIRCUIT, //They're not even that USEFUL. Why was it a 1 in 1000 chance? + 25;ARCHAEO_REMAINS_ROBOT, + 10;ARCHAEO_TELECUBE) if(DIGSITE_TEMPLE) . = pick( 200;ARCHAEO_CULTROBES, 200;ARCHAEO_STATUETTE, 75;ARCHAEO_SOULSTONE, - 75;ARCHAEO_CULTBLADE, 75;ARCHAEO_TOME, 50;ARCHAEO_URN, 50;ARCHAEO_BOWL, @@ -105,14 +108,14 @@ var/global/list/finds_as_strings = list( 50;ARCHAEO_CRYSTAL, 50;ARCHAEO_RING, 50;ARCHAEO_UNKNOWN, + 25;ARCHAEO_CULTBLADE, 25;ARCHAEO_HANDCUFFS, + 25;ARCHAEO_REMAINS_HUMANOID, 10;ARCHAEO_KATANA, 10;ARCHAEO_METAL) if(DIGSITE_WAR) . = pick( - 100;ARCHAEO_GUN, - 100;ARCHAEO_KNIFE, - 75;ARCHAEO_LASER, + 75;ARCHAEO_KNIFE, 75;ARCHAEO_KATANA, 75;ARCHAEO_CLAYMORE, 75;ARCHAEO_CLUB, @@ -121,8 +124,13 @@ var/global/list/finds_as_strings = list( 50;ARCHAEO_CULTBLADE, 50;ARCHAEO_GASMASK, 50;ARCHAEO_ALIEN_ITEM, + 50;ARCHAEO_REMAINS_HUMANOID, + 50;ARCHAEO_REMAINS_ROBOT, + 50;ARCHAEO_REMAINS_XENO, 25;ARCHAEO_HANDCUFFS, 25;ARCHAEO_BEARTRAP, + 25;ARCHAEO_GUN, + 25;ARCHAEO_LASER, 25;ARCHAEO_TOOL) if(DIGSITE_MIDDEN) . = rand(1, MAX_ARCHAEO)