Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BOUNTY] [WIP] Bloodlings #1103

Open
wants to merge 120 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
bd0a033
start of coding bloodling
Rex9001 Jan 4, 2024
24c9033
objectives, working on action grants
Rex9001 Jan 4, 2024
9425a20
Esl moment
Rex9001 Jan 4, 2024
31641df
work on the abilities framework
Rex9001 Jan 4, 2024
309d042
enhanced vision wooooo
Rex9001 Jan 4, 2024
cd88941
it fucking compiles, we are so back
Rex9001 Jan 4, 2024
b65ac2a
bloodling have free thermals
Rex9001 Jan 4, 2024
0c6dfe6
start of biomass absorption
Rex9001 Jan 4, 2024
cf2ca9f
NEEDS WORK [absorb ability]
Rex9001 Jan 4, 2024
e39ade2
more biomass 2023
Rex9001 Jan 4, 2024
6fba3b8
trying to get this biomass bullshit to work
Rex9001 Jan 4, 2024
f98767a
Update bloodling_mob.dm
Rex9001 Jan 4, 2024
717703a
biomass 2024
Rex9001 Jan 5, 2024
fc2745f
work on evolutions
Rex9001 Jan 6, 2024
670503c
Infested thralls work
Rex9001 Jan 7, 2024
77e242e
Infested thralls
Rex9001 Jan 7, 2024
2b501b8
begining of infest
Rex9001 Jan 8, 2024
4211dd3
infest ability (click actions still dont work)
Rex9001 Jan 8, 2024
8daa97c
booob the builder
Rex9001 Jan 8, 2024
fded4f5
status tab, pending rework for biomass
Rex9001 Jan 10, 2024
4146c74
infinite health lings, switching to biomass
Rex9001 Jan 11, 2024
deb46ec
Begining devour, some recoding of absorb
Rex9001 Jan 14, 2024
e3d13be
Devour limb
Rex9001 Jan 20, 2024
d73271d
Evolution fix, dissonant shriek and transfer biomass
Rex9001 Jan 24, 2024
a6921b9
Update bloodling_mob.dm
Rex9001 Jan 24, 2024
1943f35
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Jan 24, 2024
f68620b
whiplash ability
Rex9001 Jan 26, 2024
2163ca9
Adds in minions, refactors the mob itself, adds the saymode to a modu…
Rex9001 Jan 28, 2024
825ac6e
mind checks, transfer biomass fixes, devour fixes,
Rex9001 Jan 29, 2024
39883be
magic word to fix compile issues
Rex9001 Jan 29, 2024
d9af68f
maybe fixes lint idk imma go to the gym
Rex9001 Jan 29, 2024
9940815
Update bloodling_mob.dm
Rex9001 Jan 29, 2024
bb61378
Update bloodling_mob.dm
Rex9001 Jan 30, 2024
b923bad
Gibs bloodlings on death
Rex9001 Jan 30, 2024
ba62642
Heal and absorb biomass rework
Rex9001 Feb 3, 2024
7fd46a9
rat warrens, still missing spawning acid
Rex9001 Feb 6, 2024
42a04da
Finishes off rat warren, bloodlings take more burn, the hide ability …
Rex9001 Feb 8, 2024
caa62c3
Update bloodling_structures.dm
Rex9001 Feb 12, 2024
edb769f
Give_life
Rex9001 Feb 25, 2024
e635c65
hopefully fixes a bug with give life
Rex9001 Mar 5, 2024
b9c6b11
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Mar 5, 2024
c3c2020
Big ol update DEVOUR IS NOT DONE
Rex9001 Mar 10, 2024
6955e86
Refactors abilities to NOT be click abilities
Rex9001 Mar 10, 2024
331d145
Fixes some dumb click action stuff
Rex9001 Mar 17, 2024
f81df67
Hopefully fixes unit test issues
Rex9001 Mar 21, 2024
3e8540d
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Mar 21, 2024
6d58386
Polling was changed Yipeeeee
Rex9001 Mar 21, 2024
58555a3
Update tgstation.dme
Rex9001 Mar 22, 2024
e1def3b
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Mar 22, 2024
678e124
Create ascension.dm
Rex9001 Mar 26, 2024
baf9f2a
Ascension, NOT DONE JUST TO SYNC WITH PC
Rex9001 Apr 4, 2024
ca9eb83
Large ascension changes, it now causes something similar to midas
Rex9001 Apr 5, 2024
759dddd
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Apr 12, 2024
5b2b4e5
Update ascension.dm
Rex9001 Apr 13, 2024
c0f58a8
bill nye here
Rex9001 Apr 13, 2024
2288adb
Update ascension.dm
Rex9001 Apr 19, 2024
078deb6
starting t
Rex9001 Apr 22, 2024
1850f42
flesh tile sprite
Rex9001 Apr 22, 2024
2abe106
this is so cool
Rex9001 Apr 22, 2024
c941abb
Batch suggestions
Rex9001 May 4, 2024
3249fe6
RRRRREVIEWS!!!
Rex9001 May 8, 2024
72d7017
more reviews
Rex9001 May 8, 2024
b70996b
Infested rework
Rex9001 May 16, 2024
d33c91b
Update ascension.dm
Rex9001 May 18, 2024
e26a8ae
bloodling hive speaaaakkkk
Rex9001 May 22, 2024
13a4a97
Update infested_thrall.dm
Rex9001 May 23, 2024
cf6a5e7
changes
Rex9001 May 23, 2024
1a536a8
ds
Rex9001 May 24, 2024
182ec4c
trying to get smoothiung to fucking work
Rex9001 May 24, 2024
4beba3a
Praise be
Rex9001 May 25, 2024
ae8f66c
wow s m o o t h
Rex9001 May 25, 2024
ff41db1
S
Rex9001 May 27, 2024
227c307
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Jun 8, 2024
daea3af
Update tgstation.dme
Rex9001 Jun 8, 2024
65d49f3
Here we gooooo
Rex9001 Jun 9, 2024
00651f8
slightly lowers infection time
Rex9001 Jun 9, 2024
bca311f
Create bloodling.dm
Rex9001 Jun 9, 2024
e0b1b70
whooops
Rex9001 Jun 9, 2024
93551d3
spesswalksssss
Rex9001 Jun 10, 2024
7ea55e8
Works on corpses and mindless humans
Rex9001 Jun 14, 2024
08556fc
uses code from https://github.com/Bubberstation/Bubberstation/pull/28…
Rex9001 Jun 17, 2024
0ac7bd8
Update bloodling_hud.dm
Rex9001 Jun 17, 2024
7596f80
Update bloodling_mob.dm
Rex9001 Jun 17, 2024
1bfc289
Update bloodling_mob.dm
Rex9001 Jun 18, 2024
eea8372
d
Rex9001 Jun 19, 2024
83155d7
icons!
Rex9001 Jun 19, 2024
e0a775f
ill fix it later
Rex9001 Jun 24, 2024
2092c2c
Update bloodling_abilities.dmi
Rex9001 Jul 18, 2024
1e8a6d1
adds the build sprite from Brunoute25
Rex9001 Jul 18, 2024
d69769d
test
Rex9001 Jul 26, 2024
ab53ec5
possibly???
Rex9001 Jul 27, 2024
9fe1f0f
Merge branch 'bloodling_2024' of https://github.com/Rex9001code/Rex_m…
Rex9001 Jul 31, 2024
e1cfca1
ts file
Rex9001 Jul 31, 2024
77f52d5
fixes
Rex9001 Aug 1, 2024
78b218b
transfer icon
Rex9001 Aug 1, 2024
8890cfb
implementation
Rex9001 Aug 1, 2024
a1eaa26
Update backgrounds.dmi
Rex9001 Aug 2, 2024
52931ba
Fixes and icons!
Rex9001 Aug 2, 2024
3bd2373
another bieyes banger
Rex9001 Aug 5, 2024
2132c86
Update devour.dm
Rex9001 Aug 5, 2024
bb0ed9f
Give Life from Bieyes!
Rex9001 Aug 5, 2024
4ebfb83
bieyes adds more shit, this man cant be stopped!!!
Rex9001 Aug 5, 2024
4789abe
Ascend and mend sprites from LeafBladeX
Rex9001 Aug 7, 2024
7f312c4
ascend and mend
Rex9001 Aug 7, 2024
84aad6a
Update absorb_biomass.dm
Rex9001 Aug 7, 2024
d8e06b2
t
Rex9001 Aug 8, 2024
229e767
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Aug 19, 2024
e6ac53c
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Aug 26, 2024
c4546fb
safe
Rex9001 Aug 28, 2024
4b7309e
Adds infest and whiplash icons from bieyes
Rex9001 Aug 28, 2024
459aef0
Makes bloodling work, compile + finished ascension
Rex9001 Oct 4, 2024
070d892
Wall of flesh by ThePooba
Rex9001 Oct 7, 2024
bb052ee
implementations
Rex9001 Oct 7, 2024
55e5c97
Adds in 2 sprites by cannibalhunter
Rex9001 Oct 8, 2024
541e079
Compiler errors fixed
Rex9001 Oct 9, 2024
d025a16
Merge remote-tracking branch 'upstream/master' into bloodling_2024
Rex9001 Oct 9, 2024
dcca7e3
b
Rex9001 Oct 24, 2024
55b108c
fix
Rex9001 Nov 4, 2024
f4121bc
silly stuff
Rex9001 Nov 4, 2024
90bc6db
eatin gibbs
Rex9001 Nov 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion code/__DEFINES/icon_smoothing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,13 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_LOWERED_PLASTEEL S_TURF(61)
#define SMOOTH_GROUP_FISSURE S_TURF(62)

