Skip to content

Commit

Permalink
Finishing up anomalous crystals
Browse files Browse the repository at this point in the history
  • Loading branch information
Ergovisavi committed Sep 9, 2016
1 parent 4e4f091 commit 114676c
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 74 deletions.
1 change: 1 addition & 0 deletions code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define ispodperson(A) (is_species(A, /datum/species/podperson))
#define isflyperson(A) (is_species(A, /datum/species/fly))
#define isslimeperson(A) (is_species(A, /datum/species/jelly/slime))
#define isshadowperson(A) (is_species(A, /datum/species/shadow))
#define iszombie(A) (is_species(A, /datum/species/zombie))
#define ishumanbasic(A) (is_species(A, /datum/species/human))

Expand Down
47 changes: 41 additions & 6 deletions code/game/turfs/simulated/floor/fancy_floor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,59 @@
initial_gas_mix = "TEMP=2.7"

/turf/open/floor/grass
name = "Grass patch"
name = "grass patch"
icon_state = "grass"
floor_tile = /obj/item/stack/tile/grass
broken_states = list("sand")
var/ore_type = /obj/item/weapon/ore/glass

/turf/open/floor/grass/New()
..()
spawn(1)
update_icon()

/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
if(istype(C, /obj/item/weapon/shovel) && params)
new ore_type(src)
new ore_type(src) //Make some sand if you shovel grass
user << "<span class='notice'>You shovel [src].</span>"
make_plating()
if(..())
return
if(istype(C, /obj/item/weapon/shovel))
new /obj/item/weapon/ore/glass(src)
new /obj/item/weapon/ore/glass(src) //Make some sand if you shovel grass
user << "<span class='notice'>You shovel the grass.</span>"
make_plating()

/turf/open/floor/grass/snow
name = "snow"
icon = 'icons/turf/snow.dmi'
desc = "Looks cold."
icon_state = "snow"
ore_type = /obj/item/stack/sheet/mineral/snow
planetary_atmos = TRUE
floor_tile = null
initial_gas_mix = "o2=22;n2=82;TEMP=180"
slowdown = 2


/turf/open/floor/grass/snow/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/crowbar))//You need to dig this turf out instead of crowbarring it
return
..()

/turf/open/floor/grass/snow/basalt //By your powers combined, I am captain planet
name = "volcanic floor"
icon = 'icons/turf/floors.dmi'
icon_state = "basalt"
ore_type = /obj/item/weapon/ore/glass/basalt
initial_gas_mix = "o2=14;n2=23;TEMP=300"
slowdown = 0

/turf/open/floor/grass/snow/basalt/New()
..()
if(prob(15))
icon_state = "basalt[rand(0, 12)]"
switch(icon_state)
if("basalt1", "basalt2", "basalt3")
SetLuminosity(1, 1)


/turf/open/floor/carpet
name = "Carpet"
Expand Down
4 changes: 3 additions & 1 deletion code/modules/mining/mine_turfs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,9 @@
/turf/open/floor/plating/asteroid/snow/temperatre
initial_gas_mix = "TEMP=255.37"

/turf/open/floor/plating/asteroid/snow/atmosphere
initial_gas_mix = "o2=22;n2=82;TEMP=180"

/turf/open/floor/plating/asteroid/New()
var/proper_name = name
..()
Expand Down Expand Up @@ -561,7 +564,6 @@
if(istype(src, /turf/open/floor/plating/asteroid))
user << "<span class='notice'>You dig a hole.</span>"
gets_dug()
layer = TURF_LAYER //In the event that our layer was increased to hide things under the surface
feedback_add_details("pick_used_mining","[W.type]")

if(istype(W,/obj/item/weapon/storage/bag/ore))
Expand Down
127 changes: 60 additions & 67 deletions code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -504,30 +498,21 @@ 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)
continue
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

Expand All @@ -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
Expand All @@ -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)

Expand All @@ -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)
..()
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -667,61 +656,67 @@ 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
density = 1
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"
Expand All @@ -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))
Expand Down

0 comments on commit 114676c

Please sign in to comment.