mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
Finishing up anomalous crystals
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user