// Monkestation edit start
#define SMOOTH_GROUP_FLOOR_BLOODLING S_TURF(63) ////turf/open/floor/bloodling

#define SMOOTH_GROUP_MUSHROOM S_TURF(63)

#define MAX_S_TURF 63 //Always match this value with the one above it.
#define MAX_S_TURF 64 //Always match this value with the one above it.
// Monkestation edit end

#define S_OBJ(num) ("-" + #num + ",")
/* /obj included */
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/role_preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define ROLE_TRAITOR "Traitor"
#define ROLE_WIZARD "Wizard"
#define ROLE_CLOCK_CULTIST "Clock Cultist" //monkestation edit
#define ROLE_BLOODLING "Bloodling" // monkestation edit
#define ROLE_OPFOR_CANDIDATE "OPFOR Candidate"
#define ROLE_ASSAULT_OPERATIVE "Assault Operative"

Expand Down Expand Up @@ -75,6 +76,7 @@
#define ROLE_LAVALAND "Lavaland"
#define ROLE_LAZARUS_BAD "Slaved Revived Mob"
#define ROLE_LAZARUS_GOOD "Friendly Revived Mob"
#define ROLE_BLOODLING_THRALL "Bloodling Thrall" // monkestation edit

#define ROLE_CLOWN_OPERATIVE "Clown Operative"
#define ROLE_FREE_GOLEM "Free Golem"
Expand Down Expand Up @@ -134,6 +136,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_CLOCK_CULTIST = 14,
ROLE_BLOODSUCKER = 0,
ROLE_ASSAULT_OPERATIVE = 14,
ROLE_BLOODLING = 15,

