From 74c3df9683db5ddf2ff2b6f76d2ac4f7776f5c50 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sun, 20 Sep 2015 14:37:41 -0500 Subject: [PATCH] Holoparasites --- code/datums/uplink_item.dm | 7 ++ .../living/simple_animal/guardian/guardian.dm | 85 +++++++++++++++---- html/changelogs/kor-pr-guardian.yml | 39 +++++++++ 3 files changed, 114 insertions(+), 17 deletions(-) create mode 100644 html/changelogs/kor-pr-guardian.yml diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 387badc8c8b..d4ac71e22e9 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -243,6 +243,13 @@ var/list/uplink_items = list() if(istype(T)) T.TC_cost = cost +/datum/uplink_item/dangerous/guardian + name = "Holoparasites" + desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an organic host as a home base and source of fuel." + item = /obj/item/weapon/storage/box/syndie_kit/guardian + excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) + cost = 10 + // AMMUNITION /datum/uplink_item/ammo diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index fc2f7f81a65..1ad63ae8097 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -71,7 +71,9 @@ src.summoner.adjustBruteLoss(damage) if(damage) src.summoner << "Your [src.name] is under attack! You take damage!" - + if(src.summoner.stat == UNCONSCIOUS) + src.summoner << "Your body can't take the strain of sustaining [src.name] in this condition, it begins to fall apart!" + src.summoner.adjustCloneLoss(damage/2) /mob/living/simple_animal/hostile/guardian/ex_act(severity, target) switch (severity) @@ -154,10 +156,15 @@ playstyle_string = "As a Chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will randomly teleport enemies." environment_smash = 1 magic_fluff_string = "..And draw the Wizard, bringer of endless chaos!" - tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Nanoswarm online." + tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online." bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to sow havoc at random." pass_flags = PASSMOB +/mob/living/simple_animal/hostile/guardian/fire/Life() //Dies if the summoner dies + ..() + if(summoner) + summoner.ExtinguishMob() + summoner.adjust_fire_stacks(-20) /mob/living/simple_animal/hostile/guardian/fire/AttackingTarget() ..() @@ -182,7 +189,7 @@ playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." environment_smash = 2 magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated." - tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Nanoswarm online." + tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online." bio_fluff_string = "Your scarab swarm stirs to life, ready to tear apart your enemies." var/battlecry = "AT" @@ -216,7 +223,7 @@ melee_damage_upper = 15 playstyle_string = "As a Support type, you may toggle your basic attacks to a healing mode. In addition, Shift-Clicking on an adjacent mob will warp them to your bluespace beacon after a short delay." magic_fluff_string = "..And draw the CMO, a potent force of life...and death." - tech_fluff_string = "Boot sequence complete. Medical modules active. Bluespace modules activated. Nanoswarm online." + tech_fluff_string = "Boot sequence complete. Medical modules active. Bluespace modules activated. Holoparasite swarm online." bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of mending wounds and travelling via bluespace." var/turf/simulated/floor/beacon var/beacon_cooldown = 0 @@ -257,7 +264,7 @@ src << "You switch to healing mode." toggle = TRUE else - src << "You have to be recalled to toggle modes!." + src << "You have to be recalled to toggle modes!" /mob/living/simple_animal/hostile/guardian/healer/verb/Beacon() @@ -273,7 +280,11 @@ F.desc = "A recieving zone for bluespace teleportations. Building a wall over it should disable it." F.icon_state = "light_on-w" src << "Beacon placed! You may now warp targets to it, including your user, via Shift+Click. " + if(beacon) + beacon.ChangeTurf(/turf/simulated/floor/plating) beacon = F + beacon_cooldown = world.time+3000 + else src << "Your power is on cooldown. You must wait five minutes between placing beacons." @@ -287,8 +298,11 @@ if(!Adjacent(A)) src << "You must be adjacent to your target!" return + if((A.anchored)) + src << "Your target can not be anchored!" + return src << "You begin to warp [A]" - if(!do_mob(src, A, 50)) + if(do_mob(src, A, 50)) if(!A.anchored) if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills. if(beacon.air) @@ -313,7 +327,7 @@ /obj/item/projectile/guardian name = "crystal spray" icon_state = "guardian" - damage = 4 + damage = 5 damage_type = BRUTE /mob/living/simple_animal/hostile/guardian/ranged @@ -321,7 +335,7 @@ friendly = "quietly assesses" melee_damage_lower = 10 melee_damage_upper = 10 - damage_transfer = 1 + damage_transfer = 0.9 projectiletype = /obj/item/projectile/guardian ranged_cooldown_cap = 0 projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' @@ -329,7 +343,7 @@ range = 13 playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit." magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat." - tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Nanoswarm online." + tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online." bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spraying shards of crystal." var/list/snares = list() var/toggle = FALSE @@ -358,7 +372,7 @@ src << "You switch to scout mode." toggle = TRUE else - src << "You have to be recalled to toggle modes!." + src << "You have to be recalled to toggle modes!" /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() set name = "Set Surveillance Trap" @@ -396,6 +410,10 @@ var/turf/snare_loc = get_turf(src.loc) if(spawner) spawner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]." + if(istype(spawner, /mob/living/simple_animal/hostile/guardian)) + var/mob/living/simple_animal/hostile/guardian/G = spawner + if(G.summoner) + G.summoner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]." ////Bomb @@ -406,7 +424,7 @@ range = 13 playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via shift click." magic_fluff_string = "..And draw the Scientist, master of explosive death." - tech_fluff_string = "Boot sequence complete. Explosive modules active. Nanoswarm online." + tech_fluff_string = "Boot sequence complete. Explosive modules active. Holoparasite swarm online." bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of stealthily booby trapping items." var/bomb_cooldown = 0 @@ -477,10 +495,14 @@ var/use_message = "You shuffle the deck..." var/used_message = "All the cards seem to be blank now." var/failure_message = "..And draw a card! It's...blank? Maybe you should try again later." + var/ling_failure = "The deck refuses to respond to a souless creature such as you." var/list/possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive") var/random = TRUE /obj/item/weapon/guardiancreator/attack_self(mob/living/user) + if(user.mind && user.mind.changeling) + user << "[ling_failure]" + return if(used == TRUE) user << "[used_message]" return @@ -557,7 +579,6 @@ user << "[G.magic_fluff_string]." if("tech") user << "[G.tech_fluff_string]." - G.attacktext = "swarms" G.speak_emote = list("states") if("bio") user << "[G.bio_fluff_string]." @@ -568,21 +589,20 @@ random = FALSE /obj/item/weapon/guardiancreator/tech - name = "parasitic nanomachine injector" - desc = "Though powerful in combat, these nanomachines require a living host as a source of fuel and home base." + name = "holoparasite injector" + desc = "It contains alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." icon = 'icons/obj/syringe.dmi' icon_state = "combat_hypo" theme = "tech" - mob_name = "Nanomachine Swarm" + mob_name = "Holoparasite" use_message = "You start to power on the injector..." used_message = "The injector has already been used." failure_message = "...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER." + ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you." /obj/item/weapon/guardiancreator/tech/choose random = FALSE - - /obj/item/weapon/guardiancreator/biological name = "scarab egg cluster" desc = "A parasitic species that will nest in the closest living creature upon birth. While not great for your health, they'll defend their new 'hive' to the death." @@ -596,3 +616,34 @@ /obj/item/weapon/guardiancreator/biological/choose random = FALSE + + +/obj/item/weapon/paper/guardian + name = "Holoparasite Guide" + icon_state = "alienpaper_words" + info = {"A list of Holoparasite Types
+ +
+ Chaos: Ignites mobs on touch. teleports them at random on attack. Automatically extinguishes the user if they catch fire.
+
+ Standard:Devestating close combat attacks and high damage resist. No special powers.
+
+ Ranged: Has two modes. Ranged: Extremely weak, highly spammable projectile attack. Scout: Can not attack, but can move through walls. Can lay surveillance snares in either mode.
+
+ Support:Has two modes. Combat: Medium power attacks and damage resist. Healer: Attacks heal damage, but low damage resist and slow movemen. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
+
+ Explosive: High damage resist and medium power attack. Can turn any object into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered.
+"} + +/obj/item/weapon/paper/guardian/update_icon() + return + + +/obj/item/weapon/storage/box/syndie_kit/guardian + name = "holoparasite injector kit" + +/obj/item/weapon/storage/box/syndie_kit/guardian/New() + ..() + new /obj/item/weapon/guardiancreator/tech/choose(src) + new /obj/item/weapon/paper/guardian(src) + return \ No newline at end of file diff --git a/html/changelogs/kor-pr-guardian.yml b/html/changelogs/kor-pr-guardian.yml new file mode 100644 index 00000000000..9de2e58366d --- /dev/null +++ b/html/changelogs/kor-pr-guardian.yml @@ -0,0 +1,39 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Kor + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Guardian Spirit types and powers have been heavily reworked. Full details of each type are available on the wiki." + - rscadd: "Guardian damage transfer to users now deals cloneloss if their user is in crit." + - rscadd: "Guardians are now undergoing a trial run in the traitor uplink, under the name of Holoparasites." +