mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-10 01:22:41 +00:00
* vampire rework * fixes and tweaks * cleanup + tweaks * grug stomp * TGUI * TGUI rebuild * UID fix * debugging cooldown fix * first review changes * subclass refactor * tweaks + some sprites * blackbox logging * tweaks + grammar * minor UI tweaks * ability icon sprites. * placeholder sprite warning fix * melee mod code comment warning * nullification rework * final sprites! * fixes * sabre review pt 1 Co-authored-by: SabreML <57483089+SabreML@users.noreply.github.com> * sabre review pt2 * sprites readd * tgui rebuild * removes traitor vampires * fixes * readds sprites * runtime fixes * hotfix * more runtime fixes * glare tweak. less confusing when the vampire is stunned. * gargantua nerf * minor tweaks. * hemomancer nerfs * bugfixes and cleanup * I did a dumb * couple of fixes * confusion and shadow snare fixes * hemomancer nerfs part 2 electric boogaloo * TGUI rebuild * fixes and easier events * Umbrae tweaks * gargantua tweak * umbrae nerf 2 electric boogaloo. also var edit suggestion * runtime fix * buffs blood nutrition to be in line with its metabolic rate * Henk stuff Co-authored-by: Farie82 <farie82@users.noreply.github.com> * more review changes * final tweak * affected request + runtime fix * FUCK * fat fucks * darkness tweaks * UMBRAE AAAAAAAAAAAAAHH * force doors bugfix * either git or I am drunk * admin rejuv fix * I CANNOT SPELL * shitnt code * steel review * tgui rebuild * mochi review * vampire ability usage logging Co-authored-by: SabreML <57483089+SabreML@users.noreply.github.com> Co-authored-by: Farie82 <farie82@users.noreply.github.com>
177 lines
5.2 KiB
Plaintext
177 lines
5.2 KiB
Plaintext
//separate dm since hydro is getting bloated already
|
|
|
|
/obj/structure/glowshroom
|
|
name = "glowshroom"
|
|
desc = "Mycena Bregprox, a species of mushroom that glows in the dark."
|
|
anchored = TRUE
|
|
opacity = 0
|
|
density = FALSE
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "glowshroom" //replaced in New
|
|
layer = ABOVE_NORMAL_TURF_LAYER
|
|
max_integrity = 30
|
|
var/delay = 1200
|
|
var/floor = 0
|
|
var/generation = 1
|
|
var/spreadIntoAdjacentChance = 60
|
|
var/obj/item/seeds/myseed = /obj/item/seeds/glowshroom
|
|
|
|
/obj/structure/glowshroom/extinguish_light()
|
|
visible_message("<span class='warning'>[src] withers away!</span>")
|
|
qdel(src)
|
|
|
|
/obj/structure/glowshroom/glowcap
|
|
name = "glowcap"
|
|
desc = "Mycena Ruthenia, a species of mushroom that, while it does glow in the dark, is not actually bioluminescent."
|
|
icon_state = "glowcap"
|
|
myseed = /obj/item/seeds/glowshroom/glowcap
|
|
|
|
/obj/structure/glowshroom/shadowshroom
|
|
name = "shadowshroom"
|
|
desc = "Mycena Umbra, a species of mushroom that emits shadow instead of light."
|
|
icon_state = "shadowshroom"
|
|
myseed = /obj/item/seeds/glowshroom/shadowshroom
|
|
|
|
/obj/structure/glowshroom/shadowshroom/extinguish_light()
|
|
return
|
|
|
|
/obj/structure/glowshroom/single/Spread()
|
|
return
|
|
|
|
/obj/structure/glowshroom/examine(mob/user)
|
|
. = ..()
|
|
. += "This is a [generation]\th generation [name]!"
|
|
|
|
/obj/structure/glowshroom/Destroy()
|
|
QDEL_NULL(myseed)
|
|
return ..()
|
|
|
|
/obj/structure/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats)
|
|
..()
|
|
if(newseed)
|
|
myseed = newseed.Copy()
|
|
myseed.forceMove(src)
|
|
else
|
|
myseed = new myseed(src)
|
|
if(mutate_stats) //baby mushrooms have different stats :3
|
|
myseed.adjust_potency(rand(-3,6))
|
|
myseed.adjust_yield(rand(-1,2))
|
|
myseed.adjust_production(rand(-3,6))
|
|
myseed.adjust_endurance(rand(-3,6))
|
|
delay = delay - myseed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
|
|
obj_integrity = myseed.endurance
|
|
max_integrity = myseed.endurance
|
|
if(myseed.get_gene(/datum/plant_gene/trait/glow))
|
|
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
|
|
set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color)
|
|
setDir(CalcDir())
|
|
var/base_icon_state = initial(icon_state)
|
|
if(!floor)
|
|
switch(dir) //offset to make it be on the wall rather than on the floor
|
|
if(NORTH)
|
|
pixel_y = 32
|
|
if(SOUTH)
|
|
pixel_y = -32
|
|
if(EAST)
|
|
pixel_x = 32
|
|
if(WEST)
|
|
pixel_x = -32
|
|
icon_state = "[base_icon_state][rand(1,3)]"
|
|
else //if on the floor, glowshroom on-floor sprite
|
|
icon_state = "[base_icon_state]f"
|
|
|
|
addtimer(CALLBACK(src, .proc/Spread), delay)
|
|
|
|
/obj/structure/glowshroom/proc/Spread()
|
|
var/turf/ownturf = get_turf(src)
|
|
var/shrooms_planted = 0
|
|
for(var/i in 1 to myseed.yield)
|
|
if(prob(1/(generation * generation) * 100))//This formula gives you diminishing returns based on generation. 100% with 1st gen, decreasing to 25%, 11%, 6, 4, 2...
|
|
var/list/possibleLocs = list()
|
|
var/spreadsIntoAdjacent = FALSE
|
|
|
|
if(prob(spreadIntoAdjacentChance))
|
|
spreadsIntoAdjacent = TRUE
|
|
|
|
for(var/turf/simulated/floor/earth in view(3,src))
|
|
if(!ownturf.CanAtmosPass(earth))
|
|
continue
|
|
if(spreadsIntoAdjacent || !locate(/obj/structure/glowshroom) in view(1,earth))
|
|
possibleLocs += earth
|
|
CHECK_TICK
|
|
|
|
if(!possibleLocs.len)
|
|
break
|
|
|
|
var/turf/newLoc = pick(possibleLocs)
|
|
|
|
var/shroomCount = 0 //hacky
|
|
var/placeCount = 1
|
|
for(var/obj/structure/glowshroom/shroom in newLoc)
|
|
shroomCount++
|
|
for(var/wallDir in GLOB.cardinal)
|
|
var/turf/isWall = get_step(newLoc,wallDir)
|
|
if(isWall.density)
|
|
placeCount++
|
|
if(shroomCount >= placeCount)
|
|
continue
|
|
|
|
var/obj/structure/glowshroom/child = new type(newLoc, myseed, TRUE)
|
|
child.generation = generation + 1
|
|
shrooms_planted++
|
|
|
|
CHECK_TICK
|
|
else
|
|
shrooms_planted++ //if we failed due to generation, don't try to plant one later
|
|
if(shrooms_planted < myseed.yield) //if we didn't get all possible shrooms planted, try again later
|
|
myseed.yield -= shrooms_planted
|
|
addtimer(CALLBACK(src, .proc/Spread), delay)
|
|
|
|
/obj/structure/glowshroom/proc/CalcDir(turf/location = loc)
|
|
var/direction = 16
|
|
|
|
for(var/wallDir in GLOB.cardinal)
|
|
var/turf/newTurf = get_step(location,wallDir)
|
|
if(newTurf.density)
|
|
direction |= wallDir
|
|
|
|
for(var/obj/structure/glowshroom/shroom in location)
|
|
if(shroom == src)
|
|
continue
|
|
if(shroom.floor) //special
|
|
direction &= ~16
|
|
else
|
|
direction &= ~shroom.dir
|
|
|
|
var/list/dirList = list()
|
|
|
|
for(var/i=1,i<=16,i <<= 1)
|
|
if(direction & i)
|
|
dirList += i
|
|
|
|
if(dirList.len)
|
|
var/newDir = pick(dirList)
|
|
if(newDir == 16)
|
|
floor = 1
|
|
newDir = 1
|
|
return newDir
|
|
|
|
floor = 1
|
|
return 1
|
|
|
|
/obj/structure/glowshroom/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
|
if(damage_type == BURN && damage_amount)
|
|
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
|
|
|
|
/obj/structure/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
|
..()
|
|
if(exposed_temperature > 300)
|
|
take_damage(5, BURN, 0, 0)
|
|
|
|
/obj/structure/glowshroom/acid_act(acidpwr, acid_volume)
|
|
. = 1
|
|
visible_message("<span class='danger'>[src] melts away!</span>")
|
|
var/obj/effect/decal/cleanable/molten_object/I = new (get_turf(src))
|
|
I.desc = "Looks like this was \an [src] some time ago."
|
|
qdel(src)
|