// Midround
ROLE_ABDUCTOR = 0,
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@

#define MODE_CUSTOM_SAY_ERASE_INPUT "erase_input"

#define MODE_BLOODLING "bloodling" // monkestation edit
Rex9001 marked this conversation as resolved.
Show resolved Hide resolved

//Spans. Robot speech, italics, etc. Applied in compose_message().
#define SPAN_ROBOT "robot"
#define SPAN_YELL "yell"
Expand Down
15 changes: 15 additions & 0 deletions code/__DEFINES/~monkestation/antagonists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,18 @@
#define BORER_HIDING (1<<3)
/// If the borer can produce eggs without a host
#define BORER_ALONE_PRODUCTION (1<<4)

/// If the given mob is a bloodling
#define IS_BLOODLING(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/bloodling))

/// If the given mob is a bloodling thrall
#define IS_BLOODLING_THRALL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/changeling/bloodling_thrall))

/// If the given mob is a simplemob bloodling thrall
#define IS_SIMPLEMOB_BLOODLING_THRALL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/infested_thrall))

/// If the given mob is a bloodling thrall or bloodling
#define IS_BLOODLING_OR_THRALL(mob) (IS_BLOODLING(mob) || IS_BLOODLING_THRALL(mob) || IS_SIMPLEMOB_BLOODLING_THRALL(mob))

