* Replaces /image with /mutable_appearance, where appropriate * Update miscellaneous.dm * Delete miscellaneous.dm.rej * Delete pet.dm.rej * Update pet.dm * Update species.dm * Update miscellaneous.dm * Update species.dm * Update miscellaneous.dm * Delete species.dm.rej * Update species.dm pretty sure I got all the indentation correct THIS time, ffs * Update species.dm * Update species.dm fucking tabs man, fucking tabs.
109 lines
3.3 KiB
Plaintext
109 lines
3.3 KiB
Plaintext
/obj/structure/blob/core
|
|
name = "blob core"
|
|
icon = 'icons/mob/blob.dmi'
|
|
icon_state = "blank_blob"
|
|
desc = "A huge, pulsating yellow mass."
|
|
obj_integrity = 400
|
|
max_integrity = 400
|
|
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 75, acid = 90)
|
|
explosion_block = 6
|
|
point_return = -1
|
|
health_regen = 0 //we regen in Life() instead of when pulsed
|
|
var/core_regen = 2
|
|
var/overmind_get_delay = 0 //we don't want to constantly try to find an overmind, this var tracks when we'll try to get an overmind again
|
|
var/resource_delay = 0
|
|
var/point_rate = 2
|
|
|
|
|
|
/obj/structure/blob/core/Initialize(mapload, client/new_overmind = null, new_rate = 2, placed = 0)
|
|
GLOB.blob_cores += src
|
|
START_PROCESSING(SSobj, src)
|
|
GLOB.poi_list |= src
|
|
update_icon() //so it atleast appears
|
|
if(!placed && !overmind)
|
|
create_overmind(new_overmind)
|
|
if(overmind)
|
|
update_icon()
|
|
point_rate = new_rate
|
|
. = ..()
|
|
|
|
/obj/structure/blob/core/scannerreport()
|
|
return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts."
|
|
|
|
/obj/structure/blob/core/update_icon()
|
|
cut_overlays()
|
|
color = null
|
|
var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
|
|
if(overmind)
|
|
blob_overlay.color = overmind.blob_reagent_datum.color
|
|
add_overlay(blob_overlay)
|
|
add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay"))
|
|
|
|
/obj/structure/blob/core/Destroy()
|
|
GLOB.blob_cores -= src
|
|
if(overmind)
|
|
overmind.blob_core = null
|
|
overmind = null
|
|
STOP_PROCESSING(SSobj, src)
|
|
GLOB.poi_list -= src
|
|
return ..()
|
|
|
|
/obj/structure/blob/core/ex_act(severity, target)
|
|
var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity
|
|
take_damage(damage, BRUTE, "bomb", 0)
|
|
|
|
/obj/structure/blob/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1)
|
|
. = ..()
|
|
if(obj_integrity > 0)
|
|
if(overmind) //we should have an overmind, but...
|
|
overmind.update_health_hud()
|
|
|
|
/obj/structure/blob/core/Life()
|
|
if(QDELETED(src))
|
|
return
|
|
if(!overmind)
|
|
create_overmind()
|
|
else
|
|
if(resource_delay <= world.time)
|
|
resource_delay = world.time + 10 // 1 second
|
|
overmind.add_points(point_rate)
|
|
obj_integrity = min(max_integrity, obj_integrity+core_regen)
|
|
if(overmind)
|
|
overmind.update_health_hud()
|
|
Pulse_Area(overmind, 12, 4, 3)
|
|
for(var/obj/structure/blob/normal/B in range(1, src))
|
|
if(prob(5))
|
|
B.change_to(/obj/structure/blob/shield/core, overmind)
|
|
..()
|
|
|
|
|
|
/obj/structure/blob/core/proc/create_overmind(client/new_overmind, override_delay)
|
|
if(overmind_get_delay > world.time && !override_delay)
|
|
return
|
|
|
|
overmind_get_delay = world.time + 150 //if this fails, we'll try again in 15 seconds
|
|
|
|
if(overmind)
|
|
qdel(overmind)
|
|
|
|
var/client/C = null
|
|
var/list/candidates = list()
|
|
|
|
if(!new_overmind)
|
|
candidates = pollCandidatesForMob("Do you want to play as a blob overmind?", ROLE_BLOB, null, ROLE_BLOB, 50, src) //we're technically not a mob but behave similarly
|
|
if(candidates.len)
|
|
C = pick(candidates)
|
|
else
|
|
C = new_overmind
|
|
|
|
if(C)
|
|
var/mob/camera/blob/B = new(src.loc, 1)
|
|
B.key = C.key
|
|
B.blob_core = src
|
|
src.overmind = B
|
|
update_icon()
|
|
if(B.mind && !B.mind.special_role)
|
|
B.mind.special_role = "Blob Overmind"
|
|
return 1
|
|
return 0
|