mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-24 05:38:15 +01:00
Collapsed space vines, glowshrooms and biomass into one spreading-plant system.
This commit is contained in:
@@ -1,126 +0,0 @@
|
||||
/*
|
||||
/obj/effect/biomass
|
||||
icon = 'icons/obj/biomass.dmi'
|
||||
icon_state = "stage1"
|
||||
opacity = 0
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 20 //DEBUG
|
||||
var/health = 10
|
||||
var/stage = 1
|
||||
var/obj/effect/rift/originalRift = null //the originating rift of that biomass
|
||||
var/maxDistance = 15 //the maximum length of a thread
|
||||
var/newSpreadDistance = 10 //the length of a thread at which new ones are created
|
||||
var/curDistance = 1 //the current length of a thread
|
||||
var/continueChance = 3 //weighed chance of continuing in the same direction. turning left or right has 1 weight both
|
||||
var/spreadDelay = 1 //will change to something bigger later, but right now I want it to spread as fast as possible for testing
|
||||
|
||||
/obj/effect/rift
|
||||
icon = 'icons/obj/biomass.dmi'
|
||||
icon_state = "rift"
|
||||
var/list/obj/effect/biomass/linkedBiomass = list() //all the biomass patches that have spread from it
|
||||
var/newicon = 1 //DEBUG
|
||||
|
||||
/obj/effect/rift/New()
|
||||
set background = 1
|
||||
|
||||
..()
|
||||
|
||||
for(var/turf/T in orange(1,src))
|
||||
if(!IsValidBiomassLoc(T))
|
||||
continue
|
||||
var/obj/effect/biomass/starting = new /obj/effect/biomass(T)
|
||||
starting.set_dir(get_dir(src,starting))
|
||||
starting.originalRift = src
|
||||
linkedBiomass += starting
|
||||
spawn(1) //DEBUG
|
||||
starting.icon_state = "[newicon]"
|
||||
|
||||
/obj/effect/rift/Del()
|
||||
for(var/obj/effect/biomass/biomass in linkedBiomass)
|
||||
del(biomass)
|
||||
..()
|
||||
|
||||
/obj/effect/biomass/New()
|
||||
set background = 1
|
||||
|
||||
..()
|
||||
if(!IsValidBiomassLoc(loc,src))
|
||||
del(src)
|
||||
return
|
||||
spawn(1) //so that the dir and stuff can be set by the source first
|
||||
if(curDistance >= maxDistance)
|
||||
return
|
||||
switch(dir)
|
||||
if(NORTHWEST)
|
||||
set_dir(NORTH)
|
||||
if(NORTHEAST)
|
||||
set_dir(EAST)
|
||||
if(SOUTHWEST)
|
||||
set_dir(WEST)
|
||||
if(SOUTHEAST)
|
||||
set_dir(SOUTH)
|
||||
sleep(spreadDelay)
|
||||
Spread()
|
||||
|
||||
/obj/effect/biomass/proc/Spread(var/direction = dir)
|
||||
set background = 1
|
||||
var/possibleDirsInt = 0
|
||||
|
||||
for(var/newDirection in cardinal)
|
||||
if(newDirection == turn(direction,180)) //can't go backwards
|
||||
continue
|
||||
var/turf/T = get_step(loc,newDirection)
|
||||
if(!IsValidBiomassLoc(T,src))
|
||||
continue
|
||||
possibleDirsInt |= newDirection
|
||||
|
||||
var/list/possibleDirs = list()
|
||||
|
||||
if(possibleDirsInt & direction)
|
||||
for(var/i=0 , i<continueChance , i++)
|
||||
possibleDirs += direction
|
||||
if(possibleDirsInt & turn(direction,90))
|
||||
possibleDirs += turn(direction,90)
|
||||
if(possibleDirsInt & turn(direction,-90))
|
||||
possibleDirs += turn(direction,-90)
|
||||
|
||||
if(!possibleDirs.len)
|
||||
return
|
||||
|
||||
direction = pick(possibleDirs)
|
||||
|
||||
var/obj/effect/biomass/newBiomass = new /obj/effect/biomass(get_step(src,direction))
|
||||
newBiomass.curDistance = curDistance + 1
|
||||
newBiomass.maxDistance = maxDistance
|
||||
newBiomass.set_dir(direction)
|
||||
newBiomass.originalRift = originalRift
|
||||
newBiomass.icon_state = "[originalRift.newicon]" //DEBUG
|
||||
originalRift.linkedBiomass += newBiomass
|
||||
|
||||
if(!(curDistance%newSpreadDistance))
|
||||
var/obj/effect/rift/newrift = new /obj/effect/rift(loc)
|
||||
if(originalRift.newicon <= 3)
|
||||
newrift.newicon = originalRift.newicon + 1
|
||||
// NewSpread()
|
||||
|
||||
/obj/effect/biomass/proc/NewSpread(maxDistance = 15)
|
||||
set background = 1
|
||||
for(var/turf/T in orange(1,src))
|
||||
if(!IsValidBiomassLoc(T,src))
|
||||
continue
|
||||
var/obj/effect/biomass/starting = new /obj/effect/biomass(T)
|
||||
starting.set_dir(get_dir(src,starting))
|
||||
starting.maxDistance = maxDistance
|
||||
|
||||
/proc/IsValidBiomassLoc(turf/location,obj/effect/biomass/source = null)
|
||||
set background = 1
|
||||
for(var/obj/effect/biomass/biomass in location)
|
||||
if(biomass != source)
|
||||
return 0
|
||||
if(istype(location,/turf/space))
|
||||
return 0
|
||||
if(location.density)
|
||||
return 0
|
||||
return 1
|
||||
*/
|
||||
@@ -42,7 +42,7 @@ var/global/list/image/splatter_cache=list()
|
||||
dry()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/update_icon()
|
||||
if(basecolor == "rainbow") basecolor = "#[pick(rainbow)]"
|
||||
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
|
||||
color = basecolor
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
||||
@@ -165,11 +165,11 @@ var/global/list/image/splatter_cache=list()
|
||||
|
||||
var/image/giblets = new(base_icon, "[icon_state]_flesh", dir)
|
||||
if(!fleshcolor || fleshcolor == "rainbow")
|
||||
fleshcolor = "#[pick(rainbow)]"
|
||||
fleshcolor = "#[get_random_colour(1)]"
|
||||
giblets.color = fleshcolor
|
||||
|
||||
var/icon/blood = new(base_icon,"[icon_state]",dir)
|
||||
if(basecolor == "rainbow") basecolor = "#[pick(rainbow)]"
|
||||
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
|
||||
blood.Blend(basecolor,ICON_MULTIPLY)
|
||||
|
||||
icon = blood
|
||||
|
||||
Reference in New Issue
Block a user