/// Antagonist panel groups
#define ANTAG_GROUP_BLOODLING "Bloodling"
Binary file modified icons/mob/huds/antag_hud.dmi
Binary file not shown.
4 changes: 4 additions & 0 deletions monkestation/code/__DEFINES/mobfactions.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// Antagonist factions

/// Bloodlings and their minions
#define FACTION_BLOODLING "bloodling"
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/datum/action/cooldown/mob_cooldown/bloodling/absorb
name = "Absorb Biomass"
desc = "Allows you to absorb a dead carbon or living mob close to you."
button_icon_state = "absorb"
/// If the bloodling is currently absorbing
var/is_absorbing = FALSE
/// Items we can absorb
var/list/absorbable_types = list(
/obj/effect/decal/cleanable/blood,
/obj/item/food.
)

Check failure on line 11 in monkestation/code/modules/antagonists/bloodling/abilities/absorb_biomass.dm

View workflow job for this annotation

GitHub Actions / Run Linters

OD0012: Expected a path for an upward search

/datum/action/cooldown/mob_cooldown/bloodling/absorb/PreActivate(atom/target)
if(owner == target)
return FALSE

if(is_absorbing)
owner.balloon_alert(owner, "Already absorbing!")
return FALSE

if(is_type_in_list(target, absorbable_types))
return ..()

if(!ismob(target))
owner.balloon_alert(owner, "doesn't work on non-mobs!")
return FALSE

var/mob/living/mob_to_absorb = target

if(!HAS_TRAIT(mob_to_absorb, MOB_ORGANIC))
owner.balloon_alert(owner, "doesn't work on non-organics!")
return FALSE

if(!iscarbon(mob_to_absorb))
Rex9001 marked this conversation as resolved.
Show resolved Hide resolved
return ..()

var/mob/living/carbon/carbon_to_absorb = target
if(!carbon_to_absorb.stat == DEAD)
owner.balloon_alert(owner, "only works on dead carbons!")
return FALSE
return ..()

/datum/action/cooldown/mob_cooldown/bloodling/absorb/Activate(atom/target)
. = ..()
var/mob/living/basic/bloodling/our_mob = owner
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if multiple actions use this var it might be worth having it be set on the base /bloodling action type, also I dont see a reason to make this be its own proc instead of just being on Activate()

/// How long it takes to absorb something
var/absorb_time = 5 SECONDS
/// How much biomass is gained from absorbing something
var/biomass_gain = 10

our_mob.balloon_alert(our_mob, "You begin absorbing [target]!")

if(is_type_in_list(target, absorbable_types))
our_mob.add_biomass(biomass_gain)
qdel(target)
our_mob.visible_message(
span_alertalien("[our_mob] wraps its tendrils around [target]. It absorbs it!"),
span_noticealien("You wrap your tendrils around [target] and absorb it!"),
)
return TRUE

var/mob/living/mob_to_absorb = target

// This prevents the mob from being dragged away from the bloodling during the process
mob_to_absorb.AddComponentFrom(REF(src), /datum/component/leash, our_mob, 1)

if(!iscarbon(mob_to_absorb))
biomass_gain = max(mob_to_absorb.getMaxHealth() * 0.5, biomass_gain)
if(biomass_gain > 150)
our_mob.balloon_alert(our_mob, "[target] is too large!")
return FALSE

if(biomass_gain < 10)
biomass_gain = 10
else
var/mob/living/carbon/carbon_to_absorb = target
if(ismonkey(carbon_to_absorb))
biomass_gain = 50
else
biomass_gain = 100
absorb_time = 10 SECONDS

// Setting this to true means they cant target the same person multiple times, or other people since it allows for speedrunning
is_absorbing = TRUE

if(!do_after(owner, absorb_time, mob_to_absorb))
mob_to_absorb.RemoveComponentSource(REF(src), /datum/component/leash)
return FALSE

is_absorbing = FALSE
our_mob.add_biomass(biomass_gain)
mob_to_absorb.gib()
our_mob.visible_message(
span_alertalien("[our_mob] wraps its tendrils around [target]. It absorbs it!"),
span_noticealien("You wrap your tendrils around [target] and absorb it!"),
)
playsound(our_mob, 'sound/items/eatfood.ogg', 20)
return TRUE
105 changes: 105 additions & 0 deletions monkestation/code/modules/antagonists/bloodling/abilities/ascension.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/datum/action/cooldown/bloodling/ascension
name = "Ascend"
desc = "We reach our last form...Mass consumption is required. Costs 500 Biomass and takes 5 minutes for you to ascend."
button_icon_state = "ascend"
biomass_cost = 500
var/static/datum/dimension_theme/chosen_theme
var/list/responses = list("Yes", "No")

