Finishing up anomalous crystals

This commit is contained in:
Ergovisavi
2016-09-08 19:29:49 -07:00
parent 4e4f091905
commit 114676c548
4 changed files with 105 additions and 74 deletions
@@ -46,7 +46,7 @@ Difficulty: Very Hard
del_on_death = 1
medal_type = MEDAL_PREFIX
score_type = COLOSSUS_SCORE
loot = list(/obj/machinery/smartfridge/black_box)
loot = list(/obj/machinery/anomalous_crystal/random)
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
deathmessage = "disintegrates, leaving a glowing core in its wake."
death_sound = 'sound/magic/demon_dies.ogg'
@@ -368,14 +368,11 @@ Difficulty: Very Hard
icon_state = "anomaly_crystal"
luminosity = 8
burn_state = LAVA_PROOF
pixel_y = -4
use_power = 0
density = 1
languages_spoken = ALL
languages_understood = ALL
flags = HEAR
var/activation_turf = null
var/aim_direction = SOUTH
var/activation_method = "touch"
var/activation_damage_type = null
var/last_use_timer = 0
@@ -384,7 +381,7 @@ Difficulty: Very Hard
var/activation_sound = 'sound/effects/break_stone.ogg'
/obj/machinery/anomalous_crystal/New()
activation_method = pick("touch","beam","bullet","energy","magic","mob_bump","heat","weapon","speech")
activation_method = pick("touch","laser","bullet","energy","magic","mob_bump","heat","weapon","speech")
..()
/obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans)
@@ -405,18 +402,10 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/bullet_act(obj/item/projectile/P, def_zone)
..()
if(istype(P, /obj/item/projectile/beam))
ActivationReaction(P.firer, "beam", P.damage_type)
return
if(istype(P, /obj/item/projectile/bullet))
ActivationReaction(P.firer, "bullet", P.damage_type)
return
if(istype(P, /obj/item/projectile/energy))
ActivationReaction(P.firer, "energy",P.damage_type)
return
if(istype(P, /obj/item/projectile/magic))
ActivationReaction(P.firer, "magic", P.damage_type)
return
ActivationReaction(P.firer, P.flag, P.damage_type)
/obj/machinery/anomalous_crystal/proc/ActivationReaction(mob/user, method, damtype)
if(world.time < last_use_timer)
@@ -434,12 +423,17 @@ Difficulty: Very Hard
if(ismob(AM))
ActivationReaction(AM,"mob_bump")
/obj/machinery/anomalous_crystal/random/New()//Just a random crysal spawner for loot
var/random_crystal = pick(typesof(/obj/machinery/anomalous_crystal) - /obj/machinery/anomalous_crystal/random)
new random_crystal(loc)
qdel(src)
/obj/machinery/anomalous_crystal/honk //Strips and equips you as a clown. I apologize for nothing
activation_method = "mob_bump"
activation_sound = 'sound/items/bikehorn.ogg'
/obj/machinery/anomalous_crystal/honk/ActivationReaction(mob/user)
if(ishuman(user) && ..() && !(user in affected_targets))
if(..() && ishuman(user) && !(user in affected_targets))
var/mob/living/carbon/human/H = user
for(var/obj/item/W in H)
H.unEquip(W)
@@ -448,6 +442,10 @@ Difficulty: Very Hard
qdel(C)
affected_targets.Add(H)
/obj/machinery/anomalous_crystal/honk/New()
..()
activation_method = pick("mob_bump","speech")
/obj/machinery/anomalous_crystal/theme_warp //Warps the area you're in to look like a new one
activation_method = "touch"
cooldown_add = 200
@@ -458,25 +456,22 @@ Difficulty: Very Hard
var/NewTerrainTables
var/list/NewFlora = list()
var/florachance = 8
var/FloorLayerChange
/obj/machinery/anomalous_crystal/theme_warp/New()
..()
terrain_theme = pick("lavaland","winter","jungle","ayy lmao")
switch(terrain_theme)
if("lavaland")//Depressurizes the place... and free cult metal, I guess.
NewTerrainFloors = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
NewTerrainFloors = /turf/open/floor/grass/snow/basalt
NewTerrainWalls = /turf/closed/wall/mineral/cult
NewFlora = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
florachance = 1
FloorLayerChange = 2.6
if("winter") //Depressurizes the place, and snow terrain is slow to move in
NewTerrainFloors = /turf/open/floor/plating/asteroid/snow/temperatre
if("winter") //Snow terrain is slow to move in and cold! Get the assistants to shovel your driveway.
NewTerrainFloors = /turf/open/floor/grass/snow
NewTerrainWalls = /turf/closed/wall/mineral/wood
NewTerrainChairs = /obj/structure/chair/wood/normal
NewTerrainTables = /obj/structure/table/glass
NewFlora = list(/obj/structure/flora/grass/green, /obj/structure/flora/grass/brown, /obj/structure/flora/grass/both)
FloorLayerChange = 2.6
if("jungle") //Beneficial due to actually having breathable air. Plus, monkeys.
NewTerrainFloors = /turf/open/floor/grass
NewTerrainWalls = /turf/closed/wall/mineral/sandstone
@@ -485,7 +480,6 @@ Difficulty: Very Hard
NewFlora = list(/obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/leafybush,
/obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/tree/palm, /mob/living/carbon/monkey)
florachance = 20
FloorLayerChange = 2.6
if("ayy lmao") //Beneficial, turns stuff into alien alloy which is useful to cargo and research. Also repairs atmos.
NewTerrainFloors = /turf/open/floor/plating/abductor
NewTerrainWalls = /turf/closed/wall/mineral/abductor
@@ -504,17 +498,9 @@ Difficulty: Very Hard
if(O.air)
var/datum/gas_mixture/G = O.air
G.copy_from_turf(O)
if(FloorLayerChange)
O.layer = FloorLayerChange
if(prob(florachance) && NewFlora.len)
var/density_checks = 1
for(var/atom/junk in O)
if(junk.density)
density_checks = 0
break
if(density_checks)
var/atom/Picked = pick(NewFlora)
new Picked(O)
if(prob(florachance) && NewFlora.len && !is_blocked_turf(O))
var/atom/Picked = pick(NewFlora)
new Picked(O)
continue
if(istype(T, /turf/closed/wall) && NewTerrainWalls)
T.ChangeTurf(NewTerrainWalls)
@@ -522,12 +508,11 @@ Difficulty: Very Hard
if(istype(Stuff, /obj/structure/chair) && NewTerrainChairs)
var/obj/structure/chair/Original = Stuff
var/obj/structure/chair/C = new NewTerrainChairs(Original.loc)
C.dir = Original.dir
C.setDir(Original.dir)
qdel(Stuff)
continue
if(istype(Stuff, /obj/structure/table) && NewTerrainTables)
new NewTerrainTables(Stuff.loc)
qdel(Stuff)
continue
affected_targets += A
@@ -544,7 +529,7 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/emitter/ActivationReaction(mob/user, method)
if(..())
var/obj/item/projectile/P = new generated_projectile(get_turf(src))
P.dir = dir
P.setDir(dir)
switch(dir)
if(NORTH)
P.yo = 20
@@ -568,7 +553,7 @@ Difficulty: Very Hard
for(var/i in range(1, src))
if(ishuman(i))
var/mob/living/carbon/human/H = i
if(H.stat == DEAD && !is_species(H, /datum/species/shadow))
if(H.stat == DEAD && !isshadowperson(H))
H.set_species(/datum/species/shadow, 1)
H.revive(1,0)
@@ -579,6 +564,7 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/helpers/ActivationReaction(mob/user, method)
if(..() && !ready_to_deploy)
ready_to_deploy = 1
notify_ghosts("An anomalous crystal has been activated in [get_area(src)]!", enter_link = "<a href=?src=\ref[src];ghostjoin=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK)
/obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user)
..()
@@ -615,12 +601,15 @@ Difficulty: Very Hard
verb_exclaim = "zaps"
verb_yell = "bangs"
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
luminosity = 4
faction = list("neutral")
languages_spoken = 0
languages_understood = ALL
del_on_death = 1
unsuitable_atmos_damage = 0
flying = 1
minbodytemp = 0
maxbodytemp = 1500
var/heal_power = 5
/mob/living/simple_animal/hostile/lightgeist/New()
@@ -667,27 +656,18 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/possessor/ActivationReaction(mob/user, method)
if(..())
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/mobcheck = 0
for(var/i in range(1, src))
if(istype(i, /mob/living/simple_animal))
var/mob/living/simple_animal/A = i
if(A.melee_damage_upper || A.mob_size >= MOB_SIZE_LARGE || A.ckey || A.stat)
break
A.verbs -= /mob/living/verb/pulled
var/obj/structure/closet/stasis/S = new /obj/structure/closet/stasis(A)
H.loc = S
H.disabilities += MUTE
H.status_flags |= GODMODE
H.mind.transfer_to(A)
var/obj/effect/proc_holder/spell/targeted/exit_possession/P = new /obj/effect/proc_holder/spell/targeted/exit_possession
A.mind.AddSpell(P)
mobcheck = 1
for(var/mob/living/simple_animal/A in range(1, src))
if(A.melee_damage_upper > 5 || A.mob_size >= MOB_SIZE_LARGE || A.ckey || A.stat)
break
var/obj/structure/closet/stasis/S = new /obj/structure/closet/stasis(A)
user.forceMove(S)
mobcheck = 1
break
if(!mobcheck)
new /mob/living/simple_animal/cockroach(loc) //Just in case there aren't any animals on the station, this will leave you with a terrible option to possess if you feel like it
/obj/structure/closet/stasis //Abstract game mechanic workarounds are the best
/obj/structure/closet/stasis
name = "quantum entanglement stasis warp field"
desc = "You can hardly comprehend this thing... which is why you can't see it."
icon_state = null //This shouldn't even be visible, so if it DOES show up, at least nobody will notice
@@ -695,33 +675,48 @@ Difficulty: Very Hard
anchored = 1
health = 0
var/mob/living/simple_animal/holder_animal
var/turf/last_location
/obj/structure/closet/stasis/process()
for(var/mob/living/L in src)
L.Stun(1)
if(holder_animal.stat == DEAD || !istype(loc, /mob/living/simple_animal))
if(!isanimal(loc))
dump_contents(1)
holder_animal.gib()
return
if(holder_animal)
if(holder_animal.stat == DEAD)
dump_contents(1)
holder_animal.gib()
/obj/structure/closet/stasis/New(mob/user)
/obj/structure/closet/stasis/New()
..()
holder_animal = user
if(isanimal(loc))
holder_animal = loc
START_PROCESSING(SSobj, src)
/obj/structure/closet/stasis/Entered(atom/A)
if(isliving(A) && holder_animal)
var/mob/living/L = A
L.notransform = 1
L.disabilities |= MUTE
L.status_flags |= GODMODE
L.mind.transfer_to(holder_animal)
var/obj/effect/proc_holder/spell/targeted/exit_possession/P = new /obj/effect/proc_holder/spell/targeted/exit_possession
holder_animal.mind.AddSpell(P)
holder_animal.verbs -= /mob/living/verb/pulled
/obj/structure/closet/stasis/dump_contents(var/kill = 0)
STOP_PROCESSING(SSobj, src)
for(var/mob/living/L in src)
L.disabilities -= MUTE
L.disabilities &= ~MUTE
L.status_flags &= ~GODMODE
L.stunned = 0
L.update_canmove()
L.notransform = 0
holder_animal.mind.transfer_to(L)
L.mind.RemoveSpell(/obj/effect/proc_holder/spell/targeted/exit_possession)
if(kill || !istype(loc, /mob/living/simple_animal))
if(kill || !isanimal(loc))
L.death(0)
..()
/obj/structure/closet/stasis/emp_act()
return
/obj/effect/proc_holder/spell/targeted/exit_possession
name = "Exit Possession"
desc = "Exits the body you are possessing"
@@ -734,8 +729,6 @@ Difficulty: Very Hard
selection_type = "view"
action_icon_state = "exit_possession"
sound = null
smoke_spread = 1
smoke_amt = 1
/obj/effect/proc_holder/spell/targeted/exit_possession/cast(list/targets, mob/user = usr)
if(!istype(user.loc, /turf/open/floor))