/datum/action/cooldown/bloodling/ascension/Activate(atom/target)
var/mob/living/basic/bloodling/proper/our_mob = owner
// Adds 500 biomass back
our_mob.add_biomass(500)
var/tgui_response = tgui_alert(our_mob, "Are you prepared to ascend?", "Ascension", responses, 0)
if(tgui_response == "No")
return
var/turf/our_turf = our_mob.get_turf

Check failure on line 16 in monkestation/code/modules/antagonists/bloodling/abilities/ascension.dm

View workflow job for this annotation

GitHub Actions / Run Linters

undefined field: "get_turf" on /mob/living/basic/bloodling/proper

Check failure on line 16 in monkestation/code/modules/antagonists/bloodling/abilities/ascension.dm

View workflow job for this annotation

GitHub Actions / Run Linters

OD0404: Unknown identifier "get_turf"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
var/turf/our_turf = our_mob.get_turf
var/turf/our_turf = get_turf(our_mob)

priority_announce("ALERT: LEVEL 4 BIOHAZARD MORPHING IN [our_turf.get_area]. STOP IT AT ALL COSTS.", "Biohazard")

Check failure on line 17 in monkestation/code/modules/antagonists/bloodling/abilities/ascension.dm

View workflow job for this annotation

GitHub Actions / Run Linters

undefined field: "get_area" on /turf

Check failure on line 17 in monkestation/code/modules/antagonists/bloodling/abilities/ascension.dm

View workflow job for this annotation

GitHub Actions / Run Linters

OD0404: Unknown identifier "our_turf"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
priority_announce("ALERT: LEVEL 4 BIOHAZARD MORPHING IN [our_turf.get_area]. STOP IT AT ALL COSTS.", "Biohazard")
priority_announce("ALERT: LEVEL 4 BIOHAZARD MORPHING IN [get_area(our_turf)]. STOP IT AT ALL COSTS.", "Biohazard")

our_mob.evolution(6)
// Waits 5 minutes before calling the ascension
addtimer(CALLBACK(src, PROC_REF(ascend), our_mob), 5 MINUTES)
return TRUE

/datum/action/cooldown/bloodling/ascension/proc/ascend(mob/living/basic/bloodling)
// Calls the shuttle
SSshuttle.requestEvac(src, "ALERT: LEVEL 4 BIOHAZARD DETECTED. ORGANISM CONTAINMENT HAS FAILED. EVACUATE REMAINING PERSONEL.")

if(isnull(chosen_theme))
chosen_theme = new /datum/dimension_theme/bloodling()
var/turf/start_turf = get_turf(bloodling)
var/greatest_dist = 0
var/list/turfs_to_transform = list()
for (var/turf/transform_turf as anything in GLOB.station_turfs)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

im so tempted to convert this into a proc because its used in like 5 places now

if (!chosen_theme.can_convert(transform_turf))
continue
var/dist = get_dist(start_turf, transform_turf)
if (dist > greatest_dist)
greatest_dist = dist
if (!turfs_to_transform["[dist]"])
turfs_to_transform["[dist]"] = list()
turfs_to_transform["[dist]"] += transform_turf

if (chosen_theme.can_convert(start_turf))
chosen_theme.apply_theme(start_turf)

for (var/iterator in 1 to greatest_dist)
if(!turfs_to_transform["[iterator]"])
continue
addtimer(CALLBACK(src, PROC_REF(transform_area), turfs_to_transform["[iterator]"]), (5 SECONDS) * iterator)

/datum/action/cooldown/bloodling/ascension/proc/transform_area(list/turfs)
for (var/turf/transform_turf as anything in turfs)
if (!chosen_theme.can_convert(transform_turf))
continue
chosen_theme.apply_theme(transform_turf)
CHECK_TICK


/turf/open/misc/bloodling
name = "nerve threads"
icon = 'monkestation/code/modules/antagonists/bloodling/sprites/flesh_tile.dmi'
icon_state = "flesh_tile-0"
base_icon_state = "flesh_tile"
baseturfs = /turf/open/floor/plating
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_BLOODLING
canSmoothWith = SMOOTH_GROUP_FLOOR_BLOODLING
layer = HIGH_TURF_LAYER
underfloor_accessibility = UNDERFLOOR_HIDDEN

/turf/open/misc/bloodling/Initialize(mapload)
. = ..()
if(is_station_level(z))
GLOB.station_turfs += src

var/matrix/translation = new
translation.Translate(-9, -9)
transform = translation
QUEUE_SMOOTH(src)


/turf/open/misc/bloodling/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
. = ..()
if (!.)
return

if(!smoothing_flags)
return

var/matrix/translation = new
translation.Translate(-9, -9)
transform = translation

underlay_appearance.transform = transform

/datum/dimension_theme/bloodling
icon = 'icons/obj/food/meat.dmi'
icon_state = "meat"
sound = 'sound/items/eatfood.ogg'
replace_floors = list(/turf/open/misc/bloodling = 1)
replace_walls = /turf/closed/wall/material/meat
window_colour = "#5c0c0c"
replace_objs = list(\
/obj/machinery/atmospherics/components/unary/vent_scrubber = list(/obj/structure/meateor_fluff/eyeball = 1), \
/obj/machinery/atmospherics/components/unary/vent_pump = list(/obj/structure/meateor_fluff/eyeball = 1),)

Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/datum/action/cooldown/mob_cooldown/bloodling
name = "debug"
desc = "Yell at coders if you see this"
button_icon = 'monkestation/code/modules/antagonists/bloodling/sprites/bloodling_abilities.dmi'
background_icon = 'monkestation/icons/mob/actions/backgrounds.dmi'
background_icon_state = "bg_bloodling"
/// The biomass cost of the ability
var/biomass_cost = 0

/datum/action/cooldown/mob_cooldown/bloodling/IsAvailable(feedback = FALSE)
. = ..()
if(!.)
return FALSE
// Basically we only want bloodlings to have this
if(!istype(owner, /mob/living/basic/bloodling))
Rex9001 marked this conversation as resolved.
Show resolved Hide resolved
stack_trace("A non-bloodling mob has obtained a bloodling action!")
return FALSE

var/mob/living/basic/bloodling/our_mob = owner
if(our_mob.biomass <= biomass_cost)
return FALSE

return TRUE

/datum/action/cooldown/mob_cooldown/bloodling/PreActivate(atom/target)
if(get_dist(owner, target) > 1)
return FALSE

var/mob/living/basic/bloodling/our_mob = owner
. = ..()
if(!.)
return FALSE

// Since bloodlings evolve it may result in them or their abilities going away
// so we can just return true here
if(QDELETED(src) || QDELETED(owner))
return TRUE

if(click_to_activate && our_mob.biomass < biomass_cost)
unset_click_ability(owner, refund_cooldown = FALSE)

our_mob.add_biomass(-biomass_cost)

return TRUE

// A non mob version for certain abilities (mainly hide, build, slam, shriek, whiplash)
/datum/action/cooldown/bloodling
name = "debug"
desc = "Yell at coders if you see this"
button_icon = 'monkestation/code/modules/antagonists/bloodling/sprites/bloodling_abilities.dmi'
background_icon = 'monkestation/icons/mob/actions/backgrounds.dmi'
background_icon_state = "bg_bloodling"
// The biomass cost of the ability
var/biomass_cost = 0

/datum/action/cooldown/bloodling/IsAvailable(feedback = FALSE)
. = ..()
if(!.)
return FALSE
// Basically we only want bloodlings to have this
if(!istype(owner, /mob/living/basic/bloodling))
return FALSE
var/mob/living/basic/bloodling/our_mob = owner
if(our_mob.biomass <= biomass_cost)
return FALSE
// Hardcoded for the bloodling biomass system. So it will not function on non-bloodlings
return istype(owner, /mob/living/basic/bloodling)

/datum/action/cooldown/bloodling/PreActivate(atom/target)
var/mob/living/basic/bloodling/our_mob = owner
. = ..()
if(!.)
return FALSE
// Since bloodlings evolve it may result in them or their abilities going away
// so we can just return true here
if(QDELETED(src) || QDELETED(owner))
return TRUE

our_mob.add_biomass(-biomass_cost)

return TRUE
Loading